vendor: 87 bytes, lines 1-4
1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3 4/***/ "./
4app/utils/api.js": 5/*!**************************!*\ 6 !*** ./app/utils/api.js ***! 7 \**************************/ 8/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 9 10"use strict"; 11 12 13var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 14Object.defineProperty(exports, "__esModule", ({ 15 value: true 16})); 17exports["default"] = void 0; 18var _axios = _interopRequireDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 19var _drupalSettings = drupalSettings, 20 openingHours = _drupalSettings.openingHours, 21 path = _drupalSettings.path; 22var _openingHours$apiBase = openingHours.apiBaseUrl, 23 apiBaseUrl = _openingHours$apiBase === void 0 ? null : _openingHours$apiBase; 24var _path$pathPrefix = path.pathPrefix, 25 pathPrefix = _path$pathPrefix === void 0 ? "" : _path$pathPrefix; 26var _default = exports["default"] = function _default() { 27 return _axios.default.create({ 28 baseURL: "".concat(apiBaseUrl || window.location.origin, "/").concat(pathPrefix, "jsonapi"), 29 headers: { 30 'Accept': 'application/json', 31 'Content-Type': 'application/json' 32 } 33 }); 34}; 35 36/***/ }), 37
vendor: 342 bytes, lines 38-47
38/***/ "./node_modules/axios/index.js": 39/*!*************************************!*\ 40 !*** ./node_modules/axios/index.js ***! 41 \*************************************/ 42/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 43 44module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js"); 45 46/***/ }), 47
vendor: 6,886 bytes, lines 48-227
48/***/ "./node_modules/axios/lib/adapters/xhr.js": 49/*!************************************************!*\ 50 !*** ./node_modules/axios/lib/adapters/xhr.js ***! 51 \************************************************/ 52/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 53 54"use strict"; 55 56 57var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 58var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js"); 59var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js"); 60var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 61var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js"); 62var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js"); 63var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js"); 64var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js"); 65module.exports = function xhrAdapter(config) { 66 return new Promise(function dispatchXhrRequest(resolve, reject) { 67 var requestData = config.data; 68 var requestHeaders = config.headers; 69 var responseType = config.responseType; 70 if (utils.isFormData(requestData)) { 71 delete requestHeaders['Content-Type']; // Let the browser set it 72 } 73 var request = new XMLHttpRequest(); 74 75 // HTTP basic authentication 76 if (config.auth) { 77 var username = config.auth.username || ''; 78 var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; 79 requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); 80 } 81 var fullPath = buildFullPath(config.baseURL, config.url); 82 request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); 83 84 // Set the request timeout in MS 85 request.timeout = config.timeout; 86 function onloadend() { 87 if (!request) { 88 return; 89 } 90 // Prepare the response 91 var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; 92 var responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response; 93 var response = { 94 data: responseData, 95 status: request.status, 96 statusText: request.statusText, 97 headers: responseHeaders, 98 config: config, 99 request: request 100 }; 101 settle(resolve, reject, response); 102 103 // Clean up request 104 request = null; 105 } 106 if ('onloadend' in request) { 107 // Use onloadend if available 108 request.onloadend = onloadend; 109 } else { 110 // Listen for ready state to emulate onloadend 111 request.onreadystatechange = function handleLoad() { 112 if (!request || request.readyState !== 4) { 113 return; 114 } 115 116 // The request errored out and we didn't get a response, this will be 117 // handled by onerror instead 118 // With one exception: request that using file: protocol, most browsers 119 // will return status as 0 even though it's a successful request 120 if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { 121 return; 122 } 123 // readystate handler is calling before onerror or ontimeout handlers, 124 // so we should call onloadend on the next 'tick' 125 setTimeout(onloadend); 126 }; 127 } 128 129 // Handle browser request cancellation (as opposed to a manual cancellation) 130 request.onabort = function handleAbort() { 131 if (!request) { 132 return; 133 } 134 reject(createError('Request aborted', config, 'ECONNABORTED', request)); 135 136 // Clean up request 137 request = null; 138 }; 139 140 // Handle low level network errors 141 request.onerror = function handleError() { 142 // Real errors are hidden from us by the browser 143 // onerror should only fire if it's a network error 144 reject(createError('Network Error', config, null, request)); 145 146 // Clean up request 147 request = null; 148 }; 149 150 // Handle timeout 151 request.ontimeout = function handleTimeout() { 152 var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded'; 153 if (config.timeoutErrorMessage) { 154 timeoutErrorMessage = config.timeoutErrorMessage; 155 } 156 reject(createError(timeoutErrorMessage, config, config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED', request)); 157 158 // Clean up request 159 request = null; 160 }; 161 162 // Add xsrf header 163 // This is only done if running in a standard browser environment. 164 // Specifically not if we're in a web worker, or react-native. 165 if (utils.isStandardBrowserEnv()) { 166 // Add xsrf header 167 var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined; 168 if (xsrfValue) { 169 requestHeaders[config.xsrfHeaderName] = xsrfValue; 170 } 171 } 172 173 // Add headers to the request 174 if ('setRequestHeader' in request) { 175 utils.forEach(requestHeaders, function setRequestHeader(val, key) { 176 if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { 177 // Remove Content-Type if data is undefined 178 delete requestHeaders[key]; 179 } else { 180 // Otherwise add header to the request 181 request.setRequestHeader(key, val); 182 } 183 }); 184 } 185 186 // Add withCredentials to request if needed 187 if (!utils.isUndefined(config.withCredentials)) { 188 request.withCredentials = !!config.withCredentials; 189 } 190 191 // Add responseType to request if needed 192 if (responseType && responseType !== 'json') { 193 request.responseType = config.responseType; 194 } 195 196 // Handle progress if needed 197 if (typeof config.onDownloadProgress === 'function') { 198 request.addEventListener('progress', config.onDownloadProgress); 199 } 200 201 // Not all browsers support upload events 202 if (typeof config.onUploadProgress === 'function' && request.upload) { 203 request.upload.addEventListener('progress', config.onUploadProgress); 204 } 205 if (config.cancelToken) { 206 // Handle cancellation 207 config.cancelToken.promise.then(function onCanceled(cancel) { 208 if (!request) { 209 return; 210 } 211 request.abort(); 212 reject(cancel); 213 // Clean up request 214 request = null; 215 }); 216 } 217 if (!requestData) { 218 requestData = null; 219 } 220 221 // Send the request 222 request.send(requestData); 223 }); 224}; 225 226/***/ }), 227
vendor: 2,380 bytes, lines 228-291
228/***/ "./node_modules/axios/lib/axios.js": 229/*!*****************************************!*\ 230 !*** ./node_modules/axios/lib/axios.js ***! 231 \*****************************************/ 232/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 233 234"use strict"; 235 236 237var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 238var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 239var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js"); 240var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 241var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js"); 242 243/** 244 * Create an instance of Axios 245 * 246 * @param {Object} defaultConfig The default config for the instance 247 * @return {Axios} A new instance of Axios 248 */ 249function createInstance(defaultConfig) { 250 var context = new Axios(defaultConfig); 251 var instance = bind(Axios.prototype.request, context); 252 253 // Copy axios.prototype to instance 254 utils.extend(instance, Axios.prototype, context); 255 256 // Copy context to instance 257 utils.extend(instance, context); 258 return instance; 259} 260 261// Create the default instance to be exported 262var axios = createInstance(defaults); 263 264// Expose Axios class to allow class inheritance 265axios.Axios = Axios; 266 267// Factory for creating new instances 268axios.create = function create(instanceConfig) { 269 return createInstance(mergeConfig(axios.defaults, instanceConfig)); 270}; 271 272// Expose Cancel & CancelToken 273axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 274axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js"); 275axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 276 277// Expose all/spread 278axios.all = function all(promises) { 279 return Promise.all(promises); 280}; 281axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js"); 282 283// Expose isAxiosError 284axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./node_modules/axios/lib/helpers/isAxiosError.js"); 285module.exports = axios; 286 287// Allow use of default import syntax in TypeScript 288module.exports["default"] = axios; 289 290/***/ }), 291
vendor: 632 bytes, lines 292-317
292/***/ "./node_modules/axios/lib/cancel/Cancel.js": 293/*!*************************************************!*\ 294 !*** ./node_modules/axios/lib/cancel/Cancel.js ***! 295 \*************************************************/ 296/***/ ((module) => { 297 298"use strict"; 299 300 301/** 302 * A `Cancel` is an object that is thrown when an operation is canceled. 303 * 304 * @class 305 * @param {string=} message The message. 306 */ 307function Cancel(message) { 308 this.message = message; 309} 310Cancel.prototype.toString = function toString() { 311 return 'Cancel' + (this.message ? ': ' + this.message : ''); 312}; 313Cancel.prototype.__CANCEL__ = true; 314module.exports = Cancel; 315 316/***/ }), 317
vendor: 1,614 bytes, lines 318-380
318/***/ "./node_modules/axios/lib/cancel/CancelToken.js": 319/*!******************************************************!*\ 320 !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! 321 \******************************************************/ 322/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 323 324"use strict"; 325 326 327var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 328 329/** 330 * A `CancelToken` is an object that can be used to request cancellation of an operation. 331 * 332 * @class 333 * @param {Function} executor The executor function. 334 */ 335function CancelToken(executor) { 336 if (typeof executor !== 'function') { 337 throw new TypeError('executor must be a function.'); 338 } 339 var resolvePromise; 340 this.promise = new Promise(function promiseExecutor(resolve) { 341 resolvePromise = resolve; 342 }); 343 var token = this; 344 executor(function cancel(message) { 345 if (token.reason) { 346 // Cancellation has already been requested 347 return; 348 } 349 token.reason = new Cancel(message); 350 resolvePromise(token.reason); 351 }); 352} 353 354/** 355 * Throws a `Cancel` if cancellation has been requested. 356 */ 357CancelToken.prototype.throwIfRequested = function throwIfRequested() { 358 if (this.reason) { 359 throw this.reason; 360 } 361}; 362 363/** 364 * Returns an object that contains a new `CancelToken` and a function that, when called, 365 * cancels the `CancelToken`. 366 */ 367CancelToken.source = function source() { 368 var cancel; 369 var token = new CancelToken(function executor(c) { 370 cancel = c; 371 }); 372 return { 373 token: token, 374 cancel: cancel 375 }; 376}; 377module.exports = CancelToken; 378 379/***/ }), 380
vendor: 360 bytes, lines 381-395
381/***/ "./node_modules/axios/lib/cancel/isCancel.js": 382/*!***************************************************!*\ 383 !*** ./node_modules/axios/lib/cancel/isCancel.js ***! 384 \***************************************************/ 385/***/ ((module) => { 386 387"use strict"; 388 389 390module.exports = function isCancel(value) { 391 return !!(value && value.__CANCEL__); 392}; 393 394/***/ }), 395
vendor: 4,900 bytes, lines 396-533
396/***/ "./node_modules/axios/lib/core/Axios.js": 397/*!**********************************************!*\ 398 !*** ./node_modules/axios/lib/core/Axios.js ***! 399 \**********************************************/ 400/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 401 402"use strict"; 403 404 405var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 406var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 407var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js"); 408var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js"); 409var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 410var validator = __webpack_require__(/*! ../helpers/validator */ "./node_modules/axios/lib/helpers/validator.js"); 411var validators = validator.validators; 412/** 413 * Create a new instance of Axios 414 * 415 * @param {Object} instanceConfig The default config for the instance 416 */ 417function Axios(instanceConfig) { 418 this.defaults = instanceConfig; 419 this.interceptors = { 420 request: new InterceptorManager(), 421 response: new InterceptorManager() 422 }; 423} 424 425/** 426 * Dispatch a request 427 * 428 * @param {Object} config The config specific for this request (merged with this.defaults) 429 */ 430Axios.prototype.request = function request(config) { 431 /*eslint no-param-reassign:0*/ 432 // Allow for axios('example/url'[, config]) a la fetch API 433 if (typeof config === 'string') { 434 config = arguments[1] || {}; 435 config.url = arguments[0]; 436 } else { 437 config = config || {}; 438 } 439 config = mergeConfig(this.defaults, config); 440 441 // Set config.method 442 if (config.method) { 443 config.method = config.method.toLowerCase(); 444 } else if (this.defaults.method) { 445 config.method = this.defaults.method.toLowerCase(); 446 } else { 447 config.method = 'get'; 448 } 449 var transitional = config.transitional; 450 if (transitional !== undefined) { 451 validator.assertOptions(transitional, { 452 silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'), 453 forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'), 454 clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0') 455 }, false); 456 } 457 458 // filter out skipped interceptors 459 var requestInterceptorChain = []; 460 var synchronousRequestInterceptors = true; 461 this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { 462 if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { 463 return; 464 } 465 synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; 466 requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); 467 }); 468 var responseInterceptorChain = []; 469 this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { 470 responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); 471 }); 472 var promise; 473 if (!synchronousRequestInterceptors) { 474 var chain = [dispatchRequest, undefined]; 475 Array.prototype.unshift.apply(chain, requestInterceptorChain); 476 chain = chain.concat(responseInterceptorChain); 477 promise = Promise.resolve(config); 478 while (chain.length) { 479 promise = promise.then(chain.shift(), chain.shift()); 480 } 481 return promise; 482 } 483 var newConfig = config; 484 while (requestInterceptorChain.length) { 485 var onFulfilled = requestInterceptorChain.shift(); 486 var onRejected = requestInterceptorChain.shift(); 487 try { 488 newConfig = onFulfilled(newConfig); 489 } catch (error) { 490 onRejected(error); 491 break; 492 } 493 } 494 try { 495 promise = dispatchRequest(newConfig); 496 } catch (error) { 497 return Promise.reject(error); 498 } 499 while (responseInterceptorChain.length) { 500 promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); 501 } 502 return promise; 503}; 504Axios.prototype.getUri = function getUri(config) { 505 config = mergeConfig(this.defaults, config); 506 return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); 507}; 508 509// Provide aliases for supported request methods 510utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { 511 /*eslint func-names:0*/ 512 Axios.prototype[method] = function (url, config) { 513 return this.request(mergeConfig(config || {}, { 514 method: method, 515 url: url, 516 data: (config || {}).data 517 })); 518 }; 519}); 520utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 521 /*eslint func-names:0*/ 522 Axios.prototype[method] = function (url, data, config) { 523 return this.request(mergeConfig(config || {}, { 524 method: method, 525 url: url, 526 data: data 527 })); 528 }; 529}); 530module.exports = Axios; 531 532/***/ }), 533
vendor: 1,751 bytes, lines 534-595
534/***/ "./node_modules/axios/lib/core/InterceptorManager.js": 535/*!***********************************************************!*\ 536 !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! 537 \***********************************************************/ 538/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 539 540"use strict"; 541 542 543var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 544function InterceptorManager() { 545 this.handlers = []; 546} 547 548/** 549 * Add a new interceptor to the stack 550 * 551 * @param {Function} fulfilled The function to handle `then` for a `Promise` 552 * @param {Function} rejected The function to handle `reject` for a `Promise` 553 * 554 * @return {Number} An ID used to remove interceptor later 555 */ 556InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { 557 this.handlers.push({ 558 fulfilled: fulfilled, 559 rejected: rejected, 560 synchronous: options ? options.synchronous : false, 561 runWhen: options ? options.runWhen : null 562 }); 563 return this.handlers.length - 1; 564}; 565 566/** 567 * Remove an interceptor from the stack 568 * 569 * @param {Number} id The ID that was returned by `use` 570 */ 571InterceptorManager.prototype.eject = function eject(id) { 572 if (this.handlers[id]) { 573 this.handlers[id] = null; 574 } 575}; 576 577/** 578 * Iterate over all the registered interceptors 579 * 580 * This method is particularly useful for skipping over any 581 * interceptors that may have become `null` calling `eject`. 582 * 583 * @param {Function} fn The function to call for each interceptor 584 */ 585InterceptorManager.prototype.forEach = function forEach(fn) { 586 utils.forEach(this.handlers, function forEachHandler(h) { 587 if (h !== null) { 588 fn(h); 589 } 590 }); 591}; 592module.exports = InterceptorManager; 593 594/***/ }), 595
vendor: 1,148 bytes, lines 596-625
596/***/ "./node_modules/axios/lib/core/buildFullPath.js": 597/*!******************************************************!*\ 598 !*** ./node_modules/axios/lib/core/buildFullPath.js ***! 599 \******************************************************/ 600/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 601 602"use strict"; 603 604 605var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js"); 606var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js"); 607 608/** 609 * Creates a new URL by combining the baseURL with the requestedURL, 610 * only when the requestedURL is not already an absolute URL. 611 * If the requestURL is absolute, this function returns the requestedURL untouched. 612 * 613 * @param {string} baseURL The base URL 614 * @param {string} requestedURL Absolute or relative URL to combine 615 * @returns {string} The combined full path 616 */ 617module.exports = function buildFullPath(baseURL, requestedURL) { 618 if (baseURL && !isAbsoluteURL(requestedURL)) { 619 return combineURLs(baseURL, requestedURL); 620 } 621 return requestedURL; 622}; 623 624/***/ }), 625
vendor: 999 bytes, lines 626-653
626/***/ "./node_modules/axios/lib/core/createError.js": 627/*!****************************************************!*\ 628 !*** ./node_modules/axios/lib/core/createError.js ***! 629 \****************************************************/ 630/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 631 632"use strict"; 633 634 635var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 636 637/** 638 * Create an Error with the specified message, config, error code, request and response. 639 * 640 * @param {string} message The error message. 641 * @param {Object} config The config. 642 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 643 * @param {Object} [request] The request. 644 * @param {Object} [response] The response. 645 * @returns {Error} The created error. 646 */ 647module.exports = function createError(message, config, code, request, response) { 648 var error = new Error(message); 649 return enhanceError(error, config, code, request, response); 650}; 651 652/***/ }), 653
vendor: 2,419 bytes, lines 654-718
654/***/ "./node_modules/axios/lib/core/dispatchRequest.js": 655/*!********************************************************!*\ 656 !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! 657 \********************************************************/ 658/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 659 660"use strict"; 661 662 663var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 664var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js"); 665var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 666var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); 667 668/** 669 * Throws a `Cancel` if cancellation has been requested. 670 */ 671function throwIfCancellationRequested(config) { 672 if (config.cancelToken) { 673 config.cancelToken.throwIfRequested(); 674 } 675} 676 677/** 678 * Dispatch a request to the server using the configured adapter. 679 * 680 * @param {object} config The config that is to be used for the request 681 * @returns {Promise} The Promise to be fulfilled 682 */ 683module.exports = function dispatchRequest(config) { 684 throwIfCancellationRequested(config); 685 686 // Ensure headers exist 687 config.headers = config.headers || {}; 688 689 // Transform request data 690 config.data = transformData.call(config, config.data, config.headers, config.transformRequest); 691 692 // Flatten headers 693 config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers); 694 utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) { 695 delete config.headers[method]; 696 }); 697 var adapter = config.adapter || defaults.adapter; 698 return adapter(config).then(function onAdapterResolution(response) { 699 throwIfCancellationRequested(config); 700 701 // Transform response data 702 response.data = transformData.call(config, response.data, response.headers, config.transformResponse); 703 return response; 704 }, function onAdapterRejection(reason) { 705 if (!isCancel(reason)) { 706 throwIfCancellationRequested(config); 707 708 // Transform response data 709 if (reason && reason.response) { 710 reason.response.data = transformData.call(config, reason.response.data, reason.response.headers, config.transformResponse); 711 } 712 } 713 return Promise.reject(reason); 714 }); 715}; 716 717/***/ }), 718
vendor: 1,313 bytes, lines 719-768
719/***/ "./node_modules/axios/lib/core/enhanceError.js": 720/*!*****************************************************!*\ 721 !*** ./node_modules/axios/lib/core/enhanceError.js ***! 722 \*****************************************************/ 723/***/ ((module) => { 724 725"use strict"; 726 727 728/** 729 * Update an Error with the specified config, error code, and response. 730 * 731 * @param {Error} error The error to update. 732 * @param {Object} config The config. 733 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 734 * @param {Object} [request] The request. 735 * @param {Object} [response] The response. 736 * @returns {Error} The error. 737 */ 738module.exports = function enhanceError(error, config, code, request, response) { 739 error.config = config; 740 if (code) { 741 error.code = code; 742 } 743 error.request = request; 744 error.response = response; 745 error.isAxiosError = true; 746 error.toJSON = function toJSON() { 747 return { 748 // Standard 749 message: this.message, 750 name: this.name, 751 // Microsoft 752 description: this.description, 753 number: this.number, 754 // Mozilla 755 fileName: this.fileName, 756 lineNumber: this.lineNumber, 757 columnNumber: this.columnNumber, 758 stack: this.stack, 759 // Axios 760 config: this.config, 761 code: this.code 762 }; 763 }; 764 return error; 765}; 766 767/***/ }), 768
vendor: 3,188 bytes, lines 769-842
769/***/ "./node_modules/axios/lib/core/mergeConfig.js": 770/*!****************************************************!*\ 771 !*** ./node_modules/axios/lib/core/mergeConfig.js ***! 772 \****************************************************/ 773/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 774 775"use strict"; 776 777 778var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 779 780/** 781 * Config-specific merge-function which creates a new config-object 782 * by merging two configuration objects together. 783 * 784 * @param {Object} config1 785 * @param {Object} config2 786 * @returns {Object} New object resulting from merging config2 to config1 787 */ 788module.exports = function mergeConfig(config1, config2) { 789 // eslint-disable-next-line no-param-reassign 790 config2 = config2 || {}; 791 var config = {}; 792 var valueFromConfig2Keys = ['url', 'method', 'data']; 793 var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params']; 794 var defaultToConfig2Keys = ['baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress', 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding']; 795 var directMergeKeys = ['validateStatus']; 796 function getMergedValue(target, source) { 797 if (utils.isPlainObject(target) && utils.isPlainObject(source)) { 798 return utils.merge(target, source); 799 } else if (utils.isPlainObject(source)) { 800 return utils.merge({}, source); 801 } else if (utils.isArray(source)) { 802 return source.slice(); 803 } 804 return source; 805 } 806 function mergeDeepProperties(prop) { 807 if (!utils.isUndefined(config2[prop])) { 808 config[prop] = getMergedValue(config1[prop], config2[prop]); 809 } else if (!utils.isUndefined(config1[prop])) { 810 config[prop] = getMergedValue(undefined, config1[prop]); 811 } 812 } 813 utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) { 814 if (!utils.isUndefined(config2[prop])) { 815 config[prop] = getMergedValue(undefined, config2[prop]); 816 } 817 }); 818 utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties); 819 utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) { 820 if (!utils.isUndefined(config2[prop])) { 821 config[prop] = getMergedValue(undefined, config2[prop]); 822 } else if (!utils.isUndefined(config1[prop])) { 823 config[prop] = getMergedValue(undefined, config1[prop]); 824 } 825 }); 826 utils.forEach(directMergeKeys, function merge(prop) { 827 if (prop in config2) { 828 config[prop] = getMergedValue(config1[prop], config2[prop]); 829 } else if (prop in config1) { 830 config[prop] = getMergedValue(undefined, config1[prop]); 831 } 832 }); 833 var axiosKeys = valueFromConfig2Keys.concat(mergeDeepPropertiesKeys).concat(defaultToConfig2Keys).concat(directMergeKeys); 834 var otherKeys = Object.keys(config1).concat(Object.keys(config2)).filter(function filterAxiosKeys(key) { 835 return axiosKeys.indexOf(key) === -1; 836 }); 837 utils.forEach(otherKeys, mergeDeepProperties); 838 return config; 839}; 840 841/***/ }), 842
vendor: 1,023 bytes, lines 843-871
843/***/ "./node_modules/axios/lib/core/settle.js": 844/*!***********************************************!*\ 845 !*** ./node_modules/axios/lib/core/settle.js ***! 846 \***********************************************/ 847/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 848 849"use strict"; 850 851 852var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js"); 853 854/** 855 * Resolve or reject a Promise based on response status. 856 * 857 * @param {Function} resolve A function that resolves the promise. 858 * @param {Function} reject A function that rejects the promise. 859 * @param {object} response The response. 860 */ 861module.exports = function settle(resolve, reject, response) { 862 var validateStatus = response.config.validateStatus; 863 if (!response.status || !validateStatus || validateStatus(response.status)) { 864 resolve(response); 865 } else { 866 reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response)); 867 } 868}; 869 870/***/ }), 871
vendor: 1,064 bytes, lines 872-902
872/***/ "./node_modules/axios/lib/core/transformData.js": 873/*!******************************************************!*\ 874 !*** ./node_modules/axios/lib/core/transformData.js ***! 875 \******************************************************/ 876/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 877 878"use strict"; 879 880 881var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 882var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js"); 883 884/** 885 * Transform the data for a request or a response 886 * 887 * @param {Object|String} data The data to be transformed 888 * @param {Array} headers The headers for the request or response 889 * @param {Array|Function} fns A single function or Array of functions 890 * @returns {*} The resulting transformed data 891 */ 892module.exports = function transformData(data, headers, fns) { 893 var context = this || defaults; 894 /*eslint no-param-reassign:0*/ 895 utils.forEach(fns, function transform(fn) { 896 data = fn.call(context, data, headers); 897 }); 898 return data; 899}; 900 901/***/ }), 902
vendor: 4,087 bytes, lines 903-1019
903/***/ "./node_modules/axios/lib/defaults.js": 904/*!********************************************!*\ 905 !*** ./node_modules/axios/lib/defaults.js ***! 906 \********************************************/ 907/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 908 909"use strict"; 910 911 912var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 913var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js"); 914var enhanceError = __webpack_require__(/*! ./core/enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 915var DEFAULT_CONTENT_TYPE = { 916 'Content-Type': 'application/x-www-form-urlencoded' 917}; 918function setContentTypeIfUnset(headers, value) { 919 if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { 920 headers['Content-Type'] = value; 921 } 922} 923function getDefaultAdapter() { 924 var adapter; 925 if (typeof XMLHttpRequest !== 'undefined') { 926 // For browsers use XHR adapter 927 adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js"); 928 } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { 929 // For node use HTTP adapter 930 adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js"); 931 } 932 return adapter; 933} 934function stringifySafely(rawValue, parser, encoder) { 935 if (utils.isString(rawValue)) { 936 try { 937 (parser || JSON.parse)(rawValue); 938 return utils.trim(rawValue); 939 } catch (e) { 940 if (e.name !== 'SyntaxError') { 941 throw e; 942 } 943 } 944 } 945 return (encoder || JSON.stringify)(rawValue); 946} 947var defaults = { 948 transitional: { 949 silentJSONParsing: true, 950 forcedJSONParsing: true, 951 clarifyTimeoutError: false 952 }, 953 adapter: getDefaultAdapter(), 954 transformRequest: [function transformRequest(data, headers) { 955 normalizeHeaderName(headers, 'Accept'); 956 normalizeHeaderName(headers, 'Content-Type'); 957 if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) { 958 return data; 959 } 960 if (utils.isArrayBufferView(data)) { 961 return data.buffer; 962 } 963 if (utils.isURLSearchParams(data)) { 964 setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); 965 return data.toString(); 966 } 967 if (utils.isObject(data) || headers && headers['Content-Type'] === 'application/json') { 968 setContentTypeIfUnset(headers, 'application/json'); 969 return stringifySafely(data); 970 } 971 return data; 972 }], 973 transformResponse: [function transformResponse(data) { 974 var transitional = this.transitional; 975 var silentJSONParsing = transitional && transitional.silentJSONParsing; 976 var forcedJSONParsing = transitional && transitional.forcedJSONParsing; 977 var strictJSONParsing = !silentJSONParsing && this.responseType === 'json'; 978 if (strictJSONParsing || forcedJSONParsing && utils.isString(data) && data.length) { 979 try { 980 return JSON.parse(data); 981 } catch (e) { 982 if (strictJSONParsing) { 983 if (e.name === 'SyntaxError') { 984 throw enhanceError(e, this, 'E_JSON_PARSE'); 985 } 986 throw e; 987 } 988 } 989 } 990 return data; 991 }], 992 /** 993 * A timeout in milliseconds to abort a request. If set to 0 (default) a 994 * timeout is not created. 995 */ 996 timeout: 0, 997 xsrfCookieName: 'XSRF-TOKEN', 998 xsrfHeaderName: 'X-XSRF-TOKEN', 999 maxContentLength: -1, 1000 maxBodyLength: -1, 1001 validateStatus: function validateStatus(status) { 1002 return status >= 200 && status < 300; 1003 } 1004}; 1005defaults.headers = { 1006 common: { 1007 'Accept': 'application/json, text/plain, */*' 1008 } 1009}; 1010utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { 1011 defaults.headers[method] = {}; 1012}); 1013utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 1014 defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); 1015}); 1016module.exports = defaults; 1017 1018/***/ }), 1019
vendor: 502 bytes, lines 1020-1040
1020/***/ "./node_modules/axios/lib/helpers/bind.js": 1021/*!************************************************!*\ 1022 !*** ./node_modules/axios/lib/helpers/bind.js ***! 1023 \************************************************/ 1024/***/ ((module) => { 1025 1026"use strict"; 1027 1028 1029module.exports = function bind(fn, thisArg) { 1030 return function wrap() { 1031 var args = new Array(arguments.length); 1032 for (var i = 0; i < args.length; i++) { 1033 args[i] = arguments[i]; 1034 } 1035 return fn.apply(thisArg, args); 1036 }; 1037}; 1038 1039/***/ }), 1040
vendor: 1,967 bytes, lines 1041-1105
1041/***/ "./node_modules/axios/lib/helpers/buildURL.js": 1042/*!****************************************************!*\ 1043 !*** ./node_modules/axios/lib/helpers/buildURL.js ***! 1044 \****************************************************/ 1045/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1046 1047"use strict"; 1048 1049 1050var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1051function encode(val) { 1052 return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); 1053} 1054 1055/** 1056 * Build a URL by appending params to the end 1057 * 1058 * @param {string} url The base of the url (e.g., http://www.google.com) 1059 * @param {object} [params] The params to be appended 1060 * @returns {string} The formatted url 1061 */ 1062module.exports = function buildURL(url, params, paramsSerializer) { 1063 /*eslint no-param-reassign:0*/ 1064 if (!params) { 1065 return url; 1066 } 1067 var serializedParams; 1068 if (paramsSerializer) { 1069 serializedParams = paramsSerializer(params); 1070 } else if (utils.isURLSearchParams(params)) { 1071 serializedParams = params.toString(); 1072 } else { 1073 var parts = []; 1074 utils.forEach(params, function serialize(val, key) { 1075 if (val === null || typeof val === 'undefined') { 1076 return; 1077 } 1078 if (utils.isArray(val)) { 1079 key = key + '[]'; 1080 } else { 1081 val = [val]; 1082 } 1083 utils.forEach(val, function parseValue(v) { 1084 if (utils.isDate(v)) { 1085 v = v.toISOString(); 1086 } else if (utils.isObject(v)) { 1087 v = JSON.stringify(v); 1088 } 1089 parts.push(encode(key) + '=' + encode(v)); 1090 }); 1091 }); 1092 serializedParams = parts.join('&'); 1093 } 1094 if (serializedParams) { 1095 var hashmarkIndex = url.indexOf('#'); 1096 if (hashmarkIndex !== -1) { 1097 url = url.slice(0, hashmarkIndex); 1098 } 1099 url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; 1100 } 1101 return url; 1102}; 1103 1104/***/ }), 1105
vendor: 646 bytes, lines 1106-1127
1106/***/ "./node_modules/axios/lib/helpers/combineURLs.js": 1107/*!*******************************************************!*\ 1108 !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! 1109 \*******************************************************/ 1110/***/ ((module) => { 1111 1112"use strict"; 1113 1114 1115/** 1116 * Creates a new URL by combining the specified URLs 1117 * 1118 * @param {string} baseURL The base URL 1119 * @param {string} relativeURL The relative URL 1120 * @returns {string} The combined URL 1121 */ 1122module.exports = function combineURLs(baseURL, relativeURL) { 1123 return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL; 1124}; 1125 1126/***/ }), 1127
vendor: 1,637 bytes, lines 1128-1180
1128/***/ "./node_modules/axios/lib/helpers/cookies.js": 1129/*!***************************************************!*\ 1130 !*** ./node_modules/axios/lib/helpers/cookies.js ***! 1131 \***************************************************/ 1132/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1133 1134"use strict"; 1135 1136 1137var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1138module.exports = utils.isStandardBrowserEnv() ? 1139// Standard browser envs support document.cookie 1140function standardBrowserEnv() { 1141 return { 1142 write: function write(name, value, expires, path, domain, secure) { 1143 var cookie = []; 1144 cookie.push(name + '=' + encodeURIComponent(value)); 1145 if (utils.isNumber(expires)) { 1146 cookie.push('expires=' + new Date(expires).toGMTString()); 1147 } 1148 if (utils.isString(path)) { 1149 cookie.push('path=' + path); 1150 } 1151 if (utils.isString(domain)) { 1152 cookie.push('domain=' + domain); 1153 } 1154 if (secure === true) { 1155 cookie.push('secure'); 1156 } 1157 document.cookie = cookie.join('; '); 1158 }, 1159 read: function read(name) { 1160 var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); 1161 return match ? decodeURIComponent(match[3]) : null; 1162 }, 1163 remove: function remove(name) { 1164 this.write(name, '', Date.now() - 86400000); 1165 } 1166 }; 1167}() : 1168// Non standard browser env (web workers, react-native) lack needed support. 1169function nonStandardBrowserEnv() { 1170 return { 1171 write: function write() {}, 1172 read: function read() { 1173 return null; 1174 }, 1175 remove: function remove() {} 1176 }; 1177}(); 1178 1179/***/ }), 1180
vendor: 845 bytes, lines 1181-1204
1181/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js": 1182/*!*********************************************************!*\ 1183 !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! 1184 \*********************************************************/ 1185/***/ ((module) => { 1186 1187"use strict"; 1188 1189 1190/** 1191 * Determines whether the specified URL is absolute 1192 * 1193 * @param {string} url The URL to test 1194 * @returns {boolean} True if the specified URL is absolute, otherwise false 1195 */ 1196module.exports = function isAbsoluteURL(url) { 1197 // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL). 1198 // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed 1199 // by any combination of letters, digits, plus, period, or hyphen. 1200 return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); 1201}; 1202 1203/***/ }), 1204
vendor: 617 bytes, lines 1205-1225
1205/***/ "./node_modules/axios/lib/helpers/isAxiosError.js": 1206/*!********************************************************!*\ 1207 !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***! 1208 \********************************************************/ 1209/***/ ((module) => { 1210 1211"use strict"; 1212 1213 1214/** 1215 * Determines whether the payload is an error thrown by Axios 1216 * 1217 * @param {*} payload The value to test 1218 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false 1219 */ 1220module.exports = function isAxiosError(payload) { 1221 return typeof payload === 'object' && payload.isAxiosError === true; 1222}; 1223 1224/***/ }), 1225
vendor: 2,465 bytes, lines 1226-1292
1226/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js": 1227/*!***********************************************************!*\ 1228 !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! 1229 \***********************************************************/ 1230/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1231 1232"use strict"; 1233 1234 1235var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1236module.exports = utils.isStandardBrowserEnv() ? 1237// Standard browser envs have full support of the APIs needed to test 1238// whether the request URL is of the same origin as current location. 1239function standardBrowserEnv() { 1240 var msie = /(msie|trident)/i.test(navigator.userAgent); 1241 var urlParsingNode = document.createElement('a'); 1242 var originURL; 1243 1244 /** 1245 * Parse a URL to discover it's components 1246 * 1247 * @param {String} url The URL to be parsed 1248 * @returns {Object} 1249 */ 1250 function resolveURL(url) { 1251 var href = url; 1252 if (msie) { 1253 // IE needs attribute set twice to normalize properties 1254 urlParsingNode.setAttribute('href', href); 1255 href = urlParsingNode.href; 1256 } 1257 urlParsingNode.setAttribute('href', href); 1258 1259 // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils 1260 return { 1261 href: urlParsingNode.href, 1262 protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', 1263 host: urlParsingNode.host, 1264 search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', 1265 hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', 1266 hostname: urlParsingNode.hostname, 1267 port: urlParsingNode.port, 1268 pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname 1269 }; 1270 } 1271 originURL = resolveURL(window.location.href); 1272 1273 /** 1274 * Determine if a URL shares the same origin as the current location 1275 * 1276 * @param {String} requestURL The URL to test 1277 * @returns {boolean} True if URL shares the same origin, otherwise false 1278 */ 1279 return function isURLSameOrigin(requestURL) { 1280 var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL; 1281 return parsed.protocol === originURL.protocol && parsed.host === originURL.host; 1282 }; 1283}() : 1284// Non standard browser envs (web workers, react-native) lack needed support. 1285function nonStandardBrowserEnv() { 1286 return function isURLSameOrigin() { 1287 return true; 1288 }; 1289}(); 1290 1291/***/ }), 1292
vendor: 762 bytes, lines 1293-1313
1293/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js": 1294/*!***************************************************************!*\ 1295 !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***! 1296 \***************************************************************/ 1297/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1298 1299"use strict"; 1300 1301 1302var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 1303module.exports = function normalizeHeaderName(headers, normalizedName) { 1304 utils.forEach(headers, function processHeader(value, name) { 1305 if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { 1306 headers[normalizedName] = value; 1307 delete headers[name]; 1308 } 1309 }); 1310}; 1311 1312/***/ }), 1313
vendor: 1,763 bytes, lines 1314-1369
1314/***/ "./node_modules/axios/lib/helpers/parseHeaders.js": 1315/*!********************************************************!*\ 1316 !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! 1317 \********************************************************/ 1318/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1319 1320"use strict"; 1321 1322 1323var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 1324 1325// Headers whose duplicates are ignored by node 1326// c.f. https://nodejs.org/api/http.html#http_message_headers 1327var ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']; 1328 1329/** 1330 * Parse headers into an object 1331 * 1332 * ``` 1333 * Date: Wed, 27 Aug 2014 08:58:49 GMT 1334 * Content-Type: application/json 1335 * Connection: keep-alive 1336 * Transfer-Encoding: chunked 1337 * ``` 1338 * 1339 * @param {String} headers Headers needing to be parsed 1340 * @returns {Object} Headers parsed into an object 1341 */ 1342module.exports = function parseHeaders(headers) { 1343 var parsed = {}; 1344 var key; 1345 var val; 1346 var i; 1347 if (!headers) { 1348 return parsed; 1349 } 1350 utils.forEach(headers.split('\n'), function parser(line) { 1351 i = line.indexOf(':'); 1352 key = utils.trim(line.substr(0, i)).toLowerCase(); 1353 val = utils.trim(line.substr(i + 1)); 1354 if (key) { 1355 if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { 1356 return; 1357 } 1358 if (key === 'set-cookie') { 1359 parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); 1360 } else { 1361 parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; 1362 } 1363 } 1364 }); 1365 return parsed; 1366}; 1367 1368/***/ }), 1369
vendor: 818 bytes, lines 1370-1406
1370/***/ "./node_modules/axios/lib/helpers/spread.js": 1371/*!**************************************************!*\ 1372 !*** ./node_modules/axios/lib/helpers/spread.js ***! 1373 \**************************************************/ 1374/***/ ((module) => { 1375 1376"use strict"; 1377 1378 1379/** 1380 * Syntactic sugar for invoking a function and expanding an array for arguments. 1381 * 1382 * Common use case would be to use `Function.prototype.apply`. 1383 * 1384 * ```js 1385 * function f(x, y, z) {} 1386 * var args = [1, 2, 3]; 1387 * f.apply(null, args); 1388 * ``` 1389 * 1390 * With `spread` this example can be re-written. 1391 * 1392 * ```js 1393 * spread(function(x, y, z) {})([1, 2, 3]); 1394 * ``` 1395 * 1396 * @param {Function} callback 1397 * @returns {Function} 1398 */ 1399module.exports = function spread(callback) { 1400 return function wrap(arr) { 1401 return callback.apply(null, arr); 1402 }; 1403}; 1404 1405/***/ }), 1406
vendor: 3,108 bytes, lines 1407-1510
1407/***/ "./node_modules/axios/lib/helpers/validator.js": 1408/*!*****************************************************!*\ 1409 !*** ./node_modules/axios/lib/helpers/validator.js ***! 1410 \*****************************************************/ 1411/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1412 1413"use strict"; 1414 1415 1416var pkg = __webpack_require__(/*! ./../../package.json */ "./node_modules/axios/package.json"); 1417var validators = {}; 1418 1419// eslint-disable-next-line func-names 1420['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function (type, i) { 1421 validators[type] = function validator(thing) { 1422 return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; 1423 }; 1424}); 1425var deprecatedWarnings = {}; 1426var currentVerArr = pkg.version.split('.'); 1427 1428/** 1429 * Compare package versions 1430 * @param {string} version 1431 * @param {string?} thanVersion 1432 * @returns {boolean} 1433 */ 1434function isOlderVersion(version, thanVersion) { 1435 var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr; 1436 var destVer = version.split('.'); 1437 for (var i = 0; i < 3; i++) { 1438 if (pkgVersionArr[i] > destVer[i]) { 1439 return true; 1440 } else if (pkgVersionArr[i] < destVer[i]) { 1441 return false; 1442 } 1443 } 1444 return false; 1445} 1446 1447/** 1448 * Transitional option validator 1449 * @param {function|boolean?} validator 1450 * @param {string?} version 1451 * @param {string} message 1452 * @returns {function} 1453 */ 1454validators.transitional = function transitional(validator, version, message) { 1455 var isDeprecated = version && isOlderVersion(version); 1456 function formatMessage(opt, desc) { 1457 return '[Axios v' + pkg.version + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); 1458 } 1459 1460 // eslint-disable-next-line func-names 1461 return function (value, opt, opts) { 1462 if (validator === false) { 1463 throw new Error(formatMessage(opt, ' has been removed in ' + version)); 1464 } 1465 if (isDeprecated && !deprecatedWarnings[opt]) { 1466 deprecatedWarnings[opt] = true; 1467 // eslint-disable-next-line no-console 1468 console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future')); 1469 } 1470 return validator ? validator(value, opt, opts) : true; 1471 }; 1472}; 1473 1474/** 1475 * Assert object's properties type 1476 * @param {object} options 1477 * @param {object} schema 1478 * @param {boolean?} allowUnknown 1479 */ 1480 1481function assertOptions(options, schema, allowUnknown) { 1482 if (typeof options !== 'object') { 1483 throw new TypeError('options must be an object'); 1484 } 1485 var keys = Object.keys(options); 1486 var i = keys.length; 1487 while (i-- > 0) { 1488 var opt = keys[i]; 1489 var validator = schema[opt]; 1490 if (validator) { 1491 var value = options[opt]; 1492 var result = value === undefined || validator(value, opt, options); 1493 if (result !== true) { 1494 throw new TypeError('option ' + opt + ' must be ' + result); 1495 } 1496 continue; 1497 } 1498 if (allowUnknown !== true) { 1499 throw Error('Unknown option ' + opt); 1500 } 1501 } 1502} 1503module.exports = { 1504 isOlderVersion: isOlderVersion, 1505 assertOptions: assertOptions, 1506 validators: validators 1507}; 1508 1509/***/ }), 1510
vendor: 15,433 bytes, lines 1511-1999
1511/***/ "./node_modules/axios/lib/utils.js": 1512/*!*****************************************!*\ 1513 !*** ./node_modules/axios/lib/utils.js ***! 1514 \*****************************************/ 1515/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 1516 1517"use strict"; 1518 1519 1520var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 1521 1522// utils is a library of generic helper functions non-specific to axios 1523 1524var toString = Object.prototype.toString; 1525 1526/** 1527 * Determine if a value is an Array 1528 * 1529 * @param {Object} val The value to test 1530 * @returns {boolean} True if value is an Array, otherwise false 1531 */ 1532function isArray(val) { 1533 return toString.call(val) === '[object Array]'; 1534} 1535 1536/** 1537 * Determine if a value is undefined 1538 * 1539 * @param {Object} val The value to test 1540 * @returns {boolean} True if the value is undefined, otherwise false 1541 */ 1542function isUndefined(val) { 1543 return typeof val === 'undefined'; 1544} 1545 1546/** 1547 * Determine if a value is a Buffer 1548 * 1549 * @param {Object} val The value to test 1550 * @returns {boolean} True if value is a Buffer, otherwise false 1551 */ 1552function isBuffer(val) { 1553 return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); 1554} 1555 1556/** 1557 * Determine if a value is an ArrayBuffer 1558 * 1559 * @param {Object} val The value to test 1560 * @returns {boolean} True if value is an ArrayBuffer, otherwise false 1561 */ 1562function isArrayBuffer(val) { 1563 return toString.call(val) === '[object ArrayBuffer]'; 1564} 1565 1566/** 1567 * Determine if a value is a FormData 1568 * 1569 * @param {Object} val The value to test 1570 * @returns {boolean} True if value is an FormData, otherwise false 1571 */ 1572function isFormData(val) { 1573 return typeof FormData !== 'undefined' && val instanceof FormData; 1574} 1575 1576/** 1577 * Determine if a value is a view on an ArrayBuffer 1578 * 1579 * @param {Object} val The value to test 1580 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false 1581 */ 1582function isArrayBufferView(val) { 1583 var result; 1584 if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) { 1585 result = ArrayBuffer.isView(val); 1586 } else { 1587 result = val && val.buffer && val.buffer instanceof ArrayBuffer; 1588 } 1589 return result; 1590} 1591 1592/** 1593 * Determine if a value is a String 1594 * 1595 * @param {Object} val The value to test 1596 * @returns {boolean} True if value is a String, otherwise false 1597 */ 1598function isString(val) { 1599 return typeof val === 'string'; 1600} 1601 1602/** 1603 * Determine if a value is a Number 1604 * 1605 * @param {Object} val The value to test 1606 * @returns {boolean} True if value is a Number, otherwise false 1607 */ 1608function isNumber(val) { 1609 return typeof val === 'number'; 1610} 1611 1612/** 1613 * Determine if a value is an Object 1614 * 1615 * @param {Object} val The value to test 1616 * @returns {boolean} True if value is an Object, otherwise false 1617 */ 1618function isObject(val) { 1619 return val !== null && typeof val === 'object'; 1620} 1621 1622/** 1623 * Determine if a value is a plain Object 1624 * 1625 * @param {Object} val The value to test 1626 * @return {boolean} True if value is a plain Object, otherwise false 1627 */ 1628function isPlainObject(val) { 1629 if (toString.call(val) !== '[object Object]') { 1630 return false; 1631 } 1632 var prototype = Object.getPrototypeOf(val); 1633 return prototype === null || prototype === Object.prototype; 1634} 1635 1636/** 1637 * Determine if a value is a Date 1638 * 1639 * @param {Object} val The value to test 1640 * @returns {boolean} True if value is a Date, otherwise false 1641 */ 1642function isDate(val) { 1643 return toString.call(val) === '[object Date]'; 1644} 1645 1646/** 1647 * Determine if a value is a File 1648 * 1649 * @param {Object} val The value to test 1650 * @returns {boolean} True if value is a File, otherwise false 1651 */ 1652function isFile(val) { 1653 return toString.call(val) === '[object File]'; 1654} 1655 1656/** 1657 * Determine if a value is a Blob 1658 * 1659 * @param {Object} val The value to test 1660 * @returns {boolean} True if value is a Blob, otherwise false 1661 */ 1662function isBlob(val) { 1663 return toString.call(val) === '[object Blob]'; 1664} 1665 1666/** 1667 * Determine if a value is a Function 1668 * 1669 * @param {Object} val The value to test 1670 * @returns {boolean} True if value is a Function, otherwise false 1671 */ 1672function isFunction(val) { 1673 return toString.call(val) === '[object Function]'; 1674} 1675 1676/** 1677 * Determine if a value is a Stream 1678 * 1679 * @param {Object} val The value to test 1680 * @returns {boolean} True if value is a Stream, otherwise false 1681 */ 1682function isStream(val) { 1683 return isObject(val) && isFunction(val.pipe); 1684} 1685 1686/** 1687 * Determine if a value is a URLSearchParams object 1688 * 1689 * @param {Object} val The value to test 1690 * @returns {boolean} True if value is a URLSearchParams object, otherwise false 1691 */ 1692function isURLSearchParams(val) { 1693 return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; 1694} 1695 1696/** 1697 * Trim excess whitespace off the beginning and end of a string 1698 * 1699 * @param {String} str The String to trim 1700 * @returns {String} The String freed of excess whitespace 1701 */ 1702function trim(str) { 1703 return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); 1704} 1705 1706/** 1707 * Determine if we're running in a standard browser environment 1708 * 1709 * This allows axios to run in a web worker, and react-native. 1710 * Both environments support XMLHttpRequest, but not fully standard globals. 1711 * 1712 * web workers: 1713 * typeof window -> undefined 1714 * typeof document -> undefined 1715 * 1716 * react-native: 1717 * navigator.product -> 'ReactNative' 1718 * nativescript 1719 * navigator.product -> 'NativeScript' or 'NS' 1720 */ 1721function isStandardBrowserEnv() { 1722 if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) { 1723 return false; 1724 } 1725 return typeof window !== 'undefined' && typeof document !== 'undefined'; 1726} 1727 1728/** 1729 * Iterate over an Array or an Object invoking a function for each item. 1730 * 1731 * If `obj` is an Array callback will be called passing 1732 * the value, index, and complete array for each item. 1733 * 1734 * If 'obj' is an Object callback will be called passing 1735 * the value, key, and complete object for each property. 1736 * 1737 * @param {Object|Array} obj The object to iterate 1738 * @param {Function} fn The callback to invoke for each item 1739 */ 1740function forEach(obj, fn) { 1741 // Don't bother if no value provided 1742 if (obj === null || typeof obj === 'undefined') { 1743 return; 1744 } 1745 1746 // Force an array if not already something iterable 1747 if (typeof obj !== 'object') { 1748 /*eslint no-param-reassign:0*/ 1749 obj = [obj]; 1750 } 1751 if (isArray(obj)) { 1752 // Iterate over array values 1753 for (var i = 0, l = obj.length; i < l; i++) { 1754 fn.call(null, obj[i], i, obj); 1755 } 1756 } else { 1757 // Iterate over object keys 1758 for (var key in obj) { 1759 if (Object.prototype.hasOwnProperty.call(obj, key)) { 1760 fn.call(null, obj[key], key, obj); 1761 } 1762 } 1763 } 1764} 1765 1766/** 1767 * Accepts varargs expecting each argument to be an object, then 1768 * immutably merges the properties of each object and returns result. 1769 * 1770 * When multiple objects contain the same key the later object in 1771 * the arguments list will take precedence. 1772 * 1773 * Example: 1774 * 1775 * ```js 1776 * var result = merge({foo: 123}, {foo: 456}); 1777 * console.log(result.foo); // outputs 456 1778 * ``` 1779 * 1780 * @param {Object} obj1 Object to merge 1781 * @returns {Object} Result of all merge properties 1782 */ 1783function merge( /* obj1, obj2, obj3, ... */ 1784) { 1785 var result = {}; 1786 function assignValue(val, key) { 1787 if (isPlainObject(result[key]) && isPlainObject(val)) { 1788 result[key] = merge(result[key], val); 1789 } else if (isPlainObject(val)) { 1790 result[key] = merge({}, val); 1791 } else if (isArray(val)) { 1792 result[key] = val.slice(); 1793 } else { 1794 result[key] = val; 1795 } 1796 } 1797 for (var i = 0, l = arguments.length; i < l; i++) { 1798 forEach(arguments[i], assignValue); 1799 } 1800 return result; 1801} 1802 1803/** 1804 * Extends object a by mutably adding to it the properties of object b. 1805 * 1806 * @param {Object} a The object to be extended 1807 * @param {Object} b The object to copy properties from 1808 * @param {Object} thisArg The object to bind function to 1809 * @return {Object} The resulting value of object a 1810 */ 1811function extend(a, b, thisArg) { 1812 forEach(b, function assignValue(val, key) { 1813 if (thisArg && typeof val === 'function') { 1814 a[key] = bind(val, thisArg); 1815 } else { 1816 a[key] = val; 1817 } 1818 }); 1819 return a; 1820} 1821 1822/** 1823 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) 1824 * 1825 * @param {string} content with BOM 1826 * @return {string} content value without BOM 1827 */ 1828function stripBOM(content) { 1829 if (content.charCodeAt(0) === 0xFEFF) { 1830 content = content.slice(1); 1831 } 1832 return content; 1833} 1834module.exports = { 1835 isArray: isArray, 1836 isArrayBuffer: isArrayBuffer, 1837 isBuffer: isBuffer, 1838 isFormData: isFormData, 1839 isArrayBufferView: isArrayBufferView, 1840 isString: isString, 1841 isNumber: isNumber, 1842 isObject: isObject, 1843 isPlainObject: isPlainObject, 1844 isUndefined: isUndefined, 1845 isDate: isDate, 1846 isFile: isFile, 1847 isBlob: isBlob, 1848 isFunction: isFunction, 1849 isStream: isStream, 1850 isURLSearchParams: isURLSearchParams, 1851 isStandardBrowserEnv: isStandardBrowserEnv, 1852 forEach: forEach, 1853 merge: merge, 1854 extend: extend, 1855 trim: trim, 1856 stripBOM: stripBOM 1857}; 1858 1859/***/ }), 1860 1861/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js&": 1862/*!*****************************************************************************************************************************************************************************************!*\ 1863 !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js& ***! 1864 \*****************************************************************************************************************************************************************************************/ 1865/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 1866 1867"use strict"; 1868 1869 1870var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 1871Object.defineProperty(exports, "__esModule", ({ 1872 value: true 1873})); 1874exports["default"] = void 0; 1875var _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js")); 1876var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js")); 1877var _api = _interopRequireDefault(__webpack_require__(/*! ../../utils/api */ "./app/utils/api.js")); 1878var _default = exports["default"] = { 1879 name: "OpeningHoursStatus", 1880 props: { 1881 nid: { 1882 type: String 1883 }, 1884 fieldName: { 1885 type: String 1886 } 1887 }, 1888 data: function data() { 1889 return { 1890 Drupal: Drupal, 1891 openingHour: null 1892 }; 1893 }, 1894 computed: { 1895 isParkingPage: function isParkingPage() { 1896 return document.body.classList.contains('page-node-type-parking-zone'); 1897 }, 1898 openingHourMessage: function openingHourMessage() { 1899 var _this$openingHour; 1900 if (!this.openingHour) return ''; 1901 var status = this.openingHour.status; 1902 if (this.isParkingPage) { 1903 switch (status) { 1904 case 'open': 1905 return this.Drupal.t('Parking possible'); 1906 case 'opens_soon': 1907 return this.Drupal.t('Parking opens soon'); 1908 case 'closes_soon': 1909 return this.Drupal.t('Parking closes soon'); 1910 default: 1911 return this.Drupal.t('Parking closed'); 1912 } 1913 } else { 1914 switch (status) { 1915 case 'open': 1916 return ((_this$openingHour = this.openingHour) === null || _this$openingHour === void 0 ? void 0 : _this$openingHour.custom_label) || this.Drupal.t('Open', {}, { 1917 context: 'Currently open' 1918 }); 1919 case 'opens_soon': 1920 return this.Drupal.t('Opens soon'); 1921 case 'closes_soon': 1922 return this.Drupal.t('Closes soon'); 1923 default: 1924 return this.Drupal.t('Closed'); 1925 } 1926 } 1927 }, 1928 openingHourClass: function openingHourClass() { 1929 if (!this.openingHour) return ''; 1930 return { 1931 open: this.openingHour.status === 'open', 1932 opens_soon: this.openingHour.status === 'opens_soon', 1933 closes_soon: this.openingHour.status === 'closes_soon', 1934 closed: this.openingHour.status !== 'open' && this.openingHour.status !== 'opens_soon' && this.openingHour.status !== 'closes_soon' 1935 }; 1936 } 1937 }, 1938 methods: { 1939 getOpeningHours: function getOpeningHours() { 1940 var _this = this; 1941 return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { 1942 return _regenerator.default.wrap(function _callee$(_context) { 1943 while (1) switch (_context.prev = _context.next) { 1944 case 0: 1945 _context.next = 2; 1946 return (0, _api.default)().get("opening-hours/".concat(_this.nid, "/").concat(_this.fieldName)).then(function (_ref) { 1947 var data = _ref.data.data; 1948 return data; 1949 }); 1950 case 2: 1951 _this.openingHour = _context.sent; 1952 case 3: 1953 case "end": 1954 return _context.stop(); 1955 } 1956 }, _callee); 1957 }))(); 1958 } 1959 }, 1960 created: function created() { 1961 this.getOpeningHours(); 1962 } 1963}; 1964 1965/***/ }), 1966 1967/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8&": 1968/*!****************************************************************************************************************************************************************************************************************************************************************************!*\ 1969 !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8& ***! 1970 \****************************************************************************************************************************************************************************************************************************************************************************/ 1971/***/ ((__unused_webpack_module, exports) => { 1972 1973"use strict"; 1974 1975 1976Object.defineProperty(exports, "__esModule", ({ 1977 value: true 1978})); 1979exports.staticRenderFns = exports.render = void 0; 1980var render = exports.render = function render() { 1981 var _vm = this, 1982 _c = _vm._self._c; 1983 return _vm.openingHour ? _c("div", { 1984 staticClass: "opening-hour" 1985 }, [_c("span", { 1986 staticClass: "time", 1987 class: _vm.openingHourClass, 1988 domProps: { 1989 innerHTML: _vm._s(_vm.openingHourMessage) 1990 } 1991 }), _vm._v(" "), _vm.isParkingPage && _vm.openingHour.status !== "closed" ? _c("span", { 1992 staticClass: "timestamp" 1993 }, [_vm._v("\n " + _vm._s(_vm.openingHour.start) + " - " + _vm._s(_vm.openingHour.end) + "\n ")]) : _vm._e()]) : _vm._e(); 1994}; 1995var staticRenderFns = exports.staticRenderFns = []; 1996render._withStripped = true; 1997 1998/***/ }), 1999
vendor: 363,849 bytes, lines 2000-13128
2000/***/ "./node_modules/vue/dist/vue.esm.js": 2001/*!******************************************!*\ 2002 !*** ./node_modules/vue/dist/vue.esm.js ***! 2003 \******************************************/ 2004/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 2005 2006"use strict"; 2007__webpack_require__.r(__webpack_exports__); 2008/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2009/* harmony export */ EffectScope: () => (/* binding */ EffectScope), 2010/* harmony export */ computed: () => (/* binding */ computed), 2011/* harmony export */ customRef: () => (/* binding */ customRef), 2012/* harmony export */ "default": () => (/* binding */ Vue), 2013/* harmony export */ defineAsyncComponent: () => (/* binding */ defineAsyncComponent), 2014/* harmony export */ defineComponent: () => (/* binding */ defineComponent), 2015/* harmony export */ del: () => (/* binding */ del), 2016/* harmony export */ effectScope: () => (/* binding */ effectScope), 2017/* harmony export */ getCurrentInstance: () => (/* binding */ getCurrentInstance), 2018/* harmony export */ getCurrentScope: () => (/* binding */ getCurrentScope), 2019/* harmony export */ h: () => (/* binding */ h), 2020/* harmony export */ inject: () => (/* binding */ inject), 2021/* harmony export */ isProxy: () => (/* binding */ isProxy), 2022/* harmony export */ isReactive: () => (/* binding */ isReactive), 2023/* harmony export */ isReadonly: () => (/* binding */ isReadonly), 2024/* harmony export */ isRef: () => (/* binding */ isRef), 2025/* harmony export */ isShallow: () => (/* binding */ isShallow), 2026/* harmony export */ markRaw: () => (/* binding */ markRaw), 2027/* harmony export */ mergeDefaults: () => (/* binding */ mergeDefaults), 2028/* harmony export */ nextTick: () => (/* binding */ nextTick), 2029/* harmony export */ onActivated: () => (/* binding */ onActivated), 2030/* harmony export */ onBeforeMount: () => (/* binding */ onBeforeMount), 2031/* harmony export */ onBeforeUnmount: () => (/* binding */ onBeforeUnmount), 2032/* harmony export */ onBeforeUpdate: () => (/* binding */ onBeforeUpdate), 2033/* harmony export */ onDeactivated: () => (/* binding */ onDeactivated), 2034/* harmony export */ onErrorCaptured: () => (/* binding */ onErrorCaptured), 2035/* harmony export */ onMounted: () => (/* binding */ onMounted), 2036/* harmony export */ onRenderTracked: () => (/* binding */ onRenderTracked), 2037/* harmony export */ onRenderTriggered: () => (/* binding */ onRenderTriggered), 2038/* harmony export */ onScopeDispose: () => (/* binding */ onScopeDispose), 2039/* harmony export */ onServerPrefetch: () => (/* binding */ onServerPrefetch), 2040/* harmony export */ onUnmounted: () => (/* binding */ onUnmounted), 2041/* harmony export */ onUpdated: () => (/* binding */ onUpdated), 2042/* harmony export */ provide: () => (/* binding */ provide), 2043/* harmony export */ proxyRefs: () => (/* binding */ proxyRefs), 2044/* harmony export */ reactive: () => (/* binding */ reactive), 2045/* harmony export */ readonly: () => (/* binding */ readonly), 2046/* harmony export */ ref: () => (/* binding */ ref$1), 2047/* harmony export */ set: () => (/* binding */ set), 2048/* harmony export */ shallowReactive: () => (/* binding */ shallowReactive), 2049/* harmony export */ shallowReadonly: () => (/* binding */ shallowReadonly), 2050/* harmony export */ shallowRef: () => (/* binding */ shallowRef), 2051/* harmony export */ toRaw: () => (/* binding */ toRaw), 2052/* harmony export */ toRef: () => (/* binding */ toRef), 2053/* harmony export */ toRefs: () => (/* binding */ toRefs), 2054/* harmony export */ triggerRef: () => (/* binding */ triggerRef), 2055/* harmony export */ unref: () => (/* binding */ unref), 2056/* harmony export */ useAttrs: () => (/* binding */ useAttrs), 2057/* harmony export */ useCssModule: () => (/* binding */ useCssModule), 2058/* harmony export */ useCssVars: () => (/* binding */ useCssVars), 2059/* harmony export */ useListeners: () => (/* binding */ useListeners), 2060/* harmony export */ useSlots: () => (/* binding */ useSlots), 2061/* harmony export */ version: () => (/* binding */ version), 2062/* harmony export */ watch: () => (/* binding */ watch), 2063/* harmony export */ watchEffect: () => (/* binding */ watchEffect), 2064/* harmony export */ watchPostEffect: () => (/* binding */ watchPostEffect), 2065/* harmony export */ watchSyncEffect: () => (/* binding */ watchSyncEffect) 2066/* harmony export */ }); 2067/*! 2068 * Vue.js v2.7.14 2069 * (c) 2014-2022 Evan You 2070 * Released under the MIT License. 2071 */ 2072var emptyObject = Object.freeze({}); 2073var isArray = Array.isArray; 2074// These helpers produce better VM code in JS engines due to their 2075// explicitness and function inlining. 2076function isUndef(v) { 2077 return v === undefined || v === null; 2078} 2079function isDef(v) { 2080 return v !== undefined && v !== null; 2081} 2082function isTrue(v) { 2083 return v === true; 2084} 2085function isFalse(v) { 2086 return v === false; 2087} 2088/** 2089 * Check if value is primitive. 2090 */ 2091function isPrimitive(value) { 2092 return typeof value === 'string' || typeof value === 'number' || 2093 // $flow-disable-line 2094 typeof value === 'symbol' || typeof value === 'boolean'; 2095} 2096function isFunction(value) { 2097 return typeof value === 'function'; 2098} 2099/** 2100 * Quick object check - this is primarily used to tell 2101 * objects from primitive values when we know the value 2102 * is a JSON-compliant type. 2103 */ 2104function isObject(obj) { 2105 return obj !== null && typeof obj === 'object'; 2106} 2107/** 2108 * Get the raw type string of a value, e.g., [object Object]. 2109 */ 2110var _toString = Object.prototype.toString; 2111function toRawType(value) { 2112 return _toString.call(value).slice(8, -1); 2113} 2114/** 2115 * Strict object type check. Only returns true 2116 * for plain JavaScript objects. 2117 */ 2118function isPlainObject(obj) { 2119 return _toString.call(obj) === '[object Object]'; 2120} 2121function isRegExp(v) { 2122 return _toString.call(v) === '[object RegExp]'; 2123} 2124/** 2125 * Check if val is a valid array index. 2126 */ 2127function isValidArrayIndex(val) { 2128 var n = parseFloat(String(val)); 2129 return n >= 0 && Math.floor(n) === n && isFinite(val); 2130} 2131function isPromise(val) { 2132 return isDef(val) && typeof val.then === 'function' && typeof val.catch === 'function'; 2133} 2134/** 2135 * Convert a value to a string that is actually rendered. 2136 */ 2137function toString(val) { 2138 return val == null ? '' : Array.isArray(val) || isPlainObject(val) && val.toString === _toString ? JSON.stringify(val, null, 2) : String(val); 2139} 2140/** 2141 * Convert an input value to a number for persistence. 2142 * If the conversion fails, return original string. 2143 */ 2144function toNumber(val) { 2145 var n = parseFloat(val); 2146 return isNaN(n) ? val : n; 2147} 2148/** 2149 * Make a map and return a function for checking if a key 2150 * is in that map. 2151 */ 2152function makeMap(str, expectsLowerCase) { 2153 var map = Object.create(null); 2154 var list = str.split(','); 2155 for (var i = 0; i < list.length; i++) { 2156 map[list[i]] = true; 2157 } 2158 return expectsLowerCase ? function (val) { 2159 return map[val.toLowerCase()]; 2160 } : function (val) { 2161 return map[val]; 2162 }; 2163} 2164/** 2165 * Check if a tag is a built-in tag. 2166 */ 2167var isBuiltInTag = makeMap('slot,component', true); 2168/** 2169 * Check if an attribute is a reserved attribute. 2170 */ 2171var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is'); 2172/** 2173 * Remove an item from an array. 2174 */ 2175function remove$2(arr, item) { 2176 var len = arr.length; 2177 if (len) { 2178 // fast path for the only / last item 2179 if (item === arr[len - 1]) { 2180 arr.length = len - 1; 2181 return; 2182 } 2183 var index = arr.indexOf(item); 2184 if (index > -1) { 2185 return arr.splice(index, 1); 2186 } 2187 } 2188} 2189/** 2190 * Check whether an object has the property. 2191 */ 2192var hasOwnProperty = Object.prototype.hasOwnProperty; 2193function hasOwn(obj, key) { 2194 return hasOwnProperty.call(obj, key); 2195} 2196/** 2197 * Create a cached version of a pure function. 2198 */ 2199function cached(fn) { 2200 var cache = Object.create(null); 2201 return function cachedFn(str) { 2202 var hit = cache[str]; 2203 return hit || (cache[str] = fn(str)); 2204 }; 2205} 2206/** 2207 * Camelize a hyphen-delimited string. 2208 */ 2209var camelizeRE = /-(\w)/g; 2210var camelize = cached(function (str) { 2211 return str.replace(camelizeRE, function (_, c) { 2212 return c ? c.toUpperCase() : ''; 2213 }); 2214}); 2215/** 2216 * Capitalize a string. 2217 */ 2218var capitalize = cached(function (str) { 2219 return str.charAt(0).toUpperCase() + str.slice(1); 2220}); 2221/** 2222 * Hyphenate a camelCase string. 2223 */ 2224var hyphenateRE = /\B([A-Z])/g; 2225var hyphenate = cached(function (str) { 2226 return str.replace(hyphenateRE, '-$1').toLowerCase(); 2227}); 2228/** 2229 * Simple bind polyfill for environments that do not support it, 2230 * e.g., PhantomJS 1.x. Technically, we don't need this anymore 2231 * since native bind is now performant enough in most browsers. 2232 * But removing it would mean breaking code that was able to run in 2233 * PhantomJS 1.x, so this must be kept for backward compatibility. 2234 */ 2235/* istanbul ignore next */ 2236function polyfillBind(fn, ctx) { 2237 function boundFn(a) { 2238 var l = arguments.length; 2239 return l ? l > 1 ? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx); 2240 } 2241 boundFn._length = fn.length; 2242 return boundFn; 2243} 2244function nativeBind(fn, ctx) { 2245 return fn.bind(ctx); 2246} 2247// @ts-expect-error bind cannot be `undefined` 2248var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind; 2249/** 2250 * Convert an Array-like object to a real Array. 2251 */ 2252function toArray(list, start) { 2253 start = start || 0; 2254 var i = list.length - start; 2255 var ret = new Array(i); 2256 while (i--) { 2257 ret[i] = list[i + start]; 2258 } 2259 return ret; 2260} 2261/** 2262 * Mix properties into target object. 2263 */ 2264function extend(to, _from) { 2265 for (var key in _from) { 2266 to[key] = _from[key]; 2267 } 2268 return to; 2269} 2270/** 2271 * Merge an Array of Objects into a single Object. 2272 */ 2273function toObject(arr) { 2274 var res = {}; 2275 for (var i = 0; i < arr.length; i++) { 2276 if (arr[i]) { 2277 extend(res, arr[i]); 2278 } 2279 } 2280 return res; 2281} 2282/* eslint-disable no-unused-vars */ 2283/** 2284 * Perform no operation. 2285 * Stubbing args to make Flow happy without leaving useless transpiled code 2286 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). 2287 */ 2288function noop(a, b, c) {} 2289/** 2290 * Always return false. 2291 */ 2292var no = function (a, b, c) { 2293 return false; 2294}; 2295/* eslint-enable no-unused-vars */ 2296/** 2297 * Return the same value. 2298 */ 2299var identity = function (_) { 2300 return _; 2301}; 2302/** 2303 * Generate a string containing static keys from compiler modules. 2304 */ 2305function genStaticKeys$1(modules) { 2306 return modules.reduce(function (keys, m) { 2307 return keys.concat(m.staticKeys || []); 2308 }, []).join(','); 2309} 2310/** 2311 * Check if two values are loosely equal - that is, 2312 * if they are plain objects, do they have the same shape? 2313 */ 2314function looseEqual(a, b) { 2315 if (a === b) return true; 2316 var isObjectA = isObject(a); 2317 var isObjectB = isObject(b); 2318 if (isObjectA && isObjectB) { 2319 try { 2320 var isArrayA = Array.isArray(a); 2321 var isArrayB = Array.isArray(b); 2322 if (isArrayA && isArrayB) { 2323 return a.length === b.length && a.every(function (e, i) { 2324 return looseEqual(e, b[i]); 2325 }); 2326 } else if (a instanceof Date && b instanceof Date) { 2327 return a.getTime() === b.getTime(); 2328 } else if (!isArrayA && !isArrayB) { 2329 var keysA = Object.keys(a); 2330 var keysB = Object.keys(b); 2331 return keysA.length === keysB.length && keysA.every(function (key) { 2332 return looseEqual(a[key], b[key]); 2333 }); 2334 } else { 2335 /* istanbul ignore next */ 2336 return false; 2337 } 2338 } catch (e) { 2339 /* istanbul ignore next */ 2340 return false; 2341 } 2342 } else if (!isObjectA && !isObjectB) { 2343 return String(a) === String(b); 2344 } else { 2345 return false; 2346 } 2347} 2348/** 2349 * Return the first index at which a loosely equal value can be 2350 * found in the array (if value is a plain object, the array must 2351 * contain an object of the same shape), or -1 if it is not present. 2352 */ 2353function looseIndexOf(arr, val) { 2354 for (var i = 0; i < arr.length; i++) { 2355 if (looseEqual(arr[i], val)) return i; 2356 } 2357 return -1; 2358} 2359/** 2360 * Ensure a function is called only once. 2361 */ 2362function once(fn) { 2363 var called = false; 2364 return function () { 2365 if (!called) { 2366 called = true; 2367 fn.apply(this, arguments); 2368 } 2369 }; 2370} 2371// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill 2372function hasChanged(x, y) { 2373 if (x === y) { 2374 return x === 0 && 1 / x !== 1 / y; 2375 } else { 2376 return x === x || y === y; 2377 } 2378} 2379var SSR_ATTR = 'data-server-rendered'; 2380var ASSET_TYPES = ['component', 'directive', 'filter']; 2381var LIFECYCLE_HOOKS = ['beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'beforeDestroy', 'destroyed', 'activated', 'deactivated', 'errorCaptured', 'serverPrefetch', 'renderTracked', 'renderTriggered']; 2382var config = { 2383 /** 2384 * Option merge strategies (used in core/util/options) 2385 */ 2386 // $flow-disable-line 2387 optionMergeStrategies: Object.create(null), 2388 /** 2389 * Whether to suppress warnings. 2390 */ 2391 silent: false, 2392 /** 2393 * Show production mode tip message on boot? 2394 */ 2395 productionTip: "development" !== 'production', 2396 /** 2397 * Whether to enable devtools 2398 */ 2399 devtools: "development" !== 'production', 2400 /** 2401 * Whether to record perf 2402 */ 2403 performance: false, 2404 /** 2405 * Error handler for watcher errors 2406 */ 2407 errorHandler: null, 2408 /** 2409 * Warn handler for watcher warns 2410 */ 2411 warnHandler: null, 2412 /** 2413 * Ignore certain custom elements 2414 */ 2415 ignoredElements: [], 2416 /** 2417 * Custom user key aliases for v-on 2418 */ 2419 // $flow-disable-line 2420 keyCodes: Object.create(null), 2421 /** 2422 * Check if a tag is reserved so that it cannot be registered as a 2423 * component. This is platform-dependent and may be overwritten. 2424 */ 2425 isReservedTag: no, 2426 /** 2427 * Check if an attribute is reserved so that it cannot be used as a component 2428 * prop. This is platform-dependent and may be overwritten. 2429 */ 2430 isReservedAttr: no, 2431 /** 2432 * Check if a tag is an unknown element. 2433 * Platform-dependent. 2434 */ 2435 isUnknownElement: no, 2436 /** 2437 * Get the namespace of an element 2438 */ 2439 getTagNamespace: noop, 2440 /** 2441 * Parse the real tag name for the specific platform. 2442 */ 2443 parsePlatformTagName: identity, 2444 /** 2445 * Check if an attribute must be bound using property, e.g. value 2446 * Platform-dependent. 2447 */ 2448 mustUseProp: no, 2449 /** 2450 * Perform updates asynchronously. Intended to be used by Vue Test Utils 2451 * This will significantly reduce performance if set to false. 2452 */ 2453 async: true, 2454 /** 2455 * Exposed for legacy reasons 2456 */ 2457 _lifecycleHooks: LIFECYCLE_HOOKS 2458}; 2459 2460/** 2461 * unicode letters used for parsing html tags, component names and property paths. 2462 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname 2463 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS 2464 */ 2465var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/; 2466/** 2467 * Check if a string starts with $ or _ 2468 */ 2469function isReserved(str) { 2470 var c = (str + '').charCodeAt(0); 2471 return c === 0x24 || c === 0x5f; 2472} 2473/** 2474 * Define a property. 2475 */ 2476function def(obj, key, val, enumerable) { 2477 Object.defineProperty(obj, key, { 2478 value: val, 2479 enumerable: !!enumerable, 2480 writable: true, 2481 configurable: true 2482 }); 2483} 2484/** 2485 * Parse simple path. 2486 */ 2487var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]")); 2488function parsePath(path) { 2489 if (bailRE.test(path)) { 2490 return; 2491 } 2492 var segments = path.split('.'); 2493 return function (obj) { 2494 for (var i = 0; i < segments.length; i++) { 2495 if (!obj) return; 2496 obj = obj[segments[i]]; 2497 } 2498 return obj; 2499 }; 2500} 2501 2502// can we use __proto__? 2503var hasProto = ('__proto__' in {}); 2504// Browser environment sniffing 2505var inBrowser = typeof window !== 'undefined'; 2506var UA = inBrowser && window.navigator.userAgent.toLowerCase(); 2507var isIE = UA && /msie|trident/.test(UA); 2508var isIE9 = UA && UA.indexOf('msie 9.0') > 0; 2509var isEdge = UA && UA.indexOf('edge/') > 0; 2510UA && UA.indexOf('android') > 0; 2511var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA); 2512UA && /chrome\/\d+/.test(UA) && !isEdge; 2513UA && /phantomjs/.test(UA); 2514var isFF = UA && UA.match(/firefox\/(\d+)/); 2515// Firefox has a "watch" function on Object.prototype... 2516// @ts-expect-error firebox support 2517var nativeWatch = {}.watch; 2518var supportsPassive = false; 2519if (inBrowser) { 2520 try { 2521 var opts = {}; 2522 Object.defineProperty(opts, 'passive', { 2523 get: function () { 2524 /* istanbul ignore next */ 2525 supportsPassive = true; 2526 } 2527 }); // https://github.com/facebook/flow/issues/285 2528 window.addEventListener('test-passive', null, opts); 2529 } catch (e) {} 2530} 2531// this needs to be lazy-evaled because vue may be required before 2532// vue-server-renderer can set VUE_ENV 2533var _isServer; 2534var isServerRendering = function () { 2535 if (_isServer === undefined) { 2536 /* istanbul ignore if */ 2537 if (!inBrowser && typeof __webpack_require__.g !== 'undefined') { 2538 // detect presence of vue-server-renderer and avoid 2539 // Webpack shimming the process 2540 _isServer = __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server'; 2541 } else { 2542 _isServer = false; 2543 } 2544 } 2545 return _isServer; 2546}; 2547// detect devtools 2548var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__; 2549/* istanbul ignore next */ 2550function isNative(Ctor) { 2551 return typeof Ctor === 'function' && /native code/.test(Ctor.toString()); 2552} 2553var hasSymbol = typeof Symbol !== 'undefined' && isNative(Symbol) && typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys); 2554var _Set; // $flow-disable-line 2555/* istanbul ignore if */ 2556if (typeof Set !== 'undefined' && isNative(Set)) { 2557 // use native Set when available. 2558 _Set = Set; 2559} else { 2560 // a non-standard Set polyfill that only works with primitive keys. 2561 _Set = /** @class */function () { 2562 function Set() { 2563 this.set = Object.create(null); 2564 } 2565 Set.prototype.has = function (key) { 2566 return this.set[key] === true; 2567 }; 2568 Set.prototype.add = function (key) { 2569 this.set[key] = true; 2570 }; 2571 Set.prototype.clear = function () { 2572 this.set = Object.create(null); 2573 }; 2574 return Set; 2575 }(); 2576} 2577var currentInstance = null; 2578/** 2579 * This is exposed for compatibility with v3 (e.g. some functions in VueUse 2580 * relies on it). Do not use this internally, just use `currentInstance`. 2581 * 2582 * @internal this function needs manual type declaration because it relies 2583 * on previously manually authored types from Vue 2 2584 */ 2585function getCurrentInstance() { 2586 return currentInstance && { 2587 proxy: currentInstance 2588 }; 2589} 2590/** 2591 * @internal 2592 */ 2593function setCurrentInstance(vm) { 2594 if (vm === void 0) { 2595 vm = null; 2596 } 2597 if (!vm) currentInstance && currentInstance._scope.off(); 2598 currentInstance = vm; 2599 vm && vm._scope.on(); 2600} 2601 2602/** 2603 * @internal 2604 */ 2605var VNode = /** @class */function () { 2606 function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) { 2607 this.tag = tag; 2608 this.data = data; 2609 this.children = children; 2610 this.text = text; 2611 this.elm = elm; 2612 this.ns = undefined; 2613 this.context = context; 2614 this.fnContext = undefined; 2615 this.fnOptions = undefined; 2616 this.fnScopeId = undefined; 2617 this.key = data && data.key; 2618 this.componentOptions = componentOptions; 2619 this.componentInstance = undefined; 2620 this.parent = undefined; 2621 this.raw = false; 2622 this.isStatic = false; 2623 this.isRootInsert = true; 2624 this.isComment = false; 2625 this.isCloned = false; 2626 this.isOnce = false; 2627 this.asyncFactory = asyncFactory; 2628 this.asyncMeta = undefined; 2629 this.isAsyncPlaceholder = false; 2630 } 2631 Object.defineProperty(VNode.prototype, "child", { 2632 // DEPRECATED: alias for componentInstance for backwards compat. 2633 /* istanbul ignore next */ 2634 get: function () { 2635 return this.componentInstance; 2636 }, 2637 enumerable: false, 2638 configurable: true 2639 }); 2640 return VNode; 2641}(); 2642var createEmptyVNode = function (text) { 2643 if (text === void 0) { 2644 text = ''; 2645 } 2646 var node = new VNode(); 2647 node.text = text; 2648 node.isComment = true; 2649 return node; 2650}; 2651function createTextVNode(val) { 2652 return new VNode(undefined, undefined, undefined, String(val)); 2653} 2654// optimized shallow clone 2655// used for static nodes and slot nodes because they may be reused across 2656// multiple renders, cloning them avoids errors when DOM manipulations rely 2657// on their elm reference. 2658function cloneVNode(vnode) { 2659 var cloned = new VNode(vnode.tag, vnode.data, 2660 // #7975 2661 // clone children array to avoid mutating original in case of cloning 2662 // a child. 2663 vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory); 2664 cloned.ns = vnode.ns; 2665 cloned.isStatic = vnode.isStatic; 2666 cloned.key = vnode.key; 2667 cloned.isComment = vnode.isComment; 2668 cloned.fnContext = vnode.fnContext; 2669 cloned.fnOptions = vnode.fnOptions; 2670 cloned.fnScopeId = vnode.fnScopeId; 2671 cloned.asyncMeta = vnode.asyncMeta; 2672 cloned.isCloned = true; 2673 return cloned; 2674} 2675 2676/* not type checking this file because flow doesn't play well with Proxy */ 2677var initProxy; 2678if (true) { 2679 var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' + 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' + 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' + 'require' // for Webpack/Browserify 2680 ); 2681 var warnNonPresent_1 = function (target, key) { 2682 warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") + 'referenced during render. Make sure that this property is reactive, ' + 'either in the data option, or for class-based components, by ' + 'initializing the property. ' + 'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target); 2683 }; 2684 var warnReservedPrefix_1 = function (target, key) { 2685 warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") + 'properties starting with "$" or "_" are not proxied in the Vue instance to ' + 'prevent conflicts with Vue internals. ' + 'See: https://v2.vuejs.org/v2/api/#data', target); 2686 }; 2687 var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy); 2688 if (hasProxy_1) { 2689 var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact'); 2690 config.keyCodes = new Proxy(config.keyCodes, { 2691 set: function (target, key, value) { 2692 if (isBuiltInModifier_1(key)) { 2693 warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key)); 2694 return false; 2695 } else { 2696 target[key] = value; 2697 return true; 2698 } 2699 } 2700 }); 2701 } 2702 var hasHandler_1 = { 2703 has: function (target, key) { 2704 var has = (key in target); 2705 var isAllowed = allowedGlobals_1(key) || typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data); 2706 if (!has && !isAllowed) { 2707 if (key in target.$data) warnReservedPrefix_1(target, key);else warnNonPresent_1(target, key); 2708 } 2709 return has || !isAllowed; 2710 } 2711 }; 2712 var getHandler_1 = { 2713 get: function (target, key) { 2714 if (typeof key === 'string' && !(key in target)) { 2715 if (key in target.$data) warnReservedPrefix_1(target, key);else warnNonPresent_1(target, key); 2716 } 2717 return target[key]; 2718 } 2719 }; 2720 initProxy = function initProxy(vm) { 2721 if (hasProxy_1) { 2722 // determine which proxy handler to use 2723 var options = vm.$options; 2724 var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1; 2725 vm._renderProxy = new Proxy(vm, handlers); 2726 } else { 2727 vm._renderProxy = vm; 2728 } 2729 }; 2730} 2731 2732/****************************************************************************** 2733Copyright (c) Microsoft Corporation. 2734 2735Permission to use, copy, modify, and/or distribute this software for any 2736purpose with or without fee is hereby granted. 2737 2738THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 2739REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 2740AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 2741INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 2742LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 2743OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 2744PERFORMANCE OF THIS SOFTWARE. 2745***************************************************************************** */ 2746 2747var __assign = function () { 2748 __assign = Object.assign || function __assign(t) { 2749 for (var s, i = 1, n = arguments.length; i < n; i++) { 2750 s = arguments[i]; 2751 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 2752 } 2753 return t; 2754 }; 2755 return __assign.apply(this, arguments); 2756}; 2757var uid$2 = 0; 2758var pendingCleanupDeps = []; 2759var cleanupDeps = function () { 2760 for (var i = 0; i < pendingCleanupDeps.length; i++) { 2761 var dep = pendingCleanupDeps[i]; 2762 dep.subs = dep.subs.filter(function (s) { 2763 return s; 2764 }); 2765 dep._pending = false; 2766 } 2767 pendingCleanupDeps.length = 0; 2768}; 2769/** 2770 * A dep is an observable that can have multiple 2771 * directives subscribing to it. 2772 * @internal 2773 */ 2774var Dep = /** @class */function () { 2775 function Dep() { 2776 // pending subs cleanup 2777 this._pending = false; 2778 this.id = uid$2++; 2779 this.subs = []; 2780 } 2781 Dep.prototype.addSub = function (sub) { 2782 this.subs.push(sub); 2783 }; 2784 Dep.prototype.removeSub = function (sub) { 2785 // #12696 deps with massive amount of subscribers are extremely slow to 2786 // clean up in Chromium 2787 // to workaround this, we unset the sub for now, and clear them on 2788 // next scheduler flush. 2789 this.subs[this.subs.indexOf(sub)] = null; 2790 if (!this._pending) { 2791 this._pending = true; 2792 pendingCleanupDeps.push(this); 2793 } 2794 }; 2795 Dep.prototype.depend = function (info) { 2796 if (Dep.target) { 2797 Dep.target.addDep(this); 2798 if ( true && info && Dep.target.onTrack) { 2799 Dep.target.onTrack(__assign({ 2800 effect: Dep.target 2801 }, info)); 2802 } 2803 } 2804 }; 2805 Dep.prototype.notify = function (info) { 2806 // stabilize the subscriber list first 2807 var subs = this.subs.filter(function (s) { 2808 return s; 2809 }); 2810 if ( true && !config.async) { 2811 // subs aren't sorted in scheduler if not running async 2812 // we need to sort them now to make sure they fire in correct 2813 // order 2814 subs.sort(function (a, b) { 2815 return a.id - b.id; 2816 }); 2817 } 2818 for (var i = 0, l = subs.length; i < l; i++) { 2819 var sub = subs[i]; 2820 if ( true && info) { 2821 sub.onTrigger && sub.onTrigger(__assign({ 2822 effect: subs[i] 2823 }, info)); 2824 } 2825 sub.update(); 2826 } 2827 }; 2828 return Dep; 2829}(); 2830// The current target watcher being evaluated. 2831// This is globally unique because only one watcher 2832// can be evaluated at a time. 2833Dep.target = null; 2834var targetStack = []; 2835function pushTarget(target) { 2836 targetStack.push(target); 2837 Dep.target = target; 2838} 2839function popTarget() { 2840 targetStack.pop(); 2841 Dep.target = targetStack[targetStack.length - 1]; 2842} 2843 2844/* 2845 * not type checking this file because flow doesn't play well with 2846 * dynamically accessing methods on Array prototype 2847 */ 2848var arrayProto = Array.prototype; 2849var arrayMethods = Object.create(arrayProto); 2850var methodsToPatch = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse']; 2851/** 2852 * Intercept mutating methods and emit events 2853 */ 2854methodsToPatch.forEach(function (method) { 2855 // cache original method 2856 var original = arrayProto[method]; 2857 def(arrayMethods, method, function mutator() { 2858 var args = []; 2859 for (var _i = 0; _i < arguments.length; _i++) { 2860 args[_i] = arguments[_i]; 2861 } 2862 var result = original.apply(this, args); 2863 var ob = this.__ob__; 2864 var inserted; 2865 switch (method) { 2866 case 'push': 2867 case 'unshift': 2868 inserted = args; 2869 break; 2870 case 'splice': 2871 inserted = args.slice(2); 2872 break; 2873 } 2874 if (inserted) ob.observeArray(inserted); 2875 // notify change 2876 if (true) { 2877 ob.dep.notify({ 2878 type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */, 2879 target: this, 2880 key: method 2881 }); 2882 } else {} 2883 return result; 2884 }); 2885}); 2886var arrayKeys = Object.getOwnPropertyNames(arrayMethods); 2887var NO_INIITIAL_VALUE = {}; 2888/** 2889 * In some cases we may want to disable observation inside a component's 2890 * update computation. 2891 */ 2892var shouldObserve = true; 2893function toggleObserving(value) { 2894 shouldObserve = value; 2895} 2896// ssr mock dep 2897var mockDep = { 2898 notify: noop, 2899 depend: noop, 2900 addSub: noop, 2901 removeSub: noop 2902}; 2903/** 2904 * Observer class that is attached to each observed 2905 * object. Once attached, the observer converts the target 2906 * object's property keys into getter/setters that 2907 * collect dependencies and dispatch updates. 2908 */ 2909var Observer = /** @class */function () { 2910 function Observer(value, shallow, mock) { 2911 if (shallow === void 0) { 2912 shallow = false; 2913 } 2914 if (mock === void 0) { 2915 mock = false; 2916 } 2917 this.value = value; 2918 this.shallow = shallow; 2919 this.mock = mock; 2920 // this.value = value 2921 this.dep = mock ? mockDep : new Dep(); 2922 this.vmCount = 0; 2923 def(value, '__ob__', this); 2924 if (isArray(value)) { 2925 if (!mock) { 2926 if (hasProto) { 2927 value.__proto__ = arrayMethods; 2928 /* eslint-enable no-proto */ 2929 } else { 2930 for (var i = 0, l = arrayKeys.length; i < l; i++) { 2931 var key = arrayKeys[i]; 2932 def(value, key, arrayMethods[key]); 2933 } 2934 } 2935 } 2936 if (!shallow) { 2937 this.observeArray(value); 2938 } 2939 } else { 2940 /** 2941 * Walk through all properties and convert them into 2942 * getter/setters. This method should only be called when 2943 * value type is Object. 2944 */ 2945 var keys = Object.keys(value); 2946 for (var i = 0; i < keys.length; i++) { 2947 var key = keys[i]; 2948 defineReactive(value, key, NO_INIITIAL_VALUE, undefined, shallow, mock); 2949 } 2950 } 2951 } 2952 /** 2953 * Observe a list of Array items. 2954 */ 2955 Observer.prototype.observeArray = function (value) { 2956 for (var i = 0, l = value.length; i < l; i++) { 2957 observe(value[i], false, this.mock); 2958 } 2959 }; 2960 return Observer; 2961}(); 2962// helpers 2963/** 2964 * Attempt to create an observer instance for a value, 2965 * returns the new observer if successfully observed, 2966 * or the existing observer if the value already has one. 2967 */ 2968function observe(value, shallow, ssrMockReactivity) { 2969 if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) { 2970 return value.__ob__; 2971 } 2972 if (shouldObserve && (ssrMockReactivity || !isServerRendering()) && (isArray(value) || isPlainObject(value)) && Object.isExtensible(value) && !value.__v_skip /* ReactiveFlags.SKIP */ && !isRef(value) && !(value instanceof VNode)) { 2973 return new Observer(value, shallow, ssrMockReactivity); 2974 } 2975} 2976/** 2977 * Define a reactive property on an Object. 2978 */ 2979function defineReactive(obj, key, val, customSetter, shallow, mock) { 2980 var dep = new Dep(); 2981 var property = Object.getOwnPropertyDescriptor(obj, key); 2982 if (property && property.configurable === false) { 2983 return; 2984 } 2985 // cater for pre-defined getter/setters 2986 var getter = property && property.get; 2987 var setter = property && property.set; 2988 if ((!getter || setter) && (val === NO_INIITIAL_VALUE || arguments.length === 2)) { 2989 val = obj[key]; 2990 } 2991 var childOb = !shallow && observe(val, false, mock); 2992 Object.defineProperty(obj, key, { 2993 enumerable: true, 2994 configurable: true, 2995 get: function reactiveGetter() { 2996 var value = getter ? getter.call(obj) : val; 2997 if (Dep.target) { 2998 if (true) { 2999 dep.depend({ 3000 target: obj, 3001 type: "get" /* TrackOpTypes.GET */, 3002 key: key 3003 }); 3004 } else {} 3005 if (childOb) { 3006 childOb.dep.depend(); 3007 if (isArray(value)) { 3008 dependArray(value); 3009 } 3010 } 3011 } 3012 return isRef(value) && !shallow ? value.value : value; 3013 }, 3014 set: function reactiveSetter(newVal) { 3015 var value = getter ? getter.call(obj) : val; 3016 if (!hasChanged(value, newVal)) { 3017 return; 3018 } 3019 if ( true && customSetter) { 3020 customSetter(); 3021 } 3022 if (setter) { 3023 setter.call(obj, newVal); 3024 } else if (getter) { 3025 // #7981: for accessor properties without setter 3026 return; 3027 } else if (!shallow && isRef(value) && !isRef(newVal)) { 3028 value.value = newVal; 3029 return; 3030 } else { 3031 val = newVal; 3032 } 3033 childOb = !shallow && observe(newVal, false, mock); 3034 if (true) { 3035 dep.notify({ 3036 type: "set" /* TriggerOpTypes.SET */, 3037 target: obj, 3038 key: key, 3039 newValue: newVal, 3040 oldValue: value 3041 }); 3042 } else {} 3043 } 3044 }); 3045 return dep; 3046} 3047function set(target, key, val) { 3048 if ( true && (isUndef(target) || isPrimitive(target))) { 3049 warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target)); 3050 } 3051 if (isReadonly(target)) { 3052 true && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); 3053 return; 3054 } 3055 var ob = target.__ob__; 3056 if (isArray(target) && isValidArrayIndex(key)) { 3057 target.length = Math.max(target.length, key); 3058 target.splice(key, 1, val); 3059 // when mocking for SSR, array methods are not hijacked 3060 if (ob && !ob.shallow && ob.mock) { 3061 observe(val, false, true); 3062 } 3063 return val; 3064 } 3065 if (key in target && !(key in Object.prototype)) { 3066 target[key] = val; 3067 return val; 3068 } 3069 if (target._isVue || ob && ob.vmCount) { 3070 true && warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' + 'at runtime - declare it upfront in the data option.'); 3071 return val; 3072 } 3073 if (!ob) { 3074 target[key] = val; 3075 return val; 3076 } 3077 defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock); 3078 if (true) { 3079 ob.dep.notify({ 3080 type: "add" /* TriggerOpTypes.ADD */, 3081 target: target, 3082 key: key, 3083 newValue: val, 3084 oldValue: undefined 3085 }); 3086 } else {} 3087 return val; 3088} 3089function del(target, key) { 3090 if ( true && (isUndef(target) || isPrimitive(target))) { 3091 warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target)); 3092 } 3093 if (isArray(target) && isValidArrayIndex(key)) { 3094 target.splice(key, 1); 3095 return; 3096 } 3097 var ob = target.__ob__; 3098 if (target._isVue || ob && ob.vmCount) { 3099 true && warn$2('Avoid deleting properties on a Vue instance or its root $data ' + '- just set it to null.'); 3100 return; 3101 } 3102 if (isReadonly(target)) { 3103 true && warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly.")); 3104 return; 3105 } 3106 if (!hasOwn(target, key)) { 3107 return; 3108 } 3109 delete target[key]; 3110 if (!ob) { 3111 return; 3112 } 3113 if (true) { 3114 ob.dep.notify({ 3115 type: "delete" /* TriggerOpTypes.DELETE */, 3116 target: target, 3117 key: key 3118 }); 3119 } else {} 3120} 3121/** 3122 * Collect dependencies on array elements when the array is touched, since 3123 * we cannot intercept array element access like property getters. 3124 */ 3125function dependArray(value) { 3126 for (var e = void 0, i = 0, l = value.length; i < l; i++) { 3127 e = value[i]; 3128 if (e && e.__ob__) { 3129 e.__ob__.dep.depend(); 3130 } 3131 if (isArray(e)) { 3132 dependArray(e); 3133 } 3134 } 3135} 3136function reactive(target) { 3137 makeReactive(target, false); 3138 return target; 3139} 3140/** 3141 * Return a shallowly-reactive copy of the original object, where only the root 3142 * level properties are reactive. It also does not auto-unwrap refs (even at the 3143 * root level). 3144 */ 3145function shallowReactive(target) { 3146 makeReactive(target, true); 3147 def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); 3148 return target; 3149} 3150function makeReactive(target, shallow) { 3151 // if trying to observe a readonly proxy, return the readonly version. 3152 if (!isReadonly(target)) { 3153 if (true) { 3154 if (isArray(target)) { 3155 warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation.")); 3156 } 3157 var existingOb = target && target.__ob__; 3158 if (existingOb && existingOb.shallow !== shallow) { 3159 warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow.")); 3160 } 3161 } 3162 var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */); 3163 if ( true && !ob) { 3164 if (target == null || isPrimitive(target)) { 3165 warn$2("value cannot be made reactive: ".concat(String(target))); 3166 } 3167 if (isCollectionType(target)) { 3168 warn$2("Vue 2 does not support reactive collection types such as Map or Set."); 3169 } 3170 } 3171 } 3172} 3173function isReactive(value) { 3174 if (isReadonly(value)) { 3175 return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]); 3176 } 3177 return !!(value && value.__ob__); 3178} 3179function isShallow(value) { 3180 return !!(value && value.__v_isShallow); 3181} 3182function isReadonly(value) { 3183 return !!(value && value.__v_isReadonly); 3184} 3185function isProxy(value) { 3186 return isReactive(value) || isReadonly(value); 3187} 3188function toRaw(observed) { 3189 var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */]; 3190 return raw ? toRaw(raw) : observed; 3191} 3192function markRaw(value) { 3193 // non-extensible objects won't be observed anyway 3194 if (Object.isExtensible(value)) { 3195 def(value, "__v_skip" /* ReactiveFlags.SKIP */, true); 3196 } 3197 return value; 3198} 3199/** 3200 * @internal 3201 */ 3202function isCollectionType(value) { 3203 var type = toRawType(value); 3204 return type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet'; 3205} 3206 3207/** 3208 * @internal 3209 */ 3210var RefFlag = "__v_isRef"; 3211function isRef(r) { 3212 return !!(r && r.__v_isRef === true); 3213} 3214function ref$1(value) { 3215 return createRef(value, false); 3216} 3217function shallowRef(value) { 3218 return createRef(value, true); 3219} 3220function createRef(rawValue, shallow) { 3221 if (isRef(rawValue)) { 3222 return rawValue; 3223 } 3224 var ref = {}; 3225 def(ref, RefFlag, true); 3226 def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow); 3227 def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering())); 3228 return ref; 3229} 3230function triggerRef(ref) { 3231 if ( true && !ref.dep) { 3232 warn$2("received object is not a triggerable ref."); 3233 } 3234 if (true) { 3235 ref.dep && ref.dep.notify({ 3236 type: "set" /* TriggerOpTypes.SET */, 3237 target: ref, 3238 key: 'value' 3239 }); 3240 } else {} 3241} 3242function unref(ref) { 3243 return isRef(ref) ? ref.value : ref; 3244} 3245function proxyRefs(objectWithRefs) { 3246 if (isReactive(objectWithRefs)) { 3247 return objectWithRefs; 3248 } 3249 var proxy = {}; 3250 var keys = Object.keys(objectWithRefs); 3251 for (var i = 0; i < keys.length; i++) { 3252 proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]); 3253 } 3254 return proxy; 3255} 3256function proxyWithRefUnwrap(target, source, key) { 3257 Object.defineProperty(target, key, { 3258 enumerable: true, 3259 configurable: true, 3260 get: function () { 3261 var val = source[key]; 3262 if (isRef(val)) { 3263 return val.value; 3264 } else { 3265 var ob = val && val.__ob__; 3266 if (ob) ob.dep.depend(); 3267 return val; 3268 } 3269 }, 3270 set: function (value) { 3271 var oldValue = source[key]; 3272 if (isRef(oldValue) && !isRef(value)) { 3273 oldValue.value = value; 3274 } else { 3275 source[key] = value; 3276 } 3277 } 3278 }); 3279} 3280function customRef(factory) { 3281 var dep = new Dep(); 3282 var _a = factory(function () { 3283 if (true) { 3284 dep.depend({ 3285 target: ref, 3286 type: "get" /* TrackOpTypes.GET */, 3287 key: 'value' 3288 }); 3289 } else {} 3290 }, function () { 3291 if (true) { 3292 dep.notify({ 3293 target: ref, 3294 type: "set" /* TriggerOpTypes.SET */, 3295 key: 'value' 3296 }); 3297 } else {} 3298 }), 3299 get = _a.get, 3300 set = _a.set; 3301 var ref = { 3302 get value() { 3303 return get(); 3304 }, 3305 set value(newVal) { 3306 set(newVal); 3307 } 3308 }; 3309 def(ref, RefFlag, true); 3310 return ref; 3311} 3312function toRefs(object) { 3313 if ( true && !isReactive(object)) { 3314 warn$2("toRefs() expects a reactive object but received a plain one."); 3315 } 3316 var ret = isArray(object) ? new Array(object.length) : {}; 3317 for (var key in object) { 3318 ret[key] = toRef(object, key); 3319 } 3320 return ret; 3321} 3322function toRef(object, key, defaultValue) { 3323 var val = object[key]; 3324 if (isRef(val)) { 3325 return val; 3326 } 3327 var ref = { 3328 get value() { 3329 var val = object[key]; 3330 return val === undefined ? defaultValue : val; 3331 }, 3332 set value(newVal) { 3333 object[key] = newVal; 3334 } 3335 }; 3336 def(ref, RefFlag, true); 3337 return ref; 3338} 3339var rawToReadonlyFlag = "__v_rawToReadonly"; 3340var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly"; 3341function readonly(target) { 3342 return createReadonly(target, false); 3343} 3344function createReadonly(target, shallow) { 3345 if (!isPlainObject(target)) { 3346 if (true) { 3347 if (isArray(target)) { 3348 warn$2("Vue 2 does not support readonly arrays."); 3349 } else if (isCollectionType(target)) { 3350 warn$2("Vue 2 does not support readonly collection types such as Map or Set."); 3351 } else { 3352 warn$2("value cannot be made readonly: ".concat(typeof target)); 3353 } 3354 } 3355 return target; 3356 } 3357 if ( true && !Object.isExtensible(target)) { 3358 warn$2("Vue 2 does not support creating readonly proxy for non-extensible object."); 3359 } 3360 // already a readonly object 3361 if (isReadonly(target)) { 3362 return target; 3363 } 3364 // already has a readonly proxy 3365 var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag; 3366 var existingProxy = target[existingFlag]; 3367 if (existingProxy) { 3368 return existingProxy; 3369 } 3370 var proxy = Object.create(Object.getPrototypeOf(target)); 3371 def(target, existingFlag, proxy); 3372 def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true); 3373 def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target); 3374 if (isRef(target)) { 3375 def(proxy, RefFlag, true); 3376 } 3377 if (shallow || isShallow(target)) { 3378 def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true); 3379 } 3380 var keys = Object.keys(target); 3381 for (var i = 0; i < keys.length; i++) { 3382 defineReadonlyProperty(proxy, target, keys[i], shallow); 3383 } 3384 return proxy; 3385} 3386function defineReadonlyProperty(proxy, target, key, shallow) { 3387 Object.defineProperty(proxy, key, { 3388 enumerable: true, 3389 configurable: true, 3390 get: function () { 3391 var val = target[key]; 3392 return shallow || !isPlainObject(val) ? val : readonly(val); 3393 }, 3394 set: function () { 3395 true && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly.")); 3396 } 3397 }); 3398} 3399/** 3400 * Returns a reactive-copy of the original object, where only the root level 3401 * properties are readonly, and does NOT unwrap refs nor recursively convert 3402 * returned properties. 3403 * This is used for creating the props proxy object for stateful components. 3404 */ 3405function shallowReadonly(target) { 3406 return createReadonly(target, true); 3407} 3408function computed(getterOrOptions, debugOptions) { 3409 var getter; 3410 var setter; 3411 var onlyGetter = isFunction(getterOrOptions); 3412 if (onlyGetter) { 3413 getter = getterOrOptions; 3414 setter = true ? function () { 3415 warn$2('Write operation failed: computed value is readonly'); 3416 } : 0; 3417 } else { 3418 getter = getterOrOptions.get; 3419 setter = getterOrOptions.set; 3420 } 3421 var watcher = isServerRendering() ? null : new Watcher(currentInstance, getter, noop, { 3422 lazy: true 3423 }); 3424 if ( true && watcher && debugOptions) { 3425 watcher.onTrack = debugOptions.onTrack; 3426 watcher.onTrigger = debugOptions.onTrigger; 3427 } 3428 var ref = { 3429 // some libs rely on the presence effect for checking computed refs 3430 // from normal refs, but the implementation doesn't matter 3431 effect: watcher, 3432 get value() { 3433 if (watcher) { 3434 if (watcher.dirty) { 3435 watcher.evaluate(); 3436 } 3437 if (Dep.target) { 3438 if ( true && Dep.target.onTrack) { 3439 Dep.target.onTrack({ 3440 effect: Dep.target, 3441 target: ref, 3442 type: "get" /* TrackOpTypes.GET */, 3443 key: 'value' 3444 }); 3445 } 3446 watcher.depend(); 3447 } 3448 return watcher.value; 3449 } else { 3450 return getter(); 3451 } 3452 }, 3453 set value(newVal) { 3454 setter(newVal); 3455 } 3456 }; 3457 def(ref, RefFlag, true); 3458 def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter); 3459 return ref; 3460} 3461var mark; 3462var measure; 3463if (true) { 3464 var perf_1 = inBrowser && window.performance; 3465 /* istanbul ignore if */ 3466 if (perf_1 && 3467 // @ts-ignore 3468 perf_1.mark && 3469 // @ts-ignore 3470 perf_1.measure && 3471 // @ts-ignore 3472 perf_1.clearMarks && 3473 // @ts-ignore 3474 perf_1.clearMeasures) { 3475 mark = function (tag) { 3476 return perf_1.mark(tag); 3477 }; 3478 measure = function (name, startTag, endTag) { 3479 perf_1.measure(name, startTag, endTag); 3480 perf_1.clearMarks(startTag); 3481 perf_1.clearMarks(endTag); 3482 // perf.clearMeasures(name) 3483 }; 3484 } 3485} 3486var normalizeEvent = cached(function (name) { 3487 var passive = name.charAt(0) === '&'; 3488 name = passive ? name.slice(1) : name; 3489 var once = name.charAt(0) === '~'; // Prefixed last, checked first 3490 name = once ? name.slice(1) : name; 3491 var capture = name.charAt(0) === '!'; 3492 name = capture ? name.slice(1) : name; 3493 return { 3494 name: name, 3495 once: once, 3496 capture: capture, 3497 passive: passive 3498 }; 3499}); 3500function createFnInvoker(fns, vm) { 3501 function invoker() { 3502 var fns = invoker.fns; 3503 if (isArray(fns)) { 3504 var cloned = fns.slice(); 3505 for (var i = 0; i < cloned.length; i++) { 3506 invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler"); 3507 } 3508 } else { 3509 // return handler return value for single handlers 3510 return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler"); 3511 } 3512 } 3513 invoker.fns = fns; 3514 return invoker; 3515} 3516function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) { 3517 var name, cur, old, event; 3518 for (name in on) { 3519 cur = on[name]; 3520 old = oldOn[name]; 3521 event = normalizeEvent(name); 3522 if (isUndef(cur)) { 3523 true && warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm); 3524 } else if (isUndef(old)) { 3525 if (isUndef(cur.fns)) { 3526 cur = on[name] = createFnInvoker(cur, vm); 3527 } 3528 if (isTrue(event.once)) { 3529 cur = on[name] = createOnceHandler(event.name, cur, event.capture); 3530 } 3531 add(event.name, cur, event.capture, event.passive, event.params); 3532 } else if (cur !== old) { 3533 old.fns = cur; 3534 on[name] = old; 3535 } 3536 } 3537 for (name in oldOn) { 3538 if (isUndef(on[name])) { 3539 event = normalizeEvent(name); 3540 remove(event.name, oldOn[name], event.capture); 3541 } 3542 } 3543} 3544function mergeVNodeHook(def, hookKey, hook) { 3545 if (def instanceof VNode) { 3546 def = def.data.hook || (def.data.hook = {}); 3547 } 3548 var invoker; 3549 var oldHook = def[hookKey]; 3550 function wrappedHook() { 3551 hook.apply(this, arguments); 3552 // important: remove merged hook to ensure it's called only once 3553 // and prevent memory leak 3554 remove$2(invoker.fns, wrappedHook); 3555 } 3556 if (isUndef(oldHook)) { 3557 // no existing hook 3558 invoker = createFnInvoker([wrappedHook]); 3559 } else { 3560 /* istanbul ignore if */ 3561 if (isDef(oldHook.fns) && isTrue(oldHook.merged)) { 3562 // already a merged invoker 3563 invoker = oldHook; 3564 invoker.fns.push(wrappedHook); 3565 } else { 3566 // existing plain hook 3567 invoker = createFnInvoker([oldHook, wrappedHook]); 3568 } 3569 } 3570 invoker.merged = true; 3571 def[hookKey] = invoker; 3572} 3573function extractPropsFromVNodeData(data, Ctor, tag) { 3574 // we are only extracting raw values here. 3575 // validation and default values are handled in the child 3576 // component itself. 3577 var propOptions = Ctor.options.props; 3578 if (isUndef(propOptions)) { 3579 return; 3580 } 3581 var res = {}; 3582 var attrs = data.attrs, 3583 props = data.props; 3584 if (isDef(attrs) || isDef(props)) { 3585 for (var key in propOptions) { 3586 var altKey = hyphenate(key); 3587 if (true) { 3588 var keyInLowerCase = key.toLowerCase(); 3589 if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) { 3590 tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") + "".concat(formatComponentName( 3591 // @ts-expect-error tag is string 3592 tag || Ctor), ", but the declared prop name is") + " \"".concat(key, "\". ") + "Note that HTML attributes are case-insensitive and camelCased " + "props need to use their kebab-case equivalents when using in-DOM " + "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\".")); 3593 } 3594 } 3595 checkProp(res, props, key, altKey, true) || checkProp(res, attrs, key, altKey, false); 3596 } 3597 } 3598 return res; 3599} 3600function checkProp(res, hash, key, altKey, preserve) { 3601 if (isDef(hash)) { 3602 if (hasOwn(hash, key)) { 3603 res[key] = hash[key]; 3604 if (!preserve) { 3605 delete hash[key]; 3606 } 3607 return true; 3608 } else if (hasOwn(hash, altKey)) { 3609 res[key] = hash[altKey]; 3610 if (!preserve) { 3611 delete hash[altKey]; 3612 } 3613 return true; 3614 } 3615 } 3616 return false; 3617} 3618 3619// The template compiler attempts to minimize the need for normalization by 3620// statically analyzing the template at compile time. 3621// 3622// For plain HTML markup, normalization can be completely skipped because the 3623// generated render function is guaranteed to return Array<VNode>. There are 3624// two cases where extra normalization is needed: 3625// 1. When the children contains components - because a functional component 3626// may return an Array instead of a single root. In this case, just a simple 3627// normalization is needed - if any child is an Array, we flatten the whole 3628// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep 3629// because functional components already normalize their own children. 3630function simpleNormalizeChildren(children) { 3631 for (var i = 0; i < children.length; i++) { 3632 if (isArray(children[i])) { 3633 return Array.prototype.concat.apply([], children); 3634 } 3635 } 3636 return children; 3637} 3638// 2. When the children contains constructs that always generated nested Arrays, 3639// e.g. <template>, <slot>, v-for, or when the children is provided by user 3640// with hand-written render functions / JSX. In such cases a full normalization 3641// is needed to cater to all possible types of children values. 3642function normalizeChildren(children) { 3643 return isPrimitive(children) ? [createTextVNode(children)] : isArray(children) ? normalizeArrayChildren(children) : undefined; 3644} 3645function isTextNode(node) { 3646 return isDef(node) && isDef(node.text) && isFalse(node.isComment); 3647} 3648function normalizeArrayChildren(children, nestedIndex) { 3649 var res = []; 3650 var i, c, lastIndex, last; 3651 for (i = 0; i < children.length; i++) { 3652 c = children[i]; 3653 if (isUndef(c) || typeof c === 'boolean') continue; 3654 lastIndex = res.length - 1; 3655 last = res[lastIndex]; 3656 // nested 3657 if (isArray(c)) { 3658 if (c.length > 0) { 3659 c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i)); 3660 // merge adjacent text nodes 3661 if (isTextNode(c[0]) && isTextNode(last)) { 3662 res[lastIndex] = createTextVNode(last.text + c[0].text); 3663 c.shift(); 3664 } 3665 res.push.apply(res, c); 3666 } 3667 } else if (isPrimitive(c)) { 3668 if (isTextNode(last)) { 3669 // merge adjacent text nodes 3670 // this is necessary for SSR hydration because text nodes are 3671 // essentially merged when rendered to HTML strings 3672 res[lastIndex] = createTextVNode(last.text + c); 3673 } else if (c !== '') { 3674 // convert primitive to vnode 3675 res.push(createTextVNode(c)); 3676 } 3677 } else { 3678 if (isTextNode(c) && isTextNode(last)) { 3679 // merge adjacent text nodes 3680 res[lastIndex] = createTextVNode(last.text + c.text); 3681 } else { 3682 // default key for nested array children (likely generated by v-for) 3683 if (isTrue(children._isVList) && isDef(c.tag) && isUndef(c.key) && isDef(nestedIndex)) { 3684 c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__"); 3685 } 3686 res.push(c); 3687 } 3688 } 3689 } 3690 return res; 3691} 3692var SIMPLE_NORMALIZE = 1; 3693var ALWAYS_NORMALIZE = 2; 3694// wrapper function for providing a more flexible interface 3695// without getting yelled at by flow 3696function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) { 3697 if (isArray(data) || isPrimitive(data)) { 3698 normalizationType = children; 3699 children = data; 3700 data = undefined; 3701 } 3702 if (isTrue(alwaysNormalize)) { 3703 normalizationType = ALWAYS_NORMALIZE; 3704 } 3705 return _createElement(context, tag, data, children, normalizationType); 3706} 3707function _createElement(context, tag, data, children, normalizationType) { 3708 if (isDef(data) && isDef(data.__ob__)) { 3709 true && warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context); 3710 return createEmptyVNode(); 3711 } 3712 // object syntax in v-bind 3713 if (isDef(data) && isDef(data.is)) { 3714 tag = data.is; 3715 } 3716 if (!tag) { 3717 // in case of component :is set to falsy value 3718 return createEmptyVNode(); 3719 } 3720 // warn against non-primitive key 3721 if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) { 3722 warn$2('Avoid using non-primitive value as key, ' + 'use string/number value instead.', context); 3723 } 3724 // support single function children as default scoped slot 3725 if (isArray(children) && isFunction(children[0])) { 3726 data = data || {}; 3727 data.scopedSlots = { 3728 default: children[0] 3729 }; 3730 children.length = 0; 3731 } 3732 if (normalizationType === ALWAYS_NORMALIZE) { 3733 children = normalizeChildren(children); 3734 } else if (normalizationType === SIMPLE_NORMALIZE) { 3735 children = simpleNormalizeChildren(children); 3736 } 3737 var vnode, ns; 3738 if (typeof tag === 'string') { 3739 var Ctor = void 0; 3740 ns = context.$vnode && context.$vnode.ns || config.getTagNamespace(tag); 3741 if (config.isReservedTag(tag)) { 3742 // platform built-in elements 3743 if ( true && isDef(data) && isDef(data.nativeOn) && data.tag !== 'component') { 3744 warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context); 3745 } 3746 vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context); 3747 } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) { 3748 // component 3749 vnode = createComponent(Ctor, data, context, children, tag); 3750 } else { 3751 // unknown or unlisted namespaced elements 3752 // check at runtime because it may get assigned a namespace when its 3753 // parent normalizes children 3754 vnode = new VNode(tag, data, children, undefined, undefined, context); 3755 } 3756 } else { 3757 // direct component options / constructor 3758 vnode = createComponent(tag, data, context, children); 3759 } 3760 if (isArray(vnode)) { 3761 return vnode; 3762 } else if (isDef(vnode)) { 3763 if (isDef(ns)) applyNS(vnode, ns); 3764 if (isDef(data)) registerDeepBindings(data); 3765 return vnode; 3766 } else { 3767 return createEmptyVNode(); 3768 } 3769} 3770function applyNS(vnode, ns, force) { 3771 vnode.ns = ns; 3772 if (vnode.tag === 'foreignObject') { 3773 // use default namespace inside foreignObject 3774 ns = undefined; 3775 force = true; 3776 } 3777 if (isDef(vnode.children)) { 3778 for (var i = 0, l = vnode.children.length; i < l; i++) { 3779 var child = vnode.children[i]; 3780 if (isDef(child.tag) && (isUndef(child.ns) || isTrue(force) && child.tag !== 'svg')) { 3781 applyNS(child, ns, force); 3782 } 3783 } 3784 } 3785} 3786// ref #5318 3787// necessary to ensure parent re-render when deep bindings like :style and 3788// :class are used on slot nodes 3789function registerDeepBindings(data) { 3790 if (isObject(data.style)) { 3791 traverse(data.style); 3792 } 3793 if (isObject(data.class)) { 3794 traverse(data.class); 3795 } 3796} 3797 3798/** 3799 * Runtime helper for rendering v-for lists. 3800 */ 3801function renderList(val, render) { 3802 var ret = null, 3803 i, 3804 l, 3805 keys, 3806 key; 3807 if (isArray(val) || typeof val === 'string') { 3808 ret = new Array(val.length); 3809 for (i = 0, l = val.length; i < l; i++) { 3810 ret[i] = render(val[i], i); 3811 } 3812 } else if (typeof val === 'number') { 3813 ret = new Array(val); 3814 for (i = 0; i < val; i++) { 3815 ret[i] = render(i + 1, i); 3816 } 3817 } else if (isObject(val)) { 3818 if (hasSymbol && val[Symbol.iterator]) { 3819 ret = []; 3820 var iterator = val[Symbol.iterator](); 3821 var result = iterator.next(); 3822 while (!result.done) { 3823 ret.push(render(result.value, ret.length)); 3824 result = iterator.next(); 3825 } 3826 } else { 3827 keys = Object.keys(val); 3828 ret = new Array(keys.length); 3829 for (i = 0, l = keys.length; i < l; i++) { 3830 key = keys[i]; 3831 ret[i] = render(val[key], key, i); 3832 } 3833 } 3834 } 3835 if (!isDef(ret)) { 3836 ret = []; 3837 } 3838 ret._isVList = true; 3839 return ret; 3840} 3841 3842/** 3843 * Runtime helper for rendering <slot> 3844 */ 3845function renderSlot(name, fallbackRender, props, bindObject) { 3846 var scopedSlotFn = this.$scopedSlots[name]; 3847 var nodes; 3848 if (scopedSlotFn) { 3849 // scoped slot 3850 props = props || {}; 3851 if (bindObject) { 3852 if ( true && !isObject(bindObject)) { 3853 warn$2('slot v-bind without argument expects an Object', this); 3854 } 3855 props = extend(extend({}, bindObject), props); 3856 } 3857 nodes = scopedSlotFn(props) || (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); 3858 } else { 3859 nodes = this.$slots[name] || (isFunction(fallbackRender) ? fallbackRender() : fallbackRender); 3860 } 3861 var target = props && props.slot; 3862 if (target) { 3863 return this.$createElement('template', { 3864 slot: target 3865 }, nodes); 3866 } else { 3867 return nodes; 3868 } 3869} 3870 3871/** 3872 * Runtime helper for resolving filters 3873 */ 3874function resolveFilter(id) { 3875 return resolveAsset(this.$options, 'filters', id, true) || identity; 3876} 3877function isKeyNotMatch(expect, actual) { 3878 if (isArray(expect)) { 3879 return expect.indexOf(actual) === -1; 3880 } else { 3881 return expect !== actual; 3882 } 3883} 3884/** 3885 * Runtime helper for checking keyCodes from config. 3886 * exposed as Vue.prototype._k 3887 * passing in eventKeyName as last argument separately for backwards compat 3888 */ 3889function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) { 3890 var mappedKeyCode = config.keyCodes[key] || builtInKeyCode; 3891 if (builtInKeyName && eventKeyName && !config.keyCodes[key]) { 3892 return isKeyNotMatch(builtInKeyName, eventKeyName); 3893 } else if (mappedKeyCode) { 3894 return isKeyNotMatch(mappedKeyCode, eventKeyCode); 3895 } else if (eventKeyName) { 3896 return hyphenate(eventKeyName) !== key; 3897 } 3898 return eventKeyCode === undefined; 3899} 3900 3901/** 3902 * Runtime helper for merging v-bind="object" into a VNode's data. 3903 */ 3904function bindObjectProps(data, tag, value, asProp, isSync) { 3905 if (value) { 3906 if (!isObject(value)) { 3907 true && warn$2('v-bind without argument expects an Object or Array value', this); 3908 } else { 3909 if (isArray(value)) { 3910 value = toObject(value); 3911 } 3912 var hash = void 0; 3913 var _loop_1 = function (key) { 3914 if (key === 'class' || key === 'style' || isReservedAttribute(key)) { 3915 hash = data; 3916 } else { 3917 var type = data.attrs && data.attrs.type; 3918 hash = asProp || config.mustUseProp(tag, type, key) ? data.domProps || (data.domProps = {}) : data.attrs || (data.attrs = {}); 3919 } 3920 var camelizedKey = camelize(key); 3921 var hyphenatedKey = hyphenate(key); 3922 if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) { 3923 hash[key] = value[key]; 3924 if (isSync) { 3925 var on = data.on || (data.on = {}); 3926 on["update:".concat(key)] = function ($event) { 3927 value[key] = $event; 3928 }; 3929 } 3930 } 3931 }; 3932 for (var key in value) { 3933 _loop_1(key); 3934 } 3935 } 3936 } 3937 return data; 3938} 3939 3940/** 3941 * Runtime helper for rendering static trees. 3942 */ 3943function renderStatic(index, isInFor) { 3944 var cached = this._staticTrees || (this._staticTrees = []); 3945 var tree = cached[index]; 3946 // if has already-rendered static tree and not inside v-for, 3947 // we can reuse the same tree. 3948 if (tree && !isInFor) { 3949 return tree; 3950 } 3951 // otherwise, render a fresh tree. 3952 tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates 3953 ); 3954 markStatic$1(tree, "__static__".concat(index), false); 3955 return tree; 3956} 3957/** 3958 * Runtime helper for v-once. 3959 * Effectively it means marking the node as static with a unique key. 3960 */ 3961function markOnce(tree, index, key) { 3962 markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true); 3963 return tree; 3964} 3965function markStatic$1(tree, key, isOnce) { 3966 if (isArray(tree)) { 3967 for (var i = 0; i < tree.length; i++) { 3968 if (tree[i] && typeof tree[i] !== 'string') { 3969 markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce); 3970 } 3971 } 3972 } else { 3973 markStaticNode(tree, key, isOnce); 3974 } 3975} 3976function markStaticNode(node, key, isOnce) { 3977 node.isStatic = true; 3978 node.key = key; 3979 node.isOnce = isOnce; 3980} 3981function bindObjectListeners(data, value) { 3982 if (value) { 3983 if (!isPlainObject(value)) { 3984 true && warn$2('v-on without argument expects an Object value', this); 3985 } else { 3986 var on = data.on = data.on ? extend({}, data.on) : {}; 3987 for (var key in value) { 3988 var existing = on[key]; 3989 var ours = value[key]; 3990 on[key] = existing ? [].concat(existing, ours) : ours; 3991 } 3992 } 3993 } 3994 return data; 3995} 3996function resolveScopedSlots(fns, res, 3997// the following are added in 2.6 3998hasDynamicKeys, contentHashKey) { 3999 res = res || { 4000 $stable: !hasDynamicKeys 4001 }; 4002 for (var i = 0; i < fns.length; i++) { 4003 var slot = fns[i]; 4004 if (isArray(slot)) { 4005 resolveScopedSlots(slot, res, hasDynamicKeys); 4006 } else if (slot) { 4007 // marker for reverse proxying v-slot without scope on this.$slots 4008 // @ts-expect-error 4009 if (slot.proxy) { 4010 // @ts-expect-error 4011 slot.fn.proxy = true; 4012 } 4013 res[slot.key] = slot.fn; 4014 } 4015 } 4016 if (contentHashKey) { 4017 res.$key = contentHashKey; 4018 } 4019 return res; 4020} 4021 4022// helper to process dynamic keys for dynamic arguments in v-bind and v-on. 4023function bindDynamicKeys(baseObj, values) { 4024 for (var i = 0; i < values.length; i += 2) { 4025 var key = values[i]; 4026 if (typeof key === 'string' && key) { 4027 baseObj[values[i]] = values[i + 1]; 4028 } else if ( true && key !== '' && key !== null) { 4029 // null is a special value for explicitly removing a binding 4030 warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this); 4031 } 4032 } 4033 return baseObj; 4034} 4035// helper to dynamically append modifier runtime markers to event names. 4036// ensure only append when value is already string, otherwise it will be cast 4037// to string and cause the type check to miss. 4038function prependModifier(value, symbol) { 4039 return typeof value === 'string' ? symbol + value : value; 4040} 4041function installRenderHelpers(target) { 4042 target._o = markOnce; 4043 target._n = toNumber; 4044 target._s = toString; 4045 target._l = renderList; 4046 target._t = renderSlot; 4047 target._q = looseEqual; 4048 target._i = looseIndexOf; 4049 target._m = renderStatic; 4050 target._f = resolveFilter; 4051 target._k = checkKeyCodes; 4052 target._b = bindObjectProps; 4053 target._v = createTextVNode; 4054 target._e = createEmptyVNode; 4055 target._u = resolveScopedSlots; 4056 target._g = bindObjectListeners; 4057 target._d = bindDynamicKeys; 4058 target._p = prependModifier; 4059} 4060 4061/** 4062 * Runtime helper for resolving raw children VNodes into a slot object. 4063 */ 4064function resolveSlots(children, context) { 4065 if (!children || !children.length) { 4066 return {}; 4067 } 4068 var slots = {}; 4069 for (var i = 0, l = children.length; i < l; i++) { 4070 var child = children[i]; 4071 var data = child.data; 4072 // remove slot attribute if the node is resolved as a Vue slot node 4073 if (data && data.attrs && data.attrs.slot) { 4074 delete data.attrs.slot; 4075 } 4076 // named slots should only be respected if the vnode was rendered in the 4077 // same context. 4078 if ((child.context === context || child.fnContext === context) && data && data.slot != null) { 4079 var name_1 = data.slot; 4080 var slot = slots[name_1] || (slots[name_1] = []); 4081 if (child.tag === 'template') { 4082 slot.push.apply(slot, child.children || []); 4083 } else { 4084 slot.push(child); 4085 } 4086 } else { 4087 (slots.default || (slots.default = [])).push(child); 4088 } 4089 } 4090 // ignore slots that contains only whitespace 4091 for (var name_2 in slots) { 4092 if (slots[name_2].every(isWhitespace)) { 4093 delete slots[name_2]; 4094 } 4095 } 4096 return slots; 4097} 4098function isWhitespace(node) { 4099 return node.isComment && !node.asyncFactory || node.text === ' '; 4100} 4101function isAsyncPlaceholder(node) { 4102 // @ts-expect-error not really boolean type 4103 return node.isComment && node.asyncFactory; 4104} 4105function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) { 4106 var res; 4107 var hasNormalSlots = Object.keys(normalSlots).length > 0; 4108 var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots; 4109 var key = scopedSlots && scopedSlots.$key; 4110 if (!scopedSlots) { 4111 res = {}; 4112 } else if (scopedSlots._normalized) { 4113 // fast path 1: child component re-render only, parent did not change 4114 return scopedSlots._normalized; 4115 } else if (isStable && prevScopedSlots && prevScopedSlots !== emptyObject && key === prevScopedSlots.$key && !hasNormalSlots && !prevScopedSlots.$hasNormal) { 4116 // fast path 2: stable scoped slots w/ no normal slots to proxy, 4117 // only need to normalize once 4118 return prevScopedSlots; 4119 } else { 4120 res = {}; 4121 for (var key_1 in scopedSlots) { 4122 if (scopedSlots[key_1] && key_1[0] !== '$') { 4123 res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]); 4124 } 4125 } 4126 } 4127 // expose normal slots on scopedSlots 4128 for (var key_2 in normalSlots) { 4129 if (!(key_2 in res)) { 4130 res[key_2] = proxyNormalSlot(normalSlots, key_2); 4131 } 4132 } 4133 // avoriaz seems to mock a non-extensible $scopedSlots object 4134 // and when that is passed down this would cause an error 4135 if (scopedSlots && Object.isExtensible(scopedSlots)) { 4136 scopedSlots._normalized = res; 4137 } 4138 def(res, '$stable', isStable); 4139 def(res, '$key', key); 4140 def(res, '$hasNormal', hasNormalSlots); 4141 return res; 4142} 4143function normalizeScopedSlot(vm, normalSlots, key, fn) { 4144 var normalized = function () { 4145 var cur = currentInstance; 4146 setCurrentInstance(vm); 4147 var res = arguments.length ? fn.apply(null, arguments) : fn({}); 4148 res = res && typeof res === 'object' && !isArray(res) ? [res] // single vnode 4149 : normalizeChildren(res); 4150 var vnode = res && res[0]; 4151 setCurrentInstance(cur); 4152 return res && (!vnode || res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode)) // #9658, #10391 4153 ? undefined : res; 4154 }; 4155 // this is a slot using the new v-slot syntax without scope. although it is 4156 // compiled as a scoped slot, render fn users would expect it to be present 4157 // on this.$slots because the usage is semantically a normal slot. 4158 if (fn.proxy) { 4159 Object.defineProperty(normalSlots, key, { 4160 get: normalized, 4161 enumerable: true, 4162 configurable: true 4163 }); 4164 } 4165 return normalized; 4166} 4167function proxyNormalSlot(slots, key) { 4168 return function () { 4169 return slots[key]; 4170 }; 4171} 4172function initSetup(vm) { 4173 var options = vm.$options; 4174 var setup = options.setup; 4175 if (setup) { 4176 var ctx = vm._setupContext = createSetupContext(vm); 4177 setCurrentInstance(vm); 4178 pushTarget(); 4179 var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup"); 4180 popTarget(); 4181 setCurrentInstance(); 4182 if (isFunction(setupResult)) { 4183 // render function 4184 // @ts-ignore 4185 options.render = setupResult; 4186 } else if (isObject(setupResult)) { 4187 // bindings 4188 if ( true && setupResult instanceof VNode) { 4189 warn$2("setup() should not return VNodes directly - " + "return a render function instead."); 4190 } 4191 vm._setupState = setupResult; 4192 // __sfc indicates compiled bindings from <script setup> 4193 if (!setupResult.__sfc) { 4194 for (var key in setupResult) { 4195 if (!isReserved(key)) { 4196 proxyWithRefUnwrap(vm, setupResult, key); 4197 } else if (true) { 4198 warn$2("Avoid using variables that start with _ or $ in setup()."); 4199 } 4200 } 4201 } else { 4202 // exposed for compiled render fn 4203 var proxy = vm._setupProxy = {}; 4204 for (var key in setupResult) { 4205 if (key !== '__sfc') { 4206 proxyWithRefUnwrap(proxy, setupResult, key); 4207 } 4208 } 4209 } 4210 } else if ( true && setupResult !== undefined) { 4211 warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult)); 4212 } 4213 } 4214} 4215function createSetupContext(vm) { 4216 var exposeCalled = false; 4217 return { 4218 get attrs() { 4219 if (!vm._attrsProxy) { 4220 var proxy = vm._attrsProxy = {}; 4221 def(proxy, '_v_attr_proxy', true); 4222 syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs'); 4223 } 4224 return vm._attrsProxy; 4225 }, 4226 get listeners() { 4227 if (!vm._listenersProxy) { 4228 var proxy = vm._listenersProxy = {}; 4229 syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners'); 4230 } 4231 return vm._listenersProxy; 4232 }, 4233 get slots() { 4234 return initSlotsProxy(vm); 4235 }, 4236 emit: bind$1(vm.$emit, vm), 4237 expose: function (exposed) { 4238 if (true) { 4239 if (exposeCalled) { 4240 warn$2("expose() should be called only once per setup().", vm); 4241 } 4242 exposeCalled = true; 4243 } 4244 if (exposed) { 4245 Object.keys(exposed).forEach(function (key) { 4246 return proxyWithRefUnwrap(vm, exposed, key); 4247 }); 4248 } 4249 } 4250 }; 4251} 4252function syncSetupProxy(to, from, prev, instance, type) { 4253 var changed = false; 4254 for (var key in from) { 4255 if (!(key in to)) { 4256 changed = true; 4257 defineProxyAttr(to, key, instance, type); 4258 } else if (from[key] !== prev[key]) { 4259 changed = true; 4260 } 4261 } 4262 for (var key in to) { 4263 if (!(key in from)) { 4264 changed = true; 4265 delete to[key]; 4266 } 4267 } 4268 return changed; 4269} 4270function defineProxyAttr(proxy, key, instance, type) { 4271 Object.defineProperty(proxy, key, { 4272 enumerable: true, 4273 configurable: true, 4274 get: function () { 4275 return instance[type][key]; 4276 } 4277 }); 4278} 4279function initSlotsProxy(vm) { 4280 if (!vm._slotsProxy) { 4281 syncSetupSlots(vm._slotsProxy = {}, vm.$scopedSlots); 4282 } 4283 return vm._slotsProxy; 4284} 4285function syncSetupSlots(to, from) { 4286 for (var key in from) { 4287 to[key] = from[key]; 4288 } 4289 for (var key in to) { 4290 if (!(key in from)) { 4291 delete to[key]; 4292 } 4293 } 4294} 4295/** 4296 * @internal use manual type def because public setup context type relies on 4297 * legacy VNode types 4298 */ 4299function useSlots() { 4300 return getContext().slots; 4301} 4302/** 4303 * @internal use manual type def because public setup context type relies on 4304 * legacy VNode types 4305 */ 4306function useAttrs() { 4307 return getContext().attrs; 4308} 4309/** 4310 * Vue 2 only 4311 * @internal use manual type def because public setup context type relies on 4312 * legacy VNode types 4313 */ 4314function useListeners() { 4315 return getContext().listeners; 4316} 4317function getContext() { 4318 if ( true && !currentInstance) { 4319 warn$2("useContext() called without active instance."); 4320 } 4321 var vm = currentInstance; 4322 return vm._setupContext || (vm._setupContext = createSetupContext(vm)); 4323} 4324/** 4325 * Runtime helper for merging default declarations. Imported by compiled code 4326 * only. 4327 * @internal 4328 */ 4329function mergeDefaults(raw, defaults) { 4330 var props = isArray(raw) ? raw.reduce(function (normalized, p) { 4331 return normalized[p] = {}, normalized; 4332 }, {}) : raw; 4333 for (var key in defaults) { 4334 var opt = props[key]; 4335 if (opt) { 4336 if (isArray(opt) || isFunction(opt)) { 4337 props[key] = { 4338 type: opt, 4339 default: defaults[key] 4340 }; 4341 } else { 4342 opt.default = defaults[key]; 4343 } 4344 } else if (opt === null) { 4345 props[key] = { 4346 default: defaults[key] 4347 }; 4348 } else if (true) { 4349 warn$2("props default key \"".concat(key, "\" has no corresponding declaration.")); 4350 } 4351 } 4352 return props; 4353} 4354function initRender(vm) { 4355 vm._vnode = null; // the root of the child tree 4356 vm._staticTrees = null; // v-once cached trees 4357 var options = vm.$options; 4358 var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree 4359 var renderContext = parentVnode && parentVnode.context; 4360 vm.$slots = resolveSlots(options._renderChildren, renderContext); 4361 vm.$scopedSlots = parentVnode ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots) : emptyObject; 4362 // bind the createElement fn to this instance 4363 // so that we get proper render context inside it. 4364 // args order: tag, data, children, normalizationType, alwaysNormalize 4365 // internal version is used by render functions compiled from templates 4366 // @ts-expect-error 4367 vm._c = function (a, b, c, d) { 4368 return createElement$1(vm, a, b, c, d, false); 4369 }; 4370 // normalization is always applied for the public version, used in 4371 // user-written render functions. 4372 // @ts-expect-error 4373 vm.$createElement = function (a, b, c, d) { 4374 return createElement$1(vm, a, b, c, d, true); 4375 }; 4376 // $attrs & $listeners are exposed for easier HOC creation. 4377 // they need to be reactive so that HOCs using them are always updated 4378 var parentData = parentVnode && parentVnode.data; 4379 /* istanbul ignore else */ 4380 if (true) { 4381 defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () { 4382 !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm); 4383 }, true); 4384 defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () { 4385 !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm); 4386 }, true); 4387 } else {} 4388} 4389var currentRenderingInstance = null; 4390function renderMixin(Vue) { 4391 // install runtime convenience helpers 4392 installRenderHelpers(Vue.prototype); 4393 Vue.prototype.$nextTick = function (fn) { 4394 return nextTick(fn, this); 4395 }; 4396 Vue.prototype._render = function () { 4397 var vm = this; 4398 var _a = vm.$options, 4399 render = _a.render, 4400 _parentVnode = _a._parentVnode; 4401 if (_parentVnode && vm._isMounted) { 4402 vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots); 4403 if (vm._slotsProxy) { 4404 syncSetupSlots(vm._slotsProxy, vm.$scopedSlots); 4405 } 4406 } 4407 // set parent vnode. this allows render functions to have access 4408 // to the data on the placeholder node. 4409 vm.$vnode = _parentVnode; 4410 // render self 4411 var vnode; 4412 try { 4413 // There's no need to maintain a stack because all render fns are called 4414 // separately from one another. Nested component's render fns are called 4415 // when parent component is patched. 4416 setCurrentInstance(vm); 4417 currentRenderingInstance = vm; 4418 vnode = render.call(vm._renderProxy, vm.$createElement); 4419 } catch (e) { 4420 handleError(e, vm, "render"); 4421 // return error render result, 4422 // or previous vnode to prevent render error causing blank component 4423 /* istanbul ignore else */ 4424 if ( true && vm.$options.renderError) { 4425 try { 4426 vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e); 4427 } catch (e) { 4428 handleError(e, vm, "renderError"); 4429 vnode = vm._vnode; 4430 } 4431 } else { 4432 vnode = vm._vnode; 4433 } 4434 } finally { 4435 currentRenderingInstance = null; 4436 setCurrentInstance(); 4437 } 4438 // if the returned array contains only a single node, allow it 4439 if (isArray(vnode) && vnode.length === 1) { 4440 vnode = vnode[0]; 4441 } 4442 // return empty vnode in case the render function errored out 4443 if (!(vnode instanceof VNode)) { 4444 if ( true && isArray(vnode)) { 4445 warn$2('Multiple root nodes returned from render function. Render function ' + 'should return a single root node.', vm); 4446 } 4447 vnode = createEmptyVNode(); 4448 } 4449 // set parent 4450 vnode.parent = _parentVnode; 4451 return vnode; 4452 }; 4453} 4454function ensureCtor(comp, base) { 4455 if (comp.__esModule || hasSymbol && comp[Symbol.toStringTag] === 'Module') { 4456 comp = comp.default; 4457 } 4458 return isObject(comp) ? base.extend(comp) : comp; 4459} 4460function createAsyncPlaceholder(factory, data, context, children, tag) { 4461 var node = createEmptyVNode(); 4462 node.asyncFactory = factory; 4463 node.asyncMeta = { 4464 data: data, 4465 context: context, 4466 children: children, 4467 tag: tag 4468 }; 4469 return node; 4470} 4471function resolveAsyncComponent(factory, baseCtor) { 4472 if (isTrue(factory.error) && isDef(factory.errorComp)) { 4473 return factory.errorComp; 4474 } 4475 if (isDef(factory.resolved)) { 4476 return factory.resolved; 4477 } 4478 var owner = currentRenderingInstance; 4479 if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) { 4480 // already pending 4481 factory.owners.push(owner); 4482 } 4483 if (isTrue(factory.loading) && isDef(factory.loadingComp)) { 4484 return factory.loadingComp; 4485 } 4486 if (owner && !isDef(factory.owners)) { 4487 var owners_1 = factory.owners = [owner]; 4488 var sync_1 = true; 4489 var timerLoading_1 = null; 4490 var timerTimeout_1 = null; 4491 owner.$on('hook:destroyed', function () { 4492 return remove$2(owners_1, owner); 4493 }); 4494 var forceRender_1 = function (renderCompleted) { 4495 for (var i = 0, l = owners_1.length; i < l; i++) { 4496 owners_1[i].$forceUpdate(); 4497 } 4498 if (renderCompleted) { 4499 owners_1.length = 0; 4500 if (timerLoading_1 !== null) { 4501 clearTimeout(timerLoading_1); 4502 timerLoading_1 = null; 4503 } 4504 if (timerTimeout_1 !== null) { 4505 clearTimeout(timerTimeout_1); 4506 timerTimeout_1 = null; 4507 } 4508 } 4509 }; 4510 var resolve = once(function (res) { 4511 // cache resolved 4512 factory.resolved = ensureCtor(res, baseCtor); 4513 // invoke callbacks only if this is not a synchronous resolve 4514 // (async resolves are shimmed as synchronous during SSR) 4515 if (!sync_1) { 4516 forceRender_1(true); 4517 } else { 4518 owners_1.length = 0; 4519 } 4520 }); 4521 var reject_1 = once(function (reason) { 4522 true && warn$2("Failed to resolve async component: ".concat(String(factory)) + (reason ? "\nReason: ".concat(reason) : '')); 4523 if (isDef(factory.errorComp)) { 4524 factory.error = true; 4525 forceRender_1(true); 4526 } 4527 }); 4528 var res_1 = factory(resolve, reject_1); 4529 if (isObject(res_1)) { 4530 if (isPromise(res_1)) { 4531 // () => Promise 4532 if (isUndef(factory.resolved)) { 4533 res_1.then(resolve, reject_1); 4534 } 4535 } else if (isPromise(res_1.component)) { 4536 res_1.component.then(resolve, reject_1); 4537 if (isDef(res_1.error)) { 4538 factory.errorComp = ensureCtor(res_1.error, baseCtor); 4539 } 4540 if (isDef(res_1.loading)) { 4541 factory.loadingComp = ensureCtor(res_1.loading, baseCtor); 4542 if (res_1.delay === 0) { 4543 factory.loading = true; 4544 } else { 4545 // @ts-expect-error NodeJS timeout type 4546 timerLoading_1 = setTimeout(function () { 4547 timerLoading_1 = null; 4548 if (isUndef(factory.resolved) && isUndef(factory.error)) { 4549 factory.loading = true; 4550 forceRender_1(false); 4551 } 4552 }, res_1.delay || 200); 4553 } 4554 } 4555 if (isDef(res_1.timeout)) { 4556 // @ts-expect-error NodeJS timeout type 4557 timerTimeout_1 = setTimeout(function () { 4558 timerTimeout_1 = null; 4559 if (isUndef(factory.resolved)) { 4560 reject_1( true ? "timeout (".concat(res_1.timeout, "ms)") : 0); 4561 } 4562 }, res_1.timeout); 4563 } 4564 } 4565 } 4566 sync_1 = false; 4567 // return in case resolved synchronously 4568 return factory.loading ? factory.loadingComp : factory.resolved; 4569 } 4570} 4571function getFirstComponentChild(children) { 4572 if (isArray(children)) { 4573 for (var i = 0; i < children.length; i++) { 4574 var c = children[i]; 4575 if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) { 4576 return c; 4577 } 4578 } 4579 } 4580} 4581function initEvents(vm) { 4582 vm._events = Object.create(null); 4583 vm._hasHookEvent = false; 4584 // init parent attached events 4585 var listeners = vm.$options._parentListeners; 4586 if (listeners) { 4587 updateComponentListeners(vm, listeners); 4588 } 4589} 4590var target$1; 4591function add$1(event, fn) { 4592 target$1.$on(event, fn); 4593} 4594function remove$1(event, fn) { 4595 target$1.$off(event, fn); 4596} 4597function createOnceHandler$1(event, fn) { 4598 var _target = target$1; 4599 return function onceHandler() { 4600 var res = fn.apply(null, arguments); 4601 if (res !== null) { 4602 _target.$off(event, onceHandler); 4603 } 4604 }; 4605} 4606function updateComponentListeners(vm, listeners, oldListeners) { 4607 target$1 = vm; 4608 updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm); 4609 target$1 = undefined; 4610} 4611function eventsMixin(Vue) { 4612 var hookRE = /^hook:/; 4613 Vue.prototype.$on = function (event, fn) { 4614 var vm = this; 4615 if (isArray(event)) { 4616 for (var i = 0, l = event.length; i < l; i++) { 4617 vm.$on(event[i], fn); 4618 } 4619 } else { 4620 (vm._events[event] || (vm._events[event] = [])).push(fn); 4621 // optimize hook:event cost by using a boolean flag marked at registration 4622 // instead of a hash lookup 4623 if (hookRE.test(event)) { 4624 vm._hasHookEvent = true; 4625 } 4626 } 4627 return vm; 4628 }; 4629 Vue.prototype.$once = function (event, fn) { 4630 var vm = this; 4631 function on() { 4632 vm.$off(event, on); 4633 fn.apply(vm, arguments); 4634 } 4635 on.fn = fn; 4636 vm.$on(event, on); 4637 return vm; 4638 }; 4639 Vue.prototype.$off = function (event, fn) { 4640 var vm = this; 4641 // all 4642 if (!arguments.length) { 4643 vm._events = Object.create(null); 4644 return vm; 4645 } 4646 // array of events 4647 if (isArray(event)) { 4648 for (var i_1 = 0, l = event.length; i_1 < l; i_1++) { 4649 vm.$off(event[i_1], fn); 4650 } 4651 return vm; 4652 } 4653 // specific event 4654 var cbs = vm._events[event]; 4655 if (!cbs) { 4656 return vm; 4657 } 4658 if (!fn) { 4659 vm._events[event] = null; 4660 return vm; 4661 } 4662 // specific handler 4663 var cb; 4664 var i = cbs.length; 4665 while (i--) { 4666 cb = cbs[i]; 4667 if (cb === fn || cb.fn === fn) { 4668 cbs.splice(i, 1); 4669 break; 4670 } 4671 } 4672 return vm; 4673 }; 4674 Vue.prototype.$emit = function (event) { 4675 var vm = this; 4676 if (true) { 4677 var lowerCaseEvent = event.toLowerCase(); 4678 if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) { 4679 tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") + "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") + "Note that HTML attributes are case-insensitive and you cannot use " + "v-on to listen to camelCase events when using in-DOM templates. " + "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\".")); 4680 } 4681 } 4682 var cbs = vm._events[event]; 4683 if (cbs) { 4684 cbs = cbs.length > 1 ? toArray(cbs) : cbs; 4685 var args = toArray(arguments, 1); 4686 var info = "event handler for \"".concat(event, "\""); 4687 for (var i = 0, l = cbs.length; i < l; i++) { 4688 invokeWithErrorHandling(cbs[i], vm, args, vm, info); 4689 } 4690 } 4691 return vm; 4692 }; 4693} 4694var activeInstance = null; 4695var isUpdatingChildComponent = false; 4696function setActiveInstance(vm) { 4697 var prevActiveInstance = activeInstance; 4698 activeInstance = vm; 4699 return function () { 4700 activeInstance = prevActiveInstance; 4701 }; 4702} 4703function initLifecycle(vm) { 4704 var options = vm.$options; 4705 // locate first non-abstract parent 4706 var parent = options.parent; 4707 if (parent && !options.abstract) { 4708 while (parent.$options.abstract && parent.$parent) { 4709 parent = parent.$parent; 4710 } 4711 parent.$children.push(vm); 4712 } 4713 vm.$parent = parent; 4714 vm.$root = parent ? parent.$root : vm; 4715 vm.$children = []; 4716 vm.$refs = {}; 4717 vm._provided = parent ? parent._provided : Object.create(null); 4718 vm._watcher = null; 4719 vm._inactive = null; 4720 vm._directInactive = false; 4721 vm._isMounted = false; 4722 vm._isDestroyed = false; 4723 vm._isBeingDestroyed = false; 4724} 4725function lifecycleMixin(Vue) { 4726 Vue.prototype._update = function (vnode, hydrating) { 4727 var vm = this; 4728 var prevEl = vm.$el; 4729 var prevVnode = vm._vnode; 4730 var restoreActiveInstance = setActiveInstance(vm); 4731 vm._vnode = vnode; 4732 // Vue.prototype.__patch__ is injected in entry points 4733 // based on the rendering backend used. 4734 if (!prevVnode) { 4735 // initial render 4736 vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */); 4737 } else { 4738 // updates 4739 vm.$el = vm.__patch__(prevVnode, vnode); 4740 } 4741 restoreActiveInstance(); 4742 // update __vue__ reference 4743 if (prevEl) { 4744 prevEl.__vue__ = null; 4745 } 4746 if (vm.$el) { 4747 vm.$el.__vue__ = vm; 4748 } 4749 // if parent is an HOC, update its $el as well 4750 var wrapper = vm; 4751 while (wrapper && wrapper.$vnode && wrapper.$parent && wrapper.$vnode === wrapper.$parent._vnode) { 4752 wrapper.$parent.$el = wrapper.$el; 4753 wrapper = wrapper.$parent; 4754 } 4755 // updated hook is called by the scheduler to ensure that children are 4756 // updated in a parent's updated hook. 4757 }; 4758 Vue.prototype.$forceUpdate = function () { 4759 var vm = this; 4760 if (vm._watcher) { 4761 vm._watcher.update(); 4762 } 4763 }; 4764 Vue.prototype.$destroy = function () { 4765 var vm = this; 4766 if (vm._isBeingDestroyed) { 4767 return; 4768 } 4769 callHook$1(vm, 'beforeDestroy'); 4770 vm._isBeingDestroyed = true; 4771 // remove self from parent 4772 var parent = vm.$parent; 4773 if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) { 4774 remove$2(parent.$children, vm); 4775 } 4776 // teardown scope. this includes both the render watcher and other 4777 // watchers created 4778 vm._scope.stop(); 4779 // remove reference from data ob 4780 // frozen object may not have observer. 4781 if (vm._data.__ob__) { 4782 vm._data.__ob__.vmCount--; 4783 } 4784 // call the last hook... 4785 vm._isDestroyed = true; 4786 // invoke destroy hooks on current rendered tree 4787 vm.__patch__(vm._vnode, null); 4788 // fire destroyed hook 4789 callHook$1(vm, 'destroyed'); 4790 // turn off all instance listeners. 4791 vm.$off(); 4792 // remove __vue__ reference 4793 if (vm.$el) { 4794 vm.$el.__vue__ = null; 4795 } 4796 // release circular reference (#6759) 4797 if (vm.$vnode) { 4798 vm.$vnode.parent = null; 4799 } 4800 }; 4801} 4802function mountComponent(vm, el, hydrating) { 4803 vm.$el = el; 4804 if (!vm.$options.render) { 4805 // @ts-expect-error invalid type 4806 vm.$options.render = createEmptyVNode; 4807 if (true) { 4808 /* istanbul ignore if */ 4809 if (vm.$options.template && vm.$options.template.charAt(0) !== '#' || vm.$options.el || el) { 4810 warn$2('You are using the runtime-only build of Vue where the template ' + 'compiler is not available. Either pre-compile the templates into ' + 'render functions, or use the compiler-included build.', vm); 4811 } else { 4812 warn$2('Failed to mount component: template or render function not defined.', vm); 4813 } 4814 } 4815 } 4816 callHook$1(vm, 'beforeMount'); 4817 var updateComponent; 4818 /* istanbul ignore if */ 4819 if ( true && config.performance && mark) { 4820 updateComponent = function () { 4821 var name = vm._name; 4822 var id = vm._uid; 4823 var startTag = "vue-perf-start:".concat(id); 4824 var endTag = "vue-perf-end:".concat(id); 4825 mark(startTag); 4826 var vnode = vm._render(); 4827 mark(endTag); 4828 measure("vue ".concat(name, " render"), startTag, endTag); 4829 mark(startTag); 4830 vm._update(vnode, hydrating); 4831 mark(endTag); 4832 measure("vue ".concat(name, " patch"), startTag, endTag); 4833 }; 4834 } else { 4835 updateComponent = function () { 4836 vm._update(vm._render(), hydrating); 4837 }; 4838 } 4839 var watcherOptions = { 4840 before: function () { 4841 if (vm._isMounted && !vm._isDestroyed) { 4842 callHook$1(vm, 'beforeUpdate'); 4843 } 4844 } 4845 }; 4846 if (true) { 4847 watcherOptions.onTrack = function (e) { 4848 return callHook$1(vm, 'renderTracked', [e]); 4849 }; 4850 watcherOptions.onTrigger = function (e) { 4851 return callHook$1(vm, 'renderTriggered', [e]); 4852 }; 4853 } 4854 // we set this to vm._watcher inside the watcher's constructor 4855 // since the watcher's initial patch may call $forceUpdate (e.g. inside child 4856 // component's mounted hook), which relies on vm._watcher being already defined 4857 new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */); 4858 hydrating = false; 4859 // flush buffer for flush: "pre" watchers queued in setup() 4860 var preWatchers = vm._preWatchers; 4861 if (preWatchers) { 4862 for (var i = 0; i < preWatchers.length; i++) { 4863 preWatchers[i].run(); 4864 } 4865 } 4866 // manually mounted instance, call mounted on self 4867 // mounted is called for render-created child components in its inserted hook 4868 if (vm.$vnode == null) { 4869 vm._isMounted = true; 4870 callHook$1(vm, 'mounted'); 4871 } 4872 return vm; 4873} 4874function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) { 4875 if (true) { 4876 isUpdatingChildComponent = true; 4877 } 4878 // determine whether component has slot children 4879 // we need to do this before overwriting $options._renderChildren. 4880 // check if there are dynamic scopedSlots (hand-written or compiled but with 4881 // dynamic slot names). Static scoped slots compiled from template has the 4882 // "$stable" marker. 4883 var newScopedSlots = parentVnode.data.scopedSlots; 4884 var oldScopedSlots = vm.$scopedSlots; 4885 var hasDynamicScopedSlot = !!(newScopedSlots && !newScopedSlots.$stable || oldScopedSlots !== emptyObject && !oldScopedSlots.$stable || newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key || !newScopedSlots && vm.$scopedSlots.$key); 4886 // Any static slot children from the parent may have changed during parent's 4887 // update. Dynamic scoped slots may also have changed. In such cases, a forced 4888 // update is necessary to ensure correctness. 4889 var needsForceUpdate = !!(renderChildren || 4890 // has new static slots 4891 vm.$options._renderChildren || 4892 // has old static slots 4893 hasDynamicScopedSlot); 4894 var prevVNode = vm.$vnode; 4895 vm.$options._parentVnode = parentVnode; 4896 vm.$vnode = parentVnode; // update vm's placeholder node without re-render 4897 if (vm._vnode) { 4898 // update child tree's parent 4899 vm._vnode.parent = parentVnode; 4900 } 4901 vm.$options._renderChildren = renderChildren; 4902 // update $attrs and $listeners hash 4903 // these are also reactive so they may trigger child update if the child 4904 // used them during render 4905 var attrs = parentVnode.data.attrs || emptyObject; 4906 if (vm._attrsProxy) { 4907 // force update if attrs are accessed and has changed since it may be 4908 // passed to a child component. 4909 if (syncSetupProxy(vm._attrsProxy, attrs, prevVNode.data && prevVNode.data.attrs || emptyObject, vm, '$attrs')) { 4910 needsForceUpdate = true; 4911 } 4912 } 4913 vm.$attrs = attrs; 4914 // update listeners 4915 listeners = listeners || emptyObject; 4916 var prevListeners = vm.$options._parentListeners; 4917 if (vm._listenersProxy) { 4918 syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners'); 4919 } 4920 vm.$listeners = vm.$options._parentListeners = listeners; 4921 updateComponentListeners(vm, listeners, prevListeners); 4922 // update props 4923 if (propsData && vm.$options.props) { 4924 toggleObserving(false); 4925 var props = vm._props; 4926 var propKeys = vm.$options._propKeys || []; 4927 for (var i = 0; i < propKeys.length; i++) { 4928 var key = propKeys[i]; 4929 var propOptions = vm.$options.props; // wtf flow? 4930 props[key] = validateProp(key, propOptions, propsData, vm); 4931 } 4932 toggleObserving(true); 4933 // keep a copy of raw propsData 4934 vm.$options.propsData = propsData; 4935 } 4936 // resolve slots + force update if has children 4937 if (needsForceUpdate) { 4938 vm.$slots = resolveSlots(renderChildren, parentVnode.context); 4939 vm.$forceUpdate(); 4940 } 4941 if (true) { 4942 isUpdatingChildComponent = false; 4943 } 4944} 4945function isInInactiveTree(vm) { 4946 while (vm && (vm = vm.$parent)) { 4947 if (vm._inactive) return true; 4948 } 4949 return false; 4950} 4951function activateChildComponent(vm, direct) { 4952 if (direct) { 4953 vm._directInactive = false; 4954 if (isInInactiveTree(vm)) { 4955 return; 4956 } 4957 } else if (vm._directInactive) { 4958 return; 4959 } 4960 if (vm._inactive || vm._inactive === null) { 4961 vm._inactive = false; 4962 for (var i = 0; i < vm.$children.length; i++) { 4963 activateChildComponent(vm.$children[i]); 4964 } 4965 callHook$1(vm, 'activated'); 4966 } 4967} 4968function deactivateChildComponent(vm, direct) { 4969 if (direct) { 4970 vm._directInactive = true; 4971 if (isInInactiveTree(vm)) { 4972 return; 4973 } 4974 } 4975 if (!vm._inactive) { 4976 vm._inactive = true; 4977 for (var i = 0; i < vm.$children.length; i++) { 4978 deactivateChildComponent(vm.$children[i]); 4979 } 4980 callHook$1(vm, 'deactivated'); 4981 } 4982} 4983function callHook$1(vm, hook, args, setContext) { 4984 if (setContext === void 0) { 4985 setContext = true; 4986 } 4987 // #7573 disable dep collection when invoking lifecycle hooks 4988 pushTarget(); 4989 var prev = currentInstance; 4990 setContext && setCurrentInstance(vm); 4991 var handlers = vm.$options[hook]; 4992 var info = "".concat(hook, " hook"); 4993 if (handlers) { 4994 for (var i = 0, j = handlers.length; i < j; i++) { 4995 invokeWithErrorHandling(handlers[i], vm, args || null, vm, info); 4996 } 4997 } 4998 if (vm._hasHookEvent) { 4999 vm.$emit('hook:' + hook); 5000 } 5001 setContext && setCurrentInstance(prev); 5002 popTarget(); 5003} 5004var MAX_UPDATE_COUNT = 100; 5005var queue = []; 5006var activatedChildren = []; 5007var has = {}; 5008var circular = {}; 5009var waiting = false; 5010var flushing = false; 5011var index$1 = 0; 5012/** 5013 * Reset the scheduler's state. 5014 */ 5015function resetSchedulerState() { 5016 index$1 = queue.length = activatedChildren.length = 0; 5017 has = {}; 5018 if (true) { 5019 circular = {}; 5020 } 5021 waiting = flushing = false; 5022} 5023// Async edge case #6566 requires saving the timestamp when event listeners are 5024// attached. However, calling performance.now() has a perf overhead especially 5025// if the page has thousands of event listeners. Instead, we take a timestamp 5026// every time the scheduler flushes and use that for all event listeners 5027// attached during that flush. 5028var currentFlushTimestamp = 0; 5029// Async edge case fix requires storing an event listener's attach timestamp. 5030var getNow = Date.now; 5031// Determine what event timestamp the browser is using. Annoyingly, the 5032// timestamp can either be hi-res (relative to page load) or low-res 5033// (relative to UNIX epoch), so in order to compare time we have to use the 5034// same timestamp type when saving the flush timestamp. 5035// All IE versions use low-res event timestamps, and have problematic clock 5036// implementations (#9632) 5037if (inBrowser && !isIE) { 5038 var performance_1 = window.performance; 5039 if (performance_1 && typeof performance_1.now === 'function' && getNow() > document.createEvent('Event').timeStamp) { 5040 // if the event timestamp, although evaluated AFTER the Date.now(), is 5041 // smaller than it, it means the event is using a hi-res timestamp, 5042 // and we need to use the hi-res version for event listener timestamps as 5043 // well. 5044 getNow = function () { 5045 return performance_1.now(); 5046 }; 5047 } 5048} 5049var sortCompareFn = function (a, b) { 5050 if (a.post) { 5051 if (!b.post) return 1; 5052 } else if (b.post) { 5053 return -1; 5054 } 5055 return a.id - b.id; 5056}; 5057/** 5058 * Flush both queues and run the watchers. 5059 */ 5060function flushSchedulerQueue() { 5061 currentFlushTimestamp = getNow(); 5062 flushing = true; 5063 var watcher, id; 5064 // Sort queue before flush. 5065 // This ensures that: 5066 // 1. Components are updated from parent to child. (because parent is always 5067 // created before the child) 5068 // 2. A component's user watchers are run before its render watcher (because 5069 // user watchers are created before the render watcher) 5070 // 3. If a component is destroyed during a parent component's watcher run, 5071 // its watchers can be skipped. 5072 queue.sort(sortCompareFn); 5073 // do not cache length because more watchers might be pushed 5074 // as we run existing watchers 5075 for (index$1 = 0; index$1 < queue.length; index$1++) { 5076 watcher = queue[index$1]; 5077 if (watcher.before) { 5078 watcher.before(); 5079 } 5080 id = watcher.id; 5081 has[id] = null; 5082 watcher.run(); 5083 // in dev build, check and stop circular updates. 5084 if ( true && has[id] != null) { 5085 circular[id] = (circular[id] || 0) + 1; 5086 if (circular[id] > MAX_UPDATE_COUNT) { 5087 warn$2('You may have an infinite update loop ' + (watcher.user ? "in watcher with expression \"".concat(watcher.expression, "\"") : "in a component render function."), watcher.vm); 5088 break; 5089 } 5090 } 5091 } 5092 // keep copies of post queues before resetting state 5093 var activatedQueue = activatedChildren.slice(); 5094 var updatedQueue = queue.slice(); 5095 resetSchedulerState(); 5096 // call component updated and activated hooks 5097 callActivatedHooks(activatedQueue); 5098 callUpdatedHooks(updatedQueue); 5099 cleanupDeps(); 5100 // devtool hook 5101 /* istanbul ignore if */ 5102 if (devtools && config.devtools) { 5103 devtools.emit('flush'); 5104 } 5105} 5106function callUpdatedHooks(queue) { 5107 var i = queue.length; 5108 while (i--) { 5109 var watcher = queue[i]; 5110 var vm = watcher.vm; 5111 if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) { 5112 callHook$1(vm, 'updated'); 5113 } 5114 } 5115} 5116/** 5117 * Queue a kept-alive component that was activated during patch. 5118 * The queue will be processed after the entire tree has been patched. 5119 */ 5120function queueActivatedComponent(vm) { 5121 // setting _inactive to false here so that a render function can 5122 // rely on checking whether it's in an inactive tree (e.g. router-view) 5123 vm._inactive = false; 5124 activatedChildren.push(vm); 5125} 5126function callActivatedHooks(queue) { 5127 for (var i = 0; i < queue.length; i++) { 5128 queue[i]._inactive = true; 5129 activateChildComponent(queue[i], true /* true */); 5130 } 5131} 5132/** 5133 * Push a watcher into the watcher queue. 5134 * Jobs with duplicate IDs will be skipped unless it's 5135 * pushed when the queue is being flushed. 5136 */ 5137function queueWatcher(watcher) { 5138 var id = watcher.id; 5139 if (has[id] != null) { 5140 return; 5141 } 5142 if (watcher === Dep.target && watcher.noRecurse) { 5143 return; 5144 } 5145 has[id] = true; 5146 if (!flushing) { 5147 queue.push(watcher); 5148 } else { 5149 // if already flushing, splice the watcher based on its id 5150 // if already past its id, it will be run next immediately. 5151 var i = queue.length - 1; 5152 while (i > index$1 && queue[i].id > watcher.id) { 5153 i--; 5154 } 5155 queue.splice(i + 1, 0, watcher); 5156 } 5157 // queue the flush 5158 if (!waiting) { 5159 waiting = true; 5160 if ( true && !config.async) { 5161 flushSchedulerQueue(); 5162 return; 5163 } 5164 nextTick(flushSchedulerQueue); 5165 } 5166} 5167var WATCHER = "watcher"; 5168var WATCHER_CB = "".concat(WATCHER, " callback"); 5169var WATCHER_GETTER = "".concat(WATCHER, " getter"); 5170var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup"); 5171// Simple effect. 5172function watchEffect(effect, options) { 5173 return doWatch(effect, null, options); 5174} 5175function watchPostEffect(effect, options) { 5176 return doWatch(effect, null, true ? __assign(__assign({}, options), { 5177 flush: 'post' 5178 }) : 0); 5179} 5180function watchSyncEffect(effect, options) { 5181 return doWatch(effect, null, true ? __assign(__assign({}, options), { 5182 flush: 'sync' 5183 }) : 0); 5184} 5185// initial value for watchers to trigger on undefined initial values 5186var INITIAL_WATCHER_VALUE = {}; 5187// implementation 5188function watch(source, cb, options) { 5189 if ( true && typeof cb !== 'function') { 5190 warn$2("`watch(fn, options?)` signature has been moved to a separate API. " + "Use `watchEffect(fn, options?)` instead. `watch` now only " + "supports `watch(source, cb, options?) signature."); 5191 } 5192 return doWatch(source, cb, options); 5193} 5194function doWatch(source, cb, _a) { 5195 var _b = _a === void 0 ? emptyObject : _a, 5196 immediate = _b.immediate, 5197 deep = _b.deep, 5198 _c = _b.flush, 5199 flush = _c === void 0 ? 'pre' : _c, 5200 onTrack = _b.onTrack, 5201 onTrigger = _b.onTrigger; 5202 if ( true && !cb) { 5203 if (immediate !== undefined) { 5204 warn$2("watch() \"immediate\" option is only respected when using the " + "watch(source, callback, options?) signature."); 5205 } 5206 if (deep !== undefined) { 5207 warn$2("watch() \"deep\" option is only respected when using the " + "watch(source, callback, options?) signature."); 5208 } 5209 } 5210 var warnInvalidSource = function (s) { 5211 warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") + "function, a ref, a reactive object, or an array of these types."); 5212 }; 5213 var instance = currentInstance; 5214 var call = function (fn, type, args) { 5215 if (args === void 0) { 5216 args = null; 5217 } 5218 return invokeWithErrorHandling(fn, null, args, instance, type); 5219 }; 5220 var getter; 5221 var forceTrigger = false; 5222 var isMultiSource = false; 5223 if (isRef(source)) { 5224 getter = function () { 5225 return source.value; 5226 }; 5227 forceTrigger = isShallow(source); 5228 } else if (isReactive(source)) { 5229 getter = function () { 5230 source.__ob__.dep.depend(); 5231 return source; 5232 }; 5233 deep = true; 5234 } else if (isArray(source)) { 5235 isMultiSource = true; 5236 forceTrigger = source.some(function (s) { 5237 return isReactive(s) || isShallow(s); 5238 }); 5239 getter = function () { 5240 return source.map(function (s) { 5241 if (isRef(s)) { 5242 return s.value; 5243 } else if (isReactive(s)) { 5244 return traverse(s); 5245 } else if (isFunction(s)) { 5246 return call(s, WATCHER_GETTER); 5247 } else { 5248 true && warnInvalidSource(s); 5249 } 5250 }); 5251 }; 5252 } else if (isFunction(source)) { 5253 if (cb) { 5254 // getter with cb 5255 getter = function () { 5256 return call(source, WATCHER_GETTER); 5257 }; 5258 } else { 5259 // no cb -> simple effect 5260 getter = function () { 5261 if (instance && instance._isDestroyed) { 5262 return; 5263 } 5264 if (cleanup) { 5265 cleanup(); 5266 } 5267 return call(source, WATCHER, [onCleanup]); 5268 }; 5269 } 5270 } else { 5271 getter = noop; 5272 true && warnInvalidSource(source); 5273 } 5274 if (cb && deep) { 5275 var baseGetter_1 = getter; 5276 getter = function () { 5277 return traverse(baseGetter_1()); 5278 }; 5279 } 5280 var cleanup; 5281 var onCleanup = function (fn) { 5282 cleanup = watcher.onStop = function () { 5283 call(fn, WATCHER_CLEANUP); 5284 }; 5285 }; 5286 // in SSR there is no need to setup an actual effect, and it should be noop 5287 // unless it's eager 5288 if (isServerRendering()) { 5289 // we will also not call the invalidate callback (+ runner is not set up) 5290 onCleanup = noop; 5291 if (!cb) { 5292 getter(); 5293 } else if (immediate) { 5294 call(cb, WATCHER_CB, [getter(), isMultiSource ? [] : undefined, onCleanup]); 5295 } 5296 return noop; 5297 } 5298 var watcher = new Watcher(currentInstance, getter, noop, { 5299 lazy: true 5300 }); 5301 watcher.noRecurse = !cb; 5302 var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE; 5303 // overwrite default run 5304 watcher.run = function () { 5305 if (!watcher.active) { 5306 return; 5307 } 5308 if (cb) { 5309 // watch(source, cb) 5310 var newValue = watcher.get(); 5311 if (deep || forceTrigger || (isMultiSource ? newValue.some(function (v, i) { 5312 return hasChanged(v, oldValue[i]); 5313 }) : hasChanged(newValue, oldValue))) { 5314 // cleanup before running cb again 5315 if (cleanup) { 5316 cleanup(); 5317 } 5318 call(cb, WATCHER_CB, [newValue, 5319 // pass undefined as the old value when it's changed for the first time 5320 oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue, onCleanup]); 5321 oldValue = newValue; 5322 } 5323 } else { 5324 // watchEffect 5325 watcher.get(); 5326 } 5327 }; 5328 if (flush === 'sync') { 5329 watcher.update = watcher.run; 5330 } else if (flush === 'post') { 5331 watcher.post = true; 5332 watcher.update = function () { 5333 return queueWatcher(watcher); 5334 }; 5335 } else { 5336 // pre 5337 watcher.update = function () { 5338 if (instance && instance === currentInstance && !instance._isMounted) { 5339 // pre-watcher triggered before 5340 var buffer = instance._preWatchers || (instance._preWatchers = []); 5341 if (buffer.indexOf(watcher) < 0) buffer.push(watcher); 5342 } else { 5343 queueWatcher(watcher); 5344 } 5345 }; 5346 } 5347 if (true) { 5348 watcher.onTrack = onTrack; 5349 watcher.onTrigger = onTrigger; 5350 } 5351 // initial run 5352 if (cb) { 5353 if (immediate) { 5354 watcher.run(); 5355 } else { 5356 oldValue = watcher.get(); 5357 } 5358 } else if (flush === 'post' && instance) { 5359 instance.$once('hook:mounted', function () { 5360 return watcher.get(); 5361 }); 5362 } else { 5363 watcher.get(); 5364 } 5365 return function () { 5366 watcher.teardown(); 5367 }; 5368} 5369var activeEffectScope; 5370var EffectScope = /** @class */function () { 5371 function EffectScope(detached) { 5372 if (detached === void 0) { 5373 detached = false; 5374 } 5375 this.detached = detached; 5376 /** 5377 * @internal 5378 */ 5379 this.active = true; 5380 /** 5381 * @internal 5382 */ 5383 this.effects = []; 5384 /** 5385 * @internal 5386 */ 5387 this.cleanups = []; 5388 this.parent = activeEffectScope; 5389 if (!detached && activeEffectScope) { 5390 this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1; 5391 } 5392 } 5393 EffectScope.prototype.run = function (fn) { 5394 if (this.active) { 5395 var currentEffectScope = activeEffectScope; 5396 try { 5397 activeEffectScope = this; 5398 return fn(); 5399 } finally { 5400 activeEffectScope = currentEffectScope; 5401 } 5402 } else if (true) { 5403 warn$2("cannot run an inactive effect scope."); 5404 } 5405 }; 5406 /** 5407 * This should only be called on non-detached scopes 5408 * @internal 5409 */ 5410 EffectScope.prototype.on = function () { 5411 activeEffectScope = this; 5412 }; 5413 /** 5414 * This should only be called on non-detached scopes 5415 * @internal 5416 */ 5417 EffectScope.prototype.off = function () { 5418 activeEffectScope = this.parent; 5419 }; 5420 EffectScope.prototype.stop = function (fromParent) { 5421 if (this.active) { 5422 var i = void 0, 5423 l = void 0; 5424 for (i = 0, l = this.effects.length; i < l; i++) { 5425 this.effects[i].teardown(); 5426 } 5427 for (i = 0, l = this.cleanups.length; i < l; i++) { 5428 this.cleanups[i](); 5429 } 5430 if (this.scopes) { 5431 for (i = 0, l = this.scopes.length; i < l; i++) { 5432 this.scopes[i].stop(true); 5433 } 5434 } 5435 // nested scope, dereference from parent to avoid memory leaks 5436 if (!this.detached && this.parent && !fromParent) { 5437 // optimized O(1) removal 5438 var last = this.parent.scopes.pop(); 5439 if (last && last !== this) { 5440 this.parent.scopes[this.index] = last; 5441 last.index = this.index; 5442 } 5443 } 5444 this.parent = undefined; 5445 this.active = false; 5446 } 5447 }; 5448 return EffectScope; 5449}(); 5450function effectScope(detached) { 5451 return new EffectScope(detached); 5452} 5453/** 5454 * @internal 5455 */ 5456function recordEffectScope(effect, scope) { 5457 if (scope === void 0) { 5458 scope = activeEffectScope; 5459 } 5460 if (scope && scope.active) { 5461 scope.effects.push(effect); 5462 } 5463} 5464function getCurrentScope() { 5465 return activeEffectScope; 5466} 5467function onScopeDispose(fn) { 5468 if (activeEffectScope) { 5469 activeEffectScope.cleanups.push(fn); 5470 } else if (true) { 5471 warn$2("onScopeDispose() is called when there is no active effect scope" + " to be associated with."); 5472 } 5473} 5474function provide(key, value) { 5475 if (!currentInstance) { 5476 if (true) { 5477 warn$2("provide() can only be used inside setup()."); 5478 } 5479 } else { 5480 // TS doesn't allow symbol as index type 5481 resolveProvided(currentInstance)[key] = value; 5482 } 5483} 5484function resolveProvided(vm) { 5485 // by default an instance inherits its parent's provides object 5486 // but when it needs to provide values of its own, it creates its 5487 // own provides object using parent provides object as prototype. 5488 // this way in `inject` we can simply look up injections from direct 5489 // parent and let the prototype chain do the work. 5490 var existing = vm._provided; 5491 var parentProvides = vm.$parent && vm.$parent._provided; 5492 if (parentProvides === existing) { 5493 return vm._provided = Object.create(parentProvides); 5494 } else { 5495 return existing; 5496 } 5497} 5498function inject(key, defaultValue, treatDefaultAsFactory) { 5499 if (treatDefaultAsFactory === void 0) { 5500 treatDefaultAsFactory = false; 5501 } 5502 // fallback to `currentRenderingInstance` so that this can be called in 5503 // a functional component 5504 var instance = currentInstance; 5505 if (instance) { 5506 // #2400 5507 // to support `app.use` plugins, 5508 // fallback to appContext's `provides` if the instance is at root 5509 var provides = instance.$parent && instance.$parent._provided; 5510 if (provides && key in provides) { 5511 // TS doesn't allow symbol as index type 5512 return provides[key]; 5513 } else if (arguments.length > 1) { 5514 return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance) : defaultValue; 5515 } else if (true) { 5516 warn$2("injection \"".concat(String(key), "\" not found.")); 5517 } 5518 } else if (true) { 5519 warn$2("inject() can only be used inside setup() or functional components."); 5520 } 5521} 5522 5523/** 5524 * @internal this function needs manual public type declaration because it relies 5525 * on previously manually authored types from Vue 2 5526 */ 5527function h(type, props, children) { 5528 if (!currentInstance) { 5529 true && warn$2("globally imported h() can only be invoked when there is an active " + "component instance, e.g. synchronously in a component's render or setup function."); 5530 } 5531 return createElement$1(currentInstance, type, props, children, 2, true); 5532} 5533function handleError(err, vm, info) { 5534 // Deactivate deps tracking while processing error handler to avoid possible infinite rendering. 5535 // See: https://github.com/vuejs/vuex/issues/1505 5536 pushTarget(); 5537 try { 5538 if (vm) { 5539 var cur = vm; 5540 while (cur = cur.$parent) { 5541 var hooks = cur.$options.errorCaptured; 5542 if (hooks) { 5543 for (var i = 0; i < hooks.length; i++) { 5544 try { 5545 var capture = hooks[i].call(cur, err, vm, info) === false; 5546 if (capture) return; 5547 } catch (e) { 5548 globalHandleError(e, cur, 'errorCaptured hook'); 5549 } 5550 } 5551 } 5552 } 5553 } 5554 globalHandleError(err, vm, info); 5555 } finally { 5556 popTarget(); 5557 } 5558} 5559function invokeWithErrorHandling(handler, context, args, vm, info) { 5560 var res; 5561 try { 5562 res = args ? handler.apply(context, args) : handler.call(context); 5563 if (res && !res._isVue && isPromise(res) && !res._handled) { 5564 res.catch(function (e) { 5565 return handleError(e, vm, info + " (Promise/async)"); 5566 }); 5567 res._handled = true; 5568 } 5569 } catch (e) { 5570 handleError(e, vm, info); 5571 } 5572 return res; 5573} 5574function globalHandleError(err, vm, info) { 5575 if (config.errorHandler) { 5576 try { 5577 return config.errorHandler.call(null, err, vm, info); 5578 } catch (e) { 5579 // if the user intentionally throws the original error in the handler, 5580 // do not log it twice 5581 if (e !== err) { 5582 logError(e, null, 'config.errorHandler'); 5583 } 5584 } 5585 } 5586 logError(err, vm, info); 5587} 5588function logError(err, vm, info) { 5589 if (true) { 5590 warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm); 5591 } 5592 /* istanbul ignore else */ 5593 if (inBrowser && typeof console !== 'undefined') { 5594 console.error(err); 5595 } else { 5596 throw err; 5597 } 5598} 5599 5600/* globals MutationObserver */ 5601var isUsingMicroTask = false; 5602var callbacks = []; 5603var pending = false; 5604function flushCallbacks() { 5605 pending = false; 5606 var copies = callbacks.slice(0); 5607 callbacks.length = 0; 5608 for (var i = 0; i < copies.length; i++) { 5609 copies[i](); 5610 } 5611} 5612// Here we have async deferring wrappers using microtasks. 5613// In 2.5 we used (macro) tasks (in combination with microtasks). 5614// However, it has subtle problems when state is changed right before repaint 5615// (e.g. #6813, out-in transitions). 5616// Also, using (macro) tasks in event handler would cause some weird behaviors 5617// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109). 5618// So we now use microtasks everywhere, again. 5619// A major drawback of this tradeoff is that there are some scenarios 5620// where microtasks have too high a priority and fire in between supposedly 5621// sequential events (e.g. #4521, #6690, which have workarounds) 5622// or even between bubbling of the same event (#6566). 5623var timerFunc; 5624// The nextTick behavior leverages the microtask queue, which can be accessed 5625// via either native Promise.then or MutationObserver. 5626// MutationObserver has wider support, however it is seriously bugged in 5627// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It 5628// completely stops working after triggering a few times... so, if native 5629// Promise is available, we will use it: 5630/* istanbul ignore next, $flow-disable-line */ 5631if (typeof Promise !== 'undefined' && isNative(Promise)) { 5632 var p_1 = Promise.resolve(); 5633 timerFunc = function () { 5634 p_1.then(flushCallbacks); 5635 // In problematic UIWebViews, Promise.then doesn't completely break, but 5636 // it can get stuck in a weird state where callbacks are pushed into the 5637 // microtask queue but the queue isn't being flushed, until the browser 5638 // needs to do some other work, e.g. handle a timer. Therefore we can 5639 // "force" the microtask queue to be flushed by adding an empty timer. 5640 if (isIOS) setTimeout(noop); 5641 }; 5642 isUsingMicroTask = true; 5643} else if (!isIE && typeof MutationObserver !== 'undefined' && (isNative(MutationObserver) || 5644// PhantomJS and iOS 7.x 5645MutationObserver.toString() === '[object MutationObserverConstructor]')) { 5646 // Use MutationObserver where native Promise is not available, 5647 // e.g. PhantomJS, iOS7, Android 4.4 5648 // (#6466 MutationObserver is unreliable in IE11) 5649 var counter_1 = 1; 5650 var observer = new MutationObserver(flushCallbacks); 5651 var textNode_1 = document.createTextNode(String(counter_1)); 5652 observer.observe(textNode_1, { 5653 characterData: true 5654 }); 5655 timerFunc = function () { 5656 counter_1 = (counter_1 + 1) % 2; 5657 textNode_1.data = String(counter_1); 5658 }; 5659 isUsingMicroTask = true; 5660} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) { 5661 // Fallback to setImmediate. 5662 // Technically it leverages the (macro) task queue, 5663 // but it is still a better choice than setTimeout. 5664 timerFunc = function () { 5665 setImmediate(flushCallbacks); 5666 }; 5667} else { 5668 // Fallback to setTimeout. 5669 timerFunc = function () { 5670 setTimeout(flushCallbacks, 0); 5671 }; 5672} 5673/** 5674 * @internal 5675 */ 5676function nextTick(cb, ctx) { 5677 var _resolve; 5678 callbacks.push(function () { 5679 if (cb) { 5680 try { 5681 cb.call(ctx); 5682 } catch (e) { 5683 handleError(e, ctx, 'nextTick'); 5684 } 5685 } else if (_resolve) { 5686 _resolve(ctx); 5687 } 5688 }); 5689 if (!pending) { 5690 pending = true; 5691 timerFunc(); 5692 } 5693 // $flow-disable-line 5694 if (!cb && typeof Promise !== 'undefined') { 5695 return new Promise(function (resolve) { 5696 _resolve = resolve; 5697 }); 5698 } 5699} 5700function useCssModule(name) { 5701 if (name === void 0) { 5702 name = '$style'; 5703 } 5704 /* istanbul ignore else */ 5705 { 5706 if (!currentInstance) { 5707 true && warn$2("useCssModule must be called inside setup()"); 5708 return emptyObject; 5709 } 5710 var mod = currentInstance[name]; 5711 if (!mod) { 5712 true && warn$2("Current instance does not have CSS module named \"".concat(name, "\".")); 5713 return emptyObject; 5714 } 5715 return mod; 5716 } 5717} 5718 5719/** 5720 * Runtime helper for SFC's CSS variable injection feature. 5721 * @private 5722 */ 5723function useCssVars(getter) { 5724 if (!inBrowser && !false) return; 5725 var instance = currentInstance; 5726 if (!instance) { 5727 true && warn$2("useCssVars is called without current active component instance."); 5728 return; 5729 } 5730 watchPostEffect(function () { 5731 var el = instance.$el; 5732 var vars = getter(instance, instance._setupProxy); 5733 if (el && el.nodeType === 1) { 5734 var style = el.style; 5735 for (var key in vars) { 5736 style.setProperty("--".concat(key), vars[key]); 5737 } 5738 } 5739 }); 5740} 5741 5742/** 5743 * v3-compatible async component API. 5744 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts 5745 * because it relies on existing manual types 5746 */ 5747function defineAsyncComponent(source) { 5748 if (isFunction(source)) { 5749 source = { 5750 loader: source 5751 }; 5752 } 5753 var loader = source.loader, 5754 loadingComponent = source.loadingComponent, 5755 errorComponent = source.errorComponent, 5756 _a = source.delay, 5757 delay = _a === void 0 ? 200 : _a, 5758 timeout = source.timeout, 5759 // undefined = never times out 5760 _b = source.suspensible, 5761 // undefined = never times out 5762 suspensible = _b === void 0 ? false : _b, 5763 // in Vue 3 default is true 5764 userOnError = source.onError; 5765 if ( true && suspensible) { 5766 warn$2("The suspensiblbe option for async components is not supported in Vue2. It is ignored."); 5767 } 5768 var pendingRequest = null; 5769 var retries = 0; 5770 var retry = function () { 5771 retries++; 5772 pendingRequest = null; 5773 return load(); 5774 }; 5775 var load = function () { 5776 var thisRequest; 5777 return pendingRequest || (thisRequest = pendingRequest = loader().catch(function (err) { 5778 err = err instanceof Error ? err : new Error(String(err)); 5779 if (userOnError) { 5780 return new Promise(function (resolve, reject) { 5781 var userRetry = function () { 5782 return resolve(retry()); 5783 }; 5784 var userFail = function () { 5785 return reject(err); 5786 }; 5787 userOnError(err, userRetry, userFail, retries + 1); 5788 }); 5789 } else { 5790 throw err; 5791 } 5792 }).then(function (comp) { 5793 if (thisRequest !== pendingRequest && pendingRequest) { 5794 return pendingRequest; 5795 } 5796 if ( true && !comp) { 5797 warn$2("Async component loader resolved to undefined. " + "If you are using retry(), make sure to return its return value."); 5798 } 5799 // interop module default 5800 if (comp && (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) { 5801 comp = comp.default; 5802 } 5803 if ( true && comp && !isObject(comp) && !isFunction(comp)) { 5804 throw new Error("Invalid async component load result: ".concat(comp)); 5805 } 5806 return comp; 5807 })); 5808 }; 5809 return function () { 5810 var component = load(); 5811 return { 5812 component: component, 5813 delay: delay, 5814 timeout: timeout, 5815 error: errorComponent, 5816 loading: loadingComponent 5817 }; 5818 }; 5819} 5820function createLifeCycle(hookName) { 5821 return function (fn, target) { 5822 if (target === void 0) { 5823 target = currentInstance; 5824 } 5825 if (!target) { 5826 true && warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") + "associated with. " + "Lifecycle injection APIs can only be used during execution of setup()."); 5827 return; 5828 } 5829 return injectHook(target, hookName, fn); 5830 }; 5831} 5832function formatName(name) { 5833 if (name === 'beforeDestroy') { 5834 name = 'beforeUnmount'; 5835 } else if (name === 'destroyed') { 5836 name = 'unmounted'; 5837 } 5838 return "on".concat(name[0].toUpperCase() + name.slice(1)); 5839} 5840function injectHook(instance, hookName, fn) { 5841 var options = instance.$options; 5842 options[hookName] = mergeLifecycleHook(options[hookName], fn); 5843} 5844var onBeforeMount = createLifeCycle('beforeMount'); 5845var onMounted = createLifeCycle('mounted'); 5846var onBeforeUpdate = createLifeCycle('beforeUpdate'); 5847var onUpdated = createLifeCycle('updated'); 5848var onBeforeUnmount = createLifeCycle('beforeDestroy'); 5849var onUnmounted = createLifeCycle('destroyed'); 5850var onActivated = createLifeCycle('activated'); 5851var onDeactivated = createLifeCycle('deactivated'); 5852var onServerPrefetch = createLifeCycle('serverPrefetch'); 5853var onRenderTracked = createLifeCycle('renderTracked'); 5854var onRenderTriggered = createLifeCycle('renderTriggered'); 5855var injectErrorCapturedHook = createLifeCycle('errorCaptured'); 5856function onErrorCaptured(hook, target) { 5857 if (target === void 0) { 5858 target = currentInstance; 5859 } 5860 injectErrorCapturedHook(hook, target); 5861} 5862 5863/** 5864 * Note: also update dist/vue.runtime.mjs when adding new exports to this file. 5865 */ 5866var version = '2.7.14'; 5867/** 5868 * @internal type is manually declared in <root>/types/v3-define-component.d.ts 5869 */ 5870function defineComponent(options) { 5871 return options; 5872} 5873var seenObjects = new _Set(); 5874/** 5875 * Recursively traverse an object to evoke all converted 5876 * getters, so that every nested property inside the object 5877 * is collected as a "deep" dependency. 5878 */ 5879function traverse(val) { 5880 _traverse(val, seenObjects); 5881 seenObjects.clear(); 5882 return val; 5883} 5884function _traverse(val, seen) { 5885 var i, keys; 5886 var isA = isArray(val); 5887 if (!isA && !isObject(val) || val.__v_skip /* ReactiveFlags.SKIP */ || Object.isFrozen(val) || val instanceof VNode) { 5888 return; 5889 } 5890 if (val.__ob__) { 5891 var depId = val.__ob__.dep.id; 5892 if (seen.has(depId)) { 5893 return; 5894 } 5895 seen.add(depId); 5896 } 5897 if (isA) { 5898 i = val.length; 5899 while (i--) _traverse(val[i], seen); 5900 } else if (isRef(val)) { 5901 _traverse(val.value, seen); 5902 } else { 5903 keys = Object.keys(val); 5904 i = keys.length; 5905 while (i--) _traverse(val[keys[i]], seen); 5906 } 5907} 5908var uid$1 = 0; 5909/** 5910 * A watcher parses an expression, collects dependencies, 5911 * and fires callback when the expression value changes. 5912 * This is used for both the $watch() api and directives. 5913 * @internal 5914 */ 5915var Watcher = /** @class */function () { 5916 function Watcher(vm, expOrFn, cb, options, isRenderWatcher) { 5917 recordEffectScope(this, 5918 // if the active effect scope is manually created (not a component scope), 5919 // prioritize it 5920 activeEffectScope && !activeEffectScope._vm ? activeEffectScope : vm ? vm._scope : undefined); 5921 if ((this.vm = vm) && isRenderWatcher) { 5922 vm._watcher = this; 5923 } 5924 // options 5925 if (options) { 5926 this.deep = !!options.deep; 5927 this.user = !!options.user; 5928 this.lazy = !!options.lazy; 5929 this.sync = !!options.sync; 5930 this.before = options.before; 5931 if (true) { 5932 this.onTrack = options.onTrack; 5933 this.onTrigger = options.onTrigger; 5934 } 5935 } else { 5936 this.deep = this.user = this.lazy = this.sync = false; 5937 } 5938 this.cb = cb; 5939 this.id = ++uid$1; // uid for batching 5940 this.active = true; 5941 this.post = false; 5942 this.dirty = this.lazy; // for lazy watchers 5943 this.deps = []; 5944 this.newDeps = []; 5945 this.depIds = new _Set(); 5946 this.newDepIds = new _Set(); 5947 this.expression = true ? expOrFn.toString() : 0; 5948 // parse expression for getter 5949 if (isFunction(expOrFn)) { 5950 this.getter = expOrFn; 5951 } else { 5952 this.getter = parsePath(expOrFn); 5953 if (!this.getter) { 5954 this.getter = noop; 5955 true && warn$2("Failed watching path: \"".concat(expOrFn, "\" ") + 'Watcher only accepts simple dot-delimited paths. ' + 'For full control, use a function instead.', vm); 5956 } 5957 } 5958 this.value = this.lazy ? undefined : this.get(); 5959 } 5960 /** 5961 * Evaluate the getter, and re-collect dependencies. 5962 */ 5963 Watcher.prototype.get = function () { 5964 pushTarget(this); 5965 var value; 5966 var vm = this.vm; 5967 try { 5968 value = this.getter.call(vm, vm); 5969 } catch (e) { 5970 if (this.user) { 5971 handleError(e, vm, "getter for watcher \"".concat(this.expression, "\"")); 5972 } else { 5973 throw e; 5974 } 5975 } finally { 5976 // "touch" every property so they are all tracked as 5977 // dependencies for deep watching 5978 if (this.deep) { 5979 traverse(value); 5980 } 5981 popTarget(); 5982 this.cleanupDeps(); 5983 } 5984 return value; 5985 }; 5986 /** 5987 * Add a dependency to this directive. 5988 */ 5989 Watcher.prototype.addDep = function (dep) { 5990 var id = dep.id; 5991 if (!this.newDepIds.has(id)) { 5992 this.newDepIds.add(id); 5993 this.newDeps.push(dep); 5994 if (!this.depIds.has(id)) { 5995 dep.addSub(this); 5996 } 5997 } 5998 }; 5999 /** 6000 * Clean up for dependency collection. 6001 */ 6002 Watcher.prototype.cleanupDeps = function () { 6003 var i = this.deps.length; 6004 while (i--) { 6005 var dep = this.deps[i]; 6006 if (!this.newDepIds.has(dep.id)) { 6007 dep.removeSub(this); 6008 } 6009 } 6010 var tmp = this.depIds; 6011 this.depIds = this.newDepIds; 6012 this.newDepIds = tmp; 6013 this.newDepIds.clear(); 6014 tmp = this.deps; 6015 this.deps = this.newDeps; 6016 this.newDeps = tmp; 6017 this.newDeps.length = 0; 6018 }; 6019 /** 6020 * Subscriber interface. 6021 * Will be called when a dependency changes. 6022 */ 6023 Watcher.prototype.update = function () { 6024 /* istanbul ignore else */ 6025 if (this.lazy) { 6026 this.dirty = true; 6027 } else if (this.sync) { 6028 this.run(); 6029 } else { 6030 queueWatcher(this); 6031 } 6032 }; 6033 /** 6034 * Scheduler job interface. 6035 * Will be called by the scheduler. 6036 */ 6037 Watcher.prototype.run = function () { 6038 if (this.active) { 6039 var value = this.get(); 6040 if (value !== this.value || 6041 // Deep watchers and watchers on Object/Arrays should fire even 6042 // when the value is the same, because the value may 6043 // have mutated. 6044 isObject(value) || this.deep) { 6045 // set new value 6046 var oldValue = this.value; 6047 this.value = value; 6048 if (this.user) { 6049 var info = "callback for watcher \"".concat(this.expression, "\""); 6050 invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info); 6051 } else { 6052 this.cb.call(this.vm, value, oldValue); 6053 } 6054 } 6055 } 6056 }; 6057 /** 6058 * Evaluate the value of the watcher. 6059 * This only gets called for lazy watchers. 6060 */ 6061 Watcher.prototype.evaluate = function () { 6062 this.value = this.get(); 6063 this.dirty = false; 6064 }; 6065 /** 6066 * Depend on all deps collected by this watcher. 6067 */ 6068 Watcher.prototype.depend = function () { 6069 var i = this.deps.length; 6070 while (i--) { 6071 this.deps[i].depend(); 6072 } 6073 }; 6074 /** 6075 * Remove self from all dependencies' subscriber list. 6076 */ 6077 Watcher.prototype.teardown = function () { 6078 if (this.vm && !this.vm._isBeingDestroyed) { 6079 remove$2(this.vm._scope.effects, this); 6080 } 6081 if (this.active) { 6082 var i = this.deps.length; 6083 while (i--) { 6084 this.deps[i].removeSub(this); 6085 } 6086 this.active = false; 6087 if (this.onStop) { 6088 this.onStop(); 6089 } 6090 } 6091 }; 6092 return Watcher; 6093}(); 6094var sharedPropertyDefinition = { 6095 enumerable: true, 6096 configurable: true, 6097 get: noop, 6098 set: noop 6099}; 6100function proxy(target, sourceKey, key) { 6101 sharedPropertyDefinition.get = function proxyGetter() { 6102 return this[sourceKey][key]; 6103 }; 6104 sharedPropertyDefinition.set = function proxySetter(val) { 6105 this[sourceKey][key] = val; 6106 }; 6107 Object.defineProperty(target, key, sharedPropertyDefinition); 6108} 6109function initState(vm) { 6110 var opts = vm.$options; 6111 if (opts.props) initProps$1(vm, opts.props); 6112 // Composition API 6113 initSetup(vm); 6114 if (opts.methods) initMethods(vm, opts.methods); 6115 if (opts.data) { 6116 initData(vm); 6117 } else { 6118 var ob = observe(vm._data = {}); 6119 ob && ob.vmCount++; 6120 } 6121 if (opts.computed) initComputed$1(vm, opts.computed); 6122 if (opts.watch && opts.watch !== nativeWatch) { 6123 initWatch(vm, opts.watch); 6124 } 6125} 6126function initProps$1(vm, propsOptions) { 6127 var propsData = vm.$options.propsData || {}; 6128 var props = vm._props = shallowReactive({}); 6129 // cache prop keys so that future props updates can iterate using Array 6130 // instead of dynamic object key enumeration. 6131 var keys = vm.$options._propKeys = []; 6132 var isRoot = !vm.$parent; 6133 // root instance props should be converted 6134 if (!isRoot) { 6135 toggleObserving(false); 6136 } 6137 var _loop_1 = function (key) { 6138 keys.push(key); 6139 var value = validateProp(key, propsOptions, propsData, vm); 6140 /* istanbul ignore else */ 6141 if (true) { 6142 var hyphenatedKey = hyphenate(key); 6143 if (isReservedAttribute(hyphenatedKey) || config.isReservedAttr(hyphenatedKey)) { 6144 warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm); 6145 } 6146 defineReactive(props, key, value, function () { 6147 if (!isRoot && !isUpdatingChildComponent) { 6148 warn$2("Avoid mutating a prop directly since the value will be " + "overwritten whenever the parent component re-renders. " + "Instead, use a data or computed property based on the prop's " + "value. Prop being mutated: \"".concat(key, "\""), vm); 6149 } 6150 }); 6151 } else {} 6152 // static props are already proxied on the component's prototype 6153 // during Vue.extend(). We only need to proxy props defined at 6154 // instantiation here. 6155 if (!(key in vm)) { 6156 proxy(vm, "_props", key); 6157 } 6158 }; 6159 for (var key in propsOptions) { 6160 _loop_1(key); 6161 } 6162 toggleObserving(true); 6163} 6164function initData(vm) { 6165 var data = vm.$options.data; 6166 data = vm._data = isFunction(data) ? getData(data, vm) : data || {}; 6167 if (!isPlainObject(data)) { 6168 data = {}; 6169 true && warn$2('data functions should return an object:\n' + 'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm); 6170 } 6171 // proxy data on instance 6172 var keys = Object.keys(data); 6173 var props = vm.$options.props; 6174 var methods = vm.$options.methods; 6175 var i = keys.length; 6176 while (i--) { 6177 var key = keys[i]; 6178 if (true) { 6179 if (methods && hasOwn(methods, key)) { 6180 warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm); 6181 } 6182 } 6183 if (props && hasOwn(props, key)) { 6184 true && warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") + "Use prop default value instead.", vm); 6185 } else if (!isReserved(key)) { 6186 proxy(vm, "_data", key); 6187 } 6188 } 6189 // observe data 6190 var ob = observe(data); 6191 ob && ob.vmCount++; 6192} 6193function getData(data, vm) { 6194 // #7573 disable dep collection when invoking data getters 6195 pushTarget(); 6196 try { 6197 return data.call(vm, vm); 6198 } catch (e) { 6199 handleError(e, vm, "data()"); 6200 return {}; 6201 } finally { 6202 popTarget(); 6203 } 6204} 6205var computedWatcherOptions = { 6206 lazy: true 6207}; 6208function initComputed$1(vm, computed) { 6209 // $flow-disable-line 6210 var watchers = vm._computedWatchers = Object.create(null); 6211 // computed properties are just getters during SSR 6212 var isSSR = isServerRendering(); 6213 for (var key in computed) { 6214 var userDef = computed[key]; 6215 var getter = isFunction(userDef) ? userDef : userDef.get; 6216 if ( true && getter == null) { 6217 warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm); 6218 } 6219 if (!isSSR) { 6220 // create internal watcher for the computed property. 6221 watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions); 6222 } 6223 // component-defined computed properties are already defined on the 6224 // component prototype. We only need to define computed properties defined 6225 // at instantiation here. 6226 if (!(key in vm)) { 6227 defineComputed(vm, key, userDef); 6228 } else if (true) { 6229 if (key in vm.$data) { 6230 warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm); 6231 } else if (vm.$options.props && key in vm.$options.props) { 6232 warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm); 6233 } else if (vm.$options.methods && key in vm.$options.methods) { 6234 warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm); 6235 } 6236 } 6237 } 6238} 6239function defineComputed(target, key, userDef) { 6240 var shouldCache = !isServerRendering(); 6241 if (isFunction(userDef)) { 6242 sharedPropertyDefinition.get = shouldCache ? createComputedGetter(key) : createGetterInvoker(userDef); 6243 sharedPropertyDefinition.set = noop; 6244 } else { 6245 sharedPropertyDefinition.get = userDef.get ? shouldCache && userDef.cache !== false ? createComputedGetter(key) : createGetterInvoker(userDef.get) : noop; 6246 sharedPropertyDefinition.set = userDef.set || noop; 6247 } 6248 if ( true && sharedPropertyDefinition.set === noop) { 6249 sharedPropertyDefinition.set = function () { 6250 warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this); 6251 }; 6252 } 6253 Object.defineProperty(target, key, sharedPropertyDefinition); 6254} 6255function createComputedGetter(key) { 6256 return function computedGetter() { 6257 var watcher = this._computedWatchers && this._computedWatchers[key]; 6258 if (watcher) { 6259 if (watcher.dirty) { 6260 watcher.evaluate(); 6261 } 6262 if (Dep.target) { 6263 if ( true && Dep.target.onTrack) { 6264 Dep.target.onTrack({ 6265 effect: Dep.target, 6266 target: this, 6267 type: "get" /* TrackOpTypes.GET */, 6268 key: key 6269 }); 6270 } 6271 watcher.depend(); 6272 } 6273 return watcher.value; 6274 } 6275 }; 6276} 6277function createGetterInvoker(fn) { 6278 return function computedGetter() { 6279 return fn.call(this, this); 6280 }; 6281} 6282function initMethods(vm, methods) { 6283 var props = vm.$options.props; 6284 for (var key in methods) { 6285 if (true) { 6286 if (typeof methods[key] !== 'function') { 6287 warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") + "Did you reference the function correctly?", vm); 6288 } 6289 if (props && hasOwn(props, key)) { 6290 warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm); 6291 } 6292 if (key in vm && isReserved(key)) { 6293 warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") + "Avoid defining component methods that start with _ or $."); 6294 } 6295 } 6296 vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm); 6297 } 6298} 6299function initWatch(vm, watch) { 6300 for (var key in watch) { 6301 var handler = watch[key]; 6302 if (isArray(handler)) { 6303 for (var i = 0; i < handler.length; i++) { 6304 createWatcher(vm, key, handler[i]); 6305 } 6306 } else { 6307 createWatcher(vm, key, handler); 6308 } 6309 } 6310} 6311function createWatcher(vm, expOrFn, handler, options) { 6312 if (isPlainObject(handler)) { 6313 options = handler; 6314 handler = handler.handler; 6315 } 6316 if (typeof handler === 'string') { 6317 handler = vm[handler]; 6318 } 6319 return vm.$watch(expOrFn, handler, options); 6320} 6321function stateMixin(Vue) { 6322 // flow somehow has problems with directly declared definition object 6323 // when using Object.defineProperty, so we have to procedurally build up 6324 // the object here. 6325 var dataDef = {}; 6326 dataDef.get = function () { 6327 return this._data; 6328 }; 6329 var propsDef = {}; 6330 propsDef.get = function () { 6331 return this._props; 6332 }; 6333 if (true) { 6334 dataDef.set = function () { 6335 warn$2('Avoid replacing instance root $data. ' + 'Use nested data properties instead.', this); 6336 }; 6337 propsDef.set = function () { 6338 warn$2("$props is readonly.", this); 6339 }; 6340 } 6341 Object.defineProperty(Vue.prototype, '$data', dataDef); 6342 Object.defineProperty(Vue.prototype, '$props', propsDef); 6343 Vue.prototype.$set = set; 6344 Vue.prototype.$delete = del; 6345 Vue.prototype.$watch = function (expOrFn, cb, options) { 6346 var vm = this; 6347 if (isPlainObject(cb)) { 6348 return createWatcher(vm, expOrFn, cb, options); 6349 } 6350 options = options || {}; 6351 options.user = true; 6352 var watcher = new Watcher(vm, expOrFn, cb, options); 6353 if (options.immediate) { 6354 var info = "callback for immediate watcher \"".concat(watcher.expression, "\""); 6355 pushTarget(); 6356 invokeWithErrorHandling(cb, vm, [watcher.value], vm, info); 6357 popTarget(); 6358 } 6359 return function unwatchFn() { 6360 watcher.teardown(); 6361 }; 6362 }; 6363} 6364function initProvide(vm) { 6365 var provideOption = vm.$options.provide; 6366 if (provideOption) { 6367 var provided = isFunction(provideOption) ? provideOption.call(vm) : provideOption; 6368 if (!isObject(provided)) { 6369 return; 6370 } 6371 var source = resolveProvided(vm); 6372 // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to 6373 // iterate the keys ourselves. 6374 var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided); 6375 for (var i = 0; i < keys.length; i++) { 6376 var key = keys[i]; 6377 Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key)); 6378 } 6379 } 6380} 6381function initInjections(vm) { 6382 var result = resolveInject(vm.$options.inject, vm); 6383 if (result) { 6384 toggleObserving(false); 6385 Object.keys(result).forEach(function (key) { 6386 /* istanbul ignore else */ 6387 if (true) { 6388 defineReactive(vm, key, result[key], function () { 6389 warn$2("Avoid mutating an injected value directly since the changes will be " + "overwritten whenever the provided component re-renders. " + "injection being mutated: \"".concat(key, "\""), vm); 6390 }); 6391 } else {} 6392 }); 6393 toggleObserving(true); 6394 } 6395} 6396function resolveInject(inject, vm) { 6397 if (inject) { 6398 // inject is :any because flow is not smart enough to figure out cached 6399 var result = Object.create(null); 6400 var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject); 6401 for (var i = 0; i < keys.length; i++) { 6402 var key = keys[i]; 6403 // #6574 in case the inject object is observed... 6404 if (key === '__ob__') continue; 6405 var provideKey = inject[key].from; 6406 if (provideKey in vm._provided) { 6407 result[key] = vm._provided[provideKey]; 6408 } else if ('default' in inject[key]) { 6409 var provideDefault = inject[key].default; 6410 result[key] = isFunction(provideDefault) ? provideDefault.call(vm) : provideDefault; 6411 } else if (true) { 6412 warn$2("Injection \"".concat(key, "\" not found"), vm); 6413 } 6414 } 6415 return result; 6416 } 6417} 6418var uid = 0; 6419function initMixin$1(Vue) { 6420 Vue.prototype._init = function (options) { 6421 var vm = this; 6422 // a uid 6423 vm._uid = uid++; 6424 var startTag, endTag; 6425 /* istanbul ignore if */ 6426 if ( true && config.performance && mark) { 6427 startTag = "vue-perf-start:".concat(vm._uid); 6428 endTag = "vue-perf-end:".concat(vm._uid); 6429 mark(startTag); 6430 } 6431 // a flag to mark this as a Vue instance without having to do instanceof 6432 // check 6433 vm._isVue = true; 6434 // avoid instances from being observed 6435 vm.__v_skip = true; 6436 // effect scope 6437 vm._scope = new EffectScope(true /* detached */); 6438 vm._scope._vm = true; 6439 // merge options 6440 if (options && options._isComponent) { 6441 // optimize internal component instantiation 6442 // since dynamic options merging is pretty slow, and none of the 6443 // internal component options needs special treatment. 6444 initInternalComponent(vm, options); 6445 } else { 6446 vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm); 6447 } 6448 /* istanbul ignore else */ 6449 if (true) { 6450 initProxy(vm); 6451 } else {} 6452 // expose real self 6453 vm._self = vm; 6454 initLifecycle(vm); 6455 initEvents(vm); 6456 initRender(vm); 6457 callHook$1(vm, 'beforeCreate', undefined, false /* setContext */); 6458 initInjections(vm); // resolve injections before data/props 6459 initState(vm); 6460 initProvide(vm); // resolve provide after data/props 6461 callHook$1(vm, 'created'); 6462 /* istanbul ignore if */ 6463 if ( true && config.performance && mark) { 6464 vm._name = formatComponentName(vm, false); 6465 mark(endTag); 6466 measure("vue ".concat(vm._name, " init"), startTag, endTag); 6467 } 6468 if (vm.$options.el) { 6469 vm.$mount(vm.$options.el); 6470 } 6471 }; 6472} 6473function initInternalComponent(vm, options) { 6474 var opts = vm.$options = Object.create(vm.constructor.options); 6475 // doing this because it's faster than dynamic enumeration. 6476 var parentVnode = options._parentVnode; 6477 opts.parent = options.parent; 6478 opts._parentVnode = parentVnode; 6479 var vnodeComponentOptions = parentVnode.componentOptions; 6480 opts.propsData = vnodeComponentOptions.propsData; 6481 opts._parentListeners = vnodeComponentOptions.listeners; 6482 opts._renderChildren = vnodeComponentOptions.children; 6483 opts._componentTag = vnodeComponentOptions.tag; 6484 if (options.render) { 6485 opts.render = options.render; 6486 opts.staticRenderFns = options.staticRenderFns; 6487 } 6488} 6489function resolveConstructorOptions(Ctor) { 6490 var options = Ctor.options; 6491 if (Ctor.super) { 6492 var superOptions = resolveConstructorOptions(Ctor.super); 6493 var cachedSuperOptions = Ctor.superOptions; 6494 if (superOptions !== cachedSuperOptions) { 6495 // super option changed, 6496 // need to resolve new options. 6497 Ctor.superOptions = superOptions; 6498 // check if there are any late-modified/attached options (#4976) 6499 var modifiedOptions = resolveModifiedOptions(Ctor); 6500 // update base extend options 6501 if (modifiedOptions) { 6502 extend(Ctor.extendOptions, modifiedOptions); 6503 } 6504 options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions); 6505 if (options.name) { 6506 options.components[options.name] = Ctor; 6507 } 6508 } 6509 } 6510 return options; 6511} 6512function resolveModifiedOptions(Ctor) { 6513 var modified; 6514 var latest = Ctor.options; 6515 var sealed = Ctor.sealedOptions; 6516 for (var key in latest) { 6517 if (latest[key] !== sealed[key]) { 6518 if (!modified) modified = {}; 6519 modified[key] = latest[key]; 6520 } 6521 } 6522 return modified; 6523} 6524function FunctionalRenderContext(data, props, children, parent, Ctor) { 6525 var _this = this; 6526 var options = Ctor.options; 6527 // ensure the createElement function in functional components 6528 // gets a unique context - this is necessary for correct named slot check 6529 var contextVm; 6530 if (hasOwn(parent, '_uid')) { 6531 contextVm = Object.create(parent); 6532 contextVm._original = parent; 6533 } else { 6534 // the context vm passed in is a functional context as well. 6535 // in this case we want to make sure we are able to get a hold to the 6536 // real context instance. 6537 contextVm = parent; 6538 // @ts-ignore 6539 parent = parent._original; 6540 } 6541 var isCompiled = isTrue(options._compiled); 6542 var needNormalization = !isCompiled; 6543 this.data = data; 6544 this.props = props; 6545 this.children = children; 6546 this.parent = parent; 6547 this.listeners = data.on || emptyObject; 6548 this.injections = resolveInject(options.inject, parent); 6549 this.slots = function () { 6550 if (!_this.$slots) { 6551 normalizeScopedSlots(parent, data.scopedSlots, _this.$slots = resolveSlots(children, parent)); 6552 } 6553 return _this.$slots; 6554 }; 6555 Object.defineProperty(this, 'scopedSlots', { 6556 enumerable: true, 6557 get: function () { 6558 return normalizeScopedSlots(parent, data.scopedSlots, this.slots()); 6559 } 6560 }); 6561 // support for compiled functional template 6562 if (isCompiled) { 6563 // exposing $options for renderStatic() 6564 this.$options = options; 6565 // pre-resolve slots for renderSlot() 6566 this.$slots = this.slots(); 6567 this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots); 6568 } 6569 if (options._scopeId) { 6570 this._c = function (a, b, c, d) { 6571 var vnode = createElement$1(contextVm, a, b, c, d, needNormalization); 6572 if (vnode && !isArray(vnode)) { 6573 vnode.fnScopeId = options._scopeId; 6574 vnode.fnContext = parent; 6575 } 6576 return vnode; 6577 }; 6578 } else { 6579 this._c = function (a, b, c, d) { 6580 return createElement$1(contextVm, a, b, c, d, needNormalization); 6581 }; 6582 } 6583} 6584installRenderHelpers(FunctionalRenderContext.prototype); 6585function createFunctionalComponent(Ctor, propsData, data, contextVm, children) { 6586 var options = Ctor.options; 6587 var props = {}; 6588 var propOptions = options.props; 6589 if (isDef(propOptions)) { 6590 for (var key in propOptions) { 6591 props[key] = validateProp(key, propOptions, propsData || emptyObject); 6592 } 6593 } else { 6594 if (isDef(data.attrs)) mergeProps(props, data.attrs); 6595 if (isDef(data.props)) mergeProps(props, data.props); 6596 } 6597 var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor); 6598 var vnode = options.render.call(null, renderContext._c, renderContext); 6599 if (vnode instanceof VNode) { 6600 return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext); 6601 } else if (isArray(vnode)) { 6602 var vnodes = normalizeChildren(vnode) || []; 6603 var res = new Array(vnodes.length); 6604 for (var i = 0; i < vnodes.length; i++) { 6605 res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext); 6606 } 6607 return res; 6608 } 6609} 6610function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) { 6611 // #7817 clone node before setting fnContext, otherwise if the node is reused 6612 // (e.g. it was from a cached normal slot) the fnContext causes named slots 6613 // that should not be matched to match. 6614 var clone = cloneVNode(vnode); 6615 clone.fnContext = contextVm; 6616 clone.fnOptions = options; 6617 if (true) { 6618 (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext; 6619 } 6620 if (data.slot) { 6621 (clone.data || (clone.data = {})).slot = data.slot; 6622 } 6623 return clone; 6624} 6625function mergeProps(to, from) { 6626 for (var key in from) { 6627 to[camelize(key)] = from[key]; 6628 } 6629} 6630function getComponentName(options) { 6631 return options.name || options.__name || options._componentTag; 6632} 6633// inline hooks to be invoked on component VNodes during patch 6634var componentVNodeHooks = { 6635 init: function (vnode, hydrating) { 6636 if (vnode.componentInstance && !vnode.componentInstance._isDestroyed && vnode.data.keepAlive) { 6637 // kept-alive components, treat as a patch 6638 var mountedNode = vnode; // work around flow 6639 componentVNodeHooks.prepatch(mountedNode, mountedNode); 6640 } else { 6641 var child = vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance); 6642 child.$mount(hydrating ? vnode.elm : undefined, hydrating); 6643 } 6644 }, 6645 prepatch: function (oldVnode, vnode) { 6646 var options = vnode.componentOptions; 6647 var child = vnode.componentInstance = oldVnode.componentInstance; 6648 updateChildComponent(child, options.propsData, 6649 // updated props 6650 options.listeners, 6651 // updated listeners 6652 vnode, 6653 // new parent vnode 6654 options.children // new children 6655 ); 6656 }, 6657 insert: function (vnode) { 6658 var context = vnode.context, 6659 componentInstance = vnode.componentInstance; 6660 if (!componentInstance._isMounted) { 6661 componentInstance._isMounted = true; 6662 callHook$1(componentInstance, 'mounted'); 6663 } 6664 if (vnode.data.keepAlive) { 6665 if (context._isMounted) { 6666 // vue-router#1212 6667 // During updates, a kept-alive component's child components may 6668 // change, so directly walking the tree here may call activated hooks 6669 // on incorrect children. Instead we push them into a queue which will 6670 // be processed after the whole patch process ended. 6671 queueActivatedComponent(componentInstance); 6672 } else { 6673 activateChildComponent(componentInstance, true /* direct */); 6674 } 6675 } 6676 }, 6677 destroy: function (vnode) { 6678 var componentInstance = vnode.componentInstance; 6679 if (!componentInstance._isDestroyed) { 6680 if (!vnode.data.keepAlive) { 6681 componentInstance.$destroy(); 6682 } else { 6683 deactivateChildComponent(componentInstance, true /* direct */); 6684 } 6685 } 6686 } 6687}; 6688var hooksToMerge = Object.keys(componentVNodeHooks); 6689function createComponent(Ctor, data, context, children, tag) { 6690 if (isUndef(Ctor)) { 6691 return; 6692 } 6693 var baseCtor = context.$options._base; 6694 // plain options object: turn it into a constructor 6695 if (isObject(Ctor)) { 6696 Ctor = baseCtor.extend(Ctor); 6697 } 6698 // if at this stage it's not a constructor or an async component factory, 6699 // reject. 6700 if (typeof Ctor !== 'function') { 6701 if (true) { 6702 warn$2("Invalid Component definition: ".concat(String(Ctor)), context); 6703 } 6704 return; 6705 } 6706 // async component 6707 var asyncFactory; 6708 // @ts-expect-error 6709 if (isUndef(Ctor.cid)) { 6710 asyncFactory = Ctor; 6711 Ctor = resolveAsyncComponent(asyncFactory, baseCtor); 6712 if (Ctor === undefined) { 6713 // return a placeholder node for async component, which is rendered 6714 // as a comment node but preserves all the raw information for the node. 6715 // the information will be used for async server-rendering and hydration. 6716 return createAsyncPlaceholder(asyncFactory, data, context, children, tag); 6717 } 6718 } 6719 data = data || {}; 6720 // resolve constructor options in case global mixins are applied after 6721 // component constructor creation 6722 resolveConstructorOptions(Ctor); 6723 // transform component v-model data into props & events 6724 if (isDef(data.model)) { 6725 // @ts-expect-error 6726 transformModel(Ctor.options, data); 6727 } 6728 // extract props 6729 // @ts-expect-error 6730 var propsData = extractPropsFromVNodeData(data, Ctor, tag); 6731 // functional component 6732 // @ts-expect-error 6733 if (isTrue(Ctor.options.functional)) { 6734 return createFunctionalComponent(Ctor, propsData, data, context, children); 6735 } 6736 // extract listeners, since these needs to be treated as 6737 // child component listeners instead of DOM listeners 6738 var listeners = data.on; 6739 // replace with listeners with .native modifier 6740 // so it gets processed during parent component patch. 6741 data.on = data.nativeOn; 6742 // @ts-expect-error 6743 if (isTrue(Ctor.options.abstract)) { 6744 // abstract components do not keep anything 6745 // other than props & listeners & slot 6746 // work around flow 6747 var slot = data.slot; 6748 data = {}; 6749 if (slot) { 6750 data.slot = slot; 6751 } 6752 } 6753 // install component management hooks onto the placeholder node 6754 installComponentHooks(data); 6755 // return a placeholder vnode 6756 // @ts-expect-error 6757 var name = getComponentName(Ctor.options) || tag; 6758 var vnode = new VNode( 6759 // @ts-expect-error 6760 "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 6761 // @ts-expect-error 6762 { 6763 Ctor: Ctor, 6764 propsData: propsData, 6765 listeners: listeners, 6766 tag: tag, 6767 children: children 6768 }, asyncFactory); 6769 return vnode; 6770} 6771function createComponentInstanceForVnode( 6772// we know it's MountedComponentVNode but flow doesn't 6773vnode, 6774// activeInstance in lifecycle state 6775parent) { 6776 var options = { 6777 _isComponent: true, 6778 _parentVnode: vnode, 6779 parent: parent 6780 }; 6781 // check inline-template render functions 6782 var inlineTemplate = vnode.data.inlineTemplate; 6783 if (isDef(inlineTemplate)) { 6784 options.render = inlineTemplate.render; 6785 options.staticRenderFns = inlineTemplate.staticRenderFns; 6786 } 6787 return new vnode.componentOptions.Ctor(options); 6788} 6789function installComponentHooks(data) { 6790 var hooks = data.hook || (data.hook = {}); 6791 for (var i = 0; i < hooksToMerge.length; i++) { 6792 var key = hooksToMerge[i]; 6793 var existing = hooks[key]; 6794 var toMerge = componentVNodeHooks[key]; 6795 // @ts-expect-error 6796 if (existing !== toMerge && !(existing && existing._merged)) { 6797 hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge; 6798 } 6799 } 6800} 6801function mergeHook(f1, f2) { 6802 var merged = function (a, b) { 6803 // flow complains about extra args which is why we use any 6804 f1(a, b); 6805 f2(a, b); 6806 }; 6807 merged._merged = true; 6808 return merged; 6809} 6810// transform component v-model info (value and callback) into 6811// prop and event handler respectively. 6812function transformModel(options, data) { 6813 var prop = options.model && options.model.prop || 'value'; 6814 var event = options.model && options.model.event || 'input'; 6815 (data.attrs || (data.attrs = {}))[prop] = data.model.value; 6816 var on = data.on || (data.on = {}); 6817 var existing = on[event]; 6818 var callback = data.model.callback; 6819 if (isDef(existing)) { 6820 if (isArray(existing) ? existing.indexOf(callback) === -1 : existing !== callback) { 6821 on[event] = [callback].concat(existing); 6822 } 6823 } else { 6824 on[event] = callback; 6825 } 6826} 6827var warn$2 = noop; 6828var tip = noop; 6829var generateComponentTrace; // work around flow check 6830var formatComponentName; 6831if (true) { 6832 var hasConsole_1 = typeof console !== 'undefined'; 6833 var classifyRE_1 = /(?:^|[-_])(\w)/g; 6834 var classify_1 = function (str) { 6835 return str.replace(classifyRE_1, function (c) { 6836 return c.toUpperCase(); 6837 }).replace(/[-_]/g, ''); 6838 }; 6839 warn$2 = function (msg, vm) { 6840 if (vm === void 0) { 6841 vm = currentInstance; 6842 } 6843 var trace = vm ? generateComponentTrace(vm) : ''; 6844 if (config.warnHandler) { 6845 config.warnHandler.call(null, msg, vm, trace); 6846 } else if (hasConsole_1 && !config.silent) { 6847 console.error("[Vue warn]: ".concat(msg).concat(trace)); 6848 } 6849 }; 6850 tip = function (msg, vm) { 6851 if (hasConsole_1 && !config.silent) { 6852 console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : '')); 6853 } 6854 }; 6855 formatComponentName = function (vm, includeFile) { 6856 if (vm.$root === vm) { 6857 return '<Root>'; 6858 } 6859 var options = isFunction(vm) && vm.cid != null ? vm.options : vm._isVue ? vm.$options || vm.constructor.options : vm; 6860 var name = getComponentName(options); 6861 var file = options.__file; 6862 if (!name && file) { 6863 var match = file.match(/([^/\\]+)\.vue$/); 6864 name = match && match[1]; 6865 } 6866 return (name ? "<".concat(classify_1(name), ">") : "<Anonymous>") + (file && includeFile !== false ? " at ".concat(file) : ''); 6867 }; 6868 var repeat_1 = function (str, n) { 6869 var res = ''; 6870 while (n) { 6871 if (n % 2 === 1) res += str; 6872 if (n > 1) str += str; 6873 n >>= 1; 6874 } 6875 return res; 6876 }; 6877 generateComponentTrace = function (vm) { 6878 if (vm._isVue && vm.$parent) { 6879 var tree = []; 6880 var currentRecursiveSequence = 0; 6881 while (vm) { 6882 if (tree.length > 0) { 6883 var last = tree[tree.length - 1]; 6884 if (last.constructor === vm.constructor) { 6885 currentRecursiveSequence++; 6886 vm = vm.$parent; 6887 continue; 6888 } else if (currentRecursiveSequence > 0) { 6889 tree[tree.length - 1] = [last, currentRecursiveSequence]; 6890 currentRecursiveSequence = 0; 6891 } 6892 } 6893 tree.push(vm); 6894 vm = vm.$parent; 6895 } 6896 return '\n\nfound in\n\n' + tree.map(function (vm, i) { 6897 return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm) ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)") : formatComponentName(vm)); 6898 }).join('\n'); 6899 } else { 6900 return "\n\n(found in ".concat(formatComponentName(vm), ")"); 6901 } 6902 }; 6903} 6904 6905/** 6906 * Option overwriting strategies are functions that handle 6907 * how to merge a parent option value and a child option 6908 * value into the final value. 6909 */ 6910var strats = config.optionMergeStrategies; 6911/** 6912 * Options with restrictions 6913 */ 6914if (true) { 6915 strats.el = strats.propsData = function (parent, child, vm, key) { 6916 if (!vm) { 6917 warn$2("option \"".concat(key, "\" can only be used during instance ") + 'creation with the `new` keyword.'); 6918 } 6919 return defaultStrat(parent, child); 6920 }; 6921} 6922/** 6923 * Helper that recursively merges two data objects together. 6924 */ 6925function mergeData(to, from, recursive) { 6926 if (recursive === void 0) { 6927 recursive = true; 6928 } 6929 if (!from) return to; 6930 var key, toVal, fromVal; 6931 var keys = hasSymbol ? Reflect.ownKeys(from) : Object.keys(from); 6932 for (var i = 0; i < keys.length; i++) { 6933 key = keys[i]; 6934 // in case the object is already observed... 6935 if (key === '__ob__') continue; 6936 toVal = to[key]; 6937 fromVal = from[key]; 6938 if (!recursive || !hasOwn(to, key)) { 6939 set(to, key, fromVal); 6940 } else if (toVal !== fromVal && isPlainObject(toVal) && isPlainObject(fromVal)) { 6941 mergeData(toVal, fromVal); 6942 } 6943 } 6944 return to; 6945} 6946/** 6947 * Data 6948 */ 6949function mergeDataOrFn(parentVal, childVal, vm) { 6950 if (!vm) { 6951 // in a Vue.extend merge, both should be functions 6952 if (!childVal) { 6953 return parentVal; 6954 } 6955 if (!parentVal) { 6956 return childVal; 6957 } 6958 // when parentVal & childVal are both present, 6959 // we need to return a function that returns the 6960 // merged result of both functions... no need to 6961 // check if parentVal is a function here because 6962 // it has to be a function to pass previous merges. 6963 return function mergedDataFn() { 6964 return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal); 6965 }; 6966 } else { 6967 return function mergedInstanceDataFn() { 6968 // instance merge 6969 var instanceData = isFunction(childVal) ? childVal.call(vm, vm) : childVal; 6970 var defaultData = isFunction(parentVal) ? parentVal.call(vm, vm) : parentVal; 6971 if (instanceData) { 6972 return mergeData(instanceData, defaultData); 6973 } else { 6974 return defaultData; 6975 } 6976 }; 6977 } 6978} 6979strats.data = function (parentVal, childVal, vm) { 6980 if (!vm) { 6981 if (childVal && typeof childVal !== 'function') { 6982 true && warn$2('The "data" option should be a function ' + 'that returns a per-instance value in component ' + 'definitions.', vm); 6983 return parentVal; 6984 } 6985 return mergeDataOrFn(parentVal, childVal); 6986 } 6987 return mergeDataOrFn(parentVal, childVal, vm); 6988}; 6989/** 6990 * Hooks and props are merged as arrays. 6991 */ 6992function mergeLifecycleHook(parentVal, childVal) { 6993 var res = childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal; 6994 return res ? dedupeHooks(res) : res; 6995} 6996function dedupeHooks(hooks) { 6997 var res = []; 6998 for (var i = 0; i < hooks.length; i++) { 6999 if (res.indexOf(hooks[i]) === -1) { 7000 res.push(hooks[i]); 7001 } 7002 } 7003 return res; 7004} 7005LIFECYCLE_HOOKS.forEach(function (hook) { 7006 strats[hook] = mergeLifecycleHook; 7007}); 7008/** 7009 * Assets 7010 * 7011 * When a vm is present (instance creation), we need to do 7012 * a three-way merge between constructor options, instance 7013 * options and parent options. 7014 */ 7015function mergeAssets(parentVal, childVal, vm, key) { 7016 var res = Object.create(parentVal || null); 7017 if (childVal) { 7018 true && assertObjectType(key, childVal, vm); 7019 return extend(res, childVal); 7020 } else { 7021 return res; 7022 } 7023} 7024ASSET_TYPES.forEach(function (type) { 7025 strats[type + 's'] = mergeAssets; 7026}); 7027/** 7028 * Watchers. 7029 * 7030 * Watchers hashes should not overwrite one 7031 * another, so we merge them as arrays. 7032 */ 7033strats.watch = function (parentVal, childVal, vm, key) { 7034 // work around Firefox's Object.prototype.watch... 7035 //@ts-expect-error work around 7036 if (parentVal === nativeWatch) parentVal = undefined; 7037 //@ts-expect-error work around 7038 if (childVal === nativeWatch) childVal = undefined; 7039 /* istanbul ignore if */ 7040 if (!childVal) return Object.create(parentVal || null); 7041 if (true) { 7042 assertObjectType(key, childVal, vm); 7043 } 7044 if (!parentVal) return childVal; 7045 var ret = {}; 7046 extend(ret, parentVal); 7047 for (var key_1 in childVal) { 7048 var parent_1 = ret[key_1]; 7049 var child = childVal[key_1]; 7050 if (parent_1 && !isArray(parent_1)) { 7051 parent_1 = [parent_1]; 7052 } 7053 ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child]; 7054 } 7055 return ret; 7056}; 7057/** 7058 * Other object hashes. 7059 */ 7060strats.props = strats.methods = strats.inject = strats.computed = function (parentVal, childVal, vm, key) { 7061 if (childVal && "development" !== 'production') { 7062 assertObjectType(key, childVal, vm); 7063 } 7064 if (!parentVal) return childVal; 7065 var ret = Object.create(null); 7066 extend(ret, parentVal); 7067 if (childVal) extend(ret, childVal); 7068 return ret; 7069}; 7070strats.provide = function (parentVal, childVal) { 7071 if (!parentVal) return childVal; 7072 return function () { 7073 var ret = Object.create(null); 7074 mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal); 7075 if (childVal) { 7076 mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive 7077 ); 7078 } 7079 return ret; 7080 }; 7081}; 7082/** 7083 * Default strategy. 7084 */ 7085var defaultStrat = function (parentVal, childVal) { 7086 return childVal === undefined ? parentVal : childVal; 7087}; 7088/** 7089 * Validate component names 7090 */ 7091function checkComponents(options) { 7092 for (var key in options.components) { 7093 validateComponentName(key); 7094 } 7095} 7096function validateComponentName(name) { 7097 if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) { 7098 warn$2('Invalid component name: "' + name + '". Component names ' + 'should conform to valid custom element name in html5 specification.'); 7099 } 7100 if (isBuiltInTag(name) || config.isReservedTag(name)) { 7101 warn$2('Do not use built-in or reserved HTML elements as component ' + 'id: ' + name); 7102 } 7103} 7104/** 7105 * Ensure all props option syntax are normalized into the 7106 * Object-based format. 7107 */ 7108function normalizeProps(options, vm) { 7109 var props = options.props; 7110 if (!props) return; 7111 var res = {}; 7112 var i, val, name; 7113 if (isArray(props)) { 7114 i = props.length; 7115 while (i--) { 7116 val = props[i]; 7117 if (typeof val === 'string') { 7118 name = camelize(val); 7119 res[name] = { 7120 type: null 7121 }; 7122 } else if (true) { 7123 warn$2('props must be strings when using array syntax.'); 7124 } 7125 } 7126 } else if (isPlainObject(props)) { 7127 for (var key in props) { 7128 val = props[key]; 7129 name = camelize(key); 7130 res[name] = isPlainObject(val) ? val : { 7131 type: val 7132 }; 7133 } 7134 } else if (true) { 7135 warn$2("Invalid value for option \"props\": expected an Array or an Object, " + "but got ".concat(toRawType(props), "."), vm); 7136 } 7137 options.props = res; 7138} 7139/** 7140 * Normalize all injections into Object-based format 7141 */ 7142function normalizeInject(options, vm) { 7143 var inject = options.inject; 7144 if (!inject) return; 7145 var normalized = options.inject = {}; 7146 if (isArray(inject)) { 7147 for (var i = 0; i < inject.length; i++) { 7148 normalized[inject[i]] = { 7149 from: inject[i] 7150 }; 7151 } 7152 } else if (isPlainObject(inject)) { 7153 for (var key in inject) { 7154 var val = inject[key]; 7155 normalized[key] = isPlainObject(val) ? extend({ 7156 from: key 7157 }, val) : { 7158 from: val 7159 }; 7160 } 7161 } else if (true) { 7162 warn$2("Invalid value for option \"inject\": expected an Array or an Object, " + "but got ".concat(toRawType(inject), "."), vm); 7163 } 7164} 7165/** 7166 * Normalize raw function directives into object format. 7167 */ 7168function normalizeDirectives$1(options) { 7169 var dirs = options.directives; 7170 if (dirs) { 7171 for (var key in dirs) { 7172 var def = dirs[key]; 7173 if (isFunction(def)) { 7174 dirs[key] = { 7175 bind: def, 7176 update: def 7177 }; 7178 } 7179 } 7180 } 7181} 7182function assertObjectType(name, value, vm) { 7183 if (!isPlainObject(value)) { 7184 warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") + "but got ".concat(toRawType(value), "."), vm); 7185 } 7186} 7187/** 7188 * Merge two option objects into a new one. 7189 * Core utility used in both instantiation and inheritance. 7190 */ 7191function mergeOptions(parent, child, vm) { 7192 if (true) { 7193 checkComponents(child); 7194 } 7195 if (isFunction(child)) { 7196 // @ts-expect-error 7197 child = child.options; 7198 } 7199 normalizeProps(child, vm); 7200 normalizeInject(child, vm); 7201 normalizeDirectives$1(child); 7202 // Apply extends and mixins on the child options, 7203 // but only if it is a raw options object that isn't 7204 // the result of another mergeOptions call. 7205 // Only merged options has the _base property. 7206 if (!child._base) { 7207 if (child.extends) { 7208 parent = mergeOptions(parent, child.extends, vm); 7209 } 7210 if (child.mixins) { 7211 for (var i = 0, l = child.mixins.length; i < l; i++) { 7212 parent = mergeOptions(parent, child.mixins[i], vm); 7213 } 7214 } 7215 } 7216 var options = {}; 7217 var key; 7218 for (key in parent) { 7219 mergeField(key); 7220 } 7221 for (key in child) { 7222 if (!hasOwn(parent, key)) { 7223 mergeField(key); 7224 } 7225 } 7226 function mergeField(key) { 7227 var strat = strats[key] || defaultStrat; 7228 options[key] = strat(parent[key], child[key], vm, key); 7229 } 7230 return options; 7231} 7232/** 7233 * Resolve an asset. 7234 * This function is used because child instances need access 7235 * to assets defined in its ancestor chain. 7236 */ 7237function resolveAsset(options, type, id, warnMissing) { 7238 /* istanbul ignore if */ 7239 if (typeof id !== 'string') { 7240 return; 7241 } 7242 var assets = options[type]; 7243 // check local registration variations first 7244 if (hasOwn(assets, id)) return assets[id]; 7245 var camelizedId = camelize(id); 7246 if (hasOwn(assets, camelizedId)) return assets[camelizedId]; 7247 var PascalCaseId = capitalize(camelizedId); 7248 if (hasOwn(assets, PascalCaseId)) return assets[PascalCaseId]; 7249 // fallback to prototype chain 7250 var res = assets[id] || assets[camelizedId] || assets[PascalCaseId]; 7251 if ( true && warnMissing && !res) { 7252 warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id); 7253 } 7254 return res; 7255} 7256function validateProp(key, propOptions, propsData, vm) { 7257 var prop = propOptions[key]; 7258 var absent = !hasOwn(propsData, key); 7259 var value = propsData[key]; 7260 // boolean casting 7261 var booleanIndex = getTypeIndex(Boolean, prop.type); 7262 if (booleanIndex > -1) { 7263 if (absent && !hasOwn(prop, 'default')) { 7264 value = false; 7265 } else if (value === '' || value === hyphenate(key)) { 7266 // only cast empty string / same name to boolean if 7267 // boolean has higher priority 7268 var stringIndex = getTypeIndex(String, prop.type); 7269 if (stringIndex < 0 || booleanIndex < stringIndex) { 7270 value = true; 7271 } 7272 } 7273 } 7274 // check default value 7275 if (value === undefined) { 7276 value = getPropDefaultValue(vm, prop, key); 7277 // since the default value is a fresh copy, 7278 // make sure to observe it. 7279 var prevShouldObserve = shouldObserve; 7280 toggleObserving(true); 7281 observe(value); 7282 toggleObserving(prevShouldObserve); 7283 } 7284 if (true) { 7285 assertProp(prop, key, value, vm, absent); 7286 } 7287 return value; 7288} 7289/** 7290 * Get the default value of a prop. 7291 */ 7292function getPropDefaultValue(vm, prop, key) { 7293 // no default, return undefined 7294 if (!hasOwn(prop, 'default')) { 7295 return undefined; 7296 } 7297 var def = prop.default; 7298 // warn against non-factory defaults for Object & Array 7299 if ( true && isObject(def)) { 7300 warn$2('Invalid default value for prop "' + key + '": ' + 'Props with type Object/Array must use a factory function ' + 'to return the default value.', vm); 7301 } 7302 // the raw prop value was also undefined from previous render, 7303 // return previous default value to avoid unnecessary watcher trigger 7304 if (vm && vm.$options.propsData && vm.$options.propsData[key] === undefined && vm._props[key] !== undefined) { 7305 return vm._props[key]; 7306 } 7307 // call factory function for non-Function types 7308 // a value is Function if its prototype is function even across different execution context 7309 return isFunction(def) && getType(prop.type) !== 'Function' ? def.call(vm) : def; 7310} 7311/** 7312 * Assert whether a prop is valid. 7313 */ 7314function assertProp(prop, name, value, vm, absent) { 7315 if (prop.required && absent) { 7316 warn$2('Missing required prop: "' + name + '"', vm); 7317 return; 7318 } 7319 if (value == null && !prop.required) { 7320 return; 7321 } 7322 var type = prop.type; 7323 var valid = !type || type === true; 7324 var expectedTypes = []; 7325 if (type) { 7326 if (!isArray(type)) { 7327 type = [type]; 7328 } 7329 for (var i = 0; i < type.length && !valid; i++) { 7330 var assertedType = assertType(value, type[i], vm); 7331 expectedTypes.push(assertedType.expectedType || ''); 7332 valid = assertedType.valid; 7333 } 7334 } 7335 var haveExpectedTypes = expectedTypes.some(function (t) { 7336 return t; 7337 }); 7338 if (!valid && haveExpectedTypes) { 7339 warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm); 7340 return; 7341 } 7342 var validator = prop.validator; 7343 if (validator) { 7344 if (!validator(value)) { 7345 warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm); 7346 } 7347 } 7348} 7349var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/; 7350function assertType(value, type, vm) { 7351 var valid; 7352 var expectedType = getType(type); 7353 if (simpleCheckRE.test(expectedType)) { 7354 var t = typeof value; 7355 valid = t === expectedType.toLowerCase(); 7356 // for primitive wrapper objects 7357 if (!valid && t === 'object') { 7358 valid = value instanceof type; 7359 } 7360 } else if (expectedType === 'Object') { 7361 valid = isPlainObject(value); 7362 } else if (expectedType === 'Array') { 7363 valid = isArray(value); 7364 } else { 7365 try { 7366 valid = value instanceof type; 7367 } catch (e) { 7368 warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm); 7369 valid = false; 7370 } 7371 } 7372 return { 7373 valid: valid, 7374 expectedType: expectedType 7375 }; 7376} 7377var functionTypeCheckRE = /^\s*function (\w+)/; 7378/** 7379 * Use function string name to check built-in types, 7380 * because a simple equality check will fail when running 7381 * across different vms / iframes. 7382 */ 7383function getType(fn) { 7384 var match = fn && fn.toString().match(functionTypeCheckRE); 7385 return match ? match[1] : ''; 7386} 7387function isSameType(a, b) { 7388 return getType(a) === getType(b); 7389} 7390function getTypeIndex(type, expectedTypes) { 7391 if (!isArray(expectedTypes)) { 7392 return isSameType(expectedTypes, type) ? 0 : -1; 7393 } 7394 for (var i = 0, len = expectedTypes.length; i < len; i++) { 7395 if (isSameType(expectedTypes[i], type)) { 7396 return i; 7397 } 7398 } 7399 return -1; 7400} 7401function getInvalidTypeMessage(name, value, expectedTypes) { 7402 var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") + " Expected ".concat(expectedTypes.map(capitalize).join(', ')); 7403 var expectedType = expectedTypes[0]; 7404 var receivedType = toRawType(value); 7405 // check if we need to specify expected value 7406 if (expectedTypes.length === 1 && isExplicable(expectedType) && isExplicable(typeof value) && !isBoolean(expectedType, receivedType)) { 7407 message += " with value ".concat(styleValue(value, expectedType)); 7408 } 7409 message += ", got ".concat(receivedType, " "); 7410 // check if we need to specify received value 7411 if (isExplicable(receivedType)) { 7412 message += "with value ".concat(styleValue(value, receivedType), "."); 7413 } 7414 return message; 7415} 7416function styleValue(value, type) { 7417 if (type === 'String') { 7418 return "\"".concat(value, "\""); 7419 } else if (type === 'Number') { 7420 return "".concat(Number(value)); 7421 } else { 7422 return "".concat(value); 7423 } 7424} 7425var EXPLICABLE_TYPES = ['string', 'number', 'boolean']; 7426function isExplicable(value) { 7427 return EXPLICABLE_TYPES.some(function (elem) { 7428 return value.toLowerCase() === elem; 7429 }); 7430} 7431function isBoolean() { 7432 var args = []; 7433 for (var _i = 0; _i < arguments.length; _i++) { 7434 args[_i] = arguments[_i]; 7435 } 7436 return args.some(function (elem) { 7437 return elem.toLowerCase() === 'boolean'; 7438 }); 7439} 7440function Vue(options) { 7441 if ( true && !(this instanceof Vue)) { 7442 warn$2('Vue is a constructor and should be called with the `new` keyword'); 7443 } 7444 this._init(options); 7445} 7446//@ts-expect-error Vue has function type 7447initMixin$1(Vue); 7448//@ts-expect-error Vue has function type 7449stateMixin(Vue); 7450//@ts-expect-error Vue has function type 7451eventsMixin(Vue); 7452//@ts-expect-error Vue has function type 7453lifecycleMixin(Vue); 7454//@ts-expect-error Vue has function type 7455renderMixin(Vue); 7456function initUse(Vue) { 7457 Vue.use = function (plugin) { 7458 var installedPlugins = this._installedPlugins || (this._installedPlugins = []); 7459 if (installedPlugins.indexOf(plugin) > -1) { 7460 return this; 7461 } 7462 // additional parameters 7463 var args = toArray(arguments, 1); 7464 args.unshift(this); 7465 if (isFunction(plugin.install)) { 7466 plugin.install.apply(plugin, args); 7467 } else if (isFunction(plugin)) { 7468 plugin.apply(null, args); 7469 } 7470 installedPlugins.push(plugin); 7471 return this; 7472 }; 7473} 7474function initMixin(Vue) { 7475 Vue.mixin = function (mixin) { 7476 this.options = mergeOptions(this.options, mixin); 7477 return this; 7478 }; 7479} 7480function initExtend(Vue) { 7481 /** 7482 * Each instance constructor, including Vue, has a unique 7483 * cid. This enables us to create wrapped "child 7484 * constructors" for prototypal inheritance and cache them. 7485 */ 7486 Vue.cid = 0; 7487 var cid = 1; 7488 /** 7489 * Class inheritance 7490 */ 7491 Vue.extend = function (extendOptions) { 7492 extendOptions = extendOptions || {}; 7493 var Super = this; 7494 var SuperId = Super.cid; 7495 var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {}); 7496 if (cachedCtors[SuperId]) { 7497 return cachedCtors[SuperId]; 7498 } 7499 var name = getComponentName(extendOptions) || getComponentName(Super.options); 7500 if ( true && name) { 7501 validateComponentName(name); 7502 } 7503 var Sub = function VueComponent(options) { 7504 this._init(options); 7505 }; 7506 Sub.prototype = Object.create(Super.prototype); 7507 Sub.prototype.constructor = Sub; 7508 Sub.cid = cid++; 7509 Sub.options = mergeOptions(Super.options, extendOptions); 7510 Sub['super'] = Super; 7511 // For props and computed properties, we define the proxy getters on 7512 // the Vue instances at extension time, on the extended prototype. This 7513 // avoids Object.defineProperty calls for each instance created. 7514 if (Sub.options.props) { 7515 initProps(Sub); 7516 } 7517 if (Sub.options.computed) { 7518 initComputed(Sub); 7519 } 7520 // allow further extension/mixin/plugin usage 7521 Sub.extend = Super.extend; 7522 Sub.mixin = Super.mixin; 7523 Sub.use = Super.use; 7524 // create asset registers, so extended classes 7525 // can have their private assets too. 7526 ASSET_TYPES.forEach(function (type) { 7527 Sub[type] = Super[type]; 7528 }); 7529 // enable recursive self-lookup 7530 if (name) { 7531 Sub.options.components[name] = Sub; 7532 } 7533 // keep a reference to the super options at extension time. 7534 // later at instantiation we can check if Super's options have 7535 // been updated. 7536 Sub.superOptions = Super.options; 7537 Sub.extendOptions = extendOptions; 7538 Sub.sealedOptions = extend({}, Sub.options); 7539 // cache constructor 7540 cachedCtors[SuperId] = Sub; 7541 return Sub; 7542 }; 7543} 7544function initProps(Comp) { 7545 var props = Comp.options.props; 7546 for (var key in props) { 7547 proxy(Comp.prototype, "_props", key); 7548 } 7549} 7550function initComputed(Comp) { 7551 var computed = Comp.options.computed; 7552 for (var key in computed) { 7553 defineComputed(Comp.prototype, key, computed[key]); 7554 } 7555} 7556function initAssetRegisters(Vue) { 7557 /** 7558 * Create asset registration methods. 7559 */ 7560 ASSET_TYPES.forEach(function (type) { 7561 // @ts-expect-error function is not exact same type 7562 Vue[type] = function (id, definition) { 7563 if (!definition) { 7564 return this.options[type + 's'][id]; 7565 } else { 7566 /* istanbul ignore if */ 7567 if ( true && type === 'component') { 7568 validateComponentName(id); 7569 } 7570 if (type === 'component' && isPlainObject(definition)) { 7571 // @ts-expect-error 7572 definition.name = definition.name || id; 7573 definition = this.options._base.extend(definition); 7574 } 7575 if (type === 'directive' && isFunction(definition)) { 7576 definition = { 7577 bind: definition, 7578 update: definition 7579 }; 7580 } 7581 this.options[type + 's'][id] = definition; 7582 return definition; 7583 } 7584 }; 7585 }); 7586} 7587function _getComponentName(opts) { 7588 return opts && (getComponentName(opts.Ctor.options) || opts.tag); 7589} 7590function matches(pattern, name) { 7591 if (isArray(pattern)) { 7592 return pattern.indexOf(name) > -1; 7593 } else if (typeof pattern === 'string') { 7594 return pattern.split(',').indexOf(name) > -1; 7595 } else if (isRegExp(pattern)) { 7596 return pattern.test(name); 7597 } 7598 /* istanbul ignore next */ 7599 return false; 7600} 7601function pruneCache(keepAliveInstance, filter) { 7602 var cache = keepAliveInstance.cache, 7603 keys = keepAliveInstance.keys, 7604 _vnode = keepAliveInstance._vnode; 7605 for (var key in cache) { 7606 var entry = cache[key]; 7607 if (entry) { 7608 var name_1 = entry.name; 7609 if (name_1 && !filter(name_1)) { 7610 pruneCacheEntry(cache, key, keys, _vnode); 7611 } 7612 } 7613 } 7614} 7615function pruneCacheEntry(cache, key, keys, current) { 7616 var entry = cache[key]; 7617 if (entry && (!current || entry.tag !== current.tag)) { 7618 // @ts-expect-error can be undefined 7619 entry.componentInstance.$destroy(); 7620 } 7621 cache[key] = null; 7622 remove$2(keys, key); 7623} 7624var patternTypes = [String, RegExp, Array]; 7625// TODO defineComponent 7626var KeepAlive = { 7627 name: 'keep-alive', 7628 abstract: true, 7629 props: { 7630 include: patternTypes, 7631 exclude: patternTypes, 7632 max: [String, Number] 7633 }, 7634 methods: { 7635 cacheVNode: function () { 7636 var _a = this, 7637 cache = _a.cache, 7638 keys = _a.keys, 7639 vnodeToCache = _a.vnodeToCache, 7640 keyToCache = _a.keyToCache; 7641 if (vnodeToCache) { 7642 var tag = vnodeToCache.tag, 7643 componentInstance = vnodeToCache.componentInstance, 7644 componentOptions = vnodeToCache.componentOptions; 7645 cache[keyToCache] = { 7646 name: _getComponentName(componentOptions), 7647 tag: tag, 7648 componentInstance: componentInstance 7649 }; 7650 keys.push(keyToCache); 7651 // prune oldest entry 7652 if (this.max && keys.length > parseInt(this.max)) { 7653 pruneCacheEntry(cache, keys[0], keys, this._vnode); 7654 } 7655 this.vnodeToCache = null; 7656 } 7657 } 7658 }, 7659 created: function () { 7660 this.cache = Object.create(null); 7661 this.keys = []; 7662 }, 7663 destroyed: function () { 7664 for (var key in this.cache) { 7665 pruneCacheEntry(this.cache, key, this.keys); 7666 } 7667 }, 7668 mounted: function () { 7669 var _this = this; 7670 this.cacheVNode(); 7671 this.$watch('include', function (val) { 7672 pruneCache(_this, function (name) { 7673 return matches(val, name); 7674 }); 7675 }); 7676 this.$watch('exclude', function (val) { 7677 pruneCache(_this, function (name) { 7678 return !matches(val, name); 7679 }); 7680 }); 7681 }, 7682 updated: function () { 7683 this.cacheVNode(); 7684 }, 7685 render: function () { 7686 var slot = this.$slots.default; 7687 var vnode = getFirstComponentChild(slot); 7688 var componentOptions = vnode && vnode.componentOptions; 7689 if (componentOptions) { 7690 // check pattern 7691 var name_2 = _getComponentName(componentOptions); 7692 var _a = this, 7693 include = _a.include, 7694 exclude = _a.exclude; 7695 if ( 7696 // not included 7697 include && (!name_2 || !matches(include, name_2)) || 7698 // excluded 7699 exclude && name_2 && matches(exclude, name_2)) { 7700 return vnode; 7701 } 7702 var _b = this, 7703 cache = _b.cache, 7704 keys = _b.keys; 7705 var key = vnode.key == null ? 7706 // same constructor may get registered as different local components 7707 // so cid alone is not enough (#3269) 7708 componentOptions.Ctor.cid + (componentOptions.tag ? "::".concat(componentOptions.tag) : '') : vnode.key; 7709 if (cache[key]) { 7710 vnode.componentInstance = cache[key].componentInstance; 7711 // make current key freshest 7712 remove$2(keys, key); 7713 keys.push(key); 7714 } else { 7715 // delay setting the cache until update 7716 this.vnodeToCache = vnode; 7717 this.keyToCache = key; 7718 } 7719 // @ts-expect-error can vnode.data can be undefined 7720 vnode.data.keepAlive = true; 7721 } 7722 return vnode || slot && slot[0]; 7723 } 7724}; 7725var builtInComponents = { 7726 KeepAlive: KeepAlive 7727}; 7728function initGlobalAPI(Vue) { 7729 // config 7730 var configDef = {}; 7731 configDef.get = function () { 7732 return config; 7733 }; 7734 if (true) { 7735 configDef.set = function () { 7736 warn$2('Do not replace the Vue.config object, set individual fields instead.'); 7737 }; 7738 } 7739 Object.defineProperty(Vue, 'config', configDef); 7740 // exposed util methods. 7741 // NOTE: these are not considered part of the public API - avoid relying on 7742 // them unless you are aware of the risk. 7743 Vue.util = { 7744 warn: warn$2, 7745 extend: extend, 7746 mergeOptions: mergeOptions, 7747 defineReactive: defineReactive 7748 }; 7749 Vue.set = set; 7750 Vue.delete = del; 7751 Vue.nextTick = nextTick; 7752 // 2.6 explicit observable API 7753 Vue.observable = function (obj) { 7754 observe(obj); 7755 return obj; 7756 }; 7757 Vue.options = Object.create(null); 7758 ASSET_TYPES.forEach(function (type) { 7759 Vue.options[type + 's'] = Object.create(null); 7760 }); 7761 // this is used to identify the "base" constructor to extend all plain-object 7762 // components with in Weex's multi-instance scenarios. 7763 Vue.options._base = Vue; 7764 extend(Vue.options.components, builtInComponents); 7765 initUse(Vue); 7766 initMixin(Vue); 7767 initExtend(Vue); 7768 initAssetRegisters(Vue); 7769} 7770initGlobalAPI(Vue); 7771Object.defineProperty(Vue.prototype, '$isServer', { 7772 get: isServerRendering 7773}); 7774Object.defineProperty(Vue.prototype, '$ssrContext', { 7775 get: function () { 7776 /* istanbul ignore next */ 7777 return this.$vnode && this.$vnode.ssrContext; 7778 } 7779}); 7780// expose FunctionalRenderContext for ssr runtime helper installation 7781Object.defineProperty(Vue, 'FunctionalRenderContext', { 7782 value: FunctionalRenderContext 7783}); 7784Vue.version = version; 7785 7786// these are reserved for web because they are directly compiled away 7787// during template compilation 7788var isReservedAttr = makeMap('style,class'); 7789// attributes that should be using props for binding 7790var acceptValue = makeMap('input,textarea,option,select,progress'); 7791var mustUseProp = function (tag, type, attr) { 7792 return attr === 'value' && acceptValue(tag) && type !== 'button' || attr === 'selected' && tag === 'option' || attr === 'checked' && tag === 'input' || attr === 'muted' && tag === 'video'; 7793}; 7794var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck'); 7795var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only'); 7796var convertEnumeratedValue = function (key, value) { 7797 return isFalsyAttrValue(value) || value === 'false' ? 'false' : 7798 // allow arbitrary string value for contenteditable 7799 key === 'contenteditable' && isValidContentEditableValue(value) ? value : 'true'; 7800}; 7801var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' + 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' + 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' + 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' + 'required,reversed,scoped,seamless,selected,sortable,' + 'truespeed,typemustmatch,visible'); 7802var xlinkNS = 'http://www.w3.org/1999/xlink'; 7803var isXlink = function (name) { 7804 return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'; 7805}; 7806var getXlinkProp = function (name) { 7807 return isXlink(name) ? name.slice(6, name.length) : ''; 7808}; 7809var isFalsyAttrValue = function (val) { 7810 return val == null || val === false; 7811}; 7812function genClassForVnode(vnode) { 7813 var data = vnode.data; 7814 var parentNode = vnode; 7815 var childNode = vnode; 7816 while (isDef(childNode.componentInstance)) { 7817 childNode = childNode.componentInstance._vnode; 7818 if (childNode && childNode.data) { 7819 data = mergeClassData(childNode.data, data); 7820 } 7821 } 7822 // @ts-expect-error parentNode.parent not VNodeWithData 7823 while (isDef(parentNode = parentNode.parent)) { 7824 if (parentNode && parentNode.data) { 7825 data = mergeClassData(data, parentNode.data); 7826 } 7827 } 7828 return renderClass(data.staticClass, data.class); 7829} 7830function mergeClassData(child, parent) { 7831 return { 7832 staticClass: concat(child.staticClass, parent.staticClass), 7833 class: isDef(child.class) ? [child.class, parent.class] : parent.class 7834 }; 7835} 7836function renderClass(staticClass, dynamicClass) { 7837 if (isDef(staticClass) || isDef(dynamicClass)) { 7838 return concat(staticClass, stringifyClass(dynamicClass)); 7839 } 7840 /* istanbul ignore next */ 7841 return ''; 7842} 7843function concat(a, b) { 7844 return a ? b ? a + ' ' + b : a : b || ''; 7845} 7846function stringifyClass(value) { 7847 if (Array.isArray(value)) { 7848 return stringifyArray(value); 7849 } 7850 if (isObject(value)) { 7851 return stringifyObject(value); 7852 } 7853 if (typeof value === 'string') { 7854 return value; 7855 } 7856 /* istanbul ignore next */ 7857 return ''; 7858} 7859function stringifyArray(value) { 7860 var res = ''; 7861 var stringified; 7862 for (var i = 0, l = value.length; i < l; i++) { 7863 if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') { 7864 if (res) res += ' '; 7865 res += stringified; 7866 } 7867 } 7868 return res; 7869} 7870function stringifyObject(value) { 7871 var res = ''; 7872 for (var key in value) { 7873 if (value[key]) { 7874 if (res) res += ' '; 7875 res += key; 7876 } 7877 } 7878 return res; 7879} 7880var namespaceMap = { 7881 svg: 'http://www.w3.org/2000/svg', 7882 math: 'http://www.w3.org/1998/Math/MathML' 7883}; 7884var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' + 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' + 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' + 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' + 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' + 'embed,object,param,source,canvas,script,noscript,del,ins,' + 'caption,col,colgroup,table,thead,tbody,td,th,tr,' + 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' + 'output,progress,select,textarea,' + 'details,dialog,menu,menuitem,summary,' + 'content,element,shadow,template,blockquote,iframe,tfoot'); 7885// this map is intentionally selective, only covering SVG elements that may 7886// contain child elements. 7887var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' + 'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' + 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true); 7888var isPreTag = function (tag) { 7889 return tag === 'pre'; 7890}; 7891var isReservedTag = function (tag) { 7892 return isHTMLTag(tag) || isSVG(tag); 7893}; 7894function getTagNamespace(tag) { 7895 if (isSVG(tag)) { 7896 return 'svg'; 7897 } 7898 // basic support for MathML 7899 // note it doesn't support other MathML elements being component roots 7900 if (tag === 'math') { 7901 return 'math'; 7902 } 7903} 7904var unknownElementCache = Object.create(null); 7905function isUnknownElement(tag) { 7906 /* istanbul ignore if */ 7907 if (!inBrowser) { 7908 return true; 7909 } 7910 if (isReservedTag(tag)) { 7911 return false; 7912 } 7913 tag = tag.toLowerCase(); 7914 /* istanbul ignore if */ 7915 if (unknownElementCache[tag] != null) { 7916 return unknownElementCache[tag]; 7917 } 7918 var el = document.createElement(tag); 7919 if (tag.indexOf('-') > -1) { 7920 // http://stackoverflow.com/a/28210364/1070244 7921 return unknownElementCache[tag] = el.constructor === window.HTMLUnknownElement || el.constructor === window.HTMLElement; 7922 } else { 7923 return unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()); 7924 } 7925} 7926var isTextInputType = makeMap('text,number,password,search,email,tel,url'); 7927 7928/** 7929 * Query an element selector if it's not an element already. 7930 */ 7931function query(el) { 7932 if (typeof el === 'string') { 7933 var selected = document.querySelector(el); 7934 if (!selected) { 7935 true && warn$2('Cannot find element: ' + el); 7936 return document.createElement('div'); 7937 } 7938 return selected; 7939 } else { 7940 return el; 7941 } 7942} 7943function createElement(tagName, vnode) { 7944 var elm = document.createElement(tagName); 7945 if (tagName !== 'select') { 7946 return elm; 7947 } 7948 // false or null will remove the attribute but undefined will not 7949 if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) { 7950 elm.setAttribute('multiple', 'multiple'); 7951 } 7952 return elm; 7953} 7954function createElementNS(namespace, tagName) { 7955 return document.createElementNS(namespaceMap[namespace], tagName); 7956} 7957function createTextNode(text) { 7958 return document.createTextNode(text); 7959} 7960function createComment(text) { 7961 return document.createComment(text); 7962} 7963function insertBefore(parentNode, newNode, referenceNode) { 7964 parentNode.insertBefore(newNode, referenceNode); 7965} 7966function removeChild(node, child) { 7967 node.removeChild(child); 7968} 7969function appendChild(node, child) { 7970 node.appendChild(child); 7971} 7972function parentNode(node) { 7973 return node.parentNode; 7974} 7975function nextSibling(node) { 7976 return node.nextSibling; 7977} 7978function tagName(node) { 7979 return node.tagName; 7980} 7981function setTextContent(node, text) { 7982 node.textContent = text; 7983} 7984function setStyleScope(node, scopeId) { 7985 node.setAttribute(scopeId, ''); 7986} 7987var nodeOps = /*#__PURE__*/Object.freeze({ 7988 __proto__: null, 7989 createElement: createElement, 7990 createElementNS: createElementNS, 7991 createTextNode: createTextNode, 7992 createComment: createComment, 7993 insertBefore: insertBefore, 7994 removeChild: removeChild, 7995 appendChild: appendChild, 7996 parentNode: parentNode, 7997 nextSibling: nextSibling, 7998 tagName: tagName, 7999 setTextContent: setTextContent, 8000 setStyleScope: setStyleScope 8001}); 8002var ref = { 8003 create: function (_, vnode) { 8004 registerRef(vnode); 8005 }, 8006 update: function (oldVnode, vnode) { 8007 if (oldVnode.data.ref !== vnode.data.ref) { 8008 registerRef(oldVnode, true); 8009 registerRef(vnode); 8010 } 8011 }, 8012 destroy: function (vnode) { 8013 registerRef(vnode, true); 8014 } 8015}; 8016function registerRef(vnode, isRemoval) { 8017 var ref = vnode.data.ref; 8018 if (!isDef(ref)) return; 8019 var vm = vnode.context; 8020 var refValue = vnode.componentInstance || vnode.elm; 8021 var value = isRemoval ? null : refValue; 8022 var $refsValue = isRemoval ? undefined : refValue; 8023 if (isFunction(ref)) { 8024 invokeWithErrorHandling(ref, vm, [value], vm, "template ref function"); 8025 return; 8026 } 8027 var isFor = vnode.data.refInFor; 8028 var _isString = typeof ref === 'string' || typeof ref === 'number'; 8029 var _isRef = isRef(ref); 8030 var refs = vm.$refs; 8031 if (_isString || _isRef) { 8032 if (isFor) { 8033 var existing = _isString ? refs[ref] : ref.value; 8034 if (isRemoval) { 8035 isArray(existing) && remove$2(existing, refValue); 8036 } else { 8037 if (!isArray(existing)) { 8038 if (_isString) { 8039 refs[ref] = [refValue]; 8040 setSetupRef(vm, ref, refs[ref]); 8041 } else { 8042 ref.value = [refValue]; 8043 } 8044 } else if (!existing.includes(refValue)) { 8045 existing.push(refValue); 8046 } 8047 } 8048 } else if (_isString) { 8049 if (isRemoval && refs[ref] !== refValue) { 8050 return; 8051 } 8052 refs[ref] = $refsValue; 8053 setSetupRef(vm, ref, value); 8054 } else if (_isRef) { 8055 if (isRemoval && ref.value !== refValue) { 8056 return; 8057 } 8058 ref.value = value; 8059 } else if (true) { 8060 warn$2("Invalid template ref type: ".concat(typeof ref)); 8061 } 8062 } 8063} 8064function setSetupRef(_a, key, val) { 8065 var _setupState = _a._setupState; 8066 if (_setupState && hasOwn(_setupState, key)) { 8067 if (isRef(_setupState[key])) { 8068 _setupState[key].value = val; 8069 } else { 8070 _setupState[key] = val; 8071 } 8072 } 8073} 8074 8075/** 8076 * Virtual DOM patching algorithm based on Snabbdom by 8077 * Simon Friis Vindum (@paldepind) 8078 * Licensed under the MIT License 8079 * https://github.com/paldepind/snabbdom/blob/master/LICENSE 8080 * 8081 * modified by Evan You (@yyx990803) 8082 * 8083 * Not type-checking this because this file is perf-critical and the cost 8084 * of making flow understand it is not worth it. 8085 */ 8086var emptyNode = new VNode('', {}, []); 8087var hooks = ['create', 'activate', 'update', 'remove', 'destroy']; 8088function sameVnode(a, b) { 8089 return a.key === b.key && a.asyncFactory === b.asyncFactory && (a.tag === b.tag && a.isComment === b.isComment && isDef(a.data) === isDef(b.data) && sameInputType(a, b) || isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error)); 8090} 8091function sameInputType(a, b) { 8092 if (a.tag !== 'input') return true; 8093 var i; 8094 var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type; 8095 var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type; 8096 return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB); 8097} 8098function createKeyToOldIdx(children, beginIdx, endIdx) { 8099 var i, key; 8100 var map = {}; 8101 for (i = beginIdx; i <= endIdx; ++i) { 8102 key = children[i].key; 8103 if (isDef(key)) map[key] = i; 8104 } 8105 return map; 8106} 8107function createPatchFunction(backend) { 8108 var i, j; 8109 var cbs = {}; 8110 var modules = backend.modules, 8111 nodeOps = backend.nodeOps; 8112 for (i = 0; i < hooks.length; ++i) { 8113 cbs[hooks[i]] = []; 8114 for (j = 0; j < modules.length; ++j) { 8115 if (isDef(modules[j][hooks[i]])) { 8116 cbs[hooks[i]].push(modules[j][hooks[i]]); 8117 } 8118 } 8119 } 8120 function emptyNodeAt(elm) { 8121 return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm); 8122 } 8123 function createRmCb(childElm, listeners) { 8124 function remove() { 8125 if (--remove.listeners === 0) { 8126 removeNode(childElm); 8127 } 8128 } 8129 remove.listeners = listeners; 8130 return remove; 8131 } 8132 function removeNode(el) { 8133 var parent = nodeOps.parentNode(el); 8134 // element may have already been removed due to v-html / v-text 8135 if (isDef(parent)) { 8136 nodeOps.removeChild(parent, el); 8137 } 8138 } 8139 function isUnknownElement(vnode, inVPre) { 8140 return !inVPre && !vnode.ns && !(config.ignoredElements.length && config.ignoredElements.some(function (ignore) { 8141 return isRegExp(ignore) ? ignore.test(vnode.tag) : ignore === vnode.tag; 8142 })) && config.isUnknownElement(vnode.tag); 8143 } 8144 var creatingElmInVPre = 0; 8145 function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) { 8146 if (isDef(vnode.elm) && isDef(ownerArray)) { 8147 // This vnode was used in a previous render! 8148 // now it's used as a new node, overwriting its elm would cause 8149 // potential patch errors down the road when it's used as an insertion 8150 // reference node. Instead, we clone the node on-demand before creating 8151 // associated DOM element for it. 8152 vnode = ownerArray[index] = cloneVNode(vnode); 8153 } 8154 vnode.isRootInsert = !nested; // for transition enter check 8155 if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) { 8156 return; 8157 } 8158 var data = vnode.data; 8159 var children = vnode.children; 8160 var tag = vnode.tag; 8161 if (isDef(tag)) { 8162 if (true) { 8163 if (data && data.pre) { 8164 creatingElmInVPre++; 8165 } 8166 if (isUnknownElement(vnode, creatingElmInVPre)) { 8167 warn$2('Unknown custom element: <' + tag + '> - did you ' + 'register the component correctly? For recursive components, ' + 'make sure to provide the "name" option.', vnode.context); 8168 } 8169 } 8170 vnode.elm = vnode.ns ? nodeOps.createElementNS(vnode.ns, tag) : nodeOps.createElement(tag, vnode); 8171 setScope(vnode); 8172 createChildren(vnode, children, insertedVnodeQueue); 8173 if (isDef(data)) { 8174 invokeCreateHooks(vnode, insertedVnodeQueue); 8175 } 8176 insert(parentElm, vnode.elm, refElm); 8177 if ( true && data && data.pre) { 8178 creatingElmInVPre--; 8179 } 8180 } else if (isTrue(vnode.isComment)) { 8181 vnode.elm = nodeOps.createComment(vnode.text); 8182 insert(parentElm, vnode.elm, refElm); 8183 } else { 8184 vnode.elm = nodeOps.createTextNode(vnode.text); 8185 insert(parentElm, vnode.elm, refElm); 8186 } 8187 } 8188 function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 8189 var i = vnode.data; 8190 if (isDef(i)) { 8191 var isReactivated = isDef(vnode.componentInstance) && i.keepAlive; 8192 if (isDef(i = i.hook) && isDef(i = i.init)) { 8193 i(vnode, false /* hydrating */); 8194 } 8195 // after calling the init hook, if the vnode is a child component 8196 // it should've created a child instance and mounted it. the child 8197 // component also has set the placeholder vnode's elm. 8198 // in that case we can just return the element and be done. 8199 if (isDef(vnode.componentInstance)) { 8200 initComponent(vnode, insertedVnodeQueue); 8201 insert(parentElm, vnode.elm, refElm); 8202 if (isTrue(isReactivated)) { 8203 reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm); 8204 } 8205 return true; 8206 } 8207 } 8208 } 8209 function initComponent(vnode, insertedVnodeQueue) { 8210 if (isDef(vnode.data.pendingInsert)) { 8211 insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert); 8212 vnode.data.pendingInsert = null; 8213 } 8214 vnode.elm = vnode.componentInstance.$el; 8215 if (isPatchable(vnode)) { 8216 invokeCreateHooks(vnode, insertedVnodeQueue); 8217 setScope(vnode); 8218 } else { 8219 // empty component root. 8220 // skip all element-related modules except for ref (#3455) 8221 registerRef(vnode); 8222 // make sure to invoke the insert hook 8223 insertedVnodeQueue.push(vnode); 8224 } 8225 } 8226 function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) { 8227 var i; 8228 // hack for #4339: a reactivated component with inner transition 8229 // does not trigger because the inner node's created hooks are not called 8230 // again. It's not ideal to involve module-specific logic in here but 8231 // there doesn't seem to be a better way to do it. 8232 var innerNode = vnode; 8233 while (innerNode.componentInstance) { 8234 innerNode = innerNode.componentInstance._vnode; 8235 if (isDef(i = innerNode.data) && isDef(i = i.transition)) { 8236 for (i = 0; i < cbs.activate.length; ++i) { 8237 cbs.activate[i](emptyNode, innerNode); 8238 } 8239 insertedVnodeQueue.push(innerNode); 8240 break; 8241 } 8242 } 8243 // unlike a newly created component, 8244 // a reactivated keep-alive component doesn't insert itself 8245 insert(parentElm, vnode.elm, refElm); 8246 } 8247 function insert(parent, elm, ref) { 8248 if (isDef(parent)) { 8249 if (isDef(ref)) { 8250 if (nodeOps.parentNode(ref) === parent) { 8251 nodeOps.insertBefore(parent, elm, ref); 8252 } 8253 } else { 8254 nodeOps.appendChild(parent, elm); 8255 } 8256 } 8257 } 8258 function createChildren(vnode, children, insertedVnodeQueue) { 8259 if (isArray(children)) { 8260 if (true) { 8261 checkDuplicateKeys(children); 8262 } 8263 for (var i_1 = 0; i_1 < children.length; ++i_1) { 8264 createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1); 8265 } 8266 } else if (isPrimitive(vnode.text)) { 8267 nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text))); 8268 } 8269 } 8270 function isPatchable(vnode) { 8271 while (vnode.componentInstance) { 8272 vnode = vnode.componentInstance._vnode; 8273 } 8274 return isDef(vnode.tag); 8275 } 8276 function invokeCreateHooks(vnode, insertedVnodeQueue) { 8277 for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) { 8278 cbs.create[i_2](emptyNode, vnode); 8279 } 8280 i = vnode.data.hook; // Reuse variable 8281 if (isDef(i)) { 8282 if (isDef(i.create)) i.create(emptyNode, vnode); 8283 if (isDef(i.insert)) insertedVnodeQueue.push(vnode); 8284 } 8285 } 8286 // set scope id attribute for scoped CSS. 8287 // this is implemented as a special case to avoid the overhead 8288 // of going through the normal attribute patching process. 8289 function setScope(vnode) { 8290 var i; 8291 if (isDef(i = vnode.fnScopeId)) { 8292 nodeOps.setStyleScope(vnode.elm, i); 8293 } else { 8294 var ancestor = vnode; 8295 while (ancestor) { 8296 if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) { 8297 nodeOps.setStyleScope(vnode.elm, i); 8298 } 8299 ancestor = ancestor.parent; 8300 } 8301 } 8302 // for slot content they should also get the scopeId from the host instance. 8303 if (isDef(i = activeInstance) && i !== vnode.context && i !== vnode.fnContext && isDef(i = i.$options._scopeId)) { 8304 nodeOps.setStyleScope(vnode.elm, i); 8305 } 8306 } 8307 function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) { 8308 for (; startIdx <= endIdx; ++startIdx) { 8309 createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx); 8310 } 8311 } 8312 function invokeDestroyHook(vnode) { 8313 var i, j; 8314 var data = vnode.data; 8315 if (isDef(data)) { 8316 if (isDef(i = data.hook) && isDef(i = i.destroy)) i(vnode); 8317 for (i = 0; i < cbs.destroy.length; ++i) cbs.destroy[i](vnode); 8318 } 8319 if (isDef(i = vnode.children)) { 8320 for (j = 0; j < vnode.children.length; ++j) { 8321 invokeDestroyHook(vnode.children[j]); 8322 } 8323 } 8324 } 8325 function removeVnodes(vnodes, startIdx, endIdx) { 8326 for (; startIdx <= endIdx; ++startIdx) { 8327 var ch = vnodes[startIdx]; 8328 if (isDef(ch)) { 8329 if (isDef(ch.tag)) { 8330 removeAndInvokeRemoveHook(ch); 8331 invokeDestroyHook(ch); 8332 } else { 8333 // Text node 8334 removeNode(ch.elm); 8335 } 8336 } 8337 } 8338 } 8339 function removeAndInvokeRemoveHook(vnode, rm) { 8340 if (isDef(rm) || isDef(vnode.data)) { 8341 var i_3; 8342 var listeners = cbs.remove.length + 1; 8343 if (isDef(rm)) { 8344 // we have a recursively passed down rm callback 8345 // increase the listeners count 8346 rm.listeners += listeners; 8347 } else { 8348 // directly removing 8349 rm = createRmCb(vnode.elm, listeners); 8350 } 8351 // recursively invoke hooks on child component root node 8352 if (isDef(i_3 = vnode.componentInstance) && isDef(i_3 = i_3._vnode) && isDef(i_3.data)) { 8353 removeAndInvokeRemoveHook(i_3, rm); 8354 } 8355 for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) { 8356 cbs.remove[i_3](vnode, rm); 8357 } 8358 if (isDef(i_3 = vnode.data.hook) && isDef(i_3 = i_3.remove)) { 8359 i_3(vnode, rm); 8360 } else { 8361 rm(); 8362 } 8363 } else { 8364 removeNode(vnode.elm); 8365 } 8366 } 8367 function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) { 8368 var oldStartIdx = 0; 8369 var newStartIdx = 0; 8370 var oldEndIdx = oldCh.length - 1; 8371 var oldStartVnode = oldCh[0]; 8372 var oldEndVnode = oldCh[oldEndIdx]; 8373 var newEndIdx = newCh.length - 1; 8374 var newStartVnode = newCh[0]; 8375 var newEndVnode = newCh[newEndIdx]; 8376 var oldKeyToIdx, idxInOld, vnodeToMove, refElm; 8377 // removeOnly is a special flag used only by <transition-group> 8378 // to ensure removed elements stay in correct relative positions 8379 // during leaving transitions 8380 var canMove = !removeOnly; 8381 if (true) { 8382 checkDuplicateKeys(newCh); 8383 } 8384 while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) { 8385 if (isUndef(oldStartVnode)) { 8386 oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left 8387 } else if (isUndef(oldEndVnode)) { 8388 oldEndVnode = oldCh[--oldEndIdx]; 8389 } else if (sameVnode(oldStartVnode, newStartVnode)) { 8390 patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 8391 oldStartVnode = oldCh[++oldStartIdx]; 8392 newStartVnode = newCh[++newStartIdx]; 8393 } else if (sameVnode(oldEndVnode, newEndVnode)) { 8394 patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 8395 oldEndVnode = oldCh[--oldEndIdx]; 8396 newEndVnode = newCh[--newEndIdx]; 8397 } else if (sameVnode(oldStartVnode, newEndVnode)) { 8398 // Vnode moved right 8399 patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx); 8400 canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm)); 8401 oldStartVnode = oldCh[++oldStartIdx]; 8402 newEndVnode = newCh[--newEndIdx]; 8403 } else if (sameVnode(oldEndVnode, newStartVnode)) { 8404 // Vnode moved left 8405 patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 8406 canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm); 8407 oldEndVnode = oldCh[--oldEndIdx]; 8408 newStartVnode = newCh[++newStartIdx]; 8409 } else { 8410 if (isUndef(oldKeyToIdx)) oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); 8411 idxInOld = isDef(newStartVnode.key) ? oldKeyToIdx[newStartVnode.key] : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx); 8412 if (isUndef(idxInOld)) { 8413 // New element 8414 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 8415 } else { 8416 vnodeToMove = oldCh[idxInOld]; 8417 if (sameVnode(vnodeToMove, newStartVnode)) { 8418 patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx); 8419 oldCh[idxInOld] = undefined; 8420 canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm); 8421 } else { 8422 // same key but different element. treat as new element 8423 createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx); 8424 } 8425 } 8426 newStartVnode = newCh[++newStartIdx]; 8427 } 8428 } 8429 if (oldStartIdx > oldEndIdx) { 8430 refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm; 8431 addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue); 8432 } else if (newStartIdx > newEndIdx) { 8433 removeVnodes(oldCh, oldStartIdx, oldEndIdx); 8434 } 8435 } 8436 function checkDuplicateKeys(children) { 8437 var seenKeys = {}; 8438 for (var i_4 = 0; i_4 < children.length; i_4++) { 8439 var vnode = children[i_4]; 8440 var key = vnode.key; 8441 if (isDef(key)) { 8442 if (seenKeys[key]) { 8443 warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context); 8444 } else { 8445 seenKeys[key] = true; 8446 } 8447 } 8448 } 8449 } 8450 function findIdxInOld(node, oldCh, start, end) { 8451 for (var i_5 = start; i_5 < end; i_5++) { 8452 var c = oldCh[i_5]; 8453 if (isDef(c) && sameVnode(node, c)) return i_5; 8454 } 8455 } 8456 function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) { 8457 if (oldVnode === vnode) { 8458 return; 8459 } 8460 if (isDef(vnode.elm) && isDef(ownerArray)) { 8461 // clone reused vnode 8462 vnode = ownerArray[index] = cloneVNode(vnode); 8463 } 8464 var elm = vnode.elm = oldVnode.elm; 8465 if (isTrue(oldVnode.isAsyncPlaceholder)) { 8466 if (isDef(vnode.asyncFactory.resolved)) { 8467 hydrate(oldVnode.elm, vnode, insertedVnodeQueue); 8468 } else { 8469 vnode.isAsyncPlaceholder = true; 8470 } 8471 return; 8472 } 8473 // reuse element for static trees. 8474 // note we only do this if the vnode is cloned - 8475 // if the new node is not cloned it means the render functions have been 8476 // reset by the hot-reload-api and we need to do a proper re-render. 8477 if (isTrue(vnode.isStatic) && isTrue(oldVnode.isStatic) && vnode.key === oldVnode.key && (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) { 8478 vnode.componentInstance = oldVnode.componentInstance; 8479 return; 8480 } 8481 var i; 8482 var data = vnode.data; 8483 if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) { 8484 i(oldVnode, vnode); 8485 } 8486 var oldCh = oldVnode.children; 8487 var ch = vnode.children; 8488 if (isDef(data) && isPatchable(vnode)) { 8489 for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode); 8490 if (isDef(i = data.hook) && isDef(i = i.update)) i(oldVnode, vnode); 8491 } 8492 if (isUndef(vnode.text)) { 8493 if (isDef(oldCh) && isDef(ch)) { 8494 if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); 8495 } else if (isDef(ch)) { 8496 if (true) { 8497 checkDuplicateKeys(ch); 8498 } 8499 if (isDef(oldVnode.text)) nodeOps.setTextContent(elm, ''); 8500 addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue); 8501 } else if (isDef(oldCh)) { 8502 removeVnodes(oldCh, 0, oldCh.length - 1); 8503 } else if (isDef(oldVnode.text)) { 8504 nodeOps.setTextContent(elm, ''); 8505 } 8506 } else if (oldVnode.text !== vnode.text) { 8507 nodeOps.setTextContent(elm, vnode.text); 8508 } 8509 if (isDef(data)) { 8510 if (isDef(i = data.hook) && isDef(i = i.postpatch)) i(oldVnode, vnode); 8511 } 8512 } 8513 function invokeInsertHook(vnode, queue, initial) { 8514 // delay insert hooks for component root nodes, invoke them after the 8515 // element is really inserted 8516 if (isTrue(initial) && isDef(vnode.parent)) { 8517 vnode.parent.data.pendingInsert = queue; 8518 } else { 8519 for (var i_6 = 0; i_6 < queue.length; ++i_6) { 8520 queue[i_6].data.hook.insert(queue[i_6]); 8521 } 8522 } 8523 } 8524 var hydrationBailed = false; 8525 // list of modules that can skip create hook during hydration because they 8526 // are already rendered on the client or has no need for initialization 8527 // Note: style is excluded because it relies on initial clone for future 8528 // deep updates (#7063). 8529 var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key'); 8530 // Note: this is a browser-only function so we can assume elms are DOM nodes. 8531 function hydrate(elm, vnode, insertedVnodeQueue, inVPre) { 8532 var i; 8533 var tag = vnode.tag, 8534 data = vnode.data, 8535 children = vnode.children; 8536 inVPre = inVPre || data && data.pre; 8537 vnode.elm = elm; 8538 if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) { 8539 vnode.isAsyncPlaceholder = true; 8540 return true; 8541 } 8542 // assert node match 8543 if (true) { 8544 if (!assertNodeMatch(elm, vnode, inVPre)) { 8545 return false; 8546 } 8547 } 8548 if (isDef(data)) { 8549 if (isDef(i = data.hook) && isDef(i = i.init)) i(vnode, true /* hydrating */); 8550 if (isDef(i = vnode.componentInstance)) { 8551 // child component. it should have hydrated its own tree. 8552 initComponent(vnode, insertedVnodeQueue); 8553 return true; 8554 } 8555 } 8556 if (isDef(tag)) { 8557 if (isDef(children)) { 8558 // empty element, allow client to pick up and populate children 8559 if (!elm.hasChildNodes()) { 8560 createChildren(vnode, children, insertedVnodeQueue); 8561 } else { 8562 // v-html and domProps: innerHTML 8563 if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) { 8564 if (i !== elm.innerHTML) { 8565 /* istanbul ignore if */ 8566 if ( true && typeof console !== 'undefined' && !hydrationBailed) { 8567 hydrationBailed = true; 8568 console.warn('Parent: ', elm); 8569 console.warn('server innerHTML: ', i); 8570 console.warn('client innerHTML: ', elm.innerHTML); 8571 } 8572 return false; 8573 } 8574 } else { 8575 // iterate and compare children lists 8576 var childrenMatch = true; 8577 var childNode = elm.firstChild; 8578 for (var i_7 = 0; i_7 < children.length; i_7++) { 8579 if (!childNode || !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) { 8580 childrenMatch = false; 8581 break; 8582 } 8583 childNode = childNode.nextSibling; 8584 } 8585 // if childNode is not null, it means the actual childNodes list is 8586 // longer than the virtual children list. 8587 if (!childrenMatch || childNode) { 8588 /* istanbul ignore if */ 8589 if ( true && typeof console !== 'undefined' && !hydrationBailed) { 8590 hydrationBailed = true; 8591 console.warn('Parent: ', elm); 8592 console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children); 8593 } 8594 return false; 8595 } 8596 } 8597 } 8598 } 8599 if (isDef(data)) { 8600 var fullInvoke = false; 8601 for (var key in data) { 8602 if (!isRenderedModule(key)) { 8603 fullInvoke = true; 8604 invokeCreateHooks(vnode, insertedVnodeQueue); 8605 break; 8606 } 8607 } 8608 if (!fullInvoke && data['class']) { 8609 // ensure collecting deps for deep class bindings for future updates 8610 traverse(data['class']); 8611 } 8612 } 8613 } else if (elm.data !== vnode.text) { 8614 elm.data = vnode.text; 8615 } 8616 return true; 8617 } 8618 function assertNodeMatch(node, vnode, inVPre) { 8619 if (isDef(vnode.tag)) { 8620 return vnode.tag.indexOf('vue-component') === 0 || !isUnknownElement(vnode, inVPre) && vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase()); 8621 } else { 8622 return node.nodeType === (vnode.isComment ? 8 : 3); 8623 } 8624 } 8625 return function patch(oldVnode, vnode, hydrating, removeOnly) { 8626 if (isUndef(vnode)) { 8627 if (isDef(oldVnode)) invokeDestroyHook(oldVnode); 8628 return; 8629 } 8630 var isInitialPatch = false; 8631 var insertedVnodeQueue = []; 8632 if (isUndef(oldVnode)) { 8633 // empty mount (likely as component), create new root element 8634 isInitialPatch = true; 8635 createElm(vnode, insertedVnodeQueue); 8636 } else { 8637 var isRealElement = isDef(oldVnode.nodeType); 8638 if (!isRealElement && sameVnode(oldVnode, vnode)) { 8639 // patch existing root node 8640 patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly); 8641 } else { 8642 if (isRealElement) { 8643 // mounting to a real element 8644 // check if this is server-rendered content and if we can perform 8645 // a successful hydration. 8646 if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) { 8647 oldVnode.removeAttribute(SSR_ATTR); 8648 hydrating = true; 8649 } 8650 if (isTrue(hydrating)) { 8651 if (hydrate(oldVnode, vnode, insertedVnodeQueue)) { 8652 invokeInsertHook(vnode, insertedVnodeQueue, true); 8653 return oldVnode; 8654 } else if (true) { 8655 warn$2('The client-side rendered virtual DOM tree is not matching ' + 'server-rendered content. This is likely caused by incorrect ' + 'HTML markup, for example nesting block-level elements inside ' + '<p>, or missing <tbody>. Bailing hydration and performing ' + 'full client-side render.'); 8656 } 8657 } 8658 // either not server-rendered, or hydration failed. 8659 // create an empty node and replace it 8660 oldVnode = emptyNodeAt(oldVnode); 8661 } 8662 // replacing existing element 8663 var oldElm = oldVnode.elm; 8664 var parentElm = nodeOps.parentNode(oldElm); 8665 // create new node 8666 createElm(vnode, insertedVnodeQueue, 8667 // extremely rare edge case: do not insert if old element is in a 8668 // leaving transition. Only happens when combining transition + 8669 // keep-alive + HOCs. (#4590) 8670 oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm)); 8671 // update parent placeholder node element, recursively 8672 if (isDef(vnode.parent)) { 8673 var ancestor = vnode.parent; 8674 var patchable = isPatchable(vnode); 8675 while (ancestor) { 8676 for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) { 8677 cbs.destroy[i_8](ancestor); 8678 } 8679 ancestor.elm = vnode.elm; 8680 if (patchable) { 8681 for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) { 8682 cbs.create[i_9](emptyNode, ancestor); 8683 } 8684 // #6513 8685 // invoke insert hooks that may have been merged by create hooks. 8686 // e.g. for directives that uses the "inserted" hook. 8687 var insert_1 = ancestor.data.hook.insert; 8688 if (insert_1.merged) { 8689 // start at index 1 to avoid re-invoking component mounted hook 8690 for (var i_10 = 1; i_10 < insert_1.fns.length; i_10++) { 8691 insert_1.fns[i_10](); 8692 } 8693 } 8694 } else { 8695 registerRef(ancestor); 8696 } 8697 ancestor = ancestor.parent; 8698 } 8699 } 8700 // destroy old node 8701 if (isDef(parentElm)) { 8702 removeVnodes([oldVnode], 0, 0); 8703 } else if (isDef(oldVnode.tag)) { 8704 invokeDestroyHook(oldVnode); 8705 } 8706 } 8707 } 8708 invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch); 8709 return vnode.elm; 8710 }; 8711} 8712var directives$1 = { 8713 create: updateDirectives, 8714 update: updateDirectives, 8715 destroy: function unbindDirectives(vnode) { 8716 // @ts-expect-error emptyNode is not VNodeWithData 8717 updateDirectives(vnode, emptyNode); 8718 } 8719}; 8720function updateDirectives(oldVnode, vnode) { 8721 if (oldVnode.data.directives || vnode.data.directives) { 8722 _update(oldVnode, vnode); 8723 } 8724} 8725function _update(oldVnode, vnode) { 8726 var isCreate = oldVnode === emptyNode; 8727 var isDestroy = vnode === emptyNode; 8728 var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context); 8729 var newDirs = normalizeDirectives(vnode.data.directives, vnode.context); 8730 var dirsWithInsert = []; 8731 var dirsWithPostpatch = []; 8732 var key, oldDir, dir; 8733 for (key in newDirs) { 8734 oldDir = oldDirs[key]; 8735 dir = newDirs[key]; 8736 if (!oldDir) { 8737 // new directive, bind 8738 callHook(dir, 'bind', vnode, oldVnode); 8739 if (dir.def && dir.def.inserted) { 8740 dirsWithInsert.push(dir); 8741 } 8742 } else { 8743 // existing directive, update 8744 dir.oldValue = oldDir.value; 8745 dir.oldArg = oldDir.arg; 8746 callHook(dir, 'update', vnode, oldVnode); 8747 if (dir.def && dir.def.componentUpdated) { 8748 dirsWithPostpatch.push(dir); 8749 } 8750 } 8751 } 8752 if (dirsWithInsert.length) { 8753 var callInsert = function () { 8754 for (var i = 0; i < dirsWithInsert.length; i++) { 8755 callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode); 8756 } 8757 }; 8758 if (isCreate) { 8759 mergeVNodeHook(vnode, 'insert', callInsert); 8760 } else { 8761 callInsert(); 8762 } 8763 } 8764 if (dirsWithPostpatch.length) { 8765 mergeVNodeHook(vnode, 'postpatch', function () { 8766 for (var i = 0; i < dirsWithPostpatch.length; i++) { 8767 callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode); 8768 } 8769 }); 8770 } 8771 if (!isCreate) { 8772 for (key in oldDirs) { 8773 if (!newDirs[key]) { 8774 // no longer present, unbind 8775 callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy); 8776 } 8777 } 8778 } 8779} 8780var emptyModifiers = Object.create(null); 8781function normalizeDirectives(dirs, vm) { 8782 var res = Object.create(null); 8783 if (!dirs) { 8784 // $flow-disable-line 8785 return res; 8786 } 8787 var i, dir; 8788 for (i = 0; i < dirs.length; i++) { 8789 dir = dirs[i]; 8790 if (!dir.modifiers) { 8791 // $flow-disable-line 8792 dir.modifiers = emptyModifiers; 8793 } 8794 res[getRawDirName(dir)] = dir; 8795 if (vm._setupState && vm._setupState.__sfc) { 8796 var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name); 8797 if (typeof setupDef === 'function') { 8798 dir.def = { 8799 bind: setupDef, 8800 update: setupDef 8801 }; 8802 } else { 8803 dir.def = setupDef; 8804 } 8805 } 8806 dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true); 8807 } 8808 // $flow-disable-line 8809 return res; 8810} 8811function getRawDirName(dir) { 8812 return dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.')); 8813} 8814function callHook(dir, hook, vnode, oldVnode, isDestroy) { 8815 var fn = dir.def && dir.def[hook]; 8816 if (fn) { 8817 try { 8818 fn(vnode.elm, dir, vnode, oldVnode, isDestroy); 8819 } catch (e) { 8820 handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook")); 8821 } 8822 } 8823} 8824var baseModules = [ref, directives$1]; 8825function updateAttrs(oldVnode, vnode) { 8826 var opts = vnode.componentOptions; 8827 if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) { 8828 return; 8829 } 8830 if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) { 8831 return; 8832 } 8833 var key, cur, old; 8834 var elm = vnode.elm; 8835 var oldAttrs = oldVnode.data.attrs || {}; 8836 var attrs = vnode.data.attrs || {}; 8837 // clone observed objects, as the user probably wants to mutate it 8838 if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) { 8839 attrs = vnode.data.attrs = extend({}, attrs); 8840 } 8841 for (key in attrs) { 8842 cur = attrs[key]; 8843 old = oldAttrs[key]; 8844 if (old !== cur) { 8845 setAttr(elm, key, cur, vnode.data.pre); 8846 } 8847 } 8848 // #4391: in IE9, setting type can reset value for input[type=radio] 8849 // #6666: IE/Edge forces progress value down to 1 before setting a max 8850 /* istanbul ignore if */ 8851 if ((isIE || isEdge) && attrs.value !== oldAttrs.value) { 8852 setAttr(elm, 'value', attrs.value); 8853 } 8854 for (key in oldAttrs) { 8855 if (isUndef(attrs[key])) { 8856 if (isXlink(key)) { 8857 elm.removeAttributeNS(xlinkNS, getXlinkProp(key)); 8858 } else if (!isEnumeratedAttr(key)) { 8859 elm.removeAttribute(key); 8860 } 8861 } 8862 } 8863} 8864function setAttr(el, key, value, isInPre) { 8865 if (isInPre || el.tagName.indexOf('-') > -1) { 8866 baseSetAttr(el, key, value); 8867 } else if (isBooleanAttr(key)) { 8868 // set attribute for blank value 8869 // e.g. <option disabled>Select one</option> 8870 if (isFalsyAttrValue(value)) { 8871 el.removeAttribute(key); 8872 } else { 8873 // technically allowfullscreen is a boolean attribute for <iframe>, 8874 // but Flash expects a value of "true" when used on <embed> tag 8875 value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key; 8876 el.setAttribute(key, value); 8877 } 8878 } else if (isEnumeratedAttr(key)) { 8879 el.setAttribute(key, convertEnumeratedValue(key, value)); 8880 } else if (isXlink(key)) { 8881 if (isFalsyAttrValue(value)) { 8882 el.removeAttributeNS(xlinkNS, getXlinkProp(key)); 8883 } else { 8884 el.setAttributeNS(xlinkNS, key, value); 8885 } 8886 } else { 8887 baseSetAttr(el, key, value); 8888 } 8889} 8890function baseSetAttr(el, key, value) { 8891 if (isFalsyAttrValue(value)) { 8892 el.removeAttribute(key); 8893 } else { 8894 // #7138: IE10 & 11 fires input event when setting placeholder on 8895 // <textarea>... block the first input event and remove the blocker 8896 // immediately. 8897 /* istanbul ignore if */ 8898 if (isIE && !isIE9 && el.tagName === 'TEXTAREA' && key === 'placeholder' && value !== '' && !el.__ieph) { 8899 var blocker_1 = function (e) { 8900 e.stopImmediatePropagation(); 8901 el.removeEventListener('input', blocker_1); 8902 }; 8903 el.addEventListener('input', blocker_1); 8904 // $flow-disable-line 8905 el.__ieph = true; /* IE placeholder patched */ 8906 } 8907 el.setAttribute(key, value); 8908 } 8909} 8910var attrs = { 8911 create: updateAttrs, 8912 update: updateAttrs 8913}; 8914function updateClass(oldVnode, vnode) { 8915 var el = vnode.elm; 8916 var data = vnode.data; 8917 var oldData = oldVnode.data; 8918 if (isUndef(data.staticClass) && isUndef(data.class) && (isUndef(oldData) || isUndef(oldData.staticClass) && isUndef(oldData.class))) { 8919 return; 8920 } 8921 var cls = genClassForVnode(vnode); 8922 // handle transition classes 8923 var transitionClass = el._transitionClasses; 8924 if (isDef(transitionClass)) { 8925 cls = concat(cls, stringifyClass(transitionClass)); 8926 } 8927 // set the class 8928 if (cls !== el._prevClass) { 8929 el.setAttribute('class', cls); 8930 el._prevClass = cls; 8931 } 8932} 8933var klass$1 = { 8934 create: updateClass, 8935 update: updateClass 8936}; 8937var validDivisionCharRE = /[\w).+\-_$\]]/; 8938function parseFilters(exp) { 8939 var inSingle = false; 8940 var inDouble = false; 8941 var inTemplateString = false; 8942 var inRegex = false; 8943 var curly = 0; 8944 var square = 0; 8945 var paren = 0; 8946 var lastFilterIndex = 0; 8947 var c, prev, i, expression, filters; 8948 for (i = 0; i < exp.length; i++) { 8949 prev = c; 8950 c = exp.charCodeAt(i); 8951 if (inSingle) { 8952 if (c === 0x27 && prev !== 0x5c) inSingle = false; 8953 } else if (inDouble) { 8954 if (c === 0x22 && prev !== 0x5c) inDouble = false; 8955 } else if (inTemplateString) { 8956 if (c === 0x60 && prev !== 0x5c) inTemplateString = false; 8957 } else if (inRegex) { 8958 if (c === 0x2f && prev !== 0x5c) inRegex = false; 8959 } else if (c === 0x7c && 8960 // pipe 8961 exp.charCodeAt(i + 1) !== 0x7c && exp.charCodeAt(i - 1) !== 0x7c && !curly && !square && !paren) { 8962 if (expression === undefined) { 8963 // first filter, end of expression 8964 lastFilterIndex = i + 1; 8965 expression = exp.slice(0, i).trim(); 8966 } else { 8967 pushFilter(); 8968 } 8969 } else { 8970 switch (c) { 8971 case 0x22: 8972 inDouble = true; 8973 break; 8974 // " 8975 case 0x27: 8976 inSingle = true; 8977 break; 8978 // ' 8979 case 0x60: 8980 inTemplateString = true; 8981 break; 8982 // ` 8983 case 0x28: 8984 paren++; 8985 break; 8986 // ( 8987 case 0x29: 8988 paren--; 8989 break; 8990 // ) 8991 case 0x5b: 8992 square++; 8993 break; 8994 // [ 8995 case 0x5d: 8996 square--; 8997 break; 8998 // ] 8999 case 0x7b: 9000 curly++; 9001 break; 9002 // { 9003 case 0x7d: 9004 curly--; 9005 break; 9006 // } 9007 } 9008 if (c === 0x2f) { 9009 // / 9010 var j = i - 1; 9011 var p 9012 // find first non-whitespace prev char 9013 = void 0; 9014 // find first non-whitespace prev char 9015 for (; j >= 0; j--) { 9016 p = exp.charAt(j); 9017 if (p !== ' ') break; 9018 } 9019 if (!p || !validDivisionCharRE.test(p)) { 9020 inRegex = true; 9021 } 9022 } 9023 } 9024 } 9025 if (expression === undefined) { 9026 expression = exp.slice(0, i).trim(); 9027 } else if (lastFilterIndex !== 0) { 9028 pushFilter(); 9029 } 9030 function pushFilter() { 9031 (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim()); 9032 lastFilterIndex = i + 1; 9033 } 9034 if (filters) { 9035 for (i = 0; i < filters.length; i++) { 9036 expression = wrapFilter(expression, filters[i]); 9037 } 9038 } 9039 return expression; 9040} 9041function wrapFilter(exp, filter) { 9042 var i = filter.indexOf('('); 9043 if (i < 0) { 9044 // _f: resolveFilter 9045 return "_f(\"".concat(filter, "\")(").concat(exp, ")"); 9046 } else { 9047 var name_1 = filter.slice(0, i); 9048 var args = filter.slice(i + 1); 9049 return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args); 9050 } 9051} 9052 9053/* eslint-disable no-unused-vars */ 9054function baseWarn(msg, range) { 9055 console.error("[Vue compiler]: ".concat(msg)); 9056} 9057/* eslint-enable no-unused-vars */ 9058function pluckModuleFunction(modules, key) { 9059 return modules ? modules.map(function (m) { 9060 return m[key]; 9061 }).filter(function (_) { 9062 return _; 9063 }) : []; 9064} 9065function addProp(el, name, value, range, dynamic) { 9066 (el.props || (el.props = [])).push(rangeSetItem({ 9067 name: name, 9068 value: value, 9069 dynamic: dynamic 9070 }, range)); 9071 el.plain = false; 9072} 9073function addAttr(el, name, value, range, dynamic) { 9074 var attrs = dynamic ? el.dynamicAttrs || (el.dynamicAttrs = []) : el.attrs || (el.attrs = []); 9075 attrs.push(rangeSetItem({ 9076 name: name, 9077 value: value, 9078 dynamic: dynamic 9079 }, range)); 9080 el.plain = false; 9081} 9082// add a raw attr (use this in preTransforms) 9083function addRawAttr(el, name, value, range) { 9084 el.attrsMap[name] = value; 9085 el.attrsList.push(rangeSetItem({ 9086 name: name, 9087 value: value 9088 }, range)); 9089} 9090function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) { 9091 (el.directives || (el.directives = [])).push(rangeSetItem({ 9092 name: name, 9093 rawName: rawName, 9094 value: value, 9095 arg: arg, 9096 isDynamicArg: isDynamicArg, 9097 modifiers: modifiers 9098 }, range)); 9099 el.plain = false; 9100} 9101function prependModifierMarker(symbol, name, dynamic) { 9102 return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured 9103} 9104function addHandler(el, name, value, modifiers, important, warn, range, dynamic) { 9105 modifiers = modifiers || emptyObject; 9106 // warn prevent and passive modifier 9107 /* istanbul ignore if */ 9108 if ( true && warn && modifiers.prevent && modifiers.passive) { 9109 warn("passive and prevent can't be used together. " + "Passive handler can't prevent default event.", range); 9110 } 9111 // normalize click.right and click.middle since they don't actually fire 9112 // this is technically browser-specific, but at least for now browsers are 9113 // the only target envs that have right/middle clicks. 9114 if (modifiers.right) { 9115 if (dynamic) { 9116 name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")"); 9117 } else if (name === 'click') { 9118 name = 'contextmenu'; 9119 delete modifiers.right; 9120 } 9121 } else if (modifiers.middle) { 9122 if (dynamic) { 9123 name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")"); 9124 } else if (name === 'click') { 9125 name = 'mouseup'; 9126 } 9127 } 9128 // check capture modifier 9129 if (modifiers.capture) { 9130 delete modifiers.capture; 9131 name = prependModifierMarker('!', name, dynamic); 9132 } 9133 if (modifiers.once) { 9134 delete modifiers.once; 9135 name = prependModifierMarker('~', name, dynamic); 9136 } 9137 /* istanbul ignore if */ 9138 if (modifiers.passive) { 9139 delete modifiers.passive; 9140 name = prependModifierMarker('&', name, dynamic); 9141 } 9142 var events; 9143 if (modifiers.native) { 9144 delete modifiers.native; 9145 events = el.nativeEvents || (el.nativeEvents = {}); 9146 } else { 9147 events = el.events || (el.events = {}); 9148 } 9149 var newHandler = rangeSetItem({ 9150 value: value.trim(), 9151 dynamic: dynamic 9152 }, range); 9153 if (modifiers !== emptyObject) { 9154 newHandler.modifiers = modifiers; 9155 } 9156 var handlers = events[name]; 9157 /* istanbul ignore if */ 9158 if (Array.isArray(handlers)) { 9159 important ? handlers.unshift(newHandler) : handlers.push(newHandler); 9160 } else if (handlers) { 9161 events[name] = important ? [newHandler, handlers] : [handlers, newHandler]; 9162 } else { 9163 events[name] = newHandler; 9164 } 9165 el.plain = false; 9166} 9167function getRawBindingAttr(el, name) { 9168 return el.rawAttrsMap[':' + name] || el.rawAttrsMap['v-bind:' + name] || el.rawAttrsMap[name]; 9169} 9170function getBindingAttr(el, name, getStatic) { 9171 var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name); 9172 if (dynamicValue != null) { 9173 return parseFilters(dynamicValue); 9174 } else if (getStatic !== false) { 9175 var staticValue = getAndRemoveAttr(el, name); 9176 if (staticValue != null) { 9177 return JSON.stringify(staticValue); 9178 } 9179 } 9180} 9181// note: this only removes the attr from the Array (attrsList) so that it 9182// doesn't get processed by processAttrs. 9183// By default it does NOT remove it from the map (attrsMap) because the map is 9184// needed during codegen. 9185function getAndRemoveAttr(el, name, removeFromMap) { 9186 var val; 9187 if ((val = el.attrsMap[name]) != null) { 9188 var list = el.attrsList; 9189 for (var i = 0, l = list.length; i < l; i++) { 9190 if (list[i].name === name) { 9191 list.splice(i, 1); 9192 break; 9193 } 9194 } 9195 } 9196 if (removeFromMap) { 9197 delete el.attrsMap[name]; 9198 } 9199 return val; 9200} 9201function getAndRemoveAttrByRegex(el, name) { 9202 var list = el.attrsList; 9203 for (var i = 0, l = list.length; i < l; i++) { 9204 var attr = list[i]; 9205 if (name.test(attr.name)) { 9206 list.splice(i, 1); 9207 return attr; 9208 } 9209 } 9210} 9211function rangeSetItem(item, range) { 9212 if (range) { 9213 if (range.start != null) { 9214 item.start = range.start; 9215 } 9216 if (range.end != null) { 9217 item.end = range.end; 9218 } 9219 } 9220 return item; 9221} 9222 9223/** 9224 * Cross-platform code generation for component v-model 9225 */ 9226function genComponentModel(el, value, modifiers) { 9227 var _a = modifiers || {}, 9228 number = _a.number, 9229 trim = _a.trim; 9230 var baseValueExpression = '$$v'; 9231 var valueExpression = baseValueExpression; 9232 if (trim) { 9233 valueExpression = "(typeof ".concat(baseValueExpression, " === 'string'") + "? ".concat(baseValueExpression, ".trim()") + ": ".concat(baseValueExpression, ")"); 9234 } 9235 if (number) { 9236 valueExpression = "_n(".concat(valueExpression, ")"); 9237 } 9238 var assignment = genAssignmentCode(value, valueExpression); 9239 el.model = { 9240 value: "(".concat(value, ")"), 9241 expression: JSON.stringify(value), 9242 callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}") 9243 }; 9244} 9245/** 9246 * Cross-platform codegen helper for generating v-model value assignment code. 9247 */ 9248function genAssignmentCode(value, assignment) { 9249 var res = parseModel(value); 9250 if (res.key === null) { 9251 return "".concat(value, "=").concat(assignment); 9252 } else { 9253 return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")"); 9254 } 9255} 9256/** 9257 * Parse a v-model expression into a base path and a final key segment. 9258 * Handles both dot-path and possible square brackets. 9259 * 9260 * Possible cases: 9261 * 9262 * - test 9263 * - test[key] 9264 * - test[test1[key]] 9265 * - test["a"][key] 9266 * - xxx.test[a[a].test1[key]] 9267 * - test.xxx.a["asa"][test1[key]] 9268 * 9269 */ 9270var len, str, chr, index, expressionPos, expressionEndPos; 9271function parseModel(val) { 9272 // Fix https://github.com/vuejs/vue/pull/7730 9273 // allow v-model="obj.val " (trailing whitespace) 9274 val = val.trim(); 9275 len = val.length; 9276 if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) { 9277 index = val.lastIndexOf('.'); 9278 if (index > -1) { 9279 return { 9280 exp: val.slice(0, index), 9281 key: '"' + val.slice(index + 1) + '"' 9282 }; 9283 } else { 9284 return { 9285 exp: val, 9286 key: null 9287 }; 9288 } 9289 } 9290 str = val; 9291 index = expressionPos = expressionEndPos = 0; 9292 while (!eof()) { 9293 chr = next(); 9294 /* istanbul ignore if */ 9295 if (isStringStart(chr)) { 9296 parseString(chr); 9297 } else if (chr === 0x5b) { 9298 parseBracket(chr); 9299 } 9300 } 9301 return { 9302 exp: val.slice(0, expressionPos), 9303 key: val.slice(expressionPos + 1, expressionEndPos) 9304 }; 9305} 9306function next() { 9307 return str.charCodeAt(++index); 9308} 9309function eof() { 9310 return index >= len; 9311} 9312function isStringStart(chr) { 9313 return chr === 0x22 || chr === 0x27; 9314} 9315function parseBracket(chr) { 9316 var inBracket = 1; 9317 expressionPos = index; 9318 while (!eof()) { 9319 chr = next(); 9320 if (isStringStart(chr)) { 9321 parseString(chr); 9322 continue; 9323 } 9324 if (chr === 0x5b) inBracket++; 9325 if (chr === 0x5d) inBracket--; 9326 if (inBracket === 0) { 9327 expressionEndPos = index; 9328 break; 9329 } 9330 } 9331} 9332function parseString(chr) { 9333 var stringQuote = chr; 9334 while (!eof()) { 9335 chr = next(); 9336 if (chr === stringQuote) { 9337 break; 9338 } 9339 } 9340} 9341var warn$1; 9342// in some cases, the event used has to be determined at runtime 9343// so we used some reserved tokens during compile. 9344var RANGE_TOKEN = '__r'; 9345var CHECKBOX_RADIO_TOKEN = '__c'; 9346function model$1(el, dir, _warn) { 9347 warn$1 = _warn; 9348 var value = dir.value; 9349 var modifiers = dir.modifiers; 9350 var tag = el.tag; 9351 var type = el.attrsMap.type; 9352 if (true) { 9353 // inputs with type="file" are read only and setting the input's 9354 // value will throw an error. 9355 if (tag === 'input' && type === 'file') { 9356 warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") + "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']); 9357 } 9358 } 9359 if (el.component) { 9360 genComponentModel(el, value, modifiers); 9361 // component v-model doesn't need extra runtime 9362 return false; 9363 } else if (tag === 'select') { 9364 genSelect(el, value, modifiers); 9365 } else if (tag === 'input' && type === 'checkbox') { 9366 genCheckboxModel(el, value, modifiers); 9367 } else if (tag === 'input' && type === 'radio') { 9368 genRadioModel(el, value, modifiers); 9369 } else if (tag === 'input' || tag === 'textarea') { 9370 genDefaultModel(el, value, modifiers); 9371 } else if (!config.isReservedTag(tag)) { 9372 genComponentModel(el, value, modifiers); 9373 // component v-model doesn't need extra runtime 9374 return false; 9375 } else if (true) { 9376 warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + "v-model is not supported on this element type. " + "If you are working with contenteditable, it's recommended to " + 'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']); 9377 } 9378 // ensure runtime directive metadata 9379 return true; 9380} 9381function genCheckboxModel(el, value, modifiers) { 9382 var number = modifiers && modifiers.number; 9383 var valueBinding = getBindingAttr(el, 'value') || 'null'; 9384 var trueValueBinding = getBindingAttr(el, 'true-value') || 'true'; 9385 var falseValueBinding = getBindingAttr(el, 'false-value') || 'false'; 9386 addProp(el, 'checked', "Array.isArray(".concat(value, ")") + "?_i(".concat(value, ",").concat(valueBinding, ")>-1") + (trueValueBinding === 'true' ? ":(".concat(value, ")") : ":_q(".concat(value, ",").concat(trueValueBinding, ")"))); 9387 addHandler(el, 'change', "var $$a=".concat(value, ",") + '$$el=$event.target,' + "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") + 'if(Array.isArray($$a)){' + "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") + '$$i=_i($$a,$$v);' + "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") + "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") + "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true); 9388} 9389function genRadioModel(el, value, modifiers) { 9390 var number = modifiers && modifiers.number; 9391 var valueBinding = getBindingAttr(el, 'value') || 'null'; 9392 valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding; 9393 addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")")); 9394 addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true); 9395} 9396function genSelect(el, value, modifiers) { 9397 var number = modifiers && modifiers.number; 9398 var selectedVal = "Array.prototype.filter" + ".call($event.target.options,function(o){return o.selected})" + ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" + "return ".concat(number ? '_n(val)' : 'val', "})"); 9399 var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'; 9400 var code = "var $$selectedVal = ".concat(selectedVal, ";"); 9401 code = "".concat(code, " ").concat(genAssignmentCode(value, assignment)); 9402 addHandler(el, 'change', code, null, true); 9403} 9404function genDefaultModel(el, value, modifiers) { 9405 var type = el.attrsMap.type; 9406 // warn if v-bind:value conflicts with v-model 9407 // except for inputs with v-bind:type 9408 if (true) { 9409 var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value']; 9410 var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type']; 9411 if (value_1 && !typeBinding) { 9412 var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value'; 9413 warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") + 'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]); 9414 } 9415 } 9416 var _a = modifiers || {}, 9417 lazy = _a.lazy, 9418 number = _a.number, 9419 trim = _a.trim; 9420 var needCompositionGuard = !lazy && type !== 'range'; 9421 var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input'; 9422 var valueExpression = '$event.target.value'; 9423 if (trim) { 9424 valueExpression = "$event.target.value.trim()"; 9425 } 9426 if (number) { 9427 valueExpression = "_n(".concat(valueExpression, ")"); 9428 } 9429 var code = genAssignmentCode(value, valueExpression); 9430 if (needCompositionGuard) { 9431 code = "if($event.target.composing)return;".concat(code); 9432 } 9433 addProp(el, 'value', "(".concat(value, ")")); 9434 addHandler(el, event, code, null, true); 9435 if (trim || number) { 9436 addHandler(el, 'blur', '$forceUpdate()'); 9437 } 9438} 9439 9440// normalize v-model event tokens that can only be determined at runtime. 9441// it's important to place the event as the first in the array because 9442// the whole point is ensuring the v-model callback gets called before 9443// user-attached handlers. 9444function normalizeEvents(on) { 9445 /* istanbul ignore if */ 9446 if (isDef(on[RANGE_TOKEN])) { 9447 // IE input[type=range] only supports `change` event 9448 var event_1 = isIE ? 'change' : 'input'; 9449 on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []); 9450 delete on[RANGE_TOKEN]; 9451 } 9452 // This was originally intended to fix #4521 but no longer necessary 9453 // after 2.5. Keeping it for backwards compat with generated code from < 2.4 9454 /* istanbul ignore if */ 9455 if (isDef(on[CHECKBOX_RADIO_TOKEN])) { 9456 on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []); 9457 delete on[CHECKBOX_RADIO_TOKEN]; 9458 } 9459} 9460var target; 9461function createOnceHandler(event, handler, capture) { 9462 var _target = target; // save current target element in closure 9463 return function onceHandler() { 9464 var res = handler.apply(null, arguments); 9465 if (res !== null) { 9466 remove(event, onceHandler, capture, _target); 9467 } 9468 }; 9469} 9470// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp 9471// implementation and does not fire microtasks in between event propagation, so 9472// safe to exclude. 9473var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53); 9474function add(name, handler, capture, passive) { 9475 // async edge case #6566: inner click event triggers patch, event handler 9476 // attached to outer element during patch, and triggered again. This 9477 // happens because browsers fire microtask ticks between event propagation. 9478 // the solution is simple: we save the timestamp when a handler is attached, 9479 // and the handler would only fire if the event passed to it was fired 9480 // AFTER it was attached. 9481 if (useMicrotaskFix) { 9482 var attachedTimestamp_1 = currentFlushTimestamp; 9483 var original_1 = handler; 9484 //@ts-expect-error 9485 handler = original_1._wrapper = function (e) { 9486 if ( 9487 // no bubbling, should always fire. 9488 // this is just a safety net in case event.timeStamp is unreliable in 9489 // certain weird environments... 9490 e.target === e.currentTarget || 9491 // event is fired after handler attachment 9492 e.timeStamp >= attachedTimestamp_1 || 9493 // bail for environments that have buggy event.timeStamp implementations 9494 // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState 9495 // #9681 QtWebEngine event.timeStamp is negative value 9496 e.timeStamp <= 0 || 9497 // #9448 bail if event is fired in another document in a multi-page 9498 // electron/nw.js app, since event.timeStamp will be using a different 9499 // starting reference 9500 e.target.ownerDocument !== document) { 9501 return original_1.apply(this, arguments); 9502 } 9503 }; 9504 } 9505 target.addEventListener(name, handler, supportsPassive ? { 9506 capture: capture, 9507 passive: passive 9508 } : capture); 9509} 9510function remove(name, handler, capture, _target) { 9511 (_target || target).removeEventListener(name, 9512 //@ts-expect-error 9513 handler._wrapper || handler, capture); 9514} 9515function updateDOMListeners(oldVnode, vnode) { 9516 if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) { 9517 return; 9518 } 9519 var on = vnode.data.on || {}; 9520 var oldOn = oldVnode.data.on || {}; 9521 // vnode is empty when removing all listeners, 9522 // and use old vnode dom element 9523 target = vnode.elm || oldVnode.elm; 9524 normalizeEvents(on); 9525 updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context); 9526 target = undefined; 9527} 9528var events = { 9529 create: updateDOMListeners, 9530 update: updateDOMListeners, 9531 // @ts-expect-error emptyNode has actually data 9532 destroy: function (vnode) { 9533 return updateDOMListeners(vnode, emptyNode); 9534 } 9535}; 9536var svgContainer; 9537function updateDOMProps(oldVnode, vnode) { 9538 if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) { 9539 return; 9540 } 9541 var key, cur; 9542 var elm = vnode.elm; 9543 var oldProps = oldVnode.data.domProps || {}; 9544 var props = vnode.data.domProps || {}; 9545 // clone observed objects, as the user probably wants to mutate it 9546 if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) { 9547 props = vnode.data.domProps = extend({}, props); 9548 } 9549 for (key in oldProps) { 9550 if (!(key in props)) { 9551 elm[key] = ''; 9552 } 9553 } 9554 for (key in props) { 9555 cur = props[key]; 9556 // ignore children if the node has textContent or innerHTML, 9557 // as these will throw away existing DOM nodes and cause removal errors 9558 // on subsequent patches (#3360) 9559 if (key === 'textContent' || key === 'innerHTML') { 9560 if (vnode.children) vnode.children.length = 0; 9561 if (cur === oldProps[key]) continue; 9562 // #6601 work around Chrome version <= 55 bug where single textNode 9563 // replaced by innerHTML/textContent retains its parentNode property 9564 if (elm.childNodes.length === 1) { 9565 elm.removeChild(elm.childNodes[0]); 9566 } 9567 } 9568 if (key === 'value' && elm.tagName !== 'PROGRESS') { 9569 // store value as _value as well since 9570 // non-string values will be stringified 9571 elm._value = cur; 9572 // avoid resetting cursor position when value is the same 9573 var strCur = isUndef(cur) ? '' : String(cur); 9574 if (shouldUpdateValue(elm, strCur)) { 9575 elm.value = strCur; 9576 } 9577 } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) { 9578 // IE doesn't support innerHTML for SVG elements 9579 svgContainer = svgContainer || document.createElement('div'); 9580 svgContainer.innerHTML = "<svg>".concat(cur, "</svg>"); 9581 var svg = svgContainer.firstChild; 9582 while (elm.firstChild) { 9583 elm.removeChild(elm.firstChild); 9584 } 9585 while (svg.firstChild) { 9586 elm.appendChild(svg.firstChild); 9587 } 9588 } else if ( 9589 // skip the update if old and new VDOM state is the same. 9590 // `value` is handled separately because the DOM value may be temporarily 9591 // out of sync with VDOM state due to focus, composition and modifiers. 9592 // This #4521 by skipping the unnecessary `checked` update. 9593 cur !== oldProps[key]) { 9594 // some property updates can throw 9595 // e.g. `value` on <progress> w/ non-finite value 9596 try { 9597 elm[key] = cur; 9598 } catch (e) {} 9599 } 9600 } 9601} 9602function shouldUpdateValue(elm, checkVal) { 9603 return ( 9604 //@ts-expect-error 9605 !elm.composing && (elm.tagName === 'OPTION' || isNotInFocusAndDirty(elm, checkVal) || isDirtyWithModifiers(elm, checkVal)) 9606 ); 9607} 9608function isNotInFocusAndDirty(elm, checkVal) { 9609 // return true when textbox (.number and .trim) loses focus and its value is 9610 // not equal to the updated value 9611 var notInFocus = true; 9612 // #6157 9613 // work around IE bug when accessing document.activeElement in an iframe 9614 try { 9615 notInFocus = document.activeElement !== elm; 9616 } catch (e) {} 9617 return notInFocus && elm.value !== checkVal; 9618} 9619function isDirtyWithModifiers(elm, newVal) { 9620 var value = elm.value; 9621 var modifiers = elm._vModifiers; // injected by v-model runtime 9622 if (isDef(modifiers)) { 9623 if (modifiers.number) { 9624 return toNumber(value) !== toNumber(newVal); 9625 } 9626 if (modifiers.trim) { 9627 return value.trim() !== newVal.trim(); 9628 } 9629 } 9630 return value !== newVal; 9631} 9632var domProps = { 9633 create: updateDOMProps, 9634 update: updateDOMProps 9635}; 9636var parseStyleText = cached(function (cssText) { 9637 var res = {}; 9638 var listDelimiter = /;(?![^(]*\))/g; 9639 var propertyDelimiter = /:(.+)/; 9640 cssText.split(listDelimiter).forEach(function (item) { 9641 if (item) { 9642 var tmp = item.split(propertyDelimiter); 9643 tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim()); 9644 } 9645 }); 9646 return res; 9647}); 9648// merge static and dynamic style data on the same vnode 9649function normalizeStyleData(data) { 9650 var style = normalizeStyleBinding(data.style); 9651 // static style is pre-processed into an object during compilation 9652 // and is always a fresh object, so it's safe to merge into it 9653 return data.staticStyle ? extend(data.staticStyle, style) : style; 9654} 9655// normalize possible array / string values into Object 9656function normalizeStyleBinding(bindingStyle) { 9657 if (Array.isArray(bindingStyle)) { 9658 return toObject(bindingStyle); 9659 } 9660 if (typeof bindingStyle === 'string') { 9661 return parseStyleText(bindingStyle); 9662 } 9663 return bindingStyle; 9664} 9665/** 9666 * parent component style should be after child's 9667 * so that parent component's style could override it 9668 */ 9669function getStyle(vnode, checkChild) { 9670 var res = {}; 9671 var styleData; 9672 if (checkChild) { 9673 var childNode = vnode; 9674 while (childNode.componentInstance) { 9675 childNode = childNode.componentInstance._vnode; 9676 if (childNode && childNode.data && (styleData = normalizeStyleData(childNode.data))) { 9677 extend(res, styleData); 9678 } 9679 } 9680 } 9681 if (styleData = normalizeStyleData(vnode.data)) { 9682 extend(res, styleData); 9683 } 9684 var parentNode = vnode; 9685 // @ts-expect-error parentNode.parent not VNodeWithData 9686 while (parentNode = parentNode.parent) { 9687 if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) { 9688 extend(res, styleData); 9689 } 9690 } 9691 return res; 9692} 9693var cssVarRE = /^--/; 9694var importantRE = /\s*!important$/; 9695var setProp = function (el, name, val) { 9696 /* istanbul ignore if */ 9697 if (cssVarRE.test(name)) { 9698 el.style.setProperty(name, val); 9699 } else if (importantRE.test(val)) { 9700 el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important'); 9701 } else { 9702 var normalizedName = normalize(name); 9703 if (Array.isArray(val)) { 9704 // Support values array created by autoprefixer, e.g. 9705 // {display: ["-webkit-box", "-ms-flexbox", "flex"]} 9706 // Set them one by one, and the browser will only set those it can recognize 9707 for (var i = 0, len = val.length; i < len; i++) { 9708 el.style[normalizedName] = val[i]; 9709 } 9710 } else { 9711 el.style[normalizedName] = val; 9712 } 9713 } 9714}; 9715var vendorNames = ['Webkit', 'Moz', 'ms']; 9716var emptyStyle; 9717var normalize = cached(function (prop) { 9718 emptyStyle = emptyStyle || document.createElement('div').style; 9719 prop = camelize(prop); 9720 if (prop !== 'filter' && prop in emptyStyle) { 9721 return prop; 9722 } 9723 var capName = prop.charAt(0).toUpperCase() + prop.slice(1); 9724 for (var i = 0; i < vendorNames.length; i++) { 9725 var name_1 = vendorNames[i] + capName; 9726 if (name_1 in emptyStyle) { 9727 return name_1; 9728 } 9729 } 9730}); 9731function updateStyle(oldVnode, vnode) { 9732 var data = vnode.data; 9733 var oldData = oldVnode.data; 9734 if (isUndef(data.staticStyle) && isUndef(data.style) && isUndef(oldData.staticStyle) && isUndef(oldData.style)) { 9735 return; 9736 } 9737 var cur, name; 9738 var el = vnode.elm; 9739 var oldStaticStyle = oldData.staticStyle; 9740 var oldStyleBinding = oldData.normalizedStyle || oldData.style || {}; 9741 // if static style exists, stylebinding already merged into it when doing normalizeStyleData 9742 var oldStyle = oldStaticStyle || oldStyleBinding; 9743 var style = normalizeStyleBinding(vnode.data.style) || {}; 9744 // store normalized style under a different key for next diff 9745 // make sure to clone it if it's reactive, since the user likely wants 9746 // to mutate it. 9747 vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style; 9748 var newStyle = getStyle(vnode, true); 9749 for (name in oldStyle) { 9750 if (isUndef(newStyle[name])) { 9751 setProp(el, name, ''); 9752 } 9753 } 9754 for (name in newStyle) { 9755 cur = newStyle[name]; 9756 if (cur !== oldStyle[name]) { 9757 // ie9 setting to null has no effect, must use empty string 9758 setProp(el, name, cur == null ? '' : cur); 9759 } 9760 } 9761} 9762var style$1 = { 9763 create: updateStyle, 9764 update: updateStyle 9765}; 9766var whitespaceRE$1 = /\s+/; 9767/** 9768 * Add class with compatibility for SVG since classList is not supported on 9769 * SVG elements in IE 9770 */ 9771function addClass(el, cls) { 9772 /* istanbul ignore if */ 9773 if (!cls || !(cls = cls.trim())) { 9774 return; 9775 } 9776 /* istanbul ignore else */ 9777 if (el.classList) { 9778 if (cls.indexOf(' ') > -1) { 9779 cls.split(whitespaceRE$1).forEach(function (c) { 9780 return el.classList.add(c); 9781 }); 9782 } else { 9783 el.classList.add(cls); 9784 } 9785 } else { 9786 var cur = " ".concat(el.getAttribute('class') || '', " "); 9787 if (cur.indexOf(' ' + cls + ' ') < 0) { 9788 el.setAttribute('class', (cur + cls).trim()); 9789 } 9790 } 9791} 9792/** 9793 * Remove class with compatibility for SVG since classList is not supported on 9794 * SVG elements in IE 9795 */ 9796function removeClass(el, cls) { 9797 /* istanbul ignore if */ 9798 if (!cls || !(cls = cls.trim())) { 9799 return; 9800 } 9801 /* istanbul ignore else */ 9802 if (el.classList) { 9803 if (cls.indexOf(' ') > -1) { 9804 cls.split(whitespaceRE$1).forEach(function (c) { 9805 return el.classList.remove(c); 9806 }); 9807 } else { 9808 el.classList.remove(cls); 9809 } 9810 if (!el.classList.length) { 9811 el.removeAttribute('class'); 9812 } 9813 } else { 9814 var cur = " ".concat(el.getAttribute('class') || '', " "); 9815 var tar = ' ' + cls + ' '; 9816 while (cur.indexOf(tar) >= 0) { 9817 cur = cur.replace(tar, ' '); 9818 } 9819 cur = cur.trim(); 9820 if (cur) { 9821 el.setAttribute('class', cur); 9822 } else { 9823 el.removeAttribute('class'); 9824 } 9825 } 9826} 9827function resolveTransition(def) { 9828 if (!def) { 9829 return; 9830 } 9831 /* istanbul ignore else */ 9832 if (typeof def === 'object') { 9833 var res = {}; 9834 if (def.css !== false) { 9835 extend(res, autoCssTransition(def.name || 'v')); 9836 } 9837 extend(res, def); 9838 return res; 9839 } else if (typeof def === 'string') { 9840 return autoCssTransition(def); 9841 } 9842} 9843var autoCssTransition = cached(function (name) { 9844 return { 9845 enterClass: "".concat(name, "-enter"), 9846 enterToClass: "".concat(name, "-enter-to"), 9847 enterActiveClass: "".concat(name, "-enter-active"), 9848 leaveClass: "".concat(name, "-leave"), 9849 leaveToClass: "".concat(name, "-leave-to"), 9850 leaveActiveClass: "".concat(name, "-leave-active") 9851 }; 9852}); 9853var hasTransition = inBrowser && !isIE9; 9854var TRANSITION = 'transition'; 9855var ANIMATION = 'animation'; 9856// Transition property/event sniffing 9857var transitionProp = 'transition'; 9858var transitionEndEvent = 'transitionend'; 9859var animationProp = 'animation'; 9860var animationEndEvent = 'animationend'; 9861if (hasTransition) { 9862 /* istanbul ignore if */ 9863 if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) { 9864 transitionProp = 'WebkitTransition'; 9865 transitionEndEvent = 'webkitTransitionEnd'; 9866 } 9867 if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) { 9868 animationProp = 'WebkitAnimation'; 9869 animationEndEvent = 'webkitAnimationEnd'; 9870 } 9871} 9872// binding to window is necessary to make hot reload work in IE in strict mode 9873var raf = inBrowser ? window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : setTimeout : /* istanbul ignore next */function ( /* istanbul ignore next */fn) { 9874 return fn(); 9875}; 9876function nextFrame(fn) { 9877 raf(function () { 9878 // @ts-expect-error 9879 raf(fn); 9880 }); 9881} 9882function addTransitionClass(el, cls) { 9883 var transitionClasses = el._transitionClasses || (el._transitionClasses = []); 9884 if (transitionClasses.indexOf(cls) < 0) { 9885 transitionClasses.push(cls); 9886 addClass(el, cls); 9887 } 9888} 9889function removeTransitionClass(el, cls) { 9890 if (el._transitionClasses) { 9891 remove$2(el._transitionClasses, cls); 9892 } 9893 removeClass(el, cls); 9894} 9895function whenTransitionEnds(el, expectedType, cb) { 9896 var _a = getTransitionInfo(el, expectedType), 9897 type = _a.type, 9898 timeout = _a.timeout, 9899 propCount = _a.propCount; 9900 if (!type) return cb(); 9901 var event = type === TRANSITION ? transitionEndEvent : animationEndEvent; 9902 var ended = 0; 9903 var end = function () { 9904 el.removeEventListener(event, onEnd); 9905 cb(); 9906 }; 9907 var onEnd = function (e) { 9908 if (e.target === el) { 9909 if (++ended >= propCount) { 9910 end(); 9911 } 9912 } 9913 }; 9914 setTimeout(function () { 9915 if (ended < propCount) { 9916 end(); 9917 } 9918 }, timeout + 1); 9919 el.addEventListener(event, onEnd); 9920} 9921var transformRE = /\b(transform|all)(,|$)/; 9922function getTransitionInfo(el, expectedType) { 9923 var styles = window.getComputedStyle(el); 9924 // JSDOM may return undefined for transition properties 9925 var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', '); 9926 var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', '); 9927 var transitionTimeout = getTimeout(transitionDelays, transitionDurations); 9928 var animationDelays = (styles[animationProp + 'Delay'] || '').split(', '); 9929 var animationDurations = (styles[animationProp + 'Duration'] || '').split(', '); 9930 var animationTimeout = getTimeout(animationDelays, animationDurations); 9931 var type; 9932 var timeout = 0; 9933 var propCount = 0; 9934 /* istanbul ignore if */ 9935 if (expectedType === TRANSITION) { 9936 if (transitionTimeout > 0) { 9937 type = TRANSITION; 9938 timeout = transitionTimeout; 9939 propCount = transitionDurations.length; 9940 } 9941 } else if (expectedType === ANIMATION) { 9942 if (animationTimeout > 0) { 9943 type = ANIMATION; 9944 timeout = animationTimeout; 9945 propCount = animationDurations.length; 9946 } 9947 } else { 9948 timeout = Math.max(transitionTimeout, animationTimeout); 9949 type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null; 9950 propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0; 9951 } 9952 var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']); 9953 return { 9954 type: type, 9955 timeout: timeout, 9956 propCount: propCount, 9957 hasTransform: hasTransform 9958 }; 9959} 9960function getTimeout(delays, durations) { 9961 /* istanbul ignore next */ 9962 while (delays.length < durations.length) { 9963 delays = delays.concat(delays); 9964 } 9965 return Math.max.apply(null, durations.map(function (d, i) { 9966 return toMs(d) + toMs(delays[i]); 9967 })); 9968} 9969// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers 9970// in a locale-dependent way, using a comma instead of a dot. 9971// If comma is not replaced with a dot, the input will be rounded down (i.e. acting 9972// as a floor function) causing unexpected behaviors 9973function toMs(s) { 9974 return Number(s.slice(0, -1).replace(',', '.')) * 1000; 9975} 9976function enter(vnode, toggleDisplay) { 9977 var el = vnode.elm; 9978 // call leave callback now 9979 if (isDef(el._leaveCb)) { 9980 el._leaveCb.cancelled = true; 9981 el._leaveCb(); 9982 } 9983 var data = resolveTransition(vnode.data.transition); 9984 if (isUndef(data)) { 9985 return; 9986 } 9987 /* istanbul ignore if */ 9988 if (isDef(el._enterCb) || el.nodeType !== 1) { 9989 return; 9990 } 9991 var css = data.css, 9992 type = data.type, 9993 enterClass = data.enterClass, 9994 enterToClass = data.enterToClass, 9995 enterActiveClass = data.enterActiveClass, 9996 appearClass = data.appearClass, 9997 appearToClass = data.appearToClass, 9998 appearActiveClass = data.appearActiveClass, 9999 beforeEnter = data.beforeEnter, 10000 enter = data.enter, 10001 afterEnter = data.afterEnter, 10002 enterCancelled = data.enterCancelled, 10003 beforeAppear = data.beforeAppear, 10004 appear = data.appear, 10005 afterAppear = data.afterAppear, 10006 appearCancelled = data.appearCancelled, 10007 duration = data.duration; 10008 // activeInstance will always be the <transition> component managing this 10009 // transition. One edge case to check is when the <transition> is placed 10010 // as the root node of a child component. In that case we need to check 10011 // <transition>'s parent for appear check. 10012 var context = activeInstance; 10013 var transitionNode = activeInstance.$vnode; 10014 while (transitionNode && transitionNode.parent) { 10015 context = transitionNode.context; 10016 transitionNode = transitionNode.parent; 10017 } 10018 var isAppear = !context._isMounted || !vnode.isRootInsert; 10019 if (isAppear && !appear && appear !== '') { 10020 return; 10021 } 10022 var startClass = isAppear && appearClass ? appearClass : enterClass; 10023 var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass; 10024 var toClass = isAppear && appearToClass ? appearToClass : enterToClass; 10025 var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter; 10026 var enterHook = isAppear ? isFunction(appear) ? appear : enter : enter; 10027 var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter; 10028 var enterCancelledHook = isAppear ? appearCancelled || enterCancelled : enterCancelled; 10029 var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration); 10030 if ( true && explicitEnterDuration != null) { 10031 checkDuration(explicitEnterDuration, 'enter', vnode); 10032 } 10033 var expectsCSS = css !== false && !isIE9; 10034 var userWantsControl = getHookArgumentsLength(enterHook); 10035 var cb = el._enterCb = once(function () { 10036 if (expectsCSS) { 10037 removeTransitionClass(el, toClass); 10038 removeTransitionClass(el, activeClass); 10039 } 10040 // @ts-expect-error 10041 if (cb.cancelled) { 10042 if (expectsCSS) { 10043 removeTransitionClass(el, startClass); 10044 } 10045 enterCancelledHook && enterCancelledHook(el); 10046 } else { 10047 afterEnterHook && afterEnterHook(el); 10048 } 10049 el._enterCb = null; 10050 }); 10051 if (!vnode.data.show) { 10052 // remove pending leave element on enter by injecting an insert hook 10053 mergeVNodeHook(vnode, 'insert', function () { 10054 var parent = el.parentNode; 10055 var pendingNode = parent && parent._pending && parent._pending[vnode.key]; 10056 if (pendingNode && pendingNode.tag === vnode.tag && pendingNode.elm._leaveCb) { 10057 pendingNode.elm._leaveCb(); 10058 } 10059 enterHook && enterHook(el, cb); 10060 }); 10061 } 10062 // start enter transition 10063 beforeEnterHook && beforeEnterHook(el); 10064 if (expectsCSS) { 10065 addTransitionClass(el, startClass); 10066 addTransitionClass(el, activeClass); 10067 nextFrame(function () { 10068 removeTransitionClass(el, startClass); 10069 // @ts-expect-error 10070 if (!cb.cancelled) { 10071 addTransitionClass(el, toClass); 10072 if (!userWantsControl) { 10073 if (isValidDuration(explicitEnterDuration)) { 10074 setTimeout(cb, explicitEnterDuration); 10075 } else { 10076 whenTransitionEnds(el, type, cb); 10077 } 10078 } 10079 } 10080 }); 10081 } 10082 if (vnode.data.show) { 10083 toggleDisplay && toggleDisplay(); 10084 enterHook && enterHook(el, cb); 10085 } 10086 if (!expectsCSS && !userWantsControl) { 10087 cb(); 10088 } 10089} 10090function leave(vnode, rm) { 10091 var el = vnode.elm; 10092 // call enter callback now 10093 if (isDef(el._enterCb)) { 10094 el._enterCb.cancelled = true; 10095 el._enterCb(); 10096 } 10097 var data = resolveTransition(vnode.data.transition); 10098 if (isUndef(data) || el.nodeType !== 1) { 10099 return rm(); 10100 } 10101 /* istanbul ignore if */ 10102 if (isDef(el._leaveCb)) { 10103 return; 10104 } 10105 var css = data.css, 10106 type = data.type, 10107 leaveClass = data.leaveClass, 10108 leaveToClass = data.leaveToClass, 10109 leaveActiveClass = data.leaveActiveClass, 10110 beforeLeave = data.beforeLeave, 10111 leave = data.leave, 10112 afterLeave = data.afterLeave, 10113 leaveCancelled = data.leaveCancelled, 10114 delayLeave = data.delayLeave, 10115 duration = data.duration; 10116 var expectsCSS = css !== false && !isIE9; 10117 var userWantsControl = getHookArgumentsLength(leave); 10118 var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration); 10119 if ( true && isDef(explicitLeaveDuration)) { 10120 checkDuration(explicitLeaveDuration, 'leave', vnode); 10121 } 10122 var cb = el._leaveCb = once(function () { 10123 if (el.parentNode && el.parentNode._pending) { 10124 el.parentNode._pending[vnode.key] = null; 10125 } 10126 if (expectsCSS) { 10127 removeTransitionClass(el, leaveToClass); 10128 removeTransitionClass(el, leaveActiveClass); 10129 } 10130 // @ts-expect-error 10131 if (cb.cancelled) { 10132 if (expectsCSS) { 10133 removeTransitionClass(el, leaveClass); 10134 } 10135 leaveCancelled && leaveCancelled(el); 10136 } else { 10137 rm(); 10138 afterLeave && afterLeave(el); 10139 } 10140 el._leaveCb = null; 10141 }); 10142 if (delayLeave) { 10143 delayLeave(performLeave); 10144 } else { 10145 performLeave(); 10146 } 10147 function performLeave() { 10148 // the delayed leave may have already been cancelled 10149 // @ts-expect-error 10150 if (cb.cancelled) { 10151 return; 10152 } 10153 // record leaving element 10154 if (!vnode.data.show && el.parentNode) { 10155 (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] = vnode; 10156 } 10157 beforeLeave && beforeLeave(el); 10158 if (expectsCSS) { 10159 addTransitionClass(el, leaveClass); 10160 addTransitionClass(el, leaveActiveClass); 10161 nextFrame(function () { 10162 removeTransitionClass(el, leaveClass); 10163 // @ts-expect-error 10164 if (!cb.cancelled) { 10165 addTransitionClass(el, leaveToClass); 10166 if (!userWantsControl) { 10167 if (isValidDuration(explicitLeaveDuration)) { 10168 setTimeout(cb, explicitLeaveDuration); 10169 } else { 10170 whenTransitionEnds(el, type, cb); 10171 } 10172 } 10173 } 10174 }); 10175 } 10176 leave && leave(el, cb); 10177 if (!expectsCSS && !userWantsControl) { 10178 cb(); 10179 } 10180 } 10181} 10182// only used in dev mode 10183function checkDuration(val, name, vnode) { 10184 if (typeof val !== 'number') { 10185 warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") + "got ".concat(JSON.stringify(val), "."), vnode.context); 10186 } else if (isNaN(val)) { 10187 warn$2("<transition> explicit ".concat(name, " duration is NaN - ") + 'the duration expression might be incorrect.', vnode.context); 10188 } 10189} 10190function isValidDuration(val) { 10191 return typeof val === 'number' && !isNaN(val); 10192} 10193/** 10194 * Normalize a transition hook's argument length. The hook may be: 10195 * - a merged hook (invoker) with the original in .fns 10196 * - a wrapped component method (check ._length) 10197 * - a plain function (.length) 10198 */ 10199function getHookArgumentsLength(fn) { 10200 if (isUndef(fn)) { 10201 return false; 10202 } 10203 // @ts-expect-error 10204 var invokerFns = fn.fns; 10205 if (isDef(invokerFns)) { 10206 // invoker 10207 return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns); 10208 } else { 10209 // @ts-expect-error 10210 return (fn._length || fn.length) > 1; 10211 } 10212} 10213function _enter(_, vnode) { 10214 if (vnode.data.show !== true) { 10215 enter(vnode); 10216 } 10217} 10218var transition = inBrowser ? { 10219 create: _enter, 10220 activate: _enter, 10221 remove: function (vnode, rm) { 10222 /* istanbul ignore else */ 10223 if (vnode.data.show !== true) { 10224 // @ts-expect-error 10225 leave(vnode, rm); 10226 } else { 10227 rm(); 10228 } 10229 } 10230} : {}; 10231var platformModules = [attrs, klass$1, events, domProps, style$1, transition]; 10232 10233// the directive module should be applied last, after all 10234// built-in modules have been applied. 10235var modules$1 = platformModules.concat(baseModules); 10236var patch = createPatchFunction({ 10237 nodeOps: nodeOps, 10238 modules: modules$1 10239}); 10240 10241/** 10242 * Not type checking this file because flow doesn't like attaching 10243 * properties to Elements. 10244 */ 10245/* istanbul ignore if */ 10246if (isIE9) { 10247 // http://www.matts411.com/post/internet-explorer-9-oninput/ 10248 document.addEventListener('selectionchange', function () { 10249 var el = document.activeElement; 10250 // @ts-expect-error 10251 if (el && el.vmodel) { 10252 trigger(el, 'input'); 10253 } 10254 }); 10255} 10256var directive = { 10257 inserted: function (el, binding, vnode, oldVnode) { 10258 if (vnode.tag === 'select') { 10259 // #6903 10260 if (oldVnode.elm && !oldVnode.elm._vOptions) { 10261 mergeVNodeHook(vnode, 'postpatch', function () { 10262 directive.componentUpdated(el, binding, vnode); 10263 }); 10264 } else { 10265 setSelected(el, binding, vnode.context); 10266 } 10267 el._vOptions = [].map.call(el.options, getValue); 10268 } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) { 10269 el._vModifiers = binding.modifiers; 10270 if (!binding.modifiers.lazy) { 10271 el.addEventListener('compositionstart', onCompositionStart); 10272 el.addEventListener('compositionend', onCompositionEnd); 10273 // Safari < 10.2 & UIWebView doesn't fire compositionend when 10274 // switching focus before confirming composition choice 10275 // this also fixes the issue where some browsers e.g. iOS Chrome 10276 // fires "change" instead of "input" on autocomplete. 10277 el.addEventListener('change', onCompositionEnd); 10278 /* istanbul ignore if */ 10279 if (isIE9) { 10280 el.vmodel = true; 10281 } 10282 } 10283 } 10284 }, 10285 componentUpdated: function (el, binding, vnode) { 10286 if (vnode.tag === 'select') { 10287 setSelected(el, binding, vnode.context); 10288 // in case the options rendered by v-for have changed, 10289 // it's possible that the value is out-of-sync with the rendered options. 10290 // detect such cases and filter out values that no longer has a matching 10291 // option in the DOM. 10292 var prevOptions_1 = el._vOptions; 10293 var curOptions_1 = el._vOptions = [].map.call(el.options, getValue); 10294 if (curOptions_1.some(function (o, i) { 10295 return !looseEqual(o, prevOptions_1[i]); 10296 })) { 10297 // trigger change event if 10298 // no matching option found for at least one value 10299 var needReset = el.multiple ? binding.value.some(function (v) { 10300 return hasNoMatchingOption(v, curOptions_1); 10301 }) : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions_1); 10302 if (needReset) { 10303 trigger(el, 'change'); 10304 } 10305 } 10306 } 10307 } 10308}; 10309function setSelected(el, binding, vm) { 10310 actuallySetSelected(el, binding, vm); 10311 /* istanbul ignore if */ 10312 if (isIE || isEdge) { 10313 setTimeout(function () { 10314 actuallySetSelected(el, binding, vm); 10315 }, 0); 10316 } 10317} 10318function actuallySetSelected(el, binding, vm) { 10319 var value = binding.value; 10320 var isMultiple = el.multiple; 10321 if (isMultiple && !Array.isArray(value)) { 10322 true && warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") + "expects an Array value for its binding, but got ".concat(Object.prototype.toString.call(value).slice(8, -1)), vm); 10323 return; 10324 } 10325 var selected, option; 10326 for (var i = 0, l = el.options.length; i < l; i++) { 10327 option = el.options[i]; 10328 if (isMultiple) { 10329 selected = looseIndexOf(value, getValue(option)) > -1; 10330 if (option.selected !== selected) { 10331 option.selected = selected; 10332 } 10333 } else { 10334 if (looseEqual(getValue(option), value)) { 10335 if (el.selectedIndex !== i) { 10336 el.selectedIndex = i; 10337 } 10338 return; 10339 } 10340 } 10341 } 10342 if (!isMultiple) { 10343 el.selectedIndex = -1; 10344 } 10345} 10346function hasNoMatchingOption(value, options) { 10347 return options.every(function (o) { 10348 return !looseEqual(o, value); 10349 }); 10350} 10351function getValue(option) { 10352 return '_value' in option ? option._value : option.value; 10353} 10354function onCompositionStart(e) { 10355 e.target.composing = true; 10356} 10357function onCompositionEnd(e) { 10358 // prevent triggering an input event for no reason 10359 if (!e.target.composing) return; 10360 e.target.composing = false; 10361 trigger(e.target, 'input'); 10362} 10363function trigger(el, type) { 10364 var e = document.createEvent('HTMLEvents'); 10365 e.initEvent(type, true, true); 10366 el.dispatchEvent(e); 10367} 10368 10369// recursively search for possible transition defined inside the component root 10370function locateNode(vnode) { 10371 // @ts-expect-error 10372 return vnode.componentInstance && (!vnode.data || !vnode.data.transition) ? locateNode(vnode.componentInstance._vnode) : vnode; 10373} 10374var show = { 10375 bind: function (el, _a, vnode) { 10376 var value = _a.value; 10377 vnode = locateNode(vnode); 10378 var transition = vnode.data && vnode.data.transition; 10379 var originalDisplay = el.__vOriginalDisplay = el.style.display === 'none' ? '' : el.style.display; 10380 if (value && transition) { 10381 vnode.data.show = true; 10382 enter(vnode, function () { 10383 el.style.display = originalDisplay; 10384 }); 10385 } else { 10386 el.style.display = value ? originalDisplay : 'none'; 10387 } 10388 }, 10389 update: function (el, _a, vnode) { 10390 var value = _a.value, 10391 oldValue = _a.oldValue; 10392 /* istanbul ignore if */ 10393 if (!value === !oldValue) return; 10394 vnode = locateNode(vnode); 10395 var transition = vnode.data && vnode.data.transition; 10396 if (transition) { 10397 vnode.data.show = true; 10398 if (value) { 10399 enter(vnode, function () { 10400 el.style.display = el.__vOriginalDisplay; 10401 }); 10402 } else { 10403 leave(vnode, function () { 10404 el.style.display = 'none'; 10405 }); 10406 } 10407 } else { 10408 el.style.display = value ? el.__vOriginalDisplay : 'none'; 10409 } 10410 }, 10411 unbind: function (el, binding, vnode, oldVnode, isDestroy) { 10412 if (!isDestroy) { 10413 el.style.display = el.__vOriginalDisplay; 10414 } 10415 } 10416}; 10417var platformDirectives = { 10418 model: directive, 10419 show: show 10420}; 10421 10422// Provides transition support for a single element/component. 10423var transitionProps = { 10424 name: String, 10425 appear: Boolean, 10426 css: Boolean, 10427 mode: String, 10428 type: String, 10429 enterClass: String, 10430 leaveClass: String, 10431 enterToClass: String, 10432 leaveToClass: String, 10433 enterActiveClass: String, 10434 leaveActiveClass: String, 10435 appearClass: String, 10436 appearActiveClass: String, 10437 appearToClass: String, 10438 duration: [Number, String, Object] 10439}; 10440// in case the child is also an abstract component, e.g. <keep-alive> 10441// we want to recursively retrieve the real component to be rendered 10442function getRealChild(vnode) { 10443 var compOptions = vnode && vnode.componentOptions; 10444 if (compOptions && compOptions.Ctor.options.abstract) { 10445 return getRealChild(getFirstComponentChild(compOptions.children)); 10446 } else { 10447 return vnode; 10448 } 10449} 10450function extractTransitionData(comp) { 10451 var data = {}; 10452 var options = comp.$options; 10453 // props 10454 for (var key in options.propsData) { 10455 data[key] = comp[key]; 10456 } 10457 // events. 10458 // extract listeners and pass them directly to the transition methods 10459 var listeners = options._parentListeners; 10460 for (var key in listeners) { 10461 data[camelize(key)] = listeners[key]; 10462 } 10463 return data; 10464} 10465function placeholder(h, rawChild) { 10466 // @ts-expect-error 10467 if (/\d-keep-alive$/.test(rawChild.tag)) { 10468 return h('keep-alive', { 10469 props: rawChild.componentOptions.propsData 10470 }); 10471 } 10472} 10473function hasParentTransition(vnode) { 10474 while (vnode = vnode.parent) { 10475 if (vnode.data.transition) { 10476 return true; 10477 } 10478 } 10479} 10480function isSameChild(child, oldChild) { 10481 return oldChild.key === child.key && oldChild.tag === child.tag; 10482} 10483var isNotTextNode = function (c) { 10484 return c.tag || isAsyncPlaceholder(c); 10485}; 10486var isVShowDirective = function (d) { 10487 return d.name === 'show'; 10488}; 10489var Transition = { 10490 name: 'transition', 10491 props: transitionProps, 10492 abstract: true, 10493 render: function (h) { 10494 var _this = this; 10495 var children = this.$slots.default; 10496 if (!children) { 10497 return; 10498 } 10499 // filter out text nodes (possible whitespaces) 10500 children = children.filter(isNotTextNode); 10501 /* istanbul ignore if */ 10502 if (!children.length) { 10503 return; 10504 } 10505 // warn multiple elements 10506 if ( true && children.length > 1) { 10507 warn$2('<transition> can only be used on a single element. Use ' + '<transition-group> for lists.', this.$parent); 10508 } 10509 var mode = this.mode; 10510 // warn invalid mode 10511 if ( true && mode && mode !== 'in-out' && mode !== 'out-in') { 10512 warn$2('invalid <transition> mode: ' + mode, this.$parent); 10513 } 10514 var rawChild = children[0]; 10515 // if this is a component root node and the component's 10516 // parent container node also has transition, skip. 10517 if (hasParentTransition(this.$vnode)) { 10518 return rawChild; 10519 } 10520 // apply transition data to child 10521 // use getRealChild() to ignore abstract components e.g. keep-alive 10522 var child = getRealChild(rawChild); 10523 /* istanbul ignore if */ 10524 if (!child) { 10525 return rawChild; 10526 } 10527 if (this._leaving) { 10528 return placeholder(h, rawChild); 10529 } 10530 // ensure a key that is unique to the vnode type and to this transition 10531 // component instance. This key will be used to remove pending leaving nodes 10532 // during entering. 10533 var id = "__transition-".concat(this._uid, "-"); 10534 child.key = child.key == null ? child.isComment ? id + 'comment' : id + child.tag : isPrimitive(child.key) ? String(child.key).indexOf(id) === 0 ? child.key : id + child.key : child.key; 10535 var data = (child.data || (child.data = {})).transition = extractTransitionData(this); 10536 var oldRawChild = this._vnode; 10537 var oldChild = getRealChild(oldRawChild); 10538 // mark v-show 10539 // so that the transition module can hand over the control to the directive 10540 if (child.data.directives && child.data.directives.some(isVShowDirective)) { 10541 child.data.show = true; 10542 } 10543 if (oldChild && oldChild.data && !isSameChild(child, oldChild) && !isAsyncPlaceholder(oldChild) && 10544 // #6687 component root is a comment node 10545 !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)) { 10546 // replace old child transition data with fresh one 10547 // important for dynamic transitions! 10548 var oldData = oldChild.data.transition = extend({}, data); 10549 // handle transition mode 10550 if (mode === 'out-in') { 10551 // return placeholder node and queue update when leave finishes 10552 this._leaving = true; 10553 mergeVNodeHook(oldData, 'afterLeave', function () { 10554 _this._leaving = false; 10555 _this.$forceUpdate(); 10556 }); 10557 return placeholder(h, rawChild); 10558 } else if (mode === 'in-out') { 10559 if (isAsyncPlaceholder(child)) { 10560 return oldRawChild; 10561 } 10562 var delayedLeave_1; 10563 var performLeave = function () { 10564 delayedLeave_1(); 10565 }; 10566 mergeVNodeHook(data, 'afterEnter', performLeave); 10567 mergeVNodeHook(data, 'enterCancelled', performLeave); 10568 mergeVNodeHook(oldData, 'delayLeave', function (leave) { 10569 delayedLeave_1 = leave; 10570 }); 10571 } 10572 } 10573 return rawChild; 10574 } 10575}; 10576 10577// Provides transition support for list items. 10578var props = extend({ 10579 tag: String, 10580 moveClass: String 10581}, transitionProps); 10582delete props.mode; 10583var TransitionGroup = { 10584 props: props, 10585 beforeMount: function () { 10586 var _this = this; 10587 var update = this._update; 10588 this._update = function (vnode, hydrating) { 10589 var restoreActiveInstance = setActiveInstance(_this); 10590 // force removing pass 10591 _this.__patch__(_this._vnode, _this.kept, false, 10592 // hydrating 10593 true // removeOnly (!important, avoids unnecessary moves) 10594 ); 10595 _this._vnode = _this.kept; 10596 restoreActiveInstance(); 10597 update.call(_this, vnode, hydrating); 10598 }; 10599 }, 10600 render: function (h) { 10601 var tag = this.tag || this.$vnode.data.tag || 'span'; 10602 var map = Object.create(null); 10603 var prevChildren = this.prevChildren = this.children; 10604 var rawChildren = this.$slots.default || []; 10605 var children = this.children = []; 10606 var transitionData = extractTransitionData(this); 10607 for (var i = 0; i < rawChildren.length; i++) { 10608 var c = rawChildren[i]; 10609 if (c.tag) { 10610 if (c.key != null && String(c.key).indexOf('__vlist') !== 0) { 10611 children.push(c); 10612 map[c.key] = c; 10613 (c.data || (c.data = {})).transition = transitionData; 10614 } else if (true) { 10615 var opts = c.componentOptions; 10616 var name_1 = opts ? getComponentName(opts.Ctor.options) || opts.tag || '' : c.tag; 10617 warn$2("<transition-group> children must be keyed: <".concat(name_1, ">")); 10618 } 10619 } 10620 } 10621 if (prevChildren) { 10622 var kept = []; 10623 var removed = []; 10624 for (var i = 0; i < prevChildren.length; i++) { 10625 var c = prevChildren[i]; 10626 c.data.transition = transitionData; 10627 // @ts-expect-error .getBoundingClientRect is not typed in Node 10628 c.data.pos = c.elm.getBoundingClientRect(); 10629 if (map[c.key]) { 10630 kept.push(c); 10631 } else { 10632 removed.push(c); 10633 } 10634 } 10635 this.kept = h(tag, null, kept); 10636 this.removed = removed; 10637 } 10638 return h(tag, null, children); 10639 }, 10640 updated: function () { 10641 var children = this.prevChildren; 10642 var moveClass = this.moveClass || (this.name || 'v') + '-move'; 10643 if (!children.length || !this.hasMove(children[0].elm, moveClass)) { 10644 return; 10645 } 10646 // we divide the work into three loops to avoid mixing DOM reads and writes 10647 // in each iteration - which helps prevent layout thrashing. 10648 children.forEach(callPendingCbs); 10649 children.forEach(recordPosition); 10650 children.forEach(applyTranslation); 10651 // force reflow to put everything in position 10652 // assign to this to avoid being removed in tree-shaking 10653 // $flow-disable-line 10654 this._reflow = document.body.offsetHeight; 10655 children.forEach(function (c) { 10656 if (c.data.moved) { 10657 var el_1 = c.elm; 10658 var s = el_1.style; 10659 addTransitionClass(el_1, moveClass); 10660 s.transform = s.WebkitTransform = s.transitionDuration = ''; 10661 el_1.addEventListener(transitionEndEvent, el_1._moveCb = function cb(e) { 10662 if (e && e.target !== el_1) { 10663 return; 10664 } 10665 if (!e || /transform$/.test(e.propertyName)) { 10666 el_1.removeEventListener(transitionEndEvent, cb); 10667 el_1._moveCb = null; 10668 removeTransitionClass(el_1, moveClass); 10669 } 10670 }); 10671 } 10672 }); 10673 }, 10674 methods: { 10675 hasMove: function (el, moveClass) { 10676 /* istanbul ignore if */ 10677 if (!hasTransition) { 10678 return false; 10679 } 10680 /* istanbul ignore if */ 10681 if (this._hasMove) { 10682 return this._hasMove; 10683 } 10684 // Detect whether an element with the move class applied has 10685 // CSS transitions. Since the element may be inside an entering 10686 // transition at this very moment, we make a clone of it and remove 10687 // all other transition classes applied to ensure only the move class 10688 // is applied. 10689 var clone = el.cloneNode(); 10690 if (el._transitionClasses) { 10691 el._transitionClasses.forEach(function (cls) { 10692 removeClass(clone, cls); 10693 }); 10694 } 10695 addClass(clone, moveClass); 10696 clone.style.display = 'none'; 10697 this.$el.appendChild(clone); 10698 var info = getTransitionInfo(clone); 10699 this.$el.removeChild(clone); 10700 return this._hasMove = info.hasTransform; 10701 } 10702 } 10703}; 10704function callPendingCbs(c) { 10705 /* istanbul ignore if */ 10706 if (c.elm._moveCb) { 10707 c.elm._moveCb(); 10708 } 10709 /* istanbul ignore if */ 10710 if (c.elm._enterCb) { 10711 c.elm._enterCb(); 10712 } 10713} 10714function recordPosition(c) { 10715 c.data.newPos = c.elm.getBoundingClientRect(); 10716} 10717function applyTranslation(c) { 10718 var oldPos = c.data.pos; 10719 var newPos = c.data.newPos; 10720 var dx = oldPos.left - newPos.left; 10721 var dy = oldPos.top - newPos.top; 10722 if (dx || dy) { 10723 c.data.moved = true; 10724 var s = c.elm.style; 10725 s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)"); 10726 s.transitionDuration = '0s'; 10727 } 10728} 10729var platformComponents = { 10730 Transition: Transition, 10731 TransitionGroup: TransitionGroup 10732}; 10733 10734// install platform specific utils 10735Vue.config.mustUseProp = mustUseProp; 10736Vue.config.isReservedTag = isReservedTag; 10737Vue.config.isReservedAttr = isReservedAttr; 10738Vue.config.getTagNamespace = getTagNamespace; 10739Vue.config.isUnknownElement = isUnknownElement; 10740// install platform runtime directives & components 10741extend(Vue.options.directives, platformDirectives); 10742extend(Vue.options.components, platformComponents); 10743// install platform patch function 10744Vue.prototype.__patch__ = inBrowser ? patch : noop; 10745// public mount method 10746Vue.prototype.$mount = function (el, hydrating) { 10747 el = el && inBrowser ? query(el) : undefined; 10748 return mountComponent(this, el, hydrating); 10749}; 10750// devtools global hook 10751/* istanbul ignore next */ 10752if (inBrowser) { 10753 setTimeout(function () { 10754 if (config.devtools) { 10755 if (devtools) { 10756 devtools.emit('init', Vue); 10757 } else if (true) { 10758 // @ts-expect-error 10759 console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' + 'https://github.com/vuejs/vue-devtools'); 10760 } 10761 } 10762 if ( true && config.productionTip !== false && typeof console !== 'undefined') { 10763 // @ts-expect-error 10764 console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" + "Make sure to turn on production mode when deploying for production.\n" + "See more tips at https://vuejs.org/guide/deployment.html"); 10765 } 10766 }, 0); 10767} 10768var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g; 10769var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g; 10770var buildRegex = cached(function (delimiters) { 10771 var open = delimiters[0].replace(regexEscapeRE, '\\$&'); 10772 var close = delimiters[1].replace(regexEscapeRE, '\\$&'); 10773 return new RegExp(open + '((?:.|\\n)+?)' + close, 'g'); 10774}); 10775function parseText(text, delimiters) { 10776 //@ts-expect-error 10777 var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE; 10778 if (!tagRE.test(text)) { 10779 return; 10780 } 10781 var tokens = []; 10782 var rawTokens = []; 10783 var lastIndex = tagRE.lastIndex = 0; 10784 var match, index, tokenValue; 10785 while (match = tagRE.exec(text)) { 10786 index = match.index; 10787 // push text token 10788 if (index > lastIndex) { 10789 rawTokens.push(tokenValue = text.slice(lastIndex, index)); 10790 tokens.push(JSON.stringify(tokenValue)); 10791 } 10792 // tag token 10793 var exp = parseFilters(match[1].trim()); 10794 tokens.push("_s(".concat(exp, ")")); 10795 rawTokens.push({ 10796 '@binding': exp 10797 }); 10798 lastIndex = index + match[0].length; 10799 } 10800 if (lastIndex < text.length) { 10801 rawTokens.push(tokenValue = text.slice(lastIndex)); 10802 tokens.push(JSON.stringify(tokenValue)); 10803 } 10804 return { 10805 expression: tokens.join('+'), 10806 tokens: rawTokens 10807 }; 10808} 10809function transformNode$1(el, options) { 10810 var warn = options.warn || baseWarn; 10811 var staticClass = getAndRemoveAttr(el, 'class'); 10812 if ( true && staticClass) { 10813 var res = parseText(staticClass, options.delimiters); 10814 if (res) { 10815 warn("class=\"".concat(staticClass, "\": ") + 'Interpolation inside attributes has been removed. ' + 'Use v-bind or the colon shorthand instead. For example, ' + 'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']); 10816 } 10817 } 10818 if (staticClass) { 10819 el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim()); 10820 } 10821 var classBinding = getBindingAttr(el, 'class', false /* getStatic */); 10822 if (classBinding) { 10823 el.classBinding = classBinding; 10824 } 10825} 10826function genData$2(el) { 10827 var data = ''; 10828 if (el.staticClass) { 10829 data += "staticClass:".concat(el.staticClass, ","); 10830 } 10831 if (el.classBinding) { 10832 data += "class:".concat(el.classBinding, ","); 10833 } 10834 return data; 10835} 10836var klass = { 10837 staticKeys: ['staticClass'], 10838 transformNode: transformNode$1, 10839 genData: genData$2 10840}; 10841function transformNode(el, options) { 10842 var warn = options.warn || baseWarn; 10843 var staticStyle = getAndRemoveAttr(el, 'style'); 10844 if (staticStyle) { 10845 /* istanbul ignore if */ 10846 if (true) { 10847 var res = parseText(staticStyle, options.delimiters); 10848 if (res) { 10849 warn("style=\"".concat(staticStyle, "\": ") + 'Interpolation inside attributes has been removed. ' + 'Use v-bind or the colon shorthand instead. For example, ' + 'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']); 10850 } 10851 } 10852 el.staticStyle = JSON.stringify(parseStyleText(staticStyle)); 10853 } 10854 var styleBinding = getBindingAttr(el, 'style', false /* getStatic */); 10855 if (styleBinding) { 10856 el.styleBinding = styleBinding; 10857 } 10858} 10859function genData$1(el) { 10860 var data = ''; 10861 if (el.staticStyle) { 10862 data += "staticStyle:".concat(el.staticStyle, ","); 10863 } 10864 if (el.styleBinding) { 10865 data += "style:(".concat(el.styleBinding, "),"); 10866 } 10867 return data; 10868} 10869var style = { 10870 staticKeys: ['staticStyle'], 10871 transformNode: transformNode, 10872 genData: genData$1 10873}; 10874var decoder; 10875var he = { 10876 decode: function (html) { 10877 decoder = decoder || document.createElement('div'); 10878 decoder.innerHTML = html; 10879 return decoder.textContent; 10880 } 10881}; 10882var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' + 'link,meta,param,source,track,wbr'); 10883// Elements that you can, intentionally, leave open 10884// (and which close themselves) 10885var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'); 10886// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3 10887// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content 10888var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' + 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' + 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' + 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' + 'title,tr,track'); 10889 10890/** 10891 * Not type-checking this file because it's mostly vendor code. 10892 */ 10893// Regular Expressions for parsing tags and attributes 10894var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 10895var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/; 10896var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*"); 10897var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")"); 10898var startTagOpen = new RegExp("^<".concat(qnameCapture)); 10899var startTagClose = /^\s*(\/?)>/; 10900var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>")); 10901var doctype = /^<!DOCTYPE [^>]+>/i; 10902// #7298: escape - to avoid being passed as HTML comment when inlined in page 10903var comment = /^<!\--/; 10904var conditionalComment = /^<!\[/; 10905// Special Elements (can contain anything) 10906var isPlainTextElement = makeMap('script,style,textarea', true); 10907var reCache = {}; 10908var decodingMap = { 10909 '<': '<', 10910 '>': '>', 10911 '"': '"', 10912 '&': '&', 10913 ' ': '\n', 10914 '	': '\t', 10915 ''': "'" 10916}; 10917var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g; 10918var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g; 10919// #5992 10920var isIgnoreNewlineTag = makeMap('pre,textarea', true); 10921var shouldIgnoreFirstNewline = function (tag, html) { 10922 return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'; 10923}; 10924function decodeAttr(value, shouldDecodeNewlines) { 10925 var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr; 10926 return value.replace(re, function (match) { 10927 return decodingMap[match]; 10928 }); 10929} 10930function parseHTML(html, options) { 10931 var stack = []; 10932 var expectHTML = options.expectHTML; 10933 var isUnaryTag = options.isUnaryTag || no; 10934 var canBeLeftOpenTag = options.canBeLeftOpenTag || no; 10935 var index = 0; 10936 var last, lastTag; 10937 var _loop_1 = function () { 10938 last = html; 10939 // Make sure we're not in a plaintext content element like script/style 10940 if (!lastTag || !isPlainTextElement(lastTag)) { 10941 var textEnd = html.indexOf('<'); 10942 if (textEnd === 0) { 10943 // Comment: 10944 if (comment.test(html)) { 10945 var commentEnd = html.indexOf('-->'); 10946 if (commentEnd >= 0) { 10947 if (options.shouldKeepComment && options.comment) { 10948 options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3); 10949 } 10950 advance(commentEnd + 3); 10951 return "continue"; 10952 } 10953 } 10954 // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment 10955 if (conditionalComment.test(html)) { 10956 var conditionalEnd = html.indexOf(']>'); 10957 if (conditionalEnd >= 0) { 10958 advance(conditionalEnd + 2); 10959 return "continue"; 10960 } 10961 } 10962 // Doctype: 10963 var doctypeMatch = html.match(doctype); 10964 if (doctypeMatch) { 10965 advance(doctypeMatch[0].length); 10966 return "continue"; 10967 } 10968 // End tag: 10969 var endTagMatch = html.match(endTag); 10970 if (endTagMatch) { 10971 var curIndex = index; 10972 advance(endTagMatch[0].length); 10973 parseEndTag(endTagMatch[1], curIndex, index); 10974 return "continue"; 10975 } 10976 // Start tag: 10977 var startTagMatch = parseStartTag(); 10978 if (startTagMatch) { 10979 handleStartTag(startTagMatch); 10980 if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) { 10981 advance(1); 10982 } 10983 return "continue"; 10984 } 10985 } 10986 var text = void 0, 10987 rest = void 0, 10988 next = void 0; 10989 if (textEnd >= 0) { 10990 rest = html.slice(textEnd); 10991 while (!endTag.test(rest) && !startTagOpen.test(rest) && !comment.test(rest) && !conditionalComment.test(rest)) { 10992 // < in plain text, be forgiving and treat it as text 10993 next = rest.indexOf('<', 1); 10994 if (next < 0) break; 10995 textEnd += next; 10996 rest = html.slice(textEnd); 10997 } 10998 text = html.substring(0, textEnd); 10999 } 11000 if (textEnd < 0) { 11001 text = html; 11002 } 11003 if (text) { 11004 advance(text.length); 11005 } 11006 if (options.chars && text) { 11007 options.chars(text, index - text.length, index); 11008 } 11009 } else { 11010 var endTagLength_1 = 0; 11011 var stackedTag_1 = lastTag.toLowerCase(); 11012 var reStackedTag = reCache[stackedTag_1] || (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i')); 11013 var rest = html.replace(reStackedTag, function (all, text, endTag) { 11014 endTagLength_1 = endTag.length; 11015 if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') { 11016 text = text.replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298 11017 .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1'); 11018 } 11019 if (shouldIgnoreFirstNewline(stackedTag_1, text)) { 11020 text = text.slice(1); 11021 } 11022 if (options.chars) { 11023 options.chars(text); 11024 } 11025 return ''; 11026 }); 11027 index += html.length - rest.length; 11028 html = rest; 11029 parseEndTag(stackedTag_1, index - endTagLength_1, index); 11030 } 11031 if (html === last) { 11032 options.chars && options.chars(html); 11033 if ( true && !stack.length && options.warn) { 11034 options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), { 11035 start: index + html.length 11036 }); 11037 } 11038 return "break"; 11039 } 11040 }; 11041 while (html) { 11042 var state_1 = _loop_1(); 11043 if (state_1 === "break") break; 11044 } 11045 // Clean up any remaining tags 11046 parseEndTag(); 11047 function advance(n) { 11048 index += n; 11049 html = html.substring(n); 11050 } 11051 function parseStartTag() { 11052 var start = html.match(startTagOpen); 11053 if (start) { 11054 var match = { 11055 tagName: start[1], 11056 attrs: [], 11057 start: index 11058 }; 11059 advance(start[0].length); 11060 var end = void 0, 11061 attr = void 0; 11062 while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) { 11063 attr.start = index; 11064 advance(attr[0].length); 11065 attr.end = index; 11066 match.attrs.push(attr); 11067 } 11068 if (end) { 11069 match.unarySlash = end[1]; 11070 advance(end[0].length); 11071 match.end = index; 11072 return match; 11073 } 11074 } 11075 } 11076 function handleStartTag(match) { 11077 var tagName = match.tagName; 11078 var unarySlash = match.unarySlash; 11079 if (expectHTML) { 11080 if (lastTag === 'p' && isNonPhrasingTag(tagName)) { 11081 parseEndTag(lastTag); 11082 } 11083 if (canBeLeftOpenTag(tagName) && lastTag === tagName) { 11084 parseEndTag(tagName); 11085 } 11086 } 11087 var unary = isUnaryTag(tagName) || !!unarySlash; 11088 var l = match.attrs.length; 11089 var attrs = new Array(l); 11090 for (var i = 0; i < l; i++) { 11091 var args = match.attrs[i]; 11092 var value = args[3] || args[4] || args[5] || ''; 11093 var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' ? options.shouldDecodeNewlinesForHref : options.shouldDecodeNewlines; 11094 attrs[i] = { 11095 name: args[1], 11096 value: decodeAttr(value, shouldDecodeNewlines) 11097 }; 11098 if ( true && options.outputSourceRange) { 11099 attrs[i].start = args.start + args[0].match(/^\s*/).length; 11100 attrs[i].end = args.end; 11101 } 11102 } 11103 if (!unary) { 11104 stack.push({ 11105 tag: tagName, 11106 lowerCasedTag: tagName.toLowerCase(), 11107 attrs: attrs, 11108 start: match.start, 11109 end: match.end 11110 }); 11111 lastTag = tagName; 11112 } 11113 if (options.start) { 11114 options.start(tagName, attrs, unary, match.start, match.end); 11115 } 11116 } 11117 function parseEndTag(tagName, start, end) { 11118 var pos, lowerCasedTagName; 11119 if (start == null) start = index; 11120 if (end == null) end = index; 11121 // Find the closest opened tag of the same type 11122 if (tagName) { 11123 lowerCasedTagName = tagName.toLowerCase(); 11124 for (pos = stack.length - 1; pos >= 0; pos--) { 11125 if (stack[pos].lowerCasedTag === lowerCasedTagName) { 11126 break; 11127 } 11128 } 11129 } else { 11130 // If no tag name is provided, clean shop 11131 pos = 0; 11132 } 11133 if (pos >= 0) { 11134 // Close all the open elements, up the stack 11135 for (var i = stack.length - 1; i >= pos; i--) { 11136 if ( true && (i > pos || !tagName) && options.warn) { 11137 options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), { 11138 start: stack[i].start, 11139 end: stack[i].end 11140 }); 11141 } 11142 if (options.end) { 11143 options.end(stack[i].tag, start, end); 11144 } 11145 } 11146 // Remove the open elements from the stack 11147 stack.length = pos; 11148 lastTag = pos && stack[pos - 1].tag; 11149 } else if (lowerCasedTagName === 'br') { 11150 if (options.start) { 11151 options.start(tagName, [], true, start, end); 11152 } 11153 } else if (lowerCasedTagName === 'p') { 11154 if (options.start) { 11155 options.start(tagName, [], false, start, end); 11156 } 11157 if (options.end) { 11158 options.end(tagName, start, end); 11159 } 11160 } 11161 } 11162} 11163var onRE = /^@|^v-on:/; 11164var dirRE = /^v-|^@|^:|^#/; 11165var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/; 11166var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/; 11167var stripParensRE = /^\(|\)$/g; 11168var dynamicArgRE = /^\[.*\]$/; 11169var argRE = /:(.*)$/; 11170var bindRE = /^:|^\.|^v-bind:/; 11171var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g; 11172var slotRE = /^v-slot(:|$)|^#/; 11173var lineBreakRE = /[\r\n]/; 11174var whitespaceRE = /[ \f\t\r\n]+/g; 11175var invalidAttributeRE = /[\s"'<>\/=]/; 11176var decodeHTMLCached = cached(he.decode); 11177var emptySlotScopeToken = "_empty_"; 11178// configurable state 11179var warn; 11180var delimiters; 11181var transforms; 11182var preTransforms; 11183var postTransforms; 11184var platformIsPreTag; 11185var platformMustUseProp; 11186var platformGetTagNamespace; 11187var maybeComponent; 11188function createASTElement(tag, attrs, parent) { 11189 return { 11190 type: 1, 11191 tag: tag, 11192 attrsList: attrs, 11193 attrsMap: makeAttrsMap(attrs), 11194 rawAttrsMap: {}, 11195 parent: parent, 11196 children: [] 11197 }; 11198} 11199/** 11200 * Convert HTML string to AST. 11201 */ 11202function parse(template, options) { 11203 warn = options.warn || baseWarn; 11204 platformIsPreTag = options.isPreTag || no; 11205 platformMustUseProp = options.mustUseProp || no; 11206 platformGetTagNamespace = options.getTagNamespace || no; 11207 var isReservedTag = options.isReservedTag || no; 11208 maybeComponent = function (el) { 11209 return !!(el.component || el.attrsMap[':is'] || el.attrsMap['v-bind:is'] || !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag))); 11210 }; 11211 transforms = pluckModuleFunction(options.modules, 'transformNode'); 11212 preTransforms = pluckModuleFunction(options.modules, 'preTransformNode'); 11213 postTransforms = pluckModuleFunction(options.modules, 'postTransformNode'); 11214 delimiters = options.delimiters; 11215 var stack = []; 11216 var preserveWhitespace = options.preserveWhitespace !== false; 11217 var whitespaceOption = options.whitespace; 11218 var root; 11219 var currentParent; 11220 var inVPre = false; 11221 var inPre = false; 11222 var warned = false; 11223 function warnOnce(msg, range) { 11224 if (!warned) { 11225 warned = true; 11226 warn(msg, range); 11227 } 11228 } 11229 function closeElement(element) { 11230 trimEndingWhitespace(element); 11231 if (!inVPre && !element.processed) { 11232 element = processElement(element, options); 11233 } 11234 // tree management 11235 if (!stack.length && element !== root) { 11236 // allow root elements with v-if, v-else-if and v-else 11237 if (root.if && (element.elseif || element.else)) { 11238 if (true) { 11239 checkRootConstraints(element); 11240 } 11241 addIfCondition(root, { 11242 exp: element.elseif, 11243 block: element 11244 }); 11245 } else if (true) { 11246 warnOnce("Component template should contain exactly one root element. " + "If you are using v-if on multiple elements, " + "use v-else-if to chain them instead.", { 11247 start: element.start 11248 }); 11249 } 11250 } 11251 if (currentParent && !element.forbidden) { 11252 if (element.elseif || element.else) { 11253 processIfConditions(element, currentParent); 11254 } else { 11255 if (element.slotScope) { 11256 // scoped slot 11257 // keep it in the children list so that v-else(-if) conditions can 11258 // find it as the prev node. 11259 var name_1 = element.slotTarget || '"default"'; 11260 (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element; 11261 } 11262 currentParent.children.push(element); 11263 element.parent = currentParent; 11264 } 11265 } 11266 // final children cleanup 11267 // filter out scoped slots 11268 element.children = element.children.filter(function (c) { 11269 return !c.slotScope; 11270 }); 11271 // remove trailing whitespace node again 11272 trimEndingWhitespace(element); 11273 // check pre state 11274 if (element.pre) { 11275 inVPre = false; 11276 } 11277 if (platformIsPreTag(element.tag)) { 11278 inPre = false; 11279 } 11280 // apply post-transforms 11281 for (var i = 0; i < postTransforms.length; i++) { 11282 postTransforms[i](element, options); 11283 } 11284 } 11285 function trimEndingWhitespace(el) { 11286 // remove trailing whitespace node 11287 if (!inPre) { 11288 var lastNode = void 0; 11289 while ((lastNode = el.children[el.children.length - 1]) && lastNode.type === 3 && lastNode.text === ' ') { 11290 el.children.pop(); 11291 } 11292 } 11293 } 11294 function checkRootConstraints(el) { 11295 if (el.tag === 'slot' || el.tag === 'template') { 11296 warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") + 'contain multiple nodes.', { 11297 start: el.start 11298 }); 11299 } 11300 if (el.attrsMap.hasOwnProperty('v-for')) { 11301 warnOnce('Cannot use v-for on stateful component root element because ' + 'it renders multiple elements.', el.rawAttrsMap['v-for']); 11302 } 11303 } 11304 parseHTML(template, { 11305 warn: warn, 11306 expectHTML: options.expectHTML, 11307 isUnaryTag: options.isUnaryTag, 11308 canBeLeftOpenTag: options.canBeLeftOpenTag, 11309 shouldDecodeNewlines: options.shouldDecodeNewlines, 11310 shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref, 11311 shouldKeepComment: options.comments, 11312 outputSourceRange: options.outputSourceRange, 11313 start: function (tag, attrs, unary, start, end) { 11314 // check namespace. 11315 // inherit parent ns if there is one 11316 var ns = currentParent && currentParent.ns || platformGetTagNamespace(tag); 11317 // handle IE svg bug 11318 /* istanbul ignore if */ 11319 if (isIE && ns === 'svg') { 11320 attrs = guardIESVGBug(attrs); 11321 } 11322 var element = createASTElement(tag, attrs, currentParent); 11323 if (ns) { 11324 element.ns = ns; 11325 } 11326 if (true) { 11327 if (options.outputSourceRange) { 11328 element.start = start; 11329 element.end = end; 11330 element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) { 11331 cumulated[attr.name] = attr; 11332 return cumulated; 11333 }, {}); 11334 } 11335 attrs.forEach(function (attr) { 11336 if (invalidAttributeRE.test(attr.name)) { 11337 warn("Invalid dynamic argument expression: attribute names cannot contain " + "spaces, quotes, <, >, / or =.", options.outputSourceRange ? { 11338 start: attr.start + attr.name.indexOf("["), 11339 end: attr.start + attr.name.length 11340 } : undefined); 11341 } 11342 }); 11343 } 11344 if (isForbiddenTag(element) && !isServerRendering()) { 11345 element.forbidden = true; 11346 true && warn('Templates should only be responsible for mapping the state to the ' + 'UI. Avoid placing tags with side-effects in your templates, such as ' + "<".concat(tag, ">") + ', as they will not be parsed.', { 11347 start: element.start 11348 }); 11349 } 11350 // apply pre-transforms 11351 for (var i = 0; i < preTransforms.length; i++) { 11352 element = preTransforms[i](element, options) || element; 11353 } 11354 if (!inVPre) { 11355 processPre(element); 11356 if (element.pre) { 11357 inVPre = true; 11358 } 11359 } 11360 if (platformIsPreTag(element.tag)) { 11361 inPre = true; 11362 } 11363 if (inVPre) { 11364 processRawAttrs(element); 11365 } else if (!element.processed) { 11366 // structural directives 11367 processFor(element); 11368 processIf(element); 11369 processOnce(element); 11370 } 11371 if (!root) { 11372 root = element; 11373 if (true) { 11374 checkRootConstraints(root); 11375 } 11376 } 11377 if (!unary) { 11378 currentParent = element; 11379 stack.push(element); 11380 } else { 11381 closeElement(element); 11382 } 11383 }, 11384 end: function (tag, start, end) { 11385 var element = stack[stack.length - 1]; 11386 // pop stack 11387 stack.length -= 1; 11388 currentParent = stack[stack.length - 1]; 11389 if ( true && options.outputSourceRange) { 11390 element.end = end; 11391 } 11392 closeElement(element); 11393 }, 11394 chars: function (text, start, end) { 11395 if (!currentParent) { 11396 if (true) { 11397 if (text === template) { 11398 warnOnce('Component template requires a root element, rather than just text.', { 11399 start: start 11400 }); 11401 } else if (text = text.trim()) { 11402 warnOnce("text \"".concat(text, "\" outside root element will be ignored."), { 11403 start: start 11404 }); 11405 } 11406 } 11407 return; 11408 } 11409 // IE textarea placeholder bug 11410 /* istanbul ignore if */ 11411 if (isIE && currentParent.tag === 'textarea' && currentParent.attrsMap.placeholder === text) { 11412 return; 11413 } 11414 var children = currentParent.children; 11415 if (inPre || text.trim()) { 11416 text = isTextTag(currentParent) ? text : decodeHTMLCached(text); 11417 } else if (!children.length) { 11418 // remove the whitespace-only node right after an opening tag 11419 text = ''; 11420 } else if (whitespaceOption) { 11421 if (whitespaceOption === 'condense') { 11422 // in condense mode, remove the whitespace node if it contains 11423 // line break, otherwise condense to a single space 11424 text = lineBreakRE.test(text) ? '' : ' '; 11425 } else { 11426 text = ' '; 11427 } 11428 } else { 11429 text = preserveWhitespace ? ' ' : ''; 11430 } 11431 if (text) { 11432 if (!inPre && whitespaceOption === 'condense') { 11433 // condense consecutive whitespaces into single space 11434 text = text.replace(whitespaceRE, ' '); 11435 } 11436 var res = void 0; 11437 var child = void 0; 11438 if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) { 11439 child = { 11440 type: 2, 11441 expression: res.expression, 11442 tokens: res.tokens, 11443 text: text 11444 }; 11445 } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') { 11446 child = { 11447 type: 3, 11448 text: text 11449 }; 11450 } 11451 if (child) { 11452 if ( true && options.outputSourceRange) { 11453 child.start = start; 11454 child.end = end; 11455 } 11456 children.push(child); 11457 } 11458 } 11459 }, 11460 comment: function (text, start, end) { 11461 // adding anything as a sibling to the root node is forbidden 11462 // comments should still be allowed, but ignored 11463 if (currentParent) { 11464 var child = { 11465 type: 3, 11466 text: text, 11467 isComment: true 11468 }; 11469 if ( true && options.outputSourceRange) { 11470 child.start = start; 11471 child.end = end; 11472 } 11473 currentParent.children.push(child); 11474 } 11475 } 11476 }); 11477 return root; 11478} 11479function processPre(el) { 11480 if (getAndRemoveAttr(el, 'v-pre') != null) { 11481 el.pre = true; 11482 } 11483} 11484function processRawAttrs(el) { 11485 var list = el.attrsList; 11486 var len = list.length; 11487 if (len) { 11488 var attrs = el.attrs = new Array(len); 11489 for (var i = 0; i < len; i++) { 11490 attrs[i] = { 11491 name: list[i].name, 11492 value: JSON.stringify(list[i].value) 11493 }; 11494 if (list[i].start != null) { 11495 attrs[i].start = list[i].start; 11496 attrs[i].end = list[i].end; 11497 } 11498 } 11499 } else if (!el.pre) { 11500 // non root node in pre blocks with no attributes 11501 el.plain = true; 11502 } 11503} 11504function processElement(element, options) { 11505 processKey(element); 11506 // determine whether this is a plain element after 11507 // removing structural attributes 11508 element.plain = !element.key && !element.scopedSlots && !element.attrsList.length; 11509 processRef(element); 11510 processSlotContent(element); 11511 processSlotOutlet(element); 11512 processComponent(element); 11513 for (var i = 0; i < transforms.length; i++) { 11514 element = transforms[i](element, options) || element; 11515 } 11516 processAttrs(element); 11517 return element; 11518} 11519function processKey(el) { 11520 var exp = getBindingAttr(el, 'key'); 11521 if (exp) { 11522 if (true) { 11523 if (el.tag === 'template') { 11524 warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key')); 11525 } 11526 if (el.for) { 11527 var iterator = el.iterator2 || el.iterator1; 11528 var parent_1 = el.parent; 11529 if (iterator && iterator === exp && parent_1 && parent_1.tag === 'transition-group') { 11530 warn("Do not use v-for index as key on <transition-group> children, " + "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */); 11531 } 11532 } 11533 } 11534 el.key = exp; 11535 } 11536} 11537function processRef(el) { 11538 var ref = getBindingAttr(el, 'ref'); 11539 if (ref) { 11540 el.ref = ref; 11541 el.refInFor = checkInFor(el); 11542 } 11543} 11544function processFor(el) { 11545 var exp; 11546 if (exp = getAndRemoveAttr(el, 'v-for')) { 11547 var res = parseFor(exp); 11548 if (res) { 11549 extend(el, res); 11550 } else if (true) { 11551 warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']); 11552 } 11553 } 11554} 11555function parseFor(exp) { 11556 var inMatch = exp.match(forAliasRE); 11557 if (!inMatch) return; 11558 var res = {}; 11559 res.for = inMatch[2].trim(); 11560 var alias = inMatch[1].trim().replace(stripParensRE, ''); 11561 var iteratorMatch = alias.match(forIteratorRE); 11562 if (iteratorMatch) { 11563 res.alias = alias.replace(forIteratorRE, '').trim(); 11564 res.iterator1 = iteratorMatch[1].trim(); 11565 if (iteratorMatch[2]) { 11566 res.iterator2 = iteratorMatch[2].trim(); 11567 } 11568 } else { 11569 res.alias = alias; 11570 } 11571 return res; 11572} 11573function processIf(el) { 11574 var exp = getAndRemoveAttr(el, 'v-if'); 11575 if (exp) { 11576 el.if = exp; 11577 addIfCondition(el, { 11578 exp: exp, 11579 block: el 11580 }); 11581 } else { 11582 if (getAndRemoveAttr(el, 'v-else') != null) { 11583 el.else = true; 11584 } 11585 var elseif = getAndRemoveAttr(el, 'v-else-if'); 11586 if (elseif) { 11587 el.elseif = elseif; 11588 } 11589 } 11590} 11591function processIfConditions(el, parent) { 11592 var prev = findPrevElement(parent.children); 11593 if (prev && prev.if) { 11594 addIfCondition(prev, { 11595 exp: el.elseif, 11596 block: el 11597 }); 11598 } else if (true) { 11599 warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") + "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']); 11600 } 11601} 11602function findPrevElement(children) { 11603 var i = children.length; 11604 while (i--) { 11605 if (children[i].type === 1) { 11606 return children[i]; 11607 } else { 11608 if ( true && children[i].text !== ' ') { 11609 warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") + "will be ignored.", children[i]); 11610 } 11611 children.pop(); 11612 } 11613 } 11614} 11615function addIfCondition(el, condition) { 11616 if (!el.ifConditions) { 11617 el.ifConditions = []; 11618 } 11619 el.ifConditions.push(condition); 11620} 11621function processOnce(el) { 11622 var once = getAndRemoveAttr(el, 'v-once'); 11623 if (once != null) { 11624 el.once = true; 11625 } 11626} 11627// handle content being passed to a component as slot, 11628// e.g. <template slot="xxx">, <div slot-scope="xxx"> 11629function processSlotContent(el) { 11630 var slotScope; 11631 if (el.tag === 'template') { 11632 slotScope = getAndRemoveAttr(el, 'scope'); 11633 /* istanbul ignore if */ 11634 if ( true && slotScope) { 11635 warn("the \"scope\" attribute for scoped slots have been deprecated and " + "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " + "can also be used on plain elements in addition to <template> to " + "denote scoped slots.", el.rawAttrsMap['scope'], true); 11636 } 11637 el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope'); 11638 } else if (slotScope = getAndRemoveAttr(el, 'slot-scope')) { 11639 /* istanbul ignore if */ 11640 if ( true && el.attrsMap['v-for']) { 11641 warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") + "(v-for takes higher priority). Use a wrapper <template> for the " + "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true); 11642 } 11643 el.slotScope = slotScope; 11644 } 11645 // slot="xxx" 11646 var slotTarget = getBindingAttr(el, 'slot'); 11647 if (slotTarget) { 11648 el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget; 11649 el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']); 11650 // preserve slot as an attribute for native shadow DOM compat 11651 // only for non-scoped slots. 11652 if (el.tag !== 'template' && !el.slotScope) { 11653 addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot')); 11654 } 11655 } 11656 // 2.6 v-slot syntax 11657 { 11658 if (el.tag === 'template') { 11659 // v-slot on <template> 11660 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 11661 if (slotBinding) { 11662 if (true) { 11663 if (el.slotTarget || el.slotScope) { 11664 warn("Unexpected mixed usage of different slot syntaxes.", el); 11665 } 11666 if (el.parent && !maybeComponent(el.parent)) { 11667 warn("<template v-slot> can only appear at the root level inside " + "the receiving component", el); 11668 } 11669 } 11670 var _a = getSlotName(slotBinding), 11671 name_2 = _a.name, 11672 dynamic = _a.dynamic; 11673 el.slotTarget = name_2; 11674 el.slotTargetDynamic = dynamic; 11675 el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf 11676 } 11677 } else { 11678 // v-slot on component, denotes default slot 11679 var slotBinding = getAndRemoveAttrByRegex(el, slotRE); 11680 if (slotBinding) { 11681 if (true) { 11682 if (!maybeComponent(el)) { 11683 warn("v-slot can only be used on components or <template>.", slotBinding); 11684 } 11685 if (el.slotScope || el.slotTarget) { 11686 warn("Unexpected mixed usage of different slot syntaxes.", el); 11687 } 11688 if (el.scopedSlots) { 11689 warn("To avoid scope ambiguity, the default slot should also use " + "<template> syntax when there are other named slots.", slotBinding); 11690 } 11691 } 11692 // add the component's children to its default slot 11693 var slots = el.scopedSlots || (el.scopedSlots = {}); 11694 var _b = getSlotName(slotBinding), 11695 name_3 = _b.name, 11696 dynamic = _b.dynamic; 11697 var slotContainer_1 = slots[name_3] = createASTElement('template', [], el); 11698 slotContainer_1.slotTarget = name_3; 11699 slotContainer_1.slotTargetDynamic = dynamic; 11700 slotContainer_1.children = el.children.filter(function (c) { 11701 if (!c.slotScope) { 11702 c.parent = slotContainer_1; 11703 return true; 11704 } 11705 }); 11706 slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken; 11707 // remove children as they are returned from scopedSlots now 11708 el.children = []; 11709 // mark el non-plain so data gets generated 11710 el.plain = false; 11711 } 11712 } 11713 } 11714} 11715function getSlotName(binding) { 11716 var name = binding.name.replace(slotRE, ''); 11717 if (!name) { 11718 if (binding.name[0] !== '#') { 11719 name = 'default'; 11720 } else if (true) { 11721 warn("v-slot shorthand syntax requires a slot name.", binding); 11722 } 11723 } 11724 return dynamicArgRE.test(name) ? 11725 // dynamic [name] 11726 { 11727 name: name.slice(1, -1), 11728 dynamic: true 11729 } : 11730 // static name 11731 { 11732 name: "\"".concat(name, "\""), 11733 dynamic: false 11734 }; 11735} 11736// handle <slot/> outlets 11737function processSlotOutlet(el) { 11738 if (el.tag === 'slot') { 11739 el.slotName = getBindingAttr(el, 'name'); 11740 if ( true && el.key) { 11741 warn("`key` does not work on <slot> because slots are abstract outlets " + "and can possibly expand into multiple elements. " + "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key')); 11742 } 11743 } 11744} 11745function processComponent(el) { 11746 var binding; 11747 if (binding = getBindingAttr(el, 'is')) { 11748 el.component = binding; 11749 } 11750 if (getAndRemoveAttr(el, 'inline-template') != null) { 11751 el.inlineTemplate = true; 11752 } 11753} 11754function processAttrs(el) { 11755 var list = el.attrsList; 11756 var i, l, name, rawName, value, modifiers, syncGen, isDynamic; 11757 for (i = 0, l = list.length; i < l; i++) { 11758 name = rawName = list[i].name; 11759 value = list[i].value; 11760 if (dirRE.test(name)) { 11761 // mark element as dynamic 11762 el.hasBindings = true; 11763 // modifiers 11764 modifiers = parseModifiers(name.replace(dirRE, '')); 11765 // support .foo shorthand syntax for the .prop modifier 11766 if (modifiers) { 11767 name = name.replace(modifierRE, ''); 11768 } 11769 if (bindRE.test(name)) { 11770 // v-bind 11771 name = name.replace(bindRE, ''); 11772 value = parseFilters(value); 11773 isDynamic = dynamicArgRE.test(name); 11774 if (isDynamic) { 11775 name = name.slice(1, -1); 11776 } 11777 if ( true && value.trim().length === 0) { 11778 warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\"")); 11779 } 11780 if (modifiers) { 11781 if (modifiers.prop && !isDynamic) { 11782 name = camelize(name); 11783 if (name === 'innerHtml') name = 'innerHTML'; 11784 } 11785 if (modifiers.camel && !isDynamic) { 11786 name = camelize(name); 11787 } 11788 if (modifiers.sync) { 11789 syncGen = genAssignmentCode(value, "$event"); 11790 if (!isDynamic) { 11791 addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]); 11792 if (hyphenate(name) !== camelize(name)) { 11793 addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]); 11794 } 11795 } else { 11796 // handler w/ dynamic event name 11797 addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic 11798 ); 11799 } 11800 } 11801 } 11802 if (modifiers && modifiers.prop || !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)) { 11803 addProp(el, name, value, list[i], isDynamic); 11804 } else { 11805 addAttr(el, name, value, list[i], isDynamic); 11806 } 11807 } else if (onRE.test(name)) { 11808 // v-on 11809 name = name.replace(onRE, ''); 11810 isDynamic = dynamicArgRE.test(name); 11811 if (isDynamic) { 11812 name = name.slice(1, -1); 11813 } 11814 addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic); 11815 } else { 11816 // normal directives 11817 name = name.replace(dirRE, ''); 11818 // parse arg 11819 var argMatch = name.match(argRE); 11820 var arg = argMatch && argMatch[1]; 11821 isDynamic = false; 11822 if (arg) { 11823 name = name.slice(0, -(arg.length + 1)); 11824 if (dynamicArgRE.test(arg)) { 11825 arg = arg.slice(1, -1); 11826 isDynamic = true; 11827 } 11828 } 11829 addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]); 11830 if ( true && name === 'model') { 11831 checkForAliasModel(el, value); 11832 } 11833 } 11834 } else { 11835 // literal attribute 11836 if (true) { 11837 var res = parseText(value, delimiters); 11838 if (res) { 11839 warn("".concat(name, "=\"").concat(value, "\": ") + 'Interpolation inside attributes has been removed. ' + 'Use v-bind or the colon shorthand instead. For example, ' + 'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]); 11840 } 11841 } 11842 addAttr(el, name, JSON.stringify(value), list[i]); 11843 // #6887 firefox doesn't update muted state if set via attribute 11844 // even immediately after element creation 11845 if (!el.component && name === 'muted' && platformMustUseProp(el.tag, el.attrsMap.type, name)) { 11846 addProp(el, name, 'true', list[i]); 11847 } 11848 } 11849 } 11850} 11851function checkInFor(el) { 11852 var parent = el; 11853 while (parent) { 11854 if (parent.for !== undefined) { 11855 return true; 11856 } 11857 parent = parent.parent; 11858 } 11859 return false; 11860} 11861function parseModifiers(name) { 11862 var match = name.match(modifierRE); 11863 if (match) { 11864 var ret_1 = {}; 11865 match.forEach(function (m) { 11866 ret_1[m.slice(1)] = true; 11867 }); 11868 return ret_1; 11869 } 11870} 11871function makeAttrsMap(attrs) { 11872 var map = {}; 11873 for (var i = 0, l = attrs.length; i < l; i++) { 11874 if ( true && map[attrs[i].name] && !isIE && !isEdge) { 11875 warn('duplicate attribute: ' + attrs[i].name, attrs[i]); 11876 } 11877 map[attrs[i].name] = attrs[i].value; 11878 } 11879 return map; 11880} 11881// for script (e.g. type="x/template") or style, do not decode content 11882function isTextTag(el) { 11883 return el.tag === 'script' || el.tag === 'style'; 11884} 11885function isForbiddenTag(el) { 11886 return el.tag === 'style' || el.tag === 'script' && (!el.attrsMap.type || el.attrsMap.type === 'text/javascript'); 11887} 11888var ieNSBug = /^xmlns:NS\d+/; 11889var ieNSPrefix = /^NS\d+:/; 11890/* istanbul ignore next */ 11891function guardIESVGBug(attrs) { 11892 var res = []; 11893 for (var i = 0; i < attrs.length; i++) { 11894 var attr = attrs[i]; 11895 if (!ieNSBug.test(attr.name)) { 11896 attr.name = attr.name.replace(ieNSPrefix, ''); 11897 res.push(attr); 11898 } 11899 } 11900 return res; 11901} 11902function checkForAliasModel(el, value) { 11903 var _el = el; 11904 while (_el) { 11905 if (_el.for && _el.alias === value) { 11906 warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") + "You are binding v-model directly to a v-for iteration alias. " + "This will not be able to modify the v-for source array because " + "writing to the alias is like modifying a function local variable. " + "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']); 11907 } 11908 _el = _el.parent; 11909 } 11910} 11911 11912/** 11913 * Expand input[v-model] with dynamic type bindings into v-if-else chains 11914 * Turn this: 11915 * <input v-model="data[type]" :type="type"> 11916 * into this: 11917 * <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]"> 11918 * <input v-else-if="type === 'radio'" type="radio" v-model="data[type]"> 11919 * <input v-else :type="type" v-model="data[type]"> 11920 */ 11921function preTransformNode(el, options) { 11922 if (el.tag === 'input') { 11923 var map = el.attrsMap; 11924 if (!map['v-model']) { 11925 return; 11926 } 11927 var typeBinding = void 0; 11928 if (map[':type'] || map['v-bind:type']) { 11929 typeBinding = getBindingAttr(el, 'type'); 11930 } 11931 if (!map.type && !typeBinding && map['v-bind']) { 11932 typeBinding = "(".concat(map['v-bind'], ").type"); 11933 } 11934 if (typeBinding) { 11935 var ifCondition = getAndRemoveAttr(el, 'v-if', true); 11936 var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : ""; 11937 var hasElse = getAndRemoveAttr(el, 'v-else', true) != null; 11938 var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true); 11939 // 1. checkbox 11940 var branch0 = cloneASTElement(el); 11941 // process for on the main node 11942 processFor(branch0); 11943 addRawAttr(branch0, 'type', 'checkbox'); 11944 processElement(branch0, options); 11945 branch0.processed = true; // prevent it from double-processed 11946 branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra; 11947 addIfCondition(branch0, { 11948 exp: branch0.if, 11949 block: branch0 11950 }); 11951 // 2. add radio else-if condition 11952 var branch1 = cloneASTElement(el); 11953 getAndRemoveAttr(branch1, 'v-for', true); 11954 addRawAttr(branch1, 'type', 'radio'); 11955 processElement(branch1, options); 11956 addIfCondition(branch0, { 11957 exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra, 11958 block: branch1 11959 }); 11960 // 3. other 11961 var branch2 = cloneASTElement(el); 11962 getAndRemoveAttr(branch2, 'v-for', true); 11963 addRawAttr(branch2, ':type', typeBinding); 11964 processElement(branch2, options); 11965 addIfCondition(branch0, { 11966 exp: ifCondition, 11967 block: branch2 11968 }); 11969 if (hasElse) { 11970 branch0.else = true; 11971 } else if (elseIfCondition) { 11972 branch0.elseif = elseIfCondition; 11973 } 11974 return branch0; 11975 } 11976 } 11977} 11978function cloneASTElement(el) { 11979 return createASTElement(el.tag, el.attrsList.slice(), el.parent); 11980} 11981var model = { 11982 preTransformNode: preTransformNode 11983}; 11984var modules = [klass, style, model]; 11985function text(el, dir) { 11986 if (dir.value) { 11987 addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir); 11988 } 11989} 11990function html(el, dir) { 11991 if (dir.value) { 11992 addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir); 11993 } 11994} 11995var directives = { 11996 model: model$1, 11997 text: text, 11998 html: html 11999}; 12000var baseOptions = { 12001 expectHTML: true, 12002 modules: modules, 12003 directives: directives, 12004 isPreTag: isPreTag, 12005 isUnaryTag: isUnaryTag, 12006 mustUseProp: mustUseProp, 12007 canBeLeftOpenTag: canBeLeftOpenTag, 12008 isReservedTag: isReservedTag, 12009 getTagNamespace: getTagNamespace, 12010 staticKeys: genStaticKeys$1(modules) 12011}; 12012var isStaticKey; 12013var isPlatformReservedTag; 12014var genStaticKeysCached = cached(genStaticKeys); 12015/** 12016 * Goal of the optimizer: walk the generated template AST tree 12017 * and detect sub-trees that are purely static, i.e. parts of 12018 * the DOM that never needs to change. 12019 * 12020 * Once we detect these sub-trees, we can: 12021 * 12022 * 1. Hoist them into constants, so that we no longer need to 12023 * create fresh nodes for them on each re-render; 12024 * 2. Completely skip them in the patching process. 12025 */ 12026function optimize(root, options) { 12027 if (!root) return; 12028 isStaticKey = genStaticKeysCached(options.staticKeys || ''); 12029 isPlatformReservedTag = options.isReservedTag || no; 12030 // first pass: mark all non-static nodes. 12031 markStatic(root); 12032 // second pass: mark static roots. 12033 markStaticRoots(root, false); 12034} 12035function genStaticKeys(keys) { 12036 return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' + (keys ? ',' + keys : '')); 12037} 12038function markStatic(node) { 12039 node.static = isStatic(node); 12040 if (node.type === 1) { 12041 // do not make component slot content static. this avoids 12042 // 1. components not able to mutate slot nodes 12043 // 2. static slot content fails for hot-reloading 12044 if (!isPlatformReservedTag(node.tag) && node.tag !== 'slot' && node.attrsMap['inline-template'] == null) { 12045 return; 12046 } 12047 for (var i = 0, l = node.children.length; i < l; i++) { 12048 var child = node.children[i]; 12049 markStatic(child); 12050 if (!child.static) { 12051 node.static = false; 12052 } 12053 } 12054 if (node.ifConditions) { 12055 for (var i = 1, l = node.ifConditions.length; i < l; i++) { 12056 var block = node.ifConditions[i].block; 12057 markStatic(block); 12058 if (!block.static) { 12059 node.static = false; 12060 } 12061 } 12062 } 12063 } 12064} 12065function markStaticRoots(node, isInFor) { 12066 if (node.type === 1) { 12067 if (node.static || node.once) { 12068 node.staticInFor = isInFor; 12069 } 12070 // For a node to qualify as a static root, it should have children that 12071 // are not just static text. Otherwise the cost of hoisting out will 12072 // outweigh the benefits and it's better off to just always render it fresh. 12073 if (node.static && node.children.length && !(node.children.length === 1 && node.children[0].type === 3)) { 12074 node.staticRoot = true; 12075 return; 12076 } else { 12077 node.staticRoot = false; 12078 } 12079 if (node.children) { 12080 for (var i = 0, l = node.children.length; i < l; i++) { 12081 markStaticRoots(node.children[i], isInFor || !!node.for); 12082 } 12083 } 12084 if (node.ifConditions) { 12085 for (var i = 1, l = node.ifConditions.length; i < l; i++) { 12086 markStaticRoots(node.ifConditions[i].block, isInFor); 12087 } 12088 } 12089 } 12090} 12091function isStatic(node) { 12092 if (node.type === 2) { 12093 // expression 12094 return false; 12095 } 12096 if (node.type === 3) { 12097 // text 12098 return true; 12099 } 12100 return !!(node.pre || !node.hasBindings && 12101 // no dynamic bindings 12102 !node.if && !node.for && 12103 // not v-if or v-for or v-else 12104 !isBuiltInTag(node.tag) && 12105 // not a built-in 12106 isPlatformReservedTag(node.tag) && 12107 // not a component 12108 !isDirectChildOfTemplateFor(node) && Object.keys(node).every(isStaticKey)); 12109} 12110function isDirectChildOfTemplateFor(node) { 12111 while (node.parent) { 12112 node = node.parent; 12113 if (node.tag !== 'template') { 12114 return false; 12115 } 12116 if (node.for) { 12117 return true; 12118 } 12119 } 12120 return false; 12121} 12122var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/; 12123var fnInvokeRE = /\([^)]*?\);*$/; 12124var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/; 12125// KeyboardEvent.keyCode aliases 12126var keyCodes = { 12127 esc: 27, 12128 tab: 9, 12129 enter: 13, 12130 space: 32, 12131 up: 38, 12132 left: 37, 12133 right: 39, 12134 down: 40, 12135 delete: [8, 46] 12136}; 12137// KeyboardEvent.key aliases 12138var keyNames = { 12139 // #7880: IE11 and Edge use `Esc` for Escape key name. 12140 esc: ['Esc', 'Escape'], 12141 tab: 'Tab', 12142 enter: 'Enter', 12143 // #9112: IE11 uses `Spacebar` for Space key name. 12144 space: [' ', 'Spacebar'], 12145 // #7806: IE11 uses key names without `Arrow` prefix for arrow keys. 12146 up: ['Up', 'ArrowUp'], 12147 left: ['Left', 'ArrowLeft'], 12148 right: ['Right', 'ArrowRight'], 12149 down: ['Down', 'ArrowDown'], 12150 // #9112: IE11 uses `Del` for Delete key name. 12151 delete: ['Backspace', 'Delete', 'Del'] 12152}; 12153// #4868: modifiers that prevent the execution of the listener 12154// need to explicitly return null so that we can determine whether to remove 12155// the listener for .once 12156var genGuard = function (condition) { 12157 return "if(".concat(condition, ")return null;"); 12158}; 12159var modifierCode = { 12160 stop: '$event.stopPropagation();', 12161 prevent: '$event.preventDefault();', 12162 self: genGuard("$event.target !== $event.currentTarget"), 12163 ctrl: genGuard("!$event.ctrlKey"), 12164 shift: genGuard("!$event.shiftKey"), 12165 alt: genGuard("!$event.altKey"), 12166 meta: genGuard("!$event.metaKey"), 12167 left: genGuard("'button' in $event && $event.button !== 0"), 12168 middle: genGuard("'button' in $event && $event.button !== 1"), 12169 right: genGuard("'button' in $event && $event.button !== 2") 12170}; 12171function genHandlers(events, isNative) { 12172 var prefix = isNative ? 'nativeOn:' : 'on:'; 12173 var staticHandlers = ""; 12174 var dynamicHandlers = ""; 12175 for (var name_1 in events) { 12176 var handlerCode = genHandler(events[name_1]); 12177 //@ts-expect-error 12178 if (events[name_1] && events[name_1].dynamic) { 12179 dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ","); 12180 } else { 12181 staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ","); 12182 } 12183 } 12184 staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}"); 12185 if (dynamicHandlers) { 12186 return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])"); 12187 } else { 12188 return prefix + staticHandlers; 12189 } 12190} 12191function genHandler(handler) { 12192 if (!handler) { 12193 return 'function(){}'; 12194 } 12195 if (Array.isArray(handler)) { 12196 return "[".concat(handler.map(function (handler) { 12197 return genHandler(handler); 12198 }).join(','), "]"); 12199 } 12200 var isMethodPath = simplePathRE.test(handler.value); 12201 var isFunctionExpression = fnExpRE.test(handler.value); 12202 var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, '')); 12203 if (!handler.modifiers) { 12204 if (isMethodPath || isFunctionExpression) { 12205 return handler.value; 12206 } 12207 return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement 12208 } else { 12209 var code = ''; 12210 var genModifierCode = ''; 12211 var keys = []; 12212 var _loop_1 = function (key) { 12213 if (modifierCode[key]) { 12214 genModifierCode += modifierCode[key]; 12215 // left/right 12216 if (keyCodes[key]) { 12217 keys.push(key); 12218 } 12219 } else if (key === 'exact') { 12220 var modifiers_1 = handler.modifiers; 12221 genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta'].filter(function (keyModifier) { 12222 return !modifiers_1[keyModifier]; 12223 }).map(function (keyModifier) { 12224 return "$event.".concat(keyModifier, "Key"); 12225 }).join('||')); 12226 } else { 12227 keys.push(key); 12228 } 12229 }; 12230 for (var key in handler.modifiers) { 12231 _loop_1(key); 12232 } 12233 if (keys.length) { 12234 code += genKeyFilter(keys); 12235 } 12236 // Make sure modifiers like prevent and stop get executed after key filtering 12237 if (genModifierCode) { 12238 code += genModifierCode; 12239 } 12240 var handlerCode = isMethodPath ? "return ".concat(handler.value, ".apply(null, arguments)") : isFunctionExpression ? "return (".concat(handler.value, ").apply(null, arguments)") : isFunctionInvocation ? "return ".concat(handler.value) : handler.value; 12241 return "function($event){".concat(code).concat(handlerCode, "}"); 12242 } 12243} 12244function genKeyFilter(keys) { 12245 return ( 12246 // make sure the key filters only apply to KeyboardEvents 12247 // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake 12248 // key events that do not have keyCode property... 12249 "if(!$event.type.indexOf('key')&&" + "".concat(keys.map(genFilterCode).join('&&'), ")return null;") 12250 ); 12251} 12252function genFilterCode(key) { 12253 var keyVal = parseInt(key, 10); 12254 if (keyVal) { 12255 return "$event.keyCode!==".concat(keyVal); 12256 } 12257 var keyCode = keyCodes[key]; 12258 var keyName = keyNames[key]; 12259 return "_k($event.keyCode," + "".concat(JSON.stringify(key), ",") + "".concat(JSON.stringify(keyCode), ",") + "$event.key," + "".concat(JSON.stringify(keyName)) + ")"; 12260} 12261function on(el, dir) { 12262 if ( true && dir.modifiers) { 12263 warn$2("v-on without argument does not support modifiers."); 12264 } 12265 el.wrapListeners = function (code) { 12266 return "_g(".concat(code, ",").concat(dir.value, ")"); 12267 }; 12268} 12269function bind(el, dir) { 12270 el.wrapData = function (code) { 12271 return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")"); 12272 }; 12273} 12274var baseDirectives = { 12275 on: on, 12276 bind: bind, 12277 cloak: noop 12278}; 12279var CodegenState = /** @class */function () { 12280 function CodegenState(options) { 12281 this.options = options; 12282 this.warn = options.warn || baseWarn; 12283 this.transforms = pluckModuleFunction(options.modules, 'transformCode'); 12284 this.dataGenFns = pluckModuleFunction(options.modules, 'genData'); 12285 this.directives = extend(extend({}, baseDirectives), options.directives); 12286 var isReservedTag = options.isReservedTag || no; 12287 this.maybeComponent = function (el) { 12288 return !!el.component || !isReservedTag(el.tag); 12289 }; 12290 this.onceId = 0; 12291 this.staticRenderFns = []; 12292 this.pre = false; 12293 } 12294 return CodegenState; 12295}(); 12296function generate(ast, options) { 12297 var state = new CodegenState(options); 12298 // fix #11483, Root level <script> tags should not be rendered. 12299 var code = ast ? ast.tag === 'script' ? 'null' : genElement(ast, state) : '_c("div")'; 12300 return { 12301 render: "with(this){return ".concat(code, "}"), 12302 staticRenderFns: state.staticRenderFns 12303 }; 12304} 12305function genElement(el, state) { 12306 if (el.parent) { 12307 el.pre = el.pre || el.parent.pre; 12308 } 12309 if (el.staticRoot && !el.staticProcessed) { 12310 return genStatic(el, state); 12311 } else if (el.once && !el.onceProcessed) { 12312 return genOnce(el, state); 12313 } else if (el.for && !el.forProcessed) { 12314 return genFor(el, state); 12315 } else if (el.if && !el.ifProcessed) { 12316 return genIf(el, state); 12317 } else if (el.tag === 'template' && !el.slotTarget && !state.pre) { 12318 return genChildren(el, state) || 'void 0'; 12319 } else if (el.tag === 'slot') { 12320 return genSlot(el, state); 12321 } else { 12322 // component or element 12323 var code = void 0; 12324 if (el.component) { 12325 code = genComponent(el.component, el, state); 12326 } else { 12327 var data = void 0; 12328 var maybeComponent = state.maybeComponent(el); 12329 if (!el.plain || el.pre && maybeComponent) { 12330 data = genData(el, state); 12331 } 12332 var tag 12333 // check if this is a component in <script setup> 12334 = void 0; 12335 // check if this is a component in <script setup> 12336 var bindings = state.options.bindings; 12337 if (maybeComponent && bindings && bindings.__isScriptSetup !== false) { 12338 tag = checkBindingType(bindings, el.tag); 12339 } 12340 if (!tag) tag = "'".concat(el.tag, "'"); 12341 var children = el.inlineTemplate ? null : genChildren(el, state, true); 12342 code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data 12343 ).concat(children ? ",".concat(children) : '' // children 12344 , ")"); 12345 } 12346 // module transforms 12347 for (var i = 0; i < state.transforms.length; i++) { 12348 code = state.transforms[i](el, code); 12349 } 12350 return code; 12351 } 12352} 12353function checkBindingType(bindings, key) { 12354 var camelName = camelize(key); 12355 var PascalName = capitalize(camelName); 12356 var checkType = function (type) { 12357 if (bindings[key] === type) { 12358 return key; 12359 } 12360 if (bindings[camelName] === type) { 12361 return camelName; 12362 } 12363 if (bindings[PascalName] === type) { 12364 return PascalName; 12365 } 12366 }; 12367 var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) || checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */); 12368 if (fromConst) { 12369 return fromConst; 12370 } 12371 var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) || checkType("setup-ref" /* BindingTypes.SETUP_REF */) || checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */); 12372 if (fromMaybeRef) { 12373 return fromMaybeRef; 12374 } 12375} 12376// hoist static sub-trees out 12377function genStatic(el, state) { 12378 el.staticProcessed = true; 12379 // Some elements (templates) need to behave differently inside of a v-pre 12380 // node. All pre nodes are static roots, so we can use this as a location to 12381 // wrap a state change and reset it upon exiting the pre node. 12382 var originalPreState = state.pre; 12383 if (el.pre) { 12384 state.pre = el.pre; 12385 } 12386 state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}")); 12387 state.pre = originalPreState; 12388 return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")"); 12389} 12390// v-once 12391function genOnce(el, state) { 12392 el.onceProcessed = true; 12393 if (el.if && !el.ifProcessed) { 12394 return genIf(el, state); 12395 } else if (el.staticInFor) { 12396 var key = ''; 12397 var parent_1 = el.parent; 12398 while (parent_1) { 12399 if (parent_1.for) { 12400 key = parent_1.key; 12401 break; 12402 } 12403 parent_1 = parent_1.parent; 12404 } 12405 if (!key) { 12406 true && state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']); 12407 return genElement(el, state); 12408 } 12409 return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")"); 12410 } else { 12411 return genStatic(el, state); 12412 } 12413} 12414function genIf(el, state, altGen, altEmpty) { 12415 el.ifProcessed = true; // avoid recursion 12416 return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty); 12417} 12418function genIfConditions(conditions, state, altGen, altEmpty) { 12419 if (!conditions.length) { 12420 return altEmpty || '_e()'; 12421 } 12422 var condition = conditions.shift(); 12423 if (condition.exp) { 12424 return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty)); 12425 } else { 12426 return "".concat(genTernaryExp(condition.block)); 12427 } 12428 // v-if with v-once should generate code like (a)?_m(0):_m(1) 12429 function genTernaryExp(el) { 12430 return altGen ? altGen(el, state) : el.once ? genOnce(el, state) : genElement(el, state); 12431 } 12432} 12433function genFor(el, state, altGen, altHelper) { 12434 var exp = el.for; 12435 var alias = el.alias; 12436 var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : ''; 12437 var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : ''; 12438 if ( true && state.maybeComponent(el) && el.tag !== 'slot' && el.tag !== 'template' && !el.key) { 12439 state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") + "v-for should have explicit keys. " + "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */); 12440 } 12441 el.forProcessed = true; // avoid recursion 12442 return "".concat(altHelper || '_l', "((").concat(exp, "),") + "function(".concat(alias).concat(iterator1).concat(iterator2, "){") + "return ".concat((altGen || genElement)(el, state)) + '})'; 12443} 12444function genData(el, state) { 12445 var data = '{'; 12446 // directives first. 12447 // directives may mutate the el's other properties before they are generated. 12448 var dirs = genDirectives(el, state); 12449 if (dirs) data += dirs + ','; 12450 // key 12451 if (el.key) { 12452 data += "key:".concat(el.key, ","); 12453 } 12454 // ref 12455 if (el.ref) { 12456 data += "ref:".concat(el.ref, ","); 12457 } 12458 if (el.refInFor) { 12459 data += "refInFor:true,"; 12460 } 12461 // pre 12462 if (el.pre) { 12463 data += "pre:true,"; 12464 } 12465 // record original tag name for components using "is" attribute 12466 if (el.component) { 12467 data += "tag:\"".concat(el.tag, "\","); 12468 } 12469 // module data generation functions 12470 for (var i = 0; i < state.dataGenFns.length; i++) { 12471 data += state.dataGenFns[i](el); 12472 } 12473 // attributes 12474 if (el.attrs) { 12475 data += "attrs:".concat(genProps(el.attrs), ","); 12476 } 12477 // DOM props 12478 if (el.props) { 12479 data += "domProps:".concat(genProps(el.props), ","); 12480 } 12481 // event handlers 12482 if (el.events) { 12483 data += "".concat(genHandlers(el.events, false), ","); 12484 } 12485 if (el.nativeEvents) { 12486 data += "".concat(genHandlers(el.nativeEvents, true), ","); 12487 } 12488 // slot target 12489 // only for non-scoped slots 12490 if (el.slotTarget && !el.slotScope) { 12491 data += "slot:".concat(el.slotTarget, ","); 12492 } 12493 // scoped slots 12494 if (el.scopedSlots) { 12495 data += "".concat(genScopedSlots(el, el.scopedSlots, state), ","); 12496 } 12497 // component v-model 12498 if (el.model) { 12499 data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},"); 12500 } 12501 // inline-template 12502 if (el.inlineTemplate) { 12503 var inlineTemplate = genInlineTemplate(el, state); 12504 if (inlineTemplate) { 12505 data += "".concat(inlineTemplate, ","); 12506 } 12507 } 12508 data = data.replace(/,$/, '') + '}'; 12509 // v-bind dynamic argument wrap 12510 // v-bind with dynamic arguments must be applied using the same v-bind object 12511 // merge helper so that class/style/mustUseProp attrs are handled correctly. 12512 if (el.dynamicAttrs) { 12513 data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")"); 12514 } 12515 // v-bind data wrap 12516 if (el.wrapData) { 12517 data = el.wrapData(data); 12518 } 12519 // v-on data wrap 12520 if (el.wrapListeners) { 12521 data = el.wrapListeners(data); 12522 } 12523 return data; 12524} 12525function genDirectives(el, state) { 12526 var dirs = el.directives; 12527 if (!dirs) return; 12528 var res = 'directives:['; 12529 var hasRuntime = false; 12530 var i, l, dir, needRuntime; 12531 for (i = 0, l = dirs.length; i < l; i++) { 12532 dir = dirs[i]; 12533 needRuntime = true; 12534 var gen = state.directives[dir.name]; 12535 if (gen) { 12536 // compile-time directive that manipulates AST. 12537 // returns true if it also needs a runtime counterpart. 12538 needRuntime = !!gen(el, dir, state.warn); 12539 } 12540 if (needRuntime) { 12541 hasRuntime = true; 12542 res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value)) : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},"); 12543 } 12544 } 12545 if (hasRuntime) { 12546 return res.slice(0, -1) + ']'; 12547 } 12548} 12549function genInlineTemplate(el, state) { 12550 var ast = el.children[0]; 12551 if ( true && (el.children.length !== 1 || ast.type !== 1)) { 12552 state.warn('Inline-template components must have exactly one child element.', { 12553 start: el.start 12554 }); 12555 } 12556 if (ast && ast.type === 1) { 12557 var inlineRenderFns = generate(ast, state.options); 12558 return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns.map(function (code) { 12559 return "function(){".concat(code, "}"); 12560 }).join(','), "]}"); 12561 } 12562} 12563function genScopedSlots(el, slots, state) { 12564 // by default scoped slots are considered "stable", this allows child 12565 // components with only scoped slots to skip forced updates from parent. 12566 // but in some cases we have to bail-out of this optimization 12567 // for example if the slot contains dynamic names, has v-if or v-for on them... 12568 var needsForceUpdate = el.for || Object.keys(slots).some(function (key) { 12569 var slot = slots[key]; 12570 return slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic 12571 ; 12572 }); 12573 // #9534: if a component with scoped slots is inside a conditional branch, 12574 // it's possible for the same component to be reused but with different 12575 // compiled slot content. To avoid that, we generate a unique key based on 12576 // the generated code of all the slot contents. 12577 var needsKey = !!el.if; 12578 // OR when it is inside another scoped slot or v-for (the reactivity may be 12579 // disconnected due to the intermediate scope variable) 12580 // #9438, #9506 12581 // TODO: this can be further optimized by properly analyzing in-scope bindings 12582 // and skip force updating ones that do not actually use scope variables. 12583 if (!needsForceUpdate) { 12584 var parent_2 = el.parent; 12585 while (parent_2) { 12586 if (parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken || parent_2.for) { 12587 needsForceUpdate = true; 12588 break; 12589 } 12590 if (parent_2.if) { 12591 needsKey = true; 12592 } 12593 parent_2 = parent_2.parent; 12594 } 12595 } 12596 var generatedSlots = Object.keys(slots).map(function (key) { 12597 return genScopedSlot(slots[key], state); 12598 }).join(','); 12599 return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")"); 12600} 12601function hash(str) { 12602 var hash = 5381; 12603 var i = str.length; 12604 while (i) { 12605 hash = hash * 33 ^ str.charCodeAt(--i); 12606 } 12607 return hash >>> 0; 12608} 12609function containsSlotChild(el) { 12610 if (el.type === 1) { 12611 if (el.tag === 'slot') { 12612 return true; 12613 } 12614 return el.children.some(containsSlotChild); 12615 } 12616 return false; 12617} 12618function genScopedSlot(el, state) { 12619 var isLegacySyntax = el.attrsMap['slot-scope']; 12620 if (el.if && !el.ifProcessed && !isLegacySyntax) { 12621 return genIf(el, state, genScopedSlot, "null"); 12622 } 12623 if (el.for && !el.forProcessed) { 12624 return genFor(el, state, genScopedSlot); 12625 } 12626 var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope); 12627 var fn = "function(".concat(slotScope, "){") + "return ".concat(el.tag === 'template' ? el.if && isLegacySyntax ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined") : genChildren(el, state) || 'undefined' : genElement(el, state), "}"); 12628 // reverse proxy v-slot without scope on this.$slots 12629 var reverseProxy = slotScope ? "" : ",proxy:true"; 12630 return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}"); 12631} 12632function genChildren(el, state, checkSkip, altGenElement, altGenNode) { 12633 var children = el.children; 12634 if (children.length) { 12635 var el_1 = children[0]; 12636 // optimize single v-for 12637 if (children.length === 1 && el_1.for && el_1.tag !== 'template' && el_1.tag !== 'slot') { 12638 var normalizationType_1 = checkSkip ? state.maybeComponent(el_1) ? ",1" : ",0" : ""; 12639 return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1); 12640 } 12641 var normalizationType = checkSkip ? getNormalizationType(children, state.maybeComponent) : 0; 12642 var gen_1 = altGenNode || genNode; 12643 return "[".concat(children.map(function (c) { 12644 return gen_1(c, state); 12645 }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : ''); 12646 } 12647} 12648// determine the normalization needed for the children array. 12649// 0: no normalization needed 12650// 1: simple normalization needed (possible 1-level deep nested array) 12651// 2: full normalization needed 12652function getNormalizationType(children, maybeComponent) { 12653 var res = 0; 12654 for (var i = 0; i < children.length; i++) { 12655 var el = children[i]; 12656 if (el.type !== 1) { 12657 continue; 12658 } 12659 if (needsNormalization(el) || el.ifConditions && el.ifConditions.some(function (c) { 12660 return needsNormalization(c.block); 12661 })) { 12662 res = 2; 12663 break; 12664 } 12665 if (maybeComponent(el) || el.ifConditions && el.ifConditions.some(function (c) { 12666 return maybeComponent(c.block); 12667 })) { 12668 res = 1; 12669 } 12670 } 12671 return res; 12672} 12673function needsNormalization(el) { 12674 return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'; 12675} 12676function genNode(node, state) { 12677 if (node.type === 1) { 12678 return genElement(node, state); 12679 } else if (node.type === 3 && node.isComment) { 12680 return genComment(node); 12681 } else { 12682 return genText(node); 12683 } 12684} 12685function genText(text) { 12686 return "_v(".concat(text.type === 2 ? text.expression // no need for () because already wrapped in _s() 12687 : transformSpecialNewlines(JSON.stringify(text.text)), ")"); 12688} 12689function genComment(comment) { 12690 return "_e(".concat(JSON.stringify(comment.text), ")"); 12691} 12692function genSlot(el, state) { 12693 var slotName = el.slotName || '"default"'; 12694 var children = genChildren(el, state); 12695 var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : ''); 12696 var attrs = el.attrs || el.dynamicAttrs ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { 12697 return { 12698 // slot props are camelized 12699 name: camelize(attr.name), 12700 value: attr.value, 12701 dynamic: attr.dynamic 12702 }; 12703 })) : null; 12704 var bind = el.attrsMap['v-bind']; 12705 if ((attrs || bind) && !children) { 12706 res += ",null"; 12707 } 12708 if (attrs) { 12709 res += ",".concat(attrs); 12710 } 12711 if (bind) { 12712 res += "".concat(attrs ? '' : ',null', ",").concat(bind); 12713 } 12714 return res + ')'; 12715} 12716// componentName is el.component, take it as argument to shun flow's pessimistic refinement 12717function genComponent(componentName, el, state) { 12718 var children = el.inlineTemplate ? null : genChildren(el, state, true); 12719 return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")"); 12720} 12721function genProps(props) { 12722 var staticProps = ""; 12723 var dynamicProps = ""; 12724 for (var i = 0; i < props.length; i++) { 12725 var prop = props[i]; 12726 var value = transformSpecialNewlines(prop.value); 12727 if (prop.dynamic) { 12728 dynamicProps += "".concat(prop.name, ",").concat(value, ","); 12729 } else { 12730 staticProps += "\"".concat(prop.name, "\":").concat(value, ","); 12731 } 12732 } 12733 staticProps = "{".concat(staticProps.slice(0, -1), "}"); 12734 if (dynamicProps) { 12735 return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])"); 12736 } else { 12737 return staticProps; 12738 } 12739} 12740// #3895, #4268 12741function transformSpecialNewlines(text) { 12742 return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029'); 12743} 12744 12745// these keywords should not appear inside expressions, but operators like 12746// typeof, instanceof and in are allowed 12747var prohibitedKeywordRE = new RegExp('\\b' + ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' + 'super,throw,while,yield,delete,export,import,return,switch,default,' + 'extends,finally,continue,debugger,function,arguments').split(',').join('\\b|\\b') + '\\b'); 12748// these unary operators should not be used as property/method names 12749var unaryOperatorsRE = new RegExp('\\b' + 'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') + '\\s*\\([^\\)]*\\)'); 12750// strip strings in expressions 12751var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g; 12752// detect problematic expressions in a template 12753function detectErrors(ast, warn) { 12754 if (ast) { 12755 checkNode(ast, warn); 12756 } 12757} 12758function checkNode(node, warn) { 12759 if (node.type === 1) { 12760 for (var name_1 in node.attrsMap) { 12761 if (dirRE.test(name_1)) { 12762 var value = node.attrsMap[name_1]; 12763 if (value) { 12764 var range = node.rawAttrsMap[name_1]; 12765 if (name_1 === 'v-for') { 12766 checkFor(node, "v-for=\"".concat(value, "\""), warn, range); 12767 } else if (name_1 === 'v-slot' || name_1[0] === '#') { 12768 checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 12769 } else if (onRE.test(name_1)) { 12770 checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 12771 } else { 12772 checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range); 12773 } 12774 } 12775 } 12776 } 12777 if (node.children) { 12778 for (var i = 0; i < node.children.length; i++) { 12779 checkNode(node.children[i], warn); 12780 } 12781 } 12782 } else if (node.type === 2) { 12783 checkExpression(node.expression, node.text, warn, node); 12784 } 12785} 12786function checkEvent(exp, text, warn, range) { 12787 var stripped = exp.replace(stripStringRE, ''); 12788 var keywordMatch = stripped.match(unaryOperatorsRE); 12789 if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') { 12790 warn("avoid using JavaScript unary operator as property name: " + "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range); 12791 } 12792 checkExpression(exp, text, warn, range); 12793} 12794function checkFor(node, text, warn, range) { 12795 checkExpression(node.for || '', text, warn, range); 12796 checkIdentifier(node.alias, 'v-for alias', text, warn, range); 12797 checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range); 12798 checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range); 12799} 12800function checkIdentifier(ident, type, text, warn, range) { 12801 if (typeof ident === 'string') { 12802 try { 12803 new Function("var ".concat(ident, "=_")); 12804 } catch (e) { 12805 warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range); 12806 } 12807 } 12808} 12809function checkExpression(exp, text, warn, range) { 12810 try { 12811 new Function("return ".concat(exp)); 12812 } catch (e) { 12813 var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE); 12814 if (keywordMatch) { 12815 warn("avoid using JavaScript keyword as property name: " + "\"".concat(keywordMatch[0], "\"\n Raw expression: ").concat(text.trim()), range); 12816 } else { 12817 warn("invalid expression: ".concat(e.message, " in\n\n") + " ".concat(exp, "\n\n") + " Raw expression: ".concat(text.trim(), "\n"), range); 12818 } 12819 } 12820} 12821function checkFunctionParameterExpression(exp, text, warn, range) { 12822 try { 12823 new Function(exp, ''); 12824 } catch (e) { 12825 warn("invalid function parameter expression: ".concat(e.message, " in\n\n") + " ".concat(exp, "\n\n") + " Raw expression: ".concat(text.trim(), "\n"), range); 12826 } 12827} 12828var range = 2; 12829function generateCodeFrame(source, start, end) { 12830 if (start === void 0) { 12831 start = 0; 12832 } 12833 if (end === void 0) { 12834 end = source.length; 12835 } 12836 var lines = source.split(/\r?\n/); 12837 var count = 0; 12838 var res = []; 12839 for (var i = 0; i < lines.length; i++) { 12840 count += lines[i].length + 1; 12841 if (count >= start) { 12842 for (var j = i - range; j <= i + range || end > count; j++) { 12843 if (j < 0 || j >= lines.length) continue; 12844 res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "| ").concat(lines[j])); 12845 var lineLength = lines[j].length; 12846 if (j === i) { 12847 // push underline 12848 var pad = start - (count - lineLength) + 1; 12849 var length_1 = end > count ? lineLength - pad : end - start; 12850 res.push(" | " + repeat(" ", pad) + repeat("^", length_1)); 12851 } else if (j > i) { 12852 if (end > count) { 12853 var length_2 = Math.min(end - count, lineLength); 12854 res.push(" | " + repeat("^", length_2)); 12855 } 12856 count += lineLength + 1; 12857 } 12858 } 12859 break; 12860 } 12861 } 12862 return res.join('\n'); 12863} 12864function repeat(str, n) { 12865 var result = ''; 12866 if (n > 0) { 12867 // eslint-disable-next-line no-constant-condition 12868 while (true) { 12869 // eslint-disable-line 12870 if (n & 1) result += str; 12871 n >>>= 1; 12872 if (n <= 0) break; 12873 str += str; 12874 } 12875 } 12876 return result; 12877} 12878function createFunction(code, errors) { 12879 try { 12880 return new Function(code); 12881 } catch (err) { 12882 errors.push({ 12883 err: err, 12884 code: code 12885 }); 12886 return noop; 12887 } 12888} 12889function createCompileToFunctionFn(compile) { 12890 var cache = Object.create(null); 12891 return function compileToFunctions(template, options, vm) { 12892 options = extend({}, options); 12893 var warn = options.warn || warn$2; 12894 delete options.warn; 12895 /* istanbul ignore if */ 12896 if (true) { 12897 // detect possible CSP restriction 12898 try { 12899 new Function('return 1'); 12900 } catch (e) { 12901 if (e.toString().match(/unsafe-eval|CSP/)) { 12902 warn('It seems you are using the standalone build of Vue.js in an ' + 'environment with Content Security Policy that prohibits unsafe-eval. ' + 'The template compiler cannot work in this environment. Consider ' + 'relaxing the policy to allow unsafe-eval or pre-compiling your ' + 'templates into render functions.'); 12903 } 12904 } 12905 } 12906 // check cache 12907 var key = options.delimiters ? String(options.delimiters) + template : template; 12908 if (cache[key]) { 12909 return cache[key]; 12910 } 12911 // compile 12912 var compiled = compile(template, options); 12913 // check compilation errors/tips 12914 if (true) { 12915 if (compiled.errors && compiled.errors.length) { 12916 if (options.outputSourceRange) { 12917 compiled.errors.forEach(function (e) { 12918 warn("Error compiling template:\n\n".concat(e.msg, "\n\n") + generateCodeFrame(template, e.start, e.end), vm); 12919 }); 12920 } else { 12921 warn("Error compiling template:\n\n".concat(template, "\n\n") + compiled.errors.map(function (e) { 12922 return "- ".concat(e); 12923 }).join('\n') + '\n', vm); 12924 } 12925 } 12926 if (compiled.tips && compiled.tips.length) { 12927 if (options.outputSourceRange) { 12928 compiled.tips.forEach(function (e) { 12929 return tip(e.msg, vm); 12930 }); 12931 } else { 12932 compiled.tips.forEach(function (msg) { 12933 return tip(msg, vm); 12934 }); 12935 } 12936 } 12937 } 12938 // turn code into functions 12939 var res = {}; 12940 var fnGenErrors = []; 12941 res.render = createFunction(compiled.render, fnGenErrors); 12942 res.staticRenderFns = compiled.staticRenderFns.map(function (code) { 12943 return createFunction(code, fnGenErrors); 12944 }); 12945 // check function generation errors. 12946 // this should only happen if there is a bug in the compiler itself. 12947 // mostly for codegen development use 12948 /* istanbul ignore if */ 12949 if (true) { 12950 if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) { 12951 warn("Failed to generate render function:\n\n" + fnGenErrors.map(function (_a) { 12952 var err = _a.err, 12953 code = _a.code; 12954 return "".concat(err.toString(), " in\n\n").concat(code, "\n"); 12955 }).join('\n'), vm); 12956 } 12957 } 12958 return cache[key] = res; 12959 }; 12960} 12961function createCompilerCreator(baseCompile) { 12962 return function createCompiler(baseOptions) { 12963 function compile(template, options) { 12964 var finalOptions = Object.create(baseOptions); 12965 var errors = []; 12966 var tips = []; 12967 var warn = function (msg, range, tip) { 12968 (tip ? tips : errors).push(msg); 12969 }; 12970 if (options) { 12971 if ( true && options.outputSourceRange) { 12972 // $flow-disable-line 12973 var leadingSpaceLength_1 = template.match(/^\s*/)[0].length; 12974 warn = function (msg, range, tip) { 12975 var data = typeof msg === 'string' ? { 12976 msg: msg 12977 } : msg; 12978 if (range) { 12979 if (range.start != null) { 12980 data.start = range.start + leadingSpaceLength_1; 12981 } 12982 if (range.end != null) { 12983 data.end = range.end + leadingSpaceLength_1; 12984 } 12985 } 12986 (tip ? tips : errors).push(data); 12987 }; 12988 } 12989 // merge custom modules 12990 if (options.modules) { 12991 finalOptions.modules = (baseOptions.modules || []).concat(options.modules); 12992 } 12993 // merge custom directives 12994 if (options.directives) { 12995 finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives); 12996 } 12997 // copy other options 12998 for (var key in options) { 12999 if (key !== 'modules' && key !== 'directives') { 13000 finalOptions[key] = options[key]; 13001 } 13002 } 13003 } 13004 finalOptions.warn = warn; 13005 var compiled = baseCompile(template.trim(), finalOptions); 13006 if (true) { 13007 detectErrors(compiled.ast, warn); 13008 } 13009 compiled.errors = errors; 13010 compiled.tips = tips; 13011 return compiled; 13012 } 13013 return { 13014 compile: compile, 13015 compileToFunctions: createCompileToFunctionFn(compile) 13016 }; 13017 }; 13018} 13019 13020// `createCompilerCreator` allows creating compilers that use alternative 13021// parser/optimizer/codegen, e.g the SSR optimizing compiler. 13022// Here we just export a default compiler using the default parts. 13023var createCompiler = createCompilerCreator(function baseCompile(template, options) { 13024 var ast = parse(template.trim(), options); 13025 if (options.optimize !== false) { 13026 optimize(ast, options); 13027 } 13028 var code = generate(ast, options); 13029 return { 13030 ast: ast, 13031 render: code.render, 13032 staticRenderFns: code.staticRenderFns 13033 }; 13034}); 13035var _a = createCompiler(baseOptions), 13036 compileToFunctions = _a.compileToFunctions; 13037 13038// check whether current browser encodes a char inside attribute values 13039var div; 13040function getShouldDecode(href) { 13041 div = div || document.createElement('div'); 13042 div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>"; 13043 return div.innerHTML.indexOf(' ') > 0; 13044} 13045// #3663: IE encodes newlines inside attribute values while other browsers don't 13046var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false; 13047// #6828: chrome encodes content in a[href] 13048var shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false; 13049var idToTemplate = cached(function (id) { 13050 var el = query(id); 13051 return el && el.innerHTML; 13052}); 13053var mount = Vue.prototype.$mount; 13054Vue.prototype.$mount = function (el, hydrating) { 13055 el = el && query(el); 13056 /* istanbul ignore if */ 13057 if (el === document.body || el === document.documentElement) { 13058 true && warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead."); 13059 return this; 13060 } 13061 var options = this.$options; 13062 // resolve template/el and convert to render function 13063 if (!options.render) { 13064 var template = options.template; 13065 if (template) { 13066 if (typeof template === 'string') { 13067 if (template.charAt(0) === '#') { 13068 template = idToTemplate(template); 13069 /* istanbul ignore if */ 13070 if ( true && !template) { 13071 warn$2("Template element not found or is empty: ".concat(options.template), this); 13072 } 13073 } 13074 } else if (template.nodeType) { 13075 template = template.innerHTML; 13076 } else { 13077 if (true) { 13078 warn$2('invalid template option:' + template, this); 13079 } 13080 return this; 13081 } 13082 } else if (el) { 13083 // @ts-expect-error 13084 template = getOuterHTML(el); 13085 } 13086 if (template) { 13087 /* istanbul ignore if */ 13088 if ( true && config.performance && mark) { 13089 mark('compile'); 13090 } 13091 var _a = compileToFunctions(template, { 13092 outputSourceRange: "development" !== 'production', 13093 shouldDecodeNewlines: shouldDecodeNewlines, 13094 shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref, 13095 delimiters: options.delimiters, 13096 comments: options.comments 13097 }, this), 13098 render = _a.render, 13099 staticRenderFns = _a.staticRenderFns; 13100 options.render = render; 13101 options.staticRenderFns = staticRenderFns; 13102 /* istanbul ignore if */ 13103 if ( true && config.performance && mark) { 13104 mark('compile end'); 13105 measure("vue ".concat(this._name, " compile"), 'compile', 'compile end'); 13106 } 13107 } 13108 } 13109 return mount.call(this, el, hydrating); 13110}; 13111/** 13112 * Get outerHTML of elements, taking care 13113 * of SVG elements in IE as well. 13114 */ 13115function getOuterHTML(el) { 13116 if (el.outerHTML) { 13117 return el.outerHTML; 13118 } else { 13119 var container = document.createElement('div'); 13120 container.appendChild(el.cloneNode(true)); 13121 return container.innerHTML; 13122 } 13123} 13124Vue.compile = compileToFunctions; 13125 13126 13127/***/ }), 13128
13129/***/ "./app/components/OpeningHours/OpeningHoursStatus.vue": 13130/*!************************************************************!*\ 13131 !*** ./app/components/OpeningHours/OpeningHoursStatus.vue ***! 13132 \************************************************************/ 13133/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13134 13135"use strict"; 13136__webpack_require__.r(__webpack_exports__); 13137/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13138/* harmony export */ __esModule: () => (/* reexport safe */ _OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__.__esModule), 13139/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 13140/* harmony export */ }); 13141/* harmony import */ var _OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OpeningHoursStatus.vue?vue&type=template&id=79e290b8& */ "./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8&"); 13142/* harmony import */ var _OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OpeningHoursStatus.vue?vue&type=script&lang=js& */ "./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js&"); 13143/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); 13144 13145 13146 13147 13148 13149/* normalize component */ 13150; 13151var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( 13152 _OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], 13153 _OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.render, 13154 _OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns, 13155 false, 13156 null, 13157 null, 13158 null 13159 13160) 13161 13162/* hot reload */ 13163if (false) { var api; } 13164component.options.__file = "app/components/OpeningHours/OpeningHoursStatus.vue" 13165/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports); 13166 13167/***/ }), 13168 13169/***/ "./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js&": 13170/*!*************************************************************************************!*\ 13171 !*** ./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js& ***! 13172 \*************************************************************************************/ 13173/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13174 13175"use strict"; 13176__webpack_require__.r(__webpack_exports__); 13177/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13178/* harmony export */ __esModule: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__.__esModule), 13179/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 13180/* harmony export */ }); 13181/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpeningHoursStatus.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=script&lang=js&"); 13182 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); 13183 13184/***/ }), 13185 13186/***/ "./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8&": 13187/*!*******************************************************************************************!*\ 13188 !*** ./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8& ***! 13189 \*******************************************************************************************/ 13190/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13191 13192"use strict"; 13193__webpack_require__.r(__webpack_exports__); 13194/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13195/* harmony export */ __esModule: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.__esMo
13195dule), 13196/* harmony export */ render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.render), 13197/* harmony export */ staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns) 13198/* harmony export */ }); 13199/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_OpeningHoursStatus_vue_vue_type_template_id_79e290b8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OpeningHoursStatus.vue?vue&type=template&id=79e290b8& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./app/components/OpeningHours/OpeningHoursStatus.vue?vue&type=template&id=79e290b8&"); 13200 13201 13202/***/ }), 13203
vendor: 3,357 bytes, lines 13204-13314
13204/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js": 13205/*!********************************************************************!*\ 13206 !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***! 13207 \********************************************************************/ 13208/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 13209 13210"use strict"; 13211__webpack_require__.r(__webpack_exports__); 13212/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13213/* harmony export */ "default": () => (/* binding */ normalizeComponent) 13214/* harmony export */ }); 13215/* globals __VUE_SSR_CONTEXT__ */ 13216 13217// IMPORTANT: Do NOT use ES2015 features in this file (except for modules). 13218// This module is a runtime utility for cleaner component module output and will 13219// be included in the final webpack user bundle. 13220 13221function normalizeComponent( 13222 scriptExports, 13223 render, 13224 staticRenderFns, 13225 functionalTemplate, 13226 injectStyles, 13227 scopeId, 13228 moduleIdentifier /* server only */, 13229 shadowMode /* vue-cli only */ 13230) { 13231 // Vue.extend constructor export interop 13232 var options = 13233 typeof scriptExports === 'function' ? scriptExports.options : scriptExports 13234 13235 // render functions 13236 if (render) { 13237 options.render = render 13238 options.staticRenderFns = staticRenderFns 13239 options._compiled = true 13240 } 13241 13242 // functional template 13243 if (functionalTemplate) { 13244 options.functional = true 13245 } 13246 13247 // scopedId 13248 if (scopeId) { 13249 options._scopeId = 'data-v-' + scopeId 13250 } 13251 13252 var hook 13253 if (moduleIdentifier) { 13254 // server build 13255 hook = function (context) { 13256 // 2.3 injection 13257 context = 13258 context || // cached call 13259 (this.$vnode && this.$vnode.ssrContext) || // stateful 13260 (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional 13261 // 2.2 with runInNewContext: true 13262 if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { 13263 context = __VUE_SSR_CONTEXT__ 13264 } 13265 // inject component styles 13266 if (injectStyles) { 13267 injectStyles.call(this, context) 13268 } 13269 // register component module identifier for async chunk inferrence 13270 if (context && context._registeredComponents) { 13271 context._registeredComponents.add(moduleIdentifier) 13272 } 13273 } 13274 // used by ssr in case component is cached and beforeCreate 13275 // never gets called 13276 options._ssrRegister = hook 13277 } else if (injectStyles) { 13278 hook = shadowMode 13279 ? function () { 13280 injectStyles.call( 13281 this, 13282 (options.functional ? this.parent : this).$root.$options.shadowRoot 13283 ) 13284 } 13285 : injectStyles 13286 } 13287 13288 if (hook) { 13289 if (options.functional) { 13290 // for template-only hot-reload because in that case the render fn doesn't 13291 // go through the normalizer 13292 options._injectStyles = hook 13293 // register for functional component in vue file 13294 var originalRender = options.render 13295 options.render = function renderWithStyleInjection(h, context) { 13296 hook.call(context) 13297 return originalRender(h, context) 13298 } 13299 } else { 13300 // inject component registration as beforeCreate hook 13301 var existing = options.beforeCreate 13302 options.beforeCreate = existing ? [].concat(existing, hook) : [hook] 13303 } 13304 } 13305 13306 return { 13307 exports: scriptExports, 13308 options: options 13309 } 13310} 13311 13312 13313/***/ }), 13314
vendor: 1,193 bytes, lines 13315-13354
13315/***/ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js": 13316/*!*****************************************************************!*\ 13317 !*** ./node_modules/@babel/runtime/helpers/asyncToGenerator.js ***! 13318 \*****************************************************************/ 13319/***/ ((module) => { 13320 13321function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { 13322 try { 13323 var info = gen[key](arg); 13324 var value = info.value; 13325 } catch (error) { 13326 reject(error); 13327 return; 13328 } 13329 if (info.done) { 13330 resolve(value); 13331 } else { 13332 Promise.resolve(value).then(_next, _throw); 13333 } 13334} 13335function _asyncToGenerator(fn) { 13336 return function () { 13337 var self = this, 13338 args = arguments; 13339 return new Promise(function (resolve, reject) { 13340 var gen = fn.apply(self, args); 13341 function _next(value) { 13342 asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); 13343 } 13344 function _throw(err) { 13345 asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); 13346 } 13347 _next(undefined); 13348 }); 13349 }; 13350} 13351module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports; 13352 13353/***/ }), 13354
vendor: 558 bytes, lines 13355-13369
13355/***/ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js": 13356/*!**********************************************************************!*\ 13357 !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! 13358 \**********************************************************************/ 13359/***/ ((module) => { 13360 13361function _interopRequireDefault(obj) { 13362 return obj && obj.__esModule ? obj : { 13363 "default": obj 13364 }; 13365} 13366module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports; 13367 13368/***/ }), 13369
vendor: 14,503 bytes, lines 13370-13684
13370/***/ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js": 13371/*!*******************************************************************!*\ 13372 !*** ./node_modules/@babel/runtime/helpers/regeneratorRuntime.js ***! 13373 \*******************************************************************/ 13374/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13375 13376var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js")["default"]); 13377function _regeneratorRuntime() { 13378 "use strict"; 13379 13380 /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ 13381 module.exports = _regeneratorRuntime = function _regeneratorRuntime() { 13382 return exports; 13383 }, module.exports.__esModule = true, module.exports["default"] = module.exports; 13384 var exports = {}, 13385 Op = Object.prototype, 13386 hasOwn = Op.hasOwnProperty, 13387 defineProperty = Object.defineProperty || function (obj, key, desc) { 13388 obj[key] = desc.value; 13389 }, 13390 $Symbol = "function" == typeof Symbol ? Symbol : {}, 13391 iteratorSymbol = $Symbol.iterator || "@@iterator", 13392 asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", 13393 toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; 13394 function define(obj, key, value) { 13395 return Object.defineProperty(obj, key, { 13396 value: value, 13397 enumerable: !0, 13398 configurable: !0, 13399 writable: !0 13400 }), obj[key]; 13401 } 13402 try { 13403 define({}, ""); 13404 } catch (err) { 13405 define = function define(obj, key, value) { 13406 return obj[key] = value; 13407 }; 13408 } 13409 function wrap(innerFn, outerFn, self, tryLocsList) { 13410 var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, 13411 generator = Object.create(protoGenerator.prototype), 13412 context = new Context(tryLocsList || []); 13413 return defineProperty(generator, "_invoke", { 13414 value: makeInvokeMethod(innerFn, self, context) 13415 }), generator; 13416 } 13417 function tryCatch(fn, obj, arg) { 13418 try { 13419 return { 13420 type: "normal", 13421 arg: fn.call(obj, arg) 13422 }; 13423 } catch (err) { 13424 return { 13425 type: "throw", 13426 arg: err 13427 }; 13428 } 13429 } 13430 exports.wrap = wrap; 13431 var ContinueSentinel = {}; 13432 function Generator() {} 13433 function GeneratorFunction() {} 13434 function GeneratorFunctionPrototype() {} 13435 var IteratorPrototype = {}; 13436 define(IteratorPrototype, iteratorSymbol, function () { 13437 return this; 13438 }); 13439 var getProto = Object.getPrototypeOf, 13440 NativeIteratorPrototype = getProto && getProto(getProto(values([]))); 13441 NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); 13442 var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); 13443 function defineIteratorMethods(prototype) { 13444 ["next", "throw", "return"].forEach(function (method) { 13445 define(prototype, method, function (arg) { 13446 return this._invoke(method, arg); 13447 }); 13448 }); 13449 } 13450 function AsyncIterator(generator, PromiseImpl) { 13451 function invoke(method, arg, resolve, reject) { 13452 var record = tryCatch(generator[method], generator, arg); 13453 if ("throw" !== record.type) { 13454 var result = record.arg, 13455 value = result.value; 13456 return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { 13457 invoke("next", value, resolve, reject); 13458 }, function (err) { 13459 invoke("throw", err, resolve, reject); 13460 }) : PromiseImpl.resolve(value).then(function (unwrapped) { 13461 result.value = unwrapped, resolve(result); 13462 }, function (error) { 13463 return invoke("throw", error, resolve, reject); 13464 }); 13465 } 13466 reject(record.arg); 13467 } 13468 var previousPromise; 13469 defineProperty(this, "_invoke", { 13470 value: function value(method, arg) { 13471 function callInvokeWithMethodAndArg() { 13472 return new PromiseImpl(function (resolve, reject) { 13473 invoke(method, arg, resolve, reject); 13474 }); 13475 } 13476 return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); 13477 } 13478 }); 13479 } 13480 function makeInvokeMethod(innerFn, self, context) { 13481 var state = "suspendedStart"; 13482 return function (method, arg) { 13483 if ("executing" === state) throw new Error("Generator is already running"); 13484 if ("completed" === state) { 13485 if ("throw" === method) throw arg; 13486 return doneResult(); 13487 } 13488 for (context.method = method, context.arg = arg;;) { 13489 var delegate = context.delegate; 13490 if (delegate) { 13491 var delegateResult = maybeInvokeDelegate(delegate, context); 13492 if (delegateResult) { 13493 if (delegateResult === ContinueSentinel) continue; 13494 return delegateResult; 13495 } 13496 } 13497 if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { 13498 if ("suspendedStart" === state) throw state = "completed", context.arg; 13499 context.dispatchException(context.arg); 13500 } else "return" === context.method && context.abrupt("return", context.arg); 13501 state = "executing"; 13502 var record = tryCatch(innerFn, self, context); 13503 if ("normal" === record.type) { 13504 if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; 13505 return { 13506 value: record.arg, 13507 done: context.done 13508 }; 13509 } 13510 "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); 13511 } 13512 }; 13513 } 13514 function maybeInvokeDelegate(delegate, context) { 13515 var methodName = context.method, 13516 method = delegate.iterator[methodName]; 13517 if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; 13518 var record = tryCatch(method, delegate.iterator, context.arg); 13519 if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; 13520 var info = record.arg; 13521 return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); 13522 } 13523 function pushTryEntry(locs) { 13524 var entry = { 13525 tryLoc: locs[0] 13526 }; 13527 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); 13528 } 13529 function resetTryEntry(entry) { 13530 var record = entry.completion || {}; 13531 record.type = "normal", delete record.arg, entry.completion = record; 13532 } 13533 function Context(tryLocsList) { 13534 this.tryEntries = [{ 13535 tryLoc: "root" 13536 }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); 13537 } 13538 function values(iterable) { 13539 if (iterable) { 13540 var iteratorMethod = iterable[iteratorSymbol]; 13541 if (iteratorMethod) return iteratorMethod.call(iterable); 13542 if ("function" == typeof iterable.next) return iterable; 13543 if (!isNaN(iterable.length)) { 13544 var i = -1, 13545 next = function next() { 13546 for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; 13547 return next.value = undefined, next.done = !0, next; 13548 }; 13549 return next.next = next; 13550 } 13551 } 13552 return { 13553 next: doneResult 13554 }; 13555 } 13556 function doneResult() { 13557 return { 13558 value: undefined, 13559 done: !0 13560 }; 13561 } 13562 return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { 13563 value: GeneratorFunctionPrototype, 13564 configurable: !0 13565 }), defineProperty(GeneratorFunctionPrototype, "constructor", { 13566 value: GeneratorFunction, 13567 configurable: !0 13568 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { 13569 var ctor = "function" == typeof genFun && genFun.constructor; 13570 return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); 13571 }, exports.mark = function (genFun) { 13572 return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; 13573 }, exports.awrap = function (arg) { 13574 return { 13575 __await: arg 13576 }; 13577 }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { 13578 return this; 13579 }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { 13580 void 0 === PromiseImpl && (PromiseImpl = Promise); 13581 var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); 13582 return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { 13583 return result.done ? result.value : iter.next(); 13584 }); 13585 }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { 13586 return this; 13587 }), define(Gp, "toString", function () { 13588 return "[object Generator]"; 13589 }), exports.keys = function (val) { 13590 var object = Object(val), 13591 keys = []; 13592 for (var key in object) keys.push(key); 13593 return keys.reverse(), function next() { 13594 for (; keys.length;) { 13595 var key = keys.pop(); 13596 if (key in object) return next.value = key, next.done = !1, next; 13597 } 13598 return next.done = !0, next; 13599 }; 13600 }, exports.values = values, Context.prototype = { 13601 constructor: Context, 13602 reset: function reset(skipTempReset) { 13603 if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); 13604 }, 13605 stop: function stop() { 13606 this.done = !0; 13607 var rootRecord = this.tryEntries[0].completion; 13608 if ("throw" === rootRecord.type) throw rootRecord.arg; 13609 return this.rval; 13610 }, 13611 dispatchException: function dispatchException(exception) { 13612 if (this.done) throw exception; 13613 var context = this; 13614 function handle(loc, caught) { 13615 return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; 13616 } 13617 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 13618 var entry = this.tryEntries[i], 13619 record = entry.completion; 13620 if ("root" === entry.tryLoc) return handle("end"); 13621 if (entry.tryLoc <= this.prev) { 13622 var hasCatch = hasOwn.call(entry, "catchLoc"), 13623 hasFinally = hasOwn.call(entry, "finallyLoc"); 13624 if (hasCatch && hasFinally) { 13625 if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); 13626 if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); 13627 } else if (hasCatch) { 13628 if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); 13629 } else { 13630 if (!hasFinally) throw new Error("try statement without catch or finally"); 13631 if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); 13632 } 13633 } 13634 } 13635 }, 13636 abrupt: function abrupt(type, arg) { 13637 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 13638 var entry = this.tryEntries[i]; 13639 if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { 13640 var finallyEntry = entry; 13641 break; 13642 } 13643 } 13644 finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); 13645 var record = finallyEntry ? finallyEntry.completion : {}; 13646 return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); 13647 }, 13648 complete: function complete(record, afterLoc) { 13649 if ("throw" === record.type) throw record.arg; 13650 return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; 13651 }, 13652 finish: function finish(finallyLoc) { 13653 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 13654 var entry = this.tryEntries[i]; 13655 if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; 13656 } 13657 }, 13658 "catch": function _catch(tryLoc) { 13659 for (var i = this.tryEntries.length - 1; i >= 0; --i) { 13660 var entry = this.tryEntries[i]; 13661 if (entry.tryLoc === tryLoc) { 13662 var record = entry.completion; 13663 if ("throw" === record.type) { 13664 var thrown = record.arg; 13665 resetTryEntry(entry); 13666 } 13667 return thrown; 13668 } 13669 } 13670 throw new Error("illegal catch attempt"); 13671 }, 13672 delegateYield: function delegateYield(iterable, resultName, nextLoc) { 13673 return this.delegate = { 13674 iterator: values(iterable), 13675 resultName: resultName, 13676 nextLoc: nextLoc 13677 }, "next" === this.method && (this.arg = undefined), ContinueSentinel; 13678 } 13679 }, exports; 13680} 13681module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports; 13682 13683/***/ }), 13684
vendor: 828 bytes, lines 13685-13703
13685/***/ "./node_modules/@babel/runtime/helpers/typeof.js": 13686/*!*******************************************************!*\ 13687 !*** ./node_modules/@babel/runtime/helpers/typeof.js ***! 13688 \*******************************************************/ 13689/***/ ((module) => { 13690 13691function _typeof(obj) { 13692 "@babel/helpers - typeof"; 13693 13694 return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { 13695 return typeof obj; 13696 } : function (obj) { 13697 return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; 13698 }, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj); 13699} 13700module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports; 13701 13702/***/ }), 13703
vendor: 859 bytes, lines 13704-13727
13704/***/ "./node_modules/@babel/runtime/regenerator/index.js": 13705/*!**********************************************************!*\ 13706 !*** ./node_modules/@babel/runtime/regenerator/index.js ***! 13707 \**********************************************************/ 13708/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13709 13710// TODO(Babel 8): Remove this file. 13711 13712var runtime = __webpack_require__(/*! ../helpers/regeneratorRuntime */ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js")(); 13713module.exports = runtime; 13714 13715// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736= 13716try { 13717 regeneratorRuntime = runtime; 13718} catch (accidentalStrictMode) { 13719 if (typeof globalThis === "object") { 13720 globalThis.regeneratorRuntime = runtime; 13721 } else { 13722 Function("r", "regeneratorRuntime = r")(runtime); 13723 } 13724} 13725 13726/***/ }), 13727
vendor: 2,220 bytes, lines 13728-13737
13728/***/ "./node_modules/axios/package.json": 13729/*!*****************************************!*\ 13730 !*** ./node_modules/axios/package.json ***! 13731 \*****************************************/ 13732/***/ ((module) => { 13733 13734"use strict"; 13735module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"Promise based HTTP client for the browser and node.js","main":"index.js","scripts":{"test":"grunt test","start":"node ./sandbox/server.js","build":"NODE_ENV=production grunt build","preversion":"npm test","version":"npm run build && grunt version && git add -A dist && git add CHANGELOG.md bower.json package.json","postversion":"git push && git push --tags","examples":"node ./examples/server.js","coveralls":"cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js","fix":"eslint --fix lib/**/*.js"},"repository":{"type":"git","url":"https://github.com/axios/axios.git"},"keywords":["xhr","http","ajax","promise","node"],"author":"Matt Zabriskie","license":"MIT","bugs":{"url":"https://github.com/axios/axios/issues"},"homepage":"https://axios-http.com","devDependencies":{"coveralls":"^3.0.0","es6-promise":"^4.2.4","grunt":"^1.3.0","grunt-banner":"^0.6.0","grunt-cli":"^1.2.0","grunt-contrib-clean":"^1.1.0","grunt-contrib-watch":"^1.0.0","grunt-eslint":"^23.0.0","grunt-karma":"^4.0.0","grunt-mocha-test":"^0.13.3","grunt-ts":"^6.0.0-beta.19","grunt-webpack":"^4.0.2","istanbul-instrumenter-loader":"^1.0.0","jasmine-core":"^2.4.1","karma":"^6.3.2","karma-chrome-launcher":"^3.1.0","karma-firefox-launcher":"^2.1.0","karma-jasmine":"^1.1.1","karma-jasmine-ajax":"^0.1.13","karma-safari-launcher":"^1.0.0","karma-sauce-launcher":"^4.3.6","karma-sinon":"^1.0.5","karma-sourcemap-loader":"^0.3.8","karma-webpack":"^4.0.2","load-grunt-tasks":"^3.5.2","minimist":"^1.2.0","mocha":"^8.2.1","sinon":"^4.5.0","terser-webpack-plugin":"^4.2.3","typescript":"^4.0.5","url-search-params":"^0.10.0","webpack":"^4.44.2","webpack-dev-server":"^3.11.0"},"browser":{"./lib/adapters/http.js":"./lib/adapters/xhr.js"},"jsdelivr":"dist/axios.min.js","unpkg":"dist/axios.min.js","typings":"./index.d.ts","dependencies":{"follow-redirects":"^1.14.0"},"bundlesize":[{"path":"./dist/axios.min.js","threshold":"5kB"}]}'); 13736 13737/***/ })
vendor: 4,212 bytes, lines 13737-13835
13737 13738 13739/******/ }); 13740/************************************************************************/ 13741/******/ // The module cache 13742/******/ var __webpack_module_cache__ = {}; 13743/******/ 13744/******/ // The require function 13745/******/ function __webpack_require__(moduleId) { 13746/******/ // Check if module is in cache 13747/******/ var cachedModule = __webpack_module_cache__[moduleId]; 13748/******/ if (cachedModule !== undefined) { 13749/******/ return cachedModule.exports; 13750/******/ } 13751/******/ // Create a new module (and put it into the cache) 13752/******/ var module = __webpack_module_cache__[moduleId] = { 13753/******/ // no module.id needed 13754/******/ // no module.loaded needed 13755/******/ exports: {} 13756/******/ }; 13757/******/ 13758/******/ // Execute the module function 13759/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 13760/******/ 13761/******/ // Return the exports of the module 13762/******/ return module.exports; 13763/******/ } 13764/******/ 13765/************************************************************************/ 13766/******/ /* webpack/runtime/define property getters */ 13767/******/ (() => { 13768/******/ // define getter functions for harmony exports 13769/******/ __webpack_require__.d = (exports, definition) => { 13770/******/ for(var key in definition) { 13771/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 13772/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 13773/******/ } 13774/******/ } 13775/******/ }; 13776/******/ })(); 13777/******/ 13778/******/ /* webpack/runtime/global */ 13779/******/ (() => { 13780/******/ __webpack_require__.g = (function() { 13781/******/ if (typeof globalThis === 'object') return globalThis; 13782/******/ try { 13783/******/ return this || new Function('return this')(); 13784/******/ } catch (e) { 13785/******/ if (typeof window === 'object') return window; 13786/******/ } 13787/******/ })(); 13788/******/ })(); 13789/******/ 13790/******/ /* webpack/runtime/hasOwnProperty shorthand */ 13791/******/ (() => { 13792/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 13793/******/ })(); 13794/******/ 13795/******/ /* webpack/runtime/make namespace object */ 13796/******/ (() => { 13797/******/ // define __esModule on exports 13798/******/ __webpack_require__.r = (exports) => { 13799/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 13800/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 13801/******/ } 13802/******/ Object.defineProperty(exports, '__esModule', { value: true }); 13803/******/ }; 13804/******/ })(); 13805/******/ 13806/************************************************************************/ 13807var __webpack_exports__ = {}; 13808// This entry need to be wrapped in an IIFE because it need to be in strict mode. 13809(() => { 13810"use strict"; 13811/*!*****************************************!*\ 13812 !*** ./app/opening-hours-status-app.js ***! 13813 \*****************************************/ 13814 13815 13816var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 13817var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js")); 13818var _OpeningHoursStatus = _interopRequireDefault(__webpack_require__(/*! ./components/OpeningHours/OpeningHoursStatus */ "./app/components/OpeningHours/OpeningHoursStatus.vue")); 13819// Support multiple vue contact cards on one page. 13820var vueElements = document.getElementsByClassName("vue-opening-hours-status"); 13821var count = vueElements.length; 13822for (var i = 0; i < count; i++) { 13823 // Create a vue instance per opening hours component. 13824 new _vue.default({ 13825 el: vueElements[i], 13826 components: { 13827 OpeningHoursStatus: _OpeningHoursStatus.default 13828 } 13829 }); 13830} 13831})(); 13832 13833/******/ })() 13834; 13835//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwL29wZW5pbmctaG91cnMtc3RhdHVzLWFwcC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsbUJBQUE7QUFFQSxJQUFBQyxlQUFBLEdBQStCQyxjQUFjO0VBQXJDQyxZQUFZLEdBQUFGLGVBQUEsQ0FBWkUsWUFBWTtFQUFFQyxJQUFJLEdBQUFILGVBQUEsQ0FBSkcsSUFBSTtBQUMxQixJQUFBQyxxQkFBQSxHQUE4QkYsWUFBWSxDQUFsQ0csVUFBVTtFQUFWQSxVQUFVLEdBQUFEL
13835HFCQUFBLGNBQUcsSUFBSSxHQUFBQSxxQkFBQTtBQUN6QixJQUFBRSxnQkFBQSxHQUE0QkgsSUFBSSxDQUF4QkksVUFBVTtFQUFWQSxVQUFVLEdBQUFELGdCQUFBLGNBQUcsRUFBRSxHQUFBQSxnQkFBQTtBQUFVLElBQUFFLFFBQUEsR0FBQUMsa0JBQUEsR0FFbkIsU0FBQUQsU0FBQSxFQUFNO0VBQ2xCLE9BQU9HLGNBQUssQ0FBQ0MsTUFBTSxDQUFDO0lBQ2xCQyxPQUFPLEtBQUFDLE1BQUEsQ0FBS1QsVUFBVSxJQUFJVSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsTUFBTSxPQUFBSCxNQUFBLENBQUlQLFVBQVUsWUFBUztJQUN2RVcsT0FBTyxFQUFFO01BQ1AsUUFBUSxFQUFFLGtCQUFrQjtNQUM1QixjQUFjLEVBQUU7SUFDbEI7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDOzs7Ozs7Ozs7O0FDZERDLDRGQUF1Qzs7Ozs7Ozs7Ozs7QUNBMUI7O0FBRWIsSUFBSUMsS0FBSyxHQUFHckIsbUJBQU8sQ0FBQyxxREFBWSxDQUFDO0FBQ2pDLElBQUlzQixNQUFNLEdBQUd0QixtQkFBTyxDQUFDLGlFQUFrQixDQUFDO0FBQ3hDLElBQUl1QixPQUFPLEdBQUd2QixtQkFBTyxDQUFDLHlFQUFzQixDQUFDO0FBQzdDLElBQUl3QixRQUFRLEdBQUd4QixtQkFBTyxDQUFDLDJFQUF1QixDQUFDO0FBQy9DLElBQUl5QixhQUFhLEdBQUd6QixtQkFBTyxDQUFDLDZFQUF1QixDQUFDO0FBQ3BELElBQUkwQixZQUFZLEdBQUcxQixtQkFBTyxDQUFDLG1GQUEyQixDQUFDO0FBQ3ZELElBQUkyQixlQUFlLEdBQUczQixtQkFBTyxDQUFDLHlGQUE4QixDQUFDO0FBQzdELElBQUk0QixXQUFXLEdBQUc1QixtQkFBTyxDQUFDLHlFQUFxQixDQUFDO0FBRWhEb0IsTUFBTSxDQUFDVixPQUFPLEdBQUcsU0FBU21CLFVBQVVBLENBQUNDLE1BQU0sRUFBRTtFQUMzQyxPQUFPLElBQUlDLE9BQU8sQ0FBQyxTQUFTQyxrQkFBa0JB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DFELEtBQUssRUFBRTkxRCxDQUFDLEVBQUUsRUFBRTtFQUM5QjtFQUNBLElBQUk0bkIsWUFBRyxDQUFDO0lBQ05pRixFQUFFLEVBQUV1d0MsV0FBVyxDQUFDcDlELENBQUMsQ0FBQztJQUNsQjY2QixVQUFVLEVBQUU7TUFBQ3lpQyxrQkFBa0IsRUFBbEJBO0lBQWtCO0VBQ2pDLENBQUMsQ0FBQztBQUNKLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hcHAvdXRpbHMvYXBpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly8vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1N0YXR1cy52dWUiLCJ3ZWJwYWNrOi8vLy4vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1N0YXR1cy52dWUiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/M2FkZCIsIndlYnBhY2s6Ly8vLi9hcHAvY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXJzU3RhdHVzLnZ1ZT8zM2RlIiwid2VicGFjazovLy8uL2FwcC9jb21wb25lbnRzL09wZW5pbmdIb3Vycy9PcGVuaW5nSG91cnNTdGF0dXMudnVlPzAzYWUiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlbmluZy1ob3Vycy1zdGF0dXMtY
13835XBwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcblxuY29uc3QgeyBvcGVuaW5nSG91cnMsIHBhdGggfSA9IGRydXBhbFNldHRpbmdzO1xuY29uc3QgeyBhcGlCYXNlVXJsID0gbnVsbCB9ID0gb3BlbmluZ0hvdXJzO1xuY29uc3QgeyBwYXRoUHJlZml4ID0gXCJcIiB9ID0gcGF0aDtcblxuZXhwb3J0IGRlZmF1bHQoKSA9PiB7XG4gIHJldHVybiBheGlvcy5jcmVhdGUoe1xuICAgIGJhc2VVUkw6IGAke2FwaUJhc2VVcmwgfHwgd2luZG93LmxvY2F0aW9uLm9yaWdpbn0vJHtwYXRoUHJlZml4fWpzb25hcGlgLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfVxuICB9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgY29va2llcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb29raWVzJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi4vY29yZS9idWlsZEZ1bGxQYXRoJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIHZhciB1c2VybmFtZSA9IGNvbmZpZy5hdXRoLnVzZXJuYW1lIHx8ICcnO1xuICAgICAgdmFyIHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1
13835ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2Y
13835XIgdGltZW91dEVycm9yTWVzc2FnZSA9ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCc7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNvbmZpZy50cmFuc2l0aW9uYWwgJiYgY29uZmlnLnRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gJ0VUSU1FRE9VVCcgOiAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSkgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lID9cbiAgICAgICAgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSkgOlxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIWNvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3REYXRhKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoYXhpb3MuZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybi
13835BQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEEgYENhbmNlbGAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBjbGFzc1xuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBDYW5jZWwobWVzc2FnZSkge1xuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xufVxuXG5DYW5jZWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnQ2FuY2VsJyArICh0aGlzLm1lc3NhZ2UgPyAnOiAnICsgdGhpcy5tZXNzYWdlIDogJycpO1xufTtcblxuQ2FuY2VsLnByb3RvdHlwZS5fX0NBTkNFTF9fID0gdHJ1ZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYW5jZWw7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuL0NhbmNlbCcpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiB
13835oYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWwobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQgPSBmdW5jdGlvbiB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBidWlsZFVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL21lcmdlQ29uZmlnJyk7XG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi4vaGVscGVycy92YWxpZGF0b3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBhcmd1bWVudHNbMV0gfHwge307XG4gICAgY29uZmlnLnVybCA9IGFyZ3VtZW50c1swXTtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gIH1cblxuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gIC8vIFNldCBjb25maWcubWV0aG9kXG4gIGlmIChjb25maWcubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcbiAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRzLm1ldGhvZCkge1xuICAgIGNvbmZpZy5tZXRob2QgPSB0aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZy5tZXRob2QgPSAnZ2V0JztcbiAgfVxuXG4gIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsO1xuXG4gIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiwgJzEuMC4wJyksXG4gICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuLCAnMS4wLjAnKSxcbiAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiwgJzEuMC4wJylcbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2Y
13835XIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICByZXR1cm4gYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLnJlcGxhY2UoL15cXD8vLCAnJyk7XG59O1xuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWQsXG4gICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtY
13835XkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gIGNvbmZpZy5oZWFkZXJzID0gdXRpbHMubWVyZ2UoXG4gICAgY29uZmlnLmhlYWRlcnMuY29tbW9uIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzW2NvbmZpZy5tZXRob2RdIHx8IHt9LFxuICAgIGNvbmZpZy5oZWFkZXJzXG4gICk7XG5cbiAgdXRpbHMuZm9yRWFjaChcbiAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICBmdW5jdGlvbiBjbGVhbkhlYWRlckNvbmZpZyhtZXRob2QpIHtcbiAgICAgIGRlbGV0ZSBjb25maWcuaGVhZGVyc1ttZXRob2RdO1xuICAgIH1cbiAgKTtcblxuICB2YXIgYWRhcHRlciA9IGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXI7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVz
13835cG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZVxuICAgIH07XG4gIH07XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICB2YXIgY29uZmlnID0ge307XG5cbiAgdmFyIHZhbHVlRnJvbUNvbmZpZzJLZXlzID0gWyd1cmwnLCAnbWV0aG9kJywgJ2RhdGEnXTtcbiAgdmFyIG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzID0gWydoZWFkZXJzJywgJ2F1dGgnLCAncHJveHknLCAncGFyYW1zJ107XG4gIHZhciBkZWZhdWx0VG9Db25maWcyS2V5cyA9IFtcbiAgICAnYmFzZVVSTCcsICd0cmFuc2Zvcm1SZXF1ZXN0JywgJ3RyYW5zZm9ybVJlc3BvbnNlJywgJ3BhcmFtc1NlcmlhbGl6ZXInLFxuICAgICd0aW1lb3V0JywgJ3RpbWVvdXRNZXNzYWdlJywgJ3dpdGhDcmVkZW50aWFscycsICdhZGFwdGVyJywgJ3Jlc3BvbnNlVHlwZScsICd4c3JmQ29va2llTmFtZScsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJywgJ29uVXBsb2FkUHJvZ3Jlc3MnLCAnb25Eb3dubG9hZFByb2dyZXNzJywgJ2RlY29tcHJlc3MnLFxuICAgICdtYXhDb250ZW50TGVuZ3RoJywgJ21heEJvZHlMZW5ndGgnLCAnbWF4UmVkaXJlY3RzJywgJ3RyYW5zcG9ydCcsICdodHRwQWdlbnQnLFxuICAgICdodHRwc0FnZW50JywgJ2NhbmNlbFRva2VuJywgJ3NvY2tldFBhdGgnLCAncmVzcG9uc2VFbmNvZGluZydcbiAgXTtcbiAgdmFyIGRpcmVjdE1lcmdlS2V5cyA9IFsndmFsaWRhdGVTdGF0dXMnXTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZ
13835FZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIHV0aWxzLmZvckVhY2godmFsdWVGcm9tQ29uZmlnMktleXMsIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMltwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG1lcmdlRGVlcFByb3BlcnRpZXNLZXlzLCBtZXJnZURlZXBQcm9wZXJ0aWVzKTtcblxuICB1dGlscy5mb3JFYWNoKGRlZmF1bHRUb0NvbmZpZzJLZXlzLCBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzFbcHJvcF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChkaXJlY3RNZXJnZUtleXMsIGZ1bmN0aW9uIG1lcmdlKHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgY29uZmlnW3Byb3BdID0gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBheGlvc0tleXMgPSB2YWx1ZUZyb21Db25maWcyS2V5c1xuICAgIC5jb25jYXQobWVyZ2VEZWVwUHJvcGVydGllc0tleXMpXG4gICAgLmNvbmNhdChkZWZhdWx0VG9Db25maWcyS2V5cylcbiAgICAuY29uY2F0KGRpcmVjdE1lcmdlS2V5cyk7XG5cbiAgdmFyIG90aGVyS2V5cyA9IE9iamVjdFxuICAgIC5rZXlzKGNvbmZpZzEpXG4gICAgLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSlcbiAgICAuZmlsdGVyKGZ1bmN0aW9uIGZpbHRlckF4aW9zS2V5cyhrZXkpIHtcbiAgICAgIHJldHVybiBheGlvc0tleXMuaW5kZXhPZihrZXkpID09PSAtMTtcbiAgICB9KTtcblxuICB1dGlscy5mb3JFYWNoKG90aGVyS2V5cywgbWVyZ2VEZWVwUHJvcGVydGllcyk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi8uLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYmUgdHJhbnNmb3JtZWRcbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBmbnMpIHtcbiAgdmFyIGNvbnRleHQgPSB0aGlzIHx8IGRlZmF1bHRzO1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbnRleHQsIGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcbnZhciBlbmhhbmNlRXJyb3IgPSByZXF1aXJlKCcuL2NvcmUvZW5oYW5jZUVycm9yJyk7XG5cbnZhciBERUZBVUxUX0NPTlRFTlRfVFlQRSA9IHtcbiAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG59O1xuXG5mdW5jdGlvbiBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZG
13835VycywgdmFsdWUpIHtcbiAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzKSAmJiB1dGlscy5pc1VuZGVmaW5lZChoZWFkZXJzWydDb250ZW50LVR5cGUnXSkpIHtcbiAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRBZGFwdGVyKCkge1xuICB2YXIgYWRhcHRlcjtcbiAgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nKSB7XG4gICAgLy8gRm9yIG5vZGUgdXNlIEhUVFAgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHtcbiAgICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxuICB9LFxuXG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkgfHwgKGhlYWRlcnMgJiYgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPT09ICdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIHZhciB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbDtcbiAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcgfHwgKGZvcmNlZEpTT05QYXJzaW5nICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGVuaGFuY2VFcnJvcihlLCB0aGlzLCAnRV9KU09OX1BBUlNFJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2
13835ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG5cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgICB2Y
13835XIgY29va2llID0gW107XG4gICAgICAgICAgY29va2llLnB1c2gobmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkgeyByZXR1cm4gbnVsbDsgfSxcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGRcXCtcXC1cXC5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR
13835oZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gKHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JykgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgICB2Y
13835XIgaHJlZiA9IHVybDtcblxuICAgICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8vIEhlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG52YXIgaWdub3JlRHVwbGljYXRlT2YgPSBbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUp
13835IHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2YuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHBrZyA9IHJlcXVpcmUoJy4vLi4vLi4vcGFja2FnZS5qc29uJyk7XG5cbnZhciB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbih0eXBlLCBpKSB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG52YXIgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG52YXIgY3VycmVudFZlckFyciA9IHBrZy52ZXJzaW9uLnNwbGl0KCcuJyk7XG5cbi8qKlxuICogQ29tcGFyZSBwYWNrYWdlIHZlcnNpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSB0aGFuVmVyc2lvblxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzT2xkZXJWZXJzaW9uKHZlcnNpb24sIHRoYW5WZXJzaW9uKSB7XG4gIHZhciBwa2dWZXJzaW9uQXJyID0gdGhhblZlcnNpb24gPyB0aGFuVmVyc2lvbi5zcGxpdCgnLicpIDogY3VycmVudFZlckFycjtcbiAgdmFyIGRlc3RWZXIgPSB2ZXJzaW9uLnNwbGl0KCcuJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgaWYgKHBrZ1ZlcnNpb25BcnJbaV0gPiBkZXN0VmVyW2ldKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHBrZ1ZlcnNpb25BcnJbaV0gPCBkZXN0VmVyW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICB2YXIgaXNEZXByZWNhdGVkID0gdmVyc2lvbiAmJiBpc09sZGVyVmVyc2lvbih2ZXJzaW9uKTtcblxuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgcGtnLnZlcnNpb24gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvcHQsIG9wdHMpIHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQgaW4gJyArIHZlcnNpb24pKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEZXByZWNhdGVkICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc09sZGVyVmVyc2lvbjogaXNPbGRlclZlcnNpb24sXG4gIGFzc2VydE9wdGlvbnM6IGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnNcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIH
13835Rlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbCkge1xuICBpZiAodG9TdHJpbmcuY2FsbCh2YWwpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNEYXRlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGaWxlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGaWxlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCbG9iKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBCbG9iXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIH
13835Rlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmVhbSh2YWwpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVUkxTZWFyY2hQYXJhbXModmFsKSB7XG4gIHJldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXM7XG59XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICovXG5mdW5jdGlvbiBpc1N0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTmF0aXZlU2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5wcm9kdWN0ID09PSAnTlMnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09
13835iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFtrZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICogQHJldHVybiB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltLFxuICBzdHJpcEJPTTogc3RyaXBCT01cbn07XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJvcGVuaW5nLWhvdXJcIiB2LWlmPVwib3BlbmluZ0hvdXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRpbWVcIiA6Y2xhc3M9XCJvcGVuaW5nSG91ckNsYXNzXCIgdi1odG1sPVwib3BlbmluZ0hvdXJNZXNzYWdlXCI+PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwidGltZXN0YW1wXCIgdi1pZj1cImlzUGFya2luZ1BhZ2UgJiYgb3BlbmluZ0hvdXIuc3RhdHVzICE9PSAnY2xvc2VkJ1wiPlxuICAgICAge3sgb3BlbmluZ0hvdXIuc3RhcnQgfX0gLSB7eyBvcGVuaW5nSG91ci5lbmQgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbjxzY3JpcHQ+XG4gIGltcG9ydCBBcGkgZnJvbSBcIi4uLy4uL3V0aWxzL2FwaVwiO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiBcIk9wZW5pbmdIb3Vyc1N0YXR1c1wiLFxuICAgIHByb3BzOiB7XG4gICAgICBuaWQ6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgfSxcbiAgICAgIGZpZWxkTmFtZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIERydXBhbDogRHJ1cGFsLFxuICAgICAgICBvcGVuaW5nSG91cjogbnVsbCxcbiAgICAgIH07XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNQYXJraW5nUGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdwYWdlLW5vZGUtdHlwZS1wYXJraW5nLXpvbmUnKTtcbiAgICAgIH0sXG4gICAgICBvcGVuaW5nSG91ck1lc3NhZ2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcGVuaW5nSG91cikgcmV0dXJuICcnO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLm9wZW5pbmdIb3VyLnN0YXR1cztcbiAgICAgICAgaWYgKHRoaXMuaXNQYXJraW5nUGFnZSkge1xuICAgICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlICdvcGVuJzpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRHJ1cGFsLnQoJ1BhcmtpbmcgcG9zc2libGUnKTtcbiAgICAgICAgICAgIGNhc2UgJ29wZW5zX3Nvb24nOlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5EcnVwYWwudCgnUGFya2luZyBvcGVucyBzb29uJyk7XG4gICAgICAgICAgICBjYXNlICdjbG9zZXNfc29vbic6XG4gICAgICAgICAgICAgI
13835HJldHVybiB0aGlzLkRydXBhbC50KCdQYXJraW5nIGNsb3NlcyBzb29uJyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5EcnVwYWwudCgnUGFya2luZyBjbG9zZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgJ29wZW4nOlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5EcnVwYWwudCgnT3BlbicsIHt9LCB7Y29udGV4dDogJ0N1cnJlbnRseSBvcGVuJ30pO1xuICAgICAgICAgICAgY2FzZSAnb3BlbnNfc29vbic6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLkRydXBhbC50KCdPcGVucyBzb29uJyk7XG4gICAgICAgICAgICBjYXNlICdjbG9zZXNfc29vbic6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLkRydXBhbC50KCdDbG9zZXMgc29vbicpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRHJ1cGFsLnQoJ0Nsb3NlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9wZW5pbmdIb3VyQ2xhc3MoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcGVuaW5nSG91cikgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9wZW46IHRoaXMub3BlbmluZ0hvdXIuc3RhdHVzID09PSAnb3BlbicsXG4gICAgICAgICAgb3BlbnNfc29vbjogdGhpcy5vcGVuaW5nSG91ci5zdGF0dXMgPT09ICdvcGVuc19zb29uJyxcbiAgICAgICAgICBjbG9zZXNfc29vbjogdGhpcy5vcGVuaW5nSG91ci5zdGF0dXMgPT09ICdjbG9zZXNfc29vbicsXG4gICAgICAgICAgY2xvc2VkOiB0aGlzLm9wZW5pbmdIb3VyLnN0YXR1cyAhPT0gJ29wZW4nICYmIHRoaXMub3BlbmluZ0hvdXIuc3RhdHVzICE9PSAnb3BlbnNfc29vbicgJiYgdGhpcy5vcGVuaW5nSG91ci5zdGF0dXMgIT09ICdjbG9zZXNfc29vbidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFzeW5jIGdldE9wZW5pbmdIb3VycygpIHtcbiAgICAgICAgdGhpcy5vcGVuaW5nSG91ciA9IGF3YWl0IEFwaSgpXG4gICAgICAgICAgLmdldChgb3BlbmluZy1ob3Vycy8ke3RoaXMubmlkfS8ke3RoaXMuZmllbGROYW1lfWApXG4gICAgICAgICAgLnRoZW4oKHsgZGF0YTogeyBkYXRhIH0gfSkgPT4gZGF0YSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkKCkge1xuICAgICAgdGhpcy5nZXRPcGVuaW5nSG91cnMoKTtcbiAgICB9XG4gIH1cbjwvc2NyaXB0PlxuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgdmFyIF92bSA9IHRoaXMsXG4gICAgX2MgPSBfdm0uX3NlbGYuX2NcbiAgcmV0dXJuIF92bS5vcGVuaW5nSG91clxuICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJvcGVuaW5nLWhvdXJcIiB9LCBbXG4gICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwidGltZVwiLFxuICAgICAgICAgIGNsYXNzOiBfdm0ub3BlbmluZ0hvdXJDbGFzcyxcbiAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ub3BlbmluZ0hvdXJNZXNzYWdlKSB9LFxuICAgICAgICB9KSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLmlzUGFya2luZ1BhZ2UgJiYgX3ZtLm9wZW5pbmdIb3VyLnN0YXR1cyAhPT0gXCJjbG9zZWRcIlxuICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwidGltZXN0YW1wXCIgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgXCJcXG4gICAgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5vcGVuaW5nSG91ci5zdGFydCkgK1xuICAgICAgICAgICAgICAgICAgXCIgLSBcIiArXG4gICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLm9wZW5pbmdIb3VyLmVuZCkgK1xuICAgICAgICAgICAgICAgICAgXCJcXG4gIFwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBdKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCIvKiFcbiAqIFZ1ZS5qcyB2Mi43LjE0XG4gKiAoYykgMjAxNC0yMDIyIEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbnZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuLy8gVGhlc2UgaGVscGVycyBwcm9kdWNlIGJldHRlciBWTSBjb2RlIGluIEpTIGVuZ2luZXMgZHVlIHRvIHRoZWlyXG4vLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nLlxuZnVuY3Rpb24gaXNVbmRlZih2KSB7XG4gICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsO1xufVxuZnVuY3Rpb24gaXNEZWYodikge1xuICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzVHJ1ZSh2KSB7XG4gICAgcmV0dXJuIHYgPT09IHRydWU7XG59XG5mdW5jdGlvbiBpc0ZhbHNlKHYpIHtcbiAgICByZXR1cm4gdiA9PT0gZmFsc2U7XG59XG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHByaW1pdGl2ZS5cbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fFxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyk7XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogUXVpY2sgb2JqZWN0IGNoZWNrIC0gdGhpcyBpcyBwcmltYXJpbHkgdXNlZCB0byB0ZWxsXG4gKiBvYmplY3RzIGZyb20gcHJpbWl0aXZlIHZhbHVlcyB3aGVuIHdlIGtub3cgdGhlIHZhbHVlXG4gKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICAgIHJldHVybi
13835BvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCc7XG59XG4vKipcbiAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAqL1xudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5mdW5jdGlvbiB0b1Jhd1R5cGUodmFsdWUpIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKTtcbn1cbi8qKlxuICogU3RyaWN0IG9iamVjdCB0eXBlIGNoZWNrLiBPbmx5IHJldHVybnMgdHJ1ZVxuICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5mdW5jdGlvbiBpc1JlZ0V4cCh2KSB7XG4gICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbi8qKlxuICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRBcnJheUluZGV4KHZhbCkge1xuICAgIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodmFsKSk7XG4gICAgcmV0dXJuIG4gPj0gMCAmJiBNYXRoLmZsb29yKG4pID09PSBuICYmIGlzRmluaXRlKHZhbCk7XG59XG5mdW5jdGlvbiBpc1Byb21pc2UodmFsKSB7XG4gICAgcmV0dXJuIChpc0RlZih2YWwpICYmXG4gICAgICAgIHR5cGVvZiB2YWwudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nKTtcbn1cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbCkge1xuICAgIHJldHVybiB2YWwgPT0gbnVsbFxuICAgICAgICA/ICcnXG4gICAgICAgIDogQXJyYXkuaXNBcnJheSh2YWwpIHx8IChpc1BsYWluT2JqZWN0KHZhbCkgJiYgdmFsLnRvU3RyaW5nID09PSBfdG9TdHJpbmcpXG4gICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwgMilcbiAgICAgICAgICAgIDogU3RyaW5nKHZhbCk7XG59XG4vKipcbiAqIENvbnZlcnQgYW4gaW5wdXQgdmFsdWUgdG8gYSBudW1iZXIgZm9yIHBlcnNpc3RlbmNlLlxuICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbCkge1xuICAgIHZhciBuID0gcGFyc2VGbG9hdCh2YWwpO1xuICAgIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG47XG59XG4vKipcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICogaXMgaW4gdGhhdCBtYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNYXAoc3RyLCBleHBlY3RzTG93ZXJDYXNlKSB7XG4gICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIGxpc3QgPSBzdHIuc3BsaXQoJywnKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGVjdHNMb3dlckNhc2UgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9IDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH07XG59XG4vKipcbiAqIENoZWNrIGlmIGEgdGFnIGlzIGEgYnVpbHQtaW4gdGFnLlxuICovXG52YXIgaXNCdWlsdEluVGFnID0gbWFrZU1hcCgnc2xvdCxjb21wb25lbnQnLCB0cnVlKTtcbi8qKlxuICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuICovXG52YXIgaXNSZXNlcnZlZEF0dHJpYnV0ZSA9IG1ha2VNYXAoJ2tleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzJyk7XG4vKipcbiAqIFJlbW92ZSBhbiBpdGVtIGZyb20gYW4gYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZSQyKGFyciwgaXRlbSkge1xuICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIGlmIChsZW4pIHtcbiAgICAgICAgLy8gZmFzdCBwYXRoIGZvciB0aGUgb25seSAvIGxhc3QgaXRlbVxuICAgICAgICBpZiAoaXRlbSA9PT0gYXJyW2xlbiAtIDFdKSB7XG4gICAgICAgICAgICBhcnIubGVuZ3RoID0gbGVuIC0gMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eS5cbiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGhhc093bihvYmosIGtleSkge1xuICAgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn1cbi8qKlxuICogQ3JlYXRlIGEgY2FjaGVkIHZlcnNpb24gb2YgYSBwdXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYWNoZWQoZm4pIHtcbiAgICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJldHVybiBmdW5jdGlvbiBjYWNoZWRGbihzdHIpIHtcbiAgICAgICAgdmFyIGhpdCA9IGNhY2hlW3N0cl07XG4gICAgICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKTtcbiAgICB9O1xufVxuLyoqXG4gKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICovXG52YXIgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcbnZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIGZ1bmN0aW9uIChfLCBjKSB7IHJldHVybiAoYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnKTsgfSk7XG59KTtcbi8qKlxuICogQ2FwaXRhbGl6ZSBhIHN0cmluZy5cbiAqL1xudmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59KTtcbi8qKlxuICogSHlwaGVuYXRlIGEgY2FtZWxDYXNlIHN0cmluZy5cbiAqL1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKCk7XG59KTtcbi8qKlxuICogU2ltcGxlIGJpbmQgcG9seWZpbGwgZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0LFxuICogZS5nLiwgUGhhbnRvbUpTIDEueC4gVGVjaG5pY2FsbHksIHdlIGRvbid0IG5lZWQgdGhpcyBhbnltb3JlXG4gKiBzaW5jZSBuYXRpdmUgYmluZCBpcyBub3cgcGVyZm9ybWFudCBlbm91Z2ggaW4gbW9zdCBicm93c2Vycy5cbiAqIEJ1dCByZW1vdmluZyBpdCB3b3VsZCBtZWFuIGJyZWFraW5nIGNvZGUgdGhhdCB3YXMgYWJsZSB0byBydW4gaW5cbiAqIFBoYW50b21KUyAxLngsIHNvIHRoaXMgbXVzdCBiZSBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gcG9seWZpbGxCaW5kKGZuLCBjdHgpIHtcbiAgICBmdW5jdGlvbiBib3VuZEZuKGEpIHtcbiAgICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICByZXR1cm4gbFxuICAgICAgICAgICAgPyBsID4gMVxuICAgICAgICAgICAgICAgID8gZm4uYXBwbHkoY3R4LCBhcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgICAgICAgIDogZm4uY2FsbChjdHgpO1xuICAgIH1cbiAgICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gICAgcmV0dXJuIGJvdW5kRm47XG59XG5mdW5jdGlvbiBuYXRpdmVCaW5kKGZuLCBjdHgpIHtcbiAgICByZXR1cm4gZm4uYmluZChjdHgpO1xufVxuLy8gQHRzLWV4cGVjdC1lcnJvciBiaW5kIGNhbm5vdCBiZSBgdW5kZWZpbmVkYFxudmFyIGJpbmQkMSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID8gbmF0aXZlQmluZCA6IHBvbHlmaWxsQmluZDtcbi8qKlxuICogQ29udmVydCBhbiBBcnJheS1saWtlIG9iamVjdCB0byBhIHJlYWwgQXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkobGlzdCwgc3RhcnQpIHtcbiAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgdmFyIGkgPSBsaXN0Lmxlbmd0aCAtIHN0YXJ0O1xuICAgIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICByZXRbaV0gPSBsaXN0W2kgKyBzdGFydF07XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG4vKipcbiAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKHRvLCBfZnJvbSkge1xuICAgIGZvciAodmFyIGtleSBpbiBfZnJvbSkge1xuICAgICAgICB0b1trZXldID0gX2Zyb21ba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRvO1xufVxuLyoqXG4gKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICovXG5mdW5jdGlvbiB0b09iamVjdChhcnIpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFycltpXSkge1xuICAgICAgICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogUGVyZm9ybSBubyBvcGVyYXRpb24uXG4gKiBTdHViYmluZyBhcmdzIHRvIG1ha2UgRmxvdyBoYXBweSB3aXRob3V0IGxlYXZpbmcgdXNlbGVzcyB0cmFuc3BpbGVkIGNvZGVcbiAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKS5cbiAqL1xuZnVuY3Rpb24gbm9vcChhLCBiLCBjKSB7IH1cbi8qKlxuICogQWx3YXlzIHJldHVybiBmYWxzZS5cbiAqL1xudmFyIG5vID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGZhbHNlOyB9O1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyoqXG4gKiBSZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gKi9cbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9O1xuLyoqXG4gKiBHZW5lcmF0ZSBhIHN0cmluZyBjb250YWluaW5nIHN0YXRpYyBrZXlzIGZyb20gY29tcGlsZXIgbW9kdWxlcy5cbiAqL1xuZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyQxKG1vZHVsZXMpIHtcbiAgICByZXR1cm4gbW9kdWxlc1xuICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChrZXlzLCBtKSB7XG4gICAgICAgI
13835HJldHVybiBrZXlzLmNvbmNhdChtLnN0YXRpY0tleXMgfHwgW10pO1xuICAgIH0sIFtdKVxuICAgICAgICAuam9pbignLCcpO1xufVxuLyoqXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24gbG9vc2VFcXVhbChhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gICAgaWYgKGlzT2JqZWN0QSAmJiBpc09iamVjdEIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICAgICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoZSwgYltpXSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgICAgICAgICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIGtleXNBLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoIWlzT2JqZWN0QSAmJiAhaXNPYmplY3RCKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggYXQgd2hpY2ggYSBsb29zZWx5IGVxdWFsIHZhbHVlIGNhbiBiZVxuICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAqIGNvbnRhaW4gYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHNoYXBlKSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZihhcnIsIHZhbCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChsb29zZUVxdWFsKGFycltpXSwgdmFsKSlcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG4vKipcbiAqIEVuc3VyZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IG9uY2UuXG4gKi9cbmZ1bmN0aW9uIG9uY2UoZm4pIHtcbiAgICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pcyNwb2x5ZmlsbFxuZnVuY3Rpb24gaGFzQ2hhbmdlZCh4LCB5KSB7XG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IDAgJiYgMSAvIHggIT09IDEgLyB5O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHggfHwgeSA9PT0geTtcbiAgICB9XG59XG5cbnZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG52YXIgQVNTRVRfVFlQRVMgPSBbJ2NvbXBvbmVudCcsICdkaXJlY3RpdmUnLCAnZmlsdGVyJ107XG52YXIgTElGRUNZQ0xFX0hPT0tTID0gW1xuICAgICdiZWZvcmVDcmVhdGUnLFxuICAgICdjcmVhdGVkJyxcbiAgICAnYmVmb3JlTW91bnQnLFxuICAgICdtb3VudGVkJyxcbiAgICAnYmVmb3JlVXBkYXRlJyxcbiAgICAndXBkYXRlZCcsXG4gICAgJ2JlZm9yZURlc3Ryb3knLFxuICAgICdkZXN0cm95ZWQnLFxuICAgICdhY3RpdmF0ZWQnLFxuICAgICdkZWFjdGl2YXRlZCcsXG4gICAgJ2Vycm9yQ2FwdHVyZWQnLFxuICAgICdzZXJ2ZXJQcmVmZXRjaCcsXG4gICAgJ3JlbmRlclRyYWNrZWQnLFxuICAgICdyZW5kZXJUcmlnZ2VyZWQnXG5dO1xuXG52YXIgY29uZmlnID0ge1xuICAgIC8qKlxuICAgICAqIE9wdGlvbiBtZXJnZSBzdHJhdGVnaWVzICh1c2VkIGluIGNvcmUvdXRpbC9vcHRpb25zKVxuICAgICAqL1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIG9wdGlvbk1lcmdlU3RyYXRlZ2llczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgICAqL1xuICAgIHNpbGVudDogZmFsc2UsXG4gICAgLyoqXG4gICAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICAgKi9cbiAgICBwcm9kdWN0aW9uVGlwOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAgICovXG4gICAgZGV2dG9vbHM6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgICAqL1xuICAgIHBlcmZvcm1hbmNlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgICAqL1xuICAgIGVycm9ySGFuZGxlcjogbnVsbCxcbiAgICAvKipcbiAgICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICAgKi9cbiAgICB3YXJuSGFuZGxlcjogbnVsbCxcbiAgICAvKipcbiAgICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICAgKi9cbiAgICBpZ25vcmVkRWxlbWVudHM6IFtdLFxuICAgIC8qKlxuICAgICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAgICovXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSB0YWcgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhcyBhXG4gICAgICogY29tcG9uZW50LiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgICAqL1xuICAgIGlzUmVzZXJ2ZWRUYWc6IG5vLFxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSB1c2VkIGFzIGEgY29tcG9uZW50XG4gICAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICAgKi9cbiAgICBpc1Jlc2VydmVkQXR0cjogbm8sXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICAgKi9cbiAgICBpc1Vua25vd25FbGVtZW50OiBubyxcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBvZiBhbiBlbGVtZW50XG4gICAgICovXG4gICAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuICAgIC8qKlxuICAgICAqIFBhcnNlIHRoZSByZWFsIHRhZyBuYW1lIGZvciB0aGUgc3BlY2lmaWMgcGxhdGZvcm0uXG4gICAgICovXG4gICAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgICAqL1xuICAgIG11c3RVc2VQcm9wOiBubyxcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkuIEludGVuZGVkIHRvIGJlIHVzZWQgYnkgVnVlIFRlc3QgVXRpbHNcbiAgICAgKiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSByZWR1Y2UgcGVyZm9ybWFuY2UgaWYgc2V0IHRvIGZhbHNlLlxuICAgICAqL1xuICAgIGFzeW5jOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAgICovXG4gICAgX2xpZmVjeWNsZUhvb2tzOiBMSUZFQ1lDTEVfSE9PS1Ncbn07XG5cbi8qKlxuICogdW5pY29kZSBsZXR0ZXJzIHVzZWQgZm9yIHBhcnNpbmcgaHRtbCB0YWdzLCBjb21wb25lbnQgbmFtZXMgYW5kIHByb3BlcnR5IHBhdGhzLlxuICogdXNpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1My9zZW1hbnRpY3Mtc2NyaXB0aW5nLmh0bWwjcG90ZW50aWFsY3VzdG9tZWxlbWVudG5hbWVcbiAqIHNraXBwaW5nIFxcdTEwMDAwLVxcdUVGRkZGIGR1ZSB0byBpdCBmcmVlemluZyB1cCBQaGFudG9tSlNcbiAqL1xudmFyIHVuaWNvZGVSZWdFeHAgPSAvYS16QS1aXFx1MDBCN1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwM0YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RD
13835dGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRC87XG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICovXG5mdW5jdGlvbiBpc1Jlc2VydmVkKHN0cikge1xuICAgIHZhciBjID0gKHN0ciArICcnKS5jaGFyQ29kZUF0KDApO1xuICAgIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NWY7XG59XG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBkZWYob2JqLCBrZXksIHZhbCwgZW51bWVyYWJsZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICBlbnVtZXJhYmxlOiAhIWVudW1lcmFibGUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cbi8qKlxuICogUGFyc2Ugc2ltcGxlIHBhdGguXG4gKi9cbnZhciBiYWlsUkUgPSBuZXcgUmVnRXhwKFwiW15cIi5jb25jYXQodW5pY29kZVJlZ0V4cC5zb3VyY2UsIFwiLiRfXFxcXGRdXCIpKTtcbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gICAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghb2JqKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xufVxuXG4vLyBjYW4gd2UgdXNlIF9fcHJvdG9fXz9cbnZhciBoYXNQcm90byA9ICdfX3Byb3RvX18nIGluIHt9O1xuLy8gQnJvd3NlciBlbnZpcm9ubWVudCBzbmlmZmluZ1xudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xudmFyIFVBID0gaW5Ccm93c2VyICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG52YXIgaXNJRSA9IFVBICYmIC9tc2llfHRyaWRlbnQvLnRlc3QoVUEpO1xudmFyIGlzSUU5ID0gVUEgJiYgVUEuaW5kZXhPZignbXNpZSA5LjAnKSA+IDA7XG52YXIgaXNFZGdlID0gVUEgJiYgVUEuaW5kZXhPZignZWRnZS8nKSA+IDA7XG5VQSAmJiBVQS5pbmRleE9mKCdhbmRyb2lkJykgPiAwO1xudmFyIGlzSU9TID0gVUEgJiYgL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KFVBKTtcblVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xuVUEgJiYgL3BoYW50b21qcy8udGVzdChVQSk7XG52YXIgaXNGRiA9IFVBICYmIFVBLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLyk7XG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG4vLyBAdHMtZXhwZWN0LWVycm9yIGZpcmVib3ggc3VwcG9ydFxudmFyIG5hdGl2ZVdhdGNoID0ge30ud2F0Y2g7XG52YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG5pZiAoaW5Ccm93c2VyKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIG9wdHMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdHMsICdwYXNzaXZlJywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICBzdXBwb3J0c1Bhc3NpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdC1wYXNzaXZlJywgbnVsbCwgb3B0cyk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7IH1cbn1cbi8vIHRoaXMgbmVlZHMgdG8gYmUgbGF6eS1ldmFsZWQgYmVjYXVzZSB2dWUgbWF5IGJlIHJlcXVpcmVkIGJlZm9yZVxuLy8gdnVlLXNlcnZlci1yZW5kZXJlciBjYW4gc2V0IFZVRV9FTlZcbnZhciBfaXNTZXJ2ZXI7XG52YXIgaXNTZXJ2ZXJSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKF9pc1NlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWluQnJvd3NlciAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAgICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICAgICAgICBfaXNTZXJ2ZXIgPVxuICAgICAgICAgICAgICAgIGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfaXNTZXJ2ZXI7XG59O1xuLy8gZGV0ZWN0IGRldnRvb2xzXG52YXIgZGV2dG9vbHMgPSBpbkJyb3dzZXIgJiYgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaXNOYXRpdmUoQ3Rvcikge1xuICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKTtcbn1cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIGlzTmF0aXZlKFN5bWJvbCkgJiZcbiAgICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBpc05hdGl2ZShSZWZsZWN0Lm93bktleXMpO1xudmFyIF9TZXQ7IC8vICRmbG93LWRpc2FibGUtbGluZVxuLyogaXN0YW5idWwgaWdub3JlIGlmICovIGlmICh0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTZXQpKSB7XG4gICAgLy8gdXNlIG5hdGl2ZSBTZXQgd2hlbiBhdmFpbGFibGUuXG4gICAgX1NldCA9IFNldDtcbn1cbmVsc2Uge1xuICAgIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgICBfU2V0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBTZXQoKSB7XG4gICAgICAgICAgICB0aGlzLnNldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgI
13835H1cbiAgICAgICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRba2V5XSA9PT0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNldFtrZXldID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFNldDtcbiAgICB9KCkpO1xufVxuXG52YXIgY3VycmVudEluc3RhbmNlID0gbnVsbDtcbi8qKlxuICogVGhpcyBpcyBleHBvc2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdjMgKGUuZy4gc29tZSBmdW5jdGlvbnMgaW4gVnVlVXNlXG4gKiByZWxpZXMgb24gaXQpLiBEbyBub3QgdXNlIHRoaXMgaW50ZXJuYWxseSwganVzdCB1c2UgYGN1cnJlbnRJbnN0YW5jZWAuXG4gKlxuICogQGludGVybmFsIHRoaXMgZnVuY3Rpb24gbmVlZHMgbWFudWFsIHR5cGUgZGVjbGFyYXRpb24gYmVjYXVzZSBpdCByZWxpZXNcbiAqIG9uIHByZXZpb3VzbHkgbWFudWFsbHkgYXV0aG9yZWQgdHlwZXMgZnJvbSBWdWUgMlxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50SW5zdGFuY2UoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRJbnN0YW5jZSAmJiB7IHByb3h5OiBjdXJyZW50SW5zdGFuY2UgfTtcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHNldEN1cnJlbnRJbnN0YW5jZSh2bSkge1xuICAgIGlmICh2bSA9PT0gdm9pZCAwKSB7IHZtID0gbnVsbDsgfVxuICAgIGlmICghdm0pXG4gICAgICAgIGN1cnJlbnRJbnN0YW5jZSAmJiBjdXJyZW50SW5zdGFuY2UuX3Njb3BlLm9mZigpO1xuICAgIGN1cnJlbnRJbnN0YW5jZSA9IHZtO1xuICAgIHZtICYmIHZtLl9zY29wZS5vbigpO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgVk5vZGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVk5vZGUodGFnLCBkYXRhLCBjaGlsZHJlbiwgdGV4dCwgZWxtLCBjb250ZXh0LCBjb21wb25lbnRPcHRpb25zLCBhc3luY0ZhY3RvcnkpIHtcbiAgICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5lbG0gPSBlbG07XG4gICAgICAgIHRoaXMubnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuZm5Db250ZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmZuT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5mblNjb3BlSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMua2V5ID0gZGF0YSAmJiBkYXRhLmtleTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRPcHRpb25zID0gY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucmF3ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1Jvb3RJbnNlcnQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzQ29tbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ2xvbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNPbmNlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXN5bmNGYWN0b3J5ID0gYXN5bmNGYWN0b3J5O1xuICAgICAgICB0aGlzLmFzeW5jTWV0YSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZOb2RlLnByb3RvdHlwZSwgXCJjaGlsZFwiLCB7XG4gICAgICAgIC8vIERFUFJFQ0FURUQ6IGFsaWFzIGZvciBjb21wb25lbnRJbnN0YW5jZSBmb3IgYmFja3dhcmRzIGNvbXBhdC5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBWTm9kZTtcbn0oKSk7XG52YXIgY3JlYXRlRW1wdHlWTm9kZSA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgaWYgKHRleHQgPT09IHZvaWQgMCkgeyB0ZXh0ID0gJyc7IH1cbiAgICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xuICAgIG5vZGUudGV4dCA9IHRleHQ7XG4gICAgbm9kZS5pc0NvbW1lbnQgPSB0cnVlO1xuICAgIHJldHVybiBub2RlO1xufTtcbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSh2YWwpIHtcbiAgICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKTtcbn1cbi8vIG9wdGltaXplZCBzaGFsbG93IGNsb25lXG4vLyB1c2VkIGZvciBzdGF0aWMgbm9kZXMgYW5kIHNsb3Qgbm9kZXMgYmVjYXVzZSB0aGV5IG1heSBiZSByZXVzZWQgYWNyb3NzXG4vLyBtdWx0aXBsZSByZW5kZXJzLCBjbG9uaW5nIHRoZW0gYXZvaWRzIGVycm9ycyB3aGVuIERPTSBtYW5pcHVsYXRpb25zIHJlbHlcbi8vIG9uIHRoZWlyIGVsbSByZWZlcmVuY2UuXG5mdW5jdGlvbiBjbG9uZVZOb2RlKHZub2RlKSB7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZSh2bm9kZS50YWcsIHZub2Rl
13835LmRhdGEsIFxuICAgIC8vICM3OTc1XG4gICAgLy8gY2xvbmUgY2hpbGRyZW4gYXJyYXkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgaW4gY2FzZSBvZiBjbG9uaW5nXG4gICAgLy8gYSBjaGlsZC5cbiAgICB2bm9kZS5jaGlsZHJlbiAmJiB2bm9kZS5jaGlsZHJlbi5zbGljZSgpLCB2bm9kZS50ZXh0LCB2bm9kZS5lbG0sIHZub2RlLmNvbnRleHQsIHZub2RlLmNvbXBvbmVudE9wdGlvbnMsIHZub2RlLmFzeW5jRmFjdG9yeSk7XG4gICAgY2xvbmVkLm5zID0gdm5vZGUubnM7XG4gICAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gICAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xuICAgIGNsb25lZC5mbkNvbnRleHQgPSB2bm9kZS5mbkNvbnRleHQ7XG4gICAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgICBjbG9uZWQuZm5TY29wZUlkID0gdm5vZGUuZm5TY29wZUlkO1xuICAgIGNsb25lZC5hc3luY01ldGEgPSB2bm9kZS5hc3luY01ldGE7XG4gICAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgICByZXR1cm4gY2xvbmVkO1xufVxuXG4vKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUHJveHkgKi9cbnZhciBpbml0UHJveHk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBhbGxvd2VkR2xvYmFsc18xID0gbWFrZU1hcCgnSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTiwnICtcbiAgICAgICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICAgICAnTWF0aCxOdW1iZXIsRGF0ZSxBcnJheSxPYmplY3QsQm9vbGVhbixTdHJpbmcsUmVnRXhwLE1hcCxTZXQsSlNPTixJbnRsLEJpZ0ludCwnICtcbiAgICAgICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dzZXJpZnlcbiAgICApO1xuICAgIHZhciB3YXJuTm9uUHJlc2VudF8xID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgIHdhcm4kMihcIlByb3BlcnR5IG9yIG1ldGhvZCBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIpICtcbiAgICAgICAgICAgICdyZWZlcmVuY2VkIGR1cmluZyByZW5kZXIuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvcGVydHkgaXMgcmVhY3RpdmUsICcgK1xuICAgICAgICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICAgICAgICdpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5LiAnICtcbiAgICAgICAgICAgICdTZWU6IGh0dHBzOi8vdjIudnVlanMub3JnL3YyL2d1aWRlL3JlYWN0aXZpdHkuaHRtbCNEZWNsYXJpbmctUmVhY3RpdmUtUHJvcGVydGllcy4nLCB0YXJnZXQpO1xuICAgIH07XG4gICAgdmFyIHdhcm5SZXNlcnZlZFByZWZpeF8xID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgIHdhcm4kMihcIlByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIFxcXCIkZGF0YS5cIikuY29uY2F0KGtleSwgXCJcXFwiIGJlY2F1c2UgXCIpICtcbiAgICAgICAgICAgICdwcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggXCIkXCIgb3IgXCJfXCIgYXJlIG5vdCBwcm94aWVkIGluIHRoZSBWdWUgaW5zdGFuY2UgdG8gJyArXG4gICAgICAgICAgICAncHJldmVudCBjb25mbGljdHMgd2l0aCBWdWUgaW50ZXJuYWxzLiAnICtcbiAgICAgICAgICAgICdTZWU6IGh0dHBzOi8vdjIudnVlanMub3JnL3YyL2FwaS8jZGF0YScsIHRhcmdldCk7XG4gICAgfTtcbiAgICB2YXIgaGFzUHJveHlfMSA9IHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJveHkpO1xuICAgIGlmIChoYXNQcm94eV8xKSB7XG4gICAgICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllcl8xID0gbWFrZU1hcCgnc3RvcCxwcmV2ZW50LHNlbGYsY3RybCxzaGlmdCxhbHQsbWV0YSxleGFjdCcpO1xuICAgICAgICBjb25maWcua2V5Q29kZXMgPSBuZXcgUHJveHkoY29uZmlnLmtleUNvZGVzLCB7XG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCdWlsdEluTW9kaWZpZXJfMShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIG92ZXJ3cml0aW5nIGJ1aWx0LWluIG1vZGlmaWVyIGluIGNvbmZpZy5rZXlDb2RlczogLlwiLmNvbmNhdChrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGhhc0hhbmRsZXJfMSA9IHtcbiAgICAgICAgaGFzOiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgICAgIHZhciBoYXMgPSBrZXkgaW4gdGFyZ2V0O1xuICAgICAgICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93ZWRHbG9iYWxzXzEoa2V5KSB8fFxuICAgICAgICAgICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICBrZXkuY2hhckF0KDApID09PSAnXycgJiZcbiAgICAgICAgICAgICAgICAgICAgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICAgICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpXG4gICAgICAgICAgICAgICAgICAgIHdhcm5SZXNlcnZlZFByZWZpeF8xKHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHdhcm5Ob25QcmVzZW50XzEodGFyZ2V0LCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgZ2V0SGFuZGxlcl8xID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgd2FyblJlc2VydmVkUHJlZml4XzEodGFyZ2V0LCBrZXkpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgd2Fyb
13835k5vblByZXNlbnRfMSh0YXJnZXQsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV07XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGluaXRQcm94eSA9IGZ1bmN0aW9uIGluaXRQcm94eSh2bSkge1xuICAgICAgICBpZiAoaGFzUHJveHlfMSkge1xuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZCA/IGdldEhhbmRsZXJfMSA6IGhhc0hhbmRsZXJfMTtcbiAgICAgICAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbnZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn07XG5cbnZhciB1aWQkMiA9IDA7XG52YXIgcGVuZGluZ0NsZWFudXBEZXBzID0gW107XG52YXIgY2xlYW51cERlcHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZW5kaW5nQ2xlYW51cERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGRlcCA9IHBlbmRpbmdDbGVhbnVwRGVwc1tpXTtcbiAgICAgICAgZGVwLnN1YnMgPSBkZXAuc3Vicy5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHM7IH0pO1xuICAgICAgICBkZXAuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgcGVuZGluZ0NsZWFudXBEZXBzLmxlbmd0aCA9IDA7XG59O1xuLyoqXG4gKiBBIGRlcCBpcyBhbiBvYnNlcnZhYmxlIHRoYXQgY2FuIGhhdmUgbXVsdGlwbGVcbiAqIGRpcmVjdGl2ZXMgc3Vic2NyaWJpbmcgdG8gaXQuXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIERlcCA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEZXAoKSB7XG4gICAgICAgIC8vIHBlbmRpbmcgc3VicyBjbGVhbnVwXG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pZCA9IHVpZCQyKys7XG4gICAgICAgIHRoaXMuc3VicyA9IFtdO1xuICAgIH1cbiAgICBEZXAucHJvdG90eXBlLmFkZFN1YiA9IGZ1bmN0aW9uIChzdWIpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbiAgICB9O1xuICAgIERlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gKHN1Yikge1xuICAgICAgICAvLyAjMTI2OTYgZGVwcyB3aXRoIG1hc3NpdmUgYW1vdW50IG9mIHN1YnNjcmliZXJzIGFyZSBleHRyZW1lbHkgc2xvdyB0b1xuICAgICAgICAvLyBjbGVhbiB1cCBpbiBDaHJvbWl1bVxuICAgICAgICAvLyB0byB3b3JrYXJvdW5kIHRoaXMsIHdlIHVuc2V0IHRoZSBzdWIgZm9yIG5vdywgYW5kIGNsZWFyIHRoZW0gb25cbiAgICAgICAgLy8gbmV4dCBzY2hlZHVsZXIgZmx1c2guXG4gICAgICAgIHRoaXMuc3Vic1t0aGlzLnN1YnMuaW5kZXhPZihzdWIpXSA9IG51bGw7XG4gICAgICAgIGlmICghdGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgICAgICBwZW5kaW5nQ2xlYW51cERlcHMucHVzaCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGVwLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICAgICAgRGVwLnRhcmdldC5hZGREZXAodGhpcyk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbmZvICYmIERlcC50YXJnZXQub25UcmFjaykge1xuICAgICAgICAgICAgICAgIERlcC50YXJnZXQub25UcmFjayhfX2Fzc2lnbih7IGVmZmVjdDogRGVwLnRhcmdldCB9LCBpbmZvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgI
13835H1cbiAgICB9O1xuICAgIERlcC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgICAgLy8gc3RhYmlsaXplIHRoZSBzdWJzY3JpYmVyIGxpc3QgZmlyc3RcbiAgICAgICAgdmFyIHN1YnMgPSB0aGlzLnN1YnMuZmlsdGVyKGZ1bmN0aW9uIChzKSB7IHJldHVybiBzOyB9KTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbmZpZy5hc3luYykge1xuICAgICAgICAgICAgLy8gc3VicyBhcmVuJ3Qgc29ydGVkIGluIHNjaGVkdWxlciBpZiBub3QgcnVubmluZyBhc3luY1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBzb3J0IHRoZW0gbm93IHRvIG1ha2Ugc3VyZSB0aGV5IGZpcmUgaW4gY29ycmVjdFxuICAgICAgICAgICAgLy8gb3JkZXJcbiAgICAgICAgICAgIHN1YnMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzdWIgPSBzdWJzW2ldO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW5mbykge1xuICAgICAgICAgICAgICAgIHN1Yi5vblRyaWdnZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgc3ViLm9uVHJpZ2dlcihfX2Fzc2lnbih7IGVmZmVjdDogc3Vic1tpXSB9LCBpbmZvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWIudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEZXA7XG59KCkpO1xuLy8gVGhlIGN1cnJlbnQgdGFyZ2V0IHdhdGNoZXIgYmVpbmcgZXZhbHVhdGVkLlxuLy8gVGhpcyBpcyBnbG9iYWxseSB1bmlxdWUgYmVjYXVzZSBvbmx5IG9uZSB3YXRjaGVyXG4vLyBjYW4gYmUgZXZhbHVhdGVkIGF0IGEgdGltZS5cbkRlcC50YXJnZXQgPSBudWxsO1xudmFyIHRhcmdldFN0YWNrID0gW107XG5mdW5jdGlvbiBwdXNoVGFyZ2V0KHRhcmdldCkge1xuICAgIHRhcmdldFN0YWNrLnB1c2godGFyZ2V0KTtcbiAgICBEZXAudGFyZ2V0ID0gdGFyZ2V0O1xufVxuZnVuY3Rpb24gcG9wVGFyZ2V0KCkge1xuICAgIHRhcmdldFN0YWNrLnBvcCgpO1xuICAgIERlcC50YXJnZXQgPSB0YXJnZXRTdGFja1t0YXJnZXRTdGFjay5sZW5ndGggLSAxXTtcbn1cblxuLypcbiAqIG5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBwbGF5IHdlbGwgd2l0aFxuICogZHluYW1pY2FsbHkgYWNjZXNzaW5nIG1ldGhvZHMgb24gQXJyYXkgcHJvdG90eXBlXG4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIGFycmF5TWV0aG9kcyA9IE9iamVjdC5jcmVhdGUoYXJyYXlQcm90byk7XG52YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICAgJ3B1c2gnLFxuICAgICdwb3AnLFxuICAgICdzaGlmdCcsXG4gICAgJ3Vuc2hpZnQnLFxuICAgICdzcGxpY2UnLFxuICAgICdzb3J0JyxcbiAgICAncmV2ZXJzZSdcbl07XG4vKipcbiAqIEludGVyY2VwdCBtdXRhdGluZyBtZXRob2RzIGFuZCBlbWl0IGV2ZW50c1xuICovXG5tZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgICB2YXIgb3JpZ2luYWwgPSBhcnJheVByb3RvW21ldGhvZF07XG4gICAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yKCkge1xuICAgICAgICB2Y
13835XIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgdmFyIG9iID0gdGhpcy5fX29iX187XG4gICAgICAgIHZhciBpbnNlcnRlZDtcbiAgICAgICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgICAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAgICAgICAgICAgICAgaW5zZXJ0ZWQgPSBhcmdzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc2VydGVkKVxuICAgICAgICAgICAgb2Iub2JzZXJ2ZUFycmF5KGluc2VydGVkKTtcbiAgICAgICAgLy8gbm90aWZ5IGNoYW5nZVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgb2IuZGVwLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheSBtdXRhdGlvblwiIC8qIFRyaWdnZXJPcFR5cGVzLkFSUkFZX01VVEFUSU9OICovLFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgICAgICBrZXk6IG1ldGhvZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvYi5kZXAubm90aWZ5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbn0pO1xuXG52YXIgYXJyYXlLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJyYXlNZXRob2RzKTtcbnZhciBOT19JTklJVElBTF9WQUxVRSA9IHt9O1xuLyoqXG4gKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cbiAqL1xudmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuZnVuY3Rpb24gdG9nZ2xlT2JzZXJ2aW5nKHZhbHVlKSB7XG4gICAgc2hvdWxkT2JzZXJ2ZSA9IHZhbHVlO1xufVxuLy8gc3NyIG1vY2sgZGVwXG52YXIgbW9ja0RlcCA9IHtcbiAgICBub3RpZnk6IG5vb3AsXG4gICAgZGVwZW5kOiBub29wLFxuICAgIGFkZFN1Yjogbm9vcCxcbiAgICByZW1vdmVTdWI6IG5vb3Bcbn07XG4vKipcbiAqIE9ic2VydmVyIGNsYXNzIHRoYXQgaXMgYXR0YWNoZWQgdG8gZWFjaCBvYnNlcnZlZFxuICogb2JqZWN0LiBPbmNlIGF0dGFjaGVkLCB0aGUgb2JzZXJ2ZXIgY29udmVydHMgdGhlIHRhcmdldFxuICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAqIGNvbGxlY3QgZGVwZW5kZW5jaWVzIGFuZCBkaXNwYXRjaCB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2ZXIodmFsdWUsIHNoYWxsb3csIG1vY2spIHtcbiAgICAgICAgaWYgKHNoYWxsb3cgPT09IHZvaWQgMCkgeyBzaGFsbG93ID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKG1vY2sgPT09IHZvaWQgMCkgeyBtb2NrID0gZmFsc2U7IH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNoYWxsb3cgPSBzaGFsbG93O1xuICAgICAgICB0aGlzLm1vY2sgPSBtb2NrO1xuICAgICAgICAvLyB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgdGhpcy5kZXAgPSBtb2NrID8gbW9ja0RlcCA6IG5ldyBEZXAoKTtcbiAgICAgICAgdGhpcy52bUNvdW50ID0gMDtcbiAgICAgICAgZGVmKHZhbHVlLCAnX19vYl9fJywgdGhpcyk7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKCFtb2NrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc1Byb3RvKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLl9fcHJvdG9fXyA9IGFycmF5TWV0aG9kcztcbiAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1wcm90byAqL1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheUtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
13835XIga2V5ID0gYXJyYXlLZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmKHZhbHVlLCBrZXksIGFycmF5TWV0aG9kc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2hhbGxvdykge1xuICAgICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZUFycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICAgICAgICAgICAgICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gICAgICAgICAgICAgKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2YWx1ZSwga2V5LCBOT19JTklJVElBTF9WQUxVRSwgdW5kZWZpbmVkLCBzaGFsbG93LCBtb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBPYnNlcnZlIGEgbGlzdCBvZiBBcnJheSBpdGVtcy5cbiAgICAgKi9cbiAgICBPYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBvYnNlcnZlKHZhbHVlW2ldLCBmYWxzZSwgdGhpcy5tb2NrKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmVyO1xufSgpKTtcbi8vIGhlbHBlcnNcbi8qKlxuICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXG4gKiByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgaWYgc3VjY2Vzc2Z1bGx5IG9ic2VydmVkLFxuICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmUodmFsdWUsIHNoYWxsb3csIHNzck1vY2tSZWFjdGl2aXR5KSB7XG4gICAgaWYgKHZhbHVlICYmIGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5fX29iX187XG4gICAgfVxuICAgIGlmIChzaG91bGRPYnNlcnZlICYmXG4gICAgICAgIChzc3JNb2NrUmVhY3Rpdml0eSB8fCAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSkgJiZcbiAgICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IGlzUGxhaW5PYmplY3QodmFsdWUpKSAmJlxuICAgICAgICBPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSAmJlxuICAgICAgICAhdmFsdWUuX192X3NraXAgLyogUmVhY3RpdmVGbGFncy5TS0lQICovICYmXG4gICAgICAgICFpc1JlZih2YWx1ZSkgJiZcbiAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFZOb2RlKSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmVyKHZhbHVlLCBzaGFsbG93LCBzc3JNb2NrUmVhY3Rpdml0eSk7XG4gICAgfVxufVxuLyoqXG4gKiBEZWZpbmUgYSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiBhbiBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlYWN0aXZlKG9iaiwga2V5LCB2YWwsIGN1c3RvbVNldHRlciwgc2hhbGxvdywgbW9jaykge1xuICAgIHZhciBkZXAgPSBuZXcgRGVwKCk7XG4gICAgdmFyIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gICAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjYXRlciBmb3IgcHJlLWRlZmluZWQgZ2V0dGVyL3NldHRlcnNcbiAgICB2YXIgZ2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0O1xuICAgIHZhciBzZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQ7XG4gICAgaWYgKCghZ2V0dGVyIHx8IHNldHRlcikgJiZcbiAgICAgICAgKHZhbCA9PT0gTk9fSU5JSVRJQUxfVkFMVUUgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikpIHtcbiAgICAgICAgdmFsID0gb2JqW2tleV07XG4gICAgfVxuICAgIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwsIGZhbHNlLCBtb2NrKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyKCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwLmRlcGVuZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRPYikge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgI
13835H1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXNSZWYodmFsdWUpICYmICFzaGFsbG93ID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlcihuZXdWYWwpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICAgICAgICBpZiAoIWhhc0NoYW5nZWQodmFsdWUsIG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBjdXN0b21TZXR0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChnZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghc2hhbGxvdyAmJiBpc1JlZih2YWx1ZSkgJiYgIWlzUmVmKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwsIGZhbHNlLCBtb2NrKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVwLm5vdGlmeSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9iaixcbiAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVwLm5vdGlmeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRlcDtcbn1cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIGtleSwgdmFsKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKSkge1xuICAgICAgICB3YXJuJDIoXCJDYW5ub3Qgc2V0IHJlYWN0aXZlIHByb3BlcnR5IG9uIHVuZGVmaW5lZCwgbnVsbCwgb3IgcHJpbWl0aXZlIHZhbHVlOiBcIi5jb25jYXQodGFyZ2V0KSk7XG4gICAgfVxuICAgIGlmIChpc1JlYWRvbmx5KHRhcmdldCkpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuJDIoXCJTZXQgb3BlcmF0aW9uIG9uIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG9iID0gdGFyZ2V0Ll9fb2JfXztcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzVmFsaWRBcnJheUluZGV4KGtleSkpIHtcbiAgICAgICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgICAgIHRhcmdldC5zcGxpY2Uoa2V5LCAxLCB2YWwpO1xuICAgICAgICAvLyB3aGVuIG1vY2tpbmcgZm9yIFNTUiwgYXJyYXkgbWV0aG9kcyBhcmUgbm90IGhpamFja2VkXG4gICAgICAgIGlmIChvYiAmJiAhb2Iuc2hhbGxvdyAmJiBvYi5tb2NrKSB7XG4gICAgICAgICAgICBvYnNlcnZlKHZhbCwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0Ll9pc1Z1ZSB8fCAob2IgJiYgb2Iudm1Db3VudCkpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKCdBdm9pZCBhZGRpbmcgcmVhY3RpdmUgcHJvcGVydGllcyB0byBhIFZ1ZSBpbnN0YW5jZSBvciBpdHMgcm9vdCAkZGF0YSAnICtcbiAgICAgICAgICAgICAgICAnYXQgcnVudGltZSAtIGRlY2xhcmUgaXQgdXBmcm9udCBpbiB0aGUgZGF0YSBvcHRpb24uJyk7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGlmICghb2IpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGRlZmluZVJlYWN0aXZlKG9iLnZhbHVlLCBrZXksIHZhbCwgdW5kZWZpbmVkLCBvYi5zaGFsbG93LCBvYi5tb2NrKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBvYi5kZXAubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6IFwiYWRkXCIgLyogVHJpZ2dlck9wVHlwZXMuQUREICovLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB2YWwsXG4gICAgICAgICAgICBvbGRWYWx1ZTogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gZGVsKHRhcmdldCwga2V5KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpKSkge1xuICAgICAgICB3YXJuJDIoXCJDYW5ub3QgZGVsZXRlIHJlYWN0aXZlIHByb3BlcnR5IG9uIHVuZGVmaW5lZCwgbnVsbCwgb3IgcHJpbWl0aXZlIHZhbHVlOiBcIi5jb25jYXQodGFyZ2V0KSk7XG4gICAgfVxuICAgIGlmIChpc0FycmF
138355KHRhcmdldCkgJiYgaXNWYWxpZEFycmF5SW5kZXgoa2V5KSkge1xuICAgICAgICB0YXJnZXQuc3BsaWNlKGtleSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG9iID0gdGFyZ2V0Ll9fb2JfXztcbiAgICBpZiAodGFyZ2V0Ll9pc1Z1ZSB8fCAob2IgJiYgb2Iudm1Db3VudCkpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKCdBdm9pZCBkZWxldGluZyBwcm9wZXJ0aWVzIG9uIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgICAgICAgICAgICctIGp1c3Qgc2V0IGl0IHRvIG51bGwuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuJDIoXCJEZWxldGUgb3BlcmF0aW9uIG9uIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVsZXRlIHRhcmdldFtrZXldO1xuICAgIGlmICghb2IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBvYi5kZXAubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6IFwiZGVsZXRlXCIgLyogVHJpZ2dlck9wVHlwZXMuREVMRVRFICovLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBrZXk6IGtleVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICB9XG59XG4vKipcbiAqIENvbGxlY3QgZGVwZW5kZW5jaWVzIG9uIGFycmF5IGVsZW1lbnRzIHdoZW4gdGhlIGFycmF5IGlzIHRvdWNoZWQsIHNpbmNlXG4gKiB3ZSBjYW5ub3QgaW50ZXJjZXB0IGFycmF5IGVsZW1lbnQgYWNjZXNzIGxpa2UgcHJvcGVydHkgZ2V0dGVycy5cbiAqL1xuZnVuY3Rpb24gZGVwZW5kQXJyYXkodmFsdWUpIHtcbiAgICBmb3IgKHZhciBlID0gdm9pZCAwLCBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBlID0gdmFsdWVbaV07XG4gICAgICAgIGlmIChlICYmIGUuX19vYl9fKSB7XG4gICAgICAgICAgICBlLl9fb2JfXy5kZXAuZGVwZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXkoZSkpIHtcbiAgICAgICAgICAgIGRlcGVuZEFycmF5KGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFjdGl2ZSh0YXJnZXQpIHtcbiAgICBtYWtlUmVhY3RpdmUodGFyZ2V0LCBmYWxzZSk7XG4gICAgcmV0dXJuIHRhcmdldDtcbn1cbi8qKlxuICogUmV0dXJuIGEgc2hhbGxvd2x5LXJlYWN0aXZlIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCwgd2hlcmUgb25seSB0aGUgcm9vdFxuICogbGV2ZWwgcHJv
13835cGVydGllcyBhcmUgcmVhY3RpdmUuIEl0IGFsc28gZG9lcyBub3QgYXV0by11bndyYXAgcmVmcyAoZXZlbiBhdCB0aGVcbiAqIHJvb3QgbGV2ZWwpLlxuICovXG5mdW5jdGlvbiBzaGFsbG93UmVhY3RpdmUodGFyZ2V0KSB7XG4gICAgbWFrZVJlYWN0aXZlKHRhcmdldCwgdHJ1ZSk7XG4gICAgZGVmKHRhcmdldCwgXCJfX3ZfaXNTaGFsbG93XCIgLyogUmVhY3RpdmVGbGFncy5JU19TSEFMTE9XICovLCB0cnVlKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gbWFrZVJlYWN0aXZlKHRhcmdldCwgc2hhbGxvdykge1xuICAgIC8vIGlmIHRyeWluZyB0byBvYnNlcnZlIGEgcmVhZG9ubHkgcHJveHksIHJldHVybiB0aGUgcmVhZG9ubHkgdmVyc2lvbi5cbiAgICBpZiAoIWlzUmVhZG9ubHkodGFyZ2V0KSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIHVzaW5nIEFycmF5IGFzIHJvb3QgdmFsdWUgZm9yIFwiLmNvbmNhdChzaGFsbG93ID8gXCJzaGFsbG93UmVhY3RpdmUoKVwiIDogXCJyZWFjdGl2ZSgpXCIsIFwiIGFzIGl0IGNhbm5vdCBiZSB0cmFja2VkIGluIHdhdGNoKCkgb3Igd2F0Y2hFZmZlY3QoKS4gVXNlIFwiKS5jb25jYXQoc2hhbGxvdyA/IFwic2hhbGxvd1JlZigpXCIgOiBcInJlZigpXCIsIFwiIGluc3RlYWQuIFRoaXMgaXMgYSBWdWUtMi1vbmx5IGxpbWl0YXRpb24uXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBleGlzdGluZ09iID0gdGFyZ2V0ICYmIHRhcmdldC5fX29iX187XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdPYiAmJiBleGlzdGluZ09iLnNoYWxsb3cgIT09IHNoYWxsb3cpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUYXJnZXQgaXMgYWxyZWFkeSBhIFwiLmNvbmNhdChleGlzdGluZ09iLnNoYWxsb3cgPyBcIlwiIDogXCJub24tXCIsIFwic2hhbGxvdyByZWFjdGl2ZSBvYmplY3QsIGFuZCBjYW5ub3QgYmUgY29udmVydGVkIHRvIFwiKS5jb25jYXQoc2hhbGxvdyA/IFwiXCIgOiBcIm5vbi1cIiwgXCJzaGFsbG93LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9iID0gb2JzZXJ2ZSh0YXJnZXQsIHNoYWxsb3csIGlzU2VydmVyUmVuZGVyaW5nKCkgLyogc3NyIG1vY2sgcmVhY3Rpdml0eSAqLyk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFvYikge1xuICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJ2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFjdGl2ZTogXCIuY29uY2F0KFN0cmluZyh0YXJnZXQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCByZWFjdGl2ZSBjb2xsZWN0aW9uIHR5cGVzIHN1Y2ggYXMgTWFwIG9yIFNldC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpc1JlYWN0aXZlKHZhbHVlKSB7XG4gICAgaWYgKGlzUmVhZG9ubHkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBpc1JlYWN0aXZlKHZhbHVlW1wiX192X3Jhd1wiIC8qIFJlYWN0aXZlRmxhZ3MuUkFXICovXSk7XG4gICAgfVxuICAgIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX29iX18pO1xufVxuZnVuY3Rpb24gaXNTaGFsbG93KHZhbHVlKSB7XG4gICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fdl9pc1NoYWxsb3cpO1xufVxuZnVuY3Rpb24gaXNSZWFkb25seSh2YWx1ZSkge1xuICAgIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX3ZfaXNSZWFkb25seSk7XG59XG5mdW5jdGlvbiBpc1Byb3h5KHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzUmVhY3RpdmUodmFsdWUpIHx8IGlzUmVhZG9ubHkodmFsdWUpO1xufVxuZnVuY3Rpb24gdG9SYXcob2JzZXJ2ZWQpIHtcbiAgICB2YXIgcmF3ID0gb2JzZXJ2ZWQgJiYgb2JzZXJ2ZWRbXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi9dO1xuICAgIHJldHVybiByYXcgPyB0b1JhdyhyYXcpIDogb2JzZXJ2ZWQ7XG59XG5mdW5jdGlvbiBtYXJrUmF3KHZhbHVlKSB7XG4gICAgLy8gbm9uLWV4dGVuc2libGUgb2JqZWN0cyB3b24ndCBiZSBvYnNlcnZlZCBhbnl3YXlcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgZGVmKHZhbHVlLCBcIl9fdl9za2lwXCIgLyogUmVhY3RpdmVGbGFncy5TS0lQICovLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNDb2xsZWN0aW9uVHlwZSh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgICByZXR1cm4gKHR5cGUgPT09ICdNYXAnIHx8IHR5cGUgPT09ICdXZWFrTWFwJyB8fCB0eXBlID09PSAnU2V0JyB8fCB0eXBlID09PSAnV2Vha1NldCcpO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUmVmRmxhZyA9IFwiX192X2lzUmVmXCI7XG5mdW5jdGlvbiBpc1JlZihyKSB7XG4gICAgcmV0dXJuICEhKHIgJiYgci5fX3ZfaXNSZWYgPT09IHRydWUpO1xufVxuZnVuY3Rpb24gcmVmJDEodmFsdWUpIHtcbiAgICByZXR1cm4gY3JlYXRlUmVmKHZhbHVlLCBmYWxzZSk7XG59XG5mdW5jdGlvbiBzaGFsbG93UmVmKHZhbHVlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlZih2YWx1ZSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVSZWYocmF3VmFsdWUsIHNoYWxsb3cpIHtcbiAgICBpZiAoaXNSZWYocmF3VmFsdWUpKSB7XG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHJlZiA9IHt9O1xuICAgIGRlZihyZWYsIFJlZkZsYWcsIHRydWUpO1xuICAgIGRlZihyZWYsIFwiX192X2lzU2hhbGxvd1wiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfU0hBTExPVyAqLywgc2hhbGxvdyk7XG4gICAgZGVmKHJlZiwgJ2RlcCcsIGRlZmluZVJlYWN0aXZlKHJlZiwgJ3ZhbHVlJywgcmF3VmFsdWUsIG51bGwsIHNoYWxsb3csIGlzU2VydmVyUmVuZGVyaW5nKCkpKTtcbiAgICByZXR1cm4gcmVmO1xufVxuZnVuY3Rpb24gdHJpZ2dlclJlZihyZWYpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhcmVmLmRlcCkge1xuICAgICAgICB3YXJuJDIoXCJyZWNlaXZlZCBvYmplY3QgaXMgbm90IGEgdHJpZ2dlcmFibGUgcmVmLlwiKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgcmVmLmRlcCAmJlxuICAgICAgICAgICAgcmVmLmRlcC5ub3RpZnkoe1xuICAgICAgICAgICAgICAgI
13835HR5cGU6IFwic2V0XCIgLyogVHJpZ2dlck9wVHlwZXMuU0VUICovLFxuICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxuICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZWYuZGVwICYmIHJlZi5kZXAubm90aWZ5KCk7XG4gICAgfVxufVxuZnVuY3Rpb24gdW5yZWYocmVmKSB7XG4gICAgcmV0dXJuIGlzUmVmKHJlZikgPyByZWYudmFsdWUgOiByZWY7XG59XG5mdW5jdGlvbiBwcm94eVJlZnMob2JqZWN0V2l0aFJlZnMpIHtcbiAgICBpZiAoaXNSZWFjdGl2ZShvYmplY3RXaXRoUmVmcykpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFdpdGhSZWZzO1xuICAgIH1cbiAgICB2YXIgcHJveHkgPSB7fTtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdFdpdGhSZWZzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHJveHlXaXRoUmVmVW53cmFwKHByb3h5LCBvYmplY3RXaXRoUmVmcywga2V5c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBwcm94eTtcbn1cbmZ1bmN0aW9uIHByb3h5V2l0aFJlZlVud3JhcCh0YXJnZXQsIHNvdXJjZSwga2V5KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gc291cmNlW2tleV07XG4gICAgICAgICAgICBpZiAoaXNSZWYodmFsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWwudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIgb2IgPSB2YWwgJiYgdmFsLl9fb2JfXztcbiAgICAgICAgICAgICAgICBpZiAob2IpXG4gICAgICAgICAgICAgICAgICAgIG9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgICAgICBpZiAoaXNSZWYob2xkVmFsdWUpICYmICFpc1JlZih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gY3VzdG9tUmVmKGZhY3RvcnkpIHtcbiAgICB2YXIgZGVwID0gbmV3IERlcCgpO1xuICAgIHZhciBfYSA9IGZhY3RvcnkoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgZGVwLmRlcGVuZCh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiByZWYsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLFxuICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBkZXAubm90aWZ5KHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHJlZixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNldFwiIC8qIFRyaWdnZXJPcFR5cGVzLlNFVCAqLyxcbiAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVwLm5vdGlmeSgpO1xuICAgICAgICB9XG4gICAgfSksIGdldCA9IF9hLmdldCwgc2V0ID0gX2Euc2V0O1xuICAgIHZhciByZWYgPSB7XG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0IHZhbHVlKG5ld1ZhbCkge1xuICAgICAgICAgICAgc2V0KG5ld1ZhbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGRlZihyZWYsIFJlZkZsYWcsIHRydWUpO1xuICAgIHJldHVybiByZWY7XG59XG5mdW5jdGlvbiB0b1JlZnMob2JqZWN0KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWlzUmVhY3RpdmUob2JqZWN0KSkge1xuICAgICAgICB3YXJuJDIoXCJ0b1JlZnMoKSBleHBlY3RzIGEgcmVhY3RpdmUgb2JqZWN0IGJ1dCByZWNlaXZlZCBhIHBsYWluIG9uZS5cIik7XG4gICAgfVxuICAgIHZhciByZXQgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCkgOiB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgIHJldFtrZXldID0gdG9SZWYob2JqZWN0LCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gdG9SZWYob2JqZWN0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciB2YWwgPSBvYmplY3Rba2V5XTtcbiAgICBpZiAoaXNSZWYodmFsKSkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB2YXIgcmVmID0ge1xuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICB2Y
13835XIgdmFsID0gb2JqZWN0W2tleV07XG4gICAgICAgICAgICByZXR1cm4gdmFsID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiB2YWw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCB2YWx1ZShuZXdWYWwpIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gbmV3VmFsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBkZWYocmVmLCBSZWZGbGFnLCB0cnVlKTtcbiAgICByZXR1cm4gcmVmO1xufVxuXG52YXIgcmF3VG9SZWFkb25seUZsYWcgPSBcIl9fdl9yYXdUb1JlYWRvbmx5XCI7XG52YXIgcmF3VG9TaGFsbG93UmVhZG9ubHlGbGFnID0gXCJfX3ZfcmF3VG9TaGFsbG93UmVhZG9ubHlcIjtcbmZ1bmN0aW9uIHJlYWRvbmx5KHRhcmdldCkge1xuICAgIHJldHVybiBjcmVhdGVSZWFkb25seSh0YXJnZXQsIGZhbHNlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJlYWRvbmx5KHRhcmdldCwgc2hhbGxvdykge1xuICAgIGlmICghaXNQbGFpbk9iamVjdCh0YXJnZXQpKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCByZWFkb25seSBhcnJheXMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNDb2xsZWN0aW9uVHlwZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVnVlIDIgZG9lcyBub3Qgc3VwcG9ydCByZWFkb25seSBjb2xsZWN0aW9uIHR5cGVzIHN1Y2ggYXMgTWFwIG9yIFNldC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJ2YWx1ZSBjYW5ub3QgYmUgbWFkZSByZWFkb25seTogXCIuY29uY2F0KHR5cGVvZiB0YXJnZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhT2JqZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpKSB7XG4gICAgICAgIHdhcm4kMihcIlZ1ZSAyIGRvZXMgbm90IHN1cHBvcnQgY3JlYXRpbmcgcmVhZG9ubHkgcHJveHkgZm9yIG5vbi1leHRlbnNpYmxlIG9iamVjdC5cIik7XG4gICAgfVxuICAgIC8vIGFscmVhZHkgYSByZWFkb25seSBvYmplY3RcbiAgICBpZiAoaXNSZWFkb25seSh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIC8vIGFscmVhZHkgaGFzIGEgcmVhZG9ubHkgcHJveHlcbiAgICB2YXIgZXhpc3RpbmdGbGFnID0gc2hhbGxvdyA/IHJhd1RvU2hhbGxvd1JlYWRvbmx5RmxhZyA6IHJhd1RvUmVhZG9ubHlGbGFnO1xuICAgIHZhciBleGlzdGluZ1Byb3h5ID0gdGFyZ2V0W2V4aXN0aW5nRmxhZ107XG4gICAgaWYgKGV4aXN0aW5nUHJveHkpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nUHJveHk7XG4gICAgfVxuICAgIHZhciBwcm94eSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCkpO1xuICAgIGRlZih0YXJnZXQsIGV4aXN0aW5nRmxhZywgcHJveHkpO1xuICAgIGRlZihwcm94eSwgXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi8sIHRydWUpO1xuICAgIGRlZihwcm94eSwgXCJfX3ZfcmF3XCIgLyogUmVhY3RpdmVGbGFncy5SQVcgKi8sIHRhcmdldCk7XG4gICAgaWYgKGlzUmVmKHRhcmdldCkpIHtcbiAgICAgICAgZGVmKHByb3h5LCBSZWZGbGFnLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHNoYWxsb3cgfHwgaXNTaGFsbG93KHRhcmdldCkpIHtcbiAgICAgICAgZGVmKHByb3h5LCBcIl9fdl9pc1NoYWxsb3dcIiAvKiBSZWFjdGl2ZUZsYWdzLklTX1NIQUxMT1cgKi8sIHRydWUpO1xuICAgIH1cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRhcmdldCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRlZmluZVJlYWRvbmx5UHJvcGVydHkocHJveHksIHRhcmdldCwga2V5c1tpXSwgc2hhbGxvdyk7XG4gICAgfVxuICAgIHJldHVybiBwcm94eTtcbn1cbmZ1bmN0aW9uIGRlZmluZVJlYWRvbmx5UHJvcGVydHkocHJveHksIHRhcmdldCwga2V5LCBzaGFsbG93KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3h5LCBrZXksIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgICAgIHJldHVybiBzaGFsbG93IHx8ICFpc1BsYWluT2JqZWN0KHZhbCkgPyB2YWwgOiByZWFkb25seSh2YWwpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJTZXQgb3BlcmF0aW9uIG9uIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGZhaWxlZDogdGFyZ2V0IGlzIHJlYWRvbmx5LlwiKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogUmV0dXJucyBhIHJlYWN0aXZlLWNvcHkgb2YgdGhlIG9yaWdpbmFsIG9iamVjdCwgd2hlcmUgb25seSB0aGUgcm9vdCBsZXZlbFxuICogcHJvcGVydGllcyBhcmUgcmVhZG9ubHksIGFuZCBkb2VzIE5PVCB1bndyYXAgcmVmcyBub3IgcmVjdXJzaXZlbHkgY29udmVydFxuICogcmV0dXJuZWQgcHJvcGVydGllcy5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIHByb3BzIHByb3h5IG9iamVjdCBmb3Igc3RhdGVmdWwgY29tcG9uZW50cy5cbiAqL1xuZnVuY3Rpb24gc2hhbGxvd1JlYWRvbmx5KHRhcmdldCkge1xuICAgIHJldHVybiBjcmVhdGVSZWFkb25seSh0YXJnZXQsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlZChnZXR0ZXJPck9wdGlvbnMsIGRlYnVnT3B0aW9ucykge1xuICAgIHZhciBnZXR0ZXI7XG4gICAgdmFyIHNldHRlcjtcbiAgICB2YXIgb25seUdldHRlciA9IGlzRnVuY3Rpb24oZ2V0dGVyT3JPcHRpb25zKTtcbiAgICBpZiAob25seUdldHRlcikge1xuICAgICAgICBnZXR0ZXIgPSBnZXR0ZXJPck9wdGlvbnM7XG4gICAgICAgI
13835HNldHRlciA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHdhcm4kMignV3JpdGUgb3BlcmF0aW9uIGZhaWxlZDogY29tcHV0ZWQgdmFsdWUgaXMgcmVhZG9ubHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbm9vcDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdldHRlciA9IGdldHRlck9yT3B0aW9ucy5nZXQ7XG4gICAgICAgIHNldHRlciA9IGdldHRlck9yT3B0aW9ucy5zZXQ7XG4gICAgfVxuICAgIHZhciB3YXRjaGVyID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBuZXcgV2F0Y2hlcihjdXJyZW50SW5zdGFuY2UsIGdldHRlciwgbm9vcCwgeyBsYXp5OiB0cnVlIH0pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhdGNoZXIgJiYgZGVidWdPcHRpb25zKSB7XG4gICAgICAgIHdhdGNoZXIub25UcmFjayA9IGRlYnVnT3B0aW9ucy5vblRyYWNrO1xuICAgICAgICB3YXRjaGVyLm9uVHJpZ2dlciA9IGRlYnVnT3B0aW9ucy5vblRyaWdnZXI7XG4gICAgfVxuICAgIHZhciByZWYgPSB7XG4gICAgICAgIC8vIHNvbWUgbGlicyByZWx5IG9uIHRoZSBwcmVzZW5jZSBlZmZlY3QgZm9yIGNoZWNraW5nIGNvbXB1dGVkIHJlZnNcbiAgICAgICAgLy8gZnJvbSBub3JtYWwgcmVmcywgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IG1hdHRlclxuICAgICAgICBlZmZlY3Q6IHdhdGNoZXIsXG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdhdGNoZXIuZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBEZXAudGFyZ2V0Lm9uVHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIERlcC50YXJnZXQub25UcmFjayh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0OiBEZXAudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZ2V0XCIgLyogVHJhY2tPcFR5cGVzLkdFVCAqLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB3YXRjaGVyLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZXQgdmFsdWUobmV3VmFsKSB7XG4gICAgICAgICAgICBzZXR0ZXIobmV3VmFsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZGVmKHJlZiwgUmVmRmxhZywgdHJ1ZSk7XG4gICAgZGVmKHJlZiwgXCJfX3ZfaXNSZWFkb25seVwiIC8qIFJlYWN0aXZlRmxhZ3MuSVNfUkVBRE9OTFkgKi8sIG9ubHlHZXR0ZXIpO1xuICAgIHJldHVybiByZWY7XG59XG5cbnZhciBtYXJrO1xudmFyIG1lYXN1cmU7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBwZXJmXzEgPSBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwZXJmXzEgJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBwZXJmXzEubWFyayAmJlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBlcmZfMS5tZWFzdXJlICYmXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcGVyZl8xLmNsZWFyTWFya3MgJiZcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBwZXJmXzEuY2xlYXJNZWFzdXJlcykge1xuICAgICAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZl8xLm1hcmsodGFnKTsgfTtcbiAgICAgICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICAgICAgICBwZXJmXzEubWVhc3VyZShuYW1lLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgICAgIHBlcmZfMS5jbGVhck1hcmtzKHN0YXJ0VGFnKTtcbiAgICAgICAgICAgIHBlcmZfMS5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICAgICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbnZhciBub3JtYWxpemVFdmVudCA9IGNhY2hlZChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBwYXNzaXZlID0gbmFtZS5jaGFyQXQoMCkgPT09ICcmJztcbiAgICBuYW1lID0gcGFzc2l2ZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICAgIHZhciBvbmNlID0gbmFtZS5jaGFyQXQoMCkgPT09ICd+JzsgLy8gUHJlZml4ZWQgbGFzdCwgY2hlY2tlZCBmaXJzdFxuICAgIG5hbWUgPSBvbmNlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gICAgdmFyIGNhcHR1cmUgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJyEnO1xuICAgIG5hbWUgPSBjYXB0dXJlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgb25jZTogb25jZSxcbiAgICAgICAgY2FwdHVyZTogY2FwdHVyZSxcbiAgICAgICAgcGFzc2l2ZTogcGFzc2l2ZVxuICAgIH07XG59KTtcbmZ1bmN0aW9uIGNyZWF0ZUZuSW52b2tlcihmbnMsIHZtKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlcigpIHtcbiAgICAgICAgdmFyIGZucyA9IGludm9rZXIuZm5zO1xuICAgICAgICBpZiAoaXNBcnJheShmbnMpKSB7XG4gICAgICAgICAgICB2Y
13835XIgY2xvbmVkID0gZm5zLnNsaWNlKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsb25lZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNsb25lZFtpXSwgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZucywgbnVsbCwgYXJndW1lbnRzLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW52b2tlci5mbnMgPSBmbnM7XG4gICAgcmV0dXJuIGludm9rZXI7XG59XG5mdW5jdGlvbiB1cGRhdGVMaXN0ZW5lcnMob24sIG9sZE9uLCBhZGQsIHJlbW92ZSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKSB7XG4gICAgdmFyIG5hbWUsIGN1ciwgb2xkLCBldmVudDtcbiAgICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV07XG4gICAgICAgIG9sZCA9IG9sZE9uW25hbWVdO1xuICAgICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgICBpZiAoaXNVbmRlZihjdXIpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgd2FybiQyKFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIuY29uY2F0KGV2ZW50Lm5hbWUsIFwiXFxcIjogZ290IFwiKSArIFN0cmluZyhjdXIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNVbmRlZihvbGQpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZihjdXIuZm5zKSkge1xuICAgICAgICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVHJ1ZShldmVudC5vbmNlKSkge1xuICAgICAgICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlT25jZUhhbmRsZXIoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZChldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUsIGV2ZW50LnBhc3NpdmUsIGV2ZW50LnBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgICAgICAgIG9sZC5mbnMgPSBjdXI7XG4gICAgICAgICAgICBvbltuYW1lXSA9IG9sZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICAgICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICAgICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgICAgICAgcmVtb3ZlKGV2ZW50Lm5hbWUsIG9sZE9uW25hbWVdLCBldmVudC5jYXB0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2soZGVmLCBob29rS2V5LCBob29rKSB7XG4gICAgaWYgKGRlZiBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgICAgIGRlZiA9IGRlZi5kYXRhLmhvb2sgfHwgKGRlZi5kYXRhLmhvb2sgPSB7fSk7XG4gICAgfVxuICAgIHZhciBpbnZva2VyO1xuICAgIHZhciBvbGRIb29rID0gZGVmW2hvb2tLZXldO1xuICAgIGZ1bmN0aW9uIHdyYXBwZWRIb29rKCkge1xuICAgICAgICBob29rLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIC8vIGltcG9ydGFudDogcmVtb3ZlIG1lcmdlZCBob29rIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBvbmx5IG9uY2VcbiAgICAgICAgLy8gYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICAgICAgcmVtb3ZlJDIoaW52b2tlci5mbnMsIHdyYXBwZWRIb29rKTtcbiAgICB9XG4gICAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAgICAgLy8gbm8gZXhpc3RpbmcgaG9va1xuICAgICAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFt3cmFwcGVkSG9va10pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0RlZihvbGRIb29rLmZucykgJiYgaXNUcnVlKG9sZEhvb2subWVyZ2VkKSkge1xuICAgICAgICAgICAgLy8gYWxyZWFkeSBhIG1lcmdlZCBpbnZva2VyXG4gICAgICAgICAgICBpbnZva2VyID0gb2xkSG9vaztcbiAgICAgICAgICAgIGludm9rZXIuZm5zLnB1c2god3JhcHBlZEhvb2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXhpc3RpbmcgcGxhaW4gaG9va1xuICAgICAgICAgICAgaW52b2tlciA9IGNyZWF0ZUZuSW52b2tlcihbb2xkSG9vaywgd3JhcHBlZEhvb2tdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnZva2VyLm1lcmdlZCA9IHRydWU7XG4gICAgZGVmW2hvb2tLZXldID0gaW52b2tlcjtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YShkYXRhLCBDdG9yLCB0YWcpIHtcbiAgICAvLyB3ZSBhcmUgb25seSBleHRyYWN0aW5nIHJhdyB2YWx1ZXMgaGVyZS5cbiAgICAvLyB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFuZGxlZCBpbiB0aGUgY2hpbGRcbiAgICAvLyBjb21wb25lbnQgaXRzZWxmLlxuICAgIHZhciBwcm9wT3B0aW9ucyA9IEN0b3Iub3B0aW9ucy5wcm9wcztcbiAgICBpZiAoaXNVbmRlZihwcm9wT3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGF0dHJzID0gZGF0YS5hdHRycywgcHJvcHMgPSBkYXRhLnByb3BzO1xuICAgIGlmIChpc0RlZihhdHRycykgfHwgaXNEZWYocHJvcHMpKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIGFsdEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIga2V5SW5Mb3dlckNhc2UgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSBrZXlJbkxvd2VyQ2FzZSAmJiBhdHRycyAmJiBoYXNPd24oYXR0cnMsIGtleUluTG93ZXJDYXNlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aXAoXCJQcm9wIFxcXCJcIi5jb25jYXQoa2V5SW5Mb3dlckNhc2UsIFwiXFxcIiBpcyBwYXNzZWQgdG8gY29tcG9uZW50IFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0YWcgaXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgfHwgQ3RvciksIFwiLCBidXQgdGhlIGRlY2xhcmVkIHByb3AgbmFtZSBpc1wiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBjYW1lbENhc2VkIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcHMgbmVlZCB0byB1c2UgdGhlaXIga2ViYWItY2FzZSBlcXVpdmFsZW50cyB3aGVuIHVzaW5nIGluLURPTSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRlbXBsYXRlcy4gWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiLmNvbmNhdChhbHRLZXksIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIikuY29uY2F0KGtleSwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hlY2tQcm9wKHJlcywgcHJvcHMsIGtleSwgYWx0S2V5LCB0cnVlKSB8fFxuICAgICAgICAgICAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBjaGVja1Byb3AocmVzLCBoYXNoLCBrZXksIGFsdEtleSwgcHJlc2VydmUpIHtcbiAgICBpZiAoaXNEZWYoaGFzaCkpIHtcbiAgICAgICAgaWYgKGhhc093bihoYXNoLCBrZXkpKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IGhhc2hba2V5XTtcbiAgICAgICAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaGFzaFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaGFzT3duKGhhc2gsIGFsdEtleSkpIHtcbiAgICAgICAgICAgIHJlc1trZXldID0gaGFzaFthbHRLZXldO1xuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYXNoW2FsdEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuLy8gc3RhdGljYWxseSBhbmFseXppbmcgdGhlIHRlbXBsYXRlIGF0IGNvbXBpbGUgdGltZS5cbi8vXG4vLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuLy8gZ2VuZXJhdGVkIHJlbmRlciBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBBcnJheTxWTm9kZT4uIFRoZXJlIGFyZVxuLy8gdHdvIGNhc2VzIHdoZXJlIGV4dHJhIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkOlxuLy8gMS4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29tcG9uZW50cyAtIGJlY2F1c2UgYSBmdW5jdGlvbmFsIGNvbXBvbmVudFxuLy8gbWF5IHJldHVybiBhbiBBcnJheSBpbnN0ZWFkIG9mIGEgc2luZ2xlIHJvb3QuIEluIHRoaXMgY2FzZSwganVzdCBhIHNpbXBsZVxuLy8gbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgLSBpZiBhbnkgY2hpbGQgaXMgYW4gQXJyYXksIHdlIGZsYXR0ZW4gdGhlIHdob2xlXG4vLyB0aGluZyB3aXRoIEFycmF5LnByb3RvdHlwZS5jb25jYXQuIEl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgb25seSAxLWxldmVsIGRlZXBcbi8vIGJlY2F1c2UgZnVuY3Rpb25hbCBjb21wb25lbnRzIGFscmVhZHkgbm9ybWFsaXplIHRoZWlyIG93biBjaGlsZHJlbi5cbmZ1bmN0aW9uIHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbltpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xufVxuLy8gMi4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29uc3RydWN0cyB0aGF0IGFsd2F5cyBnZW5lcmF0ZWQgbmVzdGVkIEFycmF5cyxcbi8vIGUuZy4gPHRlbXBsYXRlPiwgPHNsb3Q+LCB2LWZvciwgb3Igd2hlbiB0aGUgY2hpbGRyZW4gaXMgcHJvdmlkZWQgYnkgdXNlclxuLy8gd2l0aCBoYW5kLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucyAvIEpTWC4gSW4gc3VjaCBjYXNlcyBhIGZ1bGwgbm9ybWFsaXphdGlvblxuLy8gaXMgbmVlZGVkIHRvIGNhdGVyIHRvIGFsbCBwb3NzaWJsZSB0eXBlcyBvZiBjaGlsZHJlbiB2YWx1ZXMuXG5mdW5jdGlvbiBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbikge1xuICAgIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICAgICAgPyBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV1cbiAgICAgICAgOiBpc0FycmF5KGNoaWxkcmVuKVxuICAgICAgICAgICAgPyBub3JtYWxpemVBcnJheUNoaWxkcmVuKGNoaWxkcmVuKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gaXNEZWYobm9kZSkgJiYgaXNEZWYobm9kZS50ZXh0KSAmJiBpc0ZhbHNlKG5vZGUuaXNDb21tZW50KTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpLCBjLCBsYXN0SW5kZXgsIGxhc3Q7XG4gICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKGlzVW5kZWYoYykgfHwgdHlwZW9mIGMgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBsYXN0SW5kZXggPSByZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgbGFzdCA9IHJlc1tsYXN0SW5kZXhdO1xuICAgICAgICAvLyAgbmVzdGVkXG4gICAgICAgIGlmIChpc0FycmF
138355KGMpKSB7XG4gICAgICAgICAgICBpZiAoYy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYyA9IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oYywgXCJcIi5jb25jYXQobmVzdGVkSW5kZXggfHwgJycsIFwiX1wiKS5jb25jYXQoaSkpO1xuICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0Tm9kZShjWzBdKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGNbMF0udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzLnB1c2guYXBwbHkocmVzLCBjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1ByaW1pdGl2ZShjKSkge1xuICAgICAgICAgICAgaWYgKGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIFNTUiBoeWRyYXRpb24gYmVjYXVzZSB0ZXh0IG5vZGVzIGFyZVxuICAgICAgICAgICAgICAgIC8vIGVzc2VudGlhbGx5IG1lcmdlZCB3aGVuIHJlbmRlcmVkIHRvIEhUTUwgc3RyaW5nc1xuICAgICAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYyAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHByaW1pdGl2ZSB0byB2bm9kZVxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNUZXh0Tm9kZShjKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMudGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IGtleSBmb3IgbmVzdGVkIGFycmF5IGNoaWxkcmVuIChsaWtlbHkgZ2VuZXJhdGVkIGJ5IHYtZm9yKVxuICAgICAgICAgICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3QpICYmXG4gICAgICAgICAgICAgICAgICAgIGlzRGVmKGMudGFnKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc1VuZGVmKGMua2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5rZXkgPSBcIl9fdmxpc3RcIi5jb25jYXQobmVzdGVkSW5kZXgsIFwiX1wiKS5jb25jYXQoaSwgXCJfX1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxudmFyIFNJTVBMRV9OT1JNQUxJWkUgPSAxO1xudmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCQxKGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemUpIHtcbiAgICBpZiAoaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgICAgICBub3JtYWxpemF0aW9uVHlwZSA9IGNoaWxkcmVuO1xuICAgICAgICBjaGlsZHJlbiA9IGRhdGE7XG4gICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpc1RydWUoYWx3YXlzTm9ybWFsaXplKSkge1xuICAgICAgICBub3JtYWxpemF0aW9uVHlwZSA9IEFMV0FZU19OT1JNQUxJWkU7XG4gICAgfVxuICAgIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSk7XG59XG5mdW5jdGlvbiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSkge1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLl9fb2JfXykpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGRhdGEpLCBcIlxcblwiKSArICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG4gICAgLy8gb2JqZWN0IHN5bnRheCBpbiB2LWJpbmRcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICAgICAgdGFnID0gZGF0YS5pcztcbiAgICB9XG4gICAgaWYgKCF0YWcpIHtcbiAgICAgICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICAgIH1cbiAgICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KSkge1xuICAgICAgICB3YXJuJDIoJ0F2b2lkIHVzaW5nIG5vbi1wcmltaXRpdmUgdmFsdWUgYXMga2V5LCAnICtcbiAgICAgICAgICAgICd1c2Ugc3RyaW5nL251bWJlciB2YWx1ZSBpbnN0ZWFkLicsIGNvbnRleHQpO1xuICAgIH1cbiAgICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pICYmIGlzRnVuY3Rpb24oY2hpbGRyZW5bMF0pKSB7XG4gICAgICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgICAgICBjaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgIH1cbiAgICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBub3JtYWxpem
13835VDaGlsZHJlbihjaGlsZHJlbik7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBTSU1QTEVfTk9STUFMSVpFKSB7XG4gICAgICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICAgIH1cbiAgICB2YXIgdm5vZGUsIG5zO1xuICAgIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgQ3RvciA9IHZvaWQgMDtcbiAgICAgICAgbnMgPSAoY29udGV4dC4kdm5vZGUgJiYgY29udGV4dC4kdm5vZGUubnMpIHx8IGNvbmZpZy5nZXRUYWdOYW1lc3BhY2UodGFnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgICAgICAgIC8vIHBsYXRmb3JtIGJ1aWx0LWluIGVsZW1lbnRzXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIGlzRGVmKGRhdGEpICYmXG4gICAgICAgICAgICAgICAgaXNEZWYoZGF0YS5uYXRpdmVPbikgJiZcbiAgICAgICAgICAgICAgICBkYXRhLnRhZyAhPT0gJ2NvbXBvbmVudCcpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgLm5hdGl2ZSBtb2RpZmllciBmb3Igdi1vbiBpcyBvbmx5IHZhbGlkIG9uIGNvbXBvbmVudHMgYnV0IGl0IHdhcyB1c2VkIG9uIDxcIi5jb25jYXQodGFnLCBcIj4uXCIpLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZub2RlID0gbmV3IFZOb2RlKGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCghZGF0YSB8fCAhZGF0YS5wcmUpICYmXG4gICAgICAgICAgICBpc0RlZigoQ3RvciA9IHJlc29sdmVBc3NldChjb250ZXh0LiRvcHRpb25zLCAnY29tcG9uZW50cycsIHRhZykpKSkge1xuICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgICAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICAgICAgICB2bm9kZSA9IG5ldyBWTm9kZSh0YWcsIGRhdGEsIGNoaWxkcmVuLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KHRhZywgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0RlZih2bm9kZSkpIHtcbiAgICAgICAgaWYgKGlzRGVmKG5zKSlcbiAgICAgICAgICAgIGFwcGx5TlModm5vZGUsIG5zKTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKVxuICAgICAgICAgICAgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7XG4gICAgICAgIHJldHVybiB2bm9kZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXBwbHlOUyh2bm9kZSwgbnMsIGZvcmNlKSB7XG4gICAgdm5vZGUubnMgPSBucztcbiAgICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAgICAgLy8gdXNlIGRlZmF1bHQgbmFtZXNwYWNlIGluc2lkZSBmb3JlaWduT2JqZWN0XG4gICAgICAgIG5zID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3JjZSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpc0RlZih2bm9kZS5jaGlsZHJlbikpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGNoaWxkLnRhZykgJiZcbiAgICAgICAgICAgICAgICAoaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlOUyhjaGlsZCwgbnMsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKSB7XG4gICAgaWYgKGlzT2JqZWN0KGRhdGEuc3R5bGUpKSB7XG4gICAgICAgIHRyYXZlcnNlKGRhdGEuc3R5bGUpO1xuICAgIH1cbiAgICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICAgICAgdHJhdmVyc2UoZGF0YS5jbGFzcyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QodmFsLCByZW5kZXIpIHtcbiAgICB2YXIgcmV0ID0gbnVsbCwgaSwgbCwga2V5cywga2V5O1xuICAgIGlmIChpc0FycmF5KHZhbCkgfHwgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0ID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0ID0gbmV3IEFycmF5KHZhbCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xuICAgICAgICAgICAgcmV0W2ldID0gcmVuZGVyKGkgKyAxLCBpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICAgIGlmIChoYXNTeW1ib2wgJiYgdmFsW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgICAgI
13835HJldCA9IFtdO1xuICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gdmFsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIXJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgcmV0LnB1c2gocmVuZGVyKHJlc3VsdC52YWx1ZSwgcmV0Lmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgICAgICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtrZXldLCBrZXksIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghaXNEZWYocmV0KSkge1xuICAgICAgICByZXQgPSBbXTtcbiAgICB9XG4gICAgcmV0Ll9pc1ZMaXN0ID0gdHJ1ZTtcbiAgICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNsb3QobmFtZSwgZmFsbGJhY2tSZW5kZXIsIHByb3BzLCBiaW5kT2JqZWN0KSB7XG4gICAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICAgIHZhciBub2RlcztcbiAgICBpZiAoc2NvcGVkU2xvdEZuKSB7XG4gICAgICAgIC8vIHNjb3BlZCBzbG90XG4gICAgICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgICAgIGlmIChiaW5kT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNPYmplY3QoYmluZE9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ3Nsb3Qgdi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3QnLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BzID0gZXh0ZW5kKGV4dGVuZCh7fSwgYmluZE9iamVjdCksIHByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlcyA9XG4gICAgICAgICAgICBzY29wZWRTbG90Rm4ocHJvcHMpIHx8XG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZmFsbGJhY2tSZW5kZXIpID8gZmFsbGJhY2tSZW5kZXIoKSA6IGZhbGxiYWNrUmVuZGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG5vZGVzID1cbiAgICAgICAgICAgIHRoaXMuJHNsb3RzW25hbWVdIHx8XG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZmFsbGJhY2tSZW5kZXIpID8gZmFsbGJhY2tSZW5kZXIoKSA6IGZhbGxiYWNrUmVuZGVyKTtcbiAgICB9XG4gICAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2Rlcyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZXNvbHZpbmcgZmlsdGVyc1xuICovXG5mdW5jdGlvbiByZXNvbHZlRmlsdGVyKGlkKSB7XG4gICAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eTtcbn1cblxuZnVuY3Rpb24gaXNLZXlOb3RNYXRjaChleHBlY3QsIGFjdHVhbCkge1xuICAgIGlmIChpc0FycmF5KGV4cGVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdC5pbmRleE9mKGFjdHVhbCkgPT09IC0xO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdCAhPT0gYWN0dWFsO1xuICAgIH1cbn1cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyhldmVudEtleUNvZGUsIGtleSwgYnVpbHRJbktleUNvZGUsIGV2ZW50S2V5TmFtZSwgYnVpbHRJbktleU5hbWUpIHtcbiAgICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xuICAgIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgICAgIHJldHVybiBpc0tleU5vdE1hdGNoKGJ1aWx0SW5LZXlOYW1lLCBldmVudEtleU5hbWUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgICAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50S2V5Q29kZSA9PT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyhkYXRhLCB0YWcsIHZhbHVlLCBhc1Byb3AsIGlzU3luYykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMigndi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF
138355KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGhhc2ggPSB2b2lkIDA7XG4gICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3MnIHx8IGtleSA9PT0gJ3N0eWxlJyB8fCBpc1Jlc2VydmVkQXR0cmlidXRlKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy50eXBlO1xuICAgICAgICAgICAgICAgICAgICBoYXNoID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhLmRvbVByb3BzIHx8IChkYXRhLmRvbVByb3BzID0ge30pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghKGNhbWVsaXplZEtleSBpbiBoYXNoKSAmJiAhKGh5cGhlbmF0ZWRLZXkgaW4gaGFzaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzaFtrZXldID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uW1widXBkYXRlOlwiLmNvbmNhdChrZXkpXSA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtrZXldID0gJGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfbG9vcF8xKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyhpbmRleCwgaXNJbkZvcikge1xuICAgIHZhciBjYWNoZWQgPSB0aGlzLl9zdGF0aWNUcmVlcyB8fCAodGhpcy5fc3RhdGljVHJlZXMgPSBbXSk7XG4gICAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAgIC8vIGlmIGhhcyBhbHJlYWR5LXJlbmRlcmVkIHN0YXRpYyB0cmVlIGFuZCBub3QgaW5zaWRlIHYtZm9yLFxuICAgIC8vIHdlIGNhbiByZXVzZSB0aGUgc2FtZSB0cmVlLlxuICAgIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gICAgdHJlZSA9IGNhY2hlZFtpbmRleF0gPSB0aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tpbmRleF0uY2FsbCh0aGlzLl9yZW5kZXJQcm94eSwgdGhpcy5fYywgdGhpcyAvLyBmb3IgcmVuZGVyIGZucyBnZW5lcmF0ZWQgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IHRlbXBsYXRlc1xuICAgICk7XG4gICAgbWFya1N0YXRpYyQxKHRyZWUsIFwiX19zdGF0aWNfX1wiLmNvbmNhdChpbmRleCksIGZhbHNlKTtcbiAgICByZXR1cm4gdHJlZTtcbn1cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSh0cmVlLCBpbmRleCwga2V5KSB7XG4gICAgbWFya1N0YXRpYyQxKHRyZWUsIFwiX19vbmNlX19cIi5jb25jYXQoaW5kZXgpLmNvbmNhdChrZXkgPyBcIl9cIi5jb25jYXQoa2V5KSA6IFwiXCIpLCB0cnVlKTtcbiAgICByZXR1cm4gdHJlZTtcbn1cbmZ1bmN0aW9uIG1hcmtTdGF0aWMkMSh0cmVlLCBrZXksIGlzT25jZSkge1xuICAgIGlmIChpc0FycmF5KHRyZWUpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRyZWVbaV0gJiYgdHlwZW9mIHRyZWVbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbWFya1N0YXRpY05vZGUodHJlZVtpXSwgXCJcIi5jb25jYXQoa2V5LCBcIl9cIikuY29uY2F0KGkpLCBpc09uY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlLCBrZXksIGlzT25jZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFya1N0YXRpY05vZGUobm9kZSwga2V5LCBpc09uY2UpIHtcbiAgICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgICBub2RlLmtleSA9IGtleTtcbiAgICBub2RlLmlzT25jZSA9IGlzT25jZTtcbn1cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyhkYXRhLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4kMigndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2Y
13835XIgb24gPSAoZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge30pO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgICAgICAgICB2YXIgb3VycyA9IHZhbHVlW2tleV07XG4gICAgICAgICAgICAgICAgb25ba2V5XSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBvdXJzKSA6IG91cnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyhmbnMsIHJlcywgXG4vLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbmhhc0R5bmFtaWNLZXlzLCBjb250ZW50SGFzaEtleSkge1xuICAgIHJlcyA9IHJlcyB8fCB7ICRzdGFibGU6ICFoYXNEeW5hbWljS2V5cyB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzbG90ID0gZm5zW2ldO1xuICAgICAgICBpZiAoaXNBcnJheShzbG90KSkge1xuICAgICAgICAgICAgcmVzb2x2ZVNjb3BlZFNsb3RzKHNsb3QsIHJlcywgaGFzRHluYW1pY0tleXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgICAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udGVudEhhc2hLZXkpIHtcbiAgICAgICAgcmVzLiRrZXkgPSBjb250ZW50SGFzaEtleTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuLy8gaGVscGVyIHRvIHByb2Nlc3MgZHluYW1pYyBrZXlzIGZvciBkeW5hbWljIGFyZ3VtZW50cyBpbiB2LWJpbmQgYW5kIHYtb24uXG5mdW5jdGlvbiBiaW5kRHluYW1pY0tleXMoYmFzZU9iaiwgdmFsdWVzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSkge1xuICAgICAgICAgICAgYmFzZU9ialt2YWx1ZXNbaV1dID0gdmFsdWVzW2kgKyAxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGtleSAhPT0gJycgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBudWxsIGlzIGEgc3BlY2lhbCB2YWx1ZSBmb3IgZXhwbGljaXRseSByZW1vdmluZyBhIGJpbmRpbmdcbiAgICAgICAgICAgIHdhcm4kMihcIkludmFsaWQgdmFsdWUgZm9yIGR5bmFtaWMgZGlyZWN0aXZlIGFyZ3VtZW50IChleHBlY3RlZCBzdHJpbmcgb3IgbnVsbCk6IFwiLmNvbmNhdChrZXkpLCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZU9iajtcbn1cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllcih2YWx1ZSwgc3ltYm9sKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBzeW1ib2wgKyB2YWx1ZSA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsUmVuZGVySGVscGVycyh0YXJnZXQpIHtcbiAgICB0YXJnZXQuX28gPSBtYXJrT25jZTtcbiAgICB0YXJnZXQuX24gPSB0b051bWJlcjtcbiAgICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgICB0YXJnZXQuX2wgPSByZW5kZXJMaXN0O1xuICAgIHRhcmdldC5fdCA9IHJlbmRlclNsb3Q7XG4gICAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgICB0YXJnZXQuX2kgPSBsb29zZUluZGV4T2Y7XG4gICAgdGFyZ2V0Ll9tID0gcmVuZGVyU3RhdGljO1xuICAgIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gICAgdGFyZ2V0Ll9rID0gY2hlY2tLZXlDb2RlcztcbiAgICB0YXJnZXQuX2IgPSBiaW5kT2JqZWN0UHJvcHM7XG4gICAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICAgIHRhcmdldC5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gICAgdGFyZ2V0Ll91ID0gcmVzb2x2ZVNjb3BlZFNsb3RzO1xuICAgIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gICAgdGFyZ2V0Ll9kID0gYmluZER5bmFtaWNLZXlzO1xuICAgIHRhcmdldC5fcCA9IHByZXBlbmRNb2RpZmllcjtcbn1cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlU2xvdHMoY2hpbGRyZW4sIGNvbnRleHQpIHtcbiAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICB2YXIgc2xvdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2Y
13835XIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgdmFyIGRhdGEgPSBjaGlsZC5kYXRhO1xuICAgICAgICAvLyByZW1vdmUgc2xvdCBhdHRyaWJ1dGUgaWYgdGhlIG5vZGUgaXMgcmVzb2x2ZWQgYXMgYSBWdWUgc2xvdCBub2RlXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5hdHRycy5zbG90O1xuICAgICAgICB9XG4gICAgICAgIC8vIG5hbWVkIHNsb3RzIHNob3VsZCBvbmx5IGJlIHJlc3BlY3RlZCBpZiB0aGUgdm5vZGUgd2FzIHJlbmRlcmVkIGluIHRoZVxuICAgICAgICAvLyBzYW1lIGNvbnRleHQuXG4gICAgICAgIGlmICgoY2hpbGQuY29udGV4dCA9PT0gY29udGV4dCB8fCBjaGlsZC5mbkNvbnRleHQgPT09IGNvbnRleHQpICYmXG4gICAgICAgICAgICBkYXRhICYmXG4gICAgICAgICAgICBkYXRhLnNsb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIG5hbWVfMSA9IGRhdGEuc2xvdDtcbiAgICAgICAgICAgIHZhciBzbG90ID0gc2xvdHNbbmFtZV8xXSB8fCAoc2xvdHNbbmFtZV8xXSA9IFtdKTtcbiAgICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIChzbG90cy5kZWZh
13835dWx0IHx8IChzbG90cy5kZWZhdWx0ID0gW10pKS5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgICBmb3IgKHZhciBuYW1lXzIgaW4gc2xvdHMpIHtcbiAgICAgICAgaWYgKHNsb3RzW25hbWVfMl0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgICAgICAgZGVsZXRlIHNsb3RzW25hbWVfMl07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNsb3RzO1xufVxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKG5vZGUpIHtcbiAgICByZXR1cm4gKG5vZGUuaXNDb21tZW50ICYmICFub2RlLmFzeW5jRmFjdG9yeSkgfHwgbm9kZS50ZXh0ID09PSAnICc7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlcihub2RlKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBub3QgcmVhbGx5IGJvb2xlYW4gdHlwZVxuICAgIHJldHVybiBub2RlLmlzQ29tbWVudCAmJiBub2RlLmFzeW5jRmFjdG9yeTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdHMob3duZXJWbSwgc2NvcGVkU2xvdHMsIG5vcm1hbFNsb3RzLCBwcmV2U2NvcGVkU2xvdHMpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBoYXNOb3JtYWxTbG90cyA9IE9iamVjdC5rZXlzKG5vcm1hbFNsb3RzKS5sZW5ndGggPiAwO1xuICAgIHZhciBpc1N0YWJsZSA9IHNjb3BlZFNsb3RzID8gISFzY29wZWRTbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICAgIHZhciBrZXkgPSBzY29wZWRTbG90cyAmJiBzY29wZWRTbG90cy4ka2V5O1xuICAgIGlmICghc2NvcGVkU2xvdHMpIHtcbiAgICAgICAgcmVzID0ge307XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjb3BlZFNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgICAgIC8vIGZhc3QgcGF0aCAxOiBjaGlsZCBjb21wb25lbnQgcmUtcmVuZGVyIG9ubHksIHBhcmVudCBkaWQgbm90IGNoYW5nZVxuICAgICAgICByZXR1cm4gc2NvcGVkU2xvdHMuX25vcm1hbGl6ZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzU3RhYmxlICYmXG4gICAgICAgIHByZXZTY29wZWRTbG90cyAmJlxuICAgICAgICBwcmV2U2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAgICAgIGtleSA9PT0gcHJldlNjb3BlZFNsb3RzLiRrZXkgJiZcbiAgICAgICAgIWhhc05vcm1hbFNsb3RzICYmXG4gICAgICAgICFwcmV2U2NvcGVkU2xvdHMuJGhhc05vcm1hbCkge1xuICAgICAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgICAgIC8vIG9ubHkgbmVlZCB0byBub3JtYWxpemUgb25jZVxuICAgICAgICByZXR1cm4gcHJldlNjb3BlZFNsb3RzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzID0ge307XG4gICAgICAgIGZvciAodmFyIGtleV8xIGluIHNjb3BlZFNsb3RzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcGVkU2xvdHNba2V5XzFdICYmIGtleV8xWzBdICE9PSAnJCcpIHtcbiAgICAgICAgICAgICAgICByZXNba2V5XzFdID0gbm9ybWFsaXplU2NvcGVkU2xvdChvd25lclZtLCBub3JtYWxTbG90cywga2V5XzEsIHNjb3BlZFNsb3RzW2tleV8xXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZXhwb3NlIG5vcm1hbCBzbG90cyBvbiBzY29wZWRTbG90c1xuICAgIGZvciAodmFyIGtleV8yIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgICAgIGlmICghKGtleV8yIGluIHJlcykpIHtcbiAgICAgICAgICAgIHJlc1trZXlfMl0gPSBwcm94eU5vcm1hbFNsb3Qobm9ybWFsU2xvdHMsIGtleV8yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gICAgLy8gYW5kIHdoZW4gdGhhdCBpcyBwYXNzZWQgZG93biB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yXG4gICAgaWYgKHNjb3BlZFNsb3RzICYmIE9iamVjdC5pc0V4dGVuc2libGUoc2NvcGVkU2xvdHMpKSB7XG4gICAgICAgIHNjb3BlZFNsb3RzLl9ub3JtYWxpemVkID0gcmVzO1xuICAgIH1cbiAgICBkZWYocmVzLCAnJHN0YWJsZScsIGlzU3RhYmxlKTtcbiAgICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gICAgZGVmKHJlcywgJyRoYXNOb3JtYWwnLCBoYXNOb3JtYWxTbG90cyk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qodm0sIG5vcm1hbFNsb3RzLCBrZXksIGZuKSB7XG4gICAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdXIgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZSh2bSk7XG4gICAgICAgIHZhciByZXMgPSBhcmd1bWVudHMubGVuZ3RoID8gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKSA6IGZuKHt9KTtcbiAgICAgICAgcmVzID1cbiAgICAgICAgICAgIHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhaXNBcnJheShyZXMpXG4gICAgICAgICAgICAgICAgPyBbcmVzXSAvLyBzaW5nbGUgdm5vZGVcbiAgICAgICAgICAgICAgICA6IG5vcm1hbGl6ZUNoaWxkcmVuKHJlcyk7XG4gICAgICAgIHZhciB2bm9kZSA9IHJlcyAmJiByZXNbMF07XG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZShjdXIpO1xuICAgICAgICByZXR1cm4gcmVzICYmXG4gICAgICAgICAgICAoIXZub2RlIHx8XG4gICAgICAgICAgICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgdm5vZGUuaXNDb21tZW50ICYmICFpc0FzeW5jUGxhY2Vob2xkZXIodm5vZGUpKSkgLy8gIzk2NTgsICMxMDM5MVxuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogcmVzO1xuICAgIH07XG4gICAgLy8gdGhpcyBpcyBhIHNsb3QgdXNpbmcgdGhlIG5ldyB2LXNsb3Qgc3ludGF4IHdpdGhvdXQgc2NvcGUuIGFsdGhvdWdoIGl0IGlzXG4gICAgLy8gY29tcGlsZWQgYXMgYSBzY29wZWQgc2xvdCwgcmVuZGVyIGZuIHVzZXJzIHdvdWxkIGV4cGVjdCBpdCB0byBiZSBwcmVzZW50XG4gICAgLy8gb24gdGhpcy4kc2xvdHMgYmVjYXVzZSB0aGUgdXNhZ2UgaXMgc2VtYW50aWNhbGx5IGEgbm9ybWFsIHNsb3QuXG4gICAgaWYgKGZuLnByb3h5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub3JtYWxTbG90cywga2V5LCB7XG4gICAgICAgICAgICBnZXQ6IG5vcm1hbGl6ZWQsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgI
13835H0pO1xuICAgIH1cbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbn1cbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNsb3RzW2tleV07IH07XG59XG5cbmZ1bmN0aW9uIGluaXRTZXR1cCh2bSkge1xuICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgdmFyIHNldHVwID0gb3B0aW9ucy5zZXR1cDtcbiAgICBpZiAoc2V0dXApIHtcbiAgICAgICAgdmFyIGN0eCA9ICh2bS5fc2V0dXBDb250ZXh0ID0gY3JlYXRlU2V0dXBDb250ZXh0KHZtKSk7XG4gICAgICAgIHNldEN1cnJlbnRJbnN0YW5jZSh2bSk7XG4gICAgICAgIHB1c2hUYXJnZXQoKTtcbiAgICAgICAgdmFyIHNldHVwUmVzdWx0ID0gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoc2V0dXAsIG51bGwsIFt2bS5fcHJvcHMgfHwgc2hhbGxvd1JlYWN0aXZlKHt9KSwgY3R4XSwgdm0sIFwic2V0dXBcIik7XG4gICAgICAgIHBvcFRhcmdldCgpO1xuICAgICAgICBzZXRDdXJyZW50SW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oc2V0dXBSZXN1bHQpKSB7XG4gICAgICAgICAgICAvLyByZW5kZXIgZnVuY3Rpb25cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIG9wdGlvbnMucmVuZGVyID0gc2V0dXBSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3Qoc2V0dXBSZXN1bHQpKSB7XG4gICAgICAgICAgICAvLyBiaW5kaW5nc1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2V0dXBSZXN1bHQgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcInNldHVwKCkgc2hvdWxkIG5vdCByZXR1cm4gVk5vZGVzIGRpcmVjdGx5IC0gXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInJldHVybiBhIHJlbmRlciBmdW5jdGlvbiBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZtLl9zZXR1cFN0YXRlID0gc2V0dXBSZXN1bHQ7XG4gICAgICAgICAgICAvLyBfX3NmYyBpbmRpY2F0ZXMgY29tcGlsZWQgYmluZGluZ3MgZnJvbSA8c2NyaXB0IHNldHVwPlxuICAgICAgICAgICAgaWYgKCFzZXR1cFJlc3VsdC5fX3NmYykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzZXR1cFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlXaXRoUmVmVW53cmFwKHZtLCBzZXR1cFJlc3VsdCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJBdm9pZCB1c2luZyB2YXJpYWJsZXMgdGhhdCBzdGFydCB3aXRoIF8gb3IgJCBpbiBzZXR1cCgpLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGV4cG9zZWQgZm9yIGNvbXBpbGVkIHJlbmRlciBmblxuICAgICAgICAgICAgICAgIHZhciBwcm94eSA9ICh2bS5fc2V0dXBQcm94eSA9IHt9KTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dXBSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ19fc2ZjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlXaXRoUmVmVW53cmFwKHByb3h5LCBzZXR1cFJlc3VsdCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHNldHVwUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdhcm4kMihcInNldHVwKCkgc2hvdWxkIHJldHVybiBhbiBvYmplY3QuIFJlY2VpdmVkOiBcIi5jb25jYXQoc2V0dXBSZXN1bHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygc2V0dXBSZXN1bHQpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVNldHVwQ29udGV4dCh2bSkge1xuICAgIHZhciBleHBvc2VDYWxsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQgYXR0cnMoKSB7XG4gICAgICAgICAgICBpZiAoIXZtLl9hdHRyc1Byb3h5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb3h5ID0gKHZtLl9hdHRyc1Byb3h5ID0ge30pO1xuICAgICAgICAgICAgICAgIGRlZihwcm94eSwgJ192X2F0dHJfcHJveHknLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzeW5jU2V0dXBQcm94eShwcm94eSwgdm0uJGF0dHJzLCBlbXB0eU9iamVjdCwgdm0sICckYXR0cnMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2bS5fYXR0cnNQcm94eTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGxpc3RlbmVycygpIHtcbiAgICAgICAgICAgIGlmICghdm0uX2xpc3RlbmVyc1Byb3h5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb3h5ID0gKHZtLl9saXN0ZW5lcnNQcm94eSA9IHt9KTtcbiAgICAgICAgICAgICAgICBzeW5jU2V0dXBQcm94eShwcm94eSwgdm0uJGxpc3RlbmVycywgZW1wdHlPYmplY3QsIHZtLCAnJGxpc3RlbmVycycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZtLl9saXN0ZW5lcnNQcm94eTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHNsb3RzKCkge1xuICAgICAgICAgICAgcmV0dXJuIGluaXRTbG90c1Byb3h5KHZtKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW1pdDogYmluZCQxKHZtLiRlbWl0LCB2bSksXG4gICAgICAgIGV4cG9zZTogZnVuY3Rpb24gKGV4cG9zZWQpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cG9zZUNhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJleHBvc2UoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSBwZXIgc2V0dXAoKS5cIiwgdm0pO1xuICAgICAgICAgICAgICAgI
13835H1cbiAgICAgICAgICAgICAgICBleHBvc2VDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV4cG9zZWQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhleHBvc2VkKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5V2l0aFJlZlVud3JhcCh2bSwgZXhwb3NlZCwga2V5KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBzeW5jU2V0dXBQcm94eSh0bywgZnJvbSwgcHJldiwgaW5zdGFuY2UsIHR5cGUpIHtcbiAgICB2YXIgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0bykpIHtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgZGVmaW5lUHJveHlBdHRyKHRvLCBrZXksIGluc3RhbmNlLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmcm9tW2tleV0gIT09IHByZXZba2V5XSkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIHRvKSB7XG4gICAgICAgIGlmICghKGtleSBpbiBmcm9tKSkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICBkZWxldGUgdG9ba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZDtcbn1cbmZ1bmN0aW9uIGRlZmluZVByb3h5QXR0cihwcm94eSwga2V5LCBpbnN0YW5jZSwgdHlwZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm94eSwga2V5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2VbdHlwZV1ba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gaW5pdFNsb3RzUHJveHkodm0pIHtcbiAgICBpZiAoIXZtLl9zbG90c1Byb3h5KSB7XG4gICAgICAgIHN5bmNTZXR1cFNsb3RzKCh2bS5fc2xvdHNQcm94eSA9IHt9KSwgdm0uJHNjb3BlZFNsb3RzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZtLl9zbG90c1Byb3h5O1xufVxuZnVuY3Rpb24gc3luY1NldHVwU2xvdHModG8sIGZyb20pIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xuICAgIH1cbiAgICBmb3IgKHZhciBrZXkgaW4gdG8pIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIGZyb20pKSB7XG4gICAgICAgICAgICBkZWxldGUgdG9ba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQGludGVybmFsIHVzZSBtYW51YWwgdHlwZSBkZWYgYmVjYXVzZSBwdWJsaWMgc2V0dXAgY29udGV4dCB0eXBlIHJlbGllcyBvblxuICogbGVnYWN5IFZOb2RlIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIHVzZVNsb3RzKCkge1xuICAgIHJldHVybiBnZXRDb250ZXh0KCkuc2xvdHM7XG59XG4vKipcbiAqIEBpbnRlcm5hbCB1c2UgbWFudWFsIHR5cGUgZGVmIGJlY2F1c2UgcHVibGljIHNldHVwIGNvbnRleHQgdHlwZSByZWxpZXMgb25cbiAqIGxlZ2FjeSBWTm9kZSB0eXBlc1xuICovXG5mdW5jdGlvbiB1c2VBdHRycygpIHtcbiAgICByZXR1cm4gZ2V0Q29udGV4dCgpLmF0dHJzO1xufVxuLyoqXG4gKiBWdWUgMiBvbmx5XG4gKiBAaW50ZXJuYWwgdXNlIG1hbnVhbCB0eXBlIGRlZiBiZWNhdXNlIHB1YmxpYyBzZXR1cCBjb250ZXh0IHR5cGUgcmVsaWVzIG9uXG4gKiBsZWdhY3kgVk5vZGUgdHlwZXNcbiAqL1xuZnVuY3Rpb24gdXNlTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiBnZXRDb250ZXh0KCkubGlzdGVuZXJzO1xufVxuZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY3VycmVudEluc3RhbmNlKSB7XG4gICAgICAgIHdhcm4kMihcInVzZUNvbnRleHQoKSBjYWxsZWQgd2l0aG91dCBhY3RpdmUgaW5zdGFuY2UuXCIpO1xuICAgIH1cbiAgICB2YXIgdm0gPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgcmV0dXJuIHZtLl9zZXR1cENvbnRleHQgfHwgKHZtLl9zZXR1cENvbnRleHQgPSBjcmVhdGVTZXR1cENvbnRleHQodm0pKTtcbn1cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgZGVmYXVsdCBkZWNsYXJhdGlvbnMuIEltcG9ydGVkIGJ5IGNvbXBpbGVkIGNvZGVcbiAqIG9ubHkuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEZWZhdWx0cyhyYXcsIGRlZmF1bHRzKSB7XG4gICAgdmFyIHByb3BzID0gaXNBcnJheShyYXcpXG4gICAgICAgID8gcmF3LnJlZHVjZShmdW5jdGlvbiAobm9ybWFsaXplZCwgcCkgeyByZXR1cm4gKChub3JtYWxpemVkW3BdID0ge30pLCBub3JtYWxpemVkKTsgfSwge30pXG4gICAgICAgIDogcmF3O1xuICAgIGZvciAodmFyIGtleSBpbiBkZWZhdWx0cykge1xuICAgICAgICB2Y
13835XIgb3B0ID0gcHJvcHNba2V5XTtcbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0KSB8fCBpc0Z1bmN0aW9uKG9wdCkpIHtcbiAgICAgICAgICAgICAgICBwcm9wc1trZXldID0geyB0eXBlOiBvcHQsIGRlZmF1bHQ6IGRlZmF1bHRzW2tleV0gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdC5kZWZhdWx0ID0gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHByb3BzW2tleV0gPSB7IGRlZmF1bHQ6IGRlZmF1bHRzW2tleV0gfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuJDIoXCJwcm9wcyBkZWZhdWx0IGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGhhcyBubyBjb3JyZXNwb25kaW5nIGRlY2xhcmF0aW9uLlwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BzO1xufVxuXG5mdW5jdGlvbiBpbml0UmVuZGVyKHZtKSB7XG4gICAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgICB2bS5fc3RhdGljVHJlZXMgPSBudWxsOyAvLyB2LW9uY2UgY2FjaGVkIHRyZWVzXG4gICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcGFyZW50Vm5vZGUgPSAodm0uJHZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGUpOyAvLyB0aGUgcGxhY2Vob2xkZXIgbm9kZSBpbiBwYXJlbnQgdHJlZVxuICAgIHZhciByZW5kZXJDb250ZXh0ID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuY29udGV4dDtcbiAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICAgIHZtLiRzY29wZWRTbG90cyA9IHBhcmVudFZub2RlXG4gICAgICAgID8gbm9ybWFsaXplU2NvcGVkU2xvdHModm0uJHBhcmVudCwgcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cywgdm0uJHNsb3RzKVxuICAgICAgICA6IGVtcHR5T2JqZWN0O1xuICAgIC8vIGJpbmQgdGhlIGNyZWF0ZUVsZW1lbnQgZm4gdG8gdGhpcyBpbnN0YW5jZVxuICAgIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gICAgLy8gYXJncyBvcmRlcjogdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZVxuICAgIC8vIGludGVybmFsIHZlcnNpb24gaXMgdXNlZCBieSByZW5kZXIgZnVuY3Rpb25zIGNvbXBpbGVkIGZyb20gdGVtcGxhdGVzXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHZtLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMSh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAgIC8vIG5vcm1hbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgZm9yIHRoZSBwdWJsaWMgdmVyc2lvbiwgdXNlZCBpblxuICAgIC8vIHVzZXItd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB2bS4kY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50JDEodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuICAgIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gICAgLy8gdGhleSBuZWVkIHRvIGJlIHJlYWN0aXZlIHNvIHRoYXQgSE9DcyB1c2luZyB0aGVtIGFyZSBhbHdheXMgdXBkYXRlZFxuICAgIHZhciBwYXJlbnREYXRhID0gcGFyZW50Vm5vZGUgJiYgcGFyZW50Vm5vZGUuZGF0YTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGF0dHJzJywgKHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycykgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybiQyKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybiQyKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGF0dHJzJywgKHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycykgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICAgIH1cbn1cbnZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuZnVuY3Rpb24gcmVuZGVyTWl4aW4oVnVlKSB7XG4gICAgLy8gaW5zdGFsbCBydW50aW1lIGNvbnZlbmllbmNlIGhlbHBlcnNcbiAgICBpbnN0YWxsUmVuZGVySGVscGVycyhWdWUucHJvdG90eXBlKTtcbiAgICBWdWUucHJvdG90eXBlLiRuZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gbmV4dFRpY2soZm4sIHRoaXMpO1xuICAgIH07XG4gICAgVnVlLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2Y
13835XIgdm0gPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB2bS4kb3B0aW9ucywgcmVuZGVyID0gX2EucmVuZGVyLCBfcGFyZW50Vm5vZGUgPSBfYS5fcGFyZW50Vm5vZGU7XG4gICAgICAgIGlmIChfcGFyZW50Vm5vZGUgJiYgdm0uX2lzTW91bnRlZCkge1xuICAgICAgICAgICAgdm0uJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHModm0uJHBhcmVudCwgX3BhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHMsIHZtLiRzbG90cywgdm0uJHNjb3BlZFNsb3RzKTtcbiAgICAgICAgICAgIGlmICh2bS5fc2xvdHNQcm94eSkge1xuICAgICAgICAgICAgICAgIHN5bmNTZXR1cFNsb3RzKHZtLl9zbG90c1Byb3h5LCB2bS4kc2NvcGVkU2xvdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBwYXJlbnQgdm5vZGUuIHRoaXMgYWxsb3dzIHJlbmRlciBmdW5jdGlvbnMgdG8gaGF2ZSBhY2Nlc3NcbiAgICAgICAgLy8gdG8gdGhlIGRhdGEgb24gdGhlIHBsYWNlaG9sZGVyIG5vZGUuXG4gICAgICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAgICAgLy8gcmVuZGVyIHNlbGZcbiAgICAgICAgdmFyIHZub2RlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVzZSBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAgICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgICAgICAgIC8vIHdoZW4gcGFyZW50IGNvbXBvbmVudCBpcyBwYXRjaGVkLlxuICAgICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKHZtKTtcbiAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IHZtO1xuICAgICAgICAgICAgdm5vZGUgPSByZW5kZXIuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyXCIpO1xuICAgICAgICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1bHQsXG4gICAgICAgICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZtLiRvcHRpb25zLnJlbmRlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUgPSB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuICAgICAgICAgICAgc2V0Q3VycmVudEluc3RhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICAgICAgaWYgKGlzQXJyYXkodm5vZGUpICYmIHZub2RlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgdm5vZGUgPSB2bm9kZVswXTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgICAgIGlmICghKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0FycmF5KHZub2RlKSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMignTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIHJldHVybiBhIHNpbmdsZSByb290IG5vZGUuJywgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IHBhcmVudFxuICAgICAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgICAgIHJldHVybiB2bm9kZTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDdG9yKGNvbXAsIGJhc2UpIHtcbiAgICBpZiAoY29tcC5fX2VzTW9kdWxlIHx8IChoYXNTeW1ib2wgJiYgY29tcFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJykpIHtcbiAgICAgICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgICB9XG4gICAgcmV0dXJuIGlzT2JqZWN0KGNvbXApID8gYmFzZS5leHRlbmQoY29tcCkgOiBjb21wO1xufVxuZnVuY3Rpb24gY3JlYXRlQXN5bmNQbGFjZWhvbGRlcihmYWN0b3J5LCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKSB7XG4gICAgdmFyIG5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgbm9kZS5hc3luY0ZhY3RvcnkgPSBmYWN0b3J5O1xuICAgIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XG4gICAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiByZXNvbHZlQXN5bmNDb21wb25lbnQoZmFjdG9yeSwgYmFzZUN0b3IpIHtcbiAgICBpZiAoaXNUcnVlKGZhY3RvcnkuZXJyb3IpICYmIGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXA7XG4gICAgfVxuICAgIGlmIChpc0RlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICByZXR1cm4gZmFjdG9yeS5yZXNvbHZlZDtcbiAgICB9XG4gICAgdmFyIG93bmVyID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xuICAgIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgICAgIC8vIGFscmVhZHkgcGVuZGluZ1xuICAgICAgICBmYWN0b3J5Lm93bmVycy5wdXNoKG93bmVyKTtcbiAgICB9XG4gICAgaWYgKGlzVHJ1ZShmYWN0b3J5LmxvYWRpbmcpICYmIGlzRGVmKGZhY3RvcnkubG9hZGluZ0NvbXApKSB7XG4gICAgICAgI
13835HJldHVybiBmYWN0b3J5LmxvYWRpbmdDb21wO1xuICAgIH1cbiAgICBpZiAob3duZXIgJiYgIWlzRGVmKGZhY3Rvcnkub3duZXJzKSkge1xuICAgICAgICB2YXIgb3duZXJzXzEgPSAoZmFjdG9yeS5vd25lcnMgPSBbb3duZXJdKTtcbiAgICAgICAgdmFyIHN5bmNfMSA9IHRydWU7XG4gICAgICAgIHZhciB0aW1lckxvYWRpbmdfMSA9IG51bGw7XG4gICAgICAgIHZhciB0aW1lclRpbWVvdXRfMSA9IG51bGw7XG4gICAgICAgIG93bmVyLiRvbignaG9vazpkZXN0cm95ZWQnLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZW1vdmUkMihvd25lcnNfMSwgb3duZXIpOyB9KTtcbiAgICAgICAgdmFyIGZvcmNlUmVuZGVyXzEgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG93bmVyc18xLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIG93bmVyc18xW2ldLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlbmRlckNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIG93bmVyc18xLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyTG9hZGluZ18xICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lckxvYWRpbmdfMSk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyTG9hZGluZ18xID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVyVGltZW91dF8xICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lclRpbWVvdXRfMSk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyVGltZW91dF8xID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2tzIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyByZXNvbHZlXG4gICAgICAgICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgICAgICAgIGlmICghc3luY18xKSB7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXJfMSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG93bmVyc18xLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2Y
13835XIgcmVqZWN0XzEgPSBvbmNlKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQ6IFwiLmNvbmNhdChTdHJpbmcoZmFjdG9yeSkpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlYXNvbiA/IFwiXFxuUmVhc29uOiBcIi5jb25jYXQocmVhc29uKSA6ICcnKSk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICAgICAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXJfMSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciByZXNfMSA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0XzEpO1xuICAgICAgICBpZiAoaXNPYmplY3QocmVzXzEpKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc18xKSkge1xuICAgICAgICAgICAgICAgIC8vICgpID0+IFByb21pc2VcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNfMS50aGVuKHJlc29sdmUsIHJlamVjdF8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1Byb21pc2UocmVzXzEuY29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgIHJlc18xLmNvbXBvbmVudC50aGVuKHJlc29sdmUsIHJlamVjdF8xKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYocmVzXzEuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhY3RvcnkuZXJyb3JDb21wID0gZW5zdXJlQ3RvcihyZXNfMS5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYocmVzXzEubG9hZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0b3IocmVzXzEubG9hZGluZywgYmFzZUN0b3IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzXzEuZGVsYXkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVKUyB0aW1lb3V0IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyTG9hZGluZ18xID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJMb2FkaW5nXzEgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VSZW5kZXJfMShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVzXzEuZGVsYXkgfHwgMjAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNEZWYocmVzXzEudGltZW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBOb2RlSlMgdGltZW91dCB0eXBlXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyVGltZW91dF8xID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lclRpbWVvdXRfMSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF8xKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBcInRpbWVvdXQgKFwiLmNvbmNhdChyZXNfMS50aW1lb3V0LCBcIm1zKVwiKSA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCByZXNfMS50aW1lb3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3luY18xID0gZmFsc2U7XG4gICAgICAgIC8vIHJldHVybiBpbiBjYXNlIHJlc29sdmVkIHN5bmNocm9ub3VzbHlcbiAgICAgICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZyA/IGZhY3RvcnkubG9hZGluZ0NvbXAgOiBmYWN0b3J5LnJlc29sdmVkO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjaGlsZHJlbikge1xuICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2Y
13835XIgYyA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGMpICYmIChpc0RlZihjLmNvbXBvbmVudE9wdGlvbnMpIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdEV2ZW50cyh2bSkge1xuICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZtLl9oYXNIb29rRXZlbnQgPSBmYWxzZTtcbiAgICAvLyBpbml0IHBhcmVudCBhdHRhY2hlZCBldmVudHNcbiAgICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgICB9XG59XG52YXIgdGFyZ2V0JDE7XG5mdW5jdGlvbiBhZGQkMShldmVudCwgZm4pIHtcbiAgICB0YXJnZXQkMS4kb24oZXZlbnQsIGZuKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZSQxKGV2ZW50LCBmbikge1xuICAgIHRhcmdldCQxLiRvZmYoZXZlbnQsIGZuKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyJDEoZXZlbnQsIGZuKSB7XG4gICAgdmFyIF90YXJnZXQgPSB0YXJnZXQkMTtcbiAgICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XG4gICAgICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycywgb2xkTGlzdGVuZXJzKSB7XG4gICAgdGFyZ2V0JDEgPSB2bTtcbiAgICB1cGRhdGVMaXN0ZW5lcnMobGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMgfHwge30sIGFkZCQxLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm0pO1xuICAgIHRhcmdldCQxID0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gZXZlbnRzTWl4aW4oVnVlKSB7XG4gICAgdmFyIGhvb2tSRSA9IC9eaG9vazovO1xuICAgIFZ1ZS5wcm90b3R5cGUuJG9uID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgICAgICB2Y
13835XIgdm0gPSB0aGlzO1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAodm0uX2V2ZW50c1tldmVudF0gfHwgKHZtLl9ldmVudHNbZXZlbnRdID0gW10pKS5wdXNoKGZuKTtcbiAgICAgICAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAgICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgICAgICAgIGlmIChob29rUkUudGVzdChldmVudCkpIHtcbiAgICAgICAgICAgICAgICB2bS5faGFzSG9va0V2ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm07XG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLiRvbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgICBmdW5jdGlvbiBvbigpIHtcbiAgICAgICAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgICAgICAgIGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uLmZuID0gZm47XG4gICAgICAgIHZtLiRvbihldmVudCwgb24pO1xuICAgICAgICByZXR1cm4gdm07XG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIC8vIGFsbFxuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIHZtO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGlfMSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGlfMSA8IGw7IGlfMSsrKSB7XG4gICAgICAgICAgICAgICAgdm0uJG9mZihldmVudFtpXzFdLCBmbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdm07XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgICAgICBpZiAoIWNicykge1xuICAgICAgICAgICAgcmV0dXJuIHZtO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm4pIHtcbiAgICAgICAgICAgIHZtLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiB2bTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgICAgIHZhciBjYjtcbiAgICAgICAgdmFyIGkgPSBjYnMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBjYiA9IGNic1tpXTtcbiAgICAgICAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICAgICAgICAgICAgY2JzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm07XG4gICAgfTtcbiAgICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB2Y
13835XIgbG93ZXJDYXNlRXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiB2bS5fZXZlbnRzW2xvd2VyQ2FzZUV2ZW50XSkge1xuICAgICAgICAgICAgICAgIHRpcChcIkV2ZW50IFxcXCJcIi5jb25jYXQobG93ZXJDYXNlRXZlbnQsIFwiXFxcIiBpcyBlbWl0dGVkIGluIGNvbXBvbmVudCBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIlwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKHZtKSwgXCIgYnV0IHRoZSBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgZm9yIFxcXCJcIikuY29uY2F0KGV2ZW50LCBcIlxcXCIuIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiLmNvbmNhdChoeXBoZW5hdGUoZXZlbnQpLCBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIpLmNvbmNhdChldmVudCwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgICAgICBpZiAoY2JzKSB7XG4gICAgICAgICAgICBjYnMgPSBjYnMubGVuZ3RoID4gMSA/IHRvQXJyYXkoY2JzKSA6IGNicztcbiAgICAgICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgdmFyIGluZm8gPSBcImV2ZW50IGhhbmRsZXIgZm9yIFxcXCJcIi5jb25jYXQoZXZlbnQsIFwiXFxcIlwiKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm07XG4gICAgfTtcbn1cblxudmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcbmZ1bmN0aW9uIHNldEFjdGl2ZUluc3RhbmNlKHZtKSB7XG4gICAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICAgIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluaXRMaWZlY3ljbGUodm0pIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgIC8vIGxvY2F0ZSBmaXJzdCBub24tYWJzdHJhY3QgcGFyZW50XG4gICAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgICAgd2hpbGUgKHBhcmVudC4kb3B0aW9ucy5hYnN0cmFjdCAmJiBwYXJlbnQuJHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LiRjaGlsZHJlbi5wdXNoKHZtKTtcbiAgICB9XG4gICAgdm0uJHBhcmVudCA9IHBhcmVudDtcbiAgICB2bS4kcm9vdCA9IHBhcmVudCA/IHBhcmVudC4kcm9vdCA6IHZtO1xuICAgIHZtLiRjaGlsZHJlbiA9IFtdO1xuICAgIHZtLiRyZWZzID0ge307XG4gICAgdm0uX3Byb3ZpZGVkID0gcGFyZW50ID8gcGFyZW50Ll9wcm92aWRlZCA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICAgIHZtLl9pbmFjdGl2ZSA9IG51bGw7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIHZtLl9pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gZmFsc2U7XG59XG5mdW5jdGlvbiBsaWZlY3ljbGVNaXhpbihWdWUpIHtcbiAgICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgICB2Y
13835XIgdm0gPSB0aGlzO1xuICAgICAgICB2YXIgcHJldkVsID0gdm0uJGVsO1xuICAgICAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB2YXIgcmVzdG9yZUFjdGl2ZUluc3RhbmNlID0gc2V0QWN0aXZlSW5zdGFuY2Uodm0pO1xuICAgICAgICB2bS5fdm5vZGUgPSB2bm9kZTtcbiAgICAgICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgICAgIC8vIGJhc2VkIG9uIHRoZSByZW5kZXJpbmcgYmFja2VuZCB1c2VkLlxuICAgICAgICBpZiAoIXByZXZWbm9kZSkge1xuICAgICAgICAgICAgLy8gaW5pdGlhbCByZW5kZXJcbiAgICAgICAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyh2bS4kZWwsIHZub2RlLCBoeWRyYXRpbmcsIGZhbHNlIC8qIHJlbW92ZU9ubHkgKi8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlc1xuICAgICAgICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xuICAgICAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICAgICAgaWYgKHByZXZFbCkge1xuICAgICAgICAgICAgcHJldkVsLl9fdnVlX18gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2bS4kZWwpIHtcbiAgICAgICAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgcGFyZW50IGlzIGFuIEhPQywgdXBkYXRlIGl0cyAkZWwgYXMgd2VsbFxuICAgICAgICB2Y
13835XIgd3JhcHBlciA9IHZtO1xuICAgICAgICB3aGlsZSAod3JhcHBlciAmJlxuICAgICAgICAgICAgd3JhcHBlci4kdm5vZGUgJiZcbiAgICAgICAgICAgIHdyYXBwZXIuJHBhcmVudCAmJlxuICAgICAgICAgICAgd3JhcHBlci4kdm5vZGUgPT09IHdyYXBwZXIuJHBhcmVudC5fdm5vZGUpIHtcbiAgICAgICAgICAgIHdyYXBwZXIuJHBhcmVudC4kZWwgPSB3cmFwcGVyLiRlbDtcbiAgICAgICAgICAgIHdyYXBwZXIgPSB3cmFwcGVyLiRwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdXBkYXRlZCBob29rIGlzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyIHRvIGVuc3VyZSB0aGF0IGNoaWxkcmVuIGFyZVxuICAgICAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICAgIH07XG4gICAgVnVlLnByb3RvdHlwZS4kZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgICAgICAgdm0uX3dhdGNoZXIudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFZ1ZS5wcm90b3R5cGUuJGRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVEZXN0cm95Jyk7XG4gICAgICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSBwYXJlbnRcbiAgICAgICAgdmFyIHBhcmVudCA9IHZtLiRwYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgICAgICAgIHJlbW92ZSQyKHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0ZWFyZG93biBzY29wZS4gdGhpcyBpbmNsdWRlcyBib3RoIHRoZSByZW5kZXIgd2F0Y2hlciBhbmQgb3RoZXJcbiAgICAgICAgLy8gd2F0Y2hlcnMgY3JlYXRlZFxuICAgICAgICB2bS5fc2NvcGUuc3RvcCgpO1xuICAgICAgICAvLyByZW1vdmUgcmVmZXJlbmNlIGZyb20gZGF0YSBvYlxuICAgICAgICAvLyBmcm96ZW4gb2JqZWN0IG1heSBub3QgaGF2ZSBvYnNlcnZlci5cbiAgICAgICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIHRoZSBsYXN0IGhvb2suLi5cbiAgICAgICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgLy8gaW52b2tlIGRlc3Ryb3kgaG9va3Mgb24gY3VycmVudCByZW5kZXJlZCB0cmVlXG4gICAgICAgIHZtLl9fcGF0Y2hfXyh2bS5fdm5vZGUsIG51bGwpO1xuICAgICAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgICAgIGNhbGxIb29rJDEodm0sICdkZXN0cm95ZWQnKTtcbiAgICAgICAgLy8gdHVybiBvZmYgYWxsIGluc3RhbmNlIGxpc3RlbmVycy5cbiAgICAgICAgdm0uJG9mZigpO1xuICAgICAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICAgICAgaWYgKHZtLiRlbCkge1xuICAgICAgICAgICAgdm0uJGVsLl9fdnVlX18gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICAgICAgaWYgKHZtLiR2bm9kZSkge1xuICAgICAgICAgICAgdm0uJHZub2RlLnBhcmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gbW91bnRDb21wb25lbnQodm0sIGVsLCBoeWRyYXRpbmcpIHtcbiAgICB2bS4kZWwgPSBlbDtcbiAgICBpZiAoIXZtLiRvcHRpb25zLnJlbmRlcikge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGludmFsaWQgdHlwZVxuICAgICAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoKHZtLiRvcHRpb25zLnRlbXBsYXRlICYmIHZtLiRvcHRpb25zLnRlbXBsYXRlLmNoYXJBdCgwKSAhPT0gJyMnKSB8fFxuICAgICAgICAgICAgICAgIHZtLiRvcHRpb25zLmVsIHx8XG4gICAgICAgICAgICAgICAgZWwpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICAgICAgICAgICAnY29tcGlsZXIgaXMgbm90IGF2YWlsYWJsZS4gRWl0aGVyIHByZS1jb21waWxlIHRoZSB0ZW1wbGF0ZXMgaW50byAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3JlbmRlciBmdW5jdGlvbnMsIG9yIHVzZSB0aGUgY29tcGlsZXItaW5jbHVkZWQgYnVpbGQuJywgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKCdGYWlsZWQgdG8gbW91bnQgY29tcG9uZW50OiB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24gbm90IGRlZmluZWQuJywgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVNb3VudCcpO1xuICAgIHZhciB1cGRhdGVDb21wb25lbnQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSB2bS5fbmFtZTtcbiAgICAgICAgICAgIHZhciBpZCA9IHZtLl91aWQ7XG4gICAgICAgICAgICB2Y
13835XIgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiLmNvbmNhdChpZCk7XG4gICAgICAgICAgICB2YXIgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIuY29uY2F0KGlkKTtcbiAgICAgICAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xuICAgICAgICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQobmFtZSwgXCIgcmVuZGVyXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgICAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgICAgICAgIG1lYXN1cmUoXCJ2dWUgXCIuY29uY2F0KG5hbWUsIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICB2YXIgd2F0Y2hlck9wdGlvbnMgPSB7XG4gICAgICAgIGJlZm9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgIGNhbGxIb29rJDEodm0sICdiZWZvcmVVcGRhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2F0Y2hlck9wdGlvbnMub25UcmFjayA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBjYWxsSG9vayQxKHZtLCAncmVuZGVyVHJhY2tlZCcsIFtlXSk7IH07XG4gICAgICAgIHdhdGNoZXJPcHRpb25zLm9uVHJpZ2dlciA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBjYWxsSG9vayQxKHZtLCAncmVuZGVyVHJpZ2dlcmVkJywgW2VdKTsgfTtcbiAgICB9XG4gICAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudCdzIG1vdW50ZWQgaG9vayksIHdoaWNoIHJlbGllcyBvbiB2bS5fd2F0Y2hlciBiZWluZyBhbHJlYWR5IGRlZmluZWRcbiAgICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB3YXRjaGVyT3B0aW9ucywgdHJ1ZSAvKiBpc1JlbmRlcldhdGNoZXIgKi8pO1xuICAgIGh5ZHJhdGluZyA9IGZhbHNlO1xuICAgIC8vIGZsdXNoIGJ1ZmZlciBmb3IgZmx1c2g6IFwicHJlXCIgd2F0Y2hlcnMgcXVldWVkIGluIHNldHVwKClcbiAgICB2YXIgcHJlV2F0Y2hlcnMgPSB2bS5fcHJlV2F0Y2hlcnM7XG4gICAgaWYgKHByZVdhdGNoZXJzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlV2F0Y2hlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHByZVdhdGNoZXJzW2ldLnJ1bigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG1hbnVhbGx5IG1vdW50ZWQgaW5zdGFuY2UsIGNhbGwgbW91bnRlZCBvbiBzZWxmXG4gICAgLy8gbW91bnRlZCBpcyBjYWxsZWQgZm9yIHJlbmRlci1jcmVhdGVkIGNoaWxkIGNvbXBvbmVudHMgaW4gaXRzIGluc2VydGVkIGhvb2tcbiAgICBpZiAodm0uJHZub2RlID09IG51bGwpIHtcbiAgICAgICAgdm0uX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICAgIGNhbGxIb29rJDEodm0sICdtb3VudGVkJyk7XG4gICAgfVxuICAgIHJldHVybiB2bTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkQ29tcG9uZW50KHZtLCBwcm9wc0RhdGEsIGxpc3RlbmVycywgcGFyZW50Vm5vZGUsIHJlbmRlckNoaWxkcmVuKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgY29tcG9uZW50IGhhcyBzbG90IGNoaWxkcmVuXG4gICAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBvdmVyd3JpdGluZyAkb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4uXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGR5bmFtaWMgc2NvcGVkU2xvdHMgKGhhbmQtd3JpdHRlbiBvciBjb21waWxlZCBidXQgd2l0aFxuICAgIC8vIGR5bmFtaWMgc2xvdCBuYW1lcykuIFN0YXRpYyBzY29wZWQgc2xvdHMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZSBoYXMgdGhlXG4gICAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICAgIHZhciBuZXdTY29wZWRTbG90cyA9IHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHM7XG4gICAgdmFyIG9sZFNjb3BlZFNsb3RzID0gdm0uJHNjb3BlZFNsb3RzO1xuICAgIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKChuZXdTY29wZWRTbG90cyAmJiAhbmV3U2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAgICAgKG9sZFNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJiAhb2xkU2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAgICAgKG5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5ICE9PSBuZXdTY29wZWRTbG90cy4ka2V5KSB8fFxuICAgICAgICAoIW5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5KSk7XG4gICAgLy8gQW55IHN0YXRpYyBzbG90IGNoaWxkcmVuIGZyb20gdGhlIHBhcmVudCBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyBwYXJlbnQnc1xuICAgIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAgIC8vIHVwZGF0ZSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gISEocmVuZGVyQ2hpbGRyZW4gfHwgLy8gaGFzIG5ldyBzdGF0aWMgc2xvdHNcbiAgICAgICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8IC8vIGhhcyBvbGQgc3Rh
13835dGljIHNsb3RzXG4gICAgICAgIGhhc0R5bmFtaWNTY29wZWRTbG90KTtcbiAgICB2YXIgcHJldlZOb2RlID0gdm0uJHZub2RlO1xuICAgIHZtLiRvcHRpb25zLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuICAgIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG4gICAgaWYgKHZtLl92bm9kZSkge1xuICAgICAgICAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgICAgICB2bS5fdm5vZGUucGFyZW50ID0gcGFyZW50Vm5vZGU7XG4gICAgfVxuICAgIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiA9IHJlbmRlckNoaWxkcmVuO1xuICAgIC8vIHVwZGF0ZSAkYXR0cnMgYW5kICRsaXN0ZW5lcnMgaGFzaFxuICAgIC8vIHRoZXNlIGFyZSBhbHNvIHJlYWN0aXZlIHNvIHRoZXkgbWF5IHRyaWdnZXIgY2hpbGQgdXBkYXRlIGlmIHRoZSBjaGlsZFxuICAgIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gICAgdmFyIGF0dHJzID0gcGFyZW50Vm5vZGUuZGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdDtcbiAgICBpZiAodm0uX2F0dHJzUHJveHkpIHtcbiAgICAgICAgLy8gZm9yY2UgdXBkYXRlIGlmIGF0dHJzIGFyZSBhY2Nlc3NlZCBhbmQgaGFzIGNoYW5nZWQgc2luY2UgaXQgbWF5IGJlXG4gICAgICAgIC8vIHBhc3NlZCB0byBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgICAgaWYgKHN5bmNTZXR1cFByb3h5KHZtLl9hdHRyc1Byb3h5LCBhdHRycywgKHByZXZWTm9kZS5kYXRhICYmIHByZXZWTm9kZS5kYXRhLmF0dHJzKSB8fCBlbXB0eU9iamVjdCwgdm0sICckYXR0cnMnKSkge1xuICAgICAgICAgICAgbmVlZHNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdm0uJGF0dHJzID0gYXR0cnM7XG4gICAgLy8gdXBkYXRlIGxpc3RlbmVyc1xuICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgICB2YXIgcHJldkxpc3RlbmVycyA9IHZtLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7XG4gICAgaWYgKHZtLl9saXN0ZW5lcnNQcm94eSkge1xuICAgICAgICBzeW5jU2V0dXBQcm94eSh2bS5fbGlzdGVuZXJzUHJveHksIGxpc3RlbmVycywgcHJldkxpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgdm0sICckbGlzdGVuZXJzJyk7XG4gICAgfVxuICAgIHZtLiRsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBwcmV2TGlzdGVuZXJzKTtcbiAgICAvLyB1cGRhdGUgcHJvcHNcbiAgICBpZiAocHJvcHNEYXRhICYmIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICAgICAgdmFyIHByb3BLZXlzID0gdm0uJG9wdGlvbnMuX3Byb3BLZXlzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2Y
13835XIga2V5ID0gcHJvcEtleXNbaV07XG4gICAgICAgICAgICB2YXIgcHJvcE9wdGlvbnMgPSB2bS4kb3B0aW9ucy5wcm9wczsgLy8gd3RmIGZsb3c/XG4gICAgICAgICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICAgICAgLy8ga2VlcCBhIGNvcHkgb2YgcmF3IHByb3BzRGF0YVxuICAgICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gICAgfVxuICAgIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gICAgaWYgKG5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICAgICAgdm0uJGZvcmNlVXBkYXRlKCk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUodm0pIHtcbiAgICB3aGlsZSAodm0gJiYgKHZtID0gdm0uJHBhcmVudCkpIHtcbiAgICAgICAgaWYgKHZtLl9pbmFjdGl2ZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLCBkaXJlY3QpIHtcbiAgICBpZiAoZGlyZWN0KSB7XG4gICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2bS5fZGlyZWN0SW5hY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodm0uX2luYWN0aXZlIHx8IHZtLl9pbmFjdGl2ZSA9PT0gbnVsbCkge1xuICAgICAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsSG9vayQxKHZtLCAnYWN0aXZhdGVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLCBkaXJlY3QpIHtcbiAgICBpZiAoZGlyZWN0KSB7XG4gICAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghdm0uX2luYWN0aXZlKSB7XG4gICAgICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQodm0uJGNoaWxkcmVuW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsSG9vayQxKHZtLCAnZGVhY3RpdmF0ZWQnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjYWxsSG9vayQxKHZtLCBob29rLCBhcmdzLCBzZXRDb250ZXh0KSB7XG4gICAgaWYgKHNldENvbnRleHQgPT09IHZvaWQgMCkgeyBzZXRDb250ZXh0ID0gdHJ1ZTsgfVxuICAgIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcbiAgICBwdXNoVGFyZ2V0KCk7XG4gICAgdmFyIHByZXYgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgc2V0Q29udGV4dCAmJiBzZXRDdXJyZW50SW5zdGFuY2Uodm0pO1xuICAgIHZhciBoYW5kbGVycyA9IHZtLiRvcHRpb25zW2hvb2tdO1xuICAgIHZhciBpbmZvID0gXCJcIi5jb25jYXQoaG9vaywgXCIgaG9va1wiKTtcbiAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGhhbmRsZXJzW2ldLCB2bSwgYXJncyB8fCBudWxsLCB2bSwgaW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcbiAgICAgICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2spO1xuICAgIH1cbiAgICBzZXRDb250ZXh0ICYmIHNldEN1cnJlbnRJbnN0YW5jZShwcmV2KTtcbiAgICBwb3BUYXJnZXQoKTtcbn1cblxudmFyIE1BWF9VUERBVEVfQ09VTlQgPSAxMDA7XG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXgkMSA9IDA7XG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSgpIHtcbiAgICBpbmRleCQxID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgICBoYXMgPSB7fTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjaXJjdWxhciA9IHt9O1xuICAgIH1cbiAgICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cbi8vIEFzeW5jIGVkZ2UgY2FzZSAjNjU2NiByZXF1aXJlcyBzYXZpbmcgdGhlIHRpbWVzdGFtcCB3aGVuIGV2ZW50IGxpc3RlbmVycyBhcmVcbi8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxuLy8gaWYgdGhlIHBhZ2UgaGFzIHRob3VzYW5kcyBvZiBldmVudCBsaXN0ZW5lcnMuIEluc3RlYWQsIHdlIHRha2UgYSB0aW1lc3RhbXBcbi8vIGV2ZXJ5IHRpbWUgdGhlIHNjaGVkdWxlciBmbHVzaGVzIGFuZCB1c2UgdGhhdCBmb3IgYWxsIGV2ZW50IGxpc3RlbmVyc1xuLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXG52YXIgY3VycmVudEZsdXNoVGltZXN0YW1wID0gMDtcbi8vIEFzeW5jIGVkZ2UgY2FzZSBmaXggcmVxdWlyZXMgc3RvcmluZyBhbiBldmVudCBsaXN0ZW5lcidzIGF0dGFjaCB0aW1lc3RhbXAuXG52YXIgZ2V0Tm93ID0gRGF0ZS5ub3c7XG4vLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuLy8gdGltZXN0YW1wIGNhbiBlaXRoZXIgYmUgaGktcmVzIChyZWxhdGl2ZSB0byBwYWdlIGxvYWQpIG9yIGxvdy1yZXNcbi8vIChyZWxhdGl2ZSB0byBVTklYIGVwb2NoKSwgc28gaW4gb3JkZXIgdG8gY29tcGFyZSB0aW1lIHdlIGhhdmUgdG8gdXNlIHRoZVxuLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuLy8gQWxsIElFIHZlcnNpb25zIHVzZSBsb3ctcmVzIGV2ZW50IHRpbWVzdGFtcHMsIGFuZCBoYXZlIHByb2JsZW1hdGljIGNsb2NrXG4vLyBpbXBsZW1lbnRhdGlvbnMgKCM5NjMyKVxuaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICAgIHZhciBwZXJmb3JtYW5jZV8xID0gd2luZG93LnBlcmZvcm1hbmNlO1xuICAgIGlmIChwZXJmb3JtYW5jZV8xICYmXG4gICAgICAgI
13835HR5cGVvZiBwZXJmb3JtYW5jZV8xLm5vdyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICBnZXROb3coKSA+IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpLnRpbWVTdGFtcCkge1xuICAgICAgICAvLyBpZiB0aGUgZXZlbnQgdGltZXN0YW1wLCBhbHRob3VnaCBldmFsdWF0ZWQgQUZURVIgdGhlIERhdGUubm93KCksIGlzXG4gICAgICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAgICAgLy8gYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBoaS1yZXMgdmVyc2lvbiBmb3IgZXZlbnQgbGlzdGVuZXIgdGltZXN0YW1wcyBhc1xuICAgICAgICAvLyB3ZWxsLlxuICAgICAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZV8xLm5vdygpOyB9O1xuICAgIH1cbn1cbnZhciBzb3J0Q29tcGFyZUZuID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYS5wb3N0KSB7XG4gICAgICAgIGlmICghYi5wb3N0KVxuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKGIucG9zdCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBhLmlkIC0gYi5pZDtcbn07XG4vKipcbiAqIEZsdXNoIGJvdGggcXVldWVzIGFuZCBydW4gdGhlIHdhdGNoZXJzLlxuICovXG5mdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlKCkge1xuICAgIGN1cnJlbnRGbHVzaFRpbWVzdGFtcCA9IGdldE5vdygpO1xuICAgIGZsdXNoaW5nID0gdHJ1ZTtcbiAgICB2YXIgd2F0Y2hlciwgaWQ7XG4gICAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQ6XG4gICAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAgIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgICAvLyAyLiBBIGNvbXBvbmVudCdzIHVzZXIgd2F0Y2hlcnMgYXJlIHJ1biBiZWZvcmUgaXRzIHJlbmRlciB3YXRjaGVyIChiZWNhdXNlXG4gICAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAgIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gICAgLy8gICAgaXRzIHdhdGNoZXJzIGNhbiBiZSBza2lwcGVkLlxuICAgIHF1ZXVlLnNvcnQoc29ydENvbXBhcmVGbik7XG4gICAgLy8gZG8gbm90IGNhY2hlIGxlbmd0aCBiZWNhdXNlIG1vcmUgd2F0Y2hlcnMgbWlnaHQgYmUgcHVzaGVkXG4gICAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gICAgZm9yIChpbmRleCQxID0gMDsgaW5kZXgkMSA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgkMSsrKSB7XG4gICAgICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleCQxXTtcbiAgICAgICAgaWYgKHdhdGNoZXIuYmVmb3JlKSB7XG4gICAgICAgICAgICB3YXRjaGVyLmJlZm9yZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlkID0gd2F0Y2hlci5pZDtcbiAgICAgICAgaGFzW2lkXSA9IG51bGw7XG4gICAgICAgIHdhdGNoZXIucnVuKCk7XG4gICAgICAgIC8vIGluIGRldiBidWlsZCwgY2hlY2sgYW5kIHN0b3AgY2lyY3VsYXIgdXBkYXRlcy5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaGFzW2lkXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjaXJjdWxhcltpZF0gPSAoY2lyY3VsYXJbaWRdIHx8IDApICsgMTtcbiAgICAgICAgICAgIGlmIChjaXJjdWxhcltpZF0gPiBNQVhfVVBEQVRFX0NPVU5UKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKCdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArXG4gICAgICAgICAgICAgICAgICAgICh3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJpbiB3YXRjaGVyIHdpdGggZXhwcmVzc2lvbiBcXFwiXCIuY29uY2F0KHdhdGNoZXIuZXhwcmVzc2lvbiwgXCJcXFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiaW4gYSBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9uLlwiKSwgd2F0Y2hlci52bSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8ga2VlcCBjb3BpZXMgb2YgcG9zdCBxdWV1ZXMgYmVmb3JlIHJlc2V0dGluZyBzdGF0ZVxuICAgIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVuLnNsaWNlKCk7XG4gICAgdmFyIHVwZGF0ZWRRdWV1ZSA9IHF1ZXVlLnNsaWNlKCk7XG4gICAgcmVzZXRTY2hlZHVsZXJTdGF0ZSgpO1xuICAgIC8vIGNhbGwgY29tcG9uZW50IHVwZGF0ZWQgYW5kIGFjdGl2YXRlZCBob29rc1xuICAgIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gICAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuICAgIGNsZWFudXBEZXBzKCk7XG4gICAgLy8gZGV2dG9vbCBob29rXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgICBkZXZ0b29scy5lbWl0KCdmbHVzaCcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNhbGxVcGRhdGVkSG9va3MocXVldWUpIHtcbiAgICB2YXIgaSA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHZhciB3YXRjaGVyID0gcXVldWVbaV07XG4gICAgICAgIHZhciB2bSA9IHdhdGNoZXIudm07XG4gICAgICAgIGlmICh2bSAmJiB2bS5fd2F0Y2hlciA9PT0gd2F0Y2hlciAmJiB2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGNhbGxIb29rJDEodm0sICd1cGRhdGVkJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQodm0pIHtcbiAgICAvLyBzZXR0aW5nIF9pbmFjdGl2ZSB0byBmYWxzZSBoZXJlIHNvIHRoYXQgYSByZW5kZXIgZnVuY3Rpb24gY2FuXG4gICAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICBhY3RpdmF0ZWRDaGlsZHJlbi5wdXNoKHZtKTtcbn1cbmZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyhxdWV1ZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcXVldWVbaV0uX2luYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcbiAgICB9XG59XG4vKipcbiAqIFB1c2ggYSB3YXRjaGVyIGludG8gdGhlIHdhdGNoZXIgcXVldWUuXG4gKiBKb2JzIHdpdGggZHVwbGljYXRlIElEcyB3aWxsIGJlIHNraXBwZWQgdW5sZXNzIGl0J3NcbiAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZVdhdGNoZXIod2F0Y2hlcikge1xuICAgIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gICAgaWYgKGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh3YXRjaGVyID09PSBEZXAudGFyZ2V0ICYmIHdhdGNoZXIubm9SZWN1cnNlKSB7XG4gICAgICAgI
13835HJldHVybjtcbiAgICB9XG4gICAgaGFzW2lkXSA9IHRydWU7XG4gICAgaWYgKCFmbHVzaGluZykge1xuICAgICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gaWYgYWxyZWFkeSBmbHVzaGluZywgc3BsaWNlIHRoZSB3YXRjaGVyIGJhc2VkIG9uIGl0cyBpZFxuICAgICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgICB2YXIgaSA9IHF1ZXVlLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpID4gaW5kZXgkMSAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgIH1cbiAgICAvLyBxdWV1ZSB0aGUgZmx1c2hcbiAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgICAgd2FpdGluZyA9IHRydWU7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAgICAgICAgIGZsdXNoU2NoZWR1bGVyUXVldWUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBuZXh0VGljayhmbHVzaFNjaGVkdWxlclF1ZXVlKTtcbiAgICB9XG59XG5cbnZhciBXQVRDSEVSID0gXCJ3YXRjaGVyXCI7XG52YXIgV0FUQ0hFUl9DQiA9IFwiXCIuY29uY2F0KFdBVENIRVIsIFwiIGNhbGxiYWNrXCIpO1xudmFyIFdBVENIRVJfR0VUVEVSID0gXCJcIi5jb25jYXQoV0FUQ0hFUiwgXCIgZ2V0dGVyXCIpO1xudmFyIFdBVENIRVJfQ0xFQU5VUCA9IFwiXCIuY29uY2F0KFdBVENIRVIsIFwiIGNsZWFudXBcIik7XG4vLyBTaW1wbGUgZWZmZWN0LlxuZnVuY3Rpb24gd2F0Y2hFZmZlY3QoZWZmZWN0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGRvV2F0Y2goZWZmZWN0LCBudWxsLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHdhdGNoUG9zdEVmZmVjdChlZmZlY3QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZG9XYXRjaChlZmZlY3QsIG51bGwsIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgID8gX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IGZsdXNoOiAncG9zdCcgfSkgOiB7IGZsdXNoOiAncG9zdCcgfSkpO1xufVxuZnVuY3Rpb24gd2F0Y2hTeW5jRWZmZWN0KGVmZmVjdCwgb3B0aW9ucykge1xuICAgIHJldHVybiBkb1dhdGNoKGVmZmVjdCwgbnVsbCwgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgPyBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIHsgZmx1c2g6ICdzeW5jJyB9KSA6IHsgZmx1c2g6ICdzeW5jJyB9KSk7XG59XG4vLyBpbml0aWFsIHZhbHVlIGZvciB3YXRjaGVycyB0byB0cmlnZ2VyIG9uIHVuZGVmaW5lZCBpbml0aWFsIHZhbHVlc1xudmFyIElOSVRJQUxfV0FUQ0hFUl9WQUxVRSA9IHt9O1xuLy8gaW1wbGVtZW50YXRpb25cbmZ1bmN0aW9uIHdhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybiQyKFwiYHdhdGNoKGZuLCBvcHRpb25zPylgIHNpZ25hdHVyZSBoYXMgYmVlbiBtb3ZlZCB0byBhIHNlcGFyYXRlIEFQSS4gXCIgK1xuICAgICAgICAgICAgXCJVc2UgYHdhdGNoRWZmZWN0KGZuLCBvcHRpb25zPylgIGluc3RlYWQuIGB3YXRjaGAgbm93IG9ubHkgXCIgK1xuICAgICAgICAgICAgXCJzdXBwb3J0cyBgd2F0Y2goc291cmNlLCBjYiwgb3B0aW9ucz8pIHNpZ25hdHVyZS5cIik7XG4gICAgfVxuICAgIHJldHVybiBkb1dhdGNoKHNvdXJjZSwgY2IsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gZG9XYXRjaChzb3VyY2UsIGNiLCBfYSkge1xuICAgIHZhciBfYiA9IF9hID09PSB2b2lkIDAgPyBlbXB0eU9iamVjdCA6IF9hLCBpbW1lZGlhdGUgPSBfYi5pbW1lZGlhdGUsIGRlZXAgPSBfYi5kZWVwLCBfYyA9IF9iLmZsdXNoLCBmbHVzaCA9IF9jID09PSB2b2lkIDAgPyAncHJlJyA6IF9jLCBvblRyYWNrID0gX2Iub25UcmFjaywgb25UcmlnZ2VyID0gX2Iub25UcmlnZ2VyO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjYikge1xuICAgICAgICBpZiAoaW1tZWRpYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIndhdGNoKCkgXFxcImltbWVkaWF0ZVxcXCIgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkIHdoZW4gdXNpbmcgdGhlIFwiICtcbiAgICAgICAgICAgICAgICBcIndhdGNoKHNvdXJjZSwgY2FsbGJhY2ssIG9wdGlvbnM/KSBzaWduYXR1cmUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWVwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIndhdGNoKCkgXFxcImRlZXBcXFwiIG9wdGlvbiBpcyBvbmx5IHJlc3BlY3RlZCB3aGVuIHVzaW5nIHRoZSBcIiArXG4gICAgICAgICAgICAgICAgXCJ3YXRjaChzb3VyY2UsIGNhbGxiYWNrLCBvcHRpb25zPykgc2lnbmF0dXJlLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgd2FybkludmFsaWRTb3VyY2UgPSBmdW5jdGlvbiAocykge1xuICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHdhdGNoIHNvdXJjZTogXCIuY29uY2F0KHMsIFwiLiBBIHdhdGNoIHNvdXJjZSBjYW4gb25seSBiZSBhIGdldHRlci9lZmZlY3QgXCIpICtcbiAgICAgICAgICAgIFwiZnVuY3Rpb24sIGEgcmVmLCBhIHJlYWN0aXZlIG9iamVjdCwgb3IgYW4gYXJyYXkgb2YgdGhlc2UgdHlwZXMuXCIpO1xuICAgIH07XG4gICAgdmFyIGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgIHZhciBjYWxsID0gZnVuY3Rpb24gKGZuLCB0eXBlLCBhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzID09PSB2b2lkIDApIHsgYXJncyA9IG51bGw7IH1cbiAgICAgICAgcmV0dXJuIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGZuLCBudWxsLCBhcmdzLCBpbnN0YW5jZSwgdHlwZSk7XG4gICAgfTtcbiAgICB2YXIgZ2V0dGVyO1xuICAgIHZhciBmb3JjZVRyaWdnZXIgPSBmYWxzZTtcbiAgICB2YXIgaXNNdWx0aVNvdXJjZSA9IGZhbHNlO1xuICAgIGlmIChpc1JlZihzb3VyY2UpKSB7XG4gICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZS52YWx1ZTsgfTtcbiAgICAgICAgZm9yY2VUcmlnZ2VyID0gaXNTaGFsbG93KHNvdXJjZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUmVhY3RpdmUoc291cmNlKSkge1xuICAgICAgICBnZXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzb3VyY2UuX19vYl9fLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICAgI
13835HJldHVybiBzb3VyY2U7XG4gICAgICAgIH07XG4gICAgICAgIGRlZXAgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgaXNNdWx0aVNvdXJjZSA9IHRydWU7XG4gICAgICAgIGZvcmNlVHJpZ2dlciA9IHNvdXJjZS5zb21lKGZ1bmN0aW9uIChzKSB7IHJldHVybiBpc1JlYWN0aXZlKHMpIHx8IGlzU2hhbGxvdyhzKTsgfSk7XG4gICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVmKHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzLnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc1JlYWN0aXZlKHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZShzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbChzLCBXQVRDSEVSX0dFVFRFUik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5JbnZhbGlkU291cmNlKHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHNvdXJjZSkpIHtcbiAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAvLyBnZXR0ZXIgd2l0aCBjYlxuICAgICAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FsbChzb3VyY2UsIFdBVENIRVJfR0VUVEVSKTsgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vIGNiIC0+IHNpbXBsZSBlZmZlY3RcbiAgICAgICAgICAgIGdldHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX2lzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbChzb3VyY2UsIFdBVENIRVIsIFtvbkNsZWFudXBdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdldHRlciA9IG5vb3A7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2Fyb
13835kludmFsaWRTb3VyY2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYgKGNiICYmIGRlZXApIHtcbiAgICAgICAgdmFyIGJhc2VHZXR0ZXJfMSA9IGdldHRlcjtcbiAgICAgICAgZ2V0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJhdmVyc2UoYmFzZUdldHRlcl8xKCkpOyB9O1xuICAgIH1cbiAgICB2YXIgY2xlYW51cDtcbiAgICB2YXIgb25DbGVhbnVwID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIGNsZWFudXAgPSB3YXRjaGVyLm9uU3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbGwoZm4sIFdBVENIRVJfQ0xFQU5VUCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICAvLyBpbiBTU1IgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXR1cCBhbiBhY3R1YWwgZWZmZWN0LCBhbmQgaXQgc2hvdWxkIGJlIG5vb3BcbiAgICAvLyB1bmxlc3MgaXQncyBlYWdlclxuICAgIGlmIChpc1NlcnZlclJlbmRlcmluZygpKSB7XG4gICAgICAgIC8vIHdlIHdpbGwgYWxzbyBub3QgY2FsbCB0aGUgaW52YWxpZGF0ZSBjYWxsYmFjayAoKyBydW5uZXIgaXMgbm90IHNldCB1cClcbiAgICAgICAgb25DbGVhbnVwID0gbm9vcDtcbiAgICAgICAgaWYgKCFjYikge1xuICAgICAgICAgICAgZ2V0dGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICBjYWxsKGNiLCBXQVRDSEVSX0NCLCBbXG4gICAgICAgICAgICAgICAgZ2V0dGVyKCksXG4gICAgICAgICAgICAgICAgaXNNdWx0aVNvdXJjZSA/IFtdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG9uQ2xlYW51cFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfVxuICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIoY3VycmVudEluc3RhbmNlLCBnZXR0ZXIsIG5vb3AsIHtcbiAgICAgICAgbGF6eTogdHJ1ZVxuICAgIH0pO1xuICAgIHdhdGNoZXIubm9SZWN1cnNlID0gIWNiO1xuICAgIHZhciBvbGRWYWx1ZSA9IGlzTXVsdGlTb3VyY2UgPyBbXSA6IElOSVRJQUxfV0FUQ0hFUl9WQUxVRTtcbiAgICAvLyBvdmVyd3JpdGUgZGVmYXVsdCBydW5cbiAgICB3YXRjaGVyLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF3YXRjaGVyLmFjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgLy8gd2F0Y2goc291cmNlLCBjYilcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdhdGNoZXIuZ2V0KCk7XG4gICAgICAgICAgICBpZiAoZGVlcCB8fFxuICAgICAgICAgICAgICAgIGZvcmNlVHJpZ2dlciB8fFxuICAgICAgICAgICAgICAgIChpc011bHRpU291cmNlXG4gICAgICAgICAgICAgICAgICAgID8gbmV3VmFsdWUuc29tZShmdW5jdGlvbiAodiwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc0NoYW5nZWQodiwgb2xkVmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0NoYW5nZWQobmV3VmFsdWUsIG9sZFZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIGJlZm9yZSBydW5uaW5nIGNiIGFnYWluXG4gICAgICAgICAgICAgICAgaWYgKGNsZWFudXApIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsKGNiLCBXQVRDSEVSX0NCLCBbXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIHVuZGVmaW5lZCBhcyB0aGUgb2xkIHZhbHVlIHdoZW4gaXQncyBjaGFuZ2VkIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZSA9PT0gSU5JVElBTF9XQVRDSEVSX1ZBTFVFID8gdW5kZWZpbmVkIDogb2xkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xlYW51cFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIG9sZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyB3YXRjaEVmZmVjdFxuICAgICAgICAgICAgd2F0Y2hlci5nZXQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgaWYgKGZsdXNoID09PSAnc3luYycpIHtcbiAgICAgICAgd2F0Y2hlci51cGRhdGUgPSB3YXRjaGVyLnJ1bjtcbiAgICB9XG4gICAgZWxzZSBpZiAoZmx1c2ggPT09ICdwb3N0Jykge1xuICAgICAgICB3YXRjaGVyLnBvc3QgPSB0cnVlO1xuICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHF1ZXVlV2F0Y2hlcih3YXRjaGVyKTsgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIHByZVxuICAgICAgICB3YXRjaGVyLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZSA9PT0gY3VycmVudEluc3RhbmNlICYmICFpbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gcHJlLXdhdGNoZXIgdHJpZ2dlcmVkIGJlZm9yZVxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBpbnN0YW5jZS5fcHJlV2F0Y2hlcnMgfHwgKGluc3RhbmNlLl9wcmVXYXRjaGVycyA9IFtdKTtcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmluZGV4T2Yod2F0Y2hlcikgPCAwKVxuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh3YXRjaGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlV2F0Y2hlcih3YXRjaGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2F0Y2hlci5vblRyYWNrID0gb25UcmFjaztcbiAgICAgICAgd2F0Y2hlci5vblRyaWdnZXIgPSBvblRyaWdnZXI7XG4gICAgfVxuICAgIC8vIGluaXRpYWwgcnVuXG4gICAgaWYgKGNiKSB7XG4gICAgICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgIHdhdGNoZXIucnVuKCk7XG4gICAgICAgI
13835H1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IHdhdGNoZXIuZ2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoZmx1c2ggPT09ICdwb3N0JyAmJiBpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS4kb25jZSgnaG9vazptb3VudGVkJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gd2F0Y2hlci5nZXQoKTsgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB3YXRjaGVyLmdldCgpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfTtcbn1cblxudmFyIGFjdGl2ZUVmZmVjdFNjb3BlO1xudmFyIEVmZmVjdFNjb3BlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEVmZmVjdFNjb3BlKGRldGFjaGVkKSB7XG4gICAgICAgIGlmIChkZXRhY2hlZCA9PT0gdm9pZCAwKSB7IGRldGFjaGVkID0gZmFsc2U7IH1cbiAgICAgICAgdGhpcy5kZXRhY2hlZCA9IGRldGFjaGVkO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZWZmZWN0cyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsZWFudXBzID0gW107XG4gICAgICAgIHRoaXMucGFyZW50ID0gYWN0aXZlRWZmZWN0U2NvcGU7XG4gICAgICAgIGlmICghZGV0YWNoZWQgJiYgYWN0aXZlRWZmZWN0U2NvcGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPVxuICAgICAgICAgICAgICAgIChhY3RpdmVFZmZlY3RTY29wZS5zY29wZXMgfHwgKGFjdGl2ZUVmZmVjdFNjb3BlLnNjb3BlcyA9IFtdKSkucHVzaCh0aGlzKSAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgRWZmZWN0U2NvcGUucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50RWZmZWN0U2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSBjdXJyZW50RWZmZWN0U2NvcGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybiQyKFwiY2Fubm90IHJ1biBhbiBpbmFjdGl2ZSBlZmZlY3Qgc2NvcGUuXCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBub24tZGV0YWNoZWQgc2NvcGVzXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgRWZmZWN0U2NvcGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSA9IHRoaXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBub24tZGV0YWNoZWQgc2NvcGVzXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgRWZmZWN0U2NvcGUucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWN0aXZlRWZmZWN0U2NvcGUgPSB0aGlzLnBhcmVudDtcbiAgICB9O1xuICAgIEVmZmVjdFNjb3BlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKGZyb21QYXJlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB2Y
13835XIgaSA9IHZvaWQgMCwgbCA9IHZvaWQgMDtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB0aGlzLmVmZmVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RzW2ldLnRlYXJkb3duKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5jbGVhbnVwcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXBzW2ldKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NvcGVzW2ldLnN0b3AodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbmVzdGVkIHNjb3BlLCBkZXJlZmVyZW5jZSBmcm9tIHBhcmVudCB0byBhdm9pZCBtZW1vcnkgbGVha3NcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXRhY2hlZCAmJiB0aGlzLnBhcmVudCAmJiAhZnJvbVBhcmVudCkge1xuICAgICAgICAgICAgICAgIC8vIG9wdGltaXplZCBPKDEpIHJlbW92YWxcbiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAmJiBsYXN0ICE9PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XSA9IGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QuaW5kZXggPSB0aGlzLmluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEVmZmVjdFNjb3BlO1xufSgpKTtcbmZ1bmN0aW9uIGVmZmVjdFNjb3BlKGRldGFjaGVkKSB7XG4gICAgcmV0dXJuIG5ldyBFZmZlY3RTY29wZShkZXRhY2hlZCk7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiByZWNvcmRFZmZlY3RTY29wZShlZmZlY3QsIHNjb3BlKSB7XG4gICAgaWYgKHNjb3BlID09PSB2b2lkIDApIHsgc2NvcGUgPSBhY3RpdmVFZmZlY3RTY29wZTsgfVxuICAgIGlmIChzY29wZSAmJiBzY29wZS5hY3RpdmUpIHtcbiAgICAgICAgc2NvcGUuZWZmZWN0cy5wdXNoKGVmZmVjdCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuICAgIHJldHVybiBhY3RpdmVFZmZlY3RTY29wZTtcbn1cbmZ1bmN0aW9uIG9uU2NvcGVEaXNwb3NlKGZuKSB7XG4gICAgaWYgKGFjdGl2ZUVmZmVjdFNjb3BlKSB7XG4gICAgICAgIGFjdGl2ZUVmZmVjdFNjb3BlLmNsZWFudXBzLnB1c2goZm4pO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4kMihcIm9uU2NvcGVEaXNwb3NlKCkgaXMgY2FsbGVkIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIGVmZmVjdCBzY29wZVwiICtcbiAgICAgICAgICAgIFwiIHRvIGJlIGFzc29jaWF0ZWQgd2l0aC5cIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm92aWRlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybiQyKFwicHJvdmlkZSgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkuXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBUUyBkb2Vzbid0IGFsbG93IHN5bWJvbCBhcyBpbmRleCB0eXBlXG4gICAgICAgIHJlc29sdmVQcm92aWRlZChjdXJyZW50SW5zdGFuY2UpW2tleV0gPSB2YWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXNvbHZlUHJvdmlkZWQodm0pIHtcbiAgICAvLyBieSBkZWZhdWx0IGFuIGluc3RhbmNlIGluaGVyaXRzIGl0cyBwYXJlbnQncyBwcm92aWRlcyBvYmplY3RcbiAgICAvLyBidXQgd2hlbiBpdCBuZWVkcyB0byBwcm92aWRlIHZhbHVlcyBvZiBpdHMgb3duLCBpdCBjcmVhdGVzIGl0c1xuICAgIC8vIG93biBwcm92aWRlcyBvYmplY3QgdXNpbmcgcGFyZW50IHByb3ZpZGVzIG9iamVjdCBhcyBwcm90b3R5cGUuXG4gICAgLy8gdGhpcyB3YXkgaW4gYGluamVjdGAgd2UgY2FuIHNpbXBseSBsb29rIHVwIGluamVjdGlvbnMgZnJvbSBkaXJlY3RcbiAgICAvLyBwYXJlbnQgYW5kIGxldCB0aGUgcHJvdG90eXBlIGNoYWluIGRvIHRoZSB3b3JrLlxuICAgIHZhciBleGlzdGluZyA9IHZtLl9wcm92aWRlZDtcbiAgICB2YXIgcGFyZW50UHJvdmlkZXMgPSB2bS4kcGFyZW50ICYmIHZtLiRwYXJlbnQuX3Byb3ZpZGVkO1xuICAgIGlmIChwYXJlbnRQcm92aWRlcyA9PT0gZXhpc3RpbmcpIHtcbiAgICAgICAgcmV0dXJuICh2bS5fcHJvdmlkZWQgPSBPYmplY3QuY3JlYXRlKHBhcmVudFByb3ZpZGVzKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxufVxuZnVuY3Rpb24gaW5qZWN0KGtleSwgZGVmYXVsdFZhbHVlLCB0cmVhdERlZmF1bHRBc0ZhY3RvcnkpIHtcbiAgICBpZiAodHJlYXREZWZhdWx0QXNGYWN0b3J5ID09PSB2b2lkIDApIHsgdHJlYXREZWZhdWx0QXNGYWN0b3J5ID0gZmFsc2U7IH1cbiAgICAvLyBmYWxsYmFjayB0byBgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlYCBzbyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBpblxuICAgIC8vIGEgZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgICB2YXIgaW5zdGFuY2UgPSBjdXJyZW50SW5zdGFuY2U7XG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgIC8vICMyNDAwXG4gICAgICAgIC8vIHRvIHN1cHBvcnQgYGFwcC51c2VgIHBsdWdpbnMsXG4gICAgICAgIC8vIGZhbGxiYWNrIHRvIGFwcENvbnRleHQncyBgcHJvdmlkZXNgIGlmIHRoZSBpbnN0YW5jZSBpcyBhdCByb290XG4gICAgICAgIHZhciBwcm92aWRlcyA9IGluc3RhbmNlLiRwYXJlbnQgJiYgaW5zdGFuY2UuJHBhcmVudC5fcHJvdmlkZWQ7XG4gICAgICAgIGlmIChwcm92aWRlcyAmJiBrZXkgaW4gcHJvdmlkZXMpIHtcbiAgICAgICAgICAgIC8vIFRTIGRvZXNuJ3QgYWxsb3cgc3ltYm9sIGFzIGluZGV4IHR5cGVcbiAgICAgICAgICAgI
13835HJldHVybiBwcm92aWRlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJlYXREZWZhdWx0QXNGYWN0b3J5ICYmIGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlLmNhbGwoaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgd2FybiQyKFwiaW5qZWN0aW9uIFxcXCJcIi5jb25jYXQoU3RyaW5nKGtleSksIFwiXFxcIiBub3QgZm91bmQuXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4kMihcImluamVjdCgpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHNldHVwKCkgb3IgZnVuY3Rpb25hbCBjb21wb25lbnRzLlwiKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIHRoaXMgZnVuY3Rpb24gbmVlZHMgbWFudWFsIHB1YmxpYyB0eXBlIGRlY2xhcmF0aW9uIGJlY2F1c2UgaXQgcmVsaWVzXG4gKiBvbiBwcmV2aW91c2x5IG1hbnVhbGx5IGF1dGhvcmVkIHR5cGVzIGZyb20gVnVlIDJcbiAqL1xuZnVuY3Rpb24gaCh0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICBpZiAoIWN1cnJlbnRJbnN0YW5jZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICB3YXJuJDIoXCJnbG9iYWxseSBpbXBvcnRlZCBoKCkgY2FuIG9ubHkgYmUgaW52b2tlZCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBcIiArXG4gICAgICAgICAgICAgICAgXCJjb21wb25lbnQgaW5zdGFuY2UsIGUuZy4gc3luY2hyb25vdXNseSBpbiBhIGNvbXBvbmVudCdzIHJlbmRlciBvciBzZXR1cCBmdW5jdGlvbi5cIik7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50JDEoY3VycmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIDIsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKSB7XG4gICAgLy8gRGVhY3RpdmF0ZSBkZXBzIHRyYWNraW5nIHdoaWxlIHByb2Nlc3NpbmcgZXJyb3IgaGFuZGxlciB0byBhdm9pZCBwb3NzaWJsZSBpbmZpbml0ZSByZW5kZXJpbmcuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVleC9pc3N1ZXMvMTUwNVxuICAgIHB1c2hUYXJnZXQoKTtcbiAgICB0cnkge1xuICAgICAgICBpZiAodm0pIHtcbiAgICAgICAgICAgIHZhciBjdXIgPSB2bTtcbiAgICAgICAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvb2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBob29rc1tpXS5jYWxsKGN1ciwgZXJyLCB2bSwgaW5mbykgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgfVxufVxuZnVuY3Rpb24gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlciwgY29udGV4dCwgYXJncywgdm0sIGluZm8pIHtcbiAgICB2YXIgcmVzO1xuICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xuICAgICAgICBpZiAocmVzICYmICFyZXMuX2lzVnVlICYmIGlzUHJvbWlzZShyZXMpICYmICFyZXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgICAgICAgcmVzLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKSB7XG4gICAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuZXJyb3JIYW5kbGVyLmNhbGwobnVsbCwgZXJyLCB2bSwgaW5mbyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgICAgICAgIC8vIGRvIG5vdCBsb2cgaXQgdHdpY2VcbiAgICAgICAgICAgIGlmIChlICE9PSBlcnIpIHtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihlLCBudWxsLCAnY29uZmlnLmVycm9ySGFuZGxlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGxvZ0Vycm9yKGVyciwgdm0sIGluZm8pO1xufVxuZnVuY3Rpb24gbG9nRXJyb3IoZXJyLCB2bSwgaW5mbykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgI
13835Hdhcm4kMihcIkVycm9yIGluIFwiLmNvbmNhdChpbmZvLCBcIjogXFxcIlwiKS5jb25jYXQoZXJyLnRvU3RyaW5nKCksIFwiXFxcIlwiKSwgdm0pO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpbkJyb3dzZXIgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59XG5cbi8qIGdsb2JhbHMgTXV0YXRpb25PYnNlcnZlciAqL1xudmFyIGlzVXNpbmdNaWNyb1Rhc2sgPSBmYWxzZTtcbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5mdW5jdGlvbiBmbHVzaENhbGxiYWNrcygpIHtcbiAgICBwZW5kaW5nID0gZmFsc2U7XG4gICAgdmFyIGNvcGllcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb3BpZXNbaV0oKTtcbiAgICB9XG59XG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIG1pY3JvdGFza3MuXG4vLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcbi8vIChlLmcuICM2ODEzLCBvdXQtaW4gdHJhbnNpdGlvbnMpLlxuLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cbi8vIFNvIHdlIG5vdyB1c2UgbWljcm90YXNrcyBldmVyeXdoZXJlLCBhZ2Fpbi5cbi8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTAsIHdoaWNoIGhhdmUgd29ya2Fyb3VuZHMpXG4vLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbnZhciB0aW1lckZ1bmM7XG4vLyBUaGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuLy8gdmlhIGVpdGhlciBuYXRpdmUgUHJvbWlzZS50aGVuIG9yIE11dGF0aW9uT2JzZXJ2ZXIuXG4vLyBNdXRhdGlvbk9ic2VydmVyIGhhcyB3aWRlciBzdXBwb3J0LCBob3dldmVyIGl0IGlzIHNlcmlvdXNseSBidWdnZWQgaW5cbi8vIFVJV2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxlcnMuIEl0XG4vLyBjb21wbGV0ZWx5IHN0b3BzIHdvcmtpbmcgYWZ0ZXIgdHJpZ2dlcmluZyBhIGZldyB0aW1lcy4uLiBzbywgaWYgbmF0aXZlXG4vLyBQcm9taXNlIGlzIGF2YWlsYWJsZSwgd2Ugd2lsbCB1c2UgaXQ6XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG5pZiAodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFByb21pc2UpKSB7XG4gICAgdmFyIHBfMSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcF8xLnRoZW4oZmx1c2hDYWxsYmFja3MpO1xuICAgICAgICAvLyBJbiBwcm9ibGVtYXRpYyBVSVdlYlZpZXdzLCBQcm9taXNlLnRoZW4gZG9lc24ndCBjb21wbGV0ZWx5IGJyZWFrLCBidXRcbiAgICAgICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2VyXG4gICAgICAgIC8vIG5lZWRzIHRvIGRvIHNvbWUgb3RoZXIgd29yaywgZS5nLiBoYW5kbGUgYSB0aW1lci4gVGhlcmVmb3JlIHdlIGNhblxuICAgICAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICAgICAgaWYgKGlzSU9TKVxuICAgICAgICAgICAgc2V0VGltZW91dChub29wKTtcbiAgICB9O1xuICAgIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufVxuZWxzZSBpZiAoIWlzSUUgJiZcbiAgICB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAoaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcbiAgICAgICAgLy8gUGhhbnRvbUpTIGFuZCBpT1MgNy54XG4gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXScpKSB7XG4gICAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcbiAgICAvLyBlLmcuIFBoYW50b21KUywgaU9TNywgQW5kcm9pZCA0LjRcbiAgICAvLyAoIzY0NjYgTXV0YXRpb25PYnNlcnZlciBpcyB1bnJlbGlhYmxlIGluIElFMTEpXG4gICAgdmFyIGNvdW50ZXJfMSA9IDE7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZmx1c2hDYWxsYmFja3MpO1xuICAgIHZhciB0ZXh0Tm9kZV8xID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNvdW50ZXJfMSkpO1xuICAgIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGVfMSwge1xuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgfSk7XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb3VudGVyXzEgPSAoY291bnRlcl8xICsgMSkgJSAyO1xuICAgICAgICB0ZXh0Tm9kZV8xLmRhdGEgPSBTdHJpbmcoY291bnRlcl8xKTtcbiAgICB9O1xuICAgIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufVxuZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoc2V0SW1tZWRpYXRlKSkge1xuICAgIC8vIEZhbGxiYWNrIHRvIHNldEltbWVkaWF0ZS5cbiAgICAvLyBUZWNobmljYWxseSBpdCBsZXZlcmFnZXMgdGhlIChtYWNybykgdGFzayBxdW
13835V1ZSxcbiAgICAvLyBidXQgaXQgaXMgc3RpbGwgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gc2V0VGltZW91dC5cbiAgICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldEltbWVkaWF0ZShmbHVzaENhbGxiYWNrcyk7XG4gICAgfTtcbn1cbmVsc2Uge1xuICAgIC8vIEZhbGxiYWNrIHRvIHNldFRpbWVvdXQuXG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZsdXNoQ2FsbGJhY2tzLCAwKTtcbiAgICB9O1xufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gbmV4dFRpY2soY2IsIGN0eCkge1xuICAgIHZhciBfcmVzb2x2ZTtcbiAgICBjYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjYi5jYWxsKGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIGN0eCwgJ25leHRUaWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgICAgICAgIF9yZXNvbHZlKGN0eCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgICAgcGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRpbWVyRnVuYygpO1xuICAgIH1cbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBpZiAoIWNiICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1c2VDc3NNb2R1bGUobmFtZSkge1xuICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9ICckc3R5bGUnOyB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICB7XG4gICAgICAgIGlmICghY3VycmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4kMihcInVzZUNzc01vZHVsZSBtdXN0IGJlIGNhbGxlZCBpbnNpZGUgc2V0dXAoKVwiKTtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eU9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgbW9kID0gY3VycmVudEluc3RhbmNlW25hbWVdO1xuICAgICAgICBpZiAoIW1vZCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMihcIkN1cnJlbnQgaW5zdGFuY2UgZG9lcyBub3QgaGF2ZSBDU1MgbW9kdWxlIG5hbWVkIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gZW1wdHlPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZDtcbiAgICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIFNGQydzIENTUyB2YXJpYWJsZSBpbmplY3Rpb24gZmVhdHVyZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHVzZUNzc1ZhcnMoZ2V0dGVyKSB7XG4gICAgaWYgKCFpbkJyb3dzZXIgJiYgIWZhbHNlKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIGluc3RhbmNlID0gY3VycmVudEluc3RhbmNlO1xuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKFwidXNlQ3NzVmFycyBpcyBjYWxsZWQgd2l0aG91dCBjdXJyZW50IGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHdhdGNoUG9zdEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbCA9IGluc3RhbmNlLiRlbDtcbiAgICAgICAgdmFyIHZhcnMgPSBnZXR0ZXIoaW5zdGFuY2UsIGluc3RhbmNlLl9zZXR1cFByb3h5KTtcbiAgICAgICAgaWYgKGVsICYmIGVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICB2Y
13835XIgc3R5bGUgPSBlbC5zdHlsZTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB2YXJzKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoXCItLVwiLmNvbmNhdChrZXkpLCB2YXJzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogdjMtY29tcGF0aWJsZSBhc3luYyBjb21wb25lbnQgQVBJLlxuICogQGludGVybmFsIHRoZSB0eXBlIGlzIG1hbnVhbGx5IGRlY2xhcmVkIGluIDxyb290Pi90eXBlcy92My1kZWZpbmUtYXN5bmMtY29tcG9uZW50LmQudHNcbiAqIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGV4aXN0aW5nIG1hbnVhbCB0eXBlc1xuICovXG5mdW5jdGlvbiBkZWZpbmVBc3luY0NvbXBvbmVudChzb3VyY2UpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihzb3VyY2UpKSB7XG4gICAgICAgIHNvdXJjZSA9IHsgbG9hZGVyOiBzb3VyY2UgfTtcbiAgICB9XG4gICAgdmFyIGxvYWRlciA9IHNvdXJjZS5sb2FkZXIsIGxvYWRpbmdDb21wb25lbnQgPSBzb3VyY2UubG9hZGluZ0NvbXBvbmVudCwgZXJyb3JDb21wb25lbnQgPSBzb3VyY2UuZXJyb3JDb21wb25lbnQsIF9hID0gc291cmNlLmRlbGF5LCBkZWxheSA9IF9hID09PSB2b2lkIDAgPyAyMDAgOiBfYSwgdGltZW91dCA9IHNvdXJjZS50aW1lb3V0LCAvLyB1bmRlZmluZWQgPSBuZXZlciB0aW1lcyBvdXRcbiAgICBfYiA9IHNvdXJjZS5zdXNwZW5zaWJsZSwgLy8gdW5kZWZpbmVkID0gbmV2ZXIgdGltZXMgb3V0XG4gICAgc3VzcGVuc2libGUgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYiwgLy8gaW4gVnVlIDMgZGVmYXVsdCBpcyB0cnVlXG4gICAgdXNlck9uRXJyb3IgPSBzb3VyY2Uub25FcnJvcjtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdXNwZW5zaWJsZSkge1xuICAgICAgICB3YXJuJDIoXCJUaGUgc3VzcGVuc2libGJlIG9wdGlvbiBmb3IgYXN5bmMgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkIGluIFZ1ZTIuIEl0IGlzIGlnbm9yZWQuXCIpO1xuICAgIH1cbiAgICB2YXIgcGVuZGluZ1JlcXVlc3QgPSBudWxsO1xuICAgIHZhciByZXRyaWVzID0gMDtcbiAgICB2YXIgcmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHJpZXMrKztcbiAgICAgICAgcGVuZGluZ1JlcXVlc3QgPSBudWxsO1xuICAgICAgICByZXR1cm4gbG9hZCgpO1xuICAgIH07XG4gICAgdmFyIGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aGlzUmVxdWVzdDtcbiAgICAgICAgcmV0dXJuIChwZW5kaW5nUmVxdWVzdCB8fFxuICAgICAgICAgICAgKHRoaXNSZXF1ZXN0ID0gcGVuZGluZ1JlcXVlc3QgPVxuICAgICAgICAgICAgICAgIGxvYWRlcigpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyUmV0cnkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHJldHJ5KCkpOyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyRmFpbCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJPbkVycm9yKGVyciwgdXNlclJldHJ5LCB1c2VyRmFpbCwgcmV0cmllcyArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY29tcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpc1JlcXVlc3QgIT09IHBlbmRpbmdSZXF1ZXN0ICYmIHBlbmRpbmdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVuZGluZ1JlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkFzeW5jIGNvbXBvbmVudCBsb2FkZXIgcmVzb2x2ZWQgdG8gdW5kZWZpbmVkLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJJZiB5b3UgYXJlIHVzaW5nIHJldHJ5KCksIG1ha2Ugc3VyZSB0byByZXR1cm4gaXRzIHJldHVybiB2YWx1ZS5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJvcCBtb2R1bGUgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbXAuX19lc01vZHVsZSB8fCBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb21wICYmICFpc09iamVjdChjb21wKSAmJiAhaXNGdW5jdGlvbihjb21wKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhc3luYyBjb21wb25lbnQgbG9hZCByZXN1bHQ6IFwiLmNvbmNhdChjb21wKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXA7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21wb25lbnQgPSBsb2FkKCk7XG4gICAgICAgI
13835HJldHVybiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICAgICAgICAgIGRlbGF5OiBkZWxheSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JDb21wb25lbnQsXG4gICAgICAgICAgICBsb2FkaW5nOiBsb2FkaW5nQ29tcG9uZW50XG4gICAgICAgIH07XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlmZUN5Y2xlKGhvb2tOYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2U7IH1cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJcIi5jb25jYXQoZm9ybWF0TmFtZShob29rTmFtZSksIFwiIGlzIGNhbGxlZCB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYmUgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgXCJhc3NvY2lhdGVkIHdpdGguIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJMaWZlY3ljbGUgaW5qZWN0aW9uIEFQSXMgY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIHNldHVwKCkuXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmplY3RIb29rKHRhcmdldCwgaG9va05hbWUsIGZuKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gZm9ybWF0TmFtZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09ICdiZWZvcmVEZXN0cm95Jykge1xuICAgICAgICBuYW1lID0gJ2JlZm9yZVVubW91bnQnO1xuICAgIH1cbiAgICBlbHNlIGlmIChuYW1lID09PSAnZGVzdHJveWVkJykge1xuICAgICAgICBuYW1lID0gJ3VubW91bnRlZCc7XG4gICAgfVxuICAgIHJldHVybiBcIm9uXCIuY29uY2F0KG5hbWVbMF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSkpO1xufVxuZnVuY3Rpb24gaW5qZWN0SG9vayhpbnN0YW5jZSwgaG9va05hbWUsIGZuKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBpbnN0YW5jZS4kb3B0aW9ucztcbiAgICBvcHRpb25zW2hvb2tOYW1lXSA9IG1lcmdlTGlmZWN5Y2xlSG9vayhvcHRpb25zW2hvb2tOYW1lXSwgZm4pO1xufVxudmFyIG9uQmVmb3JlTW91bnQgPSBjcmVhdGVMaWZlQ3ljbGUoJ2JlZm9yZU1vdW50Jyk7XG52YXIgb25Nb3VudGVkID0gY3JlYXRlTGlmZUN5Y2xlKCdtb3VudGVkJyk7XG52YXIgb25CZWZvcmVVcGRhdGUgPSBjcmVhdGVMaWZlQ3ljbGUoJ2JlZm9yZVVwZGF0ZScpO1xudmFyIG9uVXBkYXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgndXBkYXRlZCcpO1xudmFyIG9uQmVmb3JlVW5tb3VudCA9IGNyZWF0ZUxpZmVDeWNsZSgnYmVmb3JlRGVzdHJveScpO1xudmFyIG9uVW5tb3VudGVkID0gY3JlYXRlTGlmZUN5Y2xlKCdkZXN0cm95ZWQnKTtcbnZhciBvbkFjdGl2YXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnYWN0aXZhdGVkJyk7XG52YXIgb25EZWFjdGl2YXRlZCA9IGNyZWF0ZUxpZmVDeWNsZSgnZGVhY3RpdmF0ZWQnKTtcbnZhciBvblNlcnZlclByZWZldGNoID0gY3JlYXRlTGlmZUN5Y2xlKCdzZXJ2ZXJQcmVmZXRjaCcpO1xudmFyIG9uUmVuZGVyVHJhY2tlZCA9IGNyZWF0ZUxpZmVDeWNsZSgncmVuZGVyVHJhY2tlZCcpO1xudmFyIG9uUmVuZGVyVHJpZ2dlcmVkID0gY3JlYXRlTGlmZUN5Y2xlKCdyZW5kZXJUcmlnZ2VyZWQnKTtcbnZhciBpbmplY3RFcnJvckNhcHR1cmVkSG9vayA9IGNyZWF0ZUxpZmVDeWNsZSgnZXJyb3JDYXB0dXJlZCcpO1xuZnVuY3Rpb24gb25FcnJvckNhcHR1cmVkKGhvb2ssIHRhcmdldCkge1xuICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSBjdXJyZW50SW5zdGFuY2U7IH1cbiAgICBpbmplY3RFcnJvckNhcHR1cmVkSG9vayhob29rLCB0YXJnZXQpO1xufVxuXG4vKipcbiAqIE5vdGU6IGFsc28gdXBkYXRlIGRpc3QvdnVlLnJ1bnRpbWUubWpzIHdoZW4gYWRkaW5nIG5ldyBleHBvcnRzIHRvIHRoaXMgZmlsZS5cbiAqL1xudmFyIHZlcnNpb24gPSAnMi43LjE0Jztcbi8qKlxuICogQGludGVybmFsIHR5cGUgaXMgbWFudWFsbHkgZGVjbGFyZWQgaW4gPHJvb3Q+L3R5cGVzL3YzLWRlZmluZS1jb21wb25lbnQuZC50c1xuICovXG5mdW5jdGlvbiBkZWZpbmVDb21wb25lbnQob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zO1xufVxuXG52YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmF2ZXJzZSBhbiBvYmplY3QgdG8gZXZva2UgYWxsIGNvbnZlcnRlZFxuICogZ2V0dGVycywgc28gdGhhdCBldmVyeSBuZXN0ZWQgcHJvcGVydHkgaW5zaWRlIHRoZSBvYmplY3RcbiAqIGlzIGNvbGxlY3RlZCBhcyBhIFwiZGVlcFwiIGRlcGVuZGVuY3kuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlKHZhbCkge1xuICAgIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbiAgICBzZWVuT2JqZWN0cy5jbGVhcigpO1xuICAgIHJldHVybiB2YWw7XG59XG5mdW5jdGlvbiBfdHJhdmVyc2UodmFsLCBzZWVuKSB7XG4gICAgdmFyIGksIGtleXM7XG4gICAgdmFyIGlzQSA9IGlzQXJyYXkodmFsKTtcbiAgICBpZiAoKCFpc0EgJiYgIWlzT2JqZWN0KHZhbCkpIHx8XG4gICAgICAgIHZhbC5fX3Zfc2tpcCAvKiBSZWFjdGl2ZUZsYWdzLlNLSVAgKi8gfHxcbiAgICAgICAgT2JqZWN0LmlzRnJvemVuKHZhbCkgfHxcbiAgICAgICAgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsLl9fb2JfXykge1xuICAgICAgICB2Y
13835XIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICAgICAgaWYgKHNlZW4uaGFzKGRlcElkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKGRlcElkKTtcbiAgICB9XG4gICAgaWYgKGlzQSkge1xuICAgICAgICBpID0gdmFsLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSlcbiAgICAgICAgICAgIF90cmF2ZXJzZSh2YWxbaV0sIHNlZW4pO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1JlZih2YWwpKSB7XG4gICAgICAgIF90cmF2ZXJzZSh2YWwudmFsdWUsIHNlZW4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICAgIGkgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSlcbiAgICAgICAgICAgIF90cmF2ZXJzZSh2YWxba2V5c1tpXV0sIHNlZW4pO1xuICAgIH1cbn1cblxudmFyIHVpZCQxID0gMDtcbi8qKlxuICogQSB3YXRjaGVyIHBhcnNlcyBhbiBleHByZXNzaW9uLCBjb2xsZWN0cyBkZXBlbmRlbmNpZXMsXG4gKiBhbmQgZmlyZXMgY2FsbGJhY2sgd2hlbiB0aGUgZXhwcmVzc2lvbiB2YWx1ZSBjaGFuZ2VzLlxuICogVGhpcyBpcyB1c2VkIGZvciBib3RoIHRoZSAkd2F0Y2goKSBhcGkgYW5kIGRpcmVjdGl2ZXMuXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFdhdGNoZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gV2F0Y2hlcih2bSwgZXhwT3JGbiwgY2IsIG9wdGlvbnMsIGlzUmVuZGVyV2F0Y2hlcikge1xuICAgICAgICByZWNvcmRFZmZlY3RTY29wZSh0aGlzLCBcbiAgICAgICAgLy8gaWYgdGhlIGFjdGl2ZSBlZmZlY3Qgc2NvcGUgaXMgbWFudWFsbHkgY3JlYXRlZCAobm90IGEgY29tcG9uZW50IHNjb3BlKSxcbiAgICAgICAgLy8gcHJpb3JpdGl6ZSBpdFxuICAgICAgICBhY3RpdmVFZmZlY3RTY29wZSAmJiAhYWN0aXZlRWZmZWN0U2NvcGUuX3ZtXG4gICAgICAgICAgICA/IGFjdGl2ZUVmZmVjdFNjb3BlXG4gICAgICAgICAgICA6IHZtXG4gICAgICAgICAgICAgICAgPyB2bS5fc2NvcGVcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgICAgIGlmICgodGhpcy52bSA9IHZtKSAmJiBpc1JlbmRlcldhdGNoZXIpIHtcbiAgICAgICAgICAgIHZtLl93YXRjaGVyID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICAvLyBvcHRpb25zXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmRlZXAgPSAhIW9wdGlvbnMuZGVlc
13835DtcbiAgICAgICAgICAgIHRoaXMudXNlciA9ICEhb3B0aW9ucy51c2VyO1xuICAgICAgICAgICAgdGhpcy5sYXp5ID0gISFvcHRpb25zLmxhenk7XG4gICAgICAgICAgICB0aGlzLnN5bmMgPSAhIW9wdGlvbnMuc3luYztcbiAgICAgICAgICAgIHRoaXMuYmVmb3JlID0gb3B0aW9ucy5iZWZvcmU7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMub25UcmFjayA9IG9wdGlvbnMub25UcmFjaztcbiAgICAgICAgICAgICAgICB0aGlzLm9uVHJpZ2dlciA9IG9wdGlvbnMub25UcmlnZ2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWVwID0gdGhpcy51c2VyID0gdGhpcy5sYXp5ID0gdGhpcy5zeW5jID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYiA9IGNiO1xuICAgICAgICB0aGlzLmlkID0gKyt1aWQkMTsgLy8gdWlkIGZvciBiYXRjaGluZ1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucG9zdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICAgICAgICB0aGlzLmRlcHMgPSBbXTtcbiAgICAgICAgdGhpcy5uZXdEZXBzID0gW107XG4gICAgICAgIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgICAgICAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gZXhwT3JGbi50b1N0cmluZygpIDogJyc7XG4gICAgICAgIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICAgICAgICBpZiAoaXNGdW5jdGlvbihleHBPckZuKSkge1xuICAgICAgICAgICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXR0ZXIgPSBwYXJzZVBhdGgoZXhwT3JGbik7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ2V0dGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXR0ZXIgPSBub29wO1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgd2FybiQyKFwiRmFpbGVkIHdhdGNoaW5nIHBhdGg6IFxcXCJcIi5jb25jYXQoZXhwT3JGbiwgXCJcXFwiIFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnV2F0Y2hlciBvbmx5IGFjY2VwdHMgc2ltcGxlIGRvdC1kZWxpbWl0ZWQgcGF0aHMuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvciBmdWxsIGNvbnRyb2wsIHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQuJywgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmxhenkgPyB1bmRlZmluZWQgOiB0aGlzLmdldCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZSB0aGUgZ2V0dGVyLCBhbmQgcmUtY29sbGVjdCBkZXBlbmRlbmNpZXMuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwdXNoVGFyZ2V0KHRoaXMpO1xuICAgICAgICB2Y
13835XIgdmFsdWU7XG4gICAgICAgIHZhciB2bSA9IHRoaXMudm07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0dGVyLmNhbGwodm0sIHZtKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIuY29uY2F0KHRoaXMuZXhwcmVzc2lvbiwgXCJcXFwiXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAvLyBcInRvdWNoXCIgZXZlcnkgcHJvcGVydHkgc28gdGhleSBhcmUgYWxsIHRyYWNrZWQgYXNcbiAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBmb3IgZGVlcCB3YXRjaGluZ1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVlcCkge1xuICAgICAgICAgICAgICAgIHRyYXZlcnNlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvcFRhcmdldCgpO1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRGVwcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEFkZCBhIGRlcGVuZGVuY3kgdG8gdGhpcyBkaXJlY3RpdmUuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuYWRkRGVwID0gZnVuY3Rpb24gKGRlcCkge1xuICAgICAgICB2Y
13835XIgaWQgPSBkZXAuaWQ7XG4gICAgICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICAgICAgICAgIHRoaXMubmV3RGVwcy5wdXNoKGRlcCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVwSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXAuYWRkU3ViKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDbGVhbiB1cCBmb3IgZGVwZW5kZW5jeSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIFdhdGNoZXIucHJvdG90eXBlLmNsZWFudXBEZXBzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHZhciBkZXAgPSB0aGlzLmRlcHNbaV07XG4gICAgICAgICAgICBpZiAoIXRoaXMubmV3RGVwSWRzLmhhcyhkZXAuaWQpKSB7XG4gICAgICAgICAgICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgdG1wID0gdGhpcy5kZXBJZHM7XG4gICAgICAgIHRoaXMuZGVwSWRzID0gdGhpcy5uZXdEZXBJZHM7XG4gICAgICAgIHRoaXMubmV3RGVwSWRzID0gdG1wO1xuICAgICAgICB0aGlzLm5ld0RlcElkcy5jbGVhcigpO1xuICAgICAgICB0bXAgPSB0aGlzLmRlcHM7XG4gICAgICAgIHRoaXMuZGVwcyA9IHRoaXMubmV3RGVwcztcbiAgICAgICAgdGhpcy5uZXdEZXBzID0gdG1wO1xuICAgICAgICB0aGlzLm5ld0RlcHMubGVuZ3RoID0gMDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICAgICAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnN5bmMpIHtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBxdWV1ZVdhdGNoZXIodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICAgICAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUgfHxcbiAgICAgICAgICAgICAgICAvLyBEZWVwIHdhdGNoZXJzIGFuZCB3YXRjaGVycyBvbiBPYmplY3QvQXJyYXlzIHNob3VsZCBmaXJlIGV2ZW5cbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAgICAgICAgICAgLy8gaGF2ZSBtdXRhdGVkLlxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuZGVlcCkge1xuICAgICAgICAgICAgICAgIC8vIHNldCBuZXcgdmFsdWVcbiAgICAgICAgICAgICAgICB2Y
13835XIgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmZvID0gXCJjYWxsYmFjayBmb3Igd2F0Y2hlciBcXFwiXCIuY29uY2F0KHRoaXMuZXhwcmVzc2lvbiwgXCJcXFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyh0aGlzLmNiLCB0aGlzLnZtLCBbdmFsdWUsIG9sZFZhbHVlXSwgdGhpcy52bSwgaW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAgICAgKiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZm9yIGxhenkgd2F0Y2hlcnMuXG4gICAgICovXG4gICAgV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBEZXBlbmQgb24gYWxsIGRlcHMgY29sbGVjdGVkIGJ5IHRoaXMgd2F0Y2hlci5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgdGhpcy5kZXBzW2ldLmRlcGVuZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgc2VsZiBmcm9tIGFsbCBkZXBlbmRlbmNpZXMnIHN1YnNjcmliZXIgbGlzdC5cbiAgICAgKi9cbiAgICBXYXRjaGVyLnByb3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMudm0gJiYgIXRoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJlbW92ZSQyKHRoaXMudm0uX3Njb3BlLmVmZmVjdHMsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVwc1tpXS5yZW1vdmVTdWIodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMub25TdG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFdhdGNoZXI7XG59KCkpO1xuXG52YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogbm9vcCxcbiAgICBzZXQ6IG5vb3Bcbn07XG5mdW5jdGlvbiBwcm94eSh0YXJnZXQsIHNvdXJjZUtleSwga2V5KSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IGZ1bmN0aW9uIHByb3h5R2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tzb3VyY2VLZXldW2tleV07XG4gICAgfTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gcHJveHlTZXR0ZXIodmFsKSB7XG4gICAgICAgIHRoaXNbc291cmNlS2V5XVtrZXldID0gdmFsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuZnVuY3Rpb24gaW5pdFN0YXRlKHZtKSB7XG4gICAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucztcbiAgICBpZiAob3B0cy5wcm9wcylcbiAgICAgICAgaW5pdFByb3BzJDEodm0sIG9wdHMucHJvcHMpO1xuICAgIC8vIENvbXBvc2l0aW9uIEFQSVxuICAgIGluaXRTZXR1cCh2bSk7XG4gICAgaWYgKG9wdHMubWV0aG9kcylcbiAgICAgICAgaW5pdE1ldGhvZHModm0sIG9wdHMubWV0aG9kcyk7XG4gICAgaWYgKG9wdHMuZGF0YSkge1xuICAgICAgICBpbml0RGF0YSh2bSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2Y
13835XIgb2IgPSBvYnNlcnZlKCh2bS5fZGF0YSA9IHt9KSk7XG4gICAgICAgIG9iICYmIG9iLnZtQ291bnQrKztcbiAgICB9XG4gICAgaWYgKG9wdHMuY29tcHV0ZWQpXG4gICAgICAgIGluaXRDb21wdXRlZCQxKHZtLCBvcHRzLmNvbXB1dGVkKTtcbiAgICBpZiAob3B0cy53YXRjaCAmJiBvcHRzLndhdGNoICE9PSBuYXRpdmVXYXRjaCkge1xuICAgICAgICBpbml0V2F0Y2godm0sIG9wdHMud2F0Y2gpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGluaXRQcm9wcyQxKHZtLCBwcm9wc09wdGlvbnMpIHtcbiAgICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICAgIHZhciBwcm9wcyA9ICh2bS5fcHJvcHMgPSBzaGFsbG93UmVhY3RpdmUoe30pKTtcbiAgICAvLyBjYWNoZSBwcm9wIGtleXMgc28gdGhhdCBmdXR1cmUgcHJvcHMgdXBkYXRlcyBjYW4gaXRlcmF0ZSB1c2luZyBBcnJheVxuICAgIC8vIGluc3RlYWQgb2YgZHluYW1pYyBvYmplY3Qga2V5IGVudW1lcmF0aW9uLlxuICAgIHZhciBrZXlzID0gKHZtLiRvcHRpb25zLl9wcm9wS2V5cyA9IFtdKTtcbiAgICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XG4gICAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICB9XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB2YXIgdmFsdWUgPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wc09wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChpc1Jlc2VydmVkQXR0cmlidXRlKGh5cGhlbmF0ZWRLZXkpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiXFxcIlwiLmNvbmNhdChoeXBoZW5hdGVkS2V5LCBcIlxcXCIgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGNvbXBvbmVudCBwcm9wLlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmaW5lUmVhY3RpdmUocHJvcHMsIGtleSwgdmFsdWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUm9vdCAmJiAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkF2b2lkIG11dGF0aW5nIGEgcHJvcCBkaXJlY3RseSBzaW5jZSB0aGUgdmFsdWUgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwYXJlbnQgY29tcG9uZW50IHJlLXJlbmRlcnMuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiSW5zdGVhZCwgdXNlIGEgZGF0YSBvciBjb21wdXRlZCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcHJvcCdzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWUuIFByb3AgYmVpbmcgbXV0YXRlZDogXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIlwiKSwgdm0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVmaW5lUmVhY3RpdmUocHJvcHMsIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0YXRpYyBwcm9wcyBhcmUgYWxyZWFkeSBwcm94aWVkIG9uIHRoZSBjb21wb25lbnQncyBwcm90b3R5cGVcbiAgICAgICAgLy8gZHVyaW5nIFZ1ZS5leHRlbmQoKS4gV2Ugb25seSBuZWVkIHRvIHByb3h5IHByb3BzIGRlZmluZWQgYXRcbiAgICAgICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICAgICAgICBwcm94eSh2bSwgXCJfcHJvcHNcIiwga2V5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzT3B0aW9ucykge1xuICAgICAgICBfbG9vcF8xKGtleSk7XG4gICAgfVxuICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbn1cbmZ1bmN0aW9uIGluaXREYXRhKHZtKSB7XG4gICAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICAgIGRhdGEgPSB2bS5fZGF0YSA9IGlzRnVuY3Rpb24oZGF0YSkgPyBnZXREYXRhKGRhdGEsIHZtKSA6IGRhdGEgfHwge307XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgd2FybiQyKCdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICAgICAgICAgICAnaHR0cHM6Ly92Mi52dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJywgdm0pO1xuICAgIH1cbiAgICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gICAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBkYXRhIHByb3BlcnR5LlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgI
13835HByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgYSBwcm9wLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIlVzZSBwcm9wIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5cIiwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgICAgICAgIHByb3h5KHZtLCBcIl9kYXRhXCIsIGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gb2JzZXJ2ZSBkYXRhXG4gICAgdmFyIG9iID0gb2JzZXJ2ZShkYXRhKTtcbiAgICBvYiAmJiBvYi52bUNvdW50Kys7XG59XG5mdW5jdGlvbiBnZXREYXRhKGRhdGEsIHZtKSB7XG4gICAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICAgIHB1c2hUYXJnZXQoKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGF0YS5jYWxsKHZtLCB2bSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgfVxufVxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxKHZtLCBjb21wdXRlZCkge1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHZhciB3YXRjaGVycyA9ICh2bS5fY29tcHV0ZWRXYXRjaGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgIC8vIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGp1c3QgZ2V0dGVycyBkdXJpbmcgU1NSXG4gICAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICAgICAgdmFyIHVzZXJEZWYgPSBjb21wdXRlZFtrZXldO1xuICAgICAgICB2Y
13835XIgZ2V0dGVyID0gaXNGdW5jdGlvbih1c2VyRGVmKSA/IHVzZXJEZWYgOiB1c2VyRGVmLmdldDtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZ2V0dGVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIkdldHRlciBpcyBtaXNzaW5nIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiLlwiKSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNTU1IpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBpbnRlcm5hbCB3YXRjaGVyIGZvciB0aGUgY29tcHV0ZWQgcHJvcGVydHkuXG4gICAgICAgICAgICB3YXRjaGVyc1trZXldID0gbmV3IFdhdGNoZXIodm0sIGdldHRlciB8fCBub29wLCBub29wLCBjb21wdXRlZFdhdGNoZXJPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21wb25lbnQtZGVmaW5lZCBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlXG4gICAgICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICAgICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgICAgICAgZGVmaW5lQ29tcHV0ZWQodm0sIGtleSwgdXNlckRlZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICAgICAgICAgIHdhcm4kMihcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodm0uJG9wdGlvbnMucHJvcHMgJiYga2V5IGluIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgcHJvcC5cIiksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHZtLiRvcHRpb25zLm1ldGhvZHMgJiYga2V5IGluIHZtLiRvcHRpb25zLm1ldGhvZHMpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBtZXRob2QuXCIpLCB2bSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkZWZpbmVDb21wdXRlZCh0YXJnZXQsIGtleSwgdXNlckRlZikge1xuICAgIHZhciBzaG91bGRDYWNoZSA9ICFpc1NlcnZlclJlbmRlcmluZygpO1xuICAgIGlmIChpc0Z1bmN0aW9uKHVzZXJEZWYpKSB7XG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBzaG91bGRDYWNoZVxuICAgICAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgICAgICA6IGNyZWF0ZUdldHRlckludm9rZXIodXNlckRlZik7XG4gICAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHVzZXJEZWYuZ2V0XG4gICAgICAgICAgICA/IHNob3VsZENhY2hlICYmIHVzZXJEZWYuY2FjaGUgIT09IGZhbHNlXG4gICAgICAgICAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgICAgICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYuZ2V0KVxuICAgICAgICAgICAgOiBub29wO1xuICAgICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2FybiQyKFwiQ29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiB3YXMgYXNzaWduZWQgdG8gYnV0IGl0IGhhcyBubyBzZXR0ZXIuXCIpLCB0aGlzKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyKCkge1xuICAgICAgICB2Y
13835XIgd2F0Y2hlciA9IHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnMgJiYgdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1trZXldO1xuICAgICAgICBpZiAod2F0Y2hlcikge1xuICAgICAgICAgICAgaWYgKHdhdGNoZXIuZGlydHkpIHtcbiAgICAgICAgICAgICAgICB3YXRjaGVyLmV2YWx1YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIERlcC50YXJnZXQub25UcmFjaykge1xuICAgICAgICAgICAgICAgICAgICBEZXAudGFyZ2V0Lm9uVHJhY2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0OiBEZXAudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIiAvKiBUcmFja09wVHlwZXMuR0VUICovLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhdGNoZXIuZGVwZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVHZXR0ZXJJbnZva2VyKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB0aGlzKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gaW5pdE1ldGhvZHModm0sIG1ldGhvZHMpIHtcbiAgICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgdHlwZSBcXFwiXCIpLmNvbmNhdCh0eXBlb2YgbWV0aG9kc1trZXldLCBcIlxcXCIgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleSBpbiB2bSAmJiBpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJNZXRob2QgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBWdWUgaW5zdGFuY2UgbWV0aG9kLiBcIikgK1xuICAgICAgICAgICAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZtW2tleV0gPSB0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nID8gbm9vcCA6IGJpbmQkMShtZXRob2RzW2tleV0sIHZtKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbml0V2F0Y2godm0sIHdhdGNoKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHdhdGNoKSB7XG4gICAgICAgIHZhciBoYW5kbGVyID0gd2F0Y2hba2V5XTtcbiAgICAgICAgaWYgKGlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlV2F0Y2hlcih2bSwgZXhwT3JGbiwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgICAgIG9wdGlvbnMgPSBoYW5kbGVyO1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlci5oYW5kbGVyO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgICB9XG4gICAgcmV0dXJuIHZtLiR3YXRjaChleHBPckZuLCBoYW5kbGVyLCBvcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHN0YXRlTWl4aW4oVnVlKSB7XG4gICAgLy8gZmxvdyBzb21laG93IGhhcyBwcm9ibGVtcyB3aXRoIGRpcmVjdGx5IGRlY2xhcmVkIGRlZmluaXRpb24gb2JqZWN0XG4gICAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gICAgLy8gdGhlIG9iamVjdCBoZXJlLlxuICAgIHZhciBkYXRhRGVmID0ge307XG4gICAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH07XG4gICAgdmFyIHByb3BzRGVmID0ge307XG4gICAgcHJvcHNEZWYuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcHM7XG4gICAgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBkYXRhRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdhcm4kMignQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAgICAgICAgICdVc2UgbmVzdGVkIGRhdGEgcHJvcGVydGllcyBpbnN0ZWFkLicsIHRoaXMpO1xuICAgICAgICB9O1xuICAgICAgICBwcm9wc0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3YXJuJDIoXCIkcHJvcHMgaXMgcmVhZG9ubHkuXCIsIHR
13835oaXMpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRkYXRhJywgZGF0YURlZik7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcHJvcHMnLCBwcm9wc0RlZik7XG4gICAgVnVlLnByb3RvdHlwZS4kc2V0ID0gc2V0O1xuICAgIFZ1ZS5wcm90b3R5cGUuJGRlbGV0ZSA9IGRlbDtcbiAgICBWdWUucHJvdG90eXBlLiR3YXRjaCA9IGZ1bmN0aW9uIChleHBPckZuLCBjYiwgb3B0aW9ucykge1xuICAgICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChjYikpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIG9wdGlvbnMudXNlciA9IHRydWU7XG4gICAgICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICB2YXIgaW5mbyA9IFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIi5jb25jYXQod2F0Y2hlci5leHByZXNzaW9uLCBcIlxcXCJcIik7XG4gICAgICAgICAgICBwdXNoVGFyZ2V0KCk7XG4gICAgICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhjYiwgdm0sIFt3YXRjaGVyLnZhbHVlXSwgdm0sIGluZm8pO1xuICAgICAgICAgICAgcG9wVGFyZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbigpIHtcbiAgICAgICAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvdmlkZSh2bSkge1xuICAgIHZhciBwcm92aWRlT3B0aW9uID0gdm0uJG9wdGlvbnMucHJvdmlkZTtcbiAgICBpZiAocHJvdmlkZU9wdGlvbikge1xuICAgICAgICB2Y
13835XIgcHJvdmlkZWQgPSBpc0Z1bmN0aW9uKHByb3ZpZGVPcHRpb24pXG4gICAgICAgICAgICA/IHByb3ZpZGVPcHRpb24uY2FsbCh2bSlcbiAgICAgICAgICAgIDogcHJvdmlkZU9wdGlvbjtcbiAgICAgICAgaWYgKCFpc09iamVjdChwcm92aWRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc291cmNlID0gcmVzb2x2ZVByb3ZpZGVkKHZtKTtcbiAgICAgICAgLy8gSUU5IGRvZXNuJ3Qgc3VwcG9ydCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyBzbyB3ZSBoYXZlIHRvXG4gICAgICAgIC8vIGl0ZXJhdGUgdGhlIGtleXMgb3Vyc2VsdmVzLlxuICAgICAgICB2YXIga2V5cyA9IGhhc1N5bWJvbCA/IFJlZmxlY3Qub3duS2V5cyhwcm92aWRlZCkgOiBPYmplY3Qua2V5cyhwcm92aWRlZCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNlLCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdmlkZWQsIGtleSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gaW5pdEluamVjdGlvbnModm0pIHtcbiAgICB2YXIgcmVzdWx0ID0gcmVzb2x2ZUluamVjdCh2bS4kb3B0aW9ucy5pbmplY3QsIHZtKTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwga2V5LCByZXN1bHRba2V5XSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCJBdm9pZCBtdXRhdGluZyBhbiBpbmplY3RlZCB2YWx1ZSBkaXJlY3RseSBzaW5jZSB0aGUgY2hhbmdlcyB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcImluamVjdGlvbiBiZWluZyBtdXRhdGVkOiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiXCIpLCB2bSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVSZWFjdGl2ZSh2bSwga2V5LCByZXN1bHRba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUluamVjdChpbmplY3QsIHZtKSB7XG4gICAgaWYgKGluamVjdCkge1xuICAgICAgICAvLyBpbmplY3QgaXMgOmFueSBiZWNhdXNlIGZsb3cgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBmaWd1cmUgb3V0IGNhY2hlZFxuICAgICAgICB2Y
13835XIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIGtleXMgPSBoYXNTeW1ib2wgPyBSZWZsZWN0Lm93bktleXMoaW5qZWN0KSA6IE9iamVjdC5rZXlzKGluamVjdCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAvLyAjNjU3NCBpbiBjYXNlIHRoZSBpbmplY3Qgb2JqZWN0IGlzIG9ic2VydmVkLi4uXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnX19vYl9fJylcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBwcm92aWRlS2V5ID0gaW5qZWN0W2tleV0uZnJvbTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlS2V5IGluIHZtLl9wcm92aWRlZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdm0uX3Byb3ZpZGVkW3Byb3ZpZGVLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoJ2RlZmF1bHQnIGluIGluamVjdFtrZXldKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb3ZpZGVEZWZhdWx0ID0gaW5qZWN0W2tleV0uZGVmYXVsdDtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGlzRnVuY3Rpb24ocHJvdmlkZURlZmF1bHQpXG4gICAgICAgICAgICAgICAgICAgID8gcHJvdmlkZURlZmF1bHQuY2FsbCh2bSlcbiAgICAgICAgICAgICAgICAgICAgOiBwcm92aWRlRGVmYXVsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB3YXJuJDIoXCJJbmplY3Rpb24gXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBub3QgZm91bmRcIiksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxudmFyIHVpZCA9IDA7XG5mdW5jdGlvbiBpbml0TWl4aW4kMShWdWUpIHtcbiAgICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgICAgLy8gYSB1aWRcbiAgICAgICAgdm0uX3VpZCA9IHVpZCsrO1xuICAgICAgICB2Y
13835XIgc3RhcnRUYWcsIGVuZFRhZztcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICAgICAgICBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIuY29uY2F0KHZtLl91aWQpO1xuICAgICAgICAgICAgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIuY29uY2F0KHZtLl91aWQpO1xuICAgICAgICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYSBmbGFnIHRvIG1hcmsgdGhpcyBhcyBhIFZ1ZSBpbnN0YW5jZSB3aXRob3V0IGhhdmluZyB0byBkbyBpbnN0YW5jZW9mXG4gICAgICAgIC8vIGNoZWNrXG4gICAgICAgIHZtLl9pc1Z1ZSA9IHRydWU7XG4gICAgICAgIC8vIGF2b2lkIGluc3RhbmNlcyBmcm9tIGJlaW5nIG9ic2VydmVkXG4gICAgICAgIHZtLl9fdl9za2lwID0gdHJ1ZTtcbiAgICAgICAgLy8gZWZmZWN0IHNjb3BlXG4gICAgICAgIHZtLl9zY29wZSA9IG5ldyBFZmZlY3RTY29wZSh0cnVlIC8qIGRldGFjaGVkICovKTtcbiAgICAgICAgdm0uX3Njb3BlLl92bSA9IHRydWU7XG4gICAgICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5faXNDb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIG9wdGltaXplIGludGVybmFsIGNvbXBvbmVudCBpbnN0YW50aWF0aW9uXG4gICAgICAgICAgICAvLyBzaW5jZSBkeW5hbWljIG9wdGlvbnMgbWVyZ2luZyBpcyBwcmV0dHkgc2xvdywgYW5kIG5vbmUgb2YgdGhlXG4gICAgICAgICAgICAvLyBpbnRlcm5hbCBjb21wb25lbnQgb3B0aW9ucyBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudC5cbiAgICAgICAgICAgIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2bS4kb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhyZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKHZtLmNvbnN0cnVjdG9yKSwgb3B0aW9ucyB8fCB7fSwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBpbml0UHJveHkodm0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwb3NlIHJlYWwgc2VsZlxuICAgICAgICB2bS5fc2VsZiA9IHZtO1xuICAgICAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICAgICAgaW5pdEV2ZW50cyh2bSk7XG4gICAgICAgIGluaXRSZW5kZXIodm0pO1xuICAgICAgICBjYWxsSG9vayQxKHZtLCAnYmVmb3JlQ3JlYXRlJywgdW5kZWZpbmVkLCBmYWxzZSAvKiBzZXRDb250ZXh0ICovKTtcbiAgICAgICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICAgICAgaW5pdFN0YXRlKHZtKTtcbiAgICAgICAgaW5pdFByb3ZpZGUodm0pOyAvLyByZXNvbHZlIHByb3ZpZGUgYWZ0ZXIgZGF0YS9wcm9wc1xuICAgICAgICBjYWxsSG9vayQxKHZtLCAnY3JlYXRlZCcpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICAgIHZtLl9uYW1lID0gZm9ybWF0Q29tcG9uZW50TmFtZSh2bSwgZmFsc2UpO1xuICAgICAgICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQodm0uX25hbWUsIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBpbml0SW50ZXJuYWxDb21wb25lbnQodm0sIG9wdGlvbnMpIHtcbiAgICB2YXIgb3B0cyA9ICh2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucykpO1xuICAgIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gICAgdmFyIHBhcmVudFZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gICAgb3B0cy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuICAgIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIG9wdHMucHJvcHNEYXRhID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnByb3BzRGF0YTtcbiAgICBvcHRzLl9wYXJlbnRMaXN0ZW5lcnMgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMubGlzdGVuZXJzO1xuICAgIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xuICAgIG9wdHMuX2NvbXBvbmVudFRhZyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy50YWc7XG4gICAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gICAgICAgIG9wdHMuc3RhdGljUmVuZGVyRm5zID0gb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnM7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyhDdG9yKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gICAgaWYgKEN0b3Iuc3VwZXIpIHtcbiAgICAgICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICAgICAgaWYgKHN1cGVyT3B0aW9ucyAhPT0gY2FjaGVkU3VwZXJPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBzdXBlciBvcHRpb24gY2hhbmdlZCxcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gcmVzb2x2ZSBuZXcgb3B0aW9ucy5cbiAgICAgICAgICAgIEN0b3Iuc3VwZXJPcHRpb25zID0gc3VwZXJPcHRpb25zO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBsYXRlLW1vZGlmaWVkL2F0dGFjaGVkIG9wdGlvbnMgKCM0OTc2KVxuICAgICAgICAgICAgdmFyIG1vZGlmaWVkT3B0aW9ucyA9IHJlc29sdmVNb2RpZmllZE9wdGlvbnMoQ3Rvcik7XG4gICAgICAgICAgICAvLyB1cGRhdGUgYmFzZSBleHRlbmQgb3B0aW9uc1xuICAgICAgICAgICAgaWYgKG1vZGlmaWVkT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgI
13835H1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpIHtcbiAgICB2YXIgbW9kaWZpZWQ7XG4gICAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgICB2YXIgc2VhbGVkID0gQ3Rvci5zZWFsZWRPcHRpb25zO1xuICAgIGZvciAodmFyIGtleSBpbiBsYXRlc3QpIHtcbiAgICAgICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgICAgICAgaWYgKCFtb2RpZmllZClcbiAgICAgICAgICAgICAgICBtb2RpZmllZCA9IHt9O1xuICAgICAgICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RpZmllZDtcbn1cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQoZGF0YSwgcHJvcHMsIGNoaWxkcmVuLCBwYXJlbnQsIEN0b3IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAgIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgICAvLyBnZXRzIGEgdW5pcXVlIGNvbnRleHQgLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgY29ycmVjdCBuYW1lZCBzbG90IGNoZWNrXG4gICAgdmFyIGNvbnRleHRWbTtcbiAgICBpZiAoaGFzT3duKHBhcmVudCwgJ191aWQnKSkge1xuICAgICAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgICAgIGNvbnRleHRWbS5fb3JpZ2luYWwgPSBwYXJlbnQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFyZSBhYmxlIHRvIGdldCBhIGhvbGQgdG8gdGhlXG4gICAgICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICAgICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gICAgfVxuICAgIHZhciBpc0NvbXBpbGVkID0gaXNUcnVlKG9wdGlvbnMuX2NvbXBpbGVkKTtcbiAgICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBkYXRhLm9uIHx8IGVtcHR5T2JqZWN0O1xuICAgIHRoaXMuaW5qZWN0aW9ucyA9IHJlc29sdmVJbmplY3Qob3B0aW9ucy5pbmplY3QsIHBhcmVudCk7XG4gICAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpcy4kc2xvdHMpIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKHBhcmVudCwgZGF0YS5zY29wZWRTbG90cywgKF90aGlzLiRzbG90cyA9IHJlc29sdmVTbG90cyhjaGlsZHJlbiwgcGFyZW50KSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcy4kc2xvdHM7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Njb3BlZFNsb3RzJywge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVTY29wZWRTbG90cyhwYXJlbnQsIGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gICAgaWYgKGlzQ29tcGlsZWQpIHtcbiAgICAgICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgICAgIHRoaXMuJG9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICAvLyBwcmUtcmVzb2x2ZSBzbG90cyBmb3IgcmVuZGVyU2xvdCgpXG4gICAgICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgICAgICB0aGlzLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKHBhcmVudCwgZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgICAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQkMShjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgICAgICAgIGlmICh2bm9kZSAmJiAhaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgICAgICAgICB2bm9kZS5mblNjb3BlSWQgPSBvcHRpb25zLl9zY29wZUlkO1xuICAgICAgICAgICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2bm9kZTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMShjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5pbnN0YWxsUmVuZGVySGVscGVycyhGdW5jdGlvbmFsUmVuZGVyQ29udGV4dC5wcm90b3R5cGUpO1xuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHRWbSwgY2hpbGRyZW4pIHtcbiAgICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIgcHJvcE9wdGlvbnMgPSBvcHRpb25zLnByb3BzO1xuICAgIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICAgICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSB8fCBlbXB0eU9iamVjdCk7XG4gICAgICAgI
13835H1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChpc0RlZihkYXRhLmF0dHJzKSlcbiAgICAgICAgICAgIG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpXG4gICAgICAgICAgICBtZXJnZVByb3BzKHByb3BzLCBkYXRhLnByb3BzKTtcbiAgICB9XG4gICAgdmFyIHJlbmRlckNvbnRleHQgPSBuZXcgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQoZGF0YSwgcHJvcHMsIGNoaWxkcmVuLCBjb250ZXh0Vm0sIEN0b3IpO1xuICAgIHZhciB2bm9kZSA9IG9wdGlvbnMucmVuZGVyLmNhbGwobnVsbCwgcmVuZGVyQ29udGV4dC5fYywgcmVuZGVyQ29udGV4dCk7XG4gICAgaWYgKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgdmFyIHZub2RlcyA9IG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlKSB8fCBbXTtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc1tpXSA9IGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGVzW2ldLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5mdW5jdGlvbiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgICAvLyAjNzgxNyBjbG9uZSBub2RlIGJlZm9yZSBzZXR0aW5nIGZuQ29udGV4dCwgb3RoZXJ3aXNlIGlmIHRoZSBub2RlIGlzIHJldXNlZFxuICAgIC8vIChlLmcuIGl0IHdhcyBmcm9tIGEgY2FjaGVkIG5vcm1hbCBzbG90KSB0aGUgZm5Db250ZXh0IGNhdXNlcyBuYW1lZCBzbG90c1xuICAgIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICAgIHZhciBjbG9uZSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgIGNsb25lLmZuQ29udGV4dCA9IGNvbnRleHRWbTtcbiAgICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPVxuICAgICAgICAgICAgcmVuZGVyQ29udGV4dDtcbiAgICB9XG4gICAgaWYgKGRhdGEuc2xvdCkge1xuICAgICAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lO1xufVxuZnVuY3Rpb24gbWVyZ2VQcm9wcyh0bywgZnJvbSkge1xuICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgICAgIHRvW2NhbWVsaXplKGtleSldID0gZnJvbVtrZXldO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubmFtZSB8fCBvcHRpb25zLl9fbmFtZSB8fCBvcHRpb25zLl9jb21wb25lbnRUYWc7XG59XG4vLyBpbmxpbmUgaG9va3MgdG8gYmUgaW52b2tlZCBvbiBjb21wb25lbnQgVk5vZGVzIGR1cmluZyBwYXRjaFxudmFyIGNvbXBvbmVudFZOb2RlSG9va3MgPSB7XG4gICAgaW5pdDogZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgICAgaWYgKHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmXG4gICAgICAgICAgICAhdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkICYmXG4gICAgICAgICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgLy8ga2VwdC1hbGl2ZSBjb21wb25lbnRzLCB0cmVhdCBhcyBh
13835IHBhdGNoXG4gICAgICAgICAgICB2YXIgbW91bnRlZE5vZGUgPSB2bm9kZTsgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgICAgICAgY29tcG9uZW50Vk5vZGVIb29rcy5wcmVwYXRjaChtb3VudGVkTm9kZSwgbW91bnRlZE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gKHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZSh2bm9kZSwgYWN0aXZlSW5zdGFuY2UpKTtcbiAgICAgICAgICAgIGNoaWxkLiRtb3VudChoeWRyYXRpbmcgPyB2bm9kZS5lbG0gOiB1bmRlZmluZWQsIGh5ZHJhdGluZyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByZXBhdGNoOiBmdW5jdGlvbiAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICAgICAgdmFyIGNoaWxkID0gKHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICB1cGRhdGVDaGlsZENvbXBvbmVudChjaGlsZCwgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgICAgb3B0aW9ucy5saXN0ZW5lcnMsIC8vIHVwZGF0ZWQgbGlzdGVuZXJzXG4gICAgICAgIHZub2RlLCAvLyBuZXcgcGFyZW50IHZub2RlXG4gICAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgICAgICk7XG4gICAgfSxcbiAgICBpbnNlcnQ6IGZ1bmN0aW9uICh2bm9kZSkge1xuICAgICAgICB2Y
13835XIgY29udGV4dCA9IHZub2RlLmNvbnRleHQsIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCkge1xuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICAgICAgICBjYWxsSG9vayQxKGNvbXBvbmVudEluc3RhbmNlLCAnbW91bnRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAgICAgICAgIC8vIHZ1ZS1yb3V0ZXIjMTIxMlxuICAgICAgICAgICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgICAgICAgICAvLyBvbiBpbmNvcnJlY3QgY2hpbGRyZW4uIEluc3RlYWQgd2UgcHVzaCB0aGVtIGludG8gYSBxdWV1ZSB3aGljaCB3aWxsXG4gICAgICAgICAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICAgICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveTogZnVuY3Rpb24gKHZub2RlKSB7XG4gICAgICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG52YXIgaG9va3NUb01lcmdlID0gT2JqZWN0LmtleXMoY29tcG9uZW50Vk5vZGVIb29rcyk7XG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZykge1xuICAgIGlmIChpc1VuZGVmKEN0b3IpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGJhc2VDdG9yID0gY29udGV4dC4kb3B0aW9ucy5fYmFzZTtcbiAgICAvLyBwbGFpbiBvcHRpb25zIG9iamVjdDogdHVybiBpdCBpbnRvIGEgY29uc3RydWN0b3JcbiAgICBpZiAoaXNPYmplY3QoQ3RvcikpIHtcbiAgICAgICAgQ3RvciA9IGJhc2VDdG9yLmV4dGVuZChDdG9yKTtcbiAgICB9XG4gICAgLy8gaWYgYXQgdGhpcyBzdGFnZSBpdCdzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIGFuIGFzeW5jIGNvbXBvbmVudCBmYWN0b3J5LFxuICAgIC8vIHJlamVjdC5cbiAgICBpZiAodHlwZW9mIEN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIkludmFsaWQgQ29tcG9uZW50IGRlZmluaXRpb246IFwiLmNvbmNhdChTdHJpbmcoQ3RvcikpLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGFzeW5jIGNvbXBvbmVudFxuICAgIHZhciBhc3luY0ZhY3Rvcnk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChpc1VuZGVmKEN0b3IuY2lkKSkge1xuICAgICAgICBhc3luY0ZhY3RvcnkgPSBDdG9yO1xuICAgICAgICBDdG9yID0gcmVzb2x2ZUFzeW5jQ29tcG9uZW50KGFzeW5jRmFjdG9yeSwgYmFzZUN0b3IpO1xuICAgICAgICBpZiAoQ3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAgICAgICAvLyBhcyBhIGNvbW1lbnQgbm9kZSBidXQgcHJlc2VydmVzIGFsbCB0aGUgcmF3IGluZm9ybWF0aW9uIGZvciB0aGUgbm9kZS5cbiAgICAgICAgICAgIC8vIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIGFzeW5jIHNlcnZlci1yZW5kZXJpbmcgYW5kIGh5ZHJhdGlvbi5cbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKGFzeW5jRmFjdG9yeSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGF0YSA9IGRhdGEgfHwge307XG4gICAgLy8gcmVzb2x2ZSBjb25zdHJ1Y3RvciBvcHRpb25zIGluIGNhc2UgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZCBhZnRlclxuICAgIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBjcmVhdGlvblxuICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvcik7XG4gICAgLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGRhdGEgaW50byBwcm9wcyAmIGV2ZW50c1xuICAgIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHRyYW5zZm9ybU1vZGVsKEN0b3Iub3B0aW9ucywgZGF0YSk7XG4gICAgfVxuICAgIC8vIGV4dHJhY3QgcHJvcHNcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnKTtcbiAgICAvLyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5mdW5jdGlvbmFsKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKTtcbiAgICB9XG4gICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9NIGxpc3RlbmVyc1xuICAgIHZhciBsaXN0ZW5lcnMgPSBkYXRhLm9uO1xuICAgIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gICAgLy8gc28gaXQgZ2V0cyBwcm9jZXNzZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gICAgZGF0YS5vbiA9IGRhdGEubmF0aXZlT247XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmFic3RyYWN0KSkge1xuICAgICAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgICAgIC8vIG90aGVyIHRoYW4gcHJvcHMgJiBsaXN0ZW5lcnMgJiBzbG90XG4gICAgICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgICAgdmFyIHNsb3QgPSBkYXRhLnNsb3Q7XG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgICAgI
13835H1cbiAgICB9XG4gICAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gICAgaW5zdGFsbENvbXBvbmVudEhvb2tzKGRhdGEpO1xuICAgIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIHZub2RlXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDdG9yLm9wdGlvbnMpIHx8IHRhZztcbiAgICB2YXIgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIFwidnVlLWNvbXBvbmVudC1cIi5jb25jYXQoQ3Rvci5jaWQpLmNvbmNhdChuYW1lID8gXCItXCIuY29uY2F0KG5hbWUpIDogJycpLCBkYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LCBcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgeyBDdG9yOiBDdG9yLCBwcm9wc0RhdGE6IHByb3BzRGF0YSwgbGlzdGVuZXJzOiBsaXN0ZW5lcnMsIHRhZzogdGFnLCBjaGlsZHJlbjogY2hpbGRyZW4gfSwgYXN5bmNGYWN0b3J5KTtcbiAgICByZXR1cm4gdm5vZGU7XG59XG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlKFxuLy8gd2Uga25vdyBpdCdzIE1vdW50ZWRDb21wb25lbnRWTm9kZSBidXQgZmxvdyBkb2Vzbid0XG52bm9kZSwgXG4vLyBhY3RpdmVJbnN0YW5jZSBpbiBsaWZlY3ljbGUgc3RhdGVcbnBhcmVudCkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBfaXNDb21wb25lbnQ6IHRydWUsXG4gICAgICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgICAgIHBhcmVudDogcGFyZW50XG4gICAgfTtcbiAgICAvLyBjaGVjayBpbmxpbmUtdGVtcGxhdGUgcmVuZGVyIGZ1bmN0aW9uc1xuICAgIHZhciBpbmxpbmVUZW1wbGF0ZSA9IHZub2RlLmRhdGEuaW5saW5lVGVtcGxhdGU7XG4gICAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgICAgICBvcHRpb25zLnJlbmRlciA9IGlubGluZVRlbXBsYXRlLnJlbmRlcjtcbiAgICAgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBpbmxpbmVUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnM7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaW5zdGFsbENvbXBvbmVudEhvb2tzKGRhdGEpIHtcbiAgICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzVG9NZXJnZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2Y
13835XIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSBob29rc1trZXldO1xuICAgICAgICB2YXIgdG9NZXJnZSA9IGNvbXBvbmVudFZOb2RlSG9va3Nba2V5XTtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoZXhpc3RpbmcgIT09IHRvTWVyZ2UgJiYgIShleGlzdGluZyAmJiBleGlzdGluZy5fbWVyZ2VkKSkge1xuICAgICAgICAgICAgaG9va3Nba2V5XSA9IGV4aXN0aW5nID8gbWVyZ2VIb29rKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZUhvb2soZjEsIGYyKSB7XG4gICAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8vIGZsb3cgY29tcGxhaW5zIGFib3V0IGV4dHJhIGFyZ3Mgd2hpY2ggaXMgd2h5IHdlIHVzZSBhbnlcbiAgICAgICAgZjEoYSwgYik7XG4gICAgICAgIGYyKGEsIGIpO1xuICAgIH07XG4gICAgbWVyZ2VkLl9tZXJnZWQgPSB0cnVlO1xuICAgIHJldHVybiBtZXJnZWQ7XG59XG4vLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgaW5mbyAodmFsdWUgYW5kIGNhbGxiYWNrKSBpbnRvXG4vLyBwcm9wIGFuZCBldmVudCBoYW5kbGVyIHJlc3BlY3RpdmVseS5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1vZGVsKG9wdGlvbnMsIGRhdGEpIHtcbiAgICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgICB2YXIgZXZlbnQgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLmV2ZW50KSB8fCAnaW5wdXQnO1xuICAgIChkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pKVtwcm9wXSA9IGRhdGEubW9kZWwudmFsdWU7XG4gICAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgICB2YXIgZXhpc3RpbmcgPSBvbltldmVudF07XG4gICAgdmFyIGNhbGxiYWNrID0gZGF0YS5tb2RlbC5jYWxsYmFjaztcbiAgICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV4aXN0aW5nKVxuICAgICAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgICAgIDogZXhpc3RpbmcgIT09IGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBvbltldmVudF0gPSBbY2FsbGJhY2tdLmNvbmNhdChleGlzdGluZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIG9uW2V2ZW50XSA9IGNhbGxiYWNrO1xuICAgIH1cbn1cblxudmFyIHdhcm4kMiA9IG5vb3A7XG52YXIgdGlwID0gbm9vcDtcbnZhciBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlOyAvLyB3b3JrIGFyb3VuZCBmbG93IGNoZWNrXG52YXIgZm9ybWF0Q29tcG9uZW50TmFtZTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGhhc0NvbnNvbGVfMSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgICB2YXIgY2xhc3NpZnlSRV8xID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICAgIHZhciBjbGFzc2lmeV8xID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoY2xhc3NpZnlSRV8xLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy50b1VwcGVyQ2FzZSgpOyB9KS5yZXBsYWNlKC9bLV9dL2csICcnKTtcbiAgICB9O1xuICAgIHdhcm4kMiA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgICAgIGlmICh2bSA9PT0gdm9pZCAwKSB7IHZtID0gY3VycmVudEluc3RhbmNlOyB9XG4gICAgICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcbiAgICAgICAgaWYgKGNvbmZpZy53YXJuSGFuZGxlcikge1xuICAgICAgICAgICAgY29uZmlnLndhcm5IYW5kbGVyLmNhbGwobnVsbCwgbXNnLCB2bSwgdHJhY2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc0NvbnNvbGVfMSAmJiAhY29uZmlnLnNpbGVudCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltWdWUgd2Fybl06IFwiLmNvbmNhdChtc2cpLmNvbmNhdCh0cmFjZSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgICAgICBpZiAoaGFzQ29uc29sZV8xICYmICFjb25maWcuc2lsZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbVnVlIHRpcF06IFwiLmNvbmNhdChtc2cpICsgKHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmb3JtYXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKHZtLCBpbmNsdWRlRmlsZSkge1xuICAgICAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICAgICAgICByZXR1cm4gJzxSb290Pic7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9wdGlvbnMgPSBpc0Z1bmN0aW9uKHZtKSAmJiB2bS5jaWQgIT0gbnVsbFxuICAgICAgICAgICAgPyB2bS5vcHRpb25zXG4gICAgICAgICAgICA6IHZtLl9pc1Z1ZVxuICAgICAgICAgICAgICAgID8gdm0uJG9wdGlvbnMgfHwgdm0uY29uc3RydWN0b3Iub3B0aW9uc1xuICAgICAgICAgICAgICAgIDogdm07XG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShvcHRpb25zKTtcbiAgICAgICAgdmFyIGZpbGUgPSBvcHRpb25zLl9fZmlsZTtcbiAgICAgICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKG5hbWUgPyBcIjxcIi5jb25jYXQoY2xhc3NpZnlfMShuYW1lKSwgXCI+XCIpIDogXCI8QW5vbnltb3VzPlwiKSArXG4gICAgICAgICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyBcIiBhdCBcIi5jb25jYXQoZmlsZSkgOiAnJykpO1xuICAgIH07XG4gICAgdmFyIHJlcGVhdF8xID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgICAgICB2Y
13835XIgcmVzID0gJyc7XG4gICAgICAgIHdoaWxlIChuKSB7XG4gICAgICAgICAgICBpZiAobiAlIDIgPT09IDEpXG4gICAgICAgICAgICAgICAgcmVzICs9IHN0cjtcbiAgICAgICAgICAgIGlmIChuID4gMSlcbiAgICAgICAgICAgICAgICBzdHIgKz0gc3RyO1xuICAgICAgICAgICAgbiA+Pj0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgICAgICBpZiAodm0uX2lzVnVlICYmIHZtLiRwYXJlbnQpIHtcbiAgICAgICAgICAgIHZhciB0cmVlID0gW107XG4gICAgICAgICAgICB2YXIgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID0gMDtcbiAgICAgICAgICAgIHdoaWxlICh2bSkge1xuICAgICAgICAgICAgICAgIGlmICh0cmVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3QgPSB0cmVlW3RyZWUubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlW3RyZWUubGVuZ3RoIC0gMV0gPSBbbGFzdCwgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJlZS5wdXNoKHZtKTtcbiAgICAgICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKCdcXG5cXG5mb3VuZCBpblxcblxcbicgK1xuICAgICAgICAgICAgICAgIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0XzEoJyAnLCA1ICsgaSAqIDIpKS5jb25jYXQoaXNBcnJheSh2bSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJcIi5jb25jYXQoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSksIFwiLi4uIChcIikuY29uY2F0KHZtWzFdLCBcIiByZWN1cnNpdmUgY2FsbHMpXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdENvbXBvbmVudE5hbWUodm0pKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiXFxuXFxuKGZvdW5kIGluIFwiLmNvbmNhdChmb3JtYXRDb21wb25lbnROYW1lKHZtKSwgXCIpXCIpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLyoqXG4gKiBPcHRpb24gb3ZlcndyaXRpbmcgc3RyYXRlZ2llcyBhcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlXG4gKiBob3cgdG8gbWVyZ2UgYSBwYXJlbnQgb3B0aW9uIHZhbHVlIGFuZCBhIGNoaWxkIG9wdGlvblxuICogdmFsdWUgaW50byB0aGUgZmluYWwgdmFsdWUuXG4gKi9cbnZhciBzdHJhdHMgPSBjb25maWcub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO1xuLyoqXG4gKiBPcHRpb25zIHdpdGggcmVzdHJpY3Rpb25zXG4gKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgc3RyYXRzLmVsID0gc3RyYXRzLnByb3BzRGF0YSA9IGZ1bmN0aW9uIChwYXJlbnQsIGNoaWxkLCB2bSwga2V5KSB7XG4gICAgICAgIGlmICghdm0pIHtcbiAgICAgICAgICAgIHdhcm4kMihcIm9wdGlvbiBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGluc3RhbmNlIFwiKSArXG4gICAgICAgICAgICAgICAgJ2NyZWF0aW9uIHdpdGggdGhlIGBuZXdgIGtleXdvcmQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTdHJhdChwYXJlbnQsIGNoaWxkKTtcbiAgICB9O1xufVxuLyoqXG4gKiBIZWxwZXIgdGhhdCByZWN1cnNpdmVseSBtZXJnZXMgdHdvIGRhdGEgb2JqZWN0cyB0b2dldGhlci5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhKHRvLCBmcm9tLCByZWN1cnNpdmUpIHtcbiAgICBpZiAocmVjdXJzaXZlID09PSB2b2lkIDApIHsgcmVjdXJzaXZlID0gdHJ1ZTsgfVxuICAgIGlmICghZnJvbSlcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIHZhciBrZXksIHRvVmFsLCBmcm9tVmFsO1xuICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICAgID8gUmVmbGVjdC5vd25LZXlzKGZyb20pXG4gICAgICAgIDogT2JqZWN0LmtleXMoZnJvbSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIC8vIGluIGNhc2UgdGhlIG9iamVjdCBpcyBhbHJlYWR5IG9ic2VydmVkLi4uXG4gICAgICAgIGlmIChrZXkgPT09ICdfX29iX18nKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIHRvVmFsID0gdG9ba2V5XTtcbiAgICAgICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICAgICAgaWYgKCFyZWN1cnNpdmUgfHwgIWhhc093bih0bywga2V5KSkge1xuICAgICAgICAgICAgc2V0KHRvLCBrZXksIGZyb21WYWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRvVmFsICE9PSBmcm9tVmFsICYmXG4gICAgICAgICAgICBpc1BsYWluT2JqZWN0KHRvVmFsKSAmJlxuICAgICAgICAgICAgaXNQbGFpbk9iamVjdChmcm9tVmFsKSkge1xuICAgICAgICAgICAgbWVyZ2VEYXRhKHRvVmFsLCBmcm9tVmFsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG87XG59XG4vKipcbiAqIERhdGFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgICAgLy8gaW4gYSBWdWUuZXh0ZW5kIG1lcmdlLCBib3RoIHNob3VsZCBiZSBmdW5jdGlvbnNcbiAgICAgICAgaWYgKCFjaGlsZFZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudFZhbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmVudFZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdoZW4gcGFyZW50VmFsICYgY2hpbGRWYWwgYXJlIGJvdGggcHJlc2VudCxcbiAgICAgICAgLy8gd2UgbmVlZCB0byByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gICAgICAgIC8vIG1lcmdlZCByZXN1bHQgb2YgYm90aCBmdW5jdGlvbnMuLi4gbm8gbmVlZCB0b1xuICAgICAgICAvLyBjaGVjayBpZiBwYXJlbnRWYWwgaXMgYSBmdW5jdGlvbiBoZXJlIGJlY2F1c2VcbiAgICAgICAgLy8gaXQgaGFzIHRvIGJlIGEgZnVuY3Rpb24gdG8gcGFzcyBwcmV2aW91cyBtZXJnZXMuXG4gICAgICAgI
13835HJldHVybiBmdW5jdGlvbiBtZXJnZWREYXRhRm4oKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGlzRnVuY3Rpb24oY2hpbGRWYWwpID8gY2hpbGRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IGNoaWxkVmFsLCBpc0Z1bmN0aW9uKHBhcmVudFZhbCkgPyBwYXJlbnRWYWwuY2FsbCh0aGlzLCB0aGlzKSA6IHBhcmVudFZhbCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4oKSB7XG4gICAgICAgICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IGlzRnVuY3Rpb24oY2hpbGRWYWwpXG4gICAgICAgICAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgICAgICAgdmFyIGRlZmF1bHREYXRhID0gaXNGdW5jdGlvbihwYXJlbnRWYWwpXG4gICAgICAgICAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgICAgICAgICAgOiBwYXJlbnRWYWw7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VEYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlRGF0YShpbnN0YW5jZURhdGEsIGRlZmF1bHREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5zdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHdhcm4kMignVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5jZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbml0aW9ucy4nLCB2bSk7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50VmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXJnZURhdGFPckZuKHBhcmVudFZhbCwgY2hpbGRWYWwpO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSk7XG59O1xuLyoqXG4gKiBIb29rcyBhbmQgcHJvcHMgYXJlIG1lcmdlZCBhcyBhcnJheXMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlTGlmZWN5Y2xlSG9vayhwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgdmFyIHJlcyA9IGNoaWxkVmFsXG4gICAgICAgID8gcGFyZW50VmFsXG4gICAgICAgICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICAgICAgICA6IGlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgICAgICAgICAgPyBjaGlsZFZhbFxuICAgICAgICAgICAgICAgIDogW2NoaWxkVmFsXVxuICAgICAgICA6IHBhcmVudFZhbDtcbiAgICByZXR1cm4gcmVzID8gZGVkdXBlSG9va3MocmVzKSA6IHJlcztcbn1cbmZ1bmN0aW9uIGRlZHVwZUhvb2tzKGhvb2tzKSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGhvb2tzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICBzdHJhdHNbaG9va10gPSBtZXJnZUxpZmVjeWNsZUhvb2s7XG59KTtcbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtLCBrZXkpIHtcbiAgICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gICAgaWYgKGNoaWxkVmFsKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gICAgICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtLCBrZXkpIHtcbiAgICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICAgIC8vQHRzLWV4cGVjdC1lcnJvciB3b3JrIGFyb3VuZFxuICAgIGlmIChwYXJlbnRWYWwgPT09IG5hdGl2ZVdhdGNoKVxuICAgICAgICBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7XG4gICAgLy9AdHMtZXhwZWN0LWVycm9yIHdvcmsgYXJvdW5kXG4gICAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaClcbiAgICAgICAgY2hpbGRWYWwgPSB1bmRlZmluZWQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZFZhbClcbiAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbClcbiAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgIHZhciByZXQgPSB7fTtcbiAgICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICAgIGZvciAodmFyIGtleV8xIGluIGNoaWxkVmFsKSB7XG4gICAgICAgI
13835HZhciBwYXJlbnRfMSA9IHJldFtrZXlfMV07XG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkVmFsW2tleV8xXTtcbiAgICAgICAgaWYgKHBhcmVudF8xICYmICFpc0FycmF5KHBhcmVudF8xKSkge1xuICAgICAgICAgICAgcGFyZW50XzEgPSBbcGFyZW50XzFdO1xuICAgICAgICB9XG4gICAgICAgIHJldFtrZXlfMV0gPSBwYXJlbnRfMSA/IHBhcmVudF8xLmNvbmNhdChjaGlsZCkgOiBpc0FycmF5KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG4vKipcbiAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG4gICAgc3RyYXRzLm1ldGhvZHMgPVxuICAgICAgICBzdHJhdHMuaW5qZWN0ID1cbiAgICAgICAgICAgIHN0cmF0cy5jb21wdXRlZCA9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVmFsICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50VmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkVmFsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkVmFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJldCwgY2hpbGRWYWwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgIH07XG5zdHJhdHMucHJvdmlkZSA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgaWYgKCFwYXJlbnRWYWwpXG4gICAgICAgIHJldHVybiBjaGlsZFZhbDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2Y
13835XIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgbWVyZ2VEYXRhKHJldCwgaXNGdW5jdGlvbihwYXJlbnRWYWwpID8gcGFyZW50VmFsLmNhbGwodGhpcykgOiBwYXJlbnRWYWwpO1xuICAgICAgICBpZiAoY2hpbGRWYWwpIHtcbiAgICAgICAgICAgIG1lcmdlRGF0YShyZXQsIGlzRnVuY3Rpb24oY2hpbGRWYWwpID8gY2hpbGRWYWwuY2FsbCh0aGlzKSA6IGNoaWxkVmFsLCBmYWxzZSAvLyBub24tcmVjdXJzaXZlXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcbn07XG4vKipcbiAqIERlZmF1bHQgc3RyYXRlZ3kuXG4gKi9cbnZhciBkZWZhdWx0U3RyYXQgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICAgIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkID8gcGFyZW50VmFsIDogY2hpbGRWYWw7XG59O1xuLyoqXG4gKiBWYWxpZGF0ZSBjb21wb25lbnQgbmFtZXNcbiAqL1xuZnVuY3Rpb24gY2hlY2tDb21wb25lbnRzKG9wdGlvbnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShrZXkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKSB7XG4gICAgaWYgKCFuZXcgUmVnRXhwKFwiXlthLXpBLVpdW1xcXFwtXFxcXC4wLTlfXCIuY29uY2F0KHVuaWNvZGVSZWdFeHAuc291cmNlLCBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgICAgICB3YXJuJDIoJ0ludmFsaWQgY29tcG9uZW50IG5hbWU6IFwiJyArXG4gICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nKTtcbiAgICB9XG4gICAgaWYgKGlzQnVpbHRJblRhZyhuYW1lKSB8fCBjb25maWcuaXNSZXNlcnZlZFRhZyhuYW1lKSkge1xuICAgICAgICB3YXJuJDIoJ0RvIG5vdCB1c2UgYnVpbHQtaW4gb3IgcmVzZXJ2ZWQgSFRNTCBlbGVtZW50cyBhcyBjb21wb25lbnQgJyArXG4gICAgICAgICAgICAnaWQ6ICcgK1xuICAgICAgICAgICAgbmFtZSk7XG4gICAgfVxufVxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzKG9wdGlvbnMsIHZtKSB7XG4gICAgdmFyIHByb3BzID0gb3B0aW9ucy5wcm9wcztcbiAgICBpZiAoIXByb3BzKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBpLCB2YWwsIG5hbWU7XG4gICAgaWYgKGlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIHZhbCA9IHByb3BzW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKHZhbCk7XG4gICAgICAgICAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgd2FybiQyKCdwcm9wcyBtdXN0IGJlIHN0cmluZ3Mgd2hlbiB1c2luZyBhcnJheSBzeW50YXguJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgICB2YWwgPSBwcm9wc1trZXldO1xuICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKGtleSk7XG4gICAgICAgICAgICByZXNbbmFtZV0gPSBpc1BsYWluT2JqZWN0KHZhbCkgPyB2YWwgOiB7IHR5cGU6IHZhbCB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJwcm9wc1xcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICAgICAgXCJidXQgZ290IFwiLmNvbmNhdCh0b1Jhd1R5cGUocHJvcHMpLCBcIi5cIiksIHZtKTtcbiAgICB9XG4gICAgb3B0aW9ucy5wcm9wcyA9IHJlcztcbn1cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3Qob3B0aW9ucywgdm0pIHtcbiAgICB2YXIgaW5qZWN0ID0gb3B0aW9ucy5pbmplY3Q7XG4gICAgaWYgKCFpbmplY3QpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgbm9ybWFsaXplZCA9IChvcHRpb25zLmluamVjdCA9IHt9KTtcbiAgICBpZiAoaXNBcnJheShpbmplY3QpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5qZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICAgICAgICB2Y
13835XIgdmFsID0gaW5qZWN0W2tleV07XG4gICAgICAgICAgICBub3JtYWxpemVkW2tleV0gPSBpc1BsYWluT2JqZWN0KHZhbClcbiAgICAgICAgICAgICAgICA/IGV4dGVuZCh7IGZyb206IGtleSB9LCB2YWwpXG4gICAgICAgICAgICAgICAgOiB7IGZyb206IHZhbCB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybiQyKFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJpbmplY3RcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgICAgICAgIFwiYnV0IGdvdCBcIi5jb25jYXQodG9SYXdUeXBlKGluamVjdCksIFwiLlwiKSwgdm0pO1xuICAgIH1cbn1cbi8qKlxuICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyQxKG9wdGlvbnMpIHtcbiAgICB2YXIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgICBpZiAoZGlycykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgICAgICAgdmFyIGRlZiA9IGRpcnNba2V5XTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZikpIHtcbiAgICAgICAgICAgICAgICBkaXJzW2tleV0gPSB7IGJpbmQ6IGRlZiwgdXBkYXRlOiBkZWYgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUobmFtZSwgdmFsdWUsIHZtKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB3YXJuJDIoXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIpICtcbiAgICAgICAgICAgIFwiYnV0IGdvdCBcIi5jb25jYXQodG9SYXdUeXBlKHZhbHVlKSwgXCIuXCIpLCB2bSk7XG4gICAgfVxufVxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZCwgdm0pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjaGVja0NvbXBvbmVudHMoY2hpbGQpO1xuICAgIH1cbiAgICBpZiAoaXNGdW5jdGlvbihjaGlsZCkpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gICAgfVxuICAgIG5vcm1hbGl6ZVByb3BzKGNoaWxkLCB2bSk7XG4gICAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gICAgbm9ybWFsaXplRGlyZWN0aXZlcyQxKGNoaWxkKTtcbiAgICAvLyBBcHBseSBleHRlbmRzIGFuZCBtaXhpbnMgb24gdGhlIGNoaWxkIG9wdGlvbnMsXG4gICAgLy8gYnV0IG9ubHkgaWYgaXQgaXMgYSByYXcgb3B0aW9ucyBvYmplY3QgdGhhdCBpc24ndFxuICAgIC8vIHRoZSByZXN1bHQgb2YgYW5vdGhlciBtZXJnZU9wdGlvbnMgY2FsbC5cbiAgICAvLyBPbmx5IG1lcmdlZCBvcHRpb25zIGhhcyB0aGUgX2Jhc2UgcHJvcGVydHkuXG4gICAgaWYgKCFjaGlsZC5fYmFzZSkge1xuICAgICAgICBpZiAoY2hpbGQuZXh0ZW5kcykge1xuICAgICAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQuZXh0ZW5kcywgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0ge307XG4gICAgdmFyIGtleTtcbiAgICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgICAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgICAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtZXJnZUZpZWxkKGtleSkge1xuICAgICAgICB2Y
13835XIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0KG9wdGlvbnMsIHR5cGUsIGlkLCB3YXJuTWlzc2luZykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gICAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgICBpZiAoaGFzT3duKGFzc2V0cywgaWQpKVxuICAgICAgICByZXR1cm4gYXNzZXRzW2lkXTtcbiAgICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gICAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSlcbiAgICAgICAgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF07XG4gICAgdmFyIFBhc2NhbENhc2VJZCA9IGNhcGl0YWxpemUoY2FtZWxpemVkSWQpO1xuICAgIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKVxuICAgICAgICByZXR1cm4gYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gICAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gICAgdmFyIHJlcyA9IGFzc2V0c1tpZF0gfHwgYXNzZXRzW2NhbWVsaXplZElkXSB8fCBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgICAgIHdhcm4kMignRmFpbGVkIHRvIHJlc29sdmUgJyArIHR5cGUuc2xpY2UoMCwgLTEpICsgJzogJyArIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSwgdm0pIHtcbiAgICB2YXIgcHJvcCA9IHByb3BPcHRpb25zW2tleV07XG4gICAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAgIC8vIGJvb2xlYW4gY2FzdGluZ1xuICAgIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICAgICAgaWYgKGFic2VudCAmJiAhaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBoeXBoZW5hdGUoa2V5KSkge1xuICAgICAgICAgICAgLy8gb25seSBjYXN0IGVtcHR5IHN0cmluZyAvIHNhbWUgbmFtZSB0byBib29sZWFuIGlmXG4gICAgICAgICAgICAvLyBib29sZWFuIGhhcyBoaWdoZXIgcHJpb3JpdHlcbiAgICAgICAgICAgIHZhciBzdHJpbmdJbmRleCA9IGdldFR5cGVJbmRleChTdHJpbmcsIHByb3AudHlwZSk7XG4gICAgICAgICAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IGJvb2xlYW5JbmRleCA8IHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIG9ic2VydmUgaXQuXG4gICAgICAgIHZhciBwcmV2U2hvdWxkT2JzZXJ2ZSA9IHNob3VsZE9ic2VydmU7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyh0cnVlKTtcbiAgICAgICAgb2JzZXJ2ZSh2YWx1ZSk7XG4gICAgICAgIHRvZ2dsZU9ic2VydmluZyhwcmV2U2hvdWxkT2JzZXJ2ZSk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSh2bSwgcHJvcCwga2V5KSB7XG4gICAgLy8gbm8gZGVmYXVsdCwgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgICAvLyB3YXJuIGFnYWluc3Qgbm9uLWZhY3RvcnkgZGVmYXVsdHMgZm9yIE9iamVjdCAmIEFycmF5XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNPYmplY3QoZGVmKSkge1xuICAgICAgICB3YXJuJDIoJ0ludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgcHJvcCBcIicgK1xuICAgICAgICAgICAga2V5ICtcbiAgICAgICAgICAgICdcIjogJyArXG4gICAgICAgICAgICAnUHJvcHMgd2l0aCB0eXBlIE9iamVjdC9BcnJheSBtdXN0IHVzZSBhIGZhY3RvcnkgZnVuY3Rpb24gJyArXG4gICAgICAgICAgICAndG8gcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlLicsIHZtKTtcbiAgICB9XG4gICAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgICBpZiAodm0gJiZcbiAgICAgICAgdm0uJG9wdGlvbnMucHJvcHNEYXRhICYmXG4gICAgICAgI
13835HZtLiRvcHRpb25zLnByb3BzRGF0YVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdm0uX3Byb3BzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdm0uX3Byb3BzW2tleV07XG4gICAgfVxuICAgIC8vIGNhbGwgZmFjdG9yeSBmdW5jdGlvbiBmb3Igbm9uLUZ1bmN0aW9uIHR5cGVzXG4gICAgLy8gYSB2YWx1ZSBpcyBGdW5jdGlvbiBpZiBpdHMgcHJvdG90eXBlIGlzIGZ1bmN0aW9uIGV2ZW4gYWNyb3NzIGRpZmZlcmVudCBleGVjdXRpb24gY29udGV4dFxuICAgIHJldHVybiBpc0Z1bmN0aW9uKGRlZikgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgICAgID8gZGVmLmNhbGwodm0pXG4gICAgICAgIDogZGVmO1xufVxuLyoqXG4gKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFByb3AocHJvcCwgbmFtZSwgdmFsdWUsIHZtLCBhYnNlbnQpIHtcbiAgICBpZiAocHJvcC5yZXF1aXJlZCAmJiBhYnNlbnQpIHtcbiAgICAgICAgd2FybiQyKCdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLCB2bSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09IG51bGwgJiYgIXByb3AucmVxdWlyZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdHlwZSA9IHByb3AudHlwZTtcbiAgICB2YXIgdmFsaWQgPSAhdHlwZSB8fCB0eXBlID09PSB0cnVlO1xuICAgIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgaWYgKCFpc0FycmF5KHR5cGUpKSB7XG4gICAgICAgICAgICB0eXBlID0gW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZS5sZW5ndGggJiYgIXZhbGlkOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBhc3NlcnRlZFR5cGUgPSBhc3NlcnRUeXBlKHZhbHVlLCB0eXBlW2ldLCB2bSk7XG4gICAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICAgICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgaGF2ZUV4cGVjdGVkVHlwZXMgPSBleHBlY3RlZFR5cGVzLnNvbWUoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH0pO1xuICAgIGlmICghdmFsaWQgJiYgaGF2ZUV4cGVjdGVkVHlwZXMpIHtcbiAgICAgICAgd2FybiQyKGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksIHZtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdmFsaWRhdG9yID0gcHJvcC52YWxpZGF0b3I7XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICBpZiAoIXZhbGlkYXRvcih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHdhcm4kMignSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsIHZtKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbnZhciBzaW1wbGVDaGVja1JFID0gL14oU3RyaW5nfE51bWJlcnxCb29sZWFufEZ1bmN0aW9ufFN5bWJvbHxCaWdJbnQpJC87XG5mdW5jdGlvbiBhc3NlcnRUeXBlKHZhbHVlLCB0eXBlLCB2bSkge1xuICAgIHZhciB2YWxpZDtcbiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gZ2V0VHlwZSh0eXBlKTtcbiAgICBpZiAoc2ltcGxlQ2hlY2tSRS50ZXN0KGV4cGVjdGVkVHlwZSkpIHtcbiAgICAgICAgdmFyIHQgPSB0eXBlb2YgdmFsdWU7XG4gICAgICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIC8vIGZvciBwcmltaXRpdmUgd3JhcHBlciBvYmplY3RzXG4gICAgICAgIGlmICghdmFsaWQgJiYgdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICAgICAgdmFsaWQgPSBpc1BsYWluT2JqZWN0KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnQXJyYXknKSB7XG4gICAgICAgIHZhbGlkID0gaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsaWQgPSB2YWx1ZSBpbnN0YW5jZW9mIHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdhcm4kMignSW52YWxpZCBwcm9wIHR5cGU6IFwiJyArIFN0cmluZyh0eXBlKSArICdcIiBpcyBub3QgYSBjb25zdHJ1Y3RvcicsIHZtKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IHZhbGlkLFxuICAgICAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICAgIH07XG59XG52YXIgZnVuY3Rpb25UeXBlQ2hlY2tSRSA9IC9eXFxzKmZ1bmN0aW9uIChcXHcrKS87XG4vKipcbiAqIFVzZSBmdW5jdGlvbiBzdHJpbmcgbmFtZSB0byBjaGVjayBidWlsdC1pbiB0eXBlcyxcbiAqIGJlY2F1c2UgYSBzaW1wbGUgZXF1YWxpdHkgY2hlY2sgd2lsbCBmYWlsIHdoZW4gcnVubmluZ1xuICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICovXG5mdW5jdGlvbiBnZXRUeXBlKGZuKSB7XG4gICAgdmFyIG1hdGNoID0gZm4gJiYgZm4udG9TdHJpbmcoKS5tYXRjaChmdW5jdGlvblR5cGVDaGVja1JFKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnO1xufVxuZnVuY3Rpb24gaXNTYW1lVHlwZShhLCBiKSB7XG4gICAgcmV0dXJuIGdldFR5cGUoYSkgPT09IGdldFR5cGUoYik7XG59XG5mdW5jdGlvbiBnZXRUeXBlSW5kZXgodHlwZSwgZXhwZWN0ZWRUeXBlcykge1xuICAgIGlmICghaXNBcnJheShleHBlY3RlZFR5cGVzKSkge1xuICAgICAgICByZXR1cm4gaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzLCB0eXBlKSA/IDAgOiAtMTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV4cGVjdGVkVHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlc1tpXSwgdHlwZSkpIHtcbiAgICAgICAgICAgI
13835HJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xuICAgIHZhciBtZXNzYWdlID0gXCJJbnZhbGlkIHByb3A6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBwcm9wIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLlwiKSArXG4gICAgICAgIFwiIEV4cGVjdGVkIFwiLmNvbmNhdChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gZXhwZWN0ZWRUeXBlc1swXTtcbiAgICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNwZWNpZnkgZXhwZWN0ZWQgdmFsdWVcbiAgICBpZiAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcbiAgICAgICAgaXNFeHBsaWNhYmxlKHR5cGVvZiB2YWx1ZSkgJiZcbiAgICAgICAgIWlzQm9vbGVhbihleHBlY3RlZFR5cGUsIHJlY2VpdmVkVHlwZSkpIHtcbiAgICAgICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiLmNvbmNhdChzdHlsZVZhbHVlKHZhbHVlLCBleHBlY3RlZFR5cGUpKTtcbiAgICB9XG4gICAgbWVzc2FnZSArPSBcIiwgZ290IFwiLmNvbmNhdChyZWNlaXZlZFR5cGUsIFwiIFwiKTtcbiAgICAvLyBjaGVjayBpZiB3ZSBuZWVkIHRvIHNwZWNpZnkgcmVjZWl2ZWQgdmFsdWVcbiAgICBpZiAoaXNFeHBsaWNhYmxlKHJlY2VpdmVkVHlwZSkpIHtcbiAgICAgICAgbWVzc2FnZSArPSBcIndpdGggdmFsdWUgXCIuY29uY2F0KHN0eWxlVmFsdWUodmFsdWUsIHJlY2VpdmVkVHlwZSksIFwiLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG59XG5mdW5jdGlvbiBzdHlsZVZhbHVlKHZhbHVlLCB0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdTdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIlwiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KE51bWJlcih2YWx1ZSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHZhbHVlKTtcbiAgICB9XG59XG52YXIgRVhQTElDQUJMRV9UWVBFUyA9IFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ107XG5mdW5jdGlvbiBpc0V4cGxpY2FibGUodmFsdWUpIHtcbiAgICByZXR1cm4gRVhQTElDQUJMRV9UWVBFUy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBlbGVtOyB9KTtcbn1cbmZ1bmN0aW9uIGlzQm9vbGVhbigpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gZWxlbS50b0xvd2VyQ2FzZSgpID09PSAnYm9vbGVhbic7IH0pO1xufVxuXG5mdW5jdGlvbiBWdWUob3B0aW9ucykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICEodGhpcyBpbnN0YW5jZW9mIFZ1ZSkpIHtcbiAgICAgICAgd2FybiQyKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gICAgfVxuICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG59XG4vL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXG5pbml0TWl4aW4kMShWdWUpO1xuLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxuc3RhdGVNaXhpbihWdWUpO1xuLy9AdHMtZXhwZWN0LWVycm9yIFZ1ZSBoYXMgZnVuY3Rpb24gdHlwZVxuZXZlbnRzTWl4aW4oVnVlKTtcbi8vQHRzLWV4cGVjdC1lcnJvciBWdWUgaGFzIGZ1bmN0aW9uIHR5cGVcbmxpZmVjeWNsZU1peGluKFZ1ZSk7XG4vL0B0cy1leHBlY3QtZXJyb3IgVnVlIGhhcyBmdW5jdGlvbiB0eXBlXG5yZW5kZXJNaXhpbihWdWUpO1xuXG5mdW5jdGlvbiBpbml0VXNlKFZ1ZSkge1xuICAgIFZ1ZS51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICAgIHZhciBpbnN0YWxsZWRQbHVnaW5zID0gdGhpcy5faW5zdGFsbGVkUGx1Z2lucyB8fCAodGhpcy5faW5zdGFsbGVkUGx1Z2lucyA9IFtdKTtcbiAgICAgICAgaWYgKGluc3RhbGxlZFBsdWdpbnMuaW5kZXhPZihwbHVnaW4pID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAgICB2Y
13835XIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgYXJncy51bnNoaWZ0KHRoaXMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihwbHVnaW4uaW5zdGFsbCkpIHtcbiAgICAgICAgICAgIHBsdWdpbi5pbnN0YWxsLmFwcGx5KHBsdWdpbiwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNGdW5jdGlvbihwbHVnaW4pKSB7XG4gICAgICAgICAgICBwbHVnaW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluaXRNaXhpbihWdWUpIHtcbiAgICBWdWUubWl4aW4gPSBmdW5jdGlvbiAobWl4aW4pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbml0RXh0ZW5kKFZ1ZSkge1xuICAgIC8qKlxuICAgICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgICAqIGNpZC4gVGhpcyBlbmFibGVzIHVzIHRvIGNyZWF0ZSB3cmFwcGVkIFwiY2hpbGRcbiAgICAgKiBjb25zdHJ1Y3RvcnNcIiBmb3IgcHJvdG90eXBhbCBpbmhlcml0YW5jZSBhbmQgY2FjaGUgdGhlbS5cbiAgICAgKi9cbiAgICBWdWUuY2lkID0gMDtcbiAgICB2YXIgY2lkID0gMTtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgICAqL1xuICAgIFZ1ZS5leHRlbmQgPSBmdW5jdGlvbiAoZXh0ZW5kT3B0aW9ucykge1xuICAgICAgICBleHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICAgICAgdmFyIFN1cGVySWQgPSBTdXBlci5jaWQ7XG4gICAgICAgIHZhciBjYWNoZWRDdG9ycyA9IGV4dGVuZE9wdGlvbnMuX0N0b3IgfHwgKGV4dGVuZE9wdGlvbnMuX0N0b3IgPSB7fSk7XG4gICAgICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShleHRlbmRPcHRpb25zKSB8fCBnZXRDb21wb25lbnROYW1lKFN1cGVyLm9wdGlvbnMpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBuYW1lKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIFN1YiA9IGZ1bmN0aW9uIFZ1ZUNvbXBvbmVudChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgICAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgICAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgICAgICBTdWIuY2lkID0gY2lkKys7XG4gICAgICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFN1cGVyLm9wdGlvbnMsIGV4dGVuZE9wdGlvbnMpO1xuICAgICAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcbiAgICAgICAgLy8gRm9yIHByb3BzIGFuZCBjb21wdXRlZCBwcm9wZXJ0aWVzLCB3ZSBkZWZpbmUgdGhlIHByb3h5IGdldHRlcnMgb25cbiAgICAgICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAgICAgLy8gYXZvaWRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxscyBmb3IgZWFjaCBpbnN0YW5jZSBjcmVhdGVkLlxuICAgICAgICBpZiAoU3ViLm9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgICAgIGluaXRQcm9wcyhTdWIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChTdWIub3B0aW9ucy5jb21wdXRlZCkge1xuICAgICAgICAgICAgaW5pdENvbXB1dGVkKFN1Yik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgICAgIFN1Yi5leHRlbmQgPSBTdXBlci5leHRlbmQ7XG4gICAgICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGluO1xuICAgICAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuICAgICAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICAgICAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgICAgU3ViW3R5cGVdID0gU3VwZXJbdHlwZV07XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBTdWIub3B0aW9ucy5jb21wb25lbnRzW25hbWVdID0gU3ViO1xuICAgICAgICB9XG4gICAgICAgIC8vIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyIG9wdGlvbnMgYXQgZXh0ZW5zaW9uIHRpbWUuXG4gICAgICAgIC8vIGxhdGVyIGF0IGluc3RhbnRpYXRpb24gd2UgY2FuIGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXG4gICAgICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICAgICAgU3ViLnN1cGVyT3B0aW9ucyA9IFN1cGVyLm9wdGlvbnM7XG4gICAgICAgIFN1Yi5leHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucztcbiAgICAgICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcbiAgICAgICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICAgICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgICAgIHJldHVybiBTdWI7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluaXRQcm9wcyhDb21wKSB7XG4gICAgdmFyIHByb3BzID0gQ29tcC5vcHRpb25zLnByb3BzO1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBwcm94eShDb21wLnByb3RvdHlwZSwgXCJfcHJvcHNcIiwga2V5KTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQoQ29tcCkge1xuICAgIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICAgICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFzc2V0IHJlZ2lzdHJhdGlvbiBtZXRob2RzLlxuICAgICAqL1xuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmdW5jdGlvbiBpcyBub3QgZXhhY3Qgc2FtZSB0eXBlXG4gICAgICAgIFZ1ZVt0eXBlXSA9IGZ1bmN0aW9uIChpZCwgZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtp
13835ZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBvbmVudCcgJiYgaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24ubmFtZSA9IGRlZmluaXRpb24ubmFtZSB8fCBpZDtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZGlyZWN0aXZlJyAmJiBpc0Z1bmN0aW9uKGRlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24gPSB7IGJpbmQ6IGRlZmluaXRpb24sIHVwZGF0ZTogZGVmaW5pdGlvbiB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdID0gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2dldENvbXBvbmVudE5hbWUob3B0cykge1xuICAgIHJldHVybiBvcHRzICYmIChnZXRDb21wb25lbnROYW1lKG9wdHMuQ3Rvci5vcHRpb25zKSB8fCBvcHRzLnRhZyk7XG59XG5mdW5jdGlvbiBtYXRjaGVzKHBhdHRlcm4sIG5hbWUpIHtcbiAgICBpZiAoaXNBcnJheShwYXR0ZXJuKSkge1xuICAgICAgICByZXR1cm4gcGF0dGVybi5pbmRleE9mKG5hbWUpID4gLTE7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gcGF0dGVybi5zcGxpdCgnLCcpLmluZGV4T2YobmFtZSkgPiAtMTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdChuYW1lKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBwcnVuZUNhY2hlKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgICB2YXIgY2FjaGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5jYWNoZSwga2V5cyA9IGtlZXBBbGl2ZUluc3RhbmNlLmtleXMsIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gY2FjaGUpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gY2FjaGVba2V5XTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICB2Y
13835XIgbmFtZV8xID0gZW50cnkubmFtZTtcbiAgICAgICAgICAgIGlmIChuYW1lXzEgJiYgIWZpbHRlcihuYW1lXzEpKSB7XG4gICAgICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgY3VycmVudCkge1xuICAgIHZhciBlbnRyeSA9IGNhY2hlW2tleV07XG4gICAgaWYgKGVudHJ5ICYmICghY3VycmVudCB8fCBlbnRyeS50YWcgIT09IGN1cnJlbnQudGFnKSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGNhbiBiZSB1bmRlZmluZWRcbiAgICAgICAgZW50cnkuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgICB9XG4gICAgY2FjaGVba2V5XSA9IG51bGw7XG4gICAgcmVtb3ZlJDIoa2V5cywga2V5KTtcbn1cbnZhciBwYXR0ZXJuVHlwZXMgPSBbU3RyaW5nLCBSZWdFeHAsIEFycmF5XTtcbi8vIFRPRE8gZGVmaW5lQ29tcG9uZW50XG52YXIgS2VlcEFsaXZlID0ge1xuICAgIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgICBhYnN0cmFjdDogdHJ1ZSxcbiAgICBwcm9wczoge1xuICAgICAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgICAgIGV4Y2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICAgICAgbWF4OiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGNhY2hlVk5vZGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGNhY2hlID0gX2EuY2FjaGUsIGtleXMgPSBfYS5rZXlzLCB2bm9kZVRvQ2FjaGUgPSBfYS52bm9kZVRvQ2FjaGUsIGtleVRvQ2FjaGUgPSBfYS5rZXlUb0NhY2hlO1xuICAgICAgICAgICAgaWYgKHZub2RlVG9DYWNoZSkge1xuICAgICAgICAgICAgICAgIHZhciB0YWcgPSB2bm9kZVRvQ2FjaGUudGFnLCBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlVG9DYWNoZS5jb21wb25lbnRJbnN0YW5jZSwgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlVG9DYWNoZS5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgICAgICAgIGNhY2hlW2tleVRvQ2FjaGVdID0ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgdGFnOiB0YWcsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBjb21wb25lbnRJbnN0YW5jZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleVRvQ2FjaGUpO1xuICAgICAgICAgICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgICAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy52bm9kZVRvQ2FjaGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLmtleXMgPSBbXTtcbiAgICB9LFxuICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2Y
13835XIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLmNhY2hlVk5vZGUoKTtcbiAgICAgICAgdGhpcy4kd2F0Y2goJ2luY2x1ZGUnLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBwcnVuZUNhY2hlKF90aGlzLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcHJ1bmVDYWNoZShfdGhpcywgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICFtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jYWNoZVZOb2RlKCk7XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNsb3QgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgICAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgICAgICB2YXIgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgIGlmIChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICAgICAgICB2YXIgbmFtZV8yID0gX2dldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpbmNsdWRlID0gX2EuaW5jbHVkZSwgZXhjbHVkZSA9IF9hLmV4Y2x1ZGU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgICAgIChpbmNsdWRlICYmICghbmFtZV8yIHx8ICFtYXRjaGVzKGluY2x1ZGUsIG5hbWVfMikpKSB8fFxuICAgICAgICAgICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgICAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZV8yICYmIG1hdGNoZXMoZXhjbHVkZSwgbmFtZV8yKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2Y
13835XIgX2IgPSB0aGlzLCBjYWNoZSA9IF9iLmNhY2hlLCBrZXlzID0gX2Iua2V5cztcbiAgICAgICAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXkgPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gLy8gc2FtZSBjb25zdHJ1Y3RvciBtYXkgZ2V0IHJlZ2lzdGVyZWQgYXMgZGlmZmVyZW50IGxvY2FsIGNvbXBvbmVudHNcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnRhZyA/IFwiOjpcIi5jb25jYXQoY29tcG9uZW50T3B0aW9ucy50YWcpIDogJycpXG4gICAgICAgICAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICAgICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICAgICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY2FjaGVba2V5XS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgICAgICAgICAgcmVtb3ZlJDIoa2V5cywga2V5KTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlbGF5IHNldHRpbmcgdGhlIGNhY2hlIHVudGlsIHVwZGF0ZVxuICAgICAgICAgICAgICAgIHRoaXMudm5vZGVUb0NhY2hlID0gdm5vZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlUb0NhY2hlID0ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBjYW4gdm5vZGUuZGF0YSBjYW4gYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pO1xuICAgIH1cbn07XG5cbnZhciBidWlsdEluQ29tcG9uZW50cyA9IHtcbiAgICBLZWVwQWxpdmU6IEtlZXBBbGl2ZVxufTtcblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSShWdWUpIHtcbiAgICAvLyBjb25maWdcbiAgICB2YXIgY29uZmlnRGVmID0ge307XG4gICAgY29uZmlnRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZzsgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2FybiQyKCdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLicpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcbiAgICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgICAvLyB0aGVtIHVubGVzcyB5b3UgYXJlIGF3YXJlIG9mIHRoZSByaXNrLlxuICAgIFZ1ZS51dGlsID0ge1xuICAgICAgICB3YXJuOiB3YXJuJDIsXG4gICAgICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgICAgICBtZXJnZU9wdGlvbnM6IG1lcmdlT3B0aW9ucyxcbiAgICAgICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlXG4gICAgfTtcbiAgICBWdWUuc2V0ID0gc2V0O1xuICAgIFZ1ZS5kZWxldGUgPSBkZWw7XG4gICAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG4gICAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gICAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIG9ic2VydmUob2JqKTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICAgIFZ1ZS5vcHRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIFZ1ZS5vcHRpb25zW3R5cGUgKyAncyddID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9KTtcbiAgICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gICAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gICAgVnVlLm9wdGlvbnMuX2Jhc2UgPSBWdWU7XG4gICAgZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIGJ1aWx0SW5Db21wb25lbnRzKTtcbiAgICBpbml0VXNlKFZ1ZSk7XG4gICAgaW5pdE1peGluKFZ1ZSk7XG4gICAgaW5pdEV4dGVuZChWdWUpO1xuICAgIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xufVxuXG5pbml0R2xvYmFsQVBJKFZ1ZSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgICBnZXQ6IGlzU2VydmVyUmVuZGVyaW5nXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0O1xuICAgIH1cbn0pO1xuLy8gZXhwb3NlIEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0IGZvciBzc3IgcnVudGltZSBoZWxwZXIgaW5zdGFsbGF0aW9uXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnRnVuY3Rpb25hbFJlbmRlckNvbnRleHQnLCB7XG4gICAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblZ1ZS52ZXJzaW9uID0gdmVyc2lvbjtcblxuLy8gdGhlc2UgYXJlIHJlc2VydmVkIGZvciB3ZWIgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3RseSBjb21waWxlZCBhd2F5XG4vLyBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbnZhciBpc1Jlc2VydmVkQXR0ciA9IG1ha2VNYXAoJ3N0eWxlLGNsYXNzJyk7XG4vLyBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIHVzaW5nIHByb3BzIGZvciBiaW5kaW5nXG52YXIgYWNjZXB0VmFsdWUgPSBtYWtlTWFwKCdpbnB1dCx0ZXh0YXJlYSxvcHRpb24sc2VsZWN0LHByb2dyZXNzJyk7XG52YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gICAgcmV0dXJuICgoYXR0ciA9PT0gJ3ZhbHVlJyAmJiBhY2NlcHRWYWx1ZSh0YWcpICYmIHR5cGUgIT09ICdidXR0b24nKSB8fFxuICAgICAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgICAgICAoYXR0ciA9PT0gJ2NoZWNrZWQnICYmIHRhZyA9PT0gJ2lucHV0JykgfHxcbiAgICAgICAgKGF0dHIgPT09ICdtdXRlZCcgJiYgdGFnID09PSAndmlkZW8nKSk7XG59O1xudmFyIGlzRW51bWVyYXRlZEF0dHIgPSBtYWtlTWFwKCdjb250ZW50ZWRpdGFibGUsZHJhZ2dhYmxlLHNwZWxsY2hlY2snKTtcbnZhciBpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUgPSBtYWtlTWFwKCdldmVudHMsY2FyZXQsdHlwaW5nLHBsYWludGV4dC1vbmx
138355Jyk7XG52YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpIHx8IHZhbHVlID09PSAnZmFsc2UnXG4gICAgICAgID8gJ2ZhbHNlJ1xuICAgICAgICA6IC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgICAgICAga2V5ID09PSAnY29udGVudGVkaXRhYmxlJyAmJiBpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUodmFsdWUpXG4gICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgIDogJ3RydWUnO1xufTtcbnZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcCgnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgICAnZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLCcgK1xuICAgICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAgICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAgICdyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsJyArXG4gICAgJ3RydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGUnKTtcbnZhciB4bGlua05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnO1xudmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBuYW1lLmNoYXJBdCg1KSA9PT0gJzonICYmIG5hbWUuc2xpY2UoMCwgNSkgPT09ICd4bGluayc7XG59O1xudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6ICcnO1xufTtcbnZhciBpc0ZhbHN5QXR0clZhbHVlID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlO1xufTtcblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSkge1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoaXNEZWYoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhKSB7XG4gICAgICAgICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoY2hpbGROb2RlLmRhdGEsIGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcGFyZW50Tm9kZS5wYXJlbnQgbm90IFZOb2RlV2l0aERhdGFcbiAgICB3aGlsZSAoaXNEZWYoKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpKSB7XG4gICAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpO1xufVxuZnVuY3Rpb24gbWVyZ2VDbGFzc0RhdGEoY2hpbGQsIHBhcmVudCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgICAgIGNsYXNzOiBpc0RlZihjaGlsZC5jbGFzcykgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc10gOiBwYXJlbnQuY2xhc3NcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVuZGVyQ2xhc3Moc3RhdGljQ2xhc3MsIGR5bmFtaWNDbGFzcykge1xuICAgIGlmIChpc0RlZihzdGF0aWNDbGFzcykgfHwgaXNEZWYoZHluYW1pY0NsYXNzKSkge1xuICAgICAgICByZXR1cm4gY29uY2F0KHN0YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBjb25jYXQoYSwgYikge1xuICAgIHJldHVybiBhID8gKGIgPyBhICsgJyAnICsgYiA6IGEpIDogYiB8fCAnJztcbn1cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlBcnJheSh2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlBcnJheSh2YWx1ZSkge1xuICAgIHZhciByZXMgPSAnJztcbiAgICB2YXIgc3RyaW5naWZpZWQ7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaWYgKGlzRGVmKChzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkpICYmIHN0cmluZ2lmaWVkICE9PSAnJykge1xuICAgICAgICAgICAgaWYgKHJlcylcbiAgICAgICAgICAgICAgICByZXMgKz0gJyAnO1xuICAgICAgICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QodmFsdWUpIHtcbiAgICB2YXIgcmVzID0gJyc7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZVtrZXldKSB7XG4gICAgICAgICAgICBpZiAocmVzKVxuICAgICAgICAgICAgICAgI
13835HJlcyArPSAnICc7XG4gICAgICAgICAgICByZXMgKz0ga2V5O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbnZhciBuYW1lc3BhY2VNYXAgPSB7XG4gICAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAgIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xufTtcbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKCdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLCcgK1xuICAgICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAgICdzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbywnICtcbiAgICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAgICdidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLCcgK1xuICAgICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAgICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXG4gICAgJ2NvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QnKTtcbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgICAnZm9yZWlnbm9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4sJyArXG4gICAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLCB0cnVlKTtcbnZhciBpc1ByZVRhZyA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHRhZyA9PT0gJ3ByZSc7IH07XG52YXIgaXNSZXNlcnZlZFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICByZXR1cm4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkcodGFnKTtcbn07XG5mdW5jdGlvbiBnZXRUYWdOYW1lc3BhY2UodGFnKSB7XG4gICAgaWYgKGlzU1ZHKHRhZykpIHtcbiAgICAgICAgcmV0dXJuICdzdmcnO1xuICAgIH1cbiAgICAvLyBiYXNpYyBzdXBwb3J0IGZvciBNYXRoTUxcbiAgICAvLyBub3RlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdGhlciBNYXRoTUwgZWxlbWVudHMgYmVpbmcgY29tcG9uZW50IHJvb3RzXG4gICAgaWYgKHRhZyA9PT0gJ21hdGgnKSB7XG4gICAgICAgIHJldHVybiAnbWF0aCc7XG4gICAgfVxufVxudmFyIHVua25vd25FbGVtZW50Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCh0YWcpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWluQnJvd3Nlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5rbm93bkVsZW1lbnRDYWNoZVt0YWddO1xuICAgIH1cbiAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgaWYgKHRhZy5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddID1cbiAgICAgICAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTFVua25vd25FbGVtZW50IHx8XG4gICAgICAgICAgICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IC9IVE1MVW5rbm93bkVsZW1lbnQvLnRlc3QoZWwudG9TdHJpbmcoKSkpO1xuICAgIH1cbn1cbnZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4vKipcbiAqIFF1ZXJ5IGFuIGVsZW1lbnQgc2VsZWN0b3IgaWYgaXQncyBub3QgYW4gZWxlbWVudCBhbHJlYWR5LlxuICovXG5mdW5jdGlvbiBxdWVyeShlbCkge1xuICAgIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4kMignQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsKTtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZWw7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHZub2RlKSB7XG4gICAgdmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gICAgaWYgKHRhZ05hbWUgIT09ICdzZWxlY3QnKSB7XG4gICAgICAgI
13835HJldHVybiBlbG07XG4gICAgfVxuICAgIC8vIGZhbHNlIG9yIG51bGwgd2lsbCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBidXQgdW5kZWZpbmVkIHdpbGwgbm90XG4gICAgaWYgKHZub2RlLmRhdGEgJiZcbiAgICAgICAgdm5vZGUuZGF0YS5hdHRycyAmJlxuICAgICAgICB2bm9kZS5kYXRhLmF0dHJzLm11bHRpcGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWxtLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsbTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZU1hcFtuYW1lc3BhY2VdLCB0YWdOYW1lKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG59XG5mdW5jdGlvbiBjcmVhdGVDb21tZW50KHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KTtcbn1cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XG59XG5mdW5jdGlvbiByZW1vdmVDaGlsZChub2RlLCBjaGlsZCkge1xuICAgIG5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQobm9kZSwgY2hpbGQpIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHBhcmVudE5vZGUobm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XG59XG5mdW5jdGlvbiBuZXh0U2libGluZyhub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG59XG5mdW5jdGlvbiB0YWdOYW1lKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50YWdOYW1lO1xufVxuZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdGV4dCkge1xuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufVxuZnVuY3Rpb24gc2V0U3R5bGVTY29wZShub2RlLCBzY29wZUlkKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoc2NvcGVJZCwgJycpO1xufVxuXG52YXIgbm9kZU9wcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjcmVhdGVFbGVtZW50OiBjcmVhdGVFbGVtZW50LFxuICBjcmVhdGVFbGVtZW50TlM6IGNyZWF0ZUVsZW1lbnROUyxcbiAgY3JlYXRlVGV4dE5vZGU6IGNyZWF0ZVRleHROb2RlLFxuICBjcmVhdGVDb21tZW50OiBjcmVhdGVDb21tZW50LFxuICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgcmVtb3ZlQ2hpbGQ6IHJlbW92ZUNoaWxkLFxuICBhcHBlbmRDaGlsZDogYXBwZW5kQ2hpbGQsXG4gIHBhcmVudE5vZGU6IHBhcmVudE5vZGUsXG4gIG5leHRTaWJsaW5nOiBuZXh0U2libGluZyxcbiAgdGFnTmFtZTogdGFnTmFtZSxcbiAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICBzZXRTdHlsZVNjb3BlOiBzZXRTdHlsZVNjb3BlXG59KTtcblxudmFyIHJlZiA9IHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChfLCB2bm9kZSkge1xuICAgICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUsIHRydWUpO1xuICAgIH1cbn07XG5mdW5jdGlvbiByZWdpc3RlclJlZih2bm9kZSwgaXNSZW1vdmFsKSB7XG4gICAgdmFyIHJlZiA9IHZub2RlLmRhdGEucmVmO1xuICAgIGlmICghaXNEZWYocmVmKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIHJlZlZhbHVlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgfHwgdm5vZGUuZWxtO1xuICAgIHZhciB2YWx1ZSA9IGlzUmVtb3ZhbCA/IG51bGwgOiByZWZWYWx1ZTtcbiAgICB2YXIgJHJlZnNWYWx1ZSA9IGlzUmVtb3ZhbCA/IHVuZGVmaW5lZCA6IHJlZlZhbHVlO1xuICAgIGlmIChpc0Z1bmN0aW9uKHJlZikpIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcocmVmLCB2bSwgW3ZhbHVlXSwgdm0sIFwidGVtcGxhdGUgcmVmIGZ1bmN0aW9uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpc0ZvciA9IHZub2RlLmRhdGEucmVmSW5Gb3I7XG4gICAgdmFyIF9pc1N0cmluZyA9IHR5cGVvZiByZWYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiByZWYgPT09ICdudW1iZXInO1xuICAgIHZhciBfaXNSZWYgPSBpc1JlZihyZWYpO1xuICAgIHZhciByZWZzID0gdm0uJHJlZnM7XG4gICAgaWYgKF9pc1N0cmluZyB8fCBfaXNSZWYpIHtcbiAgICAgICAgaWYgKGlzRm9yKSB7XG4gICAgICAgICAgICB2Y
13835XIgZXhpc3RpbmcgPSBfaXNTdHJpbmcgPyByZWZzW3JlZl0gOiByZWYudmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNSZW1vdmFsKSB7XG4gICAgICAgICAgICAgICAgaXNBcnJheShleGlzdGluZykgJiYgcmVtb3ZlJDIoZXhpc3RpbmcsIHJlZlZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmc1tyZWZdID0gW3JlZlZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNldHVwUmVmKHZtLCByZWYsIHJlZnNbcmVmXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYudmFsdWUgPSBbcmVmVmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFleGlzdGluZy5pbmNsdWRlcyhyZWZWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcucHVzaChyZWZWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF9pc1N0cmluZykge1xuICAgICAgICAgICAgaWYgKGlzUmVtb3ZhbCAmJiByZWZzW3JlZl0gIT09IHJlZlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmc1tyZWZdID0gJHJlZnNWYWx1ZTtcbiAgICAgICAgICAgIHNldFNldHVwUmVmKHZtLCByZWYsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfaXNSZWYpIHtcbiAgICAgICAgICAgIGlmIChpc1JlbW92YWwgJiYgcmVmLnZhbHVlICE9PSByZWZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4kMihcIkludmFsaWQgdGVtcGxhdGUgcmVmIHR5cGU6IFwiLmNvbmNhdCh0eXBlb2YgcmVmKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzZXRTZXR1cFJlZihfYSwga2V5LCB2YWwpIHtcbiAgICB2YXIgX3NldHVwU3RhdGUgPSBfYS5fc2V0dXBTdGF0ZTtcbiAgICBpZiAoX3NldHVwU3RhdGUgJiYgaGFzT3duKF9zZXR1cFN0YXRlLCBrZXkpKSB7XG4gICAgICAgIGlmIChpc1JlZihfc2V0dXBTdGF0ZVtrZXldKSkge1xuICAgICAgICAgICAgX3NldHVwU3RhdGVba2V5XS52YWx1ZSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF9zZXR1cFN0YXRlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogVmlydHVhbCBET00gcGF0Y2hpbmcgYWxnb3JpdGhtIGJhc2VkIG9uIFNuYWJiZG9tIGJ5XG4gKiBTaW1vbiBGcmlpcyBWaW5kdW0gKEBwYWxkZXBpbmQpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxkZXBpbmQvc25hYmJkb20vYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICpcbiAqIE5vdCB0eXBlLWNoZWNraW5nIHRoaXMgYmVjYXVzZSB0aGlzIGZpbGUgaXMgcGVyZi1jcml0aWNhbCBhbmQgdGhlIGNvc3RcbiAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICovXG52YXIgZW1wdHlOb2RlID0gbmV3IFZOb2RlKCcnLCB7fSwgW10pO1xudmFyIGhvb2tzID0gWydjcmVhdGUnLCAnYWN0aXZhdGUnLCAndXBkYXRlJywgJ3JlbW92ZScsICdkZXN0cm95J107XG5mdW5jdGlvbiBzYW1lVm5vZGUoYSwgYikge1xuICAgIHJldHVybiAoYS5rZXkgPT09IGIua2V5ICYmXG4gICAgICAgIGEuYXN5bmNGYWN0b3J5ID09PSBiLmFzeW5jRmFjdG9yeSAmJlxuICAgICAgICAoKGEudGFnID09PSBiLnRhZyAmJlxuICAgICAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgICAgICBpc0RlZihhLmRhdGEpID09PSBpc0RlZihiLmRhdGEpICYmXG4gICAgICAgICAgICBzYW1lSW5wdXRUeXBlKGEsIGIpKSB8fFxuICAgICAgICAgICAgKGlzVHJ1ZShhLmlzQXN5bmNQbGFjZWhvbGRlcikgJiYgaXNVbmRlZihiLmFzeW5jRmFjdG9yeS5lcnJvcikpKSk7XG59XG5mdW5jdGlvbiBzYW1lSW5wdXRUeXBlKGEsIGIpIHtcbiAgICBpZiAoYS50YWcgIT09ICdpbnB1dCcpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIHZhciBpO1xuICAgIHZhciB0eXBlQSA9IGlzRGVmKChpID0gYS5kYXRhKSkgJiYgaXNEZWYoKGkgPSBpLmF0dHJzKSkgJiYgaS50eXBlO1xuICAgIHZhciB0eXBlQiA9IGlzRGVmKChpID0gYi5kYXRhKSkgJiYgaXNEZWYoKGkgPSBpLmF0dHJzKSkgJiYgaS50eXBlO1xuICAgIHJldHVybiB0eXBlQSA9PT0gdHlwZUIgfHwgKGlzVGV4dElucHV0VHlwZSh0eXBlQSkgJiYgaXNUZXh0SW5wdXRUeXBlKHR5cGVCKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVLZXlUb09sZElkeChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICAgIHZhciBpLCBrZXk7XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAgICAgIGtleSA9IGNoaWxkcmVuW2ldLmtleTtcbiAgICAgICAgaWYgKGlzRGVmKGtleSkpXG4gICAgICAgICAgICBtYXBba2V5XSA9IGk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG59XG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZ1bmN0aW9uKGJhY2tlbmQpIHtcbiAgICB2YXIgaSwgajtcbiAgICB2YXIgY2JzID0ge307XG4gICAgdmFyIG1vZHVsZXMgPSBiYWNrZW5kLm1vZHVsZXMsIG5vZGVPcHMgPSBiYWNrZW5kLm5vZGVPcHM7XG4gICAgZm9yIChpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IG1vZHVsZXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihtb2R1bGVzW2pdW2hvb2tzW2ldXSkpIHtcbiAgICAgICAgICAgICAgICBjYnNbaG9va3NbaV1dLnB1c2gobW9kdWxlc1tqXVtob29rc1tpXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtcHR5Tm9kZU
13835F0KGVsbSkge1xuICAgICAgICByZXR1cm4gbmV3IFZOb2RlKG5vZGVPcHMudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNlKCksIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVSbUNiKGNoaWxkRWxtLCBsaXN0ZW5lcnMpIHtcbiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICAgICAgaWYgKC0tcmVtb3ZlLmxpc3RlbmVycyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoY2hpbGRFbG0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbW92ZS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgICAgIHJldHVybiByZW1vdmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZU5vZGUoZWwpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGVPcHMucGFyZW50Tm9kZShlbCk7XG4gICAgICAgIC8vIGVsZW1lbnQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZHVlIHRvIHYtaHRtbCAvIHYtdGV4dFxuICAgICAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgICAgICAgbm9kZU9wcy5yZW1vdmVDaGlsZChwYXJlbnQsIGVsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc1Vua25vd25FbGVtZW50KHZub2RlLCBpblZQcmUpIHtcbiAgICAgICAgcmV0dXJuICghaW5WUHJlICYmXG4gICAgICAgICAgICAhdm5vZGUubnMgJiZcbiAgICAgICAgICAgICEoY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICBjb25maWcuaWdub3JlZEVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNSZWdFeHAoaWdub3JlKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh2bm9kZS50YWcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGlnbm9yZSA9PT0gdm5vZGUudGFnO1xuICAgICAgICAgICAgICAgIH0pKSAmJlxuICAgICAgICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodm5vZGUudGFnKSk7XG4gICAgfVxuICAgIHZhciBjcmVhdGluZ0VsbUluVlByZSA9IDA7XG4gICAgZnVuY3Rpb24gY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBuZXN0ZWQsIG93bmVyQXJyYXksIGluZGV4KSB7XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAgICAgICAvLyBUaGlzIHZub2RlIHdhcyB1c2VkIGluIGEgcHJldmlvdXMgcmVuZGVyIVxuICAgICAgICAgICAgLy8gbm93IGl0J3MgdXNlZCBhcyBhIG5ldyBub2RlLCBvdmVyd3JpdGluZyBpdHMgZWxtIHdvdWxkIGNhdXNlXG4gICAgICAgICAgICAvLyBwb3RlbnRpYWwgcGF0Y2ggZXJyb3JzIGRvd24gdGhlIHJvYWQgd2hlbiBpdCdzIHVzZWQgYXMgYW4gaW5zZXJ0aW9uXG4gICAgICAgICAgICAvLyByZWZlcmVuY2Ugbm9kZS4gSW5zdGVhZCwgd2UgY2xvbmUgdGhlIG5vZGUgb24tZGVtYW5kIGJlZm9yZSBjcmVhdGluZ1xuICAgICAgICAgICAgLy8gYXNzb2NpYXRlZCBET00gZWxlbWVudCBmb3IgaXQuXG4gICAgICAgICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdm5vZGUuaXNSb290SW5zZXJ0ID0gIW5lc3RlZDsgLy8gZm9yIHRyYW5zaXRpb24gZW50ZXIgY2hlY2tcbiAgICAgICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICB2YXIgdGFnID0gdm5vZGUudGFnO1xuICAgICAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGluZ0VsbUluVlByZSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNVbmtub3duRWxlbWVudCh2bm9kZSwgY3JlYXRpbmdFbG1JblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMignVW5rbm93biBjdXN0b20gZWxlbWVudDogPCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc+IC0gZGlkIHlvdSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZWdpc3RlciB0aGUgY29tcG9uZW50IGNvcnJlY3RseT8gRm9yIHJlY3Vyc2l2ZSBjb21wb25lbnRzLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsIHZub2RlLmNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZub2RlLmVsbSA9IHZub2RlLm5zXG4gICAgICAgICAgICAgICAgPyBub2RlT3BzLmNyZWF0ZUVsZW1lbnROUyh2bm9kZS5ucywgdGFnKVxuICAgICAgICAgICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1RydWUodm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZSh2bm9kZS50ZXh0KTtcbiAgICAgICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICAgICAgdmFyIGkgPSB2bm9kZS5kYXRhO1xuICAgICAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgICAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gaS5ob29rKSkgJiYgaXNEZWYoKGkgPSBpLmluaXQpKSkge1xuICAgICAgICAgICAgICAgIGkodm5vZGUsIGZhbHNlIC8qIGh5ZHJhdGluZyAqLyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhZnRlciBjYWxsaW5nIHRoZSBpbml0IGhvb2ssIGlmIHRoZSB2bm9kZSBpcyBhIGNoaWxkIGNvbXBvbmVudFxuICAgICAgICAgICAgLy8gaXQgc2hvdWxkJ3ZlIGNyZWF0ZWQgYSBjaGlsZCBpbnN0YW5jZSBhbmQgbW91bnRlZCBpdC4gdGhlIGNoaWxkXG4gICAgICAgICAgICAvLyBjb21wb25lbnQgYWxzbyBoYXMgc2V0IHRoZSBwbGFjZWhvbGRlciB2bm9kZSdzIGVsbS5cbiAgICAgICAgICAgIC8vIGluIHRoYXQgY2FzZSB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIGVsZW1lbnQgYW5kIGJlIGRvbmUuXG4gICAgICAgICAgICBpZiAoaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzVHJ1ZShpc1JlYWN0aXZhdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZWFjdGl2YXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdENvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpKSB7XG4gICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaC5hcHBseShpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCk7XG4gICAgICAgICAgICB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZub2RlLmVsbSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLiRlbDtcbiAgICAgICAgaWYgKGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBzZXRTY29wZSh2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBjb21wb25lbnQgcm9vdC5cbiAgICAgICAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgICAgICAgI
13835HJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0byBpbnZva2UgdGhlIGluc2VydCBob29rXG4gICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgLy8gaGFjayBmb3IgIzQzMzk6IGEgcmVhY3RpdmF0ZWQgY29tcG9uZW50IHdpdGggaW5uZXIgdHJhbnNpdGlvblxuICAgICAgICAvLyBkb2VzIG5vdCB0cmlnZ2VyIGJlY2F1c2UgdGhlIGlubmVyIG5vZGUncyBjcmVhdGVkIGhvb2tzIGFyZSBub3QgY2FsbGVkXG4gICAgICAgIC8vIGFnYWluLiBJdCdzIG5vdCBpZGVhbCB0byBpbnZvbHZlIG1vZHVsZS1zcGVjaWZpYyBsb2dpYyBpbiBoZXJlIGJ1dFxuICAgICAgICAvLyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0LlxuICAgICAgICB2YXIgaW5uZXJOb2RlID0gdm5vZGU7XG4gICAgICAgIHdoaWxlIChpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGlubmVyTm9kZSA9IGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBpbm5lck5vZGUuZGF0YSkpICYmIGlzRGVmKChpID0gaS50cmFuc2l0aW9uKSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmFjdGl2YXRlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNicy5hY3RpdmF0ZVtpXShlbXB0eU5vZGUsIGlubmVyTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKGlubmVyTm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdW5saWtlIGEgbmV3bHkgY3JlYXRlZCBjb21wb25lbnQsXG4gICAgICAgIC8vIGEgcmVhY3RpdmF0ZWQga2VlcC1hbGl2ZSBjb21wb25lbnQgZG9lc24ndCBpbnNlcnQgaXRzZWxmXG4gICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zZXJ0KHBhcmVudCwgZWxtLCByZWYpIHtcbiAgICAgICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihyZWYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVPcHMucGFyZW50Tm9kZShyZWYpID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50LCBlbG0sIHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZChwYXJlbnQsIGVsbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpXzEgPSAwOyBpXzEgPCBjaGlsZHJlbi5sZW5ndGg7ICsraV8xKSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlRWxtKGNoaWxkcmVuW2lfMV0sIGluc2VydGVkVm5vZGVRdWV1ZSwgdm5vZGUuZWxtLCBudWxsLCB0cnVlLCBjaGlsZHJlbiwgaV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1ByaW1pdGl2ZSh2bm9kZS50ZXh0KSkge1xuICAgICAgICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZCh2bm9kZS5lbG0sIG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKHZub2RlLnRleHQpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNQYXRjaGFibGUodm5vZGUpIHtcbiAgICAgICAgd2hpbGUgKHZub2Rl
13835LmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICB2bm9kZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgICAgICBmb3IgKHZhciBpXzIgPSAwOyBpXzIgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpXzIpIHtcbiAgICAgICAgICAgIGNicy5jcmVhdGVbaV8yXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgICAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpXG4gICAgICAgICAgICAgICAgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoaS5pbnNlcnQpKVxuICAgICAgICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxuICAgIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBzcGVjaWFsIGNhc2UgdG8gYXZvaWQgdGhlIG92ZXJoZWFkXG4gICAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICAgIGZ1bmN0aW9uIHNldFNjb3BlKHZub2RlKSB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICBpZiAoaXNEZWYoKGkgPSB2bm9kZS5mblNjb3BlSWQpKSkge1xuICAgICAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2Y
13835XIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGFuY2VzdG9yLmNvbnRleHQpKSAmJiBpc0RlZigoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9yIHNsb3QgY29udGVudCB0aGV5IHNob3VsZCBhbHNvIGdldCB0aGUgc2NvcGVJZCBmcm9tIHRoZSBob3N0IGluc3RhbmNlLlxuICAgICAgICBpZiAoaXNEZWYoKGkgPSBhY3RpdmVJbnN0YW5jZSkpICYmXG4gICAgICAgICAgICBpICE9PSB2bm9kZS5jb250ZXh0ICYmXG4gICAgICAgICAgICBpICE9PSB2bm9kZS5mbkNvbnRleHQgJiZcbiAgICAgICAgICAgIGlzRGVmKChpID0gaS4kb3B0aW9ucy5fc2NvcGVJZCkpKSB7XG4gICAgICAgICAgICBub2RlT3BzLnNldFN0eWxlU2NvcGUodm5vZGUuZWxtLCBpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgICAgICAgIGNyZWF0ZUVsbSh2bm9kZXNbc3RhcnRJZHhdLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBmYWxzZSwgdm5vZGVzLCBzdGFydElkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sodm5vZGUpIHtcbiAgICAgICAgdmFyIGksIGo7XG4gICAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkuZGVzdHJveSkpKVxuICAgICAgICAgICAgICAgIGkodm5vZGUpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKVxuICAgICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKHZub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYoKGkgPSB2bm9kZS5jaGlsZHJlbikpKSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlVm5vZGVzKHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xuICAgICAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICAgICAgICB2Y
13835XIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgICAgICAgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0RlZihjaC50YWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhjaCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUZXh0IG5vZGVcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKHZub2RlLCBybSkge1xuICAgICAgICBpZiAoaXNEZWYocm0pIHx8IGlzRGVmKHZub2RlLmRhdGEpKSB7XG4gICAgICAgICAgICB2YXIgaV8zO1xuICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsgMTtcbiAgICAgICAgICAgIGlmIChpc0RlZihybSkpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgcmVjdXJzaXZlbHkgcGFzc2VkIGRvd24gcm0gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGlzdGVuZXJzIGNvdW50XG4gICAgICAgICAgICAgICAgcm0ubGlzdGVuZXJzICs9IGxpc3RlbmVycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXG4gICAgICAgICAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXG4gICAgICAgICAgICBpZiAoaXNEZWYoKGlfMyA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkgJiZcbiAgICAgICAgICAgICAgICBpc0RlZigoaV8zID0gaV8zLl92bm9kZSkpICYmXG4gICAgICAgICAgICAgICAgaXNEZWYoaV8zLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhpXzMsIHJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaV8zID0gMDsgaV8zIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraV8zKSB7XG4gICAgICAgICAgICAgICAgY2JzLnJlbW92ZVtpXzNdKHZub2RlLCBybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGlfMyA9IHZub2RlLmRhdGEuaG9vaykpICYmIGlzRGVmKChpXzMgPSBpXzMucmVtb3ZlKSkpIHtcbiAgICAgICAgICAgICAgICBpXzModm5vZGUsIHJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4ocGFyZW50RWxtLCBvbGRDaCwgbmV3Q2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSkge1xuICAgICAgICB2Y
13835XIgb2xkU3RhcnRJZHggPSAwO1xuICAgICAgICB2YXIgbmV3U3RhcnRJZHggPSAwO1xuICAgICAgICB2YXIgb2xkRW5kSWR4ID0gb2xkQ2gubGVuZ3RoIC0gMTtcbiAgICAgICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcbiAgICAgICAgdmFyIG9sZEVuZFZub2RlID0gb2xkQ2hbb2xkRW5kSWR4XTtcbiAgICAgICAgdmFyIG5ld0VuZElkeCA9IG5ld0NoLmxlbmd0aCAtIDE7XG4gICAgICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XG4gICAgICAgIHZhciBuZXdFbmRWbm9kZSA9IG5ld0NoW25ld0VuZElkeF07XG4gICAgICAgIHZhciBvbGRLZXlUb0lkeCwgaWR4SW5PbGQsIHZub2RlVG9Nb3ZlLCByZWZFbG07XG4gICAgICAgIC8vIHJlbW92ZU9ubHkgaXMgYSBzcGVjaWFsIGZsYWcgdXNlZCBvbmx5IGJ5IDx0cmFuc2l0aW9uLWdyb3VwPlxuICAgICAgICAvLyB0byBlbnN1cmUgcmVtb3ZlZCBlbGVtZW50cyBzdGF5IGluIGNvcnJlY3QgcmVsYXRpdmUgcG9zaXRpb25zXG4gICAgICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgICAgIHZhciBjYW5Nb3ZlID0gIXJlbW92ZU9ubHk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMobmV3Q2gpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTsgLy8gVm5vZGUgaGFzIGJlZW4gbW92ZWQgbGVmdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIFZub2RlIG1vdmVkIHJpZ2h0XG4gICAgICAgICAgICAgICAgcGF0Y2hWbm9kZShvbGRTdGFydFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3RW5kSWR4KTtcbiAgICAgICAgICAgICAgICBjYW5Nb3ZlICYmXG4gICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRW5kVm5vZGUuZWxtKSk7XG4gICAgICAgICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIFZub2RlIG1vdmVkIGxlZnRcbiAgICAgICAgICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgICAgICAgY2FuTW92ZSAmJlxuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKG9sZEtleVRvSWR4KSlcbiAgICAgICAgICAgICAgICAgICAgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICAgICAgICAgICAgaWR4SW5PbGQgPSBpc0RlZihuZXdTdGFydFZub2RlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgPyBvbGRLZXlUb0lkeFtuZXdTdGFydFZub2RlLmtleV1cbiAgICAgICAgICAgICAgICAgICAgOiBmaW5kSWR4SW5PbGQobmV3U3RhcnRWbm9kZSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGlkeEluT2xkKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBOZXcgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZub2RlVG9Nb3ZlID0gb2xkQ2hbaWR4SW5PbGRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2FtZVZub2RlKHZub2RlVG9Nb3Zl
13835LCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2xkQ2hbaWR4SW5PbGRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuTW92ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIGtleSBidXQgZGlmZmVyZW50IGVsZW1lbnQuIHRyZWF0IGFzIG5ldyBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9sZFN0YXJ0SWR4ID4gb2xkRW5kSWR4KSB7XG4gICAgICAgICAgICByZWZFbG0gPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCArIDFdKSA/IG51bGwgOiBuZXdDaFtuZXdFbmRJZHggKyAxXS5lbG07XG4gICAgICAgICAgICBhZGRWbm9kZXMocGFyZW50RWxtLCByZWZFbG0sIG5ld0NoLCBuZXdTdGFydElkeCwgbmV3RW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICAgICAgICByZW1vdmVWbm9kZXMob2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbikge1xuICAgICAgICB2Y
13835XIgc2VlbktleXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaV80ID0gMDsgaV80IDwgY2hpbGRyZW4ubGVuZ3RoOyBpXzQrKykge1xuICAgICAgICAgICAgdmFyIHZub2RlID0gY2hpbGRyZW5baV80XTtcbiAgICAgICAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoa2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWVuS2V5c1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIkR1cGxpY2F0ZSBrZXlzIGRldGVjdGVkOiAnXCIuY29uY2F0KGtleSwgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5LZXlzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQobm9kZSwgb2xkQ2gsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgZm9yICh2YXIgaV81ID0gc3RhcnQ7IGlfNSA8IGVuZDsgaV81KyspIHtcbiAgICAgICAgICAgIHZhciBjID0gb2xkQ2hbaV81XTtcbiAgICAgICAgICAgIGlmIChpc0RlZihjKSAmJiBzYW1lVm5vZGUobm9kZSwgYykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGlfNTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwYXRjaFZub2RlKG9sZFZub2RlLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBvd25lckFycmF5LCBpbmRleCwgcmVtb3ZlT25seSkge1xuICAgICAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmVsbSkgJiYgaXNEZWYob3duZXJBcnJheSkpIHtcbiAgICAgICAgICAgIC8vIGNsb25lIHJldXNlZCB2bm9kZVxuICAgICAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbG0gPSAodm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtKTtcbiAgICAgICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGUob2xkVm5vZGUuZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgICAgICAvLyBub3RlIHdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgdm5vZGUgaXMgY2xvbmVkIC1cbiAgICAgICAgLy8gaWYgdGhlIG5ldyBub2RlIGlzIG5vdCBjbG9uZWQgaXQgbWVhbnMgdGhlIHJlbmRlciBmdW5jdGlvbnMgaGF2ZSBiZWVuXG4gICAgICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgICAgIGlmIChpc1RydWUodm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICAgICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICAgICAgICB2bm9kZS5rZXkgPT09IG9sZFZub2RlLmtleSAmJlxuICAgICAgICAgICAgKGlzVHJ1ZSh2bm9kZS5pc0Nsb25lZCkgfHwgaXNUcnVlKHZub2RlLmlzT25jZSkpKSB7XG4gICAgICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpO1xuICAgICAgICB2Y
13835XIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5wcmVwYXRjaCkpKSB7XG4gICAgICAgICAgICBpKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9sZENoID0gb2xkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgICAgICBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkudXBkYXRlKSkpXG4gICAgICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICAgICAgICAgIGlmIChvbGRDaCAhPT0gY2gpXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKVxuICAgICAgICAgICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgICAgICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkQ2gpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKG9sZENoLCAwLCBvbGRDaC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgICAgICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvbGRWbm9kZS50ZXh0ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgdm5vZGUudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWYoKGkgPSBkYXRhLmhvb2spKSAmJiBpc0RlZigoaSA9IGkucG9zdHBhdGNoKSkpXG4gICAgICAgICAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sodm5vZGUsIHF1ZXVlLCBpbml0aWFsKSB7XG4gICAgICAgIC8vIGRlbGF5IGluc2VydCBob29rcyBmb3IgY29tcG9uZW50IHJvb3Qgbm9kZXMsIGludm9rZSB0aGVtIGFmdGVyIHRoZVxuICAgICAgICAvLyBlbGVtZW50IGlzIHJlYWxseSBpbnNlcnRlZFxuICAgICAgICBpZiAoaXNUcnVlKGluaXRpYWwpICYmIGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgICAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAodmFyIGlfNiA9IDA7IGlfNiA8IHF1ZXVlLmxlbmd0aDsgKytpXzYpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZVtpXzZdLmRhdGEuaG9vay5pbnNlcnQocXVldWVbaV82XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGh5ZHJhdGlvbkJhaWxlZCA9IGZhbHNlO1xuICAgIC8vIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGNhbiBza2lwIGNyZWF0ZSBob29rIGR1cmluZyBoeWRyYXRpb24gYmVjYXVzZSB0aGV5XG4gICAgLy8gYXJlIGFscmVhZHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCBvciBoYXMgbm8gbmVlZCBmb3IgaW5pdGlhbGl6YXRpb25cbiAgICAvLyBOb3RlOiBzdHlsZSBpcyBleGNsdWRlZCBiZWNhdXNlIGl0IHJlbGllcyBvbiBpbml0aWFsIGNsb25lIGZvciBmdXR1cmVcbiAgICAvLyBkZWVwIHVwZGF0ZXMgKCM3MDYzKS5cbiAgICB2YXIgaXNSZW5kZXJlZE1vZHVsZSA9IG1ha2VNYXAoJ2F0dHJzLGNsYXNzLHN0YXRpY0NsYXNzLHN0YXRpY1N0eWxlLGtleScpO1xuICAgIC8vIE5vdGU6IHRoaXMgaXMgYSBicm93c2VyLW9ubHkgZnVuY3Rpb24gc28gd2UgY2FuIGFzc3VtZSBlbG1zIGFyZSBET00gbm9kZXMuXG4gICAgZnVuY3Rpb24gaHlkcmF0ZShlbG0sIHZub2Rl
13835LCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIHRhZyA9IHZub2RlLnRhZywgZGF0YSA9IHZub2RlLmRhdGEsIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gICAgICAgIGluVlByZSA9IGluVlByZSB8fCAoZGF0YSAmJiBkYXRhLnByZSk7XG4gICAgICAgIHZub2RlLmVsbSA9IGVsbTtcbiAgICAgICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgICAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhc3NlcnQgbm9kZSBtYXRjaFxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKCFhc3NlcnROb2RlTWF0Y2goZWxtLCB2bm9kZSwgaW5WUHJlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEuaG9vaykpICYmIGlzRGVmKChpID0gaS5pbml0KSkpXG4gICAgICAgICAgICAgICAgaSh2bm9kZSwgdHJ1ZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgICAgICAgaWYgKGlzRGVmKChpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSkge1xuICAgICAgICAgICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICAgICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBpZiAoIWVsbS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdi1odG1sIGFuZCBkb21Qcm9wczogaW5uZXJIVE1MXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RlZigoaSA9IGRhdGEpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEZWYoKGkgPSBpLmRvbVByb3BzKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRGVmKChpID0gaS5pbm5lckhUTUwpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IGVsbS5pbm5lckhUTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhcmVudDogJywgZWxtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdjbGllbnQgaW5uZXJIVE1MOiAnLCBlbG0uaW5uZXJIVE1MKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBhbmQgY29tcGFyZSBjaGlsZHJlbiBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV83ID0gMDsgaV83IDwgY2hpbGRyZW4ubGVuZ3RoOyBpXzcrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGROb2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoeWRyYXRlKGNoaWxkTm9kZSwgY2hpbGRyZW5baV83XSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGNoaWxkTm9kZSBpcyBub3QgbnVsbCwgaXQgbWVhbnMgdGhlIGFjdHVhbCBjaGlsZE5vZGVzIGxpc3QgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvbmdlciB0aGFuIHRoZSB2aXJ0dWFsIGNoaWxkcmVuIGxpc3QuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuTWF0Y2ggfHwgY2hpbGROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC
13835FoeWRyYXRpb25CYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTWlzbWF0Y2hpbmcgY2hpbGROb2RlcyB2cy4gVk5vZGVzOiAnLCBlbG0uY2hpbGROb2RlcywgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnVsbEludm9rZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZW5kZXJlZE1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsSW52b2tlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmdWxsSW52b2tlICYmIGRhdGFbJ2NsYXNzJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2UoZGF0YVsnY2xhc3MnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVsbS5kYXRhICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICAgICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaChub2RlLCB2bm9kZSwgaW5WUHJlKSB7XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS50YWcpKSB7XG4gICAgICAgICAgICByZXR1cm4gKHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHxcbiAgICAgICAgICAgICAgICAoIWlzVW5rbm93bkVsZW1lbnQodm5vZGUsIGluVlByZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgdm5vZGUudGFnLnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5KSB7XG4gICAgICAgIGlmIChpc1VuZGVmKHZub2RlKSkge1xuICAgICAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlKSlcbiAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlzSW5pdGlhbFBhdGNoID0gZmFsc2U7XG4gICAgICAgIHZhciBpbnNlcnRlZFZub2RlUXVldWUgPSBbXTtcbiAgICAgICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAgICAgICAvLyBlbXB0eSBtb3VudCAobGlrZWx5IGFzIGNvbXBvbmVudCksIGNyZWF0ZSBuZXcgcm9vdCBlbGVtZW50XG4gICAgICAgICAgICBpc0luaXRpYWxQYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2Y
13835XIgaXNSZWFsRWxlbWVudCA9IGlzRGVmKG9sZFZub2RlLm5vZGVUeXBlKTtcbiAgICAgICAgICAgIGlmICghaXNSZWFsRWxlbWVudCAmJiBzYW1lVm5vZGUob2xkVm5vZGUsIHZub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIHBhdGNoIGV4aXN0aW5nIHJvb3Qgbm9kZVxuICAgICAgICAgICAgICAgIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG51bGwsIG51bGwsIHJlbW92ZU9ubHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbW91bnRpbmcgdG8gYSByZWFsIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBzZXJ2ZXItcmVuZGVyZWQgY29udGVudCBhbmQgaWYgd2UgY2FuIHBlcmZvcm1cbiAgICAgICAgICAgICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFZub2RlLm5vZGVUeXBlID09PSAxICYmIG9sZFZub2RlLmhhc0F0dHJpYnV0ZShTU1JfQVRUUikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICAgICAgICAgICAgICBoeWRyYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RydWUoaHlkcmF0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiQyKCdUaGUgY2xpZW50LXNpZGUgcmVuZGVyZWQgdmlydHVhbCBET00gdHJlZSBpcyBub3QgbWF0Y2hpbmcgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGluY29ycmVjdCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hUTUwgbWFya3VwLCBmb3IgZXhhbXBsZSBuZXN0aW5nIGJsb2NrLWxldmVsIGVsZW1lbnRzIGluc2lkZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxwPiwgb3IgbWlzc2luZyA8dGJvZHk+LiBCYWlsaW5nIGh5ZHJhdGlvbiBhbmQgcGVyZm9ybWluZyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bGwgY2xpZW50LXNpZGUgcmVuZGVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxuICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbm9kZSBhbmQgcmVwbGFjZSBpdFxuICAgICAgICAgICAgICAgICAgICBvbGRWbm9kZSA9IGVtcHR5Tm9kZUF0KG9sZFZub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjaW5nIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgICAgICAgICAgICB2Y
13835XIgb2xkRWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbG0gPSBub2RlT3BzLnBhcmVudE5vZGUob2xkRWxtKTtcbiAgICAgICAgICAgICAgICAvLyBjcmVhdGUgbmV3IG5vZGVcbiAgICAgICAgICAgICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgXG4gICAgICAgICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcbiAgICAgICAgICAgICAgICAvLyBsZWF2aW5nIHRyYW5zaXRpb24uIE9ubHkgaGFwcGVucyB3aGVuIGNvbWJpbmluZyB0cmFuc2l0aW9uICtcbiAgICAgICAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0sIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKSk7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHBhcmVudCBwbGFjZWhvbGRlciBub2RlIGVsZW1lbnQsIHJlY3Vyc2l2ZWx5XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGF0Y2hhYmxlID0gaXNQYXRjaGFibGUodm5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGlfOCA9IDA7IGlfOCA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpXzgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnMuZGVzdHJveVtpXzhdKGFuY2VzdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpXzkgPSAwOyBpXzkgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpXzkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpXzldKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5nLiBmb3IgZGlyZWN0aXZlcyB0aGF0IHVzZXMgdGhlIFwiaW5zZXJ0ZWRcIiBob29rLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnNlcnRfMSA9IGFuY2VzdG9yLmRhdGEuaG9vay5pbnNlcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydF8xLm1lcmdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBhdCBpbmRleCAxIHRvIGF2b2lkIHJlLWludm9raW5nIGNvbXBvbmVudCBtb3VudGVkIGhvb2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaV8xMCA9IDE7IGlfMTAgPCBpbnNlcnRfMS5mbnMubGVuZ3RoOyBpXzEwKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydF8xLmZuc1tpXzEwXSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJSZWYoYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZGVzdHJveSBvbGQgbm9kZVxuICAgICAgICAgICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVZub2Rlcyhbb2xkVm5vZGVdLCAwLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgaXNJbml0aWFsUGF0Y2gpO1xuICAgICAgICByZXR1cm4gdm5vZGUuZWxtO1xuICAgIH07XG59XG5cbnZhciBkaXJlY3RpdmVzJDEgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICAgIHVwZGF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiB1bmJpbmREaXJlY3RpdmVzKHZub2RlKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZW1wdHlOb2RlIGlzIG5vdCBWTm9kZVdpdGhEYXRhXG4gICAgICAgIHVwZGF0ZURpcmVjdGl2ZXModm5vZGUsIGVtcHR5Tm9kZSk7XG4gICAgfVxufTtcbmZ1bmN0aW9uIHVwZGF0ZURpcmVjdGl2ZXMob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcyB8fCB2bm9kZS5kYXRhLmRpcmVjdGl2ZXMpIHtcbiAgICAgICAgX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIF91cGRhdGUob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIGlzQ3JlYXRlID0gb2xkVm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgICB2YXIgaXNEZXN0cm95ID0gdm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgICB2YXIgb2xkRGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzLCBvbGRWbm9kZS5jb250ZXh0KTtcbiAgICB2YXIgbmV3RGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXModm5vZGUuZGF0YS5kaXJlY3RpdmVzLCB2bm9kZS5jb250ZXh0KTtcbiAgICB2YXIgZGlyc1dpdGhJbnNlcnQgP
13835SBbXTtcbiAgICB2YXIgZGlyc1dpdGhQb3N0cGF0Y2ggPSBbXTtcbiAgICB2YXIga2V5LCBvbGREaXIsIGRpcjtcbiAgICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgICAgIG9sZERpciA9IG9sZERpcnNba2V5XTtcbiAgICAgICAgZGlyID0gbmV3RGlyc1trZXldO1xuICAgICAgICBpZiAoIW9sZERpcikge1xuICAgICAgICAgICAgLy8gbmV3IGRpcmVjdGl2ZSwgYmluZFxuICAgICAgICAgICAgY2FsbEhvb2soZGlyLCAnYmluZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmluc2VydGVkKSB7XG4gICAgICAgICAgICAgICAgZGlyc1dpdGhJbnNlcnQucHVzaChkaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXhpc3RpbmcgZGlyZWN0aXZlLCB1cGRhdGVcbiAgICAgICAgICAgIGRpci5vbGRWYWx1ZSA9IG9sZERpci52YWx1ZTtcbiAgICAgICAgICAgIGRpci5vbGRBcmcgPSBvbGREaXIuYXJnO1xuICAgICAgICAgICAgY2FsbEhvb2soZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuY29tcG9uZW50VXBkYXRlZCkge1xuICAgICAgICAgICAgICAgIGRpcnNXaXRoUG9zdHBhdGNoLnB1c2goZGlyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGlyc1dpdGhJbnNlcnQubGVuZ3RoKSB7XG4gICAgICAgIHZhciBjYWxsSW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aEluc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNhbGxIb29rKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoaXNDcmVhdGUpIHtcbiAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgY2FsbEluc2VydCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjYWxsSG9vayhkaXJzV2l0aFBvc3RwYXRjaFtpXSwgJ2NvbXBvbmVudFVwZGF0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFpc0NyZWF0ZSkge1xuICAgICAgICBmb3IgKGtleSBpbiBvbGREaXJzKSB7XG4gICAgICAgICAgICBpZiAoIW5ld0RpcnNba2V5XSkge1xuICAgICAgICAgICAgICAgIC8vIG5vIGxvbmdlciBwcmVzZW50LCB1bmJpbmRcbiAgICAgICAgICAgICAgICBjYWxsSG9vayhvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG52YXIgZW1wdHlNb2RpZmllcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyhkaXJzLCB2bSkge1xuICAgIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGlmICghZGlycykge1xuICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFyIGksIGRpcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBkaXIgPSBkaXJzW2ldO1xuICAgICAgICBpZiAoIWRpci5tb2RpZmllcnMpIHtcbiAgICAgICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgZGlyLm1vZGlmaWVycyA9IGVtcHR5TW9kaWZpZXJzO1xuICAgICAgICB9XG4gICAgICAgIHJlc1tnZXRSYXdEaXJOYW1lKGRpcildID0gZGlyO1xuICAgICAgICBpZiAodm0uX3NldHVwU3RhdGUgJiYgdm0uX3NldHVwU3RhdGUuX19zZmMpIHtcbiAgICAgICAgICAgIHZhciBzZXR1cERlZiA9IGRpci5kZWYgfHwgcmVzb2x2ZUFzc2V0KHZtLCAnX3NldHVwU3RhdGUnLCAndi0nICsgZGlyLm5hbWUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZXR1cERlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRpci5kZWYgPSB7XG4gICAgICAgICAgICAgICAgICAgIGJpbmQ6IHNldHVwRGVmLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGU6IHNldHVwRGVmLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXIuZGVmID0gc2V0dXBEZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGlyLmRlZiA9IGRpci5kZWYgfHwgcmVzb2x2ZUFzc2V0KHZtLiRvcHRpb25zLCAnZGlyZWN0aXZlcycsIGRpci5uYW1lLCB0cnVlKTtcbiAgICB9XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGdldFJhd0Rpck5hbWUoZGlyKSB7XG4gICAgcmV0dXJuIChkaXIucmF3TmFtZSB8fCBcIlwiLmNvbmNhdChkaXIubmFtZSwgXCIuXCIpLmNvbmNhdChPYmplY3Qua2V5cyhkaXIubW9kaWZpZXJzIHx8IHt9KS5qb2luKCcuJykpKTtcbn1cbmZ1bmN0aW9uIGNhbGxIb29rKGRpciwgaG9vaywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgICB2YXIgZm4gPSBkaXIuZGVmICYmIGRpci5kZWZbaG9va107XG4gICAgaWYgKGZuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbih2bm9kZS5lbG0sIGRpciwgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bm9kZS5jb250ZXh0LCBcImRpcmVjdGl2ZSBcIi5jb25jYXQoZGlyLm5hbWUsIFwiIFwiKS5jb25jYXQoaG9vaywgXCIgaG9va1wiKSk7XG4gICAgICAgI
13835H1cbiAgICB9XG59XG5cbnZhciBiYXNlTW9kdWxlcyA9IFtyZWYsIGRpcmVjdGl2ZXMkMV07XG5cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBvcHRzID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoaXNEZWYob3B0cykgJiYgb3B0cy5DdG9yLm9wdGlvbnMuaW5oZXJpdEF0dHJzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuYXR0cnMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5hdHRycykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIga2V5LCBjdXIsIG9sZDtcbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICAgIHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gICAgdmFyIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgICBpZiAoaXNEZWYoYXR0cnMuX19vYl9fKSB8fCBpc1RydWUoYXR0cnMuX3ZfYXR0cl9wcm94eSkpIHtcbiAgICAgICAgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzID0gZXh0ZW5kKHt9LCBhdHRycyk7XG4gICAgfVxuICAgIGZvciAoa2V5IGluIGF0dHJzKSB7XG4gICAgICAgIGN1ciA9IGF0dHJzW2tleV07XG4gICAgICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgICAgIGlmIChvbGQgIT09IGN1cikge1xuICAgICAgICAgICAgc2V0QXR0cihlbG0sIGtleSwgY3VyLCB2bm9kZS5kYXRhLnByZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gIzQzOTE6IGluIElFOSwgc2V0dGluZyB0eXBlIGNhbiByZXNldCB2YWx1ZSBmb3IgaW5wdXRbdHlwZT1yYWRpb11cbiAgICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKChpc0lFIHx8IGlzRWRnZSkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZhbHVlKSB7XG4gICAgICAgIHNldEF0dHIoZWxtLCAndmFsdWUnLCBhdHRycy52YWx1ZSk7XG4gICAgfVxuICAgIGZvciAoa2V5IGluIG9sZEF0dHJzKSB7XG4gICAgICAgIGlmIChpc1VuZGVmKGF0dHJzW2tleV0pKSB7XG4gICAgICAgICAgICBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzZXRBdHRyKGVsLCBrZXksIHZhbHVlLCBpc0luUHJlKSB7XG4gICAgaWYgKGlzSW5QcmUgfHwgZWwudGFnTmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgICAgICAvLyBzZXQgYXR0cmlidXRlIGZvciBibGFuayB2YWx1ZVxuICAgICAgICAvLyBlLmcuIDxvcHRpb24gZGlzYWJsZWQ+U2VsZWN0IG9uZTwvb3B0aW9uPlxuICAgICAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gdGVjaG5pY2FsbHkgYWxsb3dmdWxsc2NyZWVuIGlzIGEgYm9vbGVhbiBhdHRyaWJ1dGUgZm9yIDxpZnJhbWU+LFxuICAgICAgICAgICAgLy8gYnV0IEZsYXNoIGV4cGVjdHMgYSB2YWx1ZSBvZiBcInRydWVcIiB3aGVuIHVzZWQgb24gPGVtYmVkPiB0YWdcbiAgICAgICAgICAgIHZhbHVlID0ga2V5ID09PSAnYWxsb3dmdWxsc2NyZWVuJyAmJiBlbC50YWdOYW1lID09PSAnRU1CRUQnID8gJ3RydWUnIDoga2V5O1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSkge1xuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vICM3MTM4OiBJRTEwICYgMTEgZmlyZXMgaW5wdXQgZXZlbnQgd2hlbiBzZXR0aW5nIHBsYWNlaG9sZGVyIG9uXG4gICAgICAgIC8vIDx0ZXh0YXJlYT4uLi4gYmxvY2sgdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFuZCByZW1vdmUgdGhlIGJsb2NrZXJcbiAgICAgICAgLy8gaW1tZWRpYXRlbHkuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXNJRSAmJlxuICAgICAgICAgICAgIWlzSUU5ICYmXG4gICAgICAgICAgICBlbC50YWdOYW1lID09PSAnVEVYVEFSRUEnICYmXG4gICAgICAgICAgICBrZXkgPT09ICdwbGFjZWhvbGRlcicgJiZcbiAgICAgICAgICAgIHZhbHVlICE9PSAnJyAmJlxuICAgICAgICAgICAgIWVsLl9faWVwaCkge1xuICAgICAgICAgICAgdmFyIGJsb2NrZXJfMSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJv
13835cGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIGJsb2NrZXJfMSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyXzEpO1xuICAgICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgICBlbC5fX2llcGggPSB0cnVlOyAvKiBJRSBwbGFjZWhvbGRlciBwYXRjaGVkICovXG4gICAgICAgIH1cbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgIH1cbn1cbnZhciBhdHRycyA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZUF0dHJzLFxuICAgIHVwZGF0ZTogdXBkYXRlQXR0cnNcbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICAgIGlmIChpc1VuZGVmKGRhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiZcbiAgICAgICAgKGlzVW5kZWYob2xkRGF0YSkgfHxcbiAgICAgICAgICAgIChpc1VuZGVmKG9sZERhdGEuc3RhdGljQ2xhc3MpICYmIGlzVW5kZWYob2xkRGF0YS5jbGFzcykpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjbHMgPSBnZW5DbGFzc0ZvclZub2RlKHZub2RlKTtcbiAgICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBjbGFzc2VzXG4gICAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgICAgICBjbHMgPSBjb25jYXQoY2xzLCBzdHJpbmdpZnlDbGFzcyh0cmFuc2l0aW9uQ2xhc3MpKTtcbiAgICB9XG4gICAgLy8gc2V0IHRoZSBjbGFzc1xuICAgIGlmIChjbHMgIT09IGVsLl9wcmV2Q2xhc3MpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNscyk7XG4gICAgICAgIGVsLl9wcmV2Q2xhc3MgPSBjbHM7XG4gICAgfVxufVxudmFyIGtsYXNzJDEgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVDbGFzcyxcbiAgICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG59O1xuXG52YXIgdmFsaWREaXZpc2lvbkNoYXJSRSA9IC9bXFx3KS4rXFwtXyRcXF1dLztcbmZ1bmN0aW9uIHBhcnNlRmlsdGVycyhleHApIHtcbiAgICB2YXIgaW5TaW5nbGUgPSBmYWxzZTtcbiAgICB2YXIgaW5Eb3VibGUgPSBmYWxzZTtcbiAgICB2YXIgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xuICAgIHZhciBpblJlZ2V4ID0gZmFsc2U7XG4gICAgdmFyIGN1cmx5ID0gMDtcbiAgICB2YXIgc3F1YXJlID0gMDtcbiAgICB2YXIgcGFyZW4gPSAwO1xuICAgIHZhciBsYXN0RmlsdGVySW5kZXggPSAwO1xuICAgIHZhciBjLCBwcmV2LCBpLCBleHByZXNzaW9uLCBmaWx0ZXJzO1xuICAgIGZvciAoaSA9IDA7IGkgPCBleHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcHJldiA9IGM7XG4gICAgICAgIGMgPSBleHAuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGluU2luZ2xlKSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gMHgyNyAmJiBwcmV2ICE9PSAweDVjKVxuICAgICAgICAgICAgICAgIGluU2luZ2xlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5Eb3VibGUpIHtcbiAgICAgICAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NWMpXG4gICAgICAgICAgICAgICAgaW5Eb3VibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpblRlbXBsYXRlU3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gMHg2MCAmJiBwcmV2ICE9PSAweDVjKVxuICAgICAgICAgICAgICAgIGluVGVtcGxhdGVTdHJpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpblJlZ2V4KSB7XG4gICAgICAgICAgICBpZiAoYyA9PT0gMHgyZiAmJiBwcmV2ICE9PSAweDVjKVxuICAgICAgICAgICAgICAgIGluUmVnZXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjID09PSAweDdjICYmIC8vIHBpcGVcbiAgICAgICAgICAgIGV4cC5jaGFyQ29kZUF0KGkgKyAxKSAhPT0gMHg3YyAmJlxuICAgICAgICAgICAgZXhwLmNoYXJDb2RlQXQoaSAtIDEpICE9PSAweDdjICYmXG4gICAgICAgICAgICAhY3VybHkgJiZcbiAgICAgICAgICAgICFzcXVhcmUgJiZcbiAgICAgICAgICAgICFwYXJlbikge1xuICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGZpcnN0IGZpbHRlciwgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBsYXN0RmlsdGVySW5kZXggPSBpICsgMTtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gZXhwLnNsaWNlKDAsIGkpLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHB1c2hGaWx0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgIGNhc2UgMHgyMjpcbiAgICAgICAgICAgICAgICAgICAgaW5Eb3VibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXCJcbiAgICAgICAgICAgICAgICBjYXNlIDB4Mjc6XG4gICAgICAgICAgICAgICAgICAgIGluU2luZ2xlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vICdcbiAgICAgICAgICAgICAgICBjYXNlIDB4NjA6XG4gICAgICAgICAgICAgICAgICAgIGluVGVtcGxhdGVTdHJpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gYFxuICAgICAgICAgICAgICAgIGNhc2UgMHgyODpcbiAgICAgICAgICAgICAgICAgICAgcGFyZW4rKztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIChcbiAgICAgICAgICAgICAgICBjYXNlIDB4Mjk6XG4gICAgICAgICAgICAgICAgICAgIHBhcmVuLS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyApXG4gICAgICAgICAgICAgICAgY2FzZSAweDViOlxuICAgICAgICAgICAgICAgICAgICBzcXVhcmUrKztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFtcbiAgICAgICAgICAgICAgICBjYXNlIDB4NWQ6XG4gICAgICAgICAgICAgICAgICAgI
13835HNxdWFyZS0tO1xuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gXVxuICAgICAgICAgICAgICAgIGNhc2UgMHg3YjpcbiAgICAgICAgICAgICAgICAgICAgY3VybHkrKztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIHtcbiAgICAgICAgICAgICAgICBjYXNlIDB4N2Q6XG4gICAgICAgICAgICAgICAgICAgIGN1cmx5LS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gMHgyZikge1xuICAgICAgICAgICAgICAgIC8vIC9cbiAgICAgICAgICAgICAgICB2YXIgaiA9IGkgLSAxO1xuICAgICAgICAgICAgICAgIHZhciBwIFxuICAgICAgICAgICAgICAgIC8vIGZpbmQgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgcHJldiBjaGFyXG4gICAgICAgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgLy8gZmluZCBmaXJzdCBub24td2hpdGVzcGFjZSBwcmV2IGNoYXJcbiAgICAgICAgICAgICAgICBmb3IgKDsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgcCA9IGV4cC5jaGFyQXQoaik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwICE9PSAnICcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwIHx8ICF2YWxpZERpdmlzaW9uQ2hhclJFLnRlc3QocCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5SZWdleCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGxhc3RGaWx0ZXJJbmRleCAhPT0gMCkge1xuICAgICAgICBwdXNoRmlsdGVyKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hGaWx0ZXIoKSB7XG4gICAgICAgIChmaWx0ZXJzIHx8IChmaWx0ZXJzID0gW10pKS5wdXNoKGV4cC5zbGljZShsYXN0RmlsdGVySW5kZXgsIGkpLnRyaW0oKSk7XG4gICAgICAgIGxhc3RGaWx0ZXJJbmRleCA9IGkgKyAxO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHdyYXBGaWx0ZXIoZXhwcmVzc2lvbiwgZmlsdGVyc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHJlc3Npb247XG59XG5mdW5jdGlvbiB3cmFwRmlsdGVyKGV4cCwgZmlsdGVyKSB7XG4gICAgdmFyIGkgPSBmaWx0ZXIuaW5kZXhPZignKCcpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgICAvLyBfZjogcmVzb2x2ZUZpbHRlclxuICAgICAgICByZXR1cm4gXCJfZihcXFwiXCIuY29uY2F0KGZpbHRlciwgXCJcXFwiKShcIikuY29uY2F0KGV4cCwgXCIpXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG5hbWVfMSA9IGZpbHRlci5zbGljZSgwLCBpKTtcbiAgICAgICAgdmFyIGFyZ3MgPSBmaWx0ZXIuc2xpY2UoaSArIDEpO1xuICAgICAgICByZXR1cm4gXCJfZihcXFwiXCIuY29uY2F0KG5hbWVfMSwgXCJcXFwiKShcIikuY29uY2F0KGV4cCkuY29uY2F0KGFyZ3MgIT09ICcpJyA/ICcsJyArIGFyZ3MgOiBhcmdzKTtcbiAgICB9XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5mdW5jdGlvbiBiYXNlV2Fybihtc2csIHJhbmdlKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltWdWUgY29tcGlsZXJdOiBcIi5jb25jYXQobXNnKSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5mdW5jdGlvbiBwbHVja01vZHVsZUZ1bmN0aW9uKG1vZHVsZXMsIGtleSkge1xuICAgIHJldHVybiBtb2R1bGVzID8gbW9kdWxlcy5tYXAoZnVuY3Rpb24gKG
138350pIHsgcmV0dXJuIG1ba2V5XTsgfSkuZmlsdGVyKGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9KSA6IFtdO1xufVxuZnVuY3Rpb24gYWRkUHJvcChlbCwgbmFtZSwgdmFsdWUsIHJhbmdlLCBkeW5hbWljKSB7XG4gICAgKGVsLnByb3BzIHx8IChlbC5wcm9wcyA9IFtdKSkucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUsIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpKTtcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuZnVuY3Rpb24gYWRkQXR0cihlbCwgbmFtZSwgdmFsdWUsIHJhbmdlLCBkeW5hbWljKSB7XG4gICAgdmFyIGF0dHJzID0gZHluYW1pY1xuICAgICAgICA/IGVsLmR5bmFtaWNBdHRycyB8fCAoZWwuZHluYW1pY0F0dHJzID0gW10pXG4gICAgICAgIDogZWwuYXR0cnMgfHwgKGVsLmF0dHJzID0gW10pO1xuICAgIGF0dHJzLnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKSk7XG4gICAgZWwucGxhaW4gPSBmYWxzZTtcbn1cbi8vIGFkZCBhIHJhdyBhdHRyICh1c2UgdGhpcyBpbiBwcmVUcmFuc2Zvcm1zKVxuZnVuY3Rpb24gYWRkUmF3QXR0cihlbCwgbmFtZSwgdmFsdWUsIHJhbmdlKSB7XG4gICAgZWwuYXR0cnNNYXBbbmFtZV0gPSB2YWx1ZTtcbiAgICBlbC5hdHRyc0xpc3QucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSwgcmFuZ2UpKTtcbn1cbmZ1bmN0aW9uIGFkZERpcmVjdGl2ZShlbCwgbmFtZSwgcmF3TmFtZSwgdmFsdWUsIGFyZywgaXNEeW5hbWljQXJnLCBtb2RpZmllcnMsIHJhbmdlKSB7XG4gICAgKGVsLmRpcmVjdGl2ZXMgfHwgKGVsLmRpcmVjdGl2ZXMgPSBbXSkpLnB1c2gocmFuZ2VTZXRJdGVtKHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgcmF3TmFtZTogcmF3TmFtZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBhcmc6IGFyZyxcbiAgICAgICAgaXNEeW5hbWljQXJnOiBpc0R5bmFtaWNBcmcsXG4gICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzXG4gICAgfSwgcmFuZ2UpKTtcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xufVxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyTWFya2VyKHN5bWJvbCwgbmFtZSwgZHluYW1pYykge1xuICAgIHJldHVybiBkeW5hbWljID8gXCJfcChcIi5jb25jYXQobmFtZSwgXCIsXFxcIlwiKS5jb25jYXQoc3ltYm9sLCBcIlxcXCIpXCIpIDogc3ltYm9sICsgbmFtZTsgLy8gbWFyayB0aGUgZXZlbnQgYXMgY2FwdHVyZWRcbn1cbmZ1bmN0aW9uIGFkZEhhbmRsZXIoZWwsIG5hbWUsIHZhbHVlLCBtb2RpZmllcnMsIGltcG9ydGFudCwgd2FybiwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgICBtb2RpZmllcnMgPSBtb2RpZmllcnMgfHwgZW1wdHlPYmplY3Q7XG4gICAgLy8gd2FybiBwcmV2ZW50IGFuZCBwYXNzaXZlIG1vZGlmaWVyXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybiAmJiBtb2RpZmllcnMucHJldmVudCAmJiBtb2RpZmllcnMucGFzc2l2ZSkge1xuICAgICAgICB3YXJuKFwicGFzc2l2ZSBhbmQgcHJldmVudCBjYW4ndCBiZSB1c2VkIHRvZ2V0aGVyLiBcIiArXG4gICAgICAgICAgICBcIlBhc3NpdmUgaGFuZGxlciBjYW4ndCBwcmV2ZW50IGRlZmF1bHQgZXZlbnQuXCIsIHJhbmdlKTtcbiAgICB9XG4gICAgLy8gbm9ybWFsaXplIGNsaWNrLnJpZ2h0IGFuZCBjbGljay5taWRkbGUgc2luY2UgdGhleSBkb24ndCBhY3R1YWxseSBmaXJlXG4gICAgLy8gdGhpcyBpcyB0ZWNobmljYWxseSBicm93c2VyLXNwZWNpZmljLCBidXQgYXQgbGVhc3QgZm9yIG5vdyBicm93c2VycyBhcmVcbiAgICAvLyB0aGUgb25seSB0YXJnZXQgZW52cyB0aGF0IGhhdmUgcmlnaHQvbWlkZGxlIGNsaWNrcy5cbiAgICBpZiAobW9kaWZpZXJzLnJpZ2h0KSB7XG4gICAgICAgIGlmIChkeW5hbWljKSB7XG4gICAgICAgICAgICBuYW1lID0gXCIoXCIuY29uY2F0KG5hbWUsIFwiKT09PSdjbGljayc/J2NvbnRleHRtZW51JzooXCIpLmNvbmNhdChuYW1lLCBcIilcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgICAgbmFtZSA9ICdjb250ZXh0bWVudSc7XG4gICAgICAgICAgICBkZWxldGUgbW9kaWZpZXJzLnJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG1vZGlmaWVycy5taWRkbGUpIHtcbiAgICAgICAgaWYgKGR5bmFtaWMpIHtcbiAgICAgICAgICAgIG5hbWUgPSBcIihcIi5jb25jYXQobmFtZSwgXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiKS5jb25jYXQobmFtZSwgXCIpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICAgIG5hbWUgPSAnbW91c2V1cCc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY2hlY2sgY2FwdHVyZSBtb2RpZmllclxuICAgIGlmIChtb2RpZmllcnMuY2FwdHVyZSkge1xuICAgICAgICBkZWxldGUgbW9kaWZpZXJzLmNhcHR1cmU7XG4gICAgICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJyEnLCBuYW1lLCBkeW5hbWljKTtcbiAgICB9XG4gICAgaWYgKG1vZGlmaWVycy5vbmNlKSB7XG4gICAgICAgIGRlbGV0ZSBtb2RpZmllcnMub25jZTtcbiAgICAgICAgbmFtZSA9IHByZXBlbmRNb2RpZmllck1hcmtlcignficsIG5hbWUsIGR5bmFtaWMpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAobW9kaWZpZXJzLnBhc3NpdmUpIHtcbiAgICAgICAgZGVsZXRlIG1vZGlmaWVycy5wYXNzaXZlO1xuICAgICAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCcmJywgbmFtZSwgZHluYW1pYyk7XG4gICAgfVxuICAgIHZhciBldmVudHM7XG4gICAgaWYgKG1vZGlmaWVycy5uYXRpdmUpIHtcbiAgICAgICAgZGVsZXRlIG1vZGlmaWVycy5uYXRpdmU7XG4gICAgICAgIGV2ZW50cyA9IGVsLm5hdGl2ZUV2ZW50cyB8fCAoZWwubmF0aXZlRXZlbnRzID0ge30pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZXZlbnRzID0gZWwuZXZlbnRzIHx8IChlbC5ldmVudHMgPSB7fSk7XG4gICAgfVxuICAgIHZhciBuZXdIYW5kbGVyID0gcmFuZ2VTZXRJdGVtKHsgdmFsdWU6IHZhbHVlLnRyaW0oKSwgZHluYW1pYzogZHluYW1pYyB9LCByYW5nZSk7XG4gICAgaWYgKG1vZGlmaWVycyAhPT0gZW1wdHlPYmplY3QpIHtcbiAgICAgICAgbmV3SGFuZGxlci5tb2RpZmllcnMgPSBtb2RpZmllcnM7XG4gICAgfVxuICAgIHZhciBoYW5kbGVycyA9IGV2ZW50c1tuYW1lXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVycykpIHtcbiAgICAgICAgaW1wb3J0YW50ID8gaGFuZGxlcnMudW5zaGlmdChuZXdIYW5kbGVyKSA6IGhhbmRsZXJzLnB1c2gobmV3SGFuZGxlcik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgIGV2ZW50c1tuYW1lXSA9IGltcG9ydGFudCA/IFtuZXdIYW5kbGVyLCBoYW5kbGVyc10gOiBbaGFuZGxlcnMsIG5ld0hhbmRsZXJdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZXZlbnRzW25hbWVdID0gbmV3SGFuZGxlcjtcbiAgICB9XG4gICAgZWwucGxhaW4gPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFJhd0JpbmRpbmdBdHRyKGVsLCBuYW1lKSB7XG4gICAgcmV0dXJuIChlbC5yYXdBdHRyc01hcFsnOicgKyBuYW1lXSB8fFxuICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1iaW5kOicgKyBuYW1lXSB8fFxuICAgICAgICBlbC5yYXdBdHRyc01hcFtuYW1lXSk7XG59XG5mdW5jdGlvbiBnZXRCaW5kaW5nQXR0cihlbCwgbmFtZSwgZ2V0U3RhdGljKSB7XG4gICAgdmFyIGR5bmFtaWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICc6JyArIG5hbWUpIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWJpbmQ6JyArIG5hbWUpO1xuICAgIGlmIChkeW5hbWljVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzKGR5bmFtaWNWYWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGdldFN0YXRpYyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdmFyIHN0YXRpY1ZhbHVlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgbmFtZSk7XG4gICAgICAgIGlmIChzdGF0aWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gSl
13835NPTi5zdHJpbmdpZnkoc3RhdGljVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gbm90ZTogdGhpcyBvbmx5IHJlbW92ZXMgdGhlIGF0dHIgZnJvbSB0aGUgQXJyYXkgKGF0dHJzTGlzdCkgc28gdGhhdCBpdFxuLy8gZG9lc24ndCBnZXQgcHJvY2Vzc2VkIGJ5IHByb2Nlc3NBdHRycy5cbi8vIEJ5IGRlZmF1bHQgaXQgZG9lcyBOT1QgcmVtb3ZlIGl0IGZyb20gdGhlIG1hcCAoYXR0cnNNYXApIGJlY2F1c2UgdGhlIG1hcCBpc1xuLy8gbmVlZGVkIGR1cmluZyBjb2RlZ2VuLlxuZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgbmFtZSwgcmVtb3ZlRnJvbU1hcCkge1xuICAgIHZhciB2YWw7XG4gICAgaWYgKCh2YWwgPSBlbC5hdHRyc01hcFtuYW1lXSkgIT0gbnVsbCkge1xuICAgICAgICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxpc3RbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIGxpc3Quc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZW1vdmVGcm9tTWFwKSB7XG4gICAgICAgIGRlbGV0ZSBlbC5hdHRyc01hcFtuYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4KGVsLCBuYW1lKSB7XG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2Y
13835XIgYXR0ciA9IGxpc3RbaV07XG4gICAgICAgIGlmIChuYW1lLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gYXR0cjtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHJhbmdlU2V0SXRlbShpdGVtLCByYW5nZSkge1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlbS5zdGFydCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyYW5nZS5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlbS5lbmQgPSByYW5nZS5lbmQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG59XG5cbi8qKlxuICogQ3Jvc3MtcGxhdGZvcm0gY29kZSBnZW5lcmF0aW9uIGZvciBjb21wb25lbnQgdi1tb2RlbFxuICovXG5mdW5jdGlvbiBnZW5Db21wb25lbnRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycykge1xuICAgIHZhciBfYSA9IG1vZGlmaWVycyB8fCB7fSwgbnVtYmVyID0gX2EubnVtYmVyLCB0cmltID0gX2EudHJpbTtcbiAgICB2YXIgYmFzZVZhbHVlRXhwcmVzc2lvbiA9ICckJHYnO1xuICAgIHZhciB2YWx1ZUV4cHJlc3Npb24gPSBiYXNlVmFsdWVFeHByZXNzaW9uO1xuICAgIGlmICh0cmltKSB7XG4gICAgICAgIHZhbHVlRXhwcmVzc2lvbiA9XG4gICAgICAgICAgICBcIih0eXBlb2YgXCIuY29uY2F0KGJhc2VWYWx1ZUV4cHJlc3Npb24sIFwiID09PSAnc3RyaW5nJ1wiKSArXG4gICAgICAgICAgICAgICAgXCI/IFwiLmNvbmNhdChiYXNlVmFsdWVFeHByZXNzaW9uLCBcIi50cmltKClcIikgK1xuICAgICAgICAgICAgICAgIFwiOiBcIi5jb25jYXQoYmFzZVZhbHVlRXhwcmVzc2lvbiwgXCIpXCIpO1xuICAgIH1cbiAgICBpZiAobnVtYmVyKSB7XG4gICAgICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIuY29uY2F0KHZhbHVlRXhwcmVzc2lvbiwgXCIpXCIpO1xuICAgIH1cbiAgICB2YXIgYXNzaWdubWVudCA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCB2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGVsLm1vZGVsID0ge1xuICAgICAgICB2YWx1ZTogXCIoXCIuY29uY2F0KHZhbHVlLCBcIilcIiksXG4gICAgICAgIGV4cHJlc3Npb246IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcbiAgICAgICAgY2FsbGJhY2s6IFwiZnVuY3Rpb24gKFwiLmNvbmNhdChiYXNlVmFsdWVFeHByZXNzaW9uLCBcIikge1wiKS5jb25jYXQoYXNzaWdubWVudCwgXCJ9XCIpXG4gICAgfTtcbn1cbi8qKlxuICogQ3Jvc3MtcGxhdGZvcm0gY29kZWdlbiBoZWxwZXIgZm9yIGdlbmVyYXRpbmcgdi1tb2RlbCB2YWx1ZSBhc3NpZ25tZW50IGNvZGUuXG4gKi9cbmZ1bmN0aW9uIGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBhc3NpZ25tZW50KSB7XG4gICAgdmFyIHJlcyA9IHBhcnNlTW9kZWwodmFsdWUpO1xuICAgIGlmIChyZXMua2V5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh2YWx1ZSwgXCI9XCIpLmNvbmNhdChhc3NpZ25tZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcIiRzZXQoXCIuY29uY2F0KHJlcy5leHAsIFwiLCBcIikuY29uY2F0KHJlcy5rZXksIFwiLCBcIikuY29uY2F0KGFzc2lnbm1lbnQsIFwiKVwiKTtcbiAgICB9XG59XG4vKipcbiAqIFBhcnNlIGEgdi1tb2RlbCBleHByZXNzaW9uIGludG8gYSBiYXNlIHBhdGggYW5kIGEgZmluYWwga2V5IHNlZ21lbnQuXG4gKiBIYW5kbGVzIGJvdGggZG90LXBhdGggYW5kIHBvc3NpYmxlIHNxdWFyZSBicmFja2V0cy5cbiAqXG4gKiBQb3NzaWJsZSBjYXNlczpcbiAqXG4gKiAtIHRlc3RcbiAqIC0gdGVzdFtrZXldXG4gKiAtIHRlc3RbdGVzdDFba2V5XV1cbiAqIC0gdGVzdFtcImFcIl1ba2V5XVxuICogLSB4eHgudGVzdFthW2FdLnRlc3QxW2tleV1dXG4gKiAtIHRlc3QueHh4LmFbXCJhc2FcIl1bdGVzdDFba2V5XV1cbiAqXG4gKi9cbnZhciBsZW4sIHN0ciwgY2hyLCBpbmRleCwgZXhwcmVzc2lvblBvcywgZXhwcmVzc2lvbkVuZFBvcztcbmZ1bmN0aW9uIHBhcnNlTW9kZWwodmFsKSB7XG4gICAgLy8gRml4IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvcHVsbC83NzMwXG4gICAgLy8gYWxsb3cgdi1tb2RlbD1cIm9iai52YWwgXCIgKHRyYWlsaW5nIHdoaXRlc3BhY2UpXG4gICAgdmFsID0gdmFsLnRyaW0oKTtcbiAgICBsZW4gPSB2YWwubGVuZ3RoO1xuICAgIGlmICh2YWwuaW5kZXhPZignWycpIDwgMCB8fCB2YWwubGFzdEluZGV4T2YoJ10nKSA8IGxlbiAtIDEpIHtcbiAgICAgICAgaW5kZXggPSB2YWwubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXhwOiB2YWwuc2xpY2UoMCwgaW5kZXgpLFxuICAgICAgICAgICAgICAgIGtleTogJ1wiJyArIHZhbC5zbGljZShpbmRleCArIDEpICsgJ1wiJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXhwOiB2YWwsXG4gICAgICAgICAgICAgICAga2V5OiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0ciA9IHZhbDtcbiAgICBpbmRleCA9IGV4cHJlc3Npb25Qb3MgPSBleHByZXNzaW9uRW5kUG9zID0gMDtcbiAgICB3aGlsZSAoIWVvZigpKSB7XG4gICAgICAgIGNociA9IG5leHQoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcbiAgICAgICAgICAgIHBhcnNlU3RyaW5nKGNocik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2hyID09PSAweDViKSB7XG4gICAgICAgICAgICBwYXJzZUJyYWNrZXQoY2hyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBleHA6IHZhbC5zbGljZSgwLCBleHByZXNzaW9uUG9zKSxcbiAgICAgICAga2V5OiB2YWwuc2xpY2UoZXhwcmVzc2lvblBvcyArIDEsIGV4cHJlc3Npb25FbmRQb3MpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIG5leHQoKSB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KCsraW5kZXgpO1xufVxuZnVuY3Rpb24gZW9mKCkge1xuICAgIHJldHVybi
13835BpbmRleCA+PSBsZW47XG59XG5mdW5jdGlvbiBpc1N0cmluZ1N0YXJ0KGNocikge1xuICAgIHJldHVybiBjaHIgPT09IDB4MjIgfHwgY2hyID09PSAweDI3O1xufVxuZnVuY3Rpb24gcGFyc2VCcmFja2V0KGNocikge1xuICAgIHZhciBpbkJyYWNrZXQgPSAxO1xuICAgIGV4cHJlc3Npb25Qb3MgPSBpbmRleDtcbiAgICB3aGlsZSAoIWVvZigpKSB7XG4gICAgICAgIGNociA9IG5leHQoKTtcbiAgICAgICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaHIgPT09IDB4NWIpXG4gICAgICAgICAgICBpbkJyYWNrZXQrKztcbiAgICAgICAgaWYgKGNociA9PT0gMHg1ZClcbiAgICAgICAgICAgIGluQnJhY2tldC0tO1xuICAgICAgICBpZiAoaW5CcmFja2V0ID09PSAwKSB7XG4gICAgICAgICAgICBleHByZXNzaW9uRW5kUG9zID0gaW5kZXg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKGNocikge1xuICAgIHZhciBzdHJpbmdRdW90ZSA9IGNocjtcbiAgICB3aGlsZSAoIWVvZigpKSB7XG4gICAgICAgIGNociA9IG5leHQoKTtcbiAgICAgICAgaWYgKGNociA9PT0gc3RyaW5nUXVvdGUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgd2FybiQxO1xuLy8gaW4gc29tZSBjYXNlcywgdGhlIGV2ZW50IHVzZWQgaGFzIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZVxuLy8gc28gd2UgdXNlZCBzb21lIHJlc2VydmVkIHRva2VucyBkdXJpbmcgY29tcGlsZS5cbnZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xudmFyIENIRUNLQk9YX1JBRElPX1RPS0VOID0gJ19fYyc7XG5mdW5jdGlvbiBtb2RlbCQxKGVsLCBkaXIsIF93YXJuKSB7XG4gICAgd2FybiQxID0gX3dhcm47XG4gICAgdmFyIHZhbHVlID0gZGlyLnZhbHVlO1xuICAgIHZhciBtb2RpZmllcnMgPSBkaXIubW9kaWZpZXJzO1xuICAgIHZhciB0YWcgPSBlbC50YWc7XG4gICAgdmFyIHR5cGUgPSBlbC5hdHRyc01hcC50eXBlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIC8vIGlucHV0cyB3aXRoIHR5cGU9XCJmaWxlXCIgYXJlIHJlYWQgb25seSBhbmQgc2V0dGluZyB0aGUgaW5wdXQnc1xuICAgICAgICAvLyB2YWx1ZSB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAgICBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgd2FybiQxKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtbW9kZWw9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIiB0eXBlPVxcXCJmaWxlXFxcIj46XFxuXCIpICtcbiAgICAgICAgICAgICAgICBcIkZpbGUgaW5wdXRzIGFyZSByZWFkIG9ubHkuIFVzZSBhIHYtb246Y2hhbmdlIGxpc3RlbmVyIGluc3RlYWQuXCIsIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICAgICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgICAgICAvLyBjb21wb25lbnQgdi1tb2RlbCBkb2Vzbid0IG5lZWQgZXh0cmEgcnVudGltZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgZ2VuU2VsZWN0KGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgZ2VuQ2hlY2tib3hNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICAgIGdlblJhZGlvTW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnKSB7XG4gICAgICAgIGdlbkRlZmF1bHRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAgIGdlbkNvbXBvbmVudE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICAgICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4kMShcIjxcIi5jb25jYXQoZWwudGFnLCBcIiB2LW1vZGVsPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCI+OiBcIikgK1xuICAgICAgICAgICAgXCJ2LW1vZGVsIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBlbGVtZW50IHR5cGUuIFwiICtcbiAgICAgICAgICAgIFwiSWYgeW91IGFyZSB3b3JraW5nIHdpdGggY29udGVudGVkaXRhYmxlLCBpdCdzIHJlY29tbWVuZGVkIHRvIFwiICtcbiAgICAgICAgICAgICd3cmFwIGEgbGlicmFyeSBkZWRpY2F0ZWQgZm9yIHRoYXQgcHVycG9zZSBpbnNpZGUgYSBjdXN0b20gY29tcG9uZW50LicsIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ10pO1xuICAgIH1cbiAgICAvLyBlbnN1cmUgcnVudGltZSBkaXJlY3RpdmUgbWV0YWRhdGFcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdlbkNoZWNrYm94TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcbiAgICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gICAgdmFyIHZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndmFsdWUnKSB8fCAnbnVsbCc7XG4gICAgdmFyIHRydWVWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3RydWUtdmFsdWUnKSB8fCAndHJ1ZSc7XG4gICAgdmFyIGZhbHNlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdmYWxzZS12YWx1ZScpIHx8ICdmYWxzZSc7XG4gICAgYWRkUHJvcChlbCwgJ2NoZWNrZWQnLCBcIkFycmF5LmlzQXJyYXkoXCIuY29uY2F0KHZhbHVlLCBcIilcIikgK1xuICAgICAgICBcIj9faShcIi5jb25jYXQodmFsdWUsIFwiLFwiKS5jb25jYXQodmFsdWVCaW5kaW5nLCBcIik+LTFcIikgK1xuICAgICAgICAodHJ1ZVZhbHVlQmluZGluZyA9PT0gJ3RydWUnXG4gICAgICAgICAgICA/IFwiOihcIi5jb25jYXQodmFsdWUsIFwiKVwiKVxuICAgICAgICAgICAgOiBcIjpfcShcIi5jb25jYXQodmFsdWUsIFwiLFwiKS5jb25jYXQodHJ1ZVZhbHVlQmluZGluZywgXCIpXCIpKSk7XG4gICAgYWRkSGFuZGxlcihlbCwgJ2NoYW5nZScsIFwidmFyICQkYT1cIi5jb25jYXQodmFsdWUsIFwiLFwiKSArXG4gICAgICAgICckJGVsPSRldmVudC50YXJnZXQsJyArXG4gICAgICAgIFwiJCRjPSQkZWwuY2hlY2tlZD8oXCIuY29uY2F0KHRydWVWYWx1ZUJpbmRpbmcsIFwiKTooXCIpLmNvbmNhdChmYWxzZVZhbHVlQmluZGluZywgXCIpO1wiKSArXG4gICAgICAgICdpZihBcnJheS5pc0FycmF
138355KCQkYSkpeycgK1xuICAgICAgICBcInZhciAkJHY9XCIuY29uY2F0KG51bWJlciA/ICdfbignICsgdmFsdWVCaW5kaW5nICsgJyknIDogdmFsdWVCaW5kaW5nLCBcIixcIikgK1xuICAgICAgICAnJCRpPV9pKCQkYSwkJHYpOycgK1xuICAgICAgICBcImlmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihcIi5jb25jYXQoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsICckJGEuY29uY2F0KFskJHZdKScpLCBcIil9XCIpICtcbiAgICAgICAgXCJlbHNleyQkaT4tMSYmKFwiLmNvbmNhdChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYS5zbGljZSgwLCQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkrMSkpJyksIFwiKX1cIikgK1xuICAgICAgICBcIn1lbHNle1wiLmNvbmNhdChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYycpLCBcIn1cIiksIG51bGwsIHRydWUpO1xufVxuZnVuY3Rpb24gZ2VuUmFkaW9Nb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycykge1xuICAgIHZhciBudW1iZXIgPSBtb2RpZmllcnMgJiYgbW9kaWZpZXJzLm51bWJlcjtcbiAgICB2YXIgdmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICd2YWx1ZScpIHx8ICdudWxsJztcbiAgICB2YWx1ZUJpbmRpbmcgPSBudW1iZXIgPyBcIl9uKFwiLmNvbmNhdCh2YWx1ZUJpbmRpbmcsIFwiKVwiKSA6IHZhbHVlQmluZGluZztcbiAgICBhZGRQcm9wKGVsLCAnY2hlY2tlZCcsIFwiX3EoXCIuY29uY2F0KHZhbHVlLCBcIixcIikuY29uY2F0KHZhbHVlQmluZGluZywgXCIpXCIpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlQmluZGluZyksIG51bGwsIHRydWUpO1xufVxuZnVuY3Rpb24gZ2VuU2VsZWN0KGVsLCB2YWx1ZSwgbW9kaWZpZXJzKSB7XG4gICAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICAgIHZhciBzZWxlY3RlZFZhbCA9IFwiQXJyYXkucHJvdG90eXBlLmZpbHRlclwiICtcbiAgICAgICAgXCIuY2FsbCgkZXZlbnQudGFyZ2V0Lm9wdGlvbnMsZnVuY3Rpb24obyl7cmV0dXJuIG8uc2VsZWN0ZWR9KVwiICtcbiAgICAgICAgXCIubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSBcXFwiX3ZhbHVlXFxcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlO1wiICtcbiAgICAgICAgXCJyZXR1cm4gXCIuY29uY2F0KG51bWJlciA/ICdfbih2YWwpJyA6ICd2YWwnLCBcIn0pXCIpO1xuICAgIHZhciBhc3NpZ25tZW50ID0gJyRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXSc7XG4gICAgdmFyIGNvZGUgPSBcInZhciAkJHNlbGVjdGVkVmFsID0gXCIuY29uY2F0KHNlbGVjdGVkVmFsLCBcIjtcIik7XG4gICAgY29kZSA9IFwiXCIuY29uY2F0KGNvZGUsIFwiIFwiKS5jb25jYXQoZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIGFzc2lnbm1lbnQpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgY29kZSwgbnVsbCwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBnZW5EZWZhdWx0TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpIHtcbiAgICB2YXIgdHlwZSA9IGVsLmF0dHJzTWFwLnR5cGU7XG4gICAgLy8gd2FybiBpZiB2LWJpbmQ6dmFsdWUgY29uZmxpY3RzIHdpdGggdi1tb2RlbFxuICAgIC8vIGV4Y2VwdCBmb3IgaW5wdXRzIHdpdGggdi1iaW5kOnR5cGVcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2Y
13835XIgdmFsdWVfMSA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dmFsdWUnXSB8fCBlbC5hdHRyc01hcFsnOnZhbHVlJ107XG4gICAgICAgIHZhciB0eXBlQmluZGluZyA9IGVsLmF0dHJzTWFwWyd2LWJpbmQ6dHlwZSddIHx8IGVsLmF0dHJzTWFwWyc6dHlwZSddO1xuICAgICAgICBpZiAodmFsdWVfMSAmJiAhdHlwZUJpbmRpbmcpIHtcbiAgICAgICAgICAgIHZhciBiaW5kaW5nID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp2YWx1ZSddID8gJ3YtYmluZDp2YWx1ZScgOiAnOnZhbHVlJztcbiAgICAgICAgICAgIHdhcm4kMShcIlwiLmNvbmNhdChiaW5kaW5nLCBcIj1cXFwiXCIpLmNvbmNhdCh2YWx1ZV8xLCBcIlxcXCIgY29uZmxpY3RzIHdpdGggdi1tb2RlbCBvbiB0aGUgc2FtZSBlbGVtZW50IFwiKSArXG4gICAgICAgICAgICAgICAgJ2JlY2F1c2UgdGhlIGxhdHRlciBhbHJlYWR5IGV4cGFuZHMgdG8gYSB2YWx1ZSBiaW5kaW5nIGludGVybmFsbHknLCBlbC5yYXdBdHRyc01hcFtiaW5kaW5nXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIF9hID0gbW9kaWZpZXJzIHx8IHt9LCBsYXp5ID0gX2EubGF6eSwgbnVtYmVyID0gX2EubnVtYmVyLCB0cmltID0gX2EudHJpbTtcbiAgICB2YXIgbmVlZENvbXBvc2l0aW9uR3VhcmQgPSAhbGF6eSAmJiB0eXBlICE9PSAncmFuZ2UnO1xuICAgIHZhciBldmVudCA9IGxhenkgPyAnY2hhbmdlJyA6IHR5cGUgPT09ICdyYW5nZScgPyBSQU5HRV9UT0tFTiA6ICdpbnB1dCc7XG4gICAgdmFyIHZhbHVlRXhwcmVzc2lvbiA9ICckZXZlbnQudGFyZ2V0LnZhbHVlJztcbiAgICBpZiAodHJpbSkge1xuICAgICAgICB2YWx1ZUV4cHJlc3Npb24gPSBcIiRldmVudC50YXJnZXQudmFsdWUudHJpbSgpXCI7XG4gICAgfVxuICAgIGlmIChudW1iZXIpIHtcbiAgICAgICAgdmFsdWVFeHByZXNzaW9uID0gXCJfbihcIi5jb25jYXQodmFsdWVFeHByZXNzaW9uLCBcIilcIik7XG4gICAgfVxuICAgIHZhciBjb2RlID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlRXhwcmVzc2lvbik7XG4gICAgaWYgKG5lZWRDb21wb3NpdGlvbkd1YXJkKSB7XG4gICAgICAgIGNvZGUgPSBcImlmKCRldmVudC50YXJnZXQuY29tcG9zaW5nKXJldHVybjtcIi5jb25jYXQoY29kZSk7XG4gICAgfVxuICAgIGFkZFByb3AoZWwsICd2YWx1ZScsIFwiKFwiLmNvbmNhdCh2YWx1ZSwgXCIpXCIpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCBldmVudCwgY29kZSwgbnVsbCwgdHJ1ZSk7XG4gICAgaWYgKHRyaW0gfHwgbnVtYmVyKSB7XG4gICAgICAgIGFkZEhhbmRsZXIoZWwsICdibHVyJywgJyRmb3JjZVVwZGF0ZSgpJyk7XG4gICAgfVxufVxuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4vLyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzKG9uKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAgICAgLy8gSUUgaW5wdXRbdHlwZT1yYW5nZV0gb25seSBzdXBwb3J0cyBgY2hhbmdlYCBldmVudFxuICAgICAgICB2Y
13835XIgZXZlbnRfMSA9IGlzSUUgPyAnY2hhbmdlJyA6ICdpbnB1dCc7XG4gICAgICAgIG9uW2V2ZW50XzFdID0gW10uY29uY2F0KG9uW1JBTkdFX1RPS0VOXSwgb25bZXZlbnRfMV0gfHwgW10pO1xuICAgICAgICBkZWxldGUgb25bUkFOR0VfVE9LRU5dO1xuICAgIH1cbiAgICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAgIC8vIGFmdGVyIDIuNS4gS2VlcGluZyBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdCB3aXRoIGdlbmVyYXRlZCBjb2RlIGZyb20gPCAyLjRcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgICAgICBvbi5jaGFuZ2UgPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBvbi5jaGFuZ2UgfHwgW10pO1xuICAgICAgICBkZWxldGUgb25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dO1xuICAgIH1cbn1cbnZhciB0YXJnZXQ7XG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlcihldmVudCwgaGFuZGxlciwgY2FwdHVyZSkge1xuICAgIHZhciBfdGFyZ2V0ID0gdGFyZ2V0OyAvLyBzYXZlIGN1cnJlbnQgdGFyZ2V0IGVsZW1lbnQgaW4gY2xvc3VyZVxuICAgIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlcigpIHtcbiAgICAgICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVtb3ZlKGV2ZW50LCBvbmNlSGFuZGxlciwgY2FwdHVyZSwgX3RhcmdldCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuLy8gIzk0NDY6IEZpcmVmb3ggPD0gNTMgKGluIHBhcnRpY3VsYXIsIEVTUiA1MikgaGFzIGluY29ycmVjdCBFdmVudC50aW1lU3RhbXBcbi8vIGltcGxlbWVudGF0aW9uIGFuZCBkb2VzIG5vdCBmaXJlIG1pY3JvdGFza3MgaW4gYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbiwgc29cbi8vIHNhZmUgdG8gZXhjbHVkZS5cbnZhciB1c2VNaWNyb3Rhc2tGaXggPSBpc1VzaW5nTWljcm9UYXNrICYmICEoaXNGRiAmJiBOdW1iZXIoaXNGRlsxXSkgPD0gNTMpO1xuZnVuY3Rpb24gYWRkKG5hbWUsIGhhbmRsZXIsIGNhcHR1cmUsIHBhc3NpdmUpIHtcbiAgICAvLyBhc3luYyBlZGdlIGNhc2UgIzY1NjY6IGlubmVyIGNsaWNrIGV2ZW50IHRyaWdnZXJzIHBhdGNoLCBldmVudCBoYW5kbGVyXG4gICAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcbiAgICAvLyBoYXBwZW5zIGJlY2F1c2UgYnJvd3NlcnMgZmlyZSBtaWNyb3Rhc2sgdGlja3MgYmV0d2VlbiBldmVudCBwcm9wYWdhdGlvbi5cbiAgICAvLyB0aGUgc29sdXRpb24gaXMgc2ltcGxlOiB3ZSBzYXZlIHRoZSB0aW1lc3RhbXAgd2hlbiBhIGhhbmRsZXIgaXMgYXR0YWNoZWQsXG4gICAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxuICAgIC8vIEFGVEVSIGl0IHdhcyBhdHRhY2hlZC5cbiAgICBpZiAodXNlTWljcm90YXNrRml4KSB7XG4gICAgICAgIHZhciBhdHRhY2hlZFRpbWVzdGFtcF8xID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgICAgICB2Y
13835XIgb3JpZ2luYWxfMSA9IGhhbmRsZXI7XG4gICAgICAgIC8vQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBoYW5kbGVyID0gb3JpZ2luYWxfMS5fd3JhcHBlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyBubyBidWJibGluZywgc2hvdWxkIGFsd2F5cyBmaXJlLlxuICAgICAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGEgc2FmZXR5IG5ldCBpbiBjYXNlIGV2ZW50LnRpbWVTdGFtcCBpcyB1bnJlbGlhYmxlIGluXG4gICAgICAgICAgICAvLyBjZXJ0YWluIHdlaXJkIGVudmlyb25tZW50cy4uLlxuICAgICAgICAgICAgZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAgICAgICAgIC8vIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGhhbmRsZXIgYXR0YWNobWVudFxuICAgICAgICAgICAgICAgIGUudGltZVN0YW1wID49IGF0dGFjaGVkVGltZXN0YW1wXzEgfHxcbiAgICAgICAgICAgICAgICAvLyBiYWlsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBoYXZlIGJ1Z2d5IGV2ZW50LnRpbWVTdGFtcCBpbXBsZW1lbnRhdGlvbnNcbiAgICAgICAgICAgICAgICAvLyAjOTQ2MiBpT1MgOSBidWc6IGV2ZW50LnRpbWVTdGFtcCBpcyAwIGFmdGVyIGhpc3RvcnkucHVzaFN0YXRlXG4gICAgICAgICAgICAgICAgLy8gIzk2ODEgUXRXZWJFbmdpbmUgZXZlbnQudGltZVN0YW1wIGlzIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgICAgICAgICAgZS50aW1lU3RhbXAgPD0gMCB8fFxuICAgICAgICAgICAgICAgIC8vICM5NDQ4IGJhaWwgaWYgZXZlbnQgaXMgZmlyZWQgaW4gYW5vdGhlciBkb2N1bWVudCBpbiBhIG11bHRpLXBhZ2VcbiAgICAgICAgICAgICAgICAvLyBlbGVjdHJvbi9udy5qcyBhcHAsIHNpbmNlIGV2ZW50LnRpbWVTdGFtcCB3aWxsIGJlIHVzaW5nIGEgZGlmZmVyZW50XG4gICAgICAgICAgICAgICAgLy8gc3RhcnRpbmcgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgZS50YXJnZXQub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxfMS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVyLCBzdXBwb3J0c1Bhc3NpdmUgPyB7IGNhcHR1cmU6IGNhcHR1cmUsIHBhc3NpdmU6IHBhc3NpdmUgfSA6IGNhcHR1cmUpO1xufVxuZnVuY3Rpb24gcmVtb3ZlKG5hbWUsIGhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpIHtcbiAgICAoX3RhcmdldCB8fCB0YXJnZXQpLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgXG4gICAgLy9AdHMtZXhwZWN0LWVycm9yXG4gICAgaGFuZGxlci5fd3JhcHBlciB8fCBoYW5kbGVyLCBjYXB0dXJlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyhvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLm9uKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEub24pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG9uID0gdm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgICB2YXIgb2xkT24gPSBvbGRWbm9kZS5kYXRhLm9uIHx8IHt9O1xuICAgIC8vIHZub2RlIGlzIGVtcHR5IHdoZW4gcmVtb3ZpbmcgYWxsIGxpc3RlbmVycyxcbiAgICAvLyBhbmQgdXNlIG9sZCB2bm9kZSBkb20gZWxlbWVudFxuICAgIHRhcmdldCA9IHZub2RlLmVsbSB8fCBvbGRWbm9kZS5lbG07XG4gICAgbm9ybWFsaXplRXZlbnRzKG9uKTtcbiAgICB1cGRhdGVMaXN0ZW5lcnMob24sIG9sZE9uLCBhZGQsIHJlbW92ZSwgY3JlYXRlT25jZUhhbmRsZXIsIHZub2RlLmNvbnRleHQpO1xuICAgIHRhcmdldCA9IHVuZGVmaW5lZDtcbn1cbnZhciBldmVudHMgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVET01MaXN0ZW5lcnMsXG4gICAgdXBkYXRlOiB1cGRhdGVET01MaXN0ZW5lcnMsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlbXB0eU5vZGUgaGFzIGFjdHVhbGx5IGRhdGFcbiAgICBkZXN0cm95OiBmdW5jdGlvbiAodm5vZGUpIHsgcmV0dXJuIHVwZGF0ZURPTUxpc3RlbmVycyh2bm9kZSwgZW1wdHlOb2RlKTsgfVxufTtcblxudmFyIHN2Z0NvbnRhaW5lcjtcbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BzKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEuZG9tUHJvcHMpICYmIGlzVW5kZWYodm5vZGUuZGF0YS5kb21Qcm9wcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIga2V5LCBjdXI7XG4gICAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgICB2YXIgb2xkUHJvcHMgPSBvbGRWbm9kZS5kYXRhLmRvbVByb3BzIHx8IHt9O1xuICAgIHZhciBwcm9wcyA9IHZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gICAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gICAgaWYgKGlzRGVmKHByb3BzLl9fb2JfXykgfHwgaXNUcnVlKHByb3BzLl92X2F0dHJfcHJveHkpKSB7XG4gICAgICAgIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyA9IGV4dGVuZCh7fSwgcHJvcHMpO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgICAgICBpZiAoIShrZXkgaW4gcHJvcHMpKSB7XG4gICAgICAgICAgICBlbG1ba2V5XSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHByb3BzKSB7XG4gICAgICAgIGN1ciA9IHByb3BzW2tleV07XG4gICAgICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgICAgICAvLyBhcyB0aGVzZSB3aWxsIHRocm93IGF3YXkgZXhpc3RpbmcgRE9NIG5vZGVzIGFuZCBjYXVzZSByZW1vdmFsIGVycm9yc1xuICAgICAgICAvLyBvbiBzdWJzZXF1ZW50IHBhdGNoZXMgKCMzMzYwKVxuICAgICAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgICAgIGlmICh2bm9kZS5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICB2bm9kZS5jaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgICAgICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vICM2NjAxIHdvcmsgYXJvdW5kIENocm9tZSB2ZXJzaW9uIDw9IDU1IGJ1ZyB3aGVyZSBzaW5nbGUgdGV4dE5vZGVcbiAgICAgICAgICAgIC8vIHJlcGxhY2VkIGJ5IGlubmVySFRNTC90ZXh0Q29udGVudCByZXRhaW5zIGl0cyBwYXJlbnROb2RlI
13835HByb3BlcnR5XG4gICAgICAgICAgICBpZiAoZWxtLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZWxtLnJlbW92ZUNoaWxkKGVsbS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAndmFsdWUnICYmIGVsbS50YWdOYW1lICE9PSAnUFJPR1JFU1MnKSB7XG4gICAgICAgICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2VsbCBzaW5jZVxuICAgICAgICAgICAgLy8gbm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZFxuICAgICAgICAgICAgZWxtLl92YWx1ZSA9IGN1cjtcbiAgICAgICAgICAgIC8vIGF2b2lkIHJlc2V0dGluZyBjdXJzb3IgcG9zaXRpb24gd2hlbiB2YWx1ZSBpcyB0aGUgc2FtZVxuICAgICAgICAgICAgdmFyIHN0ckN1ciA9IGlzVW5kZWYoY3VyKSA/ICcnIDogU3RyaW5nKGN1cik7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXBkYXRlVmFsdWUoZWxtLCBzdHJDdXIpKSB7XG4gICAgICAgICAgICAgICAgZWxtLnZhbHVlID0gc3RyQ3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleSA9PT0gJ2lubmVySFRNTCcgJiZcbiAgICAgICAgICAgIGlzU1ZHKGVsbS50YWdOYW1lKSAmJlxuICAgICAgICAgICAgaXNVbmRlZihlbG0uaW5uZXJIVE1MKSkge1xuICAgICAgICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGlubmVySFRNTCBmb3IgU1ZHIGVsZW1lbnRzXG4gICAgICAgICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzdmdDb250YWluZXIuaW5uZXJIVE1MID0gXCI8c3ZnPlwiLmNvbmNhdChjdXIsIFwiPC9zdmc+XCIpO1xuICAgICAgICAgICAgdmFyIHN2ZyA9IHN2Z0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICAgICAgd2hpbGUgKGVsbS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgZWxtLnJlbW92ZUNoaWxkKGVsbS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChzdmcuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIGVsbS5hcHBlbmRDaGlsZChzdmcuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgIC8vIHNraXAgdGhlIHVwZGF0ZSBpZiBvbGQgYW5kIG5ldyBWRE9NIHN0YXRlIGlzIHRoZSBzYW1lLlxuICAgICAgICAvLyBgdmFsdWVgIGlzIGhhbmRsZWQgc2VwYXJhdGVseSBiZWNhdXNlIHRoZSBET00gdmFsdWUgbWF5IGJlIHRlbXBvcmFyaWx5XG4gICAgICAgIC8vIG91dCBvZiBzeW5jIHdpdGggVkRPTSBzdGF0ZSBkdWUgdG8gZm9jdXMsIGNvbXBvc2l0aW9uIGFuZCBtb2RpZmllcnMuXG4gICAgICAgIC8vIFRoaXMgICM0NTIxIGJ5IHNraXBwaW5nIHRoZSB1bm5lY2Vzc2FyeSBgY2hlY2tlZGAgdXBkYXRlLlxuICAgICAgICBjdXIgIT09IG9sZFByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIC8vIHNvbWUgcHJvcGVydHkgdXBkYXRlcyBjYW4gdGhyb3dcbiAgICAgICAgICAgIC8vIGUuZy4gYHZhbHVlYCBvbiA8cHJvZ3Jlc3M+IHcvIG5vbi1maW5pdGUgdmFsdWVcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZWxtW2tleV0gPSBjdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzaG91bGRVcGRhdGVWYWx1ZShlbG0sIGNoZWNrVmFsKSB7XG4gICAgcmV0dXJuIChcbiAgICAvL0B0cy1leHBlY3QtZXJyb3JcbiAgICAhZWxtLmNvbXBvc2luZyAmJlxuICAgICAgICAoZWxtLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgICAgICAgICBpc05vdEluRm9jdXNBbmREaXJ0eShlbG0sIGNoZWNrVmFsKSB8fFxuICAgICAgICAgICAgaXNEaXJ0eVdpdGhNb2RpZmllcnMoZWxtLCBjaGVja1ZhbCkpKTtcbn1cbmZ1bmN0aW9uIGlzTm90SW5Gb2N1c0FuZERpcnR5KGVsbSwgY2hlY2tWYWwpIHtcbiAgICAvLyByZXR1cm4gdHJ1ZSB3aGVuIHRleHRib3ggKC5udW1iZXIgYW5kIC50cmltKSBsb3NlcyBmb2N1cyBhbmQgaXRzIHZhbHVlIGlzXG4gICAgLy8gbm90IGVxdWFsIHRvIHRoZSB1cGRhdGVkIHZhbHVlXG4gICAgdmFyIG5vdEluRm9jdXMgPSB0cnVlO1xuICAgIC8vICM2MTU3XG4gICAgLy8gd29yayBhcm91bmQgSUUgYnVnIHdoZW4gYWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW4gYW4gaWZyYW1lXG4gICAgdHJ5IHtcbiAgICAgICAgbm90SW5Gb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVsbTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHsgfVxuICAgIHJldHVybiBub3RJbkZvY3VzICYmIGVsbS52YWx1ZSAhPT0gY2hlY2tWYWw7XG59XG5mdW5jdGlvbiBpc0RpcnR5V2l0aE1vZGlmaWVycyhlbG0sIG5ld1ZhbCkge1xuICAgIHZhciB2YWx1ZSA9IGVsbS52YWx1ZTtcbiAgICB2YXIgbW9kaWZpZXJzID0gZWxtLl92TW9kaWZpZXJzOyAvLyBpbmplY3RlZCBieSB2LW1vZGVsIHJ1bnRpbWVcbiAgICBpZiAoaXNEZWYobW9kaWZpZXJzKSkge1xuICAgICAgICBpZiAobW9kaWZpZXJzLm51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKSAhPT0gdG9OdW1iZXIobmV3VmFsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXJzLnRyaW0pIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50cmltKCkgIT09IG5ld1ZhbC50cmltKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWw7XG59XG52YXIgZG9tUHJvcHMgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVET01Qcm9wcyxcbiAgICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXG59O1xuXG52YXIgcGFyc2VTdHlsZVRleHQgPSBjYWNoZWQoZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgICB2YXIgcmVzID0ge307XG4gICAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwpKS9nO1xuICAgIHZhciBwcm9wZXJ0eURlbGltaXRlciA9IC86KC4rKS87XG4gICAgY3NzVGV4dC5zcGxpdChsaXN0RGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB2Y
13835XIgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlcik7XG4gICAgICAgICAgICB0bXAubGVuZ3RoID4gMSAmJiAocmVzW3RtcFswXS50cmltKCldID0gdG1wWzFdLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xufSk7XG4vLyBtZXJnZSBzdGF0aWMgYW5kIGR5bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhKGRhdGEpIHtcbiAgICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcoZGF0YS5zdHlsZSk7XG4gICAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmplY3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gICAgLy8gYW5kIGlzIGFsd2F5cyBhIGZyZXNoIG9iamVjdCwgc28gaXQncyBzYWZlIHRvIG1lcmdlIGludG8gaXRcbiAgICByZXR1cm4gZGF0YS5zdGF0aWNTdHlsZSA/IGV4dGVuZChkYXRhLnN0YXRpY1N0eWxlLCBzdHlsZSkgOiBzdHlsZTtcbn1cbi8vIG5vcm1hbGl6ZSBwb3NzaWJsZSBhcnJheSAvIHN0cmluZyB2YWx1ZXMgaW50byBPYmplY3RcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlQmluZGluZyhiaW5kaW5nU3R5bGUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgICAgIHJldHVybiB0b09iamVjdChiaW5kaW5nU3R5bGUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlU3R5bGVUZXh0KGJpbmRpbmdTdHlsZSk7XG4gICAgfVxuICAgIHJldHVybiBiaW5kaW5nU3R5bGU7XG59XG4vKipcbiAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAqIHNvIHRoYXQgcGFyZW50IGNvbXBvbmVudCdzIHN0eWxlIGNvdWxkIG92ZXJyaWRlIGl0XG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxlKHZub2RlLCBjaGVja0NoaWxkKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBzdHlsZURhdGE7XG4gICAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICAgICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgICAgICB3aGlsZSAoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZSAmJlxuICAgICAgICAgICAgICAgIGNoaWxkTm9kZS5kYXRhICYmXG4gICAgICAgICAgICAgICAgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShjaGlsZE5vZGUuZGF0YSkpKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YSh2bm9kZS5kYXRhKSkpIHtcbiAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICB9XG4gICAgdmFyIHBhcmVudE5vZGUgPSB2bm9kZTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHBhcmVudE5vZGUucGFyZW50IG5vdCBWTm9kZVdpdGhEYXRhXG4gICAgd2hpbGUgKChwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgICAgIGlmIChwYXJlbnROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xuICAgICAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG52YXIgY3NzVmFyUkUgPSAvXi0tLztcbnZhciBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xudmFyIHNldFByb3AgPSBmdW5jdGlvbiAoZWwsIG5hbWUsIHZhbCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGltcG9ydGFudFJFLnRlc3QodmFsKSkge1xuICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShoeXBoZW5hdGUobmFtZSksIHZhbC5yZXBsYWNlKGltcG9ydGFudFJFLCAnJyksICdpbXBvcnRhbnQnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cbiAgICAgICAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgICAgICAgIC8vIFNldCB0aGVtIG9uZSBieSBvbmUsIGFuZCB0aGUgYnJvd3NlciB3aWxsIG9ubHkgc2V0IHRob3NlIGl0IGNhbiByZWNvZ25pemVcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWxbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG59O1xudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG52YXIgZW1wdHlTdHlsZTtcbnZhciBub3JtYWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHByb3ApIHtcbiAgICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcbiAgICBwcm9wID0gY2FtZWxpemUocHJvcCk7XG4gICAgaWYgKHByb3AgIT09ICdmaWx0ZXInICYmIHByb3AgaW4gZW1wdHlTdHlsZSkge1xuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG4gICAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvck5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgI
13835HZhciBuYW1lXzEgPSB2ZW5kb3JOYW1lc1tpXSArIGNhcE5hbWU7XG4gICAgICAgIGlmIChuYW1lXzEgaW4gZW1wdHlTdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVfMTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuZnVuY3Rpb24gdXBkYXRlU3R5bGUob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcbiAgICBpZiAoaXNVbmRlZihkYXRhLnN0YXRpY1N0eWxlKSAmJlxuICAgICAgICBpc1VuZGVmKGRhdGEuc3R5bGUpICYmXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiZcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLnN0eWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjdXIsIG5hbWU7XG4gICAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICAgIHZhciBvbGRTdGF0aWNTdHlsZSA9IG9sZERhdGEuc3RhdGljU3R5bGU7XG4gICAgdmFyIG9sZFN0eWxlQmluZGluZyA9IG9sZERhdGEubm9ybWFsaXplZFN0eWxlIHx8IG9sZERhdGEuc3R5bGUgfHwge307XG4gICAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG4gICAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKHZub2RlLmRhdGEuc3R5bGUpIHx8IHt9O1xuICAgIC8vIHN0b3JlIG5vcm1hbGl6ZWQgc3R5bGUgdW5kZXIgYSBkaWZmZXJlbnQga2V5IGZvciBuZXh0IGRpZmZcbiAgICAvLyBtYWtlIHN1cmUgdG8gY2xvbmUgaXQgaWYgaXQncyByZWFjdGl2ZSwgc2luY2UgdGhlIHVzZXIgbGlrZWx5IHdhbnRzXG4gICAgLy8gdG8gbXV0YXRlIGl0LlxuICAgIHZub2RlLmRhdGEubm9ybWFsaXplZFN0eWxlID0gaXNEZWYoc3R5bGUuX19vYl9fKSA/IGV4dGVuZCh7fSwgc3R5bGUpIDogc3R5bGU7XG4gICAgdmFyIG5ld1N0eWxlID0gZ2V0U3R5bGUodm5vZGUsIHRydWUpO1xuICAgIGZvciAobmFtZSBpbiBvbGRTdHlsZSkge1xuICAgICAgICBpZiAoaXNVbmRlZihuZXdTdHlsZVtuYW1lXSkpIHtcbiAgICAgICAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKG5hbWUgaW4gbmV3U3R5bGUpIHtcbiAgICAgICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgICAgIGlmIChjdXIgIT09IG9sZFN0eWxlW25hbWVdKSB7XG4gICAgICAgICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgc2V0UHJvcChlbCwgbmFtZSwgY3VyID09IG51bGwgPyAnJyA6IGN1cik7XG4gICAgICAgIH1cbiAgICB9XG59XG52YXIgc3R5bGUkMSA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZVN0eWxlLFxuICAgIHVwZGF0ZTogdXBkYXRlU3R5bGVcbn07XG5cbnZhciB3aGl0ZXNwYWNlUkUkMSA9IC9cXHMrLztcbi8qKlxuICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gYWRkQ2xhc3MoZWwsIGNscykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSQxKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGN1ciA9IFwiIFwiLmNvbmNhdChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycsIFwiIFwiKTtcbiAgICAgICAgaWYgKGN1ci5pbmRleE9mKCcgJyArIGNscyArICcgJykgPCAwKSB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWwsIGNscykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgICAgaWYgKGNscy5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSQxKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKGMpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoY2xzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGN1ciA9IFwiIFwiLmNvbmNhdChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycsIFwiIFwiKTtcbiAgICAgICAgdmFyIHRhciA9ICcgJyArIGNscyArICcgJztcbiAgICAgICAgd2hpbGUgKGN1ci5pbmRleE9mKHRhcikgPj0gMCkge1xuICAgICAgICAgICAgY3VyID0gY3VyLnJlcGxhY2UodGFyLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGN1ciA9IGN1ci50cmltKCk7XG4gICAgICAgIGlmIChjdXIpIHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbihkZWYpIHtcbiAgICBpZiAoIWRlZikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiBkZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgI
13835HZhciByZXMgPSB7fTtcbiAgICAgICAgaWYgKGRlZi5jc3MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBleHRlbmQocmVzLCBhdXRvQ3NzVHJhbnNpdGlvbihkZWYubmFtZSB8fCAndicpKTtcbiAgICAgICAgfVxuICAgICAgICBleHRlbmQocmVzLCBkZWYpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYXV0b0Nzc1RyYW5zaXRpb24oZGVmKTtcbiAgICB9XG59XG52YXIgYXV0b0Nzc1RyYW5zaXRpb24gPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBlbnRlckNsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1lbnRlclwiKSxcbiAgICAgICAgZW50ZXJUb0NsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1lbnRlci10b1wiKSxcbiAgICAgICAgZW50ZXJBY3RpdmVDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItZW50ZXItYWN0aXZlXCIpLFxuICAgICAgICBsZWF2ZUNsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1sZWF2ZVwiKSxcbiAgICAgICAgbGVhdmVUb0NsYXNzOiBcIlwiLmNvbmNhdChuYW1lLCBcIi1sZWF2ZS10b1wiKSxcbiAgICAgICAgbGVhdmVBY3RpdmVDbGFzczogXCJcIi5jb25jYXQobmFtZSwgXCItbGVhdmUtYWN0aXZlXCIpXG4gICAgfTtcbn0pO1xudmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xudmFyIFRSQU5TSVRJT04gPSAndHJhbnNpdGlvbic7XG52YXIgQU5JTUFUSU9OID0gJ2FuaW1hdGlvbic7XG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXG52YXIgdHJhbnNpdGlvblByb3AgPSAndHJhbnNpdGlvbic7XG52YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcbnZhciBhbmltYXRpb25FbmRFdmVudCA9ICdhbmltYXRpb25lbmQnO1xuaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAod2luZG93Lm9udHJhbnNpdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0cmFuc2l0aW9uUHJvcCA9ICdXZWJraXRUcmFuc2l0aW9uJztcbiAgICAgICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICAgIH1cbiAgICBpZiAod2luZG93Lm9uYW5pbWF0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgd2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYW5pbWF0aW9uUHJvcCA9ICdXZWJraXRBbmltYXRpb24nO1xuICAgICAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICAgIH1cbn1cbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxudmFyIHJhZiA9IGluQnJvd3NlclxuICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgICAgIDogc2V0VGltZW91dFxuICAgIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZuKSB7IHJldHVybiBmbigpOyB9O1xuZnVuY3Rpb24gbmV4dEZyYW1lKGZuKSB7XG4gICAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICByYWYoZm4pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBjbHMpIHtcbiAgICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgICAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XG4gICAgICAgIGFkZENsYXNzKGVsLCBjbHMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgY2xzKSB7XG4gICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgICByZW1vdmUkMihlbC5fdHJhbnNpdGlvbkNsYXNzZXMsIGNscyk7XG4gICAgfVxuICAgIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xufVxuZnVuY3Rpb24gd2hlblRyYW5zaXRpb25FbmRzKGVsLCBleHBlY3RlZFR5cGUsIGNiKSB7XG4gICAgdmFyIF9hID0gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSksIHR5cGUgPSBfYS50eXBlLCB0aW1lb3V0ID0gX2EudGltZW91dCwgcHJvcENvdW50ID0gX2EucHJvcENvdW50O1xuICAgIGlmICghdHlwZSlcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICAgIHZhciBlbmRlZCA9IDA7XG4gICAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgb25FbmQpO1xuICAgICAgICBjYigpO1xuICAgIH07XG4gICAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBlbCkge1xuICAgICAgICAgICAgaWYgKCsrZW5kZWQgPj0gcHJvcENvdW50KSB7XG4gICAgICAgICAgICAgICAgZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgICAgICAgIGVuZCgpO1xuICAgICAgICB9XG4gICAgfSwgdGltZW91dCArIDEpO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbn1cbnZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5mdW5jdGlvbiBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gICAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgICAvLyBKU0RPTSBtYXkgcmV0dXJuIHVuZGVmaW5lZCBmb3IgdHJhbnNpdGlvbiBwcm9wZXJ0aWVzXG4gICAgdmFyIHRyYW5zaXRpb25EZWxheXMgP
13835SAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgIHZhciB0cmFuc2l0aW9uRHVyYXRpb25zID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgICB2YXIgdHJhbnNpdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KHRyYW5zaXRpb25EZWxheXMsIHRyYW5zaXRpb25EdXJhdGlvbnMpO1xuICAgIHZhciBhbmltYXRpb25EZWxheXMgPSAoc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgdmFyIGFuaW1hdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgICB2YXIgYW5pbWF0aW9uVGltZW91dCA9IGdldFRpbWVvdXQoYW5pbWF0aW9uRGVsYXlzLCBhbmltYXRpb25EdXJhdGlvbnMpO1xuICAgIHZhciB0eXBlO1xuICAgIHZhciB0aW1lb3V0ID0gMDtcbiAgICB2YXIgcHJvcENvdW50ID0gMDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZXhwZWN0ZWRUeXBlID09PSBUUkFOU0lUSU9OKSB7XG4gICAgICAgIGlmICh0cmFuc2l0aW9uVGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIHR5cGUgPSBUUkFOU0lUSU9OO1xuICAgICAgICAgICAgdGltZW91dCA9IHRyYW5zaXRpb25UaW1lb3V0O1xuICAgICAgICAgICAgcHJvcENvdW50ID0gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSBBTklNQVRJT04pIHtcbiAgICAgICAgaWYgKGFuaW1hdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICB0eXBlID0gQU5JTUFUSU9OO1xuICAgICAgICAgICAgdGltZW91dCA9IGFuaW1hdGlvblRpbWVvdXQ7XG4gICAgICAgICAgICBwcm9wQ291bnQgPSBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gTWF0aC5tYXgodHJhbnNpdGlvblRpbWVvdXQsIGFuaW1hdGlvblRpbWVvdXQpO1xuICAgICAgICB0eXBlID1cbiAgICAgICAgICAgIHRpbWVvdXQgPiAwXG4gICAgICAgICAgICAgICAgPyB0cmFuc2l0aW9uVGltZW91dCA+IGFuaW1hdGlvblRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgPyBUUkFOU0lUSU9OXG4gICAgICAgICAgICAgICAgICAgIDogQU5JTUFUSU9OXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICAgICAgICA/IHR5cGUgPT09IFRSQU5TSVRJT05cbiAgICAgICAgICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgICAgICAgICAgOiBhbmltYXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgICAgICA6IDA7XG4gICAgfVxuICAgIHZhciBoYXNUcmFuc2Zvcm0gPSB0eXBlID09PSBUUkFOU0lUSU9OICYmIHRyYW5zZm9ybVJFLnRlc3Qoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ1Byb3BlcnR5J10pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgICAgICBoYXNUcmFuc2Zvcm06IGhhc1RyYW5zZm9ybVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRUaW1lb3V0KGRlbGF5cywgZHVyYXRpb25zKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgZGVsYXlzID0gZGVsYXlzLmNvbmNhdChkZWxheXMpO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgICAgICByZXR1cm4gdG9NcyhkKSArIHRvTXMoZGVsYXlzW2ldKTtcbiAgICB9KSk7XG59XG4vLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXG4vLyBpbiBhIGxvY2FsZS1kZXBlbmRlbnQgd2F5LCB1c2luZyBhIGNvbW1hIGluc3RlYWQgb2YgYSBkb3QuXG4vLyBJZiBjb21tYSBpcyBub3QgcmVwbGFjZWQgd2l0aCBhIGRvdCwgdGhlIGlucHV0IHdpbGwgYmUgcm91bmRlZCBkb3duIChpLmUuIGFjdGluZ1xuLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xuZnVuY3Rpb24gdG9NcyhzKSB7XG4gICAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwO1xufVxuXG5mdW5jdGlvbiBlbnRlcih2bm9kZSwgdG9nZ2xlRGlzcGxheSkge1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICAvLyBjYWxsIGxlYXZlIGNhbGxiYWNrIG5vd1xuICAgIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICAgICAgZWwuX2xlYXZlQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgZWwuX2xlYXZlQ2IoKTtcbiAgICB9XG4gICAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICAgIGlmIChpc1VuZGVmKGRhdGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjc3MgPSBkYXRhLmNzcywgdHlwZSA9IGRhdGEudHlwZSwgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcywgZW50ZXJUb0NsYXNzID0gZGF0YS5lbnRlclRvQ2xhc3MsIGVudGVyQWN0aXZlQ2xhc3MgPSBkYXRhLmVudGVyQWN0aXZlQ2xhc3MsIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJDbGFzcywgYXBwZWFyVG9DbGFzcyA9IGRhdGEuYXBwZWFyVG9DbGFzcywgYXBwZWFyQWN0aXZlQ2xhc3MgPSBkYXRhLmFwcGVhckFjdGl2ZUNsYXNzLCBiZWZvcmVFbnRlciA9IGRhdGEuYmVmb3JlRW50ZXIsIGVudGVyID0gZGF0YS5lbnRlciwgYWZ0ZXJFbnRlciA9IGRhdGEuYWZ0ZXJFbnRlciwgZW50ZXJDYW5jZWxsZWQgPSBkYXRhLmVudGVyQ2FuY2VsbGVkLCBiZWZvcmVBcHBlYXIgPSBkYXRhLmJlZm9yZUFwcGVhciwgYXBwZWFyID0gZGF0YS5hcHBlYXIsIGFmdGVyQXBwZWFyID0gZGF0YS5hZnRlckFwcGVhciwgYXBwZWFyQ2FuY2VsbGVkID0gZGF0YS5hcHBlYXJDYW5jZWxsZWQsIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcbiAgICAvLyBhY3RpdmVJbnN0YW5jZSB3aWxsIGFsd2F5cyBiZSB0aGUgPHRyYW5zaXRpb24+IGNvbXBvbmVudCBtYW5hZ2luZyB0aGlzXG4gICAgLy8gdHJhbnNpdGlvbi4gT25lIGVkZ2UgY2FzZSB0byBjaGVjayBpcyB3aGVuIHRoZSA8dHJhbnNpdGlvbj4gaXMgcGxhY2VkXG4gICAgLy8gYXMgdGhlIHJvb3Qgbm9kZSBvZiBhIGNoaWxkIGNvbXBvbmVudC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY2hlY2tcbiAgICAvLyA8dHJhbnNpdGlvbj4ncyBwYXJlbnQgZm9yIGFwcGVhciBjaGVjay5cbiAgICB2YXIgY29udGV4dCA9IGFjdGl2ZUluc3RhbmNlO1xuICAgIHZhciB0cmFuc2l0aW9uTm9kZSA9IGFjdGl2ZUluc3RhbmNlLiR2bm9kZTtcbiAgICB3aGlsZSAodHJhbnNpdGlvbk5vZGUgJiYgdHJhbnNpdGlvbk5vZGUucGFyZW50KSB7XG4gICAgICAgIGNvbnRleHQgPSB0cmFuc2l0aW9uTm9kZS5jb250ZXh0O1xuICAgICAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgICB9XG4gICAgdmFyIGlzQXBwZWFyID0gIWNvbnRleHQuX2lzTW91bnRlZCB8fCAhdm5vZGUuaXNSb290SW5zZXJ0O1xuICAgIGlmIChpc0FwcGVhciAmJiAhYXBwZWFyICYmIGFwcGVhciAhPT0gJycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzID8gYXBwZWFyQ2xhc3MgOiBlbnRlckNsYXNzO1xuICAgIHZhciBhY3RpdmVDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckFjdGl2ZUNsYXNzID8gYXBwZWFyQWN0aXZlQ2xhc3MgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICAgIHZhciB0b0NsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyVG9DbGFzcyA/IGFwcGVhclRvQ2xhc3MgOiBlbnRlclRvQ2xhc3M7XG4gICAgdmFyIGJlZm9yZUVudGVySG9vayA9IGlzQXBwZWFyID8gYmVmb3JlQXBwZWFyIHx8IGJlZm9yZUVudGVyIDogYmVmb3JlRW50ZXI7XG4gICAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyID8gKGlzRnVuY3Rpb24oYXBwZWFyKSA/IGFwcGVhciA6IGVudGVyKSA6IGVudGVyO1xuICAgIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyID8gYWZ0ZXJBcHBlYXIgfHwgYWZ0ZXJFbnRlciA6IGFmdGVyRW50ZXI7XG4gICAgdmFyIGVudGVyQ2FuY2VsbGVkSG9vayA9IGlzQXBwZWFyXG4gICAgICAgID8gYXBwZWFyQ2FuY2VsbGVkIHx8IGVudGVyQ2FuY2VsbGVkXG4gICAgICAgIDogZW50ZXJDYW5jZWxsZWQ7XG4gICAgdmFyIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiA9IHRvTnVtYmVyKGlzT2JqZWN0KGR1cmF0aW9uKSA/IGR1cmF0aW9uLmVudGVyIDogZHVyYXRpb24pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uLCAnZW50ZXInLCB2bm9kZSk7XG4gICAgfVxuICAgIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gICAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG4gICAgdmFyIGNiID0gKGVsLl9lbnRlckNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgICAgI
13835H1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbnRlckNhbmNlbGxlZEhvb2sgJiYgZW50ZXJDYW5jZWxsZWRIb29rKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbC5fZW50ZXJDYiA9IG51bGw7XG4gICAgfSkpO1xuICAgIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICAgIC8vIHJlbW92ZSBwZW5kaW5nIGxlYXZlIGVsZW1lbnQgb24gZW50ZXIgYnkgaW5qZWN0aW5nIGFuIGluc2VydCBob29rXG4gICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICAgICAgICB2YXIgcGVuZGluZ05vZGUgPSBwYXJlbnQgJiYgcGFyZW50Ll9wZW5kaW5nICYmIHBhcmVudC5fcGVuZGluZ1t2bm9kZS5rZXldO1xuICAgICAgICAgICAgaWYgKHBlbmRpbmdOb2RlICYmXG4gICAgICAgICAgICAgICAgcGVuZGluZ05vZGUudGFnID09PSB2bm9kZS50YWcgJiZcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHN0YXJ0IGVudGVyIHRyYW5zaXRpb25cbiAgICBiZWZvcmVFbnRlckhvb2sgJiYgYmVmb3JlRW50ZXJIb29rKGVsKTtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XG4gICAgICAgICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRFbnRlckR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW5UcmFuc2l0aW9uRW5kcyhlbCwgdHlwZSwgY2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdykge1xuICAgICAgICB0b2dnbGVEaXNwbGF5ICYmIHRvZ2dsZURpc3BsYXkoKTtcbiAgICAgICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICAgIH1cbiAgICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBsZWF2ZSh2bm9kZSwgcm0pIHtcbiAgICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gICAgLy8gY2FsbCBlbnRlciBjYWxsYmFjayBub3dcbiAgICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpKSB7XG4gICAgICAgIGVsLl9lbnRlckNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgIGVsLl9lbnRlckNiKCk7XG4gICAgfVxuICAgIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgICBpZiAoaXNVbmRlZihkYXRhKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICByZXR1cm4gcm0oKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjc3MgPSBkYXRhLmNzcywgdHlwZSA9IGRhdGEudHlwZSwgbGVhdmVDbGFzcyA9IGRhdGEubGVhdmVDbGFzcywgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3MsIGxlYXZlQWN0aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3MsIGJlZm9yZUxlYXZlID0gZGF0YS5iZWZvcmVMZWF2ZSwgbGVhdmUgP
13835SBkYXRhLmxlYXZlLCBhZnRlckxlYXZlID0gZGF0YS5hZnRlckxlYXZlLCBsZWF2ZUNhbmNlbGxlZCA9IGRhdGEubGVhdmVDYW5jZWxsZWQsIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmUsIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcbiAgICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICAgIHZhciB1c2VyV2FudHNDb250cm9sID0gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChsZWF2ZSk7XG4gICAgdmFyIGV4cGxpY2l0TGVhdmVEdXJhdGlvbiA9IHRvTnVtYmVyKGlzT2JqZWN0KGR1cmF0aW9uKSA/IGR1cmF0aW9uLmxlYXZlIDogZHVyYXRpb24pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgY2hlY2tEdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24sICdsZWF2ZScsIHZub2RlKTtcbiAgICB9XG4gICAgdmFyIGNiID0gKGVsLl9sZWF2ZUNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIGVsLnBhcmVudE5vZGUuX3BlbmRpbmdbdm5vZGUua2V5XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZWF2ZUNhbmNlbGxlZCAmJiBsZWF2ZUNhbmNlbGxlZChlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBybSgpO1xuICAgICAgICAgICAgYWZ0ZXJMZWF2ZSAmJiBhZnRlckxlYXZlKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBlbC5fbGVhdmVDYiA9IG51bGw7XG4gICAgfSkpO1xuICAgIGlmIChkZWxheUxlYXZlKSB7XG4gICAgICAgIGRlbGF5TGVhdmUocGVyZm9ybUxlYXZlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHBlcmZvcm1MZWF2ZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUoKSB7XG4gICAgICAgIC8vIHRoZSBkZWxheWVkIGxlYXZlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBjYW5jZWxsZWRcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVjb3JkIGxlYXZpbmcgZWxlbWVudFxuICAgICAgICBpZiAoIXZub2RlLmRhdGEuc2hvdyAmJiBlbC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyB8fCAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyA9IHt9KSlbdm5vZGUua2V5XSA9XG4gICAgICAgICAgICAgICAgdm5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgYmVmb3JlTGVhdmUgJiYgYmVmb3JlTGVhdmUoZWwpO1xuICAgICAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICAgICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZER1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdExlYXZlRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZWF2ZSAmJiBsZWF2ZShlbCwgY2IpO1xuICAgICAgICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBvbmx5IHVzZWQgaW4gZGV2IG1vZGVcbmZ1bmN0aW9uIGNoZWNrRHVyYXRpb24odmFsLCBuYW1lLCB2bm9kZSkge1xuICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykge1xuICAgICAgICB3YXJuJDIoXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIuY29uY2F0KG5hbWUsIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiKSArXG4gICAgICAgICAgICBcImdvdCBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkodmFsKSwgXCIuXCIpLCB2bm9kZS5jb250ZXh0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNOYU4odmFsKSkge1xuICAgICAgICB3YXJuJDIoXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIuY29uY2F0KG5hbWUsIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiKSArXG4gICAgICAgICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicsIHZub2RlLmNvbnRleHQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbih2YWwpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbCk7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSBhIHRyYW5zaXRpb24gaG9vaydzIGFyZ3VtZW50IGxlbmd0aC4gVGhlIGhvb2sgbWF5IGJlOlxuICogLSBhIG1lcmdlZCBob29rIChpbnZva2VyKSB3aXRoIHRoZSBvcmlnaW5hbCBpbiAuZm5zXG4gKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAqIC0gYSBwbGFpbiBmdW5jdGlvbiAoLmxlbmd0aClcbiAqL1xuZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChmbikge1xuICAgIGlmIChpc1VuZGVmKGZuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB2YXIgaW52b2tlckZucyA9IGZuLmZucztcbiAgICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAgICAgLy8gaW52b2tlclxuICAgICAgICByZXR1cm4gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChBcnJheS5pc0FycmF
138355KGludm9rZXJGbnMpID8gaW52b2tlckZuc1swXSA6IGludm9rZXJGbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICByZXR1cm4gKGZuLl9sZW5ndGggfHwgZm4ubGVuZ3RoKSA+IDE7XG4gICAgfVxufVxuZnVuY3Rpb24gX2VudGVyKF8sIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgICBlbnRlcih2bm9kZSk7XG4gICAgfVxufVxudmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXJcbiAgICA/IHtcbiAgICAgICAgY3JlYXRlOiBfZW50ZXIsXG4gICAgICAgIGFjdGl2YXRlOiBfZW50ZXIsXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKHZub2RlLCBybSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgbGVhdmUodm5vZGUsIHJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgOiB7fTtcblxudmFyIHBsYXRmb3JtTW9kdWxlcyA9IFthdHRycywga2xhc3MkMSwgZXZlbnRzLCBkb21Qcm9wcywgc3R5bGUkMSwgdHJhbnNpdGlvbl07XG5cbi8vIHRoZSBkaXJlY3RpdmUgbW9kdWxlIHNob3VsZCBiZSBhcHBsaWVkIGxhc3QsIGFmdGVyIGFsbFxuLy8gYnVpbHQtaW4gbW9kdWxlcyBoYXZlIGJlZW4gYXBwbGllZC5cbnZhciBtb2R1bGVzJDEgPSBwbGF0Zm9ybU1vZHVsZXMuY29uY2F0KGJhc2VNb2R1bGVzKTtcbnZhciBwYXRjaCA9IGNyZWF0ZVBhdGNoRnVuY3Rpb24oeyBub2RlT3BzOiBub2RlT3BzLCBtb2R1bGVzOiBtb2R1bGVzJDEgfSk7XG5cbi8qKlxuICogTm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IGxpa2UgYXR0YWNoaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIEVsZW1lbnRzLlxuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChpc0lFOSkge1xuICAgIC8vIGh0dHA6Ly93d3cubWF0dHM0MTEuY29tL3Bvc3QvaW50ZXJuZXQtZXhwbG9yZXItOS1vbmlucHV0L1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoZWwgJiYgZWwudm1vZGVsKSB7XG4gICAgICAgICAgICB0cmlnZ2VyKGVsLCAnaW5wdXQnKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxudmFyIGRpcmVjdGl2ZSA9IHtcbiAgICBpbnNlcnRlZDogZnVuY3Rpb24gKGVsLCBiaW5kaW5nLCB2bm9kZSwgb2xkVm5vZGUpIHtcbiAgICAgICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICAgIC8vICM2OTAzXG4gICAgICAgICAgICBpZiAob2xkVm5vZGUuZWxtICYmICFvbGRWbm9kZS5lbG0uX3ZPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZS5jb21wb25lbnRVcGRhdGVkKGVsLCBiaW5kaW5nLCB2bm9kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbC5fdk9wdGlvbnMgPSBbXS5tYXAuY2FsbChlbC5vcHRpb25zLCBnZXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodm5vZGUudGFnID09PSAndGV4dGFyZWEnIHx8IGlzVGV4dElucHV0VHlwZShlbC50eXBlKSkge1xuICAgICAgICAgICAgZWwuX3ZNb2RpZmllcnMgPSBiaW5kaW5nLm1vZGlmaWVycztcbiAgICAgICAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAgICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGFsc28gZml4ZXMgdGhlIGlzc3VlIHdoZXJlIHNvbWUgYnJvd3NlcnMgZS5nLiBpT1MgQ2hyb21lXG4gICAgICAgICAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnZtb2RlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcbiAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgICAgICAgIC8vIGRldGVjdCBzdWNoIGNhc2VzIGFuZCBmaWx0ZXIgb3V0IHZhbHVlcyB0aGF0IG5vIGxvbmdlciBoYXMgYSBtYXRjaGluZ1xuICAgICAgICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXG4gICAgICAgICAgICB2Y
13835XIgcHJldk9wdGlvbnNfMSA9IGVsLl92T3B0aW9ucztcbiAgICAgICAgICAgIHZhciBjdXJPcHRpb25zXzEgPSAoZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpKTtcbiAgICAgICAgICAgIGlmIChjdXJPcHRpb25zXzEuc29tZShmdW5jdGlvbiAobywgaSkgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgcHJldk9wdGlvbnNfMVtpXSk7IH0pKSB7XG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgICAgICAgICAvLyBubyBtYXRjaGluZyBvcHRpb24gZm91bmQgZm9yIGF0IGxlYXN0IG9uZSB2YWx1ZVxuICAgICAgICAgICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICA/IGJpbmRpbmcudmFsdWUuc29tZShmdW5jdGlvbiAodikgeyByZXR1cm4gaGFzTm9NYXRjaGluZ09wdGlvbih2LCBjdXJPcHRpb25zXzEpOyB9KVxuICAgICAgICAgICAgICAgICAgICA6IGJpbmRpbmcudmFsdWUgIT09IGJpbmRpbmcub2xkVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9uc18xKTtcbiAgICAgICAgICAgICAgICBpZiAobmVlZFJlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoZWwsICdjaGFuZ2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuZnVuY3Rpb24gc2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKSB7XG4gICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0lFIHx8IGlzRWRnZSkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pIHtcbiAgICB2YXIgdmFsdWUgPSBiaW5kaW5nLnZhbHVlO1xuICAgIHZhciBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gICAgaWYgKGlzTXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgIHdhcm4kMihcIjxzZWxlY3QgbXVsdGlwbGUgdi1tb2RlbD1cXFwiXCIuY29uY2F0KGJpbmRpbmcuZXhwcmVzc2lvbiwgXCJcXFwiPiBcIikgK1xuICAgICAgICAgICAgICAgIFwiZXhwZWN0cyBhbiBBcnJheSB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1dCBnb3QgXCIuY29uY2F0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZSg4LCAtMSkpLCB2bSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdGVkLCBvcHRpb247XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbC5vcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBvcHRpb24gPSBlbC5vcHRpb25zW2ldO1xuICAgICAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIGdldFZhbHVlKG9wdGlvbikpID4gLTE7XG4gICAgICAgICAgICBpZiAob3B0aW9uLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLnNlbGVjdGVkSW5kZXggIT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhc05vTWF0Y2hpbmdPcHRpb24odmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5ldmVyeShmdW5jdGlvbiAobykgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgdmFsdWUpOyB9KTtcbn1cbmZ1bmN0aW9uIGdldFZhbHVlKG9wdGlvbikge1xuICAgIHJldHVybiAnX3ZhbHVlJyBpbiBvcHRpb24gPyBvcHRpb24uX3ZhbHVlIDogb3B0aW9uLnZhbHVlO1xufVxuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0KGUpIHtcbiAgICBlLnRhcmdldC5jb21wb3NpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gb25Db21wb3NpdGlvbkVuZChlKSB7XG4gICAgLy8gcHJldmVudCB0cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cbiAgICBpZiAoIWUudGFyZ2V0LmNvbXBvc2luZylcbiAgICAgICAgcmV0dXJuO1xuICAgIGUudGFyZ2V0LmNvbXBvc2luZyA9IGZhbHNlO1xuICAgIHRyaWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xufVxuZnVuY3Rpb24gdHJpZ2dlcihlbCwgdHlwZSkge1xuICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgICBlLmluaXRFdmVudCh0eXBlLCB0cnVlLCB0cnVlKTtcbiAgICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xufVxuXG4vLyByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHBvc3NpYmxlIHRyYW5zaXRpb24gZGVmaW5lZCBpbnNpZGUgdGhlIGNvbXBvbmVudCByb290XG5mdW5jdGlvbiBsb2NhdGVOb2RlKHZub2RlKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJiAoIXZub2RlLmRhdGEgfHwgIXZub2RlLmRhdGEudHJhbnNpdGlvbilcbiAgICAgICAgPyBsb2NhdGVOb2RlKHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSlcbiAgICAgICAgOiB2bm9kZTtcbn1cbnZhciBzaG93ID0ge1xuICAgIGJpbmQ6IGZ1bmN0aW9uIChlbCwgX2EsIHZub2RlKSB7XG4gICAgICAgI
13835HZhciB2YWx1ZSA9IF9hLnZhbHVlO1xuICAgICAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgICAgICB2YXIgb3JpZ2luYWxEaXNwbGF5ID0gKGVsLl9fdk9yaWdpbmFsRGlzcGxheSA9XG4gICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXkpO1xuICAgICAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbikge1xuICAgICAgICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IG9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChlbCwgX2EsIHZub2RlKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IF9hLnZhbHVlLCBvbGRWYWx1ZSA9IF9hLm9sZFZhbHVlO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKCF2YWx1ZSA9PT0gIW9sZFZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbiA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgICAgICBpZiAodHJhbnNpdGlvbikge1xuICAgICAgICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZWF2ZSh2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gZWwuX192T3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpIHtcbiAgICAgICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgcGxhdGZvcm1EaXJlY3RpdmVzID0ge1xuICAgIG1vZGVsOiBkaXJlY3RpdmUsXG4gICAgc2hvdzogc2hvd1xufTtcblxuLy8gUHJvdmlkZXMgdHJhbnNpdGlvbiBzdXBwb3J0IGZvciBhIHNpbmdsZSBlbGVtZW50L2NvbXBvbmVudC5cbnZhciB0cmFuc2l0aW9uUHJvcHMgPSB7XG4gICAgbmFtZTogU3RyaW5nLFxuICAgIGFwcGVhcjogQm9vbGVhbixcbiAgICBjc3M6IEJvb2xlYW4sXG4gICAgbW9kZTogU3RyaW5nLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgICBlbnRlckNsYXNzOiBTdHJpbmcsXG4gICAgbGVhdmVDbGFzczogU3RyaW5nLFxuICAgIGVudGVyVG9DbGFzczogU3RyaW5nLFxuICAgIGxlYXZlVG9DbGFzczogU3RyaW5nLFxuICAgIGVudGVyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgYXBwZWFyQ2xhc3M6IFN0cmluZyxcbiAgICBhcHBlYXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcbiAgICBkdXJhdGlvbjogW051bWJlciwgU3RyaW5nLCBPYmplY3RdXG59O1xuLy8gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxzbyBhbiBhYnN0cmFjdCBjb21wb25lbnQsIGUuZy4gPGtlZXAtYWxpdmU+XG4vLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuZnVuY3Rpb24gZ2V0UmVhbENoaWxkKHZub2RlKSB7XG4gICAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICAgIHJldHVybiBnZXRSZWFsQ2hpbGQoZ2V0Rmlyc3RDb21wb25lbnRDaGlsZChjb21wT3B0aW9ucy5jaGlsZHJlbikpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZub2RlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGV4dHJhY3RUcmFuc2l0aW9uRGF0YShjb21wKSB7XG4gICAgdmFyIGRhdGEgPSB7fTtcbiAgICB2YXIgb3B0aW9ucyA9IGNvbXAuJG9wdGlvbnM7XG4gICAgLy8gcHJvcHNcbiAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5wcm9wc0RhdGEpIHtcbiAgICAgICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICAgIH1cbiAgICAvLyBldmVudHMuXG4gICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gICAgdmFyIGxpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICBmb3IgKHZhciBrZXkgaW4gbGlzdGVuZXJzKSB7XG4gICAgICAgIGRhdGFbY2FtZWxpemUoa2V5KV0gPSBsaXN0ZW5lcnNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBpZiAoL1xcZC1rZWVwLWFsaXZlJC8udGVzdChyYXdDaGlsZC50YWcpKSB7XG4gICAgICAgIHJldHVybiBoKCdrZWVwLWFsaXZlJywge1xuICAgICAgICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXG4gICAgICAgI
13835H0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhc1BhcmVudFRyYW5zaXRpb24odm5vZGUpIHtcbiAgICB3aGlsZSAoKHZub2RlID0gdm5vZGUucGFyZW50KSkge1xuICAgICAgICBpZiAodm5vZGUuZGF0YS50cmFuc2l0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGlzU2FtZUNoaWxkKGNoaWxkLCBvbGRDaGlsZCkge1xuICAgIHJldHVybiBvbGRDaGlsZC5rZXkgPT09IGNoaWxkLmtleSAmJiBvbGRDaGlsZC50YWcgPT09IGNoaWxkLnRhZztcbn1cbnZhciBpc05vdFRleHROb2RlID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudGFnIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKTsgfTtcbnZhciBpc1ZTaG93RGlyZWN0aXZlID0gZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQubmFtZSA9PT0gJ3Nob3cnOyB9O1xudmFyIFRyYW5zaXRpb24gPSB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICAgIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gICAgYWJzdHJhY3Q6IHRydWUsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoaCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgICAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmlsdGVyIG91dCB0ZXh0IG5vZGVzIChwb3NzaWJsZSB3aGl0ZXNwYWNlcylcbiAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdhcm4gbXVsdGlwbGUgZWxlbWVudHNcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgd2FybiQyKCc8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBlbGVtZW50LiBVc2UgJyArXG4gICAgICAgICAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJywgdGhpcy4kcGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgbW9kZSA9IHRoaXMubW9kZTtcbiAgICAgICAgLy8gd2FybiBpbnZhbGlkIG1vZGVcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJykge1xuICAgICAgICAgICAgd2FybiQyKCdpbnZhbGlkIDx0cmFuc2l0aW9uPiBtb2RlOiAnICsgbW9kZSwgdGhpcy4kcGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcbiAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGNvbXBvbmVudCByb290IG5vZGUgYW5kIHRoZSBjb21wb25lbnQnc1xuICAgICAgICAvLyBwYXJlbnQgY29udGFpbmVyIG5vZGUgYWxzbyBoYXMgdHJhbnNpdGlvbiwgc2tpcC5cbiAgICAgICAgaWYgKGhhc1BhcmVudFRyYW5zaXRpb24odGhpcy4kdm5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmF3Q2hpbGQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwbHkgdHJhbnNpdGlvbiBkYXRhIHRvIGNoaWxkXG4gICAgICAgIC8vIHVzZSBnZXRSZWFsQ2hpbGQoKSB0byBpZ25vcmUgYWJzdHJhY3QgY29tcG9uZW50cyBlLmcuIGtlZXAtYWxpdmVcbiAgICAgICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiByYXdDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbGVhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbnN1cmUgYSBrZXkgdGhhdCBpcyB1bmlxdWUgdG8gdGhlIHZub2RlIHR5cGUgYW5kIHRvIHRoaXMgdHJhbnNpdGlvblxuICAgICAgICAvLyBjb21wb25lbnQgaW5zdGFuY2UuIFRoaXMga2V5IHdpbGwgYmUgdXNlZCB0byByZW1vdmUgcGVuZGluZyBsZWF2aW5nIG5vZGVzXG4gICAgICAgIC8vIGR1cmluZyBlbnRlcmluZy5cbiAgICAgICAgdmFyIGlkID0gXCJfX3RyYW5zaXRpb24tXCIuY29uY2F0KHRoaXMuX3VpZCwgXCItXCIpO1xuICAgICAgICBjaGlsZC5rZXkgPVxuICAgICAgICAgICAgY2hpbGQua2V5ID09IG51bGxcbiAgICAgICAgICAgICAgICA/IGNoaWxkLmlzQ29tbWVudFxuICAgICAgICAgICAgICAgICAgICA/IGlkICsgJ2NvbW1lbnQnXG4gICAgICAgICAgICAgICAgICAgIDogaWQgKyBjaGlsZC50YWdcbiAgICAgICAgICAgICAgICA6IGlzUHJpbWl0aXZlKGNoaWxkLmtleSlcbiAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcoY2hpbGQua2V5KS5pbmRleE9mKGlkKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaWQgKyBjaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgOiBjaGlsZC5rZXk7XG4gICAgICAgIHZhciBkYXRhID0gKChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID1cbiAgICAgICAgICAgIGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKSk7XG4gICAgICAgIHZhciBvbGRSYXdDaGlsZCA9IHRoaXMuX3Zub2RlO1xuICAgICAgICB2Y
13835XIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuICAgICAgICAvLyBtYXJrIHYtc2hvd1xuICAgICAgICAvLyBzbyB0aGF0IHRoZSB0cmFuc2l0aW9uIG1vZHVsZSBjYW4gaGFuZCBvdmVyIHRoZSBjb250cm9sIHRvIHRoZSBkaXJlY3RpdmVcbiAgICAgICAgaWYgKGNoaWxkLmRhdGEuZGlyZWN0aXZlcyAmJiBjaGlsZC5kYXRhLmRpcmVjdGl2ZXMuc29tZShpc1ZTaG93RGlyZWN0aXZlKSkge1xuICAgICAgICAgICAgY2hpbGQuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2xkQ2hpbGQgJiZcbiAgICAgICAgICAgIG9sZENoaWxkLmRhdGEgJiZcbiAgICAgICAgICAgICFpc1NhbWVDaGlsZChjaGlsZCwgb2xkQ2hpbGQpICYmXG4gICAgICAgICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKSAmJlxuICAgICAgICAgICAgLy8gIzY2ODcgY29tcG9uZW50IHJvb3QgaXMgYSBjb21tZW50IG5vZGVcbiAgICAgICAgICAgICEob2xkQ2hpbGQuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICAgICAgICAgICBvbGRDaGlsZC5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUuaXNDb21tZW50KSkge1xuICAgICAgICAgICAgLy8gcmVwbGFjZSBvbGQgY2hpbGQgdHJhbnNpdGlvbiBkYXRhIHdpdGggZnJlc2ggb25lXG4gICAgICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIGR5bmFtaWMgdHJhbnNpdGlvbnMhXG4gICAgICAgICAgICB2YXIgb2xkRGF0YSA9IChvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpKTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgICAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBwbGFjZWhvbGRlciBub2RlIGFuZCBxdWV1ZSB1cGRhdGUgd2hlbiBsZWF2ZSBmaW5pc2hlc1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBc3luY1BsYWNlaG9sZGVyKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBkZWxheWVkTGVhdmVfMTtcbiAgICAgICAgICAgICAgICB2Y
13835XIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxheWVkTGVhdmVfMSgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICAgICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEsICdlbnRlckNhbmNlbGxlZCcsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgICAgICAgICAgbWVyZ2VWTm9kZUhvb2sob2xkRGF0YSwgJ2RlbGF5TGVhdmUnLCBmdW5jdGlvbiAobGVhdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsYXllZExlYXZlXzEgPSBsZWF2ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmF3Q2hpbGQ7XG4gICAgfVxufTtcblxuLy8gUHJvdmlkZXMgdHJhbnNpdGlvbiBzdXBwb3J0IGZvciBsaXN0IGl0ZW1zLlxudmFyIHByb3BzID0gZXh0ZW5kKHtcbiAgICB0YWc6IFN0cmluZyxcbiAgICBtb3ZlQ2xhc3M6IFN0cmluZ1xufSwgdHJhbnNpdGlvblByb3BzKTtcbmRlbGV0ZSBwcm9wcy5tb2RlO1xudmFyIFRyYW5zaXRpb25Hcm91cCA9IHtcbiAgICBwcm9wczogcHJvcHMsXG4gICAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHVwZGF0ZSA9IHRoaXMuX3VwZGF0ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgICAgICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZShfdGhpcyk7XG4gICAgICAgICAgICAvLyBmb3JjZSByZW1vdmluZyBwYXNzXG4gICAgICAgICAgICBfdGhpcy5fX3BhdGNoX18oX3RoaXMuX3Zub2RlLCBfdGhpcy5rZXB0LCBmYWxzZSwgLy8gaHlkcmF0aW5nXG4gICAgICAgICAgICB0cnVlIC8vIHJlbW92ZU9ubHkgKCFpbXBvcnRhbnQsIGF2b2lkcyB1bm5lY2Vzc2FyeSBtb3ZlcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBfdGhpcy5fdm5vZGUgPSBfdGhpcy5rZXB0O1xuICAgICAgICAgICAgcmVzdG9yZUFjdGl2ZUluc3RhbmNlKCk7XG4gICAgICAgICAgICB1cGRhdGUuY2FsbChfdGhpcywgdm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgICAgIH07XG4gICAgfSxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIHZhciB0YWcgPSB0aGlzLnRhZyB8fCB0aGlzLiR2bm9kZS5kYXRhLnRhZyB8fCAnc3Bhbic7XG4gICAgICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2Y
13835XIgcHJldkNoaWxkcmVuID0gKHRoaXMucHJldkNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbik7XG4gICAgICAgIHZhciByYXdDaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgW107XG4gICAgICAgIHZhciBjaGlsZHJlbiA9ICh0aGlzLmNoaWxkcmVuID0gW10pO1xuICAgICAgICB2YXIgdHJhbnNpdGlvbkRhdGEgPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjID0gcmF3Q2hpbGRyZW5baV07XG4gICAgICAgICAgICBpZiAoYy50YWcpIHtcbiAgICAgICAgICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICBtYXBbYy5rZXldID0gYztcbiAgICAgICAgICAgICAgICAgICAgKGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wdHMgPSBjLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBvcHRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGdldENvbXBvbmVudE5hbWUob3B0cy5DdG9yLm9wdGlvbnMpIHx8IG9wdHMudGFnIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGMudGFnO1xuICAgICAgICAgICAgICAgICAgICB3YXJuJDIoXCI8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZDogPFwiLmNvbmNhdChuYW1lXzEsIFwiPlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHZhciBrZXB0ID0gW107XG4gICAgICAgICAgICB2Y
13835XIgcmVtb3ZlZCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHByZXZDaGlsZHJlbltpXTtcbiAgICAgICAgICAgICAgICBjLmRhdGEudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLmdldEJvdW5kaW5nQ2xpZW50UmVjdCBpcyBub3QgdHlwZWQgaW4gTm9kZVxuICAgICAgICAgICAgICAgIGMuZGF0YS5wb3MgPSBjLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwW2Mua2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBrZXB0LnB1c2goYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5rZXB0ID0gaCh0YWcsIG51bGwsIGtlcHQpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaCh0YWcsIG51bGwsIGNoaWxkcmVuKTtcbiAgICB9LFxuICAgIHVwZGF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW47XG4gICAgICAgIHZhciBtb3ZlQ2xhc3MgPSB0aGlzLm1vdmVDbGFzcyB8fCAodGhpcy5uYW1lIHx8ICd2JykgKyAnLW1vdmUnO1xuICAgICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGRpdmlkZSB0aGUgd29yayBpbnRvIHRocmVlIGxvb3BzIHRvIGF2b2lkIG1peGluZyBET00gcmVhZHMgYW5kIHdyaXRlc1xuICAgICAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjYWxsUGVuZGluZ0Nicyk7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2gocmVjb3JkUG9zaXRpb24pO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuICAgICAgICAvLyBmb3JjZSByZWZsb3cgdG8gcHV0IGV2ZXJ5dGhpbmcgaW4gcG9zaXRpb25cbiAgICAgICAgLy8gYXNzaWduIHRvIHRoaXMgdG8gYXZvaWQgYmVpbmcgcmVtb3ZlZCBpbiB0cmVlLXNoYWtpbmdcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIHRoaXMuX3JlZmxvdyA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICBpZiAoYy5kYXRhLm1vdmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsXzEgPSBjLmVsbTtcbiAgICAgICAgICAgICAgICB2Y
13835XIgcyA9IGVsXzEuc3R5bGU7XG4gICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsXzEsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XG4gICAgICAgICAgICAgICAgZWxfMS5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgKGVsXzEuX21vdmVDYiA9IGZ1bmN0aW9uIGNiKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS50YXJnZXQgIT09IGVsXzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbF8xLnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBjYik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbF8xLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsXzEsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBoYXNNb3ZlOiBmdW5jdGlvbiAoZWwsIG1vdmVDbGFzcykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLl9oYXNNb3ZlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc01vdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcbiAgICAgICAgICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xuICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgICAgICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXG4gICAgICAgICAgICAvLyBpcyBhcHBsaWVkLlxuICAgICAgICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICAgICAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgICAgICAgICAgICAgZWwuX3RyYW5zaXRpb25DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGNscykge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyhjbG9uZSwgY2xzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZENsYXNzKGNsb25lLCBtb3ZlQ2xhc3MpO1xuICAgICAgICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKGNsb25lKTtcbiAgICAgICAgICAgIHZhciBpbmZvID0gZ2V0VHJhbnNpdGlvbkluZm8oY2xvbmUpO1xuICAgICAgICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLl9oYXNNb3ZlID0gaW5mby5oYXNUcmFuc2Zvcm0pO1xuICAgICAgICB9XG4gICAgfVxufTtcbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzKGMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgICAgICBjLmVsbS5fbW92ZUNiKCk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChjLmVsbS5fZW50ZXJDYikge1xuICAgICAgICBjLmVsbS5fZW50ZXJDYigpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlY29yZFBvc2l0aW9uKGMpIHtcbiAgICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5mdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uKGMpIHtcbiAgICB2YXIgb2xkUG9zID0gYy5kYXRhLnBvcztcbiAgICB2YXIgbmV3UG9zID0gYy5kYXRhLm5ld1BvcztcbiAgICB2YXIgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICAgIHZhciBkeSA9IG9sZFBvcy50b3AgLSBuZXdQb3MudG9wO1xuICAgIGlmIChkeCB8fCBkeSkge1xuICAgICAgICBjLmRhdGEubW92ZWQgPSB0cnVlO1xuICAgICAgICB2Y
13835XIgcyA9IGMuZWxtLnN0eWxlO1xuICAgICAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KGR4LCBcInB4LFwiKS5jb25jYXQoZHksIFwicHgpXCIpO1xuICAgICAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gICAgfVxufVxuXG52YXIgcGxhdGZvcm1Db21wb25lbnRzID0ge1xuICAgIFRyYW5zaXRpb246IFRyYW5zaXRpb24sXG4gICAgVHJhbnNpdGlvbkdyb3VwOiBUcmFuc2l0aW9uR3JvdXBcbn07XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gc3BlY2lmaWMgdXRpbHNcblZ1ZS5jb25maWcubXVzdFVzZVByb3AgPSBtdXN0VXNlUHJvcDtcblZ1ZS5jb25maWcuaXNSZXNlcnZlZFRhZyA9IGlzUmVzZXJ2ZWRUYWc7XG5WdWUuY29uZmlnLmlzUmVzZXJ2ZWRBdHRyID0gaXNSZXNlcnZlZEF0dHI7XG5WdWUuY29uZmlnLmdldFRhZ05hbWVzcGFjZSA9IGdldFRhZ05hbWVzcGFjZTtcblZ1ZS5jb25maWcuaXNVbmtub3duRWxlbWVudCA9IGlzVW5rbm93bkVsZW1lbnQ7XG4vLyBpbnN0YWxsIHBsYXRmb3JtIHJ1bnRpbWUgZGlyZWN0aXZlcyAmIGNvbXBvbmVudHNcbmV4dGVuZChWdWUub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG4vLyBpbnN0YWxsIHBsYXRmb3JtIHBhdGNoIGZ1bmN0aW9uXG5WdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcbi8vIHB1YmxpYyBtb3VudCBtZXRob2RcblZ1ZS5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKGVsLCBoeWRyYXRpbmcpIHtcbiAgICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZyk7XG59O1xuLy8gZGV2dG9vbHMgZ2xvYmFsIGhvb2tcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaW5Ccm93c2VyKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChjb25maWcuZGV2dG9vbHMpIHtcbiAgICAgICAgICAgIGlmIChkZXZ0b29scykge1xuICAgICAgICAgICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKCdEb3dubG9hZCB0aGUgVnVlIERldnRvb2xzIGV4dGVuc2lvbiBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgICAgICAgY29uZmlnLnByb2R1Y3Rpb25UaXAgIT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFwiWW91IGFyZSBydW5uaW5nIFZ1ZSBpbiBkZXZlbG9wbWVudCBtb2RlLlxcblwiICtcbiAgICAgICAgICAgICAgICBcIk1ha2Ugc3VyZSB0byB0dXJuIG9uIHByb2R1Y3Rpb24gbW9kZSB3aGVuIGRlcGxveWluZyBmb3IgcHJvZHVjdGlvbi5cXG5cIiArXG4gICAgICAgICAgICAgICAgXCJTZWUgbW9yZSB0aXBzIGF0IGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2RlcGxveW1lbnQuaHRtbFwiKTtcbiAgICAgICAgfVxuICAgIH0sIDApO1xufVxuXG52YXIgZGVmYXVsdFRhZ1JFID0gL1xce1xceygoPzoufFxccj9cXG4pKz8pXFx9XFx9L2c7XG52YXIgcmVnZXhFc2NhcGVSRSA9IC9bLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdL2c7XG52YXIgYnVpbGRSZWdleCA9IGNhY2hlZChmdW5jdGlvbiAoZGVsaW1pdGVycykge1xuICAgIHZhciBvcGVuID0gZGVsaW1pdGVyc1swXS5yZXBsYWNlKHJlZ2V4RXNjYXBlUkUsICdcXFxcJCYnKTtcbiAgICB2YXIgY2xvc2UgPSBkZWxpbWl0ZXJzWzFdLnJlcGxhY2UocmVnZXhFc2NhcGVSRSwgJ1xcXFwkJicpO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKG9wZW4gKyAnKCg/Oi58XFxcXG4pKz8pJyArIGNsb3NlLCAnZycpO1xufSk7XG5mdW5jdGlvbiBwYXJzZVRleHQodGV4dCwgZGVsaW1pdGVycykge1xuICAgIC8vQHRzLWV4cGVjdC1lcnJvclxuICAgIHZhciB0YWdSRSA9IGRlbGltaXRlcnMgPyBidWlsZFJlZ2V4KGRlbGltaXRlcnMpIDogZGVmYXVsdFRhZ1JFO1xuICAgIGlmICghdGFnUkUudGVzdCh0ZXh0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICB2YXIgcmF3VG9rZW5zID0gW107XG4gICAgdmFyIGxhc3RJbmRleCA9ICh0YWdSRS5sYXN0SW5kZXggPSAwKTtcbiAgICB2YXIgbWF0Y2gsIGluZGV4LCB0b2tlblZhbHVlO1xuICAgIHdoaWxlICgobWF0Y2ggPSB0YWdSRS5leGVjKHRleHQpKSkge1xuICAgICAgICBpbmRleCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAvLyBwdXNoIHRleHQgdG9rZW5cbiAgICAgICAgaWYgKGluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICByYXdUb2tlbnMucHVzaCgodG9rZW5WYWx1ZSA9IHRleHQuc2xpY2UobGFzdEluZGV4LCBpbmRleCkpKTtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKEpTT04uc3RyaW5naWZ5KHRva2VuVmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0YWcgdG9rZW5cbiAgICAgICAgdmFyIGV4cCA9IHBhcnNlRmlsdGVycyhtYXRjaFsxXS50cmltKCkpO1xuICAgICAgICB0b2tlbnMucHVzaChcIl9zKFwiLmNvbmNhdChleHAsIFwiKVwiKSk7XG4gICAgICAgI
13835HJhd1Rva2Vucy5wdXNoKHsgJ0BiaW5kaW5nJzogZXhwIH0pO1xuICAgICAgICBsYXN0SW5kZXggPSBpbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgIHJhd1Rva2Vucy5wdXNoKCh0b2tlblZhbHVlID0gdGV4dC5zbGljZShsYXN0SW5kZXgpKSk7XG4gICAgICAgIHRva2Vucy5wdXNoKEpTT04uc3RyaW5naWZ5KHRva2VuVmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZXhwcmVzc2lvbjogdG9rZW5zLmpvaW4oJysnKSxcbiAgICAgICAgdG9rZW5zOiByYXdUb2tlbnNcbiAgICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Ob2RlJDEoZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICB2YXIgc3RhdGljQ2xhc3MgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnY2xhc3MnKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzdGF0aWNDbGFzcykge1xuICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY0NsYXNzLCBvcHRpb25zLmRlbGltaXRlcnMpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB3YXJuKFwiY2xhc3M9XFxcIlwiLmNvbmNhdChzdGF0aWNDbGFzcywgXCJcXFwiOiBcIikgK1xuICAgICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgY2xhc3M9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDpjbGFzcz1cInZhbFwiPi4nLCBlbC5yYXdBdHRyc01hcFsnY2xhc3MnXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YXRpY0NsYXNzKSB7XG4gICAgICAgIGVsLnN0YXRpY0NsYXNzID0gSlNPTi5zdHJpbmdpZnkoc3RhdGljQ2xhc3MucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKSk7XG4gICAgfVxuICAgIHZhciBjbGFzc0JpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2NsYXNzJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgICBpZiAoY2xhc3NCaW5kaW5nKSB7XG4gICAgICAgIGVsLmNsYXNzQmluZGluZyA9IGNsYXNzQmluZGluZztcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5EYXRhJDIoZWwpIHtcbiAgICB2YXIgZGF0YSA9ICcnO1xuICAgIGlmIChlbC5zdGF0aWNDbGFzcykge1xuICAgICAgICBkYXRhICs9IFwic3RhdGljQ2xhc3M6XCIuY29uY2F0KGVsLnN0YXRpY0NsYXNzLCBcIixcIik7XG4gICAgfVxuICAgIGlmIChlbC5jbGFzc0JpbmRpbmcpIHtcbiAgICAgICAgZGF0YSArPSBcImNsYXNzOlwiLmNvbmNhdChlbC5jbGFzc0JpbmRpbmcsIFwiLFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG52YXIga2xhc3MgPSB7XG4gICAgc3RhdGljS2V5czogWydzdGF0aWNDbGFzcyddLFxuICAgIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUkMSxcbiAgICBnZW5EYXRhOiBnZW5EYXRhJDJcbn07XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUoZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICB2YXIgc3RhdGljU3R5bGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc3R5bGUnKTtcbiAgICBpZiAoc3RhdGljU3R5bGUpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB2Y
13835XIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY1N0eWxlLCBvcHRpb25zLmRlbGltaXRlcnMpO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJzdHlsZT1cXFwiXCIuY29uY2F0KHN0YXRpY1N0eWxlLCBcIlxcXCI6IFwiKSArXG4gICAgICAgICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBzdHlsZT1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOnN0eWxlPVwidmFsXCI+LicsIGVsLnJhd0F0dHJzTWFwWydzdHlsZSddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbC5zdGF0aWNTdHlsZSA9IEpTT04uc3RyaW5naWZ5KHBhcnNlU3R5bGVUZXh0KHN0YXRpY1N0eWxlKSk7XG4gICAgfVxuICAgIHZhciBzdHlsZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3N0eWxlJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgICBpZiAoc3R5bGVCaW5kaW5nKSB7XG4gICAgICAgIGVsLnN0eWxlQmluZGluZyA9IHN0eWxlQmluZGluZztcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5EYXRhJDEoZWwpIHtcbiAgICB2YXIgZGF0YSA9ICcnO1xuICAgIGlmIChlbC5zdGF0aWNTdHlsZSkge1xuICAgICAgICBkYXRhICs9IFwic3RhdGljU3R5bGU6XCIuY29uY2F0KGVsLnN0YXRpY1N0eWxlLCBcIixcIik7XG4gICAgfVxuICAgIGlmIChlbC5zdHlsZUJpbmRpbmcpIHtcbiAgICAgICAgZGF0YSArPSBcInN0eWxlOihcIi5jb25jYXQoZWwuc3R5bGVCaW5kaW5nLCBcIiksXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbnZhciBzdHlsZSA9IHtcbiAgICBzdGF0aWNLZXlzOiBbJ3N0YXRpY1N0eWxlJ10sXG4gICAgdHJhbnNmb3JtTm9kZTogdHJhbnNmb3JtTm9kZSxcbiAgICBnZW5EYXRhOiBnZW5EYXRhJDFcbn07XG5cbnZhciBkZWNvZGVyO1xudmFyIGhlID0ge1xuICAgIGRlY29kZTogZnVuY3Rpb24gKGh0bWwpIHtcbiAgICAgICAgZGVjb2RlciA9IGRlY29kZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRlY29kZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgcmV0dXJuIGRlY29kZXIudGV4dENvbnRlbnQ7XG4gICAgfVxufTtcblxudmFyIGlzVW5hcnlUYWcgPSBtYWtlTWFwKCdhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGZyYW1lLGhyLGltZyxpbnB1dCxpc2luZGV4LGtleWdlbiwnICtcbiAgICAnbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnInKTtcbi8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlblxuLy8gKGFuZCB3aGljaCBjbG9zZSB0aGVtc2VsdmVzKVxudmFyIGNhbkJlTGVmdE9wZW5UYWcgPSBtYWtlTWFwKCdjb2xncm91cCxkZCxkdCxsaSxvcHRpb25zLHAsdGQsdGZvb3QsdGgsdGhlYWQsdHIsc291cmNlJyk7XG4vLyBIVE1MNSB0YWdzIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZGljZXMuaHRtbCNlbGVtZW50cy0zXG4vLyBQaHJhc2luZyBDb250ZW50IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI3BocmFzaW5nLWNvbnRlbnRcbnZhciBpc05vblBocmFzaW5nVGFnID0gbWFrZU1hcCgnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJhc2UsYmxvY2txdW90ZSxib2R5LGNhcHRpb24sY29sLGNvbGdyb3VwLGRkLCcgK1xuICAgICdkZXRhaWxzLGRpYWxvZyxkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0sJyArXG4gICAgJ2gxLGgyLGgzLGg0LGg1LGg2LGhlYWQsaGVhZGVyLGhncm91cCxocixodG1sLGxlZ2VuZCxsaSxtZW51aXRlbSxtZXRhLCcgK1xuICAgICdvcHRncm91cCxvcHRpb24scGFyYW0scnAscnQsc291cmNlLHN0eWxlLHN1bW1hcnksdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsJyArXG4gICAgJ3RpdGxlLHRyLHRyYWNrJyk7XG5cbi8qKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVuZG9yIGNvZGUuXG4gKi9cbi8vIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIHBhcnNpbmcgdGFncyBhbmQgYXR0cmlidXRlc1xudmFyIGF0dHJpYnV0ZSA9IC9eXFxzKihbXlxcc1wiJzw+XFwvPV0rKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xudmFyIGR5bmFtaWNBcmdBdHRyaWJ1dGUgPSAvXlxccyooKD86di1bXFx3LV0rOnxAfDp8IylcXFtbXj1dKz9cXF1bXlxcc1wiJzw+XFwvPV0qKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xudmFyIG5jbmFtZSA9IFwiW2EtekEtWl9dW1xcXFwtXFxcXC4wLTlfYS16QS1aXCIuY29uY2F0KHVuaWNvZGVSZWdFeHAuc291cmNlLCBcIl0qXCIpO1xudmFyIHFuYW1lQ2FwdHVyZSA9IFwiKCg/OlwiLmNvbmNhdChuY25hbWUsIFwiXFxcXDopP1wiKS5jb25jYXQobmNuYW1lLCBcIilcIik7XG52YXIgc3RhcnRUYWdPcGVuID0gbmV3IFJlZ0V4cChcIl48XCIuY29uY2F0KHFuYW1lQ2FwdHVyZSkpO1xudmFyIHN0YXJ0VGFnQ2xvc2UgPSAvXlxccyooXFwvPyk+LztcbnZhciBlbmRUYWcgPSBuZXcgUmVnRXhwKFwiXjxcXFxcL1wiLmNvbmNhdChxbmFtZUNhcHR1cmUsIFwiW14+XSo+XCIpKTtcbnZhciBkb2N0eXBlID0gL148IURPQ1RZUEUgW14+XSs+L2k7XG4vLyAjNzI5ODogZXNjYXBlIC0gdG8gYXZvaWQgYmVpbmcgcGFzc2VkIGFzIEhUTUwgY29tbWVudCB3aGVuIGlubGluZWQgaW4gcGFnZVxudmFyIGNvbW1lbnQgPSAvXjwhXFwtLS87XG52YXIgY29uZGl0aW9uYWxDb21tZW50ID0gL148IVxcWy87XG4vLyBTcGVjaWFsIEVsZW1lbnRzIChjYW4gY29udGFpbiBhbnl0aGluZylcbnZhciBpc1BsYWluVGV4dEVsZW1lbnQgPSBtYWtlTWFwKCdzY3JpcHQsc3R5bGUsdGV4dGFyZWEnLCB0cnVlKTtcbnZhciByZUNhY2hlID0ge307XG52YXIgZGVjb2RpbmdNYXAgPSB7XG4gICAgJyZsdDsnOiAnPCcsXG4gICAgJyZnd
13835DsnOiAnPicsXG4gICAgJyZxdW90Oyc6ICdcIicsXG4gICAgJyZhbXA7JzogJyYnLFxuICAgICcmIzEwOyc6ICdcXG4nLFxuICAgICcmIzk7JzogJ1xcdCcsXG4gICAgJyYjMzk7JzogXCInXCJcbn07XG52YXIgZW5jb2RlZEF0dHIgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMzOSk7L2c7XG52YXIgZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgPSAvJig/Omx0fGd0fHF1b3R8YW1wfCMzOXwjMTB8IzkpOy9nO1xuLy8gIzU5OTJcbnZhciBpc0lnbm9yZU5ld2xpbmVUYWcgPSBtYWtlTWFwKCdwcmUsdGV4dGFyZWEnLCB0cnVlKTtcbnZhciBzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUgPSBmdW5jdGlvbiAodGFnLCBodG1sKSB7XG4gICAgcmV0dXJuIHRhZyAmJiBpc0lnbm9yZU5ld2xpbmVUYWcodGFnKSAmJiBodG1sWzBdID09PSAnXFxuJztcbn07XG5mdW5jdGlvbiBkZWNvZGVBdHRyKHZhbHVlLCBzaG91bGREZWNvZGVOZXdsaW5lcykge1xuICAgIHZhciByZSA9IHNob3VsZERlY29kZU5ld2xpbmVzID8gZW5jb2RlZEF0dHJXaXRoTmV3TGluZXMgOiBlbmNvZGVkQXR0cjtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShyZSwgZnVuY3Rpb24gKG1hdGNoKSB7IHJldHVybiBkZWNvZGluZ01hcFttYXRjaF07IH0pO1xufVxuZnVuY3Rpb24gcGFyc2VIVE1MKGh0bWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgZXhwZWN0SFRNTCA9IG9wdGlvbnMuZXhwZWN0SFRNTDtcbiAgICB2YXIgaXNVbmFyeVRhZyA9IG9wdGlvbnMuaXNVbmFyeVRhZyB8fCBubztcbiAgICB2YXIgY2FuQmVMZWZ0T3BlblRhZyA9IG9wdGlvbnMuY2FuQmVMZWZ0T3BlblRhZyB8fCBubztcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsYXN0LCBsYXN0VGFnO1xuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0ID0gaHRtbDtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBpbiBhIHBsYWludGV4dCBjb250ZW50IGVsZW1lbnQgbGlrZSBzY3JpcHQvc3R5bGVcbiAgICAgICAgaWYgKCFsYXN0VGFnIHx8ICFpc1BsYWluVGV4dEVsZW1lbnQobGFzdFRhZykpIHtcbiAgICAgICAgICAgIHZhciB0ZXh0RW5kID0gaHRtbC5pbmRleE9mKCc8Jyk7XG4gICAgICAgICAgICBpZiAodGV4dEVuZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIENvbW1lbnQ6XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQudGVzdChodG1sKSkge1xuICAgICAgICAgICAgICAgICAgICB2Y
13835XIgY29tbWVudEVuZCA9IGh0bWwuaW5kZXhPZignLS0+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50RW5kID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNob3VsZEtlZXBDb21tZW50ICYmIG9wdGlvbnMuY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29tbWVudChodG1sLnN1YnN0cmluZyg0LCBjb21tZW50RW5kKSwgaW5kZXgsIGluZGV4ICsgY29tbWVudEVuZCArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZShjb21tZW50RW5kICsgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29uZGl0aW9uYWxfY29tbWVudCNEb3dubGV2ZWwtcmV2ZWFsZWRfY29uZGl0aW9uYWxfY29tbWVudFxuICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb25hbENvbW1lbnQudGVzdChodG1sKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29uZGl0aW9uYWxFbmQgPSBodG1sLmluZGV4T2YoJ10+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb25hbEVuZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKGNvbmRpdGlvbmFsRW5kICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIERvY3R5cGU6XG4gICAgICAgICAgICAgICAgdmFyIGRvY3R5cGVNYXRjaCA9IGh0bWwubWF0Y2goZG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3R5cGVNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKGRvY3R5cGVNYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFbmQgdGFnOlxuICAgICAgICAgICAgICAgIHZhciBlbmRUYWdNYXRjaCA9IGh0bWwubWF0Y2goZW5kVGFnKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kVGFnTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1ckluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoZW5kVGFnTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VFbmRUYWcoZW5kVGFnTWF0Y2hbMV0sIGN1ckluZGV4LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRhZzpcbiAgICAgICAgICAgICAgICB2Y
13835XIgc3RhcnRUYWdNYXRjaCA9IHBhcnNlU3RhcnRUYWcoKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRUYWdNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdGFydFRhZyhzdGFydFRhZ01hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFydFRhZ01hdGNoLnRhZ05hbWUsIGh0bWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRleHQgPSB2b2lkIDAsIHJlc3QgPSB2b2lkIDAsIG5leHQgPSB2b2lkIDA7XG4gICAgICAgICAgICBpZiAodGV4dEVuZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdCA9IGh0bWwuc2xpY2UodGV4dEVuZCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKCFlbmRUYWcudGVzdChyZXN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAhc3RhcnRUYWdPcGVuLnRlc3QocmVzdCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWNvbW1lbnQudGVzdChyZXN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAhY29uZGl0aW9uYWxDb21tZW50LnRlc3QocmVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gPCBpbiBwbGFpbiB0ZXh0LCBiZSBmb3JnaXZpbmcgYW5kIHRyZWF0IGl0IGFzIHRleHRcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHJlc3QuaW5kZXhPZignPCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgdGV4dEVuZCArPSBuZXh0O1xuICAgICAgICAgICAgICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGV4dCA9IGh0bWwuc3Vic3RyaW5nKDAsIHRleHRFbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRleHRFbmQgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IGh0bWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgICAgIGFkdmFuY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2hhcnMgJiYgdGV4dCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCwgaW5kZXggLSB0ZXh0Lmxlbmd0aCwgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGVuZFRhZ0xlbmd0aF8xID0gMDtcbiAgICAgICAgICAgIHZhciBzdGFja2VkVGFnXzEgPSBsYXN0VGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB2Y
13835XIgcmVTdGFja2VkVGFnID0gcmVDYWNoZVtzdGFja2VkVGFnXzFdIHx8XG4gICAgICAgICAgICAgICAgKHJlQ2FjaGVbc3RhY2tlZFRhZ18xXSA9IG5ldyBSZWdFeHAoJyhbXFxcXHNcXFxcU10qPykoPC8nICsgc3RhY2tlZFRhZ18xICsgJ1tePl0qPiknLCAnaScpKTtcbiAgICAgICAgICAgIHZhciByZXN0ID0gaHRtbC5yZXBsYWNlKHJlU3RhY2tlZFRhZywgZnVuY3Rpb24gKGFsbCwgdGV4dCwgZW5kVGFnKSB7XG4gICAgICAgICAgICAgICAgZW5kVGFnTGVuZ3RoXzEgPSBlbmRUYWcubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICghaXNQbGFpblRleHRFbGVtZW50KHN0YWNrZWRUYWdfMSkgJiYgc3RhY2tlZFRhZ18xICE9PSAnbm9zY3JpcHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPCFcXC0tKFtcXHNcXFNdKj8pLS0+L2csICckMScpIC8vICM3Mjk4XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1dPi9nLCAnJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFja2VkVGFnXzEsIHRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jaGFycykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNoYXJzKHRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluZGV4ICs9IGh0bWwubGVuZ3RoIC0gcmVzdC5sZW5ndGg7XG4gICAgICAgICAgICBodG1sID0gcmVzdDtcbiAgICAgICAgICAgIHBhcnNlRW5kVGFnKHN0YWNrZWRUYWdfMSwgaW5kZXggLSBlbmRUYWdMZW5ndGhfMSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChodG1sID09PSBsYXN0KSB7XG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzICYmIG9wdGlvbnMuY2hhcnMoaHRtbCk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RhY2subGVuZ3RoICYmIG9wdGlvbnMud2Fybikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMud2FybihcIk1hbC1mb3JtYXR0ZWQgdGFnIGF0IGVuZCBvZiB0ZW1wbGF0ZTogXFxcIlwiLmNvbmNhdChodG1sLCBcIlxcXCJcIiksIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4ICsgaHRtbC5sZW5ndGhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChodG1sKSB7XG4gICAgICAgIHZhciBzdGF0ZV8xID0gX2xvb3BfMSgpO1xuICAgICAgICBpZiAoc3RhdGVfMSA9PT0gXCJicmVha1wiKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIENsZWFuIHVwIGFueSByZW1haW5pbmcgdGFnc1xuICAgIHBhcnNlRW5kVGFnKCk7XG4gICAgZnVuY3Rpb24gYWR2YW5jZShuKSB7XG4gICAgICAgIGluZGV4ICs9IG47XG4gICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZyhuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VTdGFydFRhZygpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gaHRtbC5tYXRjaChzdGFydFRhZ09wZW4pO1xuICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IHtcbiAgICAgICAgICAgICAgICB0YWdOYW1lOiBzdGFydFsxXSxcbiAgICAgICAgICAgICAgICBhdHRyczogW10sXG4gICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWR2YW5jZShzdGFydFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdmFyIGVuZCA9IHZvaWQgMCwgYXR0ciA9IHZvaWQgMDtcbiAgICAgICAgICAgIHdoaWxlICghKGVuZCA9IGh0bWwubWF0Y2goc3RhcnRUYWdDbG9zZSkpICYmXG4gICAgICAgICAgICAgICAgKGF0dHIgPSBodG1sLm1hdGNoKGR5bmFtaWNBcmdBdHRyaWJ1dGUpIHx8IGh0bWwubWF0Y2goYXR0cmlidXRlKSkpIHtcbiAgICAgICAgICAgICAgICBhdHRyLnN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgYWR2YW5jZShhdHRyWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgYXR0ci5lbmQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICBtYXRjaC5hdHRycy5wdXNoKGF0dHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgICAgIG1hdGNoLnVuYXJ5U2xhc2ggPSBlbmRbMV07XG4gICAgICAgICAgICAgICAgYWR2YW5jZShlbmRbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBtYXRjaC5lbmQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlU3RhcnRUYWcobWF0Y2gpIHtcbiAgICAgICAgdmFyIHRhZ05hbWUgPSBtYXRjaC50YWdOYW1lO1xuICAgICAgICB2Y
13835XIgdW5hcnlTbGFzaCA9IG1hdGNoLnVuYXJ5U2xhc2g7XG4gICAgICAgIGlmIChleHBlY3RIVE1MKSB7XG4gICAgICAgICAgICBpZiAobGFzdFRhZyA9PT0gJ3AnICYmIGlzTm9uUGhyYXNpbmdUYWcodGFnTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBwYXJzZUVuZFRhZyhsYXN0VGFnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5CZUxlZnRPcGVuVGFnKHRhZ05hbWUpICYmIGxhc3RUYWcgPT09IHRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICBwYXJzZUVuZFRhZyh0YWdOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgdW5hcnkgPSBpc1VuYXJ5VGFnKHRhZ05hbWUpIHx8ICEhdW5hcnlTbGFzaDtcbiAgICAgICAgdmFyIGwgPSBtYXRjaC5hdHRycy5sZW5ndGg7XG4gICAgICAgIHZhciBhdHRycyA9IG5ldyBBcnJheShsKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gbWF0Y2guYXR0cnNbaV07XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBhcmdzWzNdIHx8IGFyZ3NbNF0gfHwgYXJnc1s1XSB8fCAnJztcbiAgICAgICAgICAgIHZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IHRhZ05hbWUgPT09ICdhJyAmJiBhcmdzWzFdID09PSAnaHJlZidcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzO1xuICAgICAgICAgICAgYXR0cnNbaV0gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJnc1sxXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGVjb2RlQXR0cih2YWx1ZSwgc2hvdWxkRGVjb2RlTmV3bGluZXMpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgIGF0dHJzW2ldLnN0YXJ0ID0gYXJncy5zdGFydCArIGFyZ3NbMF0ubWF0Y2goL15cXHMqLykubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGF0dHJzW2ldLmVuZCA9IGFyZ3MuZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdW5hcnkpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgIHRhZzogdGFnTmFtZSxcbiAgICAgICAgICAgICAgICBsb3dlckNhc2VkVGFnOiB0YWdOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgYXR0cnM6IGF0dHJzLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBtYXRjaC5zdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IG1hdGNoLmVuZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsYXN0VGFnID0gdGFnTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBhdHRycywgdW5hcnksIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlRW5kVGFnKHRhZ05hbWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgdmFyIHBvcywgbG93ZXJDYXNlZFRhZ05hbWU7XG4gICAgICAgIGlmIChzdGFydCA9PSBudWxsKVxuICAgICAgICAgICAgc3RhcnQgPSBpbmRleDtcbiAgICAgICAgaWYgKGVuZCA9PSBudWxsKVxuICAgICAgICAgICAgZW5kID0gaW5kZXg7XG4gICAgICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3Qgb3BlbmVkIHRhZyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgICAgIGlmICh0YWdOYW1lKSB7XG4gICAgICAgICAgICBsb3dlckNhc2VkVGFnTmFtZSA9IHRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGZvciAocG9zID0gc3RhY2subGVuZ3RoIC0gMTsgcG9zID49IDA7IHBvcy0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YWNrW3Bvc10ubG93ZXJDYXNlZFRhZyA9PT0gbG93ZXJDYXNlZFRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgbm8gdGFnIG5hbWUgaXMgcHJvdmlkZWQsIGNsZWFuIHNob3BcbiAgICAgICAgICAgIHBvcyA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcyA+PSAwKSB7XG4gICAgICAgICAgICAvLyBDbG9zZSBhbGwgdGhlIG9wZW4gZWxlbWVudHMsIHVwIHRoZSBzdGFja1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gcG9zOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAoaSA+IHBvcyB8fCAhdGFnTmFtZSkgJiYgb3B0aW9ucy53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMud2FybihcInRhZyA8XCIuY29uY2F0KHN0YWNrW2ldLnRhZywgXCI+IGhhcyBubyBtYXRjaGluZyBlbmQgdGFnLlwiKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YWNrW2ldLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBzdGFja1tpXS5lbmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmVuZChzdGFja1tpXS50YWcsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb3BlbiBlbGVtZW50cyBmcm9tIHRoZSBzdGFja1xuICAgICAgICAgICAgc3RhY2subGVuZ3RoID0gcG9zO1xuICAgICAgICAgICAgbGFzdFRhZyA9IHBvcyAmJiBzdGFja1twb3MgLSAxXS50YWc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdicicpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgdHJ1ZSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgI
13835H1cbiAgICAgICAgZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdwJykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXJ0KHRhZ05hbWUsIFtdLCBmYWxzZSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmVuZCh0YWdOYW1lLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIG9uUkUgPSAvXkB8XnYtb246LztcbnZhciBkaXJSRSA9IC9edi18XkB8Xjp8XiMvO1xudmFyIGZvckFsaWFzUkUgPSAvKFtcXHNcXFNdKj8pXFxzKyg/OmlufG9mKVxccysoW1xcc1xcU10qKS87XG52YXIgZm9ySXRlcmF0b3JSRSA9IC8sKFteLFxcfVxcXV0qKSg/OiwoW14sXFx9XFxdXSopKT8kLztcbnZhciBzdHJpcFBhcmVuc1JFID0gL15cXCh8XFwpJC9nO1xudmFyIGR5bmFtaWNBcmdSRSA9IC9eXFxbLipcXF0kLztcbnZhciBhcmdSRSA9IC86KC4qKSQvO1xudmFyIGJpbmRSRSA9IC9eOnxeXFwufF52LWJpbmQ6LztcbnZhciBtb2RpZmllclJFID0gL1xcLlteLlxcXV0rKD89W15cXF1dKiQpL2c7XG52YXIgc2xvdFJFID0gL152LXNsb3QoOnwkKXxeIy87XG52YXIgbGluZUJyZWFrUkUgPSAvW1xcclxcbl0vO1xudmFyIHdoaXRlc3BhY2VSRSA9IC9bIFxcZlxcdFxcclxcbl0rL2c7XG52YXIgaW52YWxpZEF0dHJpYnV0ZVJFID0gL1tcXHNcIic8PlxcLz1dLztcbnZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG52YXIgZW1wdHlTbG90U2NvcGVUb2tlbiA9IFwiX2VtcHR5X1wiO1xuLy8gY29uZmlndXJhYmxlIHN0YXRlXG52YXIgd2FybjtcbnZhciBkZWxpbWl0ZXJzO1xudmFyIHRyYW5zZm9ybXM7XG52YXIgcHJlVHJhbnNmb3JtcztcbnZhciBwb3N0VHJhbnNmb3JtcztcbnZhciBwbGF0Zm9ybUlzUHJlVGFnO1xudmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG52YXIgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2U7XG52YXIgbWF5YmVDb21wb25lbnQ7XG5mdW5jdGlvbiBjcmVhdGVBU1RFbGVtZW50KHRhZywgYXR0cnMsIHBhcmVudCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IDEsXG4gICAgICAgIHRhZzogdGFnLFxuICAgICAgICBhdHRyc0xpc3Q6IGF0dHJzLFxuICAgICAgICBhdHRyc01hcDogbWFrZUF0dHJzTWFwKGF0dHJzKSxcbiAgICAgICAgcmF3QXR0cnNNYXA6IHt9LFxuICAgICAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbn1cbi8qKlxuICogQ29udmVydCBIVE1MIHN0cmluZyB0byBBU1QuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHRlbXBsYXRlLCBvcHRpb25zKSB7XG4gICAgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICBwbGF0Zm9ybUlzUHJlVGFnID0gb3B0aW9ucy5pc1ByZVRhZyB8fCBubztcbiAgICBwbGF0Zm9ybU11c3RVc2VQcm9wID0gb3B0aW9ucy5tdXN0VXNlUHJvcCB8fCBubztcbiAgICBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZSA9IG9wdGlvbnMuZ2V0VGFnTmFtZXNwYWNlIHx8IG5vO1xuICAgIHZhciBpc1Jlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICAgIG1heWJlQ29tcG9uZW50ID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHJldHVybiAhIShlbC5jb21wb25lbnQgfHxcbiAgICAgICAgICAgIGVsLmF0dHJzTWFwWyc6aXMnXSB8fFxuICAgICAgICAgICAgZWwuYXR0cnNNYXBbJ3YtYmluZDppcyddIHx8XG4gICAgICAgICAgICAhKGVsLmF0dHJzTWFwLmlzID8gaXNSZXNlcnZlZFRhZyhlbC5hdHRyc01hcC5pcykgOiBpc1Jlc2VydmVkVGFnKGVsLnRhZykpKTtcbiAgICB9O1xuICAgIHRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3RyYW5zZm9ybU5vZGUnKTtcbiAgICBwcmVUcmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdwcmVUcmFuc2Zvcm1Ob2RlJyk7XG4gICAgcG9zdFRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3Bvc3RUcmFuc2Zvcm1Ob2RlJyk7XG4gICAgZGVsaW1pdGVycyA9IG9wdGlvbnMuZGVsaW1pdGVycztcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgcHJlc2VydmVXaGl0ZXNwYWNlID0gb3B0aW9ucy5wcmVzZXJ2ZVdoaXRlc3BhY2UgIT09IGZhbHNlO1xuICAgIHZhciB3aGl0ZXNwYWNlT3B0aW9uID0gb3B0aW9ucy53aGl0ZXNwYWNlO1xuICAgIHZhciByb290O1xuICAgIHZhciBjdXJyZW50UGFyZW50O1xuICAgIHZhciBpblZQcmUgPSBmYWxzZTtcbiAgICB2YXIgaW5QcmUgPSBmYWxzZTtcbiAgICB2YXIgd2FybmVkID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gd2Fybk9uY2UobXNnLCByYW5nZSkge1xuICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgd2FybmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdhcm4obXNnLCByYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvc2VFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG4gICAgICAgIGlmICghaW5WUHJlICYmICFlbGVtZW50LnByb2Nlc3NlZCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHByb2Nlc3NFbGVtZW50KGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCAmJiBlbGVtZW50ICE9PSByb290KSB7XG4gICAgICAgICAgICAvLyBhbGxvdyByb290IGVsZW1lbnRzIHdpdGggdi1pZiwgdi1lbHNlLWlmIGFuZCB2LWVsc2VcbiAgICAgICAgICAgIGlmIChyb290LmlmICYmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tSb290Q29uc3RyYWludHMoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZElmQ29uZGl0aW9uKHJvb3QsIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwOiBlbGVtZW50LmVsc2VpZixcbiAgICAgICAgICAgICAgICAgICAgYmxvY2s6IGVsZW1lbnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgI
13835H1cbiAgICAgICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShcIkNvbXBvbmVudCB0ZW1wbGF0ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJJZiB5b3UgYXJlIHVzaW5nIHYtaWYgb24gbXVsdGlwbGUgZWxlbWVudHMsIFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugdi1lbHNlLWlmIHRvIGNoYWluIHRoZW0gaW5zdGVhZC5cIiwgeyBzdGFydDogZWxlbWVudC5zdGFydCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFBhcmVudCAmJiAhZWxlbWVudC5mb3JiaWRkZW4pIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzSWZDb25kaXRpb25zKGVsZW1lbnQsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNjb3BlZCBzbG90XG4gICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgaXQgaW4gdGhlIGNoaWxkcmVuIGxpc3Qgc28gdGhhdCB2LWVsc2UoLWlmKSBjb25kaXRpb25zIGNhblxuICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIGl0IGFzIHRoZSBwcmV2IG5vZGUuXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSBlbGVtZW50LnNsb3RUYXJnZXQgfHwgJ1wiZGVmYXVsdFwiJztcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgfHwgKGN1cnJlbnRQYXJlbnQuc2NvcGVkU2xvdHMgPSB7fSkpW25hbWVfMV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnQgPSBjdXJyZW50UGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmFsIGNoaWxkcmVuIGNsZWFudXBcbiAgICAgICAgLy8gZmlsdGVyIG91dCBzY29wZWQgc2xvdHNcbiAgICAgICAgZWxlbWVudC5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjKSB7IHJldHVybiAhYy5zbG90U2NvcGU7IH0pO1xuICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBub2RlIGFnYWluXG4gICAgICAgIHRyaW1FbmRpbmdXaGl0ZXNwYWNlKGVsZW1lbnQpO1xuICAgICAgICAvLyBjaGVjayBwcmUgc3RhdGVcbiAgICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XG4gICAgICAgICAgICBpblZQcmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAgICAgICAgIGluUHJlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwbHkgcG9zdC10cmFuc2Zvcm1zXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zdFRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHBvc3RUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyaW1FbmRpbmdXaGl0ZXNwYWNlKGVsKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIG5vZGVcbiAgICAgICAgaWYgKCFpblByZSkge1xuICAgICAgICAgICAgdmFyIGxhc3ROb2RlID0gdm9pZCAwO1xuICAgICAgICAgICAgd2hpbGUgKChsYXN0Tm9kZSA9IGVsLmNoaWxkcmVuW2VsLmNoaWxkcmVuLmxlbmd0aCAtIDFdKSAmJlxuICAgICAgICAgICAgICAgIGxhc3ROb2RlLnR5cGUgPT09IDMgJiZcbiAgICAgICAgICAgICAgICBsYXN0Tm9kZS50ZXh0ID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICBlbC5jaGlsZHJlbi5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1Jvb3RDb25zdHJhaW50cyhlbCkge1xuICAgICAgICBpZiAoZWwudGFnID09PSAnc2xvdCcgfHwgZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcIkNhbm5vdCB1c2UgPFwiLmNvbmNhdChlbC50YWcsIFwiPiBhcyBjb21wb25lbnQgcm9vdCBlbGVtZW50IGJlY2F1c2UgaXQgbWF5IFwiKSArXG4gICAgICAgICAgICAgICAgJ2NvbnRhaW4gbXVsdGlwbGUgbm9kZXMuJywgeyBzdGFydDogZWwuc3RhcnQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsLmF0dHJzTWFwLmhhc093blByb3BlcnR5KCd2LWZvcicpKSB7XG4gICAgICAgICAgICB3YXJuT25jZSgnQ2Fubm90IHVzZSB2LWZvciBvbiBzdGF0ZWZ1bCBjb21wb25lbnQgcm9vdCBlbGVtZW50IGJlY2F1c2UgJyArXG4gICAgICAgICAgICAgICAgJ2l0IHJlbmRlcnMgbXVsdGlwbGUgZWxlbWVudHMuJywgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ10pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhcnNlSFRNTCh0ZW1wbGF0ZSwge1xuICAgICAgICB3YXJuOiB3YXJuLFxuICAgICAgICBleHBlY3RIVE1MOiBvcHRpb25zLmV4cGVjdEhUTUwsXG4gICAgICAgIGlzVW5hcnlUYWc6IG9wdGlvbnMuaXNVbmFyeVRhZyxcbiAgICAgICAgY2FuQmVMZWZ0T3BlblRhZzogb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnLFxuICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lczogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lcyxcbiAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgc2hvdWxkS2VlcENvbW1lbnQ6IG9wdGlvbnMuY29tbWVudHMsXG4gICAgICAgIG91dHB1dFNvdXJjZVJhbmdlOiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlLFxuICAgICAgICBzdGFydDogZnVuY3Rpb24gKHRhZywgYXR0cnMsIHVuYXJ5LCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBuYW1lc3BhY2UuXG4gICAgICAgICAgICAvLyBpbmhlcml0IHBhcmVudCBucyBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgICAgI
13835HZhciBucyA9IChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQubnMpIHx8IHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgICAgICAgICAvLyBoYW5kbGUgSUUgc3ZnIGJ1Z1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoaXNJRSAmJiBucyA9PT0gJ3N2ZycpIHtcbiAgICAgICAgICAgICAgICBhdHRycyA9IGd1YXJkSUVTVkdCdWcoYXR0cnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBjcmVhdGVBU1RFbGVtZW50KHRhZywgYXR0cnMsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgICAgICAgaWYgKG5zKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5ucyA9IG5zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJhd0F0dHJzTWFwID0gZWxlbWVudC5hdHRyc0xpc3QucmVkdWNlKGZ1bmN0aW9uIChjdW11bGF0ZWQsIGF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1bXVsYXRlZFthdHRyLm5hbWVdID0gYXR0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdW11bGF0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW52YWxpZEF0dHJpYnV0ZVJFLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIkludmFsaWQgZHluYW1pYyBhcmd1bWVudCBleHByZXNzaW9uOiBhdHRyaWJ1dGUgbmFtZXMgY2Fubm90IGNvbnRhaW4gXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VzLCBxdW90ZXMsIDwsID4sIC8gb3IgPS5cIiwgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogYXR0ci5zdGFydCArIGF0dHIubmFtZS5pbmRleE9mKFwiW1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBhdHRyLnN0YXJ0ICsgYXR0ci5uYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ZvcmJpZGRlblRhZyhlbGVtZW50KSAmJiAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgICAgIHdhcm4oJ1RlbXBsYXRlcyBzaG91bGQgb25seSBiZSByZXNwb25zaWJsZSBmb3IgbWFwcGluZyB0aGUgc3RhdGUgdG8gdGhlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1VJLiBBdm9pZCBwbGFjaW5nIHRhZ3Mgd2l0aCBzaWRlLWVmZmVjdHMgaW4geW91ciB0ZW1wbGF0ZXMsIHN1Y2ggYXMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjxcIi5jb25jYXQodGFnLCBcIj5cIikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJywgYXMgdGhleSB3aWxsIG5vdCBiZSBwYXJzZWQuJywgeyBzdGFydDogZWxlbWVudC5zdGFydCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGx5IHByZS10cmFuc2Zvcm1zXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZVRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gcHJlVHJhbnNmb3Jtc1tpXShlbGVtZW50LCBvcHRpb25zKSB8fCBlbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpblZQcmUpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzUHJlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnByZSkge1xuICAgICAgICAgICAgICAgICAgICBpblZQcmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybUlzUHJlVGFnKGVsZW1lbnQudGFnKSkge1xuICAgICAgICAgICAgICAgIGluUHJlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpblZQcmUpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzUmF3QXR0cnMoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghZWxlbWVudC5wcm9jZXNzZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZXNcbiAgICAgICAgICAgICAgICBwcm9jZXNzRm9yKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJZihlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzT25jZShlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgICAgICAgIHJvb3QgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrUm9vdENvbnN0cmFpbnRzKHJvb3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdW5hcnkpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xvc2VFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbmQ6IGZ1bmN0aW9uICh0YWcsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgI
13835HZhciBlbGVtZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAvLyBwb3Agc3RhY2tcbiAgICAgICAgICAgIHN0YWNrLmxlbmd0aCAtPSAxO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZW5kID0gZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xvc2VFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBjaGFyczogZnVuY3Rpb24gKHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgIGlmICghY3VycmVudFBhcmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0ID09PSB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2Fybk9uY2UoJ0NvbXBvbmVudCB0ZW1wbGF0ZSByZXF1aXJlcyBhIHJvb3QgZWxlbWVudCwgcmF0aGVyIHRoYW4ganVzdCB0ZXh0LicsIHsgc3RhcnQ6IHN0YXJ0IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuT25jZShcInRleHQgXFxcIlwiLmNvbmNhdCh0ZXh0LCBcIlxcXCIgb3V0c2lkZSByb290IGVsZW1lbnQgd2lsbCBiZSBpZ25vcmVkLlwiKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgIGlmIChpc0lFICYmXG4gICAgICAgICAgICAgICAgY3VycmVudFBhcmVudC50YWcgPT09ICd0ZXh0YXJlYScgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LmF0dHJzTWFwLnBsYWNlaG9sZGVyID09PSB0ZXh0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gY3VycmVudFBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGlmIChpblByZSB8fCB0ZXh0LnRyaW0oKSkge1xuICAgICAgICAgICAgICAgIHRleHQgPSBpc1RleHRUYWcoY3VycmVudFBhcmVudClcbiAgICAgICAgICAgICAgICAgICAgPyB0ZXh0XG4gICAgICAgICAgICAgICAgICAgIDogZGVjb2RlSFRNTENhY2hlZCh0ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHdoaXRlc3BhY2Utb25seSBub2RlIHJpZ2h0IGFmdGVyIGFuIG9wZW5pbmcgdGFnXG4gICAgICAgICAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAod2hpdGVzcGFjZU9wdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICh3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGNvbmRlbnNlIG1vZGUsIHJlbW92ZSB0aGUgd2hpdGVzcGFjZSBub2RlIGlmIGl0IGNvbnRhaW5zXG4gICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgYnJlYWssIG90aGVyd2lzZSBjb25kZW5zZSB0byBhIHNpbmdsZSBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gbGluZUJyZWFrUkUudGVzdCh0ZXh0KSA/ICcnIDogJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gcHJlc2VydmVXaGl0ZXNwYWNlID8gJyAnIDogJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgICAgIGlmICghaW5QcmUgJiYgd2hpdGVzcGFjZU9wdGlvbiA9PT0gJ2NvbmRlbnNlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25kZW5zZSBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlcyBpbnRvIHNpbmdsZSBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHdoaXRlc3BhY2VSRSwgJyAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB2Y
13835XIgY2hpbGQgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgaWYgKCFpblZQcmUgJiYgdGV4dCAhPT0gJyAnICYmIChyZXMgPSBwYXJzZVRleHQodGV4dCwgZGVsaW1pdGVycykpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHJlcy5leHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiByZXMudG9rZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0ICE9PSAnICcgfHxcbiAgICAgICAgICAgICAgICAgICAgIWNoaWxkcmVuLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50ZXh0ICE9PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgb3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmVuZCA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbW1lbnQ6IGZ1bmN0aW9uICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAvLyBhZGRpbmcgYW55dGhpbmcgYXMgYSBzaWJsaW5nIHRvIHRoZSByb290IG5vZGUgaXMgZm9yYmlkZGVuXG4gICAgICAgICAgICAvLyBjb21tZW50cyBzaG91bGQgc3RpbGwgYmUgYWxsb3dlZCwgYnV0IGlnbm9yZWRcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICBpc0NvbW1lbnQ6IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50LmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvb3Q7XG59XG5mdW5jdGlvbiBwcm9jZXNzUHJlKGVsKSB7XG4gICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LXByZScpICE9IG51bGwpIHtcbiAgICAgICAgZWwucHJlID0gdHJ1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzUmF3QXR0cnMoZWwpIHtcbiAgICB2YXIgbGlzdCA9IGVsLmF0dHJzTGlzdDtcbiAgICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XG4gICAgaWYgKGxlbikge1xuICAgICAgICB2Y
13835XIgYXR0cnMgPSAoZWwuYXR0cnMgPSBuZXcgQXJyYXkobGVuKSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGxpc3RbaV0ubmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkobGlzdFtpXS52YWx1ZSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobGlzdFtpXS5zdGFydCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYXR0cnNbaV0uc3RhcnQgPSBsaXN0W2ldLnN0YXJ0O1xuICAgICAgICAgICAgICAgIGF0dHJzW2ldLmVuZCA9IGxpc3RbaV0uZW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKCFlbC5wcmUpIHtcbiAgICAgICAgLy8gbm9uIHJvb3Qgbm9kZSBpbiBwcmUgYmxvY2tzIHdpdGggbm8gYXR0cmlidXRlc1xuICAgICAgICBlbC5wbGFpbiA9IHRydWU7XG4gICAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHByb2Nlc3NLZXkoZWxlbWVudCk7XG4gICAgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIHBsYWluIGVsZW1lbnQgYWZ0ZXJcbiAgICAvLyByZW1vdmluZyBzdHJ1Y3R1cmFsIGF0dHJpYnV0ZXNcbiAgICBlbGVtZW50LnBsYWluID1cbiAgICAgICAgIWVsZW1lbnQua2V5ICYmICFlbGVtZW50LnNjb3BlZFNsb3RzICYmICFlbGVtZW50LmF0dHJzTGlzdC5sZW5ndGg7XG4gICAgcHJvY2Vzc1JlZihlbGVtZW50KTtcbiAgICBwcm9jZXNzU2xvdENvbnRlbnQoZWxlbWVudCk7XG4gICAgcHJvY2Vzc1Nsb3RPdXRsZXQoZWxlbWVudCk7XG4gICAgcHJvY2Vzc0NvbXBvbmVudChlbGVtZW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxlbWVudCA9IHRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucykgfHwgZWxlbWVudDtcbiAgICB9XG4gICAgcHJvY2Vzc0F0dHJzKGVsZW1lbnQpO1xuICAgIHJldHVybiBlbGVtZW50O1xufVxuZnVuY3Rpb24gcHJvY2Vzc0tleShlbCkge1xuICAgIHZhciBleHAgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2tleScpO1xuICAgIGlmIChleHApIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgICAgICB3YXJuKFwiPHRlbXBsYXRlPiBjYW5ub3QgYmUga2V5ZWQuIFBsYWNlIHRoZSBrZXkgb24gcmVhbCBlbGVtZW50cyBpbnN0ZWFkLlwiLCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbC5mb3IpIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIgaXRlcmF0b3IgPSBlbC5pdGVyYXRvcjIgfHwgZWwuaXRlcmF0b3IxO1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IGVsLnBhcmVudDtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IgPT09IGV4cCAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMSAmJlxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS50YWcgPT09ICd0cmFuc2l0aW9uLWdyb3VwJykge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKFwiRG8gbm90IHVzZSB2LWZvciBpbmRleCBhcyBrZXkgb24gPHRyYW5zaXRpb24tZ3JvdXA+IGNoaWxkcmVuLCBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRoaXMgaXMgdGhlIHNhbWUgYXMgbm90IHVzaW5nIGtleXMuXCIsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JyksIHRydWUgLyogdGlwICovKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWwua2V5ID0gZXhwO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NSZWYoZWwpIHtcbiAgICB2YXIgcmVmID0gZ2V0QmluZGluZ0F0dHIoZWwsICdyZWYnKTtcbiAgICBpZiAocmVmKSB7XG4gICAgICAgIGVsLnJlZiA9IHJlZjtcbiAgICAgICAgZWwucmVmSW5Gb3IgPSBjaGVja0luRm9yKGVsKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzRm9yKGVsKSB7XG4gICAgdmFyIGV4cDtcbiAgICBpZiAoKGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWZvcicpKSkge1xuICAgICAgICB2Y
13835XIgcmVzID0gcGFyc2VGb3IoZXhwKTtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZXh0ZW5kKGVsLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm4oXCJJbnZhbGlkIHYtZm9yIGV4cHJlc3Npb246IFwiLmNvbmNhdChleHApLCBlbC5yYXdBdHRyc01hcFsndi1mb3InXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZUZvcihleHApIHtcbiAgICB2YXIgaW5NYXRjaCA9IGV4cC5tYXRjaChmb3JBbGlhc1JFKTtcbiAgICBpZiAoIWluTWF0Y2gpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgcmVzID0ge307XG4gICAgcmVzLmZvciA9IGluTWF0Y2hbMl0udHJpbSgpO1xuICAgIHZhciBhbGlhcyA9IGluTWF0Y2hbMV0udHJpbSgpLnJlcGxhY2Uoc3RyaXBQYXJlbnNSRSwgJycpO1xuICAgIHZhciBpdGVyYXRvck1hdGNoID0gYWxpYXMubWF0Y2goZm9ySXRlcmF0b3JSRSk7XG4gICAgaWYgKGl0ZXJhdG9yTWF0Y2gpIHtcbiAgICAgICAgcmVzLmFsaWFzID0gYWxpYXMucmVwbGFjZShmb3JJdGVyYXRvclJFLCAnJykudHJpbSgpO1xuICAgICAgICByZXMuaXRlcmF0b3IxID0gaXRlcmF0b3JNYXRjaFsxXS50cmltKCk7XG4gICAgICAgIGlmIChpdGVyYXRvck1hdGNoWzJdKSB7XG4gICAgICAgICAgICByZXMuaXRlcmF0b3IyID0gaXRlcmF0b3JNYXRjaFsyXS50cmltKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcy5hbGlhcyA9IGFsaWFzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0lmKGVsKSB7XG4gICAgdmFyIGV4cCA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWlmJyk7XG4gICAgaWYgKGV4cCkge1xuICAgICAgICBlbC5pZiA9IGV4cDtcbiAgICAgICAgYWRkSWZDb25kaXRpb24oZWwsIHtcbiAgICAgICAgICAgIGV4cDogZXhwLFxuICAgICAgICAgICAgYmxvY2s6IGVsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LWVsc2UnKSAhPSBudWxsKSB7XG4gICAgICAgICAgICBlbC5lbHNlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgZWxzZWlmID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZS1pZicpO1xuICAgICAgICBpZiAoZWxzZWlmKSB7XG4gICAgICAgICAgICBlbC5lbHNlaWYgPSBlbHNlaWY7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzSWZDb25kaXRpb25zKGVsLCBwYXJlbnQpIHtcbiAgICB2YXIgcHJldiA9IGZpbmRQcmV2RWxlbWVudChwYXJlbnQuY2hpbGRyZW4pO1xuICAgIGlmIChwcmV2ICYmIHByZXYuaWYpIHtcbiAgICAgICAgYWRkSWZDb25kaXRpb24ocHJldiwge1xuICAgICAgICAgICAgZXhwOiBlbC5lbHNlaWYsXG4gICAgICAgICAgICBibG9jazogZWxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihcInYtXCIuY29uY2F0KGVsLmVsc2VpZiA/ICdlbHNlLWlmPVwiJyArIGVsLmVsc2VpZiArICdcIicgOiAnZWxzZScsIFwiIFwiKSArXG4gICAgICAgICAgICBcInVzZWQgb24gZWxlbWVudCA8XCIuY29uY2F0KGVsLnRhZywgXCI+IHdpdGhvdXQgY29ycmVzcG9uZGluZyB2LWlmLlwiKSwgZWwucmF3QXR0cnNNYXBbZWwuZWxzZWlmID8gJ3YtZWxzZS1pZicgOiAndi1lbHNlJ10pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGZpbmRQcmV2RWxlbWVudChjaGlsZHJlbikge1xuICAgIHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2ldLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNoaWxkcmVuW2ldLnRleHQgIT09ICcgJykge1xuICAgICAgICAgICAgICAgIHdhcm4oXCJ0ZXh0IFxcXCJcIi5jb25jYXQoY2hpbGRyZW5baV0udGV4dC50cmltKCksIFwiXFxcIiBiZXR3ZWVuIHYtaWYgYW5kIHYtZWxzZSgtaWYpIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwid2lsbCBiZSBpZ25vcmVkLlwiLCBjaGlsZHJlbltpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZHJlbi5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZElmQ29uZGl0aW9uKGVsLCBjb25kaXRpb24pIHtcbiAgICBpZiAoIWVsLmlmQ29uZGl0aW9ucykge1xuICAgICAgICBlbC5pZkNvbmRpdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgZWwuaWZDb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NPbmNlKGVsKSB7XG4gICAgdmFyIG9uY2UgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1vbmNlJyk
138357XG4gICAgaWYgKG9uY2UgIT0gbnVsbCkge1xuICAgICAgICBlbC5vbmNlID0gdHJ1ZTtcbiAgICB9XG59XG4vLyBoYW5kbGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gYSBjb21wb25lbnQgYXMgc2xvdCxcbi8vIGUuZy4gPHRlbXBsYXRlIHNsb3Q9XCJ4eHhcIj4sIDxkaXYgc2xvdC1zY29wZT1cInh4eFwiPlxuZnVuY3Rpb24gcHJvY2Vzc1Nsb3RDb250ZW50KGVsKSB7XG4gICAgdmFyIHNsb3RTY29wZTtcbiAgICBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgIHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzY29wZScpO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2xvdFNjb3BlKSB7XG4gICAgICAgICAgICB3YXJuKFwidGhlIFxcXCJzY29wZVxcXCIgYXR0cmlidXRlIGZvciBzY29wZWQgc2xvdHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYW5kIFwiICtcbiAgICAgICAgICAgICAgICBcInJlcGxhY2VkIGJ5IFxcXCJzbG90LXNjb3BlXFxcIiBzaW5jZSAyLjUuIFRoZSBuZXcgXFxcInNsb3Qtc2NvcGVcXFwiIGF0dHJpYnV0ZSBcIiArXG4gICAgICAgICAgICAgICAgXCJjYW4gYWxzbyBiZSB1c2VkIG9uIHBsYWluIGVsZW1lbnRzIGluIGFkZGl0aW9uIHRvIDx0ZW1wbGF0ZT4gdG8gXCIgK1xuICAgICAgICAgICAgICAgIFwiZGVub3RlIHNjb3BlZCBzbG90cy5cIiwgZWwucmF3QXR0cnNNYXBbJ3Njb3BlJ10sIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RTY29wZSB8fCBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc2xvdC1zY29wZScpO1xuICAgIH1cbiAgICBlbHNlIGlmICgoc2xvdFNjb3BlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Nsb3Qtc2NvcGUnKSkpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGVsLmF0dHJzTWFwWyd2LWZvciddKSB7XG4gICAgICAgICAgICB3YXJuKFwiQW1iaWd1b3VzIGNvbWJpbmVkIHVzYWdlIG9mIHNsb3Qtc2NvcGUgYW5kIHYtZm9yIG9uIDxcIi5jb25jYXQoZWwudGFnLCBcIj4gXCIpICtcbiAgICAgICAgICAgICAgICBcIih2LWZvciB0YWtlcyBoaWdoZXIgcHJpb3JpdHkpLiBVc2UgYSB3cmFwcGVyIDx0ZW1wbGF0ZT4gZm9yIHRoZSBcIiArXG4gICAgICAgICAgICAgICAgXCJzY29wZWQgc2xvdCB0byBtYWtlIGl0IGNsZWFyZXIuXCIsIGVsLnJhd0F0dHJzTWFwWydzbG90LXNjb3BlJ10sIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsLnNsb3RTY29wZSA9IHNsb3RTY29wZTtcbiAgICB9XG4gICAgLy8gc2xvdD1cInh4eFwiXG4gICAgdmFyIHNsb3RUYXJnZXQgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3Nsb3QnKTtcbiAgICBpZiAoc2xvdFRhcmdldCkge1xuICAgICAgICBlbC5zbG90VGFyZ2V0ID0gc2xvdFRhcmdldCA9PT0gJ1wiXCInID8gJ1wiZGVmYXVsdFwiJyA6IHNsb3RUYXJnZXQ7XG4gICAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gISEoZWwuYXR0cnNNYXBbJzpzbG90J10gfHwgZWwuYXR0cnNNYXBbJ3YtYmluZDpzbG90J10pO1xuICAgICAgICAvLyBwcmVzZXJ2ZSBzbG90IGFzIGFuIGF0dHJpYnV0ZSBmb3IgbmF0aXZlIHNoYWRvdyBET00gY29tcGF0XG4gICAgICAgIC8vIG9ubHkgZm9yIG5vbi1zY29wZWQgc2xvdHMuXG4gICAgICAgIGlmIChlbC50YWcgIT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgYWRkQXR0cihlbCwgJ3Nsb3QnLCBzbG90VGFyZ2V0LCBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ3Nsb3QnKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gMi42IHYtc2xvdCBzeW50YXhcbiAgICB7XG4gICAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgIC8vIHYtc2xvdCBvbiA8dGVtcGxhdGU+XG4gICAgICAgICAgICB2Y
13835XIgc2xvdEJpbmRpbmcgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcbiAgICAgICAgICAgIGlmIChzbG90QmluZGluZykge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zbG90VGFyZ2V0IHx8IGVsLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIlVuZXhwZWN0ZWQgbWl4ZWQgdXNhZ2Ugb2YgZGlmZmVyZW50IHNsb3Qgc3ludGF4ZXMuXCIsIGVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwucGFyZW50ICYmICFtYXliZUNvbXBvbmVudChlbC5wYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiPHRlbXBsYXRlIHYtc2xvdD4gY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSByb290IGxldmVsIGluc2lkZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0aGUgcmVjZWl2aW5nIGNvbXBvbmVudFwiLCBlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIF9hID0gZ2V0U2xvdE5hbWUoc2xvdEJpbmRpbmcpLCBuYW1lXzIgPSBfYS5uYW1lLCBkeW5hbWljID0gX2EuZHluYW1pYztcbiAgICAgICAgICAgICAgICBlbC5zbG90VGFyZ2V0ID0gbmFtZV8yO1xuICAgICAgICAgICAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gZHluYW1pYztcbiAgICAgICAgICAgICAgICBlbC5zbG90U2NvcGUgPSBzbG90QmluZGluZy52YWx1ZSB8fCBlbXB0eVNsb3RTY29wZVRva2VuOyAvLyBmb3JjZSBpdCBpbnRvIGEgc2NvcGVkIHNsb3QgZm9yIHBlcmZcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHYtc2xvdCBvbiBjb21wb25lbnQsIGRlbm90ZXMgZGVmYXVsdCBzbG90XG4gICAgICAgICAgICB2Y
13835XIgc2xvdEJpbmRpbmcgPSBnZXRBbmRSZW1vdmVBdHRyQnlSZWdleChlbCwgc2xvdFJFKTtcbiAgICAgICAgICAgIGlmIChzbG90QmluZGluZykge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbWF5YmVDb21wb25lbnQoZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwidi1zbG90IGNhbiBvbmx5IGJlIHVzZWQgb24gY29tcG9uZW50cyBvciA8dGVtcGxhdGU+LlwiLCBzbG90QmluZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsLnNsb3RTY29wZSB8fCBlbC5zbG90VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuKFwiVW5leHBlY3RlZCBtaXhlZCB1c2FnZSBvZiBkaWZmZXJlbnQgc2xvdCBzeW50YXhlcy5cIiwgZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC5zY29wZWRTbG90cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcIlRvIGF2b2lkIHNjb3BlIGFtYmlndWl0eSwgdGhlIGRlZmF1bHQgc2xvdCBzaG91bGQgYWxzbyB1c2UgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPHRlbXBsYXRlPiBzeW50YXggd2hlbiB0aGVyZSBhcmUgb3RoZXIgbmFtZWQgc2xvdHMuXCIsIHNsb3RCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIGNvbXBvbmVudCdzIGNoaWxkcmVuIHRvIGl0cyBkZWZhdWx0IHNsb3RcbiAgICAgICAgICAgICAgICB2Y
13835XIgc2xvdHMgPSBlbC5zY29wZWRTbG90cyB8fCAoZWwuc2NvcGVkU2xvdHMgPSB7fSk7XG4gICAgICAgICAgICAgICAgdmFyIF9iID0gZ2V0U2xvdE5hbWUoc2xvdEJpbmRpbmcpLCBuYW1lXzMgPSBfYi5uYW1lLCBkeW5hbWljID0gX2IuZHluYW1pYztcbiAgICAgICAgICAgICAgICB2YXIgc2xvdENvbnRhaW5lcl8xID0gKHNsb3RzW25hbWVfM10gPSBjcmVhdGVBU1RFbGVtZW50KCd0ZW1wbGF0ZScsIFtdLCBlbCkpO1xuICAgICAgICAgICAgICAgIHNsb3RDb250YWluZXJfMS5zbG90VGFyZ2V0ID0gbmFtZV8zO1xuICAgICAgICAgICAgICAgIHNsb3RDb250YWluZXJfMS5zbG90VGFyZ2V0RHluYW1pYyA9IGR5bmFtaWM7XG4gICAgICAgICAgICAgICAgc2xvdENvbnRhaW5lcl8xLmNoaWxkcmVuID0gZWwuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYy5zbG90U2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucGFyZW50ID0gc2xvdENvbnRhaW5lcl8xO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzbG90Q29udGFpbmVyXzEuc2xvdFNjb3BlID0gc2xvdEJpbmRpbmcudmFsdWUgfHwgZW1wdHlTbG90U2NvcGVUb2tlbjtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgY2hpbGRyZW4gYXMgdGhleSBhcmUgcmV0dXJuZWQgZnJvbSBzY29wZWRTbG90cyBub3dcbiAgICAgICAgICAgICAgICBlbC5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgZWwgbm9uLXBsYWluIHNvIGRhdGEgZ2V0cyBnZW5lcmF0ZWRcbiAgICAgICAgICAgICAgICBlbC5wbGFpbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0U2xvdE5hbWUoYmluZGluZykge1xuICAgIHZhciBuYW1lID0gYmluZGluZy5uYW1lLnJlcGxhY2Uoc2xvdFJFLCAnJyk7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIGlmIChiaW5kaW5nLm5hbWVbMF0gIT09ICcjJykge1xuICAgICAgICAgICAgbmFtZSA9ICdkZWZhdWx0JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuKFwidi1zbG90IHNob3J0aGFuZCBzeW50YXggcmVxdWlyZXMgYSBzbG90IG5hbWUuXCIsIGJpbmRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkeW5hbWljQXJnUkUudGVzdChuYW1lKVxuICAgICAgICA/IC8vIGR5bmFtaWMgW25hbWVdXG4gICAgICAgICAgICB7IG5hbWU6IG5hbWUuc2xpY2UoMSwgLTEpLCBkeW5hbWljOiB0cnVlIH1cbiAgICAgICAgOiAvLyBzdGF0aWMgbmFtZVxuICAgICAgICAgICAgeyBuYW1lOiBcIlxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiXCIpLCBkeW5hbWljOiBmYWxzZSB9O1xufVxuLy8gaGFuZGxlIDxzbG90Lz4gb3V0bGV0c1xuZnVuY3Rpb24gcHJvY2Vzc1Nsb3RPdXRsZXQoZWwpIHtcbiAgICBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ25hbWUnKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZWwua2V5KSB7XG4gICAgICAgICAgICB3YXJuKFwiYGtleWAgZG9lcyBub3Qgd29yayBvbiA8c2xvdD4gYmVjYXVzZSBzbG90cyBhcmUgYWJzdHJhY3Qgb3V0bGV0cyBcIiArXG4gICAgICAgICAgICAgICAgXCJhbmQgY2FuIHBvc3NpYmx5IGV4cGFuZCBpbnRvIG11bHRpcGxlIGVsZW1lbnRzLiBcIiArXG4gICAgICAgICAgICAgICAgXCJVc2UgdGhlIGtleSBvbiBhIHdyYXBwaW5nIGVsZW1lbnQgaW5zdGVhZC5cIiwgZ2V0UmF3QmluZGluZ0F0dHIoZWwsICdrZXknKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGVsKSB7XG4gICAgdmFyIGJpbmRpbmc7XG4gICAgaWYgKChiaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdpcycpKSkge1xuICAgICAgICBlbC5jb21wb25lbnQgPSBiaW5kaW5nO1xuICAgIH1cbiAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ2lubGluZS10ZW1wbGF0ZScpICE9IG51bGwpIHtcbiAgICAgICAgZWwuaW5saW5lVGVtcGxhdGUgPSB0cnVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NBdHRycyhlbCkge1xuICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICAgIHZhciBpLCBsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBzeW5jR2VuLCBpc0R5bmFtaWM7XG4gICAgZm9yIChpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIG5hbWUgPSByYXdOYW1lID0gbGlzdFtpXS5uYW1lO1xuICAgICAgICB2YWx1ZSA9IGxpc3RbaV0udmFsdWU7XG4gICAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAvLyBtYXJrIGVsZW1lbnQgYXMgZHluYW1pY1xuICAgICAgICAgICAgZWwuaGFzQmluZGluZ3MgPSB0cnVlO1xuICAgICAgICAgICAgLy8gbW9kaWZpZXJzXG4gICAgICAgICAgICBtb2RpZmllcnMgPSBwYXJzZU1vZGlmaWVycyhuYW1lLnJlcGxhY2UoZGlyUkUsICcnKSk7XG4gICAgICAgICAgICAvLyBzdXBwb3J0IC5mb28gc2hvcnRoYW5kIHN5bnRheCBmb3IgdGhlIC5wcm9wIG1vZGlmaWVyXG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShtb2RpZmllclJFLCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmluZFJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAvLyB2LWJpbmRcbiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKGJpbmRSRSwgJycpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGaWx0ZXJzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSBkeW5hbWljQXJnUkUudGVzdChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdmFsdWUud
13835HJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKFwiVGhlIHZhbHVlIGZvciBhIHYtYmluZCBleHByZXNzaW9uIGNhbm5vdCBiZSBlbXB0eS4gRm91bmQgaW4gXFxcInYtYmluZDpcIi5jb25jYXQobmFtZSwgXCJcXFwiXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnByb3AgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsaXplKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdpbm5lckh0bWwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAnaW5uZXJIVE1MJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLmNhbWVsICYmICFpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBjYW1lbGl6ZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXJzLnN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNHZW4gPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgXCIkZXZlbnRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhhbmRsZXIoZWwsIFwidXBkYXRlOlwiLmNvbmNhdChjYW1lbGl6ZShuYW1lKSksIHN5bmNHZW4sIG51bGwsIGZhbHNlLCB3YXJuLCBsaXN0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlKG5hbWUpICE9PSBjYW1lbGl6ZShuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKGVsLCBcInVwZGF0ZTpcIi5jb25jYXQoaHlwaGVuYXRlKG5hbWUpKSwgc3luY0dlbiwgbnVsbCwgZmFsc2UsIHdhcm4sIGxpc3RbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZXIgdy8gZHluYW1pYyBldmVudCBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGFuZGxlcihlbCwgXCJcXFwidXBkYXRlOlxcXCIrKFwiLmNvbmNhdChuYW1lLCBcIilcIiksIHN5bmNHZW4sIG51bGwsIGZhbHNlLCB3YXJuLCBsaXN0W2ldLCB0cnVlIC8vIGR5bmFtaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgobW9kaWZpZXJzICYmIG1vZGlmaWVycy5wcm9wKSB8fFxuICAgICAgICAgICAgICAgICAgICAoIWVsLmNvbXBvbmVudCAmJiBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsIHZhbHVlLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkQXR0cihlbCwgbmFtZSwgdmFsdWUsIGxpc3RbaV0sIGlzRHluYW1pYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob25SRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gdi1vblxuICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2Uob25SRSwgJycpO1xuICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IGR5bmFtaWNBcmdSRS50ZXN0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKGVsLCBuYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBmYWxzZSwgd2FybiwgbGlzdFtpXSwgaXNEeW5hbWljKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG5vcm1hbCBkaXJlY3RpdmVzXG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShkaXJSRSwgJycpO1xuICAgICAgICAgICAgICAgIC8vIHBhcnNlIGFyZ1xuICAgICAgICAgICAgICAgIHZhciBhcmdNYXRjaCA9IG5hbWUubWF0Y2goYXJnUkUpO1xuICAgICAgICAgICAgICAgIHZhciBhcmcgPSBhcmdNYXRjaCAmJiBhcmdNYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIC0oYXJnLmxlbmd0aCArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGR5bmFtaWNBcmdSRS50ZXN0KGFyZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZERpcmVjdGl2ZShlbCwgbmFtZSwgcmF3TmFtZSwgdmFsdWUsIGFyZywgaXNEeW5hbWljLCBtb2RpZmllcnMsIGxpc3RbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JBbGlhc01vZGVsKGVsLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gbGl0ZXJhbCBhdHRyaWJ1dGVcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IHBhcnNlVGV4dCh2YWx1ZSwgZGVsaW1pdGVycyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICB3YXJuKFwiXCIuY29uY2F0KG5hbWUsIFwiPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCI6IFwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnSW50ZXJwb2xhdGlvbiBpbnNpZGUgYXR0cmlidXRlcyBoYXMgYmVlbiByZW1vdmVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBpZD1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOmlkPVwidmFsXCI+LicsIGxpc3RbaV0pO1xuICAgICAgICAgICAgICAgI
13835H1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgbGlzdFtpXSk7XG4gICAgICAgICAgICAvLyAjNjg4NyBmaXJlZm94IGRvZXNuJ3QgdXBkYXRlIG11dGVkIHN0YXRlIGlmIHNldCB2aWEgYXR0cmlidXRlXG4gICAgICAgICAgICAvLyBldmVuIGltbWVkaWF0ZWx5IGFmdGVyIGVsZW1lbnQgY3JlYXRpb25cbiAgICAgICAgICAgIGlmICghZWwuY29tcG9uZW50ICYmXG4gICAgICAgICAgICAgICAgbmFtZSA9PT0gJ211dGVkJyAmJlxuICAgICAgICAgICAgICAgIHBsYXRmb3JtTXVzdFVzZVByb3AoZWwudGFnLCBlbC5hdHRyc01hcC50eXBlLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgIGFkZFByb3AoZWwsIG5hbWUsICd0cnVlJywgbGlzdFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0luRm9yKGVsKSB7XG4gICAgdmFyIHBhcmVudCA9IGVsO1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudC5mb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gcGFyc2VNb2RpZmllcnMobmFtZSkge1xuICAgIHZhciBtYXRjaCA9IG5hbWUubWF0Y2gobW9kaWZpZXJSRSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHZhciByZXRfMSA9IHt9O1xuICAgICAgICBtYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgICByZXRfMVttLnNsaWNlKDEpXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmV0XzE7XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZUF0dHJzTWFwKGF0dHJzKSB7XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXR0cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG1hcFthdHRyc1tpXS5uYW1lXSAmJiAhaXNJRSAmJiAhaXNFZGdlKSB7XG4gICAgICAgICAgICB3YXJuKCdkdXBsaWNhdGUgYXR0cmlidXRlOiAnICsgYXR0cnNbaV0ubmFtZSwgYXR0cnNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIG1hcFthdHRyc1tpXS5uYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xufVxuLy8gZm9yIHNjcmlwdCAoZS5nLiB0eXBlPVwieC90ZW1wbGF0ZVwiKSBvciBzdHlsZSwgZG8gbm90IGRlY29kZSBjb250ZW50XG5mdW5jdGlvbiBpc1RleHRUYWcoZWwpIHtcbiAgICByZXR1cm4gZWwudGFnID09PSAnc2NyaXB0JyB8fCBlbC50YWcgPT09ICdzdHlsZSc7XG59XG5mdW5jdGlvbiBpc0ZvcmJpZGRlblRhZyhlbCkge1xuICAgIHJldHVybiAoZWwudGFnID09PSAnc3R5bGUnIHx8XG4gICAgICAgIChlbC50YWcgPT09ICdzY3JpcHQnICYmXG4gICAgICAgICAgICAoIWVsLmF0dHJzTWFwLnR5cGUgfHwgZWwuYXR0cnNNYXAudHlwZSA9PT0gJ3RleHQvamF2YXNjcmlwdCcpKSk7XG59XG52YXIgaWVOU0J1ZyA9IC9eeG1sbnM6TlNcXGQrLztcbnZhciBpZU5TUHJlZml4ID0gL15OU1xcZCs6Lztcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBndWFyZElFU1ZHQnVnKGF0dHJzKSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHIgPSBhdHRyc1tpXTtcbiAgICAgICAgaWYgKCFpZU5TQnVnLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICAgICAgYXR0ci5uYW1lID0gYXR0ci5uYW1lLnJlcGxhY2UoaWVOU1ByZWZpeCwgJycpO1xuICAgICAgICAgICAgcmVzLnB1c2goYXR0cik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGNoZWNrRm9yQWxpYXNNb2RlbChlbCwgdmFsdWUpIHtcbiAgICB2YXIgX2VsID0gZWw7XG4gICAgd2hpbGUgKF9lbCkge1xuICAgICAgICBpZiAoX2VsLmZvciAmJiBfZWwuYWxpYXMgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICB3YXJuKFwiPFwiLmNvbmNhdChlbC50YWcsIFwiIHYtbW9kZWw9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIj46IFwiKSArXG4gICAgICAgICAgICAgICAgXCJZb3UgYXJlIGJpbmRpbmcgdi1tb2RlbCBkaXJlY3RseSB0byBhIHYtZm9yIGl0ZXJhdGlvbiBhbGlhcy4gXCIgK1xuICAgICAgICAgICAgICAgIFwiVGhpcyB3aWxsIG5vdCBiZSBhYmxlIHRvIG1vZGlmeSB0aGUgdi1mb3Igc291cmNlIGFycmF5IGJlY2F1c2UgXCIgK1xuICAgICAgICAgICAgICAgIFwid3JpdGluZyB0byB0aGUgYWxpYXMgaXMgbGlrZSBtb2RpZnlpbmcgYSBmdW5jdGlvbiBsb2NhbCB2YXJpYWJsZS4gXCIgK1xuICAgICAgICAgICAgICAgIFwiQ29uc2lkZXIgdXNpbmcgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgdXNlIHYtbW9kZWwgb24gYW4gb2JqZWN0IHByb3BlcnR5IGluc3RlYWQuXCIsIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ10pO1xuICAgICAgICB9XG4gICAgICAgIF9lbCA9IF9lbC5wYXJlbnQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEV4cGFuZCBpbnB1dFt2LW1vZGVsXSB3aXRoIGR5bmFtaWMgdHlwZSBiaW5kaW5ncyBpbnRvIHYtaWYtZWxzZSBjaGFpbnNcbiAqIFR1cm4gdGhpczpcbiAqICAgPGlucHV0IHYtbW9kZWw9XCJkYXRhW3R5cGVdXCIgOnR5cGU9XCJ0eXBlXCI+XG4gKiBpbnRvIHRoaXM6XG4gKiAgIDxpbnB1dCB2LWlmPVwidHlwZSA9PT0gJ2NoZWNrYm94J1wiIHR5cGU9XCJjaGVja2JveFwiIHYtbW9kZWw9XCJkYXRhW3R5cGVdXCI+XG4gKiAgIDxpbnB1dCB2LWVsc2UtaWY9XCJ0eXBlID09PSAncmFkaW8nXCIgdHlwZT1cInJhZGlvXCIgdi1tb2RlbD1cImRhdGFbdHlwZV1cIj5cbiAqICAgPGlucHV0IHYtZWxzZSA6dHlwZT1cInR5cGVcIiB2LW1vZGVsPVwiZGF0YVt0eXBlXVwiPlxuICovXG5mdW5jdGlvbiBwcmVUcmFuc2Zvcm1Ob2RlKGVsLCBvcHRpb25zKSB7XG4gICAgaWYgKGVsLnRhZyA9PT0gJ2lucHV0Jykge1xuICAgICAgICB2Y
13835XIgbWFwID0gZWwuYXR0cnNNYXA7XG4gICAgICAgIGlmICghbWFwWyd2LW1vZGVsJ10pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZUJpbmRpbmcgPSB2b2lkIDA7XG4gICAgICAgIGlmIChtYXBbJzp0eXBlJ10gfHwgbWFwWyd2LWJpbmQ6dHlwZSddKSB7XG4gICAgICAgICAgICB0eXBlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndHlwZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWFwLnR5cGUgJiYgIXR5cGVCaW5kaW5nICYmIG1hcFsndi1iaW5kJ10pIHtcbiAgICAgICAgICAgIHR5cGVCaW5kaW5nID0gXCIoXCIuY29uY2F0KG1hcFsndi1iaW5kJ10sIFwiKS50eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlQmluZGluZykge1xuICAgICAgICAgICAgdmFyIGlmQ29uZGl0aW9uID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtaWYnLCB0cnVlKTtcbiAgICAgICAgICAgIHZhciBpZkNvbmRpdGlvbkV4dHJhID0gaWZDb25kaXRpb24gPyBcIiYmKFwiLmNvbmNhdChpZkNvbmRpdGlvbiwgXCIpXCIpIDogXCJcIjtcbiAgICAgICAgICAgIHZhciBoYXNFbHNlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScsIHRydWUpICE9IG51bGw7XG4gICAgICAgICAgICB2YXIgZWxzZUlmQ29uZGl0aW9uID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZS1pZicsIHRydWUpO1xuICAgICAgICAgICAgLy8gMS4gY2hlY2tib3hcbiAgICAgICAgICAgIHZhciBicmFuY2gwID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgICAgIC8vIHByb2Nlc3MgZm9yIG9uIHRoZSBtYWluIG5vZGVcbiAgICAgICAgICAgIHByb2Nlc3NGb3IoYnJhbmNoMCk7XG4gICAgICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDAsICd0eXBlJywgJ2NoZWNrYm94Jyk7XG4gICAgICAgICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gwLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyYW5jaDAucHJvY2Vzc2VkID0gdHJ1ZTsgLy8gcHJldmVudCBpdCBmcm9tIGRvdWJsZS1wcm9jZXNzZWRcbiAgICAgICAgICAgIGJyYW5jaDAuaWYgPSBcIihcIi5jb25jYXQodHlwZUJpbmRpbmcsIFwiKT09PSdjaGVja2JveCdcIikgKyBpZkNvbmRpdGlvbkV4dHJhO1xuICAgICAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgICAgICAgIGV4cDogYnJhbmNoMC5pZixcbiAgICAgICAgICAgICAgICBibG9jazogYnJhbmNoMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAyLiBhZGQgcmFkaW8gZWxzZS1pZiBjb25kaXRpb25cbiAgICAgICAgICAgIHZhciBicmFuY2gxID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgICAgIGdldEFuZFJlbW92ZUF0dHIoYnJhbmNoMSwgJ3YtZm9yJywgdHJ1ZSk7XG4gICAgICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDEsICd0eXBlJywgJ3JhZGlvJyk7XG4gICAgICAgICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gxLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGFkZElmQ29uZGl0aW9uKGJyYW5jaDAsIHtcbiAgICAgICAgICAgICAgICBleHA6IFwiKFwiLmNvbmNhdCh0eXBlQmluZGluZywgXCIpPT09J3JhZGlvJ1wiKSArIGlmQ29uZGl0aW9uRXh0cmEsXG4gICAgICAgICAgICAgICAgYmxvY2s6IGJyYW5jaDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gMy4gb3RoZXJcbiAgICAgICAgICAgIHZhciBicmFuY2gyID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgICAgIGdldEFuZFJlbW92ZUF0dHIoYnJhbmNoMiwgJ3YtZm9yJywgdHJ1ZSk7XG4gICAgICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDIsICc6dHlwZScsIHR5cGVCaW5kaW5nKTtcbiAgICAgICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgICAgICAgIGV4cDogaWZDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgYmxvY2s6IGJyYW5jaDJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGhhc0Vsc2UpIHtcbiAgICAgICAgICAgICAgICBicmFuY2gwLmVsc2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZWxzZUlmQ29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgYnJhbmNoMC5lbHNlaWYgPSBlbHNlSWZDb25kaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYnJhbmNoMDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNsb25lQVNURWxlbWVudChlbCkge1xuICAgIHJldHVybiBjcmVhdGVBU1RFbGVtZW50KGVsLnRhZywgZWwuYXR0cnNMaXN0LnNsaWNlKCksIGVsLnBhcmVudCk7XG59XG52YXIgbW9kZWwgPSB7XG4gICAgcHJlVHJhbnNmb3JtTm9kZTogcHJlVHJhbnNmb3JtTm9kZVxufTtcblxudmFyIG1vZHVsZXMgPSBba2xhc3MsIHN0eWxlLCBtb2RlbF07XG5cbmZ1bmN0aW9uIHRleHQoZWwsIGRpcikge1xuICAgIGlmIChkaXIudmFsdWUpIHtcbiAgICAgICAgYWRkUHJvcChlbCwgJ3RleHRDb250ZW50JywgXCJfcyhcIi5jb25jYXQoZGlyLnZhbHVlLCBcIilcIiksIGRpcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBodG1sKGVsLCBkaXIpIHtcbiAgICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgICAgIGFkZFByb3AoZWwsICdpbm5lckhUTUwnLCBcIl9zKFwiLmNvbmNhdChkaXIudmFsdWUsIFwiKVwiKSwgZGlyKTtcbiAgICB9XG59XG5cbnZhciBkaXJlY3RpdmVzID0ge1xuICAgIG1vZGVsOiBtb2RlbCQxLFxuICAgIHRleHQ6IHRleHQsXG4gICAgaHRtbDogaHRtbFxufTtcblxudmFyIGJhc2VPcHRpb25zID0ge1xuICAgIGV4cGVjdEhUTUw6IHRydWUsXG4gICAgbW9kdWxlczogbW9k
13835dWxlcyxcbiAgICBkaXJlY3RpdmVzOiBkaXJlY3RpdmVzLFxuICAgIGlzUHJlVGFnOiBpc1ByZVRhZyxcbiAgICBpc1VuYXJ5VGFnOiBpc1VuYXJ5VGFnLFxuICAgIG11c3RVc2VQcm9wOiBtdXN0VXNlUHJvcCxcbiAgICBjYW5CZUxlZnRPcGVuVGFnOiBjYW5CZUxlZnRPcGVuVGFnLFxuICAgIGlzUmVzZXJ2ZWRUYWc6IGlzUmVzZXJ2ZWRUYWcsXG4gICAgZ2V0VGFnTmFtZXNwYWNlOiBnZXRUYWdOYW1lc3BhY2UsXG4gICAgc3RhdGljS2V5czogZ2VuU3RhdGljS2V5cyQxKG1vZHVsZXMpXG59O1xuXG52YXIgaXNTdGF0aWNLZXk7XG52YXIgaXNQbGF0Zm9ybVJlc2VydmVkVGFnO1xudmFyIGdlblN0YXRpY0tleXNDYWNoZWQgPSBjYWNoZWQoZ2VuU3RhdGljS2V5cyk7XG4vKipcbiAqIEdvYWwgb2YgdGhlIG9wdGltaXplcjogd2FsayB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIEFTVCB0cmVlXG4gKiBhbmQgZGV0ZWN0IHN1Yi10cmVlcyB0aGF0IGFyZSBwdXJlbHkgc3RhdGljLCBpLmUuIHBhcnRzIG9mXG4gKiB0aGUgRE9NIHRoYXQgbmV2ZXIgbmVlZHMgdG8gY2hhbmdlLlxuICpcbiAqIE9uY2Ugd2UgZGV0ZWN0IHRoZXNlIHN1Yi10cmVlcywgd2UgY2FuOlxuICpcbiAqIDEuIEhvaXN0IHRoZW0gaW50byBjb25zdGFudHMsIHNvIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG9cbiAqICAgIGNyZWF0ZSBmcmVzaCBub2RlcyBmb3IgdGhlbSBvbiBlYWNoIHJlLXJlbmRlcjtcbiAqIDIuIENvbXBsZXRlbHkgc2tpcCB0aGVtIGluIHRoZSBwYXRjaGluZyBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiBvcHRpbWl6ZShyb290LCBvcHRpb25zKSB7XG4gICAgaWYgKCFyb290KVxuICAgICAgICByZXR1cm47XG4gICAgaXNTdGF0aWNLZXkgPSBnZW5TdGF0aWNLZXlzQ2FjaGVkKG9wdGlvbnMuc3RhdGljS2V5cyB8fCAnJyk7XG4gICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICAgIC8vIGZpcnN0IHBhc3M6IG1hcmsgYWxsIG5vbi1zdGF0aWMgbm9kZXMuXG4gICAgbWFya1N0YXRpYyhyb290KTtcbiAgICAvLyBzZWNvbmQgcGFzczogbWFyayBzdGF0aWMgcm9vdHMuXG4gICAgbWFya1N0YXRpY1Jvb3RzKHJvb3QsIGZhbHNlKTtcbn1cbmZ1bmN0aW9uIGdlblN0YXRpY0tleXMoa2V5cykge1xuICAgIHJldHVybiBtYWtlTWFwKCd0eXBlLHRhZyxhdHRyc0xpc3QsYXR0cnNNYXAscGxhaW4scGFyZW50LGNoaWxkcmVuLGF0dHJzLHN0YXJ0LGVuZCxyYXdBdHRyc01hcCcgK1xuICAgICAgICAoa2V5cyA/ICcsJyArIGtleXMgOiAnJykpO1xufVxuZnVuY3Rpb24gbWFya1N0YXRpYyhub2RlKSB7XG4gICAgbm9kZS5zdGF0aWMgPSBpc1N0YXRpYyhub2RlKTtcbiAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICAgIC8vIGRvIG5vdCBtYWtlIGNvbXBvbmVudCBzbG90IGNvbnRlbnQgc3RhdGljLiB0aGlzIGF2b2lkc1xuICAgICAgICAvLyAxLiBjb21wb25lbnRzIG5vdCBhYmxlIHRvIG11dGF0ZSBzbG90IG5vZGVzXG4gICAgICAgIC8vIDIuIHN0YXRpYyBzbG90IGNvbnRlbnQgZmFpbHMgZm9yIGhvdC1yZWxvYWRpbmdcbiAgICAgICAgaWYgKCFpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcobm9kZS50YWcpICYmXG4gICAgICAgICAgICBub2RlLnRhZyAhPT0gJ3Nsb3QnICYmXG4gICAgICAgICAgICBub2RlLmF0dHJzTWFwWydpbmxpbmUtdGVtcGxhdGUnXSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIG1hcmtTdGF0aWMoY2hpbGQpO1xuICAgICAgICAgICAgaWYgKCFjaGlsZC5zdGF0aWMpIHtcbiAgICAgICAgICAgICAgICBub2RlLnN0YXRpYyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2Y
13835XIgYmxvY2sgPSBub2RlLmlmQ29uZGl0aW9uc1tpXS5ibG9jaztcbiAgICAgICAgICAgICAgICBtYXJrU3RhdGljKGJsb2NrKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrLnN0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnN0YXRpYyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIG1hcmtTdGF0aWNSb290cyhub2RlLCBpc0luRm9yKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgICBpZiAobm9kZS5zdGF0aWMgfHwgbm9kZS5vbmNlKSB7XG4gICAgICAgICAgICBub2RlLnN0YXRpY0luRm9yID0gaXNJbkZvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3IgYSBub2RlIHRvIHF1YWxpZnkgYXMgYSBzdGF0aWMgcm9vdCwgaXQgc2hvdWxkIGhhdmUgY2hpbGRyZW4gdGhhdFxuICAgICAgICAvLyBhcmUgbm90IGp1c3Qgc3RhdGljIHRleHQuIE90aGVyd2lzZSB0aGUgY29zdCBvZiBob2lzdGluZyBvdXQgd2lsbFxuICAgICAgICAvLyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgYW5kIGl0J3MgYmV0dGVyIG9mZiB0byBqdXN0IGFsd2F5cyByZW5kZXIgaXQgZnJlc2guXG4gICAgICAgIGlmIChub2RlLnN0YXRpYyAmJlxuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgICAgICAgICEobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgbm9kZS5jaGlsZHJlblswXS50eXBlID09PSAzKSkge1xuICAgICAgICAgICAgbm9kZS5zdGF0aWNSb290ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuc3RhdGljUm9vdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuY2hpbGRyZW5baV0sIGlzSW5Gb3IgfHwgISFub2RlLmZvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaWZDb25kaXRpb25zKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IG5vZGUuaWZDb25kaXRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmlmQ29uZGl0aW9uc1tpXS5ibG9jaywgaXNJbkZvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBpc1N0YXRpYyhub2RlKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMikge1xuICAgICAgICAvLyBleHByZXNzaW9uXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMykge1xuICAgICAgICAvLyB0ZXh0XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gISEobm9kZS5wcmUgfHxcbiAgICAgICAgKCFub2RlLmhhc0JpbmRpbmdzICYmIC8vIG5vIGR5bmFtaWMgYmluZGluZ3NcbiAgICAgICAgICAgICFub2RlLmlmICYmXG4gICAgICAgICAgICAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXG4gICAgICAgICAgICAhaXNCdWlsdEluVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBidWlsdC1pblxuICAgICAgICAgICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBjb21wb25lbnRcbiAgICAgICAgICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMobm9kZSkuZXZlcnkoaXNTdGF0aWNLZXkpKSk7XG59XG5mdW5jdGlvbiBpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSB7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50KSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcbiAgICAgICAgaWYgKG5vZGUudGFnICE9PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBmbkV4cFJFID0gL14oW1xcdyRfXSt8XFwoW14pXSo/XFwpKVxccyo9PnxeZnVuY3Rpb24oPzpcXHMrW1xcdyRdKyk/XFxzKlxcKC87XG52YXIgZm5JbnZva2VSRSA9IC9cXChbXildKj9cXCk7KiQvO1xudmFyIHNpbXBsZVBhdGhSRSA9IC9eW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnW14nXSo/J118XFxbXCJbXlwiXSo/XCJdfFxcW1xcZCtdfFxcW1tBLVphLXpfJF1bXFx3JF0qXSkqJC87XG4vLyBLZXlib2FyZEV2ZW50LmtleUNvZGUgYWxpYXNlc1xudmFyIGtleUNvZGVzID0ge1xuICAgIGVzYzogMjcsXG4gICAgdGFiOiA5LFxuICAgIGVudGVyOiAxMyxcbiAgICBzcGFjZTogMzIsXG4gICAgdXA6IDM4LFxuICAgIGxlZnQ6IDM3LFxuICAgIHJpZ2h0OiAzOSxcbiAgICBkb3duOiA0MCxcbiAgICBkZWxldGU6IFs4LCA0Nl1cbn07XG4vLyBLZXlib2FyZEV2ZW50LmtleSBhbGlhc2VzXG52YXIga2V5TmFtZXMgPSB7XG4gICAgLy8gIzc4ODA6IElFMTEgYW5kIEVkZ2UgdXNlIGBFc2NgIGZvciBFc2NhcGUga2V5IG5hbWUuXG4gICAgZXNjOiBbJ0VzYycsICdFc2NhcGUnXSxcbiAgICB0YWI6ICdUYWInLFxuICAgIGVudGVyOiAnRW50ZXInLFxuICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYFNwYWNlYmFyYCBmb3IgU3BhY2Uga2V5IG5hbWUuXG4gICAgc3BhY2U6IFsnICcsICdTcGFjZWJhciddLFxuICAgIC8vICM3ODA2OiBJRTExIHVzZXMga2V5IG5hbWVzIHdpdGhvdXQgYEFycm93YCBwcmVmaXggZm9yIGFycm93IGtleXMuXG4gICAgdXA6IFsnVXAnLCAnQXJyb3dVcCddLFxuICAgIGxlZnQ6IFsnTGVmdCcsICdBcnJvd0xlZnQnXSxcbiAgICByaWdodDogWydSaWdodCcsICdBcnJvd1JpZ2h0J10sXG4gICAgZG93bjogWydEb3duJywgJ0Fycm93RG93biddLFxuICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYERlbGAgZm9yIERlbGV0ZSBrZXkgbmFtZS5cbiAgICBkZWxldGU6IFsnQmFja3NwYWNlJywgJ0RlbGV0ZScsICdEZWwnXVxufTtcbi8vICM0ODY4OiBtb2RpZmllcnMgdGhhdCBwcmV2ZW50IHRoZSBleGVjdXRpb24gb2YgdGhlIGxpc3RlbmVyXG4vLyBuZWVkIHRvIGV4cGxpY2l0bHkgcmV0dXJuIG51bGwgc28gdGhhdCB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVtb3ZlXG4vLyB0aGUgbGlzdGVuZXIgZm9yIC5vbmNlXG52YXIgZ2VuR3VhcmQgPSBmdW5jdGlvbiAoY29uZGl0
13835aW9uKSB7IHJldHVybiBcImlmKFwiLmNvbmNhdChjb25kaXRpb24sIFwiKXJldHVybiBudWxsO1wiKTsgfTtcbnZhciBtb2RpZmllckNvZGUgPSB7XG4gICAgc3RvcDogJyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsnLFxuICAgIHByZXZlbnQ6ICckZXZlbnQucHJldmVudERlZmF1bHQoKTsnLFxuICAgIHNlbGY6IGdlbkd1YXJkKFwiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXRcIiksXG4gICAgY3RybDogZ2VuR3VhcmQoXCIhJGV2ZW50LmN0cmxLZXlcIiksXG4gICAgc2hpZnQ6IGdlbkd1YXJkKFwiISRldmVudC5zaGlmdEtleVwiKSxcbiAgICBhbHQ6IGdlbkd1YXJkKFwiISRldmVudC5hbHRLZXlcIiksXG4gICAgbWV0YTogZ2VuR3VhcmQoXCIhJGV2ZW50Lm1ldGFLZXlcIiksXG4gICAgbGVmdDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcbiAgICBtaWRkbGU6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDFcIiksXG4gICAgcmlnaHQ6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDJcIilcbn07XG5mdW5jdGlvbiBnZW5IYW5kbGVycyhldmVudHMsIGlzTmF0aXZlKSB7XG4gICAgdmFyIHByZWZpeCA9IGlzTmF0aXZlID8gJ25hdGl2ZU9uOicgOiAnb246JztcbiAgICB2YXIgc3RhdGljSGFuZGxlcnMgPSBcIlwiO1xuICAgIHZhciBkeW5hbWljSGFuZGxlcnMgPSBcIlwiO1xuICAgIGZvciAodmFyIG5hbWVfMSBpbiBldmVudHMpIHtcbiAgICAgICAgdmFyIGhhbmRsZXJDb2RlID0gZ2VuSGFuZGxlcihldmVudHNbbmFtZV8xXSk7XG4gICAgICAgIC8vQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBpZiAoZXZlbnRzW25hbWVfMV0gJiYgZXZlbnRzW25hbWVfMV0uZHluYW1pYykge1xuICAgICAgICAgICAgZHluYW1pY0hhbmRsZXJzICs9IFwiXCIuY29uY2F0KG5hbWVfMSwgXCIsXCIpLmNvbmNhdChoYW5kbGVyQ29kZSwgXCIsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhdGljSGFuZGxlcnMgKz0gXCJcXFwiXCIuY29uY2F0KG5hbWVfMSwgXCJcXFwiOlwiKS5jb25jYXQoaGFuZGxlckNvZGUsIFwiLFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWNIYW5kbGVycyA9IFwie1wiLmNvbmNhdChzdGF0aWNIYW5kbGVycy5zbGljZSgwLCAtMSksIFwifVwiKTtcbiAgICBpZiAoZHluYW1pY0hhbmRsZXJzKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBcIl9kKFwiLmNvbmNhdChzdGF0aWNIYW5kbGVycywgXCIsW1wiKS5jb25jYXQoZHluYW1pY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSwgXCJdKVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBzdGF0aWNIYW5kbGVycztcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5IYW5kbGVyKGhhbmRsZXIpIHtcbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuICdmdW5jdGlvbigpe30nO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgICByZXR1cm4gXCJbXCIuY29uY2F0KGhhbmRsZXIubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBnZW5IYW5kbGVyKGhhbmRsZXIpOyB9KS5qb2luKCcsJyksIFwiXVwiKTtcbiAgICB9XG4gICAgdmFyIGlzTWV0aG9kUGF0aCA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xuICAgIHZhciBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IGZuRXhwUkUudGVzdChoYW5kbGVyLnZhbHVlKTtcbiAgICB2YXIgaXNGdW5jdGlvbkludm9jYXRpb24gPSBzaW1wbGVQYXRoUkUudGVzdChoYW5kbGVyLnZhbHVlLnJlcGxhY2UoZm5JbnZva2VSRSwgJycpKTtcbiAgICBpZiAoIWhhbmRsZXIubW9kaWZpZXJzKSB7XG4gICAgICAgIGlmIChpc01ldGhvZFBhdGggfHwgaXNGdW5jdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImZ1bmN0aW9uKCRldmVudCl7XCIuY29uY2F0KGlzRnVuY3Rpb25JbnZvY2F0aW9uID8gXCJyZXR1cm4gXCIuY29uY2F0KGhhbmRsZXIudmFsdWUpIDogaGFuZGxlci52YWx1ZSwgXCJ9XCIpOyAvLyBpbmxpbmUgc3RhdGVtZW50XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2Y
13835XIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgZ2VuTW9kaWZpZXJDb2RlID0gJyc7XG4gICAgICAgIHZhciBrZXlzID0gW107XG4gICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKG1vZGlmaWVyQ29kZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IG1vZGlmaWVyQ29kZVtrZXldO1xuICAgICAgICAgICAgICAgIC8vIGxlZnQvcmlnaHRcbiAgICAgICAgICAgICAgICBpZiAoa2V5Q29kZXNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdleGFjdCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9kaWZpZXJzXzEgPSBoYW5kbGVyLm1vZGlmaWVycztcbiAgICAgICAgICAgICAgICBnZW5Nb2RpZmllckNvZGUgKz0gZ2VuR3VhcmQoWydjdHJsJywgJ3NoaWZ0JywgJ2FsdCcsICdtZXRhJ11cbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5TW9kaWZpZXIpIHsgcmV0dXJuICFtb2RpZmllcnNfMVtrZXlNb2RpZmllcl07IH0pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGtleU1vZGlmaWVyKSB7IHJldHVybiBcIiRldmVudC5cIi5jb25jYXQoa2V5TW9kaWZpZXIsIFwiS2V5XCIpOyB9KVxuICAgICAgICAgICAgICAgICAgICAuam9pbignfHwnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGhhbmRsZXIubW9kaWZpZXJzKSB7XG4gICAgICAgICAgICBfbG9vcF8xKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb2RlICs9IGdlbktleUZpbHRlcihrZXlzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYWtlIHN1cmUgbW9kaWZpZXJzIGxpa2UgcHJldmVudCBhbmQgc3RvcCBnZXQgZXhlY3V0ZWQgYWZ0ZXIga2V5IGZpbHRlcmluZ1xuICAgICAgICBpZiAoZ2VuTW9kaWZpZXJDb2RlKSB7XG4gICAgICAgICAgICBjb2RlICs9IGdlbk1vZGlmaWVyQ29kZTtcbiAgICAgICAgfVxuICAgICAgICB2Y
13835XIgaGFuZGxlckNvZGUgPSBpc01ldGhvZFBhdGhcbiAgICAgICAgICAgID8gXCJyZXR1cm4gXCIuY29uY2F0KGhhbmRsZXIudmFsdWUsIFwiLmFwcGx5KG51bGwsIGFyZ3VtZW50cylcIilcbiAgICAgICAgICAgIDogaXNGdW5jdGlvbkV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IFwicmV0dXJuIChcIi5jb25jYXQoaGFuZGxlci52YWx1ZSwgXCIpLmFwcGx5KG51bGwsIGFyZ3VtZW50cylcIilcbiAgICAgICAgICAgICAgICA6IGlzRnVuY3Rpb25JbnZvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgID8gXCJyZXR1cm4gXCIuY29uY2F0KGhhbmRsZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogaGFuZGxlci52YWx1ZTtcbiAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb24oJGV2ZW50KXtcIi5jb25jYXQoY29kZSkuY29uY2F0KGhhbmRsZXJDb2RlLCBcIn1cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2VuS2V5RmlsdGVyKGtleXMpIHtcbiAgICByZXR1cm4gKFxuICAgIC8vIG1ha2Ugc3VyZSB0aGUga2V5IGZpbHRlcnMgb25seSBhcHBseSB0byBLZXlib2FyZEV2ZW50c1xuICAgIC8vICM5NDQxOiBjYW4ndCB1c2UgJ2tleUNvZGUnIGluICRldmVudCBiZWNhdXNlIENocm9tZSBhdXRvZmlsbCBmaXJlcyBmYWtlXG4gICAgLy8ga2V5IGV2ZW50cyB0aGF0IGRvIG5vdCBoYXZlIGtleUNvZGUgcHJvcGVydHkuLi5cbiAgICBcImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIgK1xuICAgICAgICBcIlwiLmNvbmNhdChrZXlzLm1hcChnZW5GaWx0ZXJDb2RlKS5qb2luKCcmJicpLCBcIilyZXR1cm4gbnVsbDtcIikpO1xufVxuZnVuY3Rpb24gZ2VuRmlsdGVyQ29kZShrZXkpIHtcbiAgICB2YXIga2V5VmFsID0gcGFyc2VJbnQoa2V5LCAxMCk7XG4gICAgaWYgKGtleVZhbCkge1xuICAgICAgICByZXR1cm4gXCIkZXZlbnQua2V5Q29kZSE9PVwiLmNvbmNhdChrZXlWYWwpO1xuICAgIH1cbiAgICB2YXIga2V5Q29kZSA9IGtleUNvZGVzW2tleV07XG4gICAgdmFyIGtleU5hbWUgPSBrZXlOYW1lc1trZXldO1xuICAgIHJldHVybiAoXCJfaygkZXZlbnQua2V5Q29kZSxcIiArXG4gICAgICAgIFwiXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGtleSksIFwiLFwiKSArXG4gICAgICAgIFwiXCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGtleUNvZGUpLCBcIixcIikgK1xuICAgICAgICBcIiRldmVudC5rZXksXCIgK1xuICAgICAgICBcIlwiLmNvbmNhdChKU09OLnN0cmluZ2lmeShrZXlOYW1lKSkgK1xuICAgICAgICBcIilcIik7XG59XG5cbmZ1bmN0aW9uIG9uKGVsLCBkaXIpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBkaXIubW9kaWZpZXJzKSB7XG4gICAgICAgIHdhcm4kMihcInYtb24gd2l0aG91dCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IG1vZGlmaWVycy5cIik7XG4gICAgfVxuICAgIGVsLndyYXBMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoY29kZSkgeyByZXR1cm4gXCJfZyhcIi5jb25jYXQoY29kZSwgXCIsXCIpLmNvbmNhdChkaXIudmFsdWUsIFwiKVwiKTsgfTtcbn1cblxuZnVuY3Rpb24gYmluZChlbCwgZGlyKSB7XG4gICAgZWwud3JhcERhdGEgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICByZXR1cm4gXCJfYihcIi5jb25jYXQoY29kZSwgXCIsJ1wiKS5jb25jYXQoZWwudGFnLCBcIicsXCIpLmNvbmNhdChkaXIudmFsdWUsIFwiLFwiKS5jb25jYXQoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnByb3AgPyAndHJ1ZScgOiAnZmFsc2UnKS5jb25jYXQoZGlyLm1vZGlmaWVycyAmJiBkaXIubW9kaWZpZXJzLnN5bmMgPyAnLHRydWUnIDogJycsIFwiKVwiKTtcbiAgICB9O1xufVxuXG52YXIgYmFzZURpcmVjdGl2ZXMgPSB7XG4gICAgb246IG9uLFxuICAgIGJpbmQ6IGJpbmQsXG4gICAgY2xvYWs6IG5vb3Bcbn07XG5cbnZhciBDb2RlZ2VuU3RhdGUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29kZWdlblN0YXRlKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy53YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3RyYW5zZm9ybUNvZGUnKTtcbiAgICAgICAgdGhpcy5kYXRhR2VuRm5zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdnZW5EYXRhJyk7XG4gICAgICAgIHRoaXMuZGlyZWN0aXZlcyA9IGV4dGVuZChleHRlbmQoe30sIGJhc2VEaXJlY3RpdmVzKSwgb3B0aW9ucy5kaXJlY3RpdmVzKTtcbiAgICAgICAgdmFyIGlzUmVzZXJ2ZWRUYWcgPSBvcHRpb25zLmlzUmVzZXJ2ZWRUYWcgfHwgbm87XG4gICAgICAgIHRoaXMubWF5YmVDb21wb25lbnQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgIHJldHVybiAhIWVsLmNvbXBvbmVudCB8fCAhaXNSZXNlcnZlZFRhZyhlbC50YWcpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uY2VJZCA9IDA7XG4gICAgICAgIHRoaXMuc3RhdGljUmVuZGVyRm5zID0gW107XG4gICAgICAgIHRoaXMucHJlID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBDb2RlZ2VuU3RhdGU7XG59KCkpO1xuZnVuY3Rpb24gZ2VuZXJhdGUoYXN0LCBvcHRpb25zKSB7XG4gICAgdmFyIHN0YXRlID0gbmV3IENvZGVnZW5TdGF0ZShvcHRpb25zKTtcbiAgICAvLyBmaXggIzExNDgzLCBSb290IGxldmVsIDxzY3JpcHQ+IHRhZ3Mgc2hvdWxkIG5vdCBiZSByZW5kZXJlZC5cbiAgICB2YXIgY29kZSA9IGFzdFxuICAgICAgICA/IGFzdC50YWcgPT09ICdzY3JpcHQnXG4gICAgICAgICAgICA/ICdudWxsJ1xuICAgICAgICAgICAgOiBnZW5FbGVtZW50KGFzdCwgc3RhdGUpXG4gICAgICAgIDogJ19jKFwiZGl2XCIpJztcbiAgICByZXR1cm4ge1xuICAgICAgICByZW5kZXI6IFwid2l0aCh0aGlzKXtyZXR1cm4gXCIuY29uY2F0KGNvZGUsIFwifVwiKSxcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2VuRWxlbWVudChlbCwgc3Rh
13835dGUpIHtcbiAgICBpZiAoZWwucGFyZW50KSB7XG4gICAgICAgIGVsLnByZSA9IGVsLnByZSB8fCBlbC5wYXJlbnQucHJlO1xuICAgIH1cbiAgICBpZiAoZWwuc3RhdGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybiBnZW5TdGF0aWMoZWwsIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZWwub25jZSAmJiAhZWwub25jZVByb2Nlc3NlZCkge1xuICAgICAgICByZXR1cm4gZ2VuT25jZShlbCwgc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChlbC5mb3IgJiYgIWVsLmZvclByb2Nlc3NlZCkge1xuICAgICAgICByZXR1cm4gZ2VuRm9yKGVsLCBzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgICAgICByZXR1cm4gZ2VuSWYoZWwsIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZWwudGFnID09PSAndGVtcGxhdGUnICYmICFlbC5zbG90VGFyZ2V0ICYmICFzdGF0ZS5wcmUpIHtcbiAgICAgICAgcmV0dXJuIGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSkgfHwgJ3ZvaWQgMCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKGVsLnRhZyA9PT0gJ3Nsb3QnKSB7XG4gICAgICAgIHJldHVybiBnZW5TbG90KGVsLCBzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBjb21wb25lbnQgb3IgZWxlbWVudFxuICAgICAgICB2YXIgY29kZSA9IHZvaWQgMDtcbiAgICAgICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29kZSA9IGdlbkNvbXBvbmVudChlbC5jb21wb25lbnQsIGVsLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2Y
13835XIgZGF0YSA9IHZvaWQgMDtcbiAgICAgICAgICAgIHZhciBtYXliZUNvbXBvbmVudCA9IHN0YXRlLm1heWJlQ29tcG9uZW50KGVsKTtcbiAgICAgICAgICAgIGlmICghZWwucGxhaW4gfHwgKGVsLnByZSAmJiBtYXliZUNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2VuRGF0YShlbCwgc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRhZyBcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgaXMgYSBjb21wb25lbnQgaW4gPHNjcmlwdCBzZXR1cD5cbiAgICAgICAgICAgID0gdm9pZCAwO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIGNvbXBvbmVudCBpbiA8c2NyaXB0IHNldHVwPlxuICAgICAgICAgICAgdmFyIGJpbmRpbmdzID0gc3RhdGUub3B0aW9ucy5iaW5kaW5ncztcbiAgICAgICAgICAgIGlmIChtYXliZUNvbXBvbmVudCAmJiBiaW5kaW5ncyAmJiBiaW5kaW5ncy5fX2lzU2NyaXB0U2V0dXAgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGFnID0gY2hlY2tCaW5kaW5nVHlwZShiaW5kaW5ncywgZWwudGFnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGFnKVxuICAgICAgICAgICAgICAgIHRhZyA9IFwiJ1wiLmNvbmNhdChlbC50YWcsIFwiJ1wiKTtcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb2RlID0gXCJfYyhcIi5jb25jYXQodGFnKS5jb25jYXQoZGF0YSA/IFwiLFwiLmNvbmNhdChkYXRhKSA6ICcnIC8vIGRhdGFcbiAgICAgICAgICAgICkuY29uY2F0KGNoaWxkcmVuID8gXCIsXCIuY29uY2F0KGNoaWxkcmVuKSA6ICcnIC8vIGNoaWxkcmVuXG4gICAgICAgICAgICAsIFwiKVwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtb2R1bGUgdHJhbnNmb3Jtc1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvZGUgPSBzdGF0ZS50cmFuc2Zvcm1zW2ldKGVsLCBjb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29kZTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0JpbmRpbmdUeXBlKGJpbmRpbmdzLCBrZXkpIHtcbiAgICB2YXIgY2FtZWxOYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICB2YXIgUGFzY2FsTmFtZSA9IGNhcGl0YWxpemUoY2FtZWxOYW1lKTtcbiAgICB2YXIgY2hlY2tUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgaWYgKGJpbmRpbmdzW2tleV0gPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJpbmRpbmdzW2NhbWVsTmFtZV0gPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYW1lbE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJpbmRpbmdzW1Bhc2NhbE5hbWVdID09PSB0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gUGFzY2FsTmFtZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIGZyb21Db25zdCA9IGNoZWNrVHlwZShcInNldHVwLWNvbnN0XCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX0NPTlNUICovKSB8fFxuICAgICAgICBjaGVja1R5cGUoXCJzZXR1cC1yZWFjdGl2ZS1jb25zdFwiIC8qIEJpbmRpbmdUeXBlcy5TRVRVUF9SRUFDVElWRV9DT05TVCAqLyk7XG4gICAgaWYgKGZyb21Db25zdCkge1xuICAgICAgICByZXR1cm4gZnJvbUNvbnN0O1xuICAgIH1cbiAgICB2YXIgZnJvbU1heWJlUmVmID0gY2hlY2tUeXBlKFwic2V0dXAtbGV0XCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX0xFVCAqLykgfHxcbiAgICAgICAgY2hlY2tUeXBlKFwic2V0dXAtcmVmXCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX1JFRiAqLykgfHxcbiAgICAgICAgY2hlY2tUeXBlKFwic2V0dXAtbWF5YmUtcmVmXCIgLyogQmluZGluZ1R5cGVzLlNFVFVQX01BWUJFX1JFRiAqLyk7XG4gICAgaWYgKGZyb21NYXliZVJlZikge1xuICAgICAgICByZXR1cm4gZnJvbU1heWJlUmVmO1xuICAgIH1cbn1cbi8vIGhvaXN0IHN0YXRpYyBzdWItdHJlZXMgb3V0XG5mdW5jdGlvbiBnZW5TdGF0aWMoZWwsIHN0YXRlKSB7XG4gICAgZWwuc3RhdGljUHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAvLyBTb21lIGVsZW1lbnRzICh0ZW1wbGF0ZXMpIG5lZWQgdG8gYmVoYXZlIGRpZmZlcmVudGx5IGluc2lkZSBvZiBhIHYtcHJlXG4gICAgLy8gbm9kZS4gIEFsbCBwcmUgbm9kZXMgYXJlIHN0YXRpYyByb290cywgc28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgbG9jYXRpb24gdG9cbiAgICAvLyB3cmFwIGEgc3RhdGUgY2hhbmdlIGFuZCByZXNldCBpdCB1cG9uIGV4aXRpbmcgdGhlIHByZSBub2RlLlxuICAgIHZhciBvcmlnaW5hbFByZVN0YXRlID0gc3RhdGUucHJlO1xuICAgIGlmIChlbC5wcmUpIHtcbiAgICAgICAgc3RhdGUucHJlID0gZWwucHJlO1xuICAgIH1cbiAgICBzdGF0ZS5zdGF0aWNSZW5kZXJGbnMucHVzaChcIndpdGgodGhpcyl7cmV0dXJuIFwiLmNvbmNhdChnZW5FbGVtZW50KGVsLCBzdGF0ZSksIFwifVwiKSk7XG4gICAgc3RhdGUucHJlID0gb3JpZ2luYWxQcmVTdGF0ZTtcbiAgICByZXR1cm4gXCJfbShcIi5jb25jYXQoc3RhdGUuc3RhdGljUmVuZGVyRm5zLmxlbmd0aCAtIDEpLmNvbmNhdChlbC5zdGF0aWNJbkZvciA/ICcsdHJ1ZScgOiAnJywgXCIpXCIpO1xufVxuLy8gdi1vbmNlXG5mdW5jdGlvbiBnZW5PbmNlKGVsLCBzdGF0ZSkge1xuICAgIGVsLm9uY2VQcm9jZXNzZWQgPSB0cnVlO1xuICAgIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQpIHtcbiAgICAgICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGVsLnN0YXRpY0luRm9yKSB7XG4gICAgICAgIHZhciBrZXkgPSAnJztcbiAgICAgICAgdmFyIHBhcmVudF8xID0gZWwucGFyZW50O1xuICAgICAgICB3aGlsZSAocGFyZW50XzEpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRfMS5mb3IpIHtcbiAgICAgICAgICAgICAgICBrZXkgPSBwYXJlbnRfMS5rZXk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnRfMSA9IHBhcmVudF8xLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgI
13835HN0YXRlLndhcm4oXCJ2LW9uY2UgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgdi1mb3IgdGhhdCBpcyBrZXllZC4gXCIsIGVsLnJhd0F0dHJzTWFwWyd2LW9uY2UnXSk7XG4gICAgICAgICAgICByZXR1cm4gZ2VuRWxlbWVudChlbCwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIl9vKFwiLmNvbmNhdChnZW5FbGVtZW50KGVsLCBzdGF0ZSksIFwiLFwiKS5jb25jYXQoc3RhdGUub25jZUlkKyssIFwiLFwiKS5jb25jYXQoa2V5LCBcIilcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2VuSWYoZWwsIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KSB7XG4gICAgZWwuaWZQcm9jZXNzZWQgPSB0cnVlOyAvLyBhdm9pZCByZWN1cnNpb25cbiAgICByZXR1cm4gZ2VuSWZDb25kaXRpb25zKGVsLmlmQ29uZGl0aW9ucy5zbGljZSgpLCBzdGF0ZSwgYWx0R2VuLCBhbHRFbXB0eSk7XG59XG5mdW5jdGlvbiBnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpIHtcbiAgICBpZiAoIWNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBhbHRFbXB0eSB8fCAnX2UoKSc7XG4gICAgfVxuICAgIHZhciBjb25kaXRpb24gPSBjb25kaXRpb25zLnNoaWZ0KCk7XG4gICAgaWYgKGNvbmRpdGlvbi5leHApIHtcbiAgICAgICAgcmV0dXJuIFwiKFwiLmNvbmNhdChjb25kaXRpb24uZXhwLCBcIik/XCIpLmNvbmNhdChnZW5UZXJuYXJ5RXhwKGNvbmRpdGlvbi5ibG9jayksIFwiOlwiKS5jb25jYXQoZ2VuSWZDb25kaXRpb25zKGNvbmRpdGlvbnMsIHN0YXRlLCBhbHRHZW4sIGFsdEVtcHR5KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoZ2VuVGVybmFyeUV4cChjb25kaXRpb24uYmxvY2spKTtcbiAgICB9XG4gICAgLy8gdi1pZiB3aXRoIHYtb25jZSBzaG91bGQgZ2VuZXJhdGUgY29kZSBsaWtlIChhKT9fbSgwKTpfbSgxKVxuICAgIGZ1bmN0aW9uIGdlblRlcm5hcnlFeHAoZWwpIHtcbiAgICAgICAgcmV0dXJuIGFsdEdlblxuICAgICAgICAgICAgPyBhbHRHZW4oZWwsIHN0YXRlKVxuICAgICAgICAgICAgOiBlbC5vbmNlXG4gICAgICAgICAgICAgICAgPyBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgICAgICAgICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5Gb3IoZWwsIHN0YXRlLCBhbHRHZW4sIGFsdEhlbHBlcikge1xuICAgIHZhciBleHAgPSBlbC5mb3I7XG4gICAgdmFyIGFsaWFzID0gZWwuYWxpYXM7XG4gICAgdmFyIGl0ZXJhdG9yMSA9IGVsLml0ZXJhdG9yMSA/IFwiLFwiLmNvbmNhdChlbC5pdGVyYXRvcjEpIDogJyc7XG4gICAgdmFyIGl0ZXJhdG9yMiA9IGVsLml0ZXJhdG9yMiA/IFwiLFwiLmNvbmNhdChlbC5pdGVyYXRvcjIpIDogJyc7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgc3RhdGUubWF5YmVDb21wb25lbnQoZWwpICYmXG4gICAgICAgIGVsLnRhZyAhPT0gJ3Nsb3QnICYmXG4gICAgICAgIGVsLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICAgICAhZWwua2V5KSB7XG4gICAgICAgIHN0YXRlLndhcm4oXCI8XCIuY29uY2F0KGVsLnRhZywgXCIgdi1mb3I9XFxcIlwiKS5jb25jYXQoYWxpYXMsIFwiIGluIFwiKS5jb25jYXQoZXhwLCBcIlxcXCI+OiBjb21wb25lbnQgbGlzdHMgcmVuZGVyZWQgd2l0aCBcIikgK1xuICAgICAgICAgICAgXCJ2LWZvciBzaG91bGQgaGF2ZSBleHBsaWNpdCBrZXlzLiBcIiArXG4gICAgICAgICAgICBcIlNlZSBodHRwczovL3YyLnZ1ZWpzLm9yZy92Mi9ndWlkZS9saXN0Lmh0bWwja2V5IGZvciBtb3JlIGluZm8uXCIsIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddLCB0cnVlIC8qIHRpcCAqLyk7XG4gICAgfVxuICAgIGVsLmZvclByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICAgIHJldHVybiAoXCJcIi5jb25jYXQoYWx0SGVscGVyIHx8ICdfbCcsIFwiKChcIikuY29uY2F0KGV4cCwgXCIpLFwiKSArXG4gICAgICAgIFwiZnVuY3Rpb24oXCIuY29uY2F0KGFsaWFzKS5jb25jYXQoaXRlcmF0b3IxKS5jb25jYXQoaXRlcmF0b3IyLCBcIil7XCIpICtcbiAgICAgICAgXCJyZXR1cm4gXCIuY29uY2F0KChhbHRHZW4gfHwgZ2VuRWxlbWVudCkoZWwsIHN0YXRlKSkgK1xuICAgICAgICAnfSknKTtcbn1cbmZ1bmN0aW9uIGdlbkRhdGEoZWwsIHN0YXRlKSB7XG4gICAgdmFyIGRhdGEgPSAneyc7XG4gICAgLy8gZGlyZWN0aXZlcyBmaXJzdC5cbiAgICAvLyBkaXJlY3RpdmVzIG1heSBtdXRhdGUgdGhlIGVsJ3Mgb3RoZXIgcHJvcGVydGllcyBiZWZvcmUgdGhleSBhcmUgZ2VuZXJhdGVkLlxuICAgIHZhciBkaXJzID0gZ2VuRGlyZWN0aXZlcyhlbCwgc3RhdGUpO1xuICAgIGlmIChkaXJzKVxuICAgICAgICBkYXRhICs9IGRpcnMgKyAnLCc7XG4gICAgLy8ga2V5XG4gICAgaWYgKGVsLmtleSkge1xuICAgICAgICBkYXRhICs9IFwia2V5OlwiLmNvbmNhdChlbC5rZXksIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gcmVmXG4gICAgaWYgKGVsLnJlZikge1xuICAgICAgICBkYXRhICs9IFwicmVmOlwiLmNvbmNhdChlbC5yZWYsIFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKGVsLnJlZkluRm9yKSB7XG4gICAgICAgIGRhdGEgKz0gXCJyZWZJbkZvcjp0cnVlLFwiO1xuICAgIH1cbiAgICAvLyBwcmVcbiAgICBpZiAoZWwucHJlKSB7XG4gICAgICAgIGRhdGEgKz0gXCJwcmU6dHJ1ZSxcIjtcbiAgICB9XG4gICAgLy8gcmVjb3JkIG9yaWdpbmFsIHRhZyBuYW1lIGZvciBjb21wb25lbnRzIHVzaW5nIFwiaXNcIiBhdHRyaWJ1dGVcbiAgICBpZiAoZWwuY29tcG9uZW50KSB7XG4gICAgICAgIGRhdGEgKz0gXCJ0YWc6XFxcIlwiLmNvbmNhdChlbC50YWcsIFwiXFxcIixcIik7XG4gICAgfVxuICAgIC8vIG1vZHVsZSBkYXRhIGdlbmVyYXRpb24gZnVuY3Rpb25zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5kYXRhR2VuRm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRhdGEgKz0gc3RhdGUuZGF0YUdlbkZuc1tpXShlbCk7XG4gICAgfVxuICAgIC8vIGF0dHJpYnV0ZXNcbiAgICBpZiAoZWwuYXR0cnMpIHtcbiAgICAgICAgZGF0YSArPSBcImF0dHJzOlwiLmNvbmNhdChnZW5Qcm9wcyhlbC5hdHRycyksIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gRE9NIHByb3BzXG4gICAgaWYgKGVsLnByb3BzKSB7XG4gICAgICAgIGRhdGEgKz0gXCJkb21Qcm9wczpcIi5jb25jYXQoZ2VuUHJvcHMoZWwucHJvcHMpLCBcIixcIik7XG4gICAgfVxuICAgIC8vIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKGVsLmV2ZW50cykge1xuICAgICAgICBkYXRhICs9IFwiXCIuY29uY2F0KGdlbkhhbmRsZXJzKGVsLmV2ZW50cywgZmFsc2UpLCBcIixcIik7XG4gICAgfVxuICAgIGlmIChlbC5uYXRpdmVFdmVudHMpIHtcbiAgICAgICAgZGF0YSArPSBcIlwiLmNvbmNhdChnZW5IYW5kbGVycyhlbC5uYXRpdmVFdmVudHMsIHRydWUpLCBcIixcIik7XG4gICAgfVxuICAgIC8vIHNsb3QgdGFyZ2V0XG4gICAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90c1xuICAgIGlmIChlbC5zbG90VGFyZ2V0ICYmICFlbC5zbG90U2NvcGUpIHtcbiAgICAgICAgZGF0YSArPSBcInNsb3Q6XCIuY29uY2F0KGVsLnNsb3RUYXJnZXQsIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gc2NvcGVkIHNsb3RzXG4gICAgaWYgKGVsLnNjb3BlZFNsb3RzKSB7XG4gICAgICAgIGRhdGEgKz0gXCJcIi5jb25jYXQoZ2VuU2NvcGVkU2xvdHMoZWwsIGVsLnNjb3BlZFNsb3RzLCBzdGF0ZSksIFwiLFwiKTtcbiAgICB9XG4gICAgLy8gY29tcG9uZW50IHYtbW9kZWxcbiAgICBpZiAoZWwubW9kZWwpIHtcbiAgICAgICAgZGF0YSArPSBcIm1vZGVsOnt2YWx1ZTpcIi5jb25jYXQoZWwubW9kZWwudmFsdWUsIFwiLGNhbGxiYWNrOlwiKS5jb25jYXQoZWwubW9kZWwuY2FsbGJhY2ssIFwiLGV4cHJlc3Npb246XCIpLmNvbmNhdChlbC5tb2RlbC5leHByZXNzaW9uLCBcIn0sXCIpO1xuICAgIH1cbiAgICAvLyBpbmxpbmUtdGVtcGxhdGVcbiAgICBpZiAoZWwuaW5saW5lVGVtcGxhdGUpIHtcbiAgICAgICAgdmFyIGlubGluZVRlbXBsYXRlID0gZ2VuSW5saW5lVGVtcGxhdGUoZWwsIHN0YXRl
13835KTtcbiAgICAgICAgaWYgKGlubGluZVRlbXBsYXRlKSB7XG4gICAgICAgICAgICBkYXRhICs9IFwiXCIuY29uY2F0KGlubGluZVRlbXBsYXRlLCBcIixcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvLCQvLCAnJykgKyAnfSc7XG4gICAgLy8gdi1iaW5kIGR5bmFtaWMgYXJndW1lbnQgd3JhcFxuICAgIC8vIHYtYmluZCB3aXRoIGR5bmFtaWMgYXJndW1lbnRzIG11c3QgYmUgYXBwbGllZCB1c2luZyB0aGUgc2FtZSB2LWJpbmQgb2JqZWN0XG4gICAgLy8gbWVyZ2UgaGVscGVyIHNvIHRoYXQgY2xhc3Mvc3R5bGUvbXVzdFVzZVByb3AgYXR0cnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlxuICAgIGlmIChlbC5keW5hbWljQXR0cnMpIHtcbiAgICAgICAgZGF0YSA9IFwiX2IoXCIuY29uY2F0KGRhdGEsIFwiLFxcXCJcIikuY29uY2F0KGVsLnRhZywgXCJcXFwiLFwiKS5jb25jYXQoZ2VuUHJvcHMoZWwuZHluYW1pY0F0dHJzKSwgXCIpXCIpO1xuICAgIH1cbiAgICAvLyB2LWJpbmQgZGF0YSB3cmFwXG4gICAgaWYgKGVsLndyYXBEYXRhKSB7XG4gICAgICAgIGRhdGEgPSBlbC53cmFwRGF0YShkYXRhKTtcbiAgICB9XG4gICAgLy8gdi1vbiBkYXRhIHdyYXBcbiAgICBpZiAoZWwud3JhcExpc3RlbmVycykge1xuICAgICAgICBkYXRhID0gZWwud3JhcExpc3RlbmVycyhkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBnZW5EaXJlY3RpdmVzKGVsLCBzdGF0ZSkge1xuICAgIHZhciBkaXJzID0gZWwuZGlyZWN0aXZlcztcbiAgICBpZiAoIWRpcnMpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgcmVzID0gJ2RpcmVjdGl2ZXM6Wyc7XG4gICAgdmFyIGhhc1J1bnRpbWUgPSBmYWxzZTtcbiAgICB2YXIgaSwgbCwgZGlyLCBuZWVkUnVudGltZTtcbiAgICBmb3IgKGkgPSAwLCBsID0gZGlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgZGlyID0gZGlyc1tpXTtcbiAgICAgICAgbmVlZFJ1bnRpbWUgPSB0cnVlO1xuICAgICAgICB2Y
13835XIgZ2VuID0gc3RhdGUuZGlyZWN0aXZlc1tkaXIubmFtZV07XG4gICAgICAgIGlmIChnZW4pIHtcbiAgICAgICAgICAgIC8vIGNvbXBpbGUtdGltZSBkaXJlY3RpdmUgdGhhdCBtYW5pcHVsYXRlcyBBU1QuXG4gICAgICAgICAgICAvLyByZXR1cm5zIHRydWUgaWYgaXQgYWxzbyBuZWVkcyBhIHJ1bnRpbWUgY291bnRlcnBhcnQuXG4gICAgICAgICAgICBuZWVkUnVudGltZSA9ICEhZ2VuKGVsLCBkaXIsIHN0YXRlLndhcm4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWVkUnVudGltZSkge1xuICAgICAgICAgICAgaGFzUnVudGltZSA9IHRydWU7XG4gICAgICAgICAgICByZXMgKz0gXCJ7bmFtZTpcXFwiXCIuY29uY2F0KGRpci5uYW1lLCBcIlxcXCIscmF3TmFtZTpcXFwiXCIpLmNvbmNhdChkaXIucmF3TmFtZSwgXCJcXFwiXCIpLmNvbmNhdChkaXIudmFsdWVcbiAgICAgICAgICAgICAgICA/IFwiLHZhbHVlOihcIi5jb25jYXQoZGlyLnZhbHVlLCBcIiksZXhwcmVzc2lvbjpcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGRpci52YWx1ZSkpXG4gICAgICAgICAgICAgICAgOiAnJykuY29uY2F0KGRpci5hcmcgPyBcIixhcmc6XCIuY29uY2F0KGRpci5pc0R5bmFtaWNBcmcgPyBkaXIuYXJnIDogXCJcXFwiXCIuY29uY2F0KGRpci5hcmcsIFwiXFxcIlwiKSkgOiAnJykuY29uY2F0KGRpci5tb2RpZmllcnMgPyBcIixtb2RpZmllcnM6XCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGRpci5tb2RpZmllcnMpKSA6ICcnLCBcIn0sXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNSdW50aW1lKSB7XG4gICAgICAgIHJldHVybiByZXMuc2xpY2UoMCwgLTEpICsgJ10nO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdlbklubGluZVRlbXBsYXRlKGVsLCBzdGF0ZSkge1xuICAgIHZhciBhc3QgPSBlbC5jaGlsZHJlblswXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAoZWwuY2hpbGRyZW4ubGVuZ3RoICE9PSAxIHx8IGFzdC50eXBlICE9PSAxKSkge1xuICAgICAgICBzdGF0ZS53YXJuKCdJbmxpbmUtdGVtcGxhdGUgY29tcG9uZW50cyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgY2hpbGQgZWxlbWVudC4nLCB7IHN0YXJ0OiBlbC5zdGFydCB9KTtcbiAgICB9XG4gICAgaWYgKGFzdCAmJiBhc3QudHlwZSA9PT0gMSkge1xuICAgICAgICB2Y
13835XIgaW5saW5lUmVuZGVyRm5zID0gZ2VuZXJhdGUoYXN0LCBzdGF0ZS5vcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIFwiaW5saW5lVGVtcGxhdGU6e3JlbmRlcjpmdW5jdGlvbigpe1wiLmNvbmNhdChpbmxpbmVSZW5kZXJGbnMucmVuZGVyLCBcIn0sc3RhdGljUmVuZGVyRm5zOltcIikuY29uY2F0KGlubGluZVJlbmRlckZucy5zdGF0aWNSZW5kZXJGbnNcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGNvZGUpIHsgcmV0dXJuIFwiZnVuY3Rpb24oKXtcIi5jb25jYXQoY29kZSwgXCJ9XCIpOyB9KVxuICAgICAgICAgICAgLmpvaW4oJywnKSwgXCJdfVwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZW5TY29wZWRTbG90cyhlbCwgc2xvdHMsIHN0YXRlKSB7XG4gICAgLy8gYnkgZGVmYXVsdCBzY29wZWQgc2xvdHMgYXJlIGNvbnNpZGVyZWQgXCJzdGFibGVcIiwgdGhpcyBhbGxvd3MgY2hpbGRcbiAgICAvLyBjb21wb25lbnRzIHdpdGggb25seSBzY29wZWQgc2xvdHMgdG8gc2tpcCBmb3JjZWQgdXBkYXRlcyBmcm9tIHBhcmVudC5cbiAgICAvLyBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGJhaWwtb3V0IG9mIHRoaXMgb3B0aW1pemF0aW9uXG4gICAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlIHNsb3QgY29udGFpbnMgZHluYW1pYyBuYW1lcywgaGFzIHYtaWYgb3Igdi1mb3Igb24gdGhlbS4uLlxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gZWwuZm9yIHx8XG4gICAgICAgIE9iamVjdC5rZXlzKHNsb3RzKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHZhciBzbG90ID0gc2xvdHNba2V5XTtcbiAgICAgICAgICAgIHJldHVybiAoc2xvdC5zbG90VGFyZ2V0RHluYW1pYyB8fCBzbG90LmlmIHx8IHNsb3QuZm9yIHx8IGNvbnRhaW5zU2xvdENoaWxkKHNsb3QpIC8vIGlzIHBhc3NpbmcgZG93biBzbG90IGZyb20gcGFyZW50IHdoaWNoIG1heSBiZSBkeW5hbWljXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAvLyAjOTUzNDogaWYgYSBjb21wb25lbnQgd2l0aCBzY29wZWQgc2xvdHMgaXMgaW5zaWRlIGEgY29uZGl0aW9uYWwgYnJhbmNoLFxuICAgIC8vIGl0J3MgcG9zc2libGUgZm9yIHRoZSBzYW1lIGNvbXBvbmVudCB0byBiZSByZXVzZWQgYnV0IHdpdGggZGlmZmVyZW50XG4gICAgLy8gY29tcGlsZWQgc2xvdCBjb250ZW50LiBUbyBhdm9pZCB0aGF0LCB3ZSBnZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgYmFzZWQgb25cbiAgICAvLyB0aGUgZ2VuZXJhdGVkIGNvZGUgb2YgYWxsIHRoZSBzbG90IGNvbnRlbnRzLlxuICAgIHZhciBuZWVkc0tleSA9ICEhZWwuaWY7XG4gICAgLy8gT1Igd2hlbiBpdCBpcyBpbnNpZGUgYW5vdGhlciBzY29wZWQgc2xvdCBvciB2LWZvciAodGhlIHJlYWN0aXZpdHkgbWF5IGJlXG4gICAgLy8gZGlzY29ubmVjdGVkIGR1ZSB0byB0aGUgaW50ZXJtZWRpYXRlIHNjb3BlIHZhcmlhYmxlKVxuICAgIC8vICM5NDM4LCAjOTUwNlxuICAgIC8vIFRPRE86IHRoaXMgY2FuIGJlIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHByb3Blcmx5IGFuYWx5emluZyBpbi1zY29wZSBiaW5kaW5nc1xuICAgIC8vIGFuZCBza2lwIGZvcmNlIHVwZGF0aW5nIG9uZXMgdGhhdCBkbyBub3QgYWN0dWFsbHkgdXNlIHNjb3BlIHZhcmlhYmxlcy5cbiAgICBpZiAoIW5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgdmFyIHBhcmVudF8yID0gZWwucGFyZW50O1xuICAgICAgICB3aGlsZSAocGFyZW50XzIpIHtcbiAgICAgICAgICAgIGlmICgocGFyZW50XzIuc2xvdFNjb3BlICYmIHBhcmVudF8yLnNsb3RTY29wZSAhPT0gZW1wdHlTbG90U2NvcGVUb2tlbikgfHxcbiAgICAgICAgICAgICAgICBwYXJlbnRfMi5mb3IpIHtcbiAgICAgICAgICAgICAgICBuZWVkc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJlbnRfMi5pZikge1xuICAgICAgICAgICAgICAgIG5lZWRzS2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudF8yID0gcGFyZW50XzIucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBnZW5lcmF0ZWRTbG90cyA9IE9iamVjdC5rZXlzKHNsb3RzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGdlblNjb3BlZFNsb3Qoc2xvdHNba2V5XSwgc3RhdGUpOyB9KVxuICAgICAgICAuam9pbignLCcpO1xuICAgIHJldHVybiBcInNjb3BlZFNsb3RzOl91KFtcIi5jb25jYXQoZ2VuZXJhdGVkU2xvdHMsIFwiXVwiKS5jb25jYXQobmVlZHNGb3JjZVVwZGF0ZSA/IFwiLG51bGwsdHJ1ZVwiIDogXCJcIikuY29uY2F0KCFuZWVkc0ZvcmNlVXBkYXRlICYmIG5lZWRzS2V5ID8gXCIsbnVsbCxmYWxzZSxcIi5jb25jYXQoaGFzaChnZW5lcmF0ZWRTbG90cykpIDogXCJcIiwgXCIpXCIpO1xufVxuZnVuY3Rpb24gaGFzaChzdHIpIHtcbiAgICB2YXIgaGFzaCA9IDUzODE7XG4gICAgdmFyIGkgPSBzdHIubGVuZ3RoO1xuICAgIHdoaWxlIChpKSB7XG4gICAgICAgIGhhc2ggPSAoaGFzaCAqIDMzKSBeIHN0ci5jaGFyQ29kZUF0KC0taSk7XG4gICAgfVxuICAgIHJldHVybiBoYXNoID4+PiAwO1xufVxuZnVuY3Rpb24gY29udGFpbnNTbG90Q2hpbGQoZWwpIHtcbiAgICBpZiAoZWwudHlwZSA9PT0gMSkge1xuICAgICAgICBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbC5jaGlsZHJlbi5zb21lKGNvbnRhaW5zU2xvdENoaWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2VuU2NvcGVkU2xvdChlbCwgc3RhdGUpIHtcbiAgICB2YXIgaXNMZWdhY3lTeW50YXggPSBlbC5hdHRyc01hcFsnc2xvdC1zY29wZSddO1xuICAgIGlmIChlbC5pZiAmJiAhZWwuaWZQcm9jZXNzZWQgJiYgIWlzTGVnYWN5U3ludGF4KSB7XG4gICAgICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUsIGdlblNjb3BlZFNsb3QsIFwibnVsbFwiKTtcbiAgICB9XG4gICAgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlLCBnZW5TY29wZWRTbG90KTtcbiAgICB9XG4gICAgdmFyIHNsb3RTY29wZSA9IGVsLnNsb3RTY29wZSA9PT0gZW1wdHlTbG90U2NvcGVUb2tlbiA/IFwiXCIgOiBTdHJpbmcoZWwuc2xvdFNjb3BlKTtcbiAgICB2YXIgZm4gPSBcImZ1bmN0aW9uKFwiLmNvbmNhdChzbG90U2NvcGUsIFwiKXtcIikgK1xuICAgICAgICBcInJldHVybi
13835BcIi5jb25jYXQoZWwudGFnID09PSAndGVtcGxhdGUnXG4gICAgICAgICAgICA/IGVsLmlmICYmIGlzTGVnYWN5U3ludGF4XG4gICAgICAgICAgICAgICAgPyBcIihcIi5jb25jYXQoZWwuaWYsIFwiKT9cIikuY29uY2F0KGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSkgfHwgJ3VuZGVmaW5lZCcsIFwiOnVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIDogZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgOiBnZW5FbGVtZW50KGVsLCBzdGF0ZSksIFwifVwiKTtcbiAgICAvLyByZXZlcnNlIHByb3h5IHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gICAgdmFyIHJldmVyc2VQcm94eSA9IHNsb3RTY29wZSA/IFwiXCIgOiBcIixwcm94eTp0cnVlXCI7XG4gICAgcmV0dXJuIFwie2tleTpcIi5jb25jYXQoZWwuc2xvdFRhcmdldCB8fCBcIlxcXCJkZWZhdWx0XFxcIlwiLCBcIixmbjpcIikuY29uY2F0KGZuKS5jb25jYXQocmV2ZXJzZVByb3h5LCBcIn1cIik7XG59XG5mdW5jdGlvbiBnZW5DaGlsZHJlbihlbCwgc3RhdGUsIGNoZWNrU2tpcCwgYWx0R2VuRWxlbWVudCwgYWx0R2VuTm9kZSkge1xuICAgIHZhciBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGVsXzEgPSBjaGlsZHJlblswXTtcbiAgICAgICAgLy8gb3B0aW1pemUgc2luZ2xlIHYtZm9yXG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgIGVsXzEuZm9yICYmXG4gICAgICAgICAgICBlbF8xLnRhZyAhPT0gJ3RlbXBsYXRlJyAmJlxuICAgICAgICAgICAgZWxfMS50YWcgIT09ICdzbG90Jykge1xuICAgICAgICAgICAgdmFyIG5vcm1hbGl6YXRpb25UeXBlXzEgPSBjaGVja1NraXBcbiAgICAgICAgICAgICAgICA/IHN0YXRlLm1heWJlQ29tcG9uZW50KGVsXzEpXG4gICAgICAgICAgICAgICAgICAgID8gXCIsMVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCIsMFwiXG4gICAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KChhbHRHZW5FbGVtZW50IHx8IGdlbkVsZW1lbnQpKGVsXzEsIHN0YXRlKSkuY29uY2F0KG5vcm1hbGl6YXRpb25UeXBlXzEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSA9IGNoZWNrU2tpcFxuICAgICAgICAgICAgPyBnZXROb3JtYWxpemF0aW9uVHlwZShjaGlsZHJlbiwgc3RhdGUubWF5YmVDb21wb25lbnQpXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIHZhciBnZW5fMSA9IGFsdEdlbk5vZGUgfHwgZ2VuTm9kZTtcbiAgICAgICAgcmV0dXJuIFwiW1wiLmNvbmNhdChjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGdlbl8xKGMsIHN0YXRlKTsgfSkuam9pbignLCcpLCBcIl1cIikuY29uY2F0KG5vcm1hbGl6YXRpb25UeXBlID8gXCIsXCIuY29uY2F0KG5vcm1hbGl6YXRpb25UeXBlKSA6ICcnKTtcbiAgICB9XG59XG4vLyBkZXRlcm1pbmUgdGhlIG5vcm1hbGl6YXRpb24gbmVlZGVkIGZvciB0aGUgY2hpbGRyZW4gYXJyYXkuXG4vLyAwOiBubyBub3JtYWxpemF0aW9uIG5lZWRlZFxuLy8gMTogc2ltcGxlIG5vcm1hbGl6YXRpb24gbmVlZGVkIChwb3NzaWJsZSAxLWxldmVsIGRlZXAgbmVzdGVkIGFycmF5KVxuLy8gMjogZnVsbCBub3JtYWxpemF0aW9uIG5lZWRlZFxuZnVuY3Rpb24gZ2V0Tm9ybWFsaXphdGlvblR5cGUoY2hpbGRyZW4sIG1heWJlQ29tcG9uZW50KSB7XG4gICAgdmFyIHJlcyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2Y
13835XIgZWwgPSBjaGlsZHJlbltpXTtcbiAgICAgICAgaWYgKGVsLnR5cGUgIT09IDEpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWVkc05vcm1hbGl6YXRpb24oZWwpIHx8XG4gICAgICAgICAgICAoZWwuaWZDb25kaXRpb25zICYmXG4gICAgICAgICAgICAgICAgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5lZWRzTm9ybWFsaXphdGlvbihjLmJsb2NrKTsgfSkpKSB7XG4gICAgICAgICAgICByZXMgPSAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heWJlQ29tcG9uZW50KGVsKSB8fFxuICAgICAgICAgICAgKGVsLmlmQ29uZGl0aW9ucyAmJiBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbWF5YmVDb21wb25lbnQoYy5ibG9jayk7IH0pKSkge1xuICAgICAgICAgICAgcmVzID0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gbmVlZHNOb3JtYWxpemF0aW9uKGVsKSB7XG4gICAgcmV0dXJuIGVsLmZvciAhPT0gdW5kZWZpbmVkIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyB8fCBlbC50YWcgPT09ICdzbG90Jztcbn1cbmZ1bmN0aW9uIGdlbk5vZGUobm9kZSwgc3RhdGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICAgIHJldHVybiBnZW5FbGVtZW50KG5vZGUsIHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAzICYmIG5vZGUuaXNDb21tZW50KSB7XG4gICAgICAgIHJldHVybiBnZW5Db21tZW50KG5vZGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdlblRleHQobm9kZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2VuVGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIFwiX3YoXCIuY29uY2F0KHRleHQudHlwZSA9PT0gMlxuICAgICAgICA/IHRleHQuZXhwcmVzc2lvbiAvLyBubyBuZWVkIGZvciAoKSBiZWNhdXNlIGFscmVhZHkgd3JhcHBlZCBpbiBfcygpXG4gICAgICAgIDogdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKEpTT04uc3RyaW5naWZ5KHRleHQudGV4dCkpLCBcIilcIik7XG59XG5mdW5jdGlvbiBnZW5Db21tZW50KGNvbW1lbnQpIHtcbiAgICByZXR1cm4gXCJfZShcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoY29tbWVudC50ZXh0KSwgXCIpXCIpO1xufVxuZnVuY3Rpb24gZ2VuU2xvdChlbCwgc3RhdGUpIHtcbiAgICB2YXIgc2xvdE5hbWUgPSBlbC5zbG90TmFtZSB8fCAnXCJkZWZhdWx0XCInO1xuICAgIHZhciBjaGlsZHJlbiA9IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSk7XG4gICAgdmFyIHJlcyA9IFwiX3QoXCIuY29uY2F0KHNsb3ROYW1lKS5jb25jYXQoY2hpbGRyZW4gPyBcIixmdW5jdGlvbigpe3JldHVybiBcIi5jb25jYXQoY2hpbGRyZW4sIFwifVwiKSA6ICcnKTtcbiAgICB2YXIgYXR0cnMgPSBlbC5hdHRycyB8fCBlbC5keW5hbWljQXR0cnNcbiAgICAgICAgPyBnZW5Qcm9wcygoZWwuYXR0cnMgfHwgW10pLmNvbmNhdChlbC5keW5hbWljQXR0cnMgfHwgW10pLm1hcChmdW5jdGlvbiAoYXR0cikgeyByZXR1cm4gKHtcbiAgICAgICAgICAgIC8vIHNsb3QgcHJvcHMgYXJlIGNhbWVsaXplZFxuICAgICAgICAgICAgbmFtZTogY2FtZWxpemUoYXR0ci5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlOiBhdHRyLnZhbHVlLFxuICAgICAgICAgICAgZHluYW1pYzogYXR0ci5keW5hbWljXG4gICAgICAgIH0pOyB9KSlcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBiaW5kID0gZWwuYXR0cnNNYXBbJ3YtYmluZCddO1xuICAgIGlmICgoYXR0cnMgfHwgYmluZCkgJiYgIWNoaWxkcmVuKSB7XG4gICAgICAgIHJlcyArPSBcIixudWxsXCI7XG4gICAgfVxuICAgIGlmIChhdHRycykge1xuICAgICAgICByZXMgKz0gXCIsXCIuY29uY2F0KGF0dHJzKTtcbiAgICB9XG4gICAgaWYgKGJpbmQpIHtcbiAgICAgICAgcmVzICs9IFwiXCIuY29uY2F0KGF0dHJzID8gJycgOiAnLG51bGwnLCBcIixcIikuY29uY2F0KGJpbmQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzICsgJyknO1xufVxuLy8gY29tcG9uZW50TmFtZSBpcyBlbC5jb21wb25lbnQsIHRha2UgaXQgYXMgYXJndW1lbnQgdG8gc2h1biBmbG93J3MgcGVzc2ltaXN0aWMgcmVmaW5lbWVudFxuZnVuY3Rpb24gZ2VuQ29tcG9uZW50KGNvbXBvbmVudE5hbWUsIGVsLCBzdGF0ZSkge1xuICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgcmV0dXJuIFwiX2MoXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLFwiKS5jb25jYXQoZ2VuRGF0YShlbCwgc3RhdGUpKS5jb25jYXQoY2hpbGRyZW4gPyBcIixcIi5jb25jYXQoY2hpbGRyZW4pIDogJycsIFwiKVwiKTtcbn1cbmZ1bmN0aW9uIGdlblByb3BzKHByb3BzKSB7XG4gICAgdmFyIHN0YXRpY1Byb3BzID0gXCJcIjtcbiAgICB2YXIgZHluYW1pY1Byb3BzID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gcHJvcHNbaV07XG4gICAgICAgIHZhciB2YWx1ZSA9IHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyhwcm9wLnZhbHVlKTtcbiAgICAgICAgaWYgKHByb3AuZHluYW1pYykge1xuICAgICAgICAgICAgZHluYW1pY1Byb3BzICs9IFwiXCIuY29uY2F0KHByb3AubmFtZSwgXCIsXCIpLmNvbmNhdCh2YWx1ZSwgXCIsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3RhdGljUHJvcHMgKz0gXCJcXFwiXCIuY29uY2F0KHByb3AubmFtZSwgXCJcXFwiOlwiKS5jb25jYXQodmFsdWUsIFwiLFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWNQcm9wcyA9IFwie1wiLmNvbmNhdChzdGF0aWNQcm9wcy5zbGljZSgwLCAtMSksIFwifVwiKTtcbiAgICBpZiAoZHluYW1pY1Byb3BzKSB7XG4gICAgICAgIHJldHVybiBcIl9kKFwiLmNvbmNhdChzdGF0aWNQcm9wcywgXCIsW1wiKS5jb25jYXQoZHluYW1pY1Byb3BzLnNsaWNlKDAsIC0xKSwgXCJdKVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgI
13835HJldHVybiBzdGF0aWNQcm9wcztcbiAgICB9XG59XG4vLyAjMzg5NSwgIzQyNjhcbmZ1bmN0aW9uIHRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFx1MjAyOC9nLCAnXFxcXHUyMDI4JykucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5Jyk7XG59XG5cbi8vIHRoZXNlIGtleXdvcmRzIHNob3VsZCBub3QgYXBwZWFyIGluc2lkZSBleHByZXNzaW9ucywgYnV0IG9wZXJhdG9ycyBsaWtlXG4vLyB0eXBlb2YsIGluc3RhbmNlb2YgYW5kIGluIGFyZSBhbGxvd2VkXG52YXIgcHJvaGliaXRlZEtleXdvcmRSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArXG4gICAgKCdkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LCcgK1xuICAgICAgICAnc3VwZXIsdGhyb3csd2hpbGUseWllbGQsZGVsZXRlLGV4cG9ydCxpbXBvcnQscmV0dXJuLHN3aXRjaCxkZWZhdWx0LCcgK1xuICAgICAgICAnZXh0ZW5kcyxmaW5hbGx5LGNvbnRpbnVlLGRlYnVnZ2VyLGZ1bmN0aW9uLGFyZ3VtZW50cycpXG4gICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgIC5qb2luKCdcXFxcYnxcXFxcYicpICtcbiAgICAnXFxcXGInKTtcbi8vIHRoZXNlIHVuYXJ5IG9wZXJhdG9ycyBzaG91bGQgbm90IGJlIHVzZWQgYXMgcHJvcGVydHkvbWV0aG9kIG5hbWVzXG52YXIgdW5hcnlPcGVyYXRvcnNSRSA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArXG4gICAgJ2RlbGV0ZSx0eXBlb2Ysdm9pZCcuc3BsaXQoJywnKS5qb2luKCdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpfFxcXFxiJykgK1xuICAgICdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpJyk7XG4vLyBzdHJpcCBzdHJpbmdzIGluIGV4cHJlc3Npb25zXG52YXIgc3RyaXBTdHJpbmdSRSA9IC8nKD86W14nXFxcXF18XFxcXC4pKid8XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifGAoPzpbXmBcXFxcXXxcXFxcLikqXFwkXFx7fFxcfSg/OlteYFxcXFxdfFxcXFwuKSpgfGAoPzpbXmBcXFxcXXxcXFxcLikqYC9nO1xuLy8gZGV0ZWN0IHByb2JsZW1hdGljIGV4cHJlc3Npb25zIGluIGEgdGVtcGxhdGVcbmZ1bmN0aW9uIGRldGVjdEVycm9ycyhhc3QsIHdhcm4pIHtcbiAgICBpZiAoYXN0KSB7XG4gICAgICAgIGNoZWNrTm9kZShhc3QsIHdhcm4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrTm9kZShub2RlLCB3YXJuKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgICBmb3IgKHZhciBuYW1lXzEgaW4gbm9kZS5hdHRyc01hcCkge1xuICAgICAgICAgICAgaWYgKGRpclJFLnRlc3QobmFtZV8xKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuYXR0cnNNYXBbbmFtZV8xXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbm9kZS5yYXdBdHRyc01hcFtuYW1lXzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZV8xID09PSAndi1mb3InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Zvcihub2RlLCBcInYtZm9yPVxcXCJcIi5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWVfMSA9PT0gJ3Ytc2xvdCcgfHwgbmFtZV8xWzBdID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uKHZhbHVlLCBcIlwiLmNvbmNhdChuYW1lXzEsIFwiPVxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvblJFLnRlc3QobmFtZV8xKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tFdmVudCh2YWx1ZSwgXCJcIi5jb25jYXQobmFtZV8xLCBcIj1cXFwiXCIpLmNvbmNhdCh2YWx1ZSwgXCJcXFwiXCIpLCB3YXJuLCByYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0V4cHJlc3Npb24odmFsdWUsIFwiXCIuY29uY2F0KG5hbWVfMSwgXCI9XFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGVja05vZGUobm9kZS5jaGlsZHJlbltpXSwgd2Fybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZS50eXBlID09PSAyKSB7XG4gICAgICAgIGNoZWNrRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIG5vZGUudGV4dCwgd2Fybiwgbm9kZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY2hlY2tFdmVudChleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgdmFyIHN0cmlwcGVkID0gZXhwLnJlcGxhY2Uoc3RyaXBTdHJpbmdSRSwgJycpO1xuICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBzdHJpcHBlZC5tYXRjaCh1bmFyeU9wZXJhdG9yc1JFKTtcbiAgICBpZiAoa2V5d29yZE1hdGNoICYmIHN0cmlwcGVkLmNoYXJBdChrZXl3b3JkTWF0Y2guaW5kZXggLSAxKSAhPT0gJyQnKSB7XG4gICAgICAgIHdhcm4oXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IHVuYXJ5IG9wZXJhdG9yIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgICAgICAgIFwiXFxcIlwiLmNvbmNhdChrZXl3b3JkTWF0Y2hbMF0sIFwiXFxcIiBpbiBleHByZXNzaW9uIFwiKS5jb25jYXQodGV4dC50cmltKCkpLCByYW5nZSk7XG4gICAgfVxuICAgIGNoZWNrRXhwcmVzc2lvbihleHAsIHRleHQsIHdhcm4sIHJhbmdlKTtcbn1cbmZ1bmN0aW9uIGNoZWNrRm9yKG5vZGUsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgY2hlY2tFeHByZXNzaW9uKG5vZGUuZm9yIHx8ICcnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gICAgY2hlY2tJZGVudGlmaWVyKG5vZGUuYWxpYXMsICd2LWZvciBhbGlhcycsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjEsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgICBjaGVja0lkZW50aWZpZXIobm9kZS5pdGVyYXRvcjIsICd2LWZvciBpdGVyYXRvcicsIHRleHQsIHdhcm4sIHJhbmdlKTtcbn1cbmZ1bmN0aW9uIGNoZWNrSWRlbnRpZmllcihpZGVudCwgdHlwZSwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgICBpZiAodHlwZW9mIGlkZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IEZ1bmN0aW9uKFwidmFyIFwiLmNvbmNhdChpZGVudCwgXCI9X1wiKSk7XG4gICAgICAgI
13835H1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdhcm4oXCJpbnZhbGlkIFwiLmNvbmNhdCh0eXBlLCBcIiBcXFwiXCIpLmNvbmNhdChpZGVudCwgXCJcXFwiIGluIGV4cHJlc3Npb246IFwiKS5jb25jYXQodGV4dC50cmltKCkpLCByYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja0V4cHJlc3Npb24oZXhwLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICAgIHRyeSB7XG4gICAgICAgIG5ldyBGdW5jdGlvbihcInJldHVybiBcIi5jb25jYXQoZXhwKSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBleHBcbiAgICAgICAgICAgIC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKVxuICAgICAgICAgICAgLm1hdGNoKHByb2hpYml0ZWRLZXl3b3JkUkUpO1xuICAgICAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICAgICAgICB3YXJuKFwiYXZvaWQgdXNpbmcgSmF2YVNjcmlwdCBrZXl3b3JkIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgICAgICAgICAgICBcIlxcXCJcIi5jb25jYXQoa2V5d29yZE1hdGNoWzBdLCBcIlxcXCJcXG4gIFJhdyBleHByZXNzaW9uOiBcIikuY29uY2F0KHRleHQudHJpbSgpKSwgcmFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2FybihcImludmFsaWQgZXhwcmVzc2lvbjogXCIuY29uY2F0KGUubWVzc2FnZSwgXCIgaW5cXG5cXG5cIikgK1xuICAgICAgICAgICAgICAgIFwiICAgIFwiLmNvbmNhdChleHAsIFwiXFxuXFxuXCIpICtcbiAgICAgICAgICAgICAgICBcIiAgUmF3IGV4cHJlc3Npb246IFwiLmNvbmNhdCh0ZXh0LnRyaW0oKSwgXCJcXG5cIiksIHJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgICB0cnkge1xuICAgICAgICBuZXcgRnVuY3Rpb24oZXhwLCAnJyk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHdhcm4oXCJpbnZhbGlkIGZ1bmN0aW9uIHBhcmFtZXRlciBleHByZXNzaW9uOiBcIi5jb25jYXQoZS5tZXNzYWdlLCBcIiBpblxcblxcblwiKSArXG4gICAgICAgICAgICBcIiAgICBcIi5jb25jYXQoZXhwLCBcIlxcblxcblwiKSArXG4gICAgICAgICAgICBcIiAgUmF3IGV4cHJlc3Npb246IFwiLmNvbmNhdCh0ZXh0LnRyaW0oKSwgXCJcXG5cIiksIHJhbmdlKTtcbiAgICB9XG59XG5cbnZhciByYW5nZSA9IDI7XG5mdW5jdGlvbiBnZW5lcmF0ZUNvZGVGcmFtZShzb3VyY2UsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCkgeyBzdGFydCA9IDA7IH1cbiAgICBpZiAoZW5kID09PSB2b2lkIDApIHsgZW5kID0gc291cmNlLmxlbmd0aDsgfVxuICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY291bnQgKz0gbGluZXNbaV0ubGVuZ3RoICsgMTtcbiAgICAgICAgaWYgKGNvdW50ID49IHN0YXJ0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gaSAtIHJhbmdlOyBqIDw9IGkgKyByYW5nZSB8fCBlbmQgPiBjb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGogPCAwIHx8IGogPj0gbGluZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICByZXMucHVzaChcIlwiLmNvbmNhdChqICsgMSkuY29uY2F0KHJlcGVhdChcIiBcIiwgMyAtIFN0cmluZyhqICsgMSkubGVuZ3RoKSwgXCJ8ICBcIikuY29uY2F0KGxpbmVzW2pdKSk7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmVMZW5ndGggPSBsaW5lc1tqXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGogPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHVzaCB1bmRlcmxpbmVcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhZCA9IHN0YXJ0IC0gKGNvdW50IC0gbGluZUxlbmd0aCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB2Y
13835XIgbGVuZ3RoXzEgPSBlbmQgPiBjb3VudCA/IGxpbmVMZW5ndGggLSBwYWQgOiBlbmQgLSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goXCIgICB8ICBcIiArIHJlcGVhdChcIiBcIiwgcGFkKSArIHJlcGVhdChcIl5cIiwgbGVuZ3RoXzEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaiA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCA+IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoXzIgPSBNYXRoLm1pbihlbmQgLSBjb3VudCwgbGluZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0KFwiXlwiLCBsZW5ndGhfMikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IGxpbmVMZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXMuam9pbignXFxuJyk7XG59XG5mdW5jdGlvbiByZXBlYXQoc3RyLCBuKSB7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIGlmIChuID4gMCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICBpZiAobiAmIDEpXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cjtcbiAgICAgICAgICAgIG4gPj4+PSAxO1xuICAgICAgICAgICAgaWYgKG4gPD0gMClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIHN0ciArPSBzdHI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oY29kZSwgZXJyb3JzKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihjb2RlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJvcnMucHVzaCh7IGVycjogZXJyLCBjb2RlOiBjb2RlIH0pO1xuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuKGNvbXBpbGUpIHtcbiAgICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJldHVybiBmdW5jdGlvbiBjb21waWxlVG9GdW5jdGlvbnModGVtcGxhdGUsIG9wdGlvbnMsIHZtKSB7XG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIG9wdGlvbnMpO1xuICAgICAgICB2Y
13835XIgd2FybiA9IG9wdGlvbnMud2FybiB8fCB3YXJuJDI7XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLndhcm47XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLy8gZGV0ZWN0IHBvc3NpYmxlIENTUCByZXN0cmljdGlvblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBuZXcgRnVuY3Rpb24oJ3JldHVybiAxJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChlLnRvU3RyaW5nKCkubWF0Y2goL3Vuc2FmZS1ldmFsfENTUC8pKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4oJ0l0IHNlZW1zIHlvdSBhcmUgdXNpbmcgdGhlIHN0YW5kYWxvbmUgYnVpbGQgb2YgVnVlLmpzIGluIGFuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2Vudmlyb25tZW50IHdpdGggQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdGhhdCBwcm9oaWJpdHMgdW5zYWZlLWV2YWwuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSB0ZW1wbGF0ZSBjb21waWxlciBjYW5ub3Qgd29yayBpbiB0aGlzIGVudmlyb25tZW50LiBDb25zaWRlciAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZWxheGluZyB0aGUgcG9saWN5IHRvIGFsbG93IHVuc2FmZS1ldmFsIG9yIHByZS1jb21waWxpbmcgeW91ciAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0ZW1wbGF0ZXMgaW50byByZW5kZXIgZnVuY3Rpb25zLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBjYWNoZVxuICAgICAgICB2Y
13835XIga2V5ID0gb3B0aW9ucy5kZWxpbWl0ZXJzXG4gICAgICAgICAgICA/IFN0cmluZyhvcHRpb25zLmRlbGltaXRlcnMpICsgdGVtcGxhdGVcbiAgICAgICAgICAgIDogdGVtcGxhdGU7XG4gICAgICAgIGlmIChjYWNoZVtrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVba2V5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb21waWxlXG4gICAgICAgIHZhciBjb21waWxlZCA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpO1xuICAgICAgICAvLyBjaGVjayBjb21waWxhdGlvbiBlcnJvcnMvdGlwc1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgaWYgKGNvbXBpbGVkLmVycm9ycyAmJiBjb21waWxlZC5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIuY29uY2F0KGUubXNnLCBcIlxcblxcblwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDb2RlRnJhbWUodGVtcGxhdGUsIGUuc3RhcnQsIGUuZW5kKSwgdm0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4oXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIuY29uY2F0KHRlbXBsYXRlLCBcIlxcblxcblwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZC5lcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiBcIi0gXCIuY29uY2F0KGUpOyB9KS5qb2luKCdcXG4nKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJywgdm0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb21waWxlZC50aXBzICYmIGNvbXBpbGVkLnRpcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiB0aXAoZS5tc2csIHZtKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb21waWxlZC50aXBzLmZvckVhY2goZnVuY3Rpb24gKG1zZykgeyByZXR1cm4gdGlwKG1zZywgdm0pOyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHVybiBjb2RlIGludG8gZnVuY3Rpb25zXG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgdmFyIGZuR2VuRXJyb3JzID0gW107XG4gICAgICAgIHJlcy5yZW5kZXIgPSBjcmVhdGVGdW5jdGlvbihjb21waWxlZC5yZW5kZXIsIGZuR2VuRXJyb3JzKTtcbiAgICAgICAgcmVzLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkLnN0YXRpY1JlbmRlckZucy5tYXAoZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbihjb2RlLCBmbkdlbkVycm9ycyk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBjaGVjayBmdW5jdGlvbiBnZW5lcmF0aW9uIGVycm9ycy5cbiAgICAgICAgLy8gdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlcmUgaXMgYSBidWcgaW4gdGhlIGNvbXBpbGVyIGl0c2VsZi5cbiAgICAgICAgLy8gbW9zdGx5IGZvciBjb2RlZ2VuIGRldmVsb3BtZW50IHVzZVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGlmICgoIWNvbXBpbGVkLmVycm9ycyB8fCAhY29tcGlsZWQuZXJyb3JzLmxlbmd0aCkgJiYgZm5HZW5FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2FybihcIkZhaWxlZCB0byBnZW5lcmF0ZSByZW5kZXIgZnVuY3Rpb246XFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBmbkdlbkVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBfYS5lcnIsIGNvZGUgPSBfYS5jb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGVyci50b1N0cmluZygpLCBcIiBpblxcblxcblwiKS5jb25jYXQoY29kZSwgXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignXFxuJyksIHZtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGNhY2hlW2tleV0gPSByZXMpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyQ3JlYXRvcihiYXNlQ29tcGlsZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBjcmVhdGVDb21waWxlcihiYXNlT3B0aW9ucykge1xuICAgICAgICBmdW5jdGlvbiBjb21waWxlKHRlbXBsYXRlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB2Y
13835XIgZmluYWxPcHRpb25zID0gT2JqZWN0LmNyZWF0ZShiYXNlT3B0aW9ucyk7XG4gICAgICAgICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICAgICAgICB2YXIgdGlwcyA9IFtdO1xuICAgICAgICAgICAgdmFyIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2gobXNnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgICAgICAgICAgIHZhciBsZWFkaW5nU3BhY2VMZW5ndGhfMSA9IHRlbXBsYXRlLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgd2FybiA9IGZ1bmN0aW9uIChtc2csIHJhbmdlLCB0aXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdHlwZW9mIG1zZyA9PT0gJ3N0cmluZycgPyB7IG1zZzogbXNnIH0gOiBtc2c7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQgKyBsZWFkaW5nU3BhY2VMZW5ndGhfMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlLmVuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZW5kID0gcmFuZ2UuZW5kICsgbGVhZGluZ1NwYWNlTGVuZ3RoXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2goZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG1lcmdlIGN1c3RvbSBtb2R1bGVzXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICBmaW5hbE9wdGlvbnMubW9kdWxlcyA9IChiYXNlT3B0aW9ucy5tb2R1bGVzIHx8IFtdKS5jb25jYXQob3B0aW9ucy5tb2R1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWVyZ2UgY3VzdG9tIGRpcmVjdGl2ZXNcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kaXJlY3RpdmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsT3B0aW9ucy5kaXJlY3RpdmVzID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMuZGlyZWN0aXZlcyB8fCBudWxsKSwgb3B0aW9ucy5kaXJlY3RpdmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY29weSBvdGhlciBvcHRpb25zXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ21vZHVsZXMnICYmIGtleSAhPT0gJ2RpcmVjdGl2ZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbE9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsT3B0aW9ucy53YXJuID0gd2FybjtcbiAgICAgICAgICAgIHZhciBjb21waWxlZCA9IGJhc2VDb21waWxlKHRlbXBsYXRlLnRyaW0oKSwgZmluYWxPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGV0ZWN0RXJyb3JzKGNvbXBpbGVkLmFzdCwgd2Fybik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21waWxlZC5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgICAgICBjb21waWxlZC50aXBzID0gdGlwcztcbiAgICAgICAgICAgIHJldHVybiBjb21waWxlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tcGlsZTogY29tcGlsZSxcbiAgICAgICAgICAgIGNvbXBpbGVUb0Z1bmN0aW9uczogY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25Gbihjb21waWxlKVxuICAgICAgICB9O1xuICAgIH07XG59XG5cbi8vIGBjcmVhdGVDb21waWxlckNyZWF0b3JgIGFsbG93cyBjcmVhdGluZyBjb21waWxlcnMgdGhhdCB1c2UgYWx0ZXJuYXRpdmVcbi8vIHBhcnNlci9vcHRpbWl6ZXIvY29kZWdlbiwgZS5nIHRoZSBTU1Igb3B0aW1pemluZyBjb21waWxlci5cbi8vIEhlcmUgd2UganVzdCBleHBvcnQgYSBkZWZhdWx0IGNvbXBpbGVyIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRzLlxudmFyIGNyZWF0ZUNvbXBpbGVyID0gY3JlYXRlQ29tcGlsZXJDcmVhdG9yKGZ1bmN0aW9uIGJhc2VDb21waWxlKHRlbXBsYXRlLCBvcHRpb25zKSB7XG4gICAgdmFyIGFzdCA9IHBhcnNlKHRlbXBsYXRlLnRyaW0oKSwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMub3B0aW1pemUgIT09IGZhbHNlKSB7XG4gICAgICAgIG9wdGltaXplKGFzdCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHZhciBjb2RlID0gZ2VuZXJhdGUoYXN0LCBvcHRpb25zKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhc3Q6IGFzdCxcbiAgICAgICAgcmVuZGVyOiBjb2RlLnJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBjb2RlLnN0YXRpY1JlbmRlckZuc1xuICAgIH07XG59KTtcblxudmFyIF9hID0gY3JlYXRlQ29tcGlsZXIoYmFzZU9wdGlvbnMpLCBjb21waWxlVG9GdW5jdGlvbnMgPSBfYS5jb21waWxlVG9GdW5jdGlvbnM7XG5cbi8vIGNoZWNrIHdoZXRoZXIgY3VycmVudCBicm93c2VyIGVuY29kZXMgYSBjaGFyIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzXG52YXIgZGl2O1xuZnVuY3Rpb24gZ2V0U2hvdWxkRGVjb2RlKGhyZWYpIHtcbiAgICBkaXYgPSBkaXYgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmlubmVySFRNTCA9IGhyZWYgPyBcIjxhIGhyZWY9XFxcIlxcblxcXCIvPlwiIDogXCI8ZGl2IGE9XFxcIlxcblxcXCIvPlwiO1xuICAgIHJldHVybi
13835BkaXYuaW5uZXJIVE1MLmluZGV4T2YoJyYjMTA7JykgPiAwO1xufVxuLy8gIzM2NjM6IElFIGVuY29kZXMgbmV3bGluZXMgaW5zaWRlIGF0dHJpYnV0ZSB2YWx1ZXMgd2hpbGUgb3RoZXIgYnJvd3NlcnMgZG9uJ3RcbnZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IGluQnJvd3NlciA/IGdldFNob3VsZERlY29kZShmYWxzZSkgOiBmYWxzZTtcbi8vICM2ODI4OiBjaHJvbWUgZW5jb2RlcyBjb250ZW50IGluIGFbaHJlZl1cbnZhciBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYgPSBpbkJyb3dzZXJcbiAgICA/IGdldFNob3VsZERlY29kZSh0cnVlKVxuICAgIDogZmFsc2U7XG5cbnZhciBpZFRvVGVtcGxhdGUgPSBjYWNoZWQoZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGVsID0gcXVlcnkoaWQpO1xuICAgIHJldHVybiBlbCAmJiBlbC5pbm5lckhUTUw7XG59KTtcbnZhciBtb3VudCA9IFZ1ZS5wcm90b3R5cGUuJG1vdW50O1xuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoZWwsIGh5ZHJhdGluZykge1xuICAgIGVsID0gZWwgJiYgcXVlcnkoZWwpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChlbCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgIHdhcm4kMihcIkRvIG5vdCBtb3VudCBWdWUgdG8gPGh0bWw+IG9yIDxib2R5PiAtIG1vdW50IHRvIG5vcm1hbCBlbGVtZW50cyBpbnN0ZWFkLlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICAvLyByZXNvbHZlIHRlbXBsYXRlL2VsIGFuZCBjb252ZXJ0IHRvIHJlbmRlciBmdW5jdGlvblxuICAgIGlmICghb3B0aW9ucy5yZW5kZXIpIHtcbiAgICAgICAgdmFyIHRlbXBsYXRlID0gb3B0aW9ucy50ZW1wbGF0ZTtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IGlkVG9UZW1wbGF0ZSh0ZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4kMihcIlRlbXBsYXRlIGVsZW1lbnQgbm90IGZvdW5kIG9yIGlzIGVtcHR5OiBcIi5jb25jYXQob3B0aW9ucy50ZW1wbGF0ZSksIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGVtcGxhdGUubm9kZVR5cGUpIHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLmlubmVySFRNTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMignaW52YWxpZCB0ZW1wbGF0ZSBvcHRpb246JyArIHRlbXBsYXRlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZWwpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIHRlbXBsYXRlID0gZ2V0T3V0ZXJIVE1MKGVsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICAgICAgICBtYXJrKCdjb21waWxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2Y
13835XIgX2EgPSBjb21waWxlVG9GdW5jdGlvbnModGVtcGxhdGUsIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRTb3VyY2VSYW5nZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcbiAgICAgICAgICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lczogc2hvdWxkRGVjb2RlTmV3bGluZXMsXG4gICAgICAgICAgICAgICAgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmOiBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXG4gICAgICAgICAgICAgICAgZGVsaW1pdGVyczogb3B0aW9ucy5kZWxpbWl0ZXJzLFxuICAgICAgICAgICAgICAgIGNvbW1lbnRzOiBvcHRpb25zLmNvbW1lbnRzXG4gICAgICAgICAgICB9LCB0aGlzKSwgcmVuZGVyID0gX2EucmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgPSBfYS5zdGF0aWNSZW5kZXJGbnM7XG4gICAgICAgICAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlcjtcbiAgICAgICAgICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICAgICAgICAgIG1hcmsoJ2NvbXBpbGUgZW5kJyk7XG4gICAgICAgICAgICAgICAgbWVhc3VyZShcInZ1ZSBcIi5jb25jYXQodGhpcy5fbmFtZSwgXCIgY29tcGlsZVwiKSwgJ2NvbXBpbGUnLCAnY29tcGlsZSBlbmQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW91bnQuY2FsbCh0aGlzLCBlbCwgaHlkcmF0aW5nKTtcbn07XG4vKipcbiAqIEdldCBvdXRlckhUTUwgb2YgZWxlbWVudHMsIHRha2luZyBjYXJlXG4gKiBvZiBTVkcgZWxlbWVudHMgaW4gSUUgYXMgd2VsbC5cbiAqL1xuZnVuY3Rpb24gZ2V0T3V0ZXJIVE1MKGVsKSB7XG4gICAgaWYgKGVsLm91dGVySFRNTCkge1xuICAgICAgICByZXR1cm4gZWwub3V0ZXJIVE1MO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWwuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5pbm5lckhUTUw7XG4gICAgfVxufVxuVnVlLmNvbXBpbGUgPSBjb21waWxlVG9GdW5jdGlvbnM7XG5cbmV4cG9ydCB7IEVmZmVjdFNjb3BlLCBjb21wdXRlZCwgY3VzdG9tUmVmLCBWdWUgYXMgZGVmYXVsdCwgZGVmaW5lQXN5bmNDb21wb25lbnQsIGRlZmluZUNvbXBvbmVudCwgZGVsLCBlZmZlY3RTY29wZSwgZ2V0Q3VycmVudEluc3RhbmNlLCBnZXRDdXJyZW50U2NvcGUsIGgsIGluamVjdCwgaXNQcm94eSwgaXNSZWFjdGl2ZSwgaXNSZWFkb25seSwgaXNSZWYsIGlzU2hhbGxvdywgbWFya1JhdywgbWVyZ2VEZWZhdWx0cywgbmV4dFRpY2ssIG9uQWN0aXZhdGVkLCBvbkJlZm9yZU1vdW50LCBvbkJlZm9yZVVubW91bnQsIG9uQmVmb3JlVXBkYXRlLCBvbkRlYWN0aXZhdGVkLCBvbkVycm9yQ2FwdHVyZWQsIG9uTW91bnRlZCwgb25SZW5kZXJUcmFja2VkLCBvblJlbmRlclRyaWdnZXJlZCwgb25TY29wZURpc3Bvc2UsIG9uU2VydmVyUHJlZmV0Y2gsIG9uVW5tb3VudGVkLCBvblVwZGF0ZWQsIHByb3ZpZGUsIHByb3h5UmVmcywgcmVhY3RpdmUsIHJlYWRvbmx5LCByZWYkMSBhcyByZWYsIHNldCwgc2hhbGxvd1JlYWN0aXZlLCBzaGFsbG93UmVhZG9ubHksIHNoYWxsb3dSZWYsIHRvUmF3LCB0b1JlZiwgdG9SZWZzLCB0cmlnZ2VyUmVmLCB1bnJlZiwgdXNlQXR0cnMsIHVzZUNzc01vZHVsZSwgdXNlQ3NzVmFycywgdXNlTGlzdGVuZXJzLCB1c2VTbG90cywgdmVyc2lvbiwgd2F0Y2gsIHdhdGNoRWZmZWN0LCB3YXRjaFBvc3RFZmZlY3QsIHdhdGNoU3luY0VmZmVjdCB9O1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9PcGVuaW5nSG91cnNTdGF0dXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc5ZTI5MGI4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi92YXIvd3d3L3Z1ZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3OWUyOTBiOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3OWUyOTBiOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3OWUyOTBiOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vT3BlbmluZ0hvdXJzU3RhdHVzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OWUyOTBiOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3OWUyOTBiOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiYXBwL2NvbXBvbmVudHMvT3BlbmluZ0hvdXJzL09wZW5pbmdIb3Vyc1N0YXR1cy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vT3BlbmluZ0hvdXJzU3RhdHVzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/cnVsZVNldFsxXS5ydWxlc1syXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL09wZW5pbmdIb3Vyc1N0YXR1cy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzllMjkwYjgmXCIiLCIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovLFxuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPVxuICAgIHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7XG4gICAgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpbmplY3RTdHlsZXMuY2FsbChcbiAgICAgICAgICAgI
13835HRoaXMsXG4gICAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9uYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24oaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaykgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZS
13835hmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3IsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgIFwiZGVmYXVsdFwiOiBvYmpcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIGV4cG9ydHMgPSB7fSxcbiAgICBPcCA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksXG4gICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKG9iaiwga2V5LCBkZXNjKSB7XG4gICAgICBvYmpba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgfSxcbiAgICAkU3ltYm9sID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLFxuICAgICAgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpLFxuICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcbiAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZ2VuZXJhdG9yLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dClcbiAgICB9KSwgZ2VuZXJhdG9yO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpICYmIChJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgI
13835HJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsXG4gICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBcIm9iamVjdFwiID09IF90eXBlb2YodmFsdWUpICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkgOiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQsIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICAgICAgaWYgKFwiZXhlY3V0aW5nXCIgPT09IHN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKFwiY29tcGxldGVkXCIgPT09IHN0YXRlKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IG1ldGhvZCkgdGhyb3cgYXJnO1xuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgZm9yIChjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZCwgY29udGV4dC5hcmcgPSBhcmc7Oykge1xuICAgICAgICB2Y
13835XIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKFwic3VzcGVuZGVkU3RhcnRcIiA9PT0gc3RhdGUpIHRocm93IHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5hcmc7XG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBjb250ZXh0Lm1ldGhvZCAmJiBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIHN0YXRlID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZCxcbiAgICAgIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZE5hbWVdO1xuICAgIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCkgcmV0dXJuIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG1ldGhvZE5hbWUgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBtZXRob2ROYW1lICYmIChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBtZXRob2ROYW1lICsgXCInIG1ldGhvZFwiKSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgcmV0dXJuIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcsIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcbiAgICByZXR1cm4gaW5mbyA/IGluZm8uZG9uZSA/IChjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZSwgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gY29udGV4dC5tZXRob2QgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpIDogaW5mbyA6IChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG4gICAgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIHJlY29yZC5hcmcsIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2Y
13835XIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGl0ZXJhYmxlLm5leHQpIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHJldHVybiBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV0sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZG9uZVJlc3VsdFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGRvbmU6ICEwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgZGVmaW5lUHJvcGVydHkoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZ2VuRnVuICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpO1xuICB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6IChnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApLCBnZW5GdW47XG4gIH0sIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICB2b2lkIDAgPT09IFByb21pc2VJbXBsICYmIChQcm9taXNlSW1wbCA9IFByb21pc2UpO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKSxcbiAgICAgIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cy5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsga2V5cy5sZW5ndGg7KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSBcInRcIiA9PT0gbmFtZS5jaGFyQXQoMCkgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSAmJiAodGhpc1tuYW1lXSA9IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzdG9wOi
13835BmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiLCByZWNvcmQuYXJnID0gZXhjZXB0aW9uLCBjb250ZXh0Lm5leHQgPSBsb2MsIGNhdWdodCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCAhIWNhdWdodDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldLFxuICAgICAgICAgIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzRmluYWxseSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2Y
13835XIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluYWxseUVudHJ5ICYmIChcImJyZWFrXCIgPT09IHR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0eXBlKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MgJiYgKGZpbmFsbHlFbnRyeSA9IG51bGwpO1xuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2Y
13835XIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSByZXR1cm4gdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkoZW50cnkpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9LCBleHBvcnRzO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yob2JqKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYn
13835BhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBPcGVuaW5nSG91cnNTdGF0dXMgZnJvbSBcIi4vY29tcG9uZW50cy9PcGVuaW5nSG91cnMvT3BlbmluZ0hvdXJzU3RhdHVzXCI7XG5cbi8vIFN1cHBvcnQgbXVsdGlwbGUgdnVlIGNvbnRhY3QgY2FyZHMgb24gb25lIHBhZ2UuXG5jb25zdCB2dWVFbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ2dWUtb3BlbmluZy1ob3Vycy1zdGF0dXNcIik7XG5jb25zdCBjb3VudCA9IHZ1ZUVsZW1lbnRzLmxlbmd0aDtcbmZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAvLyBDcmVhdGUgYSB2dWUgaW5zdGFuY2UgcGVyIG9wZW5pbmcgaG91cnMgY29tcG9uZW50LlxuICBuZXcgVnVlKHtcbiAgICBlbDogdnVlRWxlbWVudHNbaV0sXG4gICAgY29tcG9uZW50czoge09wZW5pbmdIb3Vyc1N0YXR1c31cbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiX2F4aW9zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJ1cGFsU2V0dGluZ3MiLCJkcnVwYWxTZXR0aW5ncyIsIm9wZW5pbmdIb3VycyIsInBhdGgiLCJfb3BlbmluZ0hvdXJzJGFwaUJhc2UiLCJhcGlCYXNlVXJsIiwiX3BhdGgkcGF0aFByZWZpeCIsInBhdGhQcmVmaXgiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwiYXhpb3MiLCJjcmVhdGUiLCJiYXNlVVJMIiwiY29uY2F0Iiwid2luZG93IiwibG9jYXRpb24iLCJvcmlnaW4iLCJoZWFkZXJzIiwibW9kdWxlIiwidXRpbHMiLCJzZXR0bGUiLCJjb29raWVzIiwiYnVpbGRVUkwiLCJidWlsZEZ1bGxQYXRoIiwicGFyc2VIZWFkZXJzIiwiaXNVUkxTYW1lT3JpZ2luIiwiY3JlYXRlRXJyb3IiLCJ4aHJBZGFwdGVyIiwiY29uZmlnIiwiUHJvbWlzZSIsImRpc3BhdGNoWGhyUmVxdWVzdCIsInJlc29sdmUiLCJyZWplY3QiLCJyZXF1ZXN0RGF0YSIsImRhdGEiLCJyZXF1ZXN0SGVhZGVycyIsInJlc3BvbnNlVHlwZSIsImlzRm9ybURhdGEiLCJyZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3QiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQXV0aG9yaXphdGlvbiIsImJ0b2EiLCJmdWxsUGF0aCIsInVybCIsIm9wZW4iLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsInBhcmFtcyIsInBhcmFtc1NlcmlhbGl6ZXIiLCJ0aW1lb3V0Iiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VEYXRhIiwicmVzcG9uc2VUZXh0IiwicmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiaGFuZGxlTG9hZCIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsImluZGV4T2YiLCJzZXRUaW1lb3V0Iiwib25hYm9ydCIsImhhbmRsZUFib3J0Iiwib25lcnJvciIsImhhbmRsZUVycm9yIiwib250aW1lb3V0IiwiaGFuZGxlVGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJ0cmFuc2l0aW9uYWwiLCJjbGFyaWZ5VGltZW91dEVycm9yIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJ4c3JmVmFsdWUiLCJ3aXRoQ3JlZGVudGlhbHMiLCJ4c3JmQ29va2llTmFtZSIsInJlYWQiLCJ1bmRlZmluZWQiLCJ4c3JmSGVhZGVyTmFtZSIsImZvckVhY2giLCJzZXRSZXF1ZXN0SGVhZGVyIiwidmFsIiwia2V5IiwidG9Mb3dlckNhc2UiLCJpc1VuZGVmaW5lZCIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkIiwiY2FuY2VsVG9rZW4iLCJwcm9taXNlIiwidGhlbiIsIm9uQ2FuY2VsZWQiLCJjYW5jZWwiLCJhYm9ydCIsInNlbmQiLCJiaW5kIiwiQXhpb3MiLCJtZXJnZUNvbmZpZyIsImRlZmF1bHRzIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiY29udGV4dCIsImluc3RhbmNlIiwicHJvdG90eXBlIiwiZXh0ZW5kIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWwiLCJDYW5jZWxUb2tlbiIsImlzQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJpc0F4aW9zRXJyb3IiLCJtZXNzYWdlIiwidG9TdHJpbmciLCJfX0NBTkNFTF9fIiwiZXhlY3V0b3IiLCJUeXBlRXJyb3IiLCJyZXNvbHZlUHJvbWlzZSIsInByb21pc2VFeGVjdXRvciIsInRva2VuIiwicmVhc29uIiwidGhyb3dJZlJlcXVlc3RlZCIsInNvdXJjZSIsImMiLCJ2YWx1ZSIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsInZhbGlkYXRvciIsInZhbGlkYXRvcnMiLCJpbnRlcmNlcHRvcnMiLCJhcmd1bWVudHMiLCJhc3NlcnRPcHRpb25zIiwic2lsZW50SlNPTlBhcnNpbmciLCJib29sZWFuIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVx
13835dWVzdEludGVyY2VwdG9ycyIsInVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJydW5XaGVuIiwic3luY2hyb25vdXMiLCJ1bnNoaWZ0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMiLCJwdXNoIiwiY2hhaW4iLCJBcnJheSIsImFwcGx5IiwibGVuZ3RoIiwic2hpZnQiLCJuZXdDb25maWciLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJlcnJvciIsImdldFVyaSIsInJlcGxhY2UiLCJmb3JFYWNoTWV0aG9kTm9EYXRhIiwiZm9yRWFjaE1ldGhvZFdpdGhEYXRhIiwiaGFuZGxlcnMiLCJ1c2UiLCJvcHRpb25zIiwiZWplY3QiLCJpZCIsImZuIiwiZm9yRWFjaEhhbmRsZXIiLCJoIiwiaXNBYnNvbHV0ZVVSTCIsImNvbWJpbmVVUkxzIiwicmVxdWVzdGVkVVJMIiwiZW5oYW5jZUVycm9yIiwiY29kZSIsIkVycm9yIiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJjYWxsIiwidHJhbnNmb3JtUmVxdWVzdCIsIm1lcmdlIiwiY29tbW9uIiwiY2xlYW5IZWFkZXJDb25maWciLCJhZGFwdGVyIiwib25BZGFwdGVyUmVzb2x1dGlvbiIsInRyYW5zZm9ybVJlc3BvbnNlIiwib25BZGFwdGVyUmVqZWN0aW9uIiwidG9KU09OIiwibmFtZSIsImRlc2NyaXB0aW9uIiwibnVtYmVyIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwic3RhY2siLCJjb25maWcxIiwiY29uZmlnMiIsInZhbHVlRnJvbUNvbmZpZzJLZXlzIiwibWVyZ2VEZWVwUHJvcGVydGllc0tleXMiLCJkZWZhdWx0VG9Db25maWcyS2V5cyIsImRpcmVjdE1lcmdlS2V5cyIsImdldE1lcmdlZFZhbHVlIiwidGFyZ2V0IiwiaXNQbGFpbk9iamVjdCIsImlzQXJyYXkiLCJzbGljZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJwcm9wIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJheGlvc0tleXMiLCJvdGhlcktleXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiZmlsdGVyQXhpb3NLZXlzIiwidmFsaWRhdGVTdGF0dXMiLCJmbnMiLCJ0cmFuc2Zvcm0iLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJnZXREZWZhdWx0QWRhcHRlciIsInByb2Nlc3MiLCJzdHJpbmdpZnlTYWZlbHkiLCJyYXdWYWx1ZSIsInBhcnNlciIsImVuY29kZXIiLCJpc1N0cmluZyIsIkpTT04iLCJwYXJzZSIsInRyaW0iLCJlIiwic3RyaW5naWZ5IiwiaXNBcnJheUJ1ZmZlciIsImlzQnVmZmVyIiwiaXNTdHJlYW0iLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0FycmF5QnVmZmVyVmlldyIsImJ1ZmZlciIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNPYmplY3QiLCJzdHJpY3RKU09OUGFyc2luZyIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwidGhpc0FyZyIsIndyYXAiLCJhcmdzIiwiaSIsImVuY29kZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInNlcmlhbGl6ZSIsInBhcnNlVmFsdWUiLCJ2IiwiaXNEYXRlIiwidG9JU09TdHJpbmciLCJqb2luIiwiaGFzaG1hcmtJbmRleCIsInJlbGF0aXZlVVJMIiwic3RhbmRhcmRCcm93c2VyRW52Iiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiaXNOdW1iZXIiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJkb2N1bWVudCIsIm1hdGNoIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwibm93Iiwibm9uU3RhbmRhcmRCcm93c2VyRW52IiwidGVzdCIsInBheWxvYWQiLCJtc2llIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50Iiwib3JpZ2luVVJMIiwicmVzb2x2ZVVSTCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJyZXF1ZXN0VVJMIiwicGFyc2VkIiwibm9ybWFsaXplZE5hbWUiLCJwcm9jZXNzSGVhZGVyIiwiaWdub3JlRHVwbGljYXRlT2YiLCJzcGxpdCIsImxpbmUiLCJzdWJzdHIiLCJjYWxsYmFjayIsImFyciIsInBrZyIsInR5cGUiLCJ0aGluZyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsImN1cnJlbnRWZXJBcnIiLCJ2ZXJzaW9uIiwiaXNPbGRlclZlcnNpb24iLCJ0aGFuVmVyc2lvbiIsInBrZ1ZlcnNpb25BcnIiLCJkZXN0VmVyIiwiaXNEZXByZWNhdGVkIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiY29uc29sZSIsIndhcm4iLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJyZXN1bHQiLCJjb25zdHJ1Y3RvciIsIkZvcm1EYXRhIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJnZXRQcm90b3R5cGVPZiIsImlzRnVuY3Rpb24iLCJwaXBlIiwiVVJMU2VhcmNoUGFyYW1zIiwic3RyIiwicHJvZHVjdCIsIm9iaiIsImwiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnblZhbHVlIiwiYSIsImIiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0IiwiX2FwaSIsInByb3BzIiwibmlkIiwiU3RyaW5nIiwiZmllbGROYW1lIiwiRHJ1cGFsIiwib3BlbmluZ0hvdXIiLCJjb21wdXRlZCIsImlzUGFya2luZ1BhZ2UiLCJib2R5IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJvcGVuaW5nSG91ck1lc3NhZ2UiLCJ0Iiwib3BlbmluZ0hvdXJDbGFzcyIsIm9wZW5zX3Nvb24iLCJjbG9zZXNfc29vbiIsImNsb3NlZCIsIm1ldGhvZHMiLCJnZXRPcGVuaW5nSG91cnMiLCJfdGhpcyIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiQXBpIiwiZ2V0IiwiX3JlZiIsInNlbnQiLCJzdG9wIiwiY3JlYXRlZCIsInJlbmRlciIsIl92bSIsIl9jIiwiX3NlbGYiLCJzdGF0aWNDbGFzcyIsImNsYXNzIiwiZG9tUHJvcHMiLCJpbm5lckhUTUwiLCJfcyIsIl92Iiwic3RhcnQiLCJlbmQiLCJfZSIsInN0YXRpY1JlbmRlckZucyIsIl93aXRoU3RyaXBwZWQiLCJlbXB0eU9iamVjdCIsImZyZWV6ZSIsImlzVW5kZWYiLCJpc0RlZiIsImlzVHJ1ZSIsImlzRmFsc2UiLCJpc1ByaW1pdGl2ZSIsIl90b1N0cmluZyIsInRvUmF3VHlwZSIsImlzUmVnRXhwIiwiaXNWYWxpZEFycmF
138355SW5kZXgiLCJuIiwicGFyc2VGbG9hdCIsIk1hdGgiLCJmbG9vciIsImlzRmluaXRlIiwiaXNQcm9taXNlIiwiY2F0Y2giLCJ0b051bWJlciIsImlzTmFOIiwibWFrZU1hcCIsImV4cGVjdHNMb3dlckNhc2UiLCJtYXAiLCJsaXN0IiwiaXNCdWlsdEluVGFnIiwiaXNSZXNlcnZlZEF0dHJpYnV0ZSIsInJlbW92ZSQyIiwiaXRlbSIsImxlbiIsImluZGV4Iiwic3BsaWNlIiwiaGFzT3duIiwiY2FjaGVkIiwiY2FjaGUiLCJjYWNoZWRGbiIsImhpdCIsImNhbWVsaXplUkUiLCJjYW1lbGl6ZSIsIl8iLCJjYXBpdGFsaXplIiwiaHlwaGVuYXRlUkUiLCJoeXBoZW5hdGUiLCJwb2x5ZmlsbEJpbmQiLCJjdHgiLCJib3VuZEZuIiwiX2xlbmd0aCIsIm5hdGl2ZUJpbmQiLCJiaW5kJDEiLCJGdW5jdGlvbiIsInRvQXJyYXkiLCJyZXQiLCJ0byIsIl9mcm9tIiwidG9PYmplY3QiLCJyZXMiLCJub29wIiwibm8iLCJpZGVudGl0eSIsImdlblN0YXRpY0tleXMkMSIsIm1vZHVsZXMiLCJyZWR1Y2UiLCJtIiwic3RhdGljS2V5cyIsImxvb3NlRXF1YWwiLCJpc09iamVjdEEiLCJpc09iamVjdEIiLCJpc0FycmF5QSIsImlzQXJyYXlCIiwiZXZlcnkiLCJnZXRUaW1lIiwia2V5c0EiLCJrZXlzQiIsImxvb3NlSW5kZXhPZiIsIm9uY2UiLCJjYWxsZWQiLCJoYXNDaGFuZ2VkIiwieCIsInkiLCJTU1JfQVRUUiIsIkFTU0VUX1RZUEVTIiwiTElGRUNZQ0xFX0hPT0tTIiwib3B0aW9uTWVyZ2VTdHJhdGVnaWVzIiwic2lsZW50IiwicHJvZHVjdGlvblRpcCIsImVudiIsIk5PREVfRU5WIiwiZGV2dG9vbHMiLCJwZXJmb3JtYW5jZSIsImVycm9ySGFuZGxlciIsIndhcm5IYW5kbGVyIiwiaWdub3JlZEVsZW1lbnRzIiwia2V5Q29kZXMiLCJpc1Jlc2VydmVkVGFnIiwiaXNSZXNlcnZlZEF0dHIiLCJpc1Vua25vd25FbGVtZW50IiwiZ2V0VGFnTmFtZXNwYWNlIiwicGFyc2VQbGF0Zm9ybVRhZ05hbWUiLCJtdXN0VXNlUHJvcCIsImFzeW5jIiwiX2xpZmVjeWNsZUhvb2tzIiwidW5pY29kZVJlZ0V4cCIsImlzUmVzZXJ2ZWQiLCJkZWYiLCJlbnVtZXJhYmxlIiwiZGVmaW5lUHJvcGVydHkiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsImJhaWxSRSIsInBhcnNlUGF0aCIsInNlZ21lbnRzIiwiaGFzUHJvdG8iLCJpbkJyb3dzZXIiLCJVQSIsImlzSUUiLCJpc0lFOSIsImlzRWRnZSIsImlzSU9TIiwiaXNGRiIsIm5hdGl2ZVdhdGNoIiwid2F0Y2giLCJzdXBwb3J0c1Bhc3NpdmUiLCJfaXNTZXJ2ZXIiLCJpc1NlcnZlclJlbmRlcmluZyIsImdsb2JhbCIsIlZVRV9FTlYiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwiaXNOYXRpdmUiLCJDdG9yIiwiaGFzU3ltYm9sIiwiU3ltYm9sIiwiUmVmbGVjdCIsIm93bktleXMiLCJfU2V0IiwiU2V0Iiwic2V0IiwiaGFzIiwiYWRkIiwiY2xlYXIiLCJjdXJyZW50SW5zdGFuY2UiLCJnZXRDdXJyZW50SW5zdGFuY2UiLCJwcm94eSIsInNldEN1cnJlbnRJbnN0YW5jZSIsInZtIiwiX3Njb3BlIiwib2ZmIiwib24iLCJWTm9kZSIsInRhZyIsImNoaWxkcmVuIiwidGV4dCIsImVsbSIsImNvbXBvbmVudE9wdGlvbnMiLCJhc3luY0ZhY3RvcnkiLCJucyIsImZuQ29udGV4dCIsImZuT3B0aW9ucyIsImZuU2NvcGVJZCIsImNvbXBvbmVudEluc3RhbmNlIiwicGFyZW50IiwicmF3IiwiaXNTdGF0aWMiLCJpc1Jvb3RJbnNlcnQiLCJpc0NvbW1lbnQiLCJpc0Nsb25lZCIsImlzT25jZSIsImFzeW5jTWV0YSIsImlzQXN5bmNQbGFjZWhvbGRlciIsImNyZWF0ZUVtcHR5Vk5vZGUiLCJub2RlIiwiY3JlYXRlVGV4dFZOb2RlIiwiY2xvbmVWTm9kZSIsInZub2RlIiwiY2xvbmVkIiwiaW5pdFByb3h5IiwiYWxsb3dlZEdsb2JhbHNfMSIsIndhcm5Ob25QcmVzZW50XzEiLCJ3YXJuJDIiLCJ3YXJuUmVzZXJ2ZWRQcmVmaXhfMSIsImhhc1Byb3h5XzEiLCJQcm94eSIsImlzQnVpbHRJbk1vZGlmaWVyXzEiLCJoYXNIYW5kbGVyXzEiLCJpc0FsbG93ZWQiLCIkZGF0YSIsImdldEhhbmRsZXJfMSIsIiRvcHRpb25zIiwiX3JlbmRlclByb3h5IiwiX19hc3NpZ24iLCJhc3NpZ24iLCJzIiwicCIsInVpZCQyIiwicGVuZGluZ0NsZWFudXBEZXBzIiwiY2xlYW51cERlcHMiLCJkZXAiLCJzdWJzIiwiX3BlbmRpbmciLCJEZXAiLCJhZGRTdWIiLCJzdWIiLCJyZW1vdmVTdWIiLCJkZXBlbmQiLCJpbmZvIiwiYWRkRGVwIiwib25UcmFjayIsImVmZmVjdCIsIm5vdGlmeSIsInNvcnQiLCJvblRyaWdnZXIiLCJ1cGRhdGUiLCJ0YXJnZXRTdGFjayIsInB1c2hUYXJnZXQiLCJwb3BUYXJnZXQiLCJwb3AiLCJhcnJheVByb3RvIiwiYXJyYXlNZXRob2RzIiwibWV0aG9kc1RvUGF0Y2giLCJvcmlnaW5hbCIsIm11dGF0b3IiLCJfaSIsIm9iIiwiX19vYl9fIiwiaW5zZXJ0ZWQiLCJvYnNlcnZlQXJyYXkiLCJhcnJheUtleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiTk9fSU5JSVRJQUxfVkFMVUUiLCJzaG91bGRPYnNlcnZlIiwidG9nZ2xlT2JzZXJ2aW5nIiwibW9ja0RlcCIsIk9ic2VydmVyIiwic2hhbGxvdyIsIm1vY2siLCJ2bUNvdW50IiwiX19wcm90b19fIiwiZGVmaW5lUmVhY3RpdmUiLCJvYnNlcnZlIiwic3NyTW9ja1JlYWN0aXZpdHkiLCJpc0V4dGVuc2libGUiLCJfX3Zfc2tpcCIsImlzUmVmIiwiY3VzdG9tU2V0dGVyIiwicHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXR0ZXIiLCJzZXR0ZXIiLCJjaGlsZE9iIiwicmVhY3RpdmVHZXR0ZXIiLCJkZXBlbmRBcnJheSIsInJlYWN0aXZlU2V0dGVyIiwibmV3VmFsIiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsImlzUmVhZG9ubHkiLCJtYXgiLCJfaXNWdWUiLCJkZWwiLCJyZWFjdGl2ZSIsIm1ha2VSZWFjdGl2ZSIsInNoYWxsb3dSZWFjdGl2ZSIsImV4aXN0aW5nT2IiLCJpc0NvbGxlY3Rpb25UeXBlIiwiaXNSZWFjdGl2ZSIsImlzU2hhbGxvdyIsIl9fdl9pc1NoYWxsb3ciLCJfX3ZfaXNSZWFkb25seSIsImlzUHJveHkiLCJ0b1JhdyIsIm9ic2VydmVkIiwibWFya1JhdyIsIlJlZkZsYWciLCJyIiwiX192X2lzUmVmIiwicmVmJDEiLCJjcmVhdGVSZWYiLCJzaGFsbG93UmVmIiwicmVmIiwidHJpZ2dlclJlZiIsInVucmVmIiwicHJveHlSZWZzIiwib2JqZWN0V2l0aFJlZnMiLCJwcm94eVdpdGhSZWZVbndyYXAiLCJjdXN0b21SZWYiLCJmYWN0b3J5IiwiX2EiLCJ0b1JlZnMiLCJvYmplY3QiLCJ0b1JlZiIsImRlZmF1bHRWYWx1ZSIsInJhd1RvUmVhZG9ubHlGbGFnIiwicmF3VG9TaGFsbG93UmVhZG9ubHlGbGFnIiwicmVhZG9ubHkiLCJjcmVhdGVSZWFkb25seSIsImV4aXN0aW5nRmxhZyIsImV4aXN0aW5nUHJveHkiLCJkZWZpbmVSZWFkb25seVByb3BlcnR5Iiwic2hhbGxvd1JlYWRvbmx5IiwiZ2V0dGVyT3JPcHRpb25zIiwiZGVidWdPcHRpb25zIiwib25seUdldHRlciIsIndhdGNoZXIiLCJXYXRjaGVyIiwibGF6eSIsImRpcnR5IiwiZXZhbHVhdGUiLCJtZWFzdXJlIiwicGVyZl8xIiwiY2xlYXJNYXJrcyIsImNsZWFyTWVhc3VyZXMiLCJzdGFydFRhZyIsImVuZF
13835RhZyIsIm5vcm1hbGl6ZUV2ZW50IiwicGFzc2l2ZSIsImNhcHR1cmUiLCJjcmVhdGVGbkludm9rZXIiLCJpbnZva2VyIiwiaW52b2tlV2l0aEVycm9ySGFuZGxpbmciLCJ1cGRhdGVMaXN0ZW5lcnMiLCJvbGRPbiIsImNyZWF0ZU9uY2VIYW5kbGVyIiwiY3VyIiwib2xkIiwiZXZlbnQiLCJtZXJnZVZOb2RlSG9vayIsImhvb2tLZXkiLCJob29rIiwib2xkSG9vayIsIndyYXBwZWRIb29rIiwibWVyZ2VkIiwiZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YSIsInByb3BPcHRpb25zIiwiYXR0cnMiLCJhbHRLZXkiLCJrZXlJbkxvd2VyQ2FzZSIsInRpcCIsImZvcm1hdENvbXBvbmVudE5hbWUiLCJjaGVja1Byb3AiLCJwcmVzZXJ2ZSIsInNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuIiwibm9ybWFsaXplQ2hpbGRyZW4iLCJub3JtYWxpemVBcnJheUNoaWxkcmVuIiwiaXNUZXh0Tm9kZSIsIm5lc3RlZEluZGV4IiwibGFzdEluZGV4IiwibGFzdCIsIl9pc1ZMaXN0IiwiU0lNUExFX05PUk1BTElaRSIsIkFMV0FZU19OT1JNQUxJWkUiLCJjcmVhdGVFbGVtZW50JDEiLCJub3JtYWxpemF0aW9uVHlwZSIsImFsd2F5c05vcm1hbGl6ZSIsIl9jcmVhdGVFbGVtZW50IiwiaXMiLCJzY29wZWRTbG90cyIsIiR2bm9kZSIsIm5hdGl2ZU9uIiwicHJlIiwicmVzb2x2ZUFzc2V0IiwiY3JlYXRlQ29tcG9uZW50IiwiYXBwbHlOUyIsInJlZ2lzdGVyRGVlcEJpbmRpbmdzIiwiZm9yY2UiLCJjaGlsZCIsInN0eWxlIiwidHJhdmVyc2UiLCJyZW5kZXJMaXN0IiwiaXRlcmF0b3IiLCJkb25lIiwicmVuZGVyU2xvdCIsImZhbGxiYWNrUmVuZGVyIiwiYmluZE9iamVjdCIsInNjb3BlZFNsb3RGbiIsIiRzY29wZWRTbG90cyIsIm5vZGVzIiwiJHNsb3RzIiwic2xvdCIsIiRjcmVhdGVFbGVtZW50IiwicmVzb2x2ZUZpbHRlciIsImlzS2V5Tm90TWF0Y2giLCJleHBlY3QiLCJhY3R1YWwiLCJjaGVja0tleUNvZGVzIiwiZXZlbnRLZXlDb2RlIiwiYnVpbHRJbktleUNvZGUiLCJldmVudEtleU5hbWUiLCJidWlsdEluS2V5TmFtZSIsIm1hcHBlZEtleUNvZGUiLCJiaW5kT2JqZWN0UHJvcHMiLCJhc1Byb3AiLCJpc1N5bmMiLCJfbG9vcF8xIiwiY2FtZWxpemVkS2V5IiwiaHlwaGVuYXRlZEtleSIsIiRldmVudCIsInJlbmRlclN0YXRpYyIsImlzSW5Gb3IiLCJfc3RhdGljVHJlZXMiLCJ0cmVlIiwibWFya1N0YXRpYyQxIiwibWFya09uY2UiLCJtYXJrU3RhdGljTm9kZSIsImJpbmRPYmplY3RMaXN0ZW5lcnMiLCJleGlzdGluZyIsIm91cnMiLCJyZXNvbHZlU2NvcGVkU2xvdHMiLCJoYXNEeW5hbWljS2V5cyIsImNvbnRlbnRIYXNoS2V5IiwiJHN0YWJsZSIsIiRrZXkiLCJiaW5kRHluYW1pY0tleXMiLCJiYXNlT2JqIiwidmFsdWVzIiwicHJlcGVuZE1vZGlmaWVyIiwic3ltYm9sIiwiaW5zdGFsbFJlbmRlckhlbHBlcnMiLCJfbyIsIl9uIiwiX2wiLCJfdCIsIl9xIiwiX20iLCJfZiIsIl9rIiwiX2IiLCJfdSIsIl9nIiwiX2QiLCJfcCIsInJlc29sdmVTbG90cyIsInNsb3RzIiwibmFtZV8xIiwibmFtZV8yIiwiaXNXaGl0ZXNwYWNlIiwibm9ybWFsaXplU2NvcGVkU2xvdHMiLCJvd25lclZtIiwibm9ybWFsU2xvdHMiLCJwcmV2U2NvcGVkU2xvdHMiLCJoYXNOb3JtYWxTbG90cyIsImlzU3RhYmxlIiwiX25vcm1hbGl6ZWQiLCIkaGFzTm9ybWFsIiwia2V5XzEiLCJub3JtYWxpemVTY29wZWRTbG90Iiwia2V5XzIiLCJwcm94eU5vcm1hbFNsb3QiLCJub3JtYWxpemVkIiwiaW5pdFNldHVwIiwic2V0dXAiLCJfc2V0dXBDb250ZXh0IiwiY3JlYXRlU2V0dXBDb250ZXh0Iiwic2V0dXBSZXN1bHQiLCJfcHJvcHMiLCJfc2V0dXBTdGF0ZSIsIl9fc2ZjIiwiX3NldHVwUHJveHkiLCJleHBvc2VDYWxsZWQiLCJfYXR0cnNQcm94eSIsInN5bmNTZXR1cFByb3h5IiwiJGF0dHJzIiwibGlzdGVuZXJzIiwiX2xpc3RlbmVyc1Byb3h5IiwiJGxpc3RlbmVycyIsImluaXRTbG90c1Byb3h5IiwiZW1pdCIsIiRlbWl0IiwiZXhwb3NlIiwiZXhwb3NlZCIsImZyb20iLCJjaGFuZ2VkIiwiZGVmaW5lUHJveHlBdHRyIiwiX3Nsb3RzUHJveHkiLCJzeW5jU2V0dXBTbG90cyIsInVzZVNsb3RzIiwiZ2V0Q29udGV4dCIsInVzZUF0dHJzIiwidXNlTGlzdGVuZXJzIiwibWVyZ2VEZWZhdWx0cyIsImluaXRSZW5kZXIiLCJfdm5vZGUiLCJwYXJlbnRWbm9kZSIsIl9wYXJlbnRWbm9kZSIsInJlbmRlckNvbnRleHQiLCJfcmVuZGVyQ2hpbGRyZW4iLCIkcGFyZW50IiwiZCIsInBhcmVudERhdGEiLCJpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQiLCJfcGFyZW50TGlzdGVuZXJzIiwiY3VycmVudFJlbmRlcmluZ0luc3RhbmNlIiwicmVuZGVyTWl4aW4iLCJWdWUiLCIkbmV4dFRpY2siLCJuZXh0VGljayIsIl9yZW5kZXIiLCJfaXNNb3VudGVkIiwicmVuZGVyRXJyb3IiLCJlbnN1cmVDdG9yIiwiY29tcCIsImJhc2UiLCJfX2VzTW9kdWxlIiwidG9TdHJpbmdUYWciLCJjcmVhdGVBc3luY1BsYWNlaG9sZGVyIiwicmVzb2x2ZUFzeW5jQ29tcG9uZW50IiwiYmFzZUN0b3IiLCJlcnJvckNvbXAiLCJyZXNvbHZlZCIsIm93bmVyIiwib3duZXJzIiwibG9hZGluZyIsImxvYWRpbmdDb21wIiwib3duZXJzXzEiLCJzeW5jXzEiLCJ0aW1lckxvYWRpbmdfMSIsInRpbWVyVGltZW91dF8xIiwiJG9uIiwiZm9yY2VSZW5kZXJfMSIsInJlbmRlckNvbXBsZXRlZCIsIiRmb3JjZVVwZGF0ZSIsImNsZWFyVGltZW91dCIsInJlamVjdF8xIiwicmVzXzEiLCJjb21wb25lbnQiLCJkZWxheSIsImdldEZpcnN0Q29tcG9uZW50Q2hpbGQiLCJpbml0RXZlbnRzIiwiX2V2ZW50cyIsIl9oYXNIb29rRXZlbnQiLCJ1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMiLCJ0YXJnZXQkMSIsImFkZCQxIiwicmVtb3ZlJDEiLCIkb2ZmIiwiY3JlYXRlT25jZUhhbmRsZXIkMSIsIl90YXJnZXQiLCJvbmNlSGFuZGxlciIsIm9sZExpc3RlbmVycyIsImV2ZW50c01peGluIiwiaG9va1JFIiwiJG9uY2UiLCJpXzEiLCJjYnMiLCJjYiIsImxvd2VyQ2FzZUV2ZW50IiwiYWN0aXZlSW5zdGFuY2UiLCJzZXRBY3RpdmVJbnN0YW5jZSIsInByZXZBY3RpdmVJbnN0YW5jZSIsImluaXRMaWZlY3ljbGUiLCJhYnN0cmFjdCIsIiRjaGlsZHJlbiIsIiRyb290IiwiJHJlZnMiLCJfcHJvdmlkZWQiLCJfd2F0Y2hlciIsIl9pbmFjdGl2ZSIsIl9kaXJlY3RJbmFjdGl2ZSIsIl9pc0Rlc3Ryb3llZCIsIl9pc0JlaW5nRGVzdHJveWVkIiwibGlmZWN5Y2xlTWl4aW4iLCJfdXBkYXRlIiwiaHlkcmF0aW5nIiwicHJldkVsIiwiJGVsIiwicHJldlZub2RlIiwicmVzdG9yZUFjdGl2ZUluc3RhbmNlIiwiX19wYXRjaF9fIiwiX192dWVfXyIsIndyYXBwZXIiLCIkZGVzdHJveSIsImNhbGxIb29rJDEiLCJfZGF0YSIsIm1vdW50Q29tcG9uZW50IiwiZWwiLCJ0ZW1wbGF0ZSIsInVwZGF0ZUNvbXBvbmVudCIsIl9uYW1lIiwiX3VpZCIsIndhdGNoZXJPcHRpb25zIiwiYmVmb3JlIiwicHJlV2F0Y2hlcnMiLCJfcHJlV2F0Y2hlcnMiLCJydW4iLCJ1cGRhdGVDaGlsZENvbXBvbmVudCIsInByb3BzRGF0YSIsInJlbmRlckNoaWxkcmVuIiwibmV3U2NvcGVkU2xvdHMiLCJvbGRTY29wZWRTbG90cyIsImhhc0R5bmFtaWNTY29wZWRTbG90IiwibmVlZHNGb3JjZVVwZGF0ZSIsInByZXZWTm9kZSIsInByZXZMaXN0ZW5lcnMiLCJwcm9wS2V5cyIsIl9wcm9wS2V5cyIsInZhbGlkYXRlUHJv
13835cCIsImlzSW5JbmFjdGl2ZVRyZWUiLCJhY3RpdmF0ZUNoaWxkQ29tcG9uZW50IiwiZGlyZWN0IiwiZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50Iiwic2V0Q29udGV4dCIsImoiLCJNQVhfVVBEQVRFX0NPVU5UIiwicXVldWUiLCJhY3RpdmF0ZWRDaGlsZHJlbiIsImNpcmN1bGFyIiwid2FpdGluZyIsImZsdXNoaW5nIiwiaW5kZXgkMSIsInJlc2V0U2NoZWR1bGVyU3RhdGUiLCJjdXJyZW50Rmx1c2hUaW1lc3RhbXAiLCJnZXROb3ciLCJwZXJmb3JtYW5jZV8xIiwiY3JlYXRlRXZlbnQiLCJ0aW1lU3RhbXAiLCJzb3J0Q29tcGFyZUZuIiwicG9zdCIsImZsdXNoU2NoZWR1bGVyUXVldWUiLCJ1c2VyIiwiZXhwcmVzc2lvbiIsImFjdGl2YXRlZFF1ZXVlIiwidXBkYXRlZFF1ZXVlIiwiY2FsbEFjdGl2YXRlZEhvb2tzIiwiY2FsbFVwZGF0ZWRIb29rcyIsInF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50IiwicXVldWVXYXRjaGVyIiwibm9SZWN1cnNlIiwiV0FUQ0hFUiIsIldBVENIRVJfQ0IiLCJXQVRDSEVSX0dFVFRFUiIsIldBVENIRVJfQ0xFQU5VUCIsIndhdGNoRWZmZWN0IiwiZG9XYXRjaCIsIndhdGNoUG9zdEVmZmVjdCIsImZsdXNoIiwid2F0Y2hTeW5jRWZmZWN0IiwiSU5JVElBTF9XQVRDSEVSX1ZBTFVFIiwiaW1tZWRpYXRlIiwiZGVlcCIsIndhcm5JbnZhbGlkU291cmNlIiwiZm9yY2VUcmlnZ2VyIiwiaXNNdWx0aVNvdXJjZSIsInNvbWUiLCJjbGVhbnVwIiwib25DbGVhbnVwIiwiYmFzZUdldHRlcl8xIiwib25TdG9wIiwiYWN0aXZlIiwidGVhcmRvd24iLCJhY3RpdmVFZmZlY3RTY29wZSIsIkVmZmVjdFNjb3BlIiwiZGV0YWNoZWQiLCJlZmZlY3RzIiwiY2xlYW51cHMiLCJzY29wZXMiLCJjdXJyZW50RWZmZWN0U2NvcGUiLCJmcm9tUGFyZW50IiwiZWZmZWN0U2NvcGUiLCJyZWNvcmRFZmZlY3RTY29wZSIsInNjb3BlIiwiZ2V0Q3VycmVudFNjb3BlIiwib25TY29wZURpc3Bvc2UiLCJwcm92aWRlIiwicmVzb2x2ZVByb3ZpZGVkIiwicGFyZW50UHJvdmlkZXMiLCJpbmplY3QiLCJ0cmVhdERlZmF1bHRBc0ZhY3RvcnkiLCJwcm92aWRlcyIsImVyciIsImhvb2tzIiwiZXJyb3JDYXB0dXJlZCIsImdsb2JhbEhhbmRsZUVycm9yIiwiaGFuZGxlciIsIl9oYW5kbGVkIiwibG9nRXJyb3IiLCJpc1VzaW5nTWljcm9UYXNrIiwiY2FsbGJhY2tzIiwicGVuZGluZyIsImZsdXNoQ2FsbGJhY2tzIiwiY29waWVzIiwidGltZXJGdW5jIiwicF8xIiwiTXV0YXRpb25PYnNlcnZlciIsImNvdW50ZXJfMSIsIm9ic2VydmVyIiwidGV4dE5vZGVfMSIsImNyZWF0ZVRleHROb2RlIiwiY2hhcmFjdGVyRGF0YSIsInNldEltbWVkaWF0ZSIsIl9yZXNvbHZlIiwidXNlQ3NzTW9kdWxlIiwibW9kIiwidXNlQ3NzVmFycyIsInZhcnMiLCJub2RlVHlwZSIsInNldFByb3BlcnR5IiwiZGVmaW5lQXN5bmNDb21wb25lbnQiLCJsb2FkZXIiLCJsb2FkaW5nQ29tcG9uZW50IiwiZXJyb3JDb21wb25lbnQiLCJzdXNwZW5zaWJsZSIsInVzZXJPbkVycm9yIiwib25FcnJvciIsInBlbmRpbmdSZXF1ZXN0IiwicmV0cmllcyIsInJldHJ5IiwibG9hZCIsInRoaXNSZXF1ZXN0IiwidXNlclJldHJ5IiwidXNlckZhaWwiLCJjcmVhdGVMaWZlQ3ljbGUiLCJob29rTmFtZSIsImZvcm1hdE5hbWUiLCJpbmplY3RIb29rIiwibWVyZ2VMaWZlY3ljbGVIb29rIiwib25CZWZvcmVNb3VudCIsIm9uTW91bnRlZCIsIm9uQmVmb3JlVXBkYXRlIiwib25VcGRhdGVkIiwib25CZWZvcmVVbm1vdW50Iiwib25Vbm1vdW50ZWQiLCJvbkFjdGl2YXRlZCIsIm9uRGVhY3RpdmF0ZWQiLCJvblNlcnZlclByZWZldGNoIiwib25SZW5kZXJUcmFja2VkIiwib25SZW5kZXJUcmlnZ2VyZWQiLCJpbmplY3RFcnJvckNhcHR1cmVkSG9vayIsIm9uRXJyb3JDYXB0dXJlZCIsImRlZmluZUNvbXBvbmVudCIsInNlZW5PYmplY3RzIiwiX3RyYXZlcnNlIiwic2VlbiIsImlzQSIsImlzRnJvemVuIiwiZGVwSWQiLCJ1aWQkMSIsImV4cE9yRm4iLCJpc1JlbmRlcldhdGNoZXIiLCJzeW5jIiwiZGVwcyIsIm5ld0RlcHMiLCJkZXBJZHMiLCJuZXdEZXBJZHMiLCJ0bXAiLCJzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24iLCJzb3VyY2VLZXkiLCJwcm94eUdldHRlciIsInByb3h5U2V0dGVyIiwiaW5pdFN0YXRlIiwiaW5pdFByb3BzJDEiLCJpbml0TWV0aG9kcyIsImluaXREYXRhIiwiaW5pdENvbXB1dGVkJDEiLCJpbml0V2F0Y2giLCJwcm9wc09wdGlvbnMiLCJpc1Jvb3QiLCJnZXREYXRhIiwiY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyIsIndhdGNoZXJzIiwiX2NvbXB1dGVkV2F0Y2hlcnMiLCJpc1NTUiIsInVzZXJEZWYiLCJkZWZpbmVDb21wdXRlZCIsInNob3VsZENhY2hlIiwiY3JlYXRlQ29tcHV0ZWRHZXR0ZXIiLCJjcmVhdGVHZXR0ZXJJbnZva2VyIiwiY29tcHV0ZWRHZXR0ZXIiLCJjcmVhdGVXYXRjaGVyIiwiJHdhdGNoIiwic3RhdGVNaXhpbiIsImRhdGFEZWYiLCJwcm9wc0RlZiIsIiRzZXQiLCIkZGVsZXRlIiwidW53YXRjaEZuIiwiaW5pdFByb3ZpZGUiLCJwcm92aWRlT3B0aW9uIiwicHJvdmlkZWQiLCJpbml0SW5qZWN0aW9ucyIsInJlc29sdmVJbmplY3QiLCJwcm92aWRlS2V5IiwicHJvdmlkZURlZmF1bHQiLCJ1aWQiLCJpbml0TWl4aW4kMSIsIl9pbml0IiwiX2lzQ29tcG9uZW50IiwiaW5pdEludGVybmFsQ29tcG9uZW50IiwibWVyZ2VPcHRpb25zIiwicmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyIsIiRtb3VudCIsInZub2RlQ29tcG9uZW50T3B0aW9ucyIsIl9jb21wb25lbnRUYWciLCJzdXBlciIsInN1cGVyT3B0aW9ucyIsImNhY2hlZFN1cGVyT3B0aW9ucyIsIm1vZGlmaWVkT3B0aW9ucyIsInJlc29sdmVNb2RpZmllZE9wdGlvbnMiLCJleHRlbmRPcHRpb25zIiwiY29tcG9uZW50cyIsIm1vZGlmaWVkIiwibGF0ZXN0Iiwic2VhbGVkIiwic2VhbGVkT3B0aW9ucyIsIkZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0IiwiY29udGV4dFZtIiwiX29yaWdpbmFsIiwiaXNDb21waWxlZCIsIl9jb21waWxlZCIsIm5lZWROb3JtYWxpemF0aW9uIiwiaW5qZWN0aW9ucyIsIl9zY29wZUlkIiwiY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudCIsIm1lcmdlUHJvcHMiLCJjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0Iiwidm5vZGVzIiwiY2xvbmUiLCJkZXZ0b29sc01ldGEiLCJnZXRDb21wb25lbnROYW1lIiwiX19uYW1lIiwiY29tcG9uZW50Vk5vZGVIb29rcyIsImluaXQiLCJrZWVwQWxpdmUiLCJtb3VudGVkTm9kZSIsInByZXBhdGNoIiwiY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZSIsIm9sZFZub2RlIiwiaW5zZXJ0IiwiZGVzdHJveSIsImhvb2tzVG9NZXJnZSIsIl9iYXNlIiwiY2lkIiwibW9kZWwiLCJ0cmFuc2Zvcm1Nb2RlbCIsImZ1bmN0aW9uYWwiLCJpbnN0YWxsQ29tcG9uZW50SG9va3MiLCJpbmxpbmVUZW1wbGF0ZSIsInRvTWVyZ2UiLCJfbWVyZ2VkIiwibWVyZ2VIb29rIiwiZjEiLCJmMiIsImdlbmVyYXRlQ29tcG9uZW50VHJhY2UiLCJoYXNDb25zb2xlXzEiLCJjbGFzc2lmeVJFXzEiLCJjbGFzc2lmeV8xIiwibXNnIiwidHJhY2UiLCJpbmNsdWRlRmlsZSIsImZpbGUiLCJfX2ZpbGUiLCJyZXBlYXRfMSIsIm
13835N1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSIsInN0cmF0cyIsImRlZmF1bHRTdHJhdCIsIm1lcmdlRGF0YSIsInJlY3Vyc2l2ZSIsInRvVmFsIiwiZnJvbVZhbCIsIm1lcmdlRGF0YU9yRm4iLCJwYXJlbnRWYWwiLCJjaGlsZFZhbCIsIm1lcmdlZERhdGFGbiIsIm1lcmdlZEluc3RhbmNlRGF0YUZuIiwiaW5zdGFuY2VEYXRhIiwiZGVmYXVsdERhdGEiLCJkZWR1cGVIb29rcyIsIm1lcmdlQXNzZXRzIiwiYXNzZXJ0T2JqZWN0VHlwZSIsInBhcmVudF8xIiwiY2hlY2tDb21wb25lbnRzIiwidmFsaWRhdGVDb21wb25lbnROYW1lIiwibm9ybWFsaXplUHJvcHMiLCJub3JtYWxpemVJbmplY3QiLCJub3JtYWxpemVEaXJlY3RpdmVzJDEiLCJkaXJzIiwiZGlyZWN0aXZlcyIsImV4dGVuZHMiLCJtaXhpbnMiLCJtZXJnZUZpZWxkIiwic3RyYXQiLCJ3YXJuTWlzc2luZyIsImFzc2V0cyIsImNhbWVsaXplZElkIiwiUGFzY2FsQ2FzZUlkIiwiYWJzZW50IiwiYm9vbGVhbkluZGV4IiwiZ2V0VHlwZUluZGV4IiwiQm9vbGVhbiIsInN0cmluZ0luZGV4IiwiZ2V0UHJvcERlZmF1bHRWYWx1ZSIsInByZXZTaG91bGRPYnNlcnZlIiwiYXNzZXJ0UHJvcCIsImdldFR5cGUiLCJyZXF1aXJlZCIsInZhbGlkIiwiZXhwZWN0ZWRUeXBlcyIsImFzc2VydGVkVHlwZSIsImFzc2VydFR5cGUiLCJleHBlY3RlZFR5cGUiLCJoYXZlRXhwZWN0ZWRUeXBlcyIsImdldEludmFsaWRUeXBlTWVzc2FnZSIsInNpbXBsZUNoZWNrUkUiLCJmdW5jdGlvblR5cGVDaGVja1JFIiwiaXNTYW1lVHlwZSIsInJlY2VpdmVkVHlwZSIsImlzRXhwbGljYWJsZSIsImlzQm9vbGVhbiIsInN0eWxlVmFsdWUiLCJOdW1iZXIiLCJFWFBMSUNBQkxFX1RZUEVTIiwiZWxlbSIsImluaXRVc2UiLCJwbHVnaW4iLCJpbnN0YWxsZWRQbHVnaW5zIiwiX2luc3RhbGxlZFBsdWdpbnMiLCJpbnN0YWxsIiwiaW5pdE1peGluIiwibWl4aW4iLCJpbml0RXh0ZW5kIiwiU3VwZXIiLCJTdXBlcklkIiwiY2FjaGVkQ3RvcnMiLCJfQ3RvciIsIlN1YiIsIlZ1ZUNvbXBvbmVudCIsImluaXRQcm9wcyIsImluaXRDb21wdXRlZCIsIkNvbXAiLCJpbml0QXNzZXRSZWdpc3RlcnMiLCJkZWZpbml0aW9uIiwiX2dldENvbXBvbmVudE5hbWUiLCJtYXRjaGVzIiwicGF0dGVybiIsInBydW5lQ2FjaGUiLCJrZWVwQWxpdmVJbnN0YW5jZSIsImVudHJ5IiwicHJ1bmVDYWNoZUVudHJ5IiwiY3VycmVudCIsInBhdHRlcm5UeXBlcyIsIktlZXBBbGl2ZSIsImluY2x1ZGUiLCJleGNsdWRlIiwiY2FjaGVWTm9kZSIsInZub2RlVG9DYWNoZSIsImtleVRvQ2FjaGUiLCJwYXJzZUludCIsImRlc3Ryb3llZCIsIm1vdW50ZWQiLCJ1cGRhdGVkIiwiYnVpbHRJbkNvbXBvbmVudHMiLCJpbml0R2xvYmFsQVBJIiwiY29uZmlnRGVmIiwidXRpbCIsImRlbGV0ZSIsIm9ic2VydmFibGUiLCJzc3JDb250ZXh0IiwiYWNjZXB0VmFsdWUiLCJhdHRyIiwiaXNFbnVtZXJhdGVkQXR0ciIsImlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSIsImNvbnZlcnRFbnVtZXJhdGVkVmFsdWUiLCJpc0ZhbHN5QXR0clZhbHVlIiwiaXNCb29sZWFuQXR0ciIsInhsaW5rTlMiLCJpc1hsaW5rIiwiZ2V0WGxpbmtQcm9wIiwiZ2VuQ2xhc3NGb3JWbm9kZSIsInBhcmVudE5vZGUiLCJjaGlsZE5vZGUiLCJtZXJnZUNsYXNzRGF0YSIsInJlbmRlckNsYXNzIiwiZHluYW1pY0NsYXNzIiwic3RyaW5naWZ5Q2xhc3MiLCJzdHJpbmdpZnlBcnJheSIsInN0cmluZ2lmeU9iamVjdCIsInN0cmluZ2lmaWVkIiwibmFtZXNwYWNlTWFwIiwic3ZnIiwibWF0aCIsImlzSFRNTFRhZyIsImlzU1ZHIiwiaXNQcmVUYWciLCJ1bmtub3duRWxlbWVudENhY2hlIiwiSFRNTFVua25vd25FbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJpc1RleHRJbnB1dFR5cGUiLCJxdWVyeSIsInNlbGVjdGVkIiwicXVlcnlTZWxlY3RvciIsInRhZ05hbWUiLCJtdWx0aXBsZSIsImNyZWF0ZUVsZW1lbnROUyIsIm5hbWVzcGFjZSIsImNyZWF0ZUNvbW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJuZXdOb2RlIiwicmVmZXJlbmNlTm9kZSIsInJlbW92ZUNoaWxkIiwiYXBwZW5kQ2hpbGQiLCJuZXh0U2libGluZyIsInNldFRleHRDb250ZW50IiwidGV4dENvbnRlbnQiLCJzZXRTdHlsZVNjb3BlIiwic2NvcGVJZCIsIm5vZGVPcHMiLCJyZWdpc3RlclJlZiIsImlzUmVtb3ZhbCIsInJlZlZhbHVlIiwiJHJlZnNWYWx1ZSIsImlzRm9yIiwicmVmSW5Gb3IiLCJfaXNTdHJpbmciLCJfaXNSZWYiLCJyZWZzIiwic2V0U2V0dXBSZWYiLCJpbmNsdWRlcyIsImVtcHR5Tm9kZSIsInNhbWVWbm9kZSIsInNhbWVJbnB1dFR5cGUiLCJ0eXBlQSIsInR5cGVCIiwiY3JlYXRlS2V5VG9PbGRJZHgiLCJiZWdpbklkeCIsImVuZElkeCIsImNyZWF0ZVBhdGNoRnVuY3Rpb24iLCJiYWNrZW5kIiwiZW1wdHlOb2RlQXQiLCJjcmVhdGVSbUNiIiwiY2hpbGRFbG0iLCJyZW1vdmVOb2RlIiwiaW5WUHJlIiwiaWdub3JlIiwiY3JlYXRpbmdFbG1JblZQcmUiLCJjcmVhdGVFbG0iLCJpbnNlcnRlZFZub2RlUXVldWUiLCJwYXJlbnRFbG0iLCJyZWZFbG0iLCJuZXN0ZWQiLCJvd25lckFycmF5Iiwic2V0U2NvcGUiLCJjcmVhdGVDaGlsZHJlbiIsImludm9rZUNyZWF0ZUhvb2tzIiwiaXNSZWFjdGl2YXRlZCIsImluaXRDb21wb25lbnQiLCJyZWFjdGl2YXRlQ29tcG9uZW50IiwicGVuZGluZ0luc2VydCIsImlzUGF0Y2hhYmxlIiwiaW5uZXJOb2RlIiwidHJhbnNpdGlvbiIsImFjdGl2YXRlIiwiY2hlY2tEdXBsaWNhdGVLZXlzIiwiaV8yIiwiYW5jZXN0b3IiLCJhZGRWbm9kZXMiLCJzdGFydElkeCIsImludm9rZURlc3Ryb3lIb29rIiwicmVtb3ZlVm5vZGVzIiwiY2giLCJyZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rIiwicm0iLCJpXzMiLCJ1cGRhdGVDaGlsZHJlbiIsIm9sZENoIiwibmV3Q2giLCJyZW1vdmVPbmx5Iiwib2xkU3RhcnRJZHgiLCJuZXdTdGFydElkeCIsIm9sZEVuZElkeCIsIm9sZFN0YXJ0Vm5vZGUiLCJvbGRFbmRWbm9kZSIsIm5ld0VuZElkeCIsIm5ld1N0YXJ0Vm5vZGUiLCJuZXdFbmRWbm9kZSIsIm9sZEtleVRvSWR4IiwiaWR4SW5PbGQiLCJ2bm9kZVRvTW92ZSIsImNhbk1vdmUiLCJwYXRjaFZub2RlIiwiZmluZElkeEluT2xkIiwic2VlbktleXMiLCJpXzQiLCJpXzUiLCJoeWRyYXRlIiwicG9zdHBhdGNoIiwiaW52b2tlSW5zZXJ0SG9vayIsImluaXRpYWwiLCJpXzYiLCJoeWRyYXRpb25CYWlsZWQiLCJpc1JlbmRlcmVkTW9kdWxlIiwiYXNzZXJ0Tm9kZU1hdGNoIiwiaGFzQ2hpbGROb2RlcyIsImNoaWxkcmVuTWF0Y2giLCJmaXJzdENoaWxkIiwiaV83IiwiY2hpbGROb2RlcyIsImZ1bGxJbnZva2UiLCJwYXRjaCIsImlzSW5pdGlhbFBhdGNoIiwiaXNSZWFsRWxlbWVudCIsImhhc0F0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsIm9sZEVsbSIsIl9sZWF2ZUNiIiwicGF0Y2hhYmxlIiwiaV84IiwiaV85IiwiaW5zZXJ0XzEiLCJpXzEwIiwi
13835ZGlyZWN0aXZlcyQxIiwidXBkYXRlRGlyZWN0aXZlcyIsInVuYmluZERpcmVjdGl2ZXMiLCJpc0NyZWF0ZSIsImlzRGVzdHJveSIsIm9sZERpcnMiLCJub3JtYWxpemVEaXJlY3RpdmVzIiwibmV3RGlycyIsImRpcnNXaXRoSW5zZXJ0IiwiZGlyc1dpdGhQb3N0cGF0Y2giLCJvbGREaXIiLCJkaXIiLCJjYWxsSG9vayIsIm9sZEFyZyIsImFyZyIsImNvbXBvbmVudFVwZGF0ZWQiLCJjYWxsSW5zZXJ0IiwiZW1wdHlNb2RpZmllcnMiLCJtb2RpZmllcnMiLCJnZXRSYXdEaXJOYW1lIiwic2V0dXBEZWYiLCJyYXdOYW1lIiwiYmFzZU1vZHVsZXMiLCJ1cGRhdGVBdHRycyIsImluaGVyaXRBdHRycyIsIm9sZEF0dHJzIiwiX3ZfYXR0cl9wcm94eSIsInNldEF0dHIiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsImlzSW5QcmUiLCJiYXNlU2V0QXR0ciIsInNldEF0dHJpYnV0ZU5TIiwiX19pZXBoIiwiYmxvY2tlcl8xIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVwZGF0ZUNsYXNzIiwib2xkRGF0YSIsImNscyIsInRyYW5zaXRpb25DbGFzcyIsIl90cmFuc2l0aW9uQ2xhc3NlcyIsIl9wcmV2Q2xhc3MiLCJrbGFzcyQxIiwidmFsaWREaXZpc2lvbkNoYXJSRSIsInBhcnNlRmlsdGVycyIsImV4cCIsImluU2luZ2xlIiwiaW5Eb3VibGUiLCJpblRlbXBsYXRlU3RyaW5nIiwiaW5SZWdleCIsImN1cmx5Iiwic3F1YXJlIiwicGFyZW4iLCJsYXN0RmlsdGVySW5kZXgiLCJmaWx0ZXJzIiwicHVzaEZpbHRlciIsIndyYXBGaWx0ZXIiLCJiYXNlV2FybiIsInJhbmdlIiwicGx1Y2tNb2R1bGVGdW5jdGlvbiIsImFkZFByb3AiLCJkeW5hbWljIiwicmFuZ2VTZXRJdGVtIiwicGxhaW4iLCJhZGRBdHRyIiwiZHluYW1pY0F0dHJzIiwiYWRkUmF3QXR0ciIsImF0dHJzTWFwIiwiYXR0cnNMaXN0IiwiYWRkRGlyZWN0aXZlIiwiaXNEeW5hbWljQXJnIiwicHJlcGVuZE1vZGlmaWVyTWFya2VyIiwiYWRkSGFuZGxlciIsImltcG9ydGFudCIsInByZXZlbnQiLCJyaWdodCIsIm1pZGRsZSIsImV2ZW50cyIsIm5hdGl2ZSIsIm5hdGl2ZUV2ZW50cyIsIm5ld0hhbmRsZXIiLCJnZXRSYXdCaW5kaW5nQXR0ciIsInJhd0F0dHJzTWFwIiwiZ2V0QmluZGluZ0F0dHIiLCJnZXRTdGF0aWMiLCJkeW5hbWljVmFsdWUiLCJnZXRBbmRSZW1vdmVBdHRyIiwic3RhdGljVmFsdWUiLCJyZW1vdmVGcm9tTWFwIiwiZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgiLCJnZW5Db21wb25lbnRNb2RlbCIsImJhc2VWYWx1ZUV4cHJlc3Npb24iLCJ2YWx1ZUV4cHJlc3Npb24iLCJhc3NpZ25tZW50IiwiZ2VuQXNzaWdubWVudENvZGUiLCJwYXJzZU1vZGVsIiwiY2hyIiwiZXhwcmVzc2lvblBvcyIsImV4cHJlc3Npb25FbmRQb3MiLCJsYXN0SW5kZXhPZiIsImVvZiIsImlzU3RyaW5nU3RhcnQiLCJwYXJzZVN0cmluZyIsInBhcnNlQnJhY2tldCIsImluQnJhY2tldCIsInN0cmluZ1F1b3RlIiwid2FybiQxIiwiUkFOR0VfVE9LRU4iLCJDSEVDS0JPWF9SQURJT19UT0tFTiIsIm1vZGVsJDEiLCJfd2FybiIsImdlblNlbGVjdCIsImdlbkNoZWNrYm94TW9kZWwiLCJnZW5SYWRpb01vZGVsIiwiZ2VuRGVmYXVsdE1vZGVsIiwidmFsdWVCaW5kaW5nIiwidHJ1ZVZhbHVlQmluZGluZyIsImZhbHNlVmFsdWVCaW5kaW5nIiwic2VsZWN0ZWRWYWwiLCJ2YWx1ZV8xIiwidHlwZUJpbmRpbmciLCJiaW5kaW5nIiwibmVlZENvbXBvc2l0aW9uR3VhcmQiLCJub3JtYWxpemVFdmVudHMiLCJldmVudF8xIiwiY2hhbmdlIiwidXNlTWljcm90YXNrRml4IiwiYXR0YWNoZWRUaW1lc3RhbXBfMSIsIm9yaWdpbmFsXzEiLCJfd3JhcHBlciIsImN1cnJlbnRUYXJnZXQiLCJvd25lckRvY3VtZW50IiwidXBkYXRlRE9NTGlzdGVuZXJzIiwic3ZnQ29udGFpbmVyIiwidXBkYXRlRE9NUHJvcHMiLCJvbGRQcm9wcyIsIl92YWx1ZSIsInN0ckN1ciIsInNob3VsZFVwZGF0ZVZhbHVlIiwiY2hlY2tWYWwiLCJ
13835jb21wb3NpbmciLCJpc05vdEluRm9jdXNBbmREaXJ0eSIsImlzRGlydHlXaXRoTW9kaWZpZXJzIiwibm90SW5Gb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJfdk1vZGlmaWVycyIsInBhcnNlU3R5bGVUZXh0IiwiY3NzVGV4dCIsImxpc3REZWxpbWl0ZXIiLCJwcm9wZXJ0eURlbGltaXRlciIsIm5vcm1hbGl6ZVN0eWxlRGF0YSIsIm5vcm1hbGl6ZVN0eWxlQmluZGluZyIsInN0YXRpY1N0eWxlIiwiYmluZGluZ1N0eWxlIiwiZ2V0U3R5bGUiLCJjaGVja0NoaWxkIiwic3R5bGVEYXRhIiwiY3NzVmFyUkUiLCJpbXBvcnRhbnRSRSIsInNldFByb3AiLCJub3JtYWxpemUiLCJ2ZW5kb3JOYW1lcyIsImVtcHR5U3R5bGUiLCJjYXBOYW1lIiwidXBkYXRlU3R5bGUiLCJvbGRTdGF0aWNTdHlsZSIsIm9sZFN0eWxlQmluZGluZyIsIm5vcm1hbGl6ZWRTdHlsZSIsIm9sZFN0eWxlIiwibmV3U3R5bGUiLCJzdHlsZSQxIiwid2hpdGVzcGFjZVJFJDEiLCJhZGRDbGFzcyIsImdldEF0dHJpYnV0ZSIsInJlbW92ZUNsYXNzIiwidGFyIiwicmVzb2x2ZVRyYW5zaXRpb24iLCJjc3MiLCJhdXRvQ3NzVHJhbnNpdGlvbiIsImVudGVyQ2xhc3MiLCJlbnRlclRvQ2xhc3MiLCJlbnRlckFjdGl2ZUNsYXNzIiwibGVhdmVDbGFzcyIsImxlYXZlVG9DbGFzcyIsImxlYXZlQWN0aXZlQ2xhc3MiLCJoYXNUcmFuc2l0aW9uIiwiVFJBTlNJVElPTiIsIkFOSU1BVElPTiIsInRyYW5zaXRpb25Qcm9wIiwidHJhbnNpdGlvbkVuZEV2ZW50IiwiYW5pbWF0aW9uUHJvcCIsImFuaW1hdGlvbkVuZEV2ZW50Iiwib250cmFuc2l0aW9uZW5kIiwib253ZWJraXR0cmFuc2l0aW9uZW5kIiwib25hbmltYXRpb25lbmQiLCJvbndlYmtpdGFuaW1hdGlvbmVuZCIsInJhZiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm5leHRGcmFtZSIsImFkZFRyYW5zaXRpb25DbGFzcyIsInRyYW5zaXRpb25DbGFzc2VzIiwicmVtb3ZlVHJhbnNpdGlvbkNsYXNzIiwid2hlblRyYW5zaXRpb25FbmRzIiwiZ2V0VHJhbnNpdGlvbkluZm8iLCJwcm9wQ291bnQiLCJlbmRlZCIsIm9uRW5kIiwidHJhbnNmb3JtUkUiLCJzdHlsZXMiLCJnZXRDb21wdXRlZFN0eWxlIiwidHJhbnNpdGlvbkRlbGF5cyIsInRyYW5zaXRpb25EdXJhdGlvbnMiLCJ0cmFuc2l0aW9uVGltZW91dCIsImdldFRpbWVvdXQiLCJhbmltYXRpb25EZWxheXMiLCJhbmltYXRpb25EdXJhdGlvbnMiLCJhbmltYXRpb25UaW1lb3V0IiwiaGFzVHJhbnNmb3JtIiwiZGVsYXlzIiwiZHVyYXRpb25zIiwidG9NcyIsImVudGVyIiwidG9nZ2xlRGlzcGxheSIsImNhbmNlbGxlZCIsIl9lbnRlckNiIiwiYXBwZWFyQ2xhc3MiLCJhcHBlYXJUb0NsYXNzIiwiYXBwZWFyQWN0aXZlQ2xhc3MiLCJiZWZvcmVFbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwiZHVyYXRpb24iLCJ0cmFuc2l0aW9uTm9kZSIsImlzQXBwZWFyIiwic3RhcnRDbGFzcyIsImFjdGl2ZUNsYXNzIiwidG9DbGFzcyIsImJlZm9yZUVudGVySG9vayIsImVudGVySG9vayIsImFmdGVyRW50ZXJIb29rIiwiZW50ZXJDYW5jZWxsZWRIb29rIiwiZXhwbGljaXRFbnRlckR1cmF0aW9uIiwiY2hlY2tEdXJhdGlvbiIsImV4cGVjdHNDU1MiLCJ1c2VyV2FudHNDb250cm9sIiwiZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCIsInNob3ciLCJwZW5kaW5nTm9kZSIsImlzVmFsaWREdXJhdGlvbiIsImxlYXZlIiwiYmVmb3JlTGVhdmUiLCJhZnRlckxlYXZlIiwibGVhdmVDYW5jZWxsZWQiLCJkZWxheUxlYXZlIiwiZXhwbGljaXRMZWF2ZUR1cmF0aW9uIiwicGVyZm9ybUxlYXZlIiwiaW52b2tlckZucyIsIl9lbnRlciIsInBsYXRmb3JtTW9kdWxlcyIsIm1vZHVsZXMkMSIsInZtb2RlbCIsInRyaWdnZXIiLCJkaXJlY3RpdmUiLCJfdk9wdGlvbnMiLCJzZXRTZWxlY3RlZCIsImdldFZhbHVlIiwib25Db21wb3NpdGlvblN0YXJ0Iiwib25Db21wb3NpdGlvbkVuZCIsInByZXZPcHRpb25zXzEiLCJjdXJPcHRpb25zXzEiLCJvIiwibmVlZFJlc2V0IiwiaGFzTm9NYXRjaGluZ09wdGlvbiIsImFjdHVhbGx5U2V0U2VsZWN0ZWQiLCJpc011bHRpcGxlIiwib3B0aW9uIiwic2VsZWN0ZWRJbmRleCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJsb2NhdGVOb2RlIiwib3JpZ2luYWxEaXNwbGF5IiwiX192T3JpZ2luYWxEaXNwbGF5IiwiZGlzcGxheSIsInVuYmluZCIsInBsYXRmb3JtRGlyZWN0aXZlcyIsInRyYW5zaXRpb25Qcm9wcyIsIm1vZGUiLCJnZXRSZWFsQ2hpbGQiLCJjb21wT3B0aW9ucyIsImV4dHJhY3RUcmFuc2l0aW9uRGF0YSIsInBsYWNlaG9sZGVyIiwicmF3Q2hpbGQiLCJoYXNQYXJlbnRUcmFuc2l0aW9uIiwiaXNTYW1lQ2hpbGQiLCJvbGRDaGlsZCIsImlzTm90VGV4dE5vZGUiLCJpc1ZTaG93RGlyZWN0aXZlIiwiVHJhbnNpdGlvbiIsIl9sZWF2aW5nIiwib2xkUmF3Q2hpbGQiLCJkZWxheWVkTGVhdmVfMSIsIm1vdmVDbGFzcyIsIlRyYW5zaXRpb25Hcm91cCIsImJlZm9yZU1vdW50Iiwia2VwdCIsInByZXZDaGlsZHJlbiIsInJhd0NoaWxkcmVuIiwidHJhbnNpdGlvbkRhdGEiLCJyZW1vdmVkIiwicG9zIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaGFzTW92ZSIsImNhbGxQZW5kaW5nQ2JzIiwicmVjb3JkUG9zaXRpb24iLCJhcHBseVRyYW5zbGF0aW9uIiwiX3JlZmxvdyIsIm9mZnNldEhlaWdodCIsIm1vdmVkIiwiZWxfMSIsIldlYmtpdFRyYW5zZm9ybSIsInRyYW5zaXRpb25EdXJhdGlvbiIsIl9tb3ZlQ2IiLCJwcm9wZXJ0eU5hbWUiLCJfaGFzTW92ZSIsImNsb25lTm9kZSIsIm5ld1BvcyIsIm9sZFBvcyIsImR4IiwibGVmdCIsImR5IiwidG9wIiwicGxhdGZvcm1Db21wb25lbnRzIiwiZGVmYXVsdFRhZ1JFIiwicmVnZXhFc2NhcGVSRSIsImJ1aWxkUmVnZXgiLCJkZWxpbWl0ZXJzIiwiY2xvc2UiLCJwYXJzZVRleHQiLCJ0YWdSRSIsInRva2VucyIsInJhd1Rva2VucyIsInRva2VuVmFsdWUiLCJleGVjIiwidHJhbnNmb3JtTm9kZSQxIiwiY2xhc3NCaW5kaW5nIiwiZ2VuRGF0YSQyIiwia2xhc3MiLCJ0cmFuc2Zvcm1Ob2RlIiwiZ2VuRGF0YSIsInN0eWxlQmluZGluZyIsImdlbkRhdGEkMSIsImRlY29kZXIiLCJoZSIsImRlY29kZSIsImh0bWwiLCJpc1VuYXJ5VGFnIiwiY2FuQmVMZWZ0T3BlblRhZyIsImlzTm9uUGhyYXNpbmdUYWciLCJhdHRyaWJ1dGUiLCJkeW5hbWljQXJnQXR0cmlidXRlIiwibmNuYW1lIiwicW5hbWVDYXB0dXJlIiwic3RhcnRUYWdPcGVuIiwic3RhcnRUYWdDbG9zZSIsImRvY3R5cGUiLCJjb21tZW50IiwiY29uZGl0
13835aW9uYWxDb21tZW50IiwiaXNQbGFpblRleHRFbGVtZW50IiwicmVDYWNoZSIsImRlY29kaW5nTWFwIiwiZW5jb2RlZEF0dHIiLCJlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyIsImlzSWdub3JlTmV3bGluZVRhZyIsInNob3VsZElnbm9yZUZpcnN0TmV3bGluZSIsImRlY29kZUF0dHIiLCJzaG91bGREZWNvZGVOZXdsaW5lcyIsInJlIiwicGFyc2VIVE1MIiwiZXhwZWN0SFRNTCIsImxhc3RUYWciLCJ0ZXh0RW5kIiwiY29tbWVudEVuZCIsInNob3VsZEtlZXBDb21tZW50Iiwic3Vic3RyaW5nIiwiYWR2YW5jZSIsImNvbmRpdGlvbmFsRW5kIiwiZG9jdHlwZU1hdGNoIiwiZW5kVGFnTWF0Y2giLCJjdXJJbmRleCIsInBhcnNlRW5kVGFnIiwic3RhcnRUYWdNYXRjaCIsInBhcnNlU3RhcnRUYWciLCJoYW5kbGVTdGFydFRhZyIsInJlc3QiLCJjaGFycyIsImVuZFRhZ0xlbmd0aF8xIiwic3RhY2tlZFRhZ18xIiwicmVTdGFja2VkVGFnIiwic3RhdGVfMSIsInVuYXJ5U2xhc2giLCJ1bmFyeSIsInNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZiIsIm91dHB1dFNvdXJjZVJhbmdlIiwibG93ZXJDYXNlZFRhZyIsImxvd2VyQ2FzZWRUYWdOYW1lIiwib25SRSIsImRpclJFIiwiZm9yQWxpYXNSRSIsImZvckl0ZXJhdG9yUkUiLCJzdHJpcFBhcmVuc1JFIiwiZHluYW1pY0FyZ1JFIiwiYXJnUkUiLCJiaW5kUkUiLCJtb2RpZmllclJFIiwic2xvdFJFIiwibGluZUJyZWFrUkUiLCJ3aGl0ZXNwYWNlUkUiLCJpbnZhbGlkQXR0cmlidXRlUkUiLCJkZWNvZGVIVE1MQ2FjaGVkIiwiZW1wdHlTbG90U2NvcGVUb2tlbiIsInRyYW5zZm9ybXMiLCJwcmVUcmFuc2Zvcm1zIiwicG9zdFRyYW5zZm9ybXMiLCJwbGF0Zm9ybUlzUHJlVGFnIiwicGxhdGZvcm1NdXN0VXNlUHJvcCIsInBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlIiwibWF5YmVDb21wb25lbnQiLCJjcmVhdGVBU1RFbGVtZW50IiwibWFrZUF0dHJzTWFwIiwicHJlc2VydmVXaGl0ZXNwYWNlIiwid2hpdGVzcGFjZU9wdGlvbiIsIndoaXRlc3BhY2UiLCJyb290IiwiY3VycmVudFBhcmVudCIsImluUHJlIiwid2FybmVkIiwid2Fybk9uY2UiLCJjbG9zZUVsZW1lbnQiLCJlbGVtZW50IiwidHJpbUVuZGluZ1doaXRlc3BhY2UiLCJwcm9jZXNzZWQiLCJwcm9jZXNzRWxlbWVudCIsImlmIiwiZWxzZWlmIiwiZWxzZSIsImNoZWNrUm9vdENvbnN0cmFpbnRzIiwiYWRkSWZDb25kaXRpb24iLCJibG9jayIsImZvcmJpZGRlbiIsInByb2Nlc3NJZkNvbmRpdGlvbnMiLCJzbG90U2NvcGUiLCJzbG90VGFyZ2V0IiwibGFzdE5vZGUiLCJjb21tZW50cyIsImd1YXJkSUVTVkdCdWciLCJjdW11bGF0ZWQiLCJpc0ZvcmJpZGRlblRhZyIsInByb2Nlc3NQcmUiLCJwcm9jZXNzUmF3QXR0cnMiLCJwcm9jZXNzRm9yIiwicHJvY2Vzc0lmIiwicHJvY2Vzc09uY2UiLCJpc1RleHRUYWciLCJwcm9jZXNzS2V5IiwicHJvY2Vzc1JlZiIsInByb2Nlc3NTbG90Q29udGVudCIsInByb2Nlc3NTbG90T3V0bGV0IiwicHJvY2Vzc0NvbXBvbmVudCIsInByb2Nlc3NBdHRycyIsImZvciIsIml0ZXJhdG9yMiIsIml0ZXJhdG9yMSIsImNoZWNrSW5Gb3IiLCJwYXJzZUZvciIsImluTWF0Y2giLCJhbGlhcyIsIml0ZXJhdG9yTWF0Y2giLCJmaW5kUHJldkVsZW1lbnQiLCJjb25kaXRpb24iLCJpZkNvbmRpdGlvbnMiLCJzbG90VGFyZ2V0RHluYW1pYyIsInNsb3RCaW5kaW5nIiwiZ2V0U2xvdE5hbWUiLCJuYW1lXzMiLCJzbG90Q29udGFpbmVyXzEiLCJzbG90TmFtZSIsInN5bmNHZW4iLCJpc0R5bmFtaWMiLCJoYXNCaW5kaW5ncyIsInBhcnNlTW9kaWZpZXJzIiwiY2FtZWwiLCJhcmdNYXRjaCIsImNoZWNrRm9yQWxpYXNNb2RlbCIsInJldF8xIiwiaWVOU0J1ZyIsImllTlNQcmVmaXgiLCJfZWwiLCJwcmVUcmFuc2Zvcm1Ob2RlIiwiaWZDb25kaXRpb24iLCJpZkNvbmRpdGlvbkV4dHJhIiwiaGFzRWxzZSIsImVsc2VJZkNvbmRpdGlvbiIsImJyYW5jaDAiLCJjbG9uZUFTVEVsZW1lbnQiLCJicmFuY2gxIiwiYnJhbmNoMiIsImJhc2VPcHRpb25zIiwiaXNTdGF0aWNLZXkiLCJpc1BsYXRmb3JtUmVzZXJ2ZWRUYWciLCJnZW5TdGF0aWNLZXlzQ2FjaGVkIiwiZ2VuU3RhdGljS2V5cyIsIm9wdGltaXplIiwibWFya1N0YXRpYyIsIm1hcmtTdGF0aWNSb290cyIsInN0YXRpYyIsInN0YXRpY0luRm9yIiwic3RhdGljUm9vdCIsImlzRGlyZWN0Q2hpbGRPZlRlbXBsYXRlRm9yIiwiZm5FeHBSRSIsImZuSW52b2tlUkUiLCJzaW1wbGVQYXRoUkUiLCJlc2MiLCJ0YWIiLCJzcGFjZSIsInVwIiwiZG93biIsImtleU5hbWVzIiwiZ2VuR3VhcmQiLCJtb2RpZmllckNvZGUiLCJzZWxmIiwiY3RybCIsImFsdCIsIm1ldGEiLCJnZW5IYW5kbGVycyIsInByZWZpeCIsInN0YXRpY0hhbmRsZXJzIiwiZHluYW1pY0hhbmRsZXJzIiwiaGFuZGxlckNvZGUiLCJnZW5IYW5kbGVyIiwiaXNNZXRob2RQYXRoIiwiaXNGdW5jdGlvbkV4cHJlc3Npb24iLCJpc0Z1bmN0aW9uSW52b2NhdGlvbiIsImdlbk1vZGlmaWVyQ29kZSIsIm1vZGlmaWVyc18xIiwia2V5TW9kaWZpZXIiLCJnZW5LZXlGaWx0ZXIiLCJnZW5GaWx0ZXJDb2RlIiwia2V5VmFsIiwia2V5Q29kZSIsImtleU5hbWUiLCJ3cmFwTGlzdGVuZXJzIiwid3JhcERhdGEiLCJiYXNlRGlyZWN0aXZlcyIsImNsb2FrIiwiQ29kZWdlblN0YXRlIiwiZGF0YUdlbkZucyIsIm9uY2VJZCIsImdlbmVyYXRlIiwiYXN0Iiwic3RhdGUiLCJnZW5FbGVtZW50Iiwic3RhdGljUHJvY2Vzc2VkIiwiZ2VuU3RhdGljIiwib25jZVByb2Nlc3NlZCIsImdlbk9uY2UiLCJmb3JQcm9jZXNzZWQiLCJnZW5Gb3IiLCJpZlByb2Nlc3NlZCIsImdlbklmIiwiZ2VuQ2hpbGRyZW4iLCJnZW5TbG90IiwiZ2VuQ29tcG9uZW50IiwiYmluZGluZ3MiLCJfX2lzU2NyaXB0U2V0dXAiLCJjaGVja0JpbmRpbmdUeXBlIiwiY2FtZWxOYW1lIiwiUGFzY2FsTmFtZSIsImNoZWNrVHlwZSIsImZyb21Db25zdCIsImZyb21NYXliZVJlZiIsIm9yaWdpbmFsUHJlU3RhdGUiLCJhbHRHZW4iLCJhbHRFbXB0eSIsImdlbklmQ29uZGl0aW9ucyIsImNvbmRpdGlvbnMiLCJnZW5UZXJuYXJ5RXhwIiwiYWx0SGVscGVyIiwiZ2VuRGlyZWN0aXZlcyIsImdlblByb3BzIiwiZ2VuU2NvcGVkU2xvdHMiLCJ
13835nZW5JbmxpbmVUZW1wbGF0ZSIsImhhc1J1bnRpbWUiLCJuZWVkUnVudGltZSIsImdlbiIsImlubGluZVJlbmRlckZucyIsImNvbnRhaW5zU2xvdENoaWxkIiwibmVlZHNLZXkiLCJwYXJlbnRfMiIsImdlbmVyYXRlZFNsb3RzIiwiZ2VuU2NvcGVkU2xvdCIsImlzTGVnYWN5U3ludGF4IiwicmV2ZXJzZVByb3h5IiwiY2hlY2tTa2lwIiwiYWx0R2VuRWxlbWVudCIsImFsdEdlbk5vZGUiLCJub3JtYWxpemF0aW9uVHlwZV8xIiwiZ2V0Tm9ybWFsaXphdGlvblR5cGUiLCJnZW5fMSIsImdlbk5vZGUiLCJuZWVkc05vcm1hbGl6YXRpb24iLCJnZW5Db21tZW50IiwiZ2VuVGV4dCIsInRyYW5zZm9ybVNwZWNpYWxOZXdsaW5lcyIsImNvbXBvbmVudE5hbWUiLCJzdGF0aWNQcm9wcyIsImR5bmFtaWNQcm9wcyIsInByb2hpYml0ZWRLZXl3b3JkUkUiLCJ1bmFyeU9wZXJhdG9yc1JFIiwic3RyaXBTdHJpbmdSRSIsImRldGVjdEVycm9ycyIsImNoZWNrTm9kZSIsImNoZWNrRm9yIiwiY2hlY2tGdW5jdGlvblBhcmFtZXRlckV4cHJlc3Npb24iLCJjaGVja0V2ZW50IiwiY2hlY2tFeHByZXNzaW9uIiwic3RyaXBwZWQiLCJrZXl3b3JkTWF0Y2giLCJjaGVja0lkZW50aWZpZXIiLCJpZGVudCIsImdlbmVyYXRlQ29kZUZyYW1lIiwibGluZXMiLCJjb3VudCIsInJlcGVhdCIsImxpbmVMZW5ndGgiLCJwYWQiLCJsZW5ndGhfMSIsImxlbmd0aF8yIiwibWluIiwiY3JlYXRlRnVuY3Rpb24iLCJlcnJvcnMiLCJjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuIiwiY29tcGlsZSIsImNvbXBpbGVUb0Z1bmN0aW9ucyIsImNvbXBpbGVkIiwidGlwcyIsImZuR2VuRXJyb3JzIiwiY3JlYXRlQ29tcGlsZXJDcmVhdG9yIiwiYmFzZUNvbXBpbGUiLCJjcmVhdGVDb21waWxlciIsImZpbmFsT3B0aW9ucyIsImxlYWRpbmdTcGFjZUxlbmd0aF8xIiwiZGl2IiwiZ2V0U2hvdWxkRGVjb2RlIiwiaWRUb1RlbXBsYXRlIiwibW91bnQiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRPdXRlckhUTUwiLCJvdXRlckhUTUwiLCJjb250YWluZXIiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfbmV4dCIsIl90aHJvdyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3R5cGVvZiIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJPcCIsIiRTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJkZWZpbmUiLCJpbm5lckZuIiwib3V0ZXJGbiIsInRyeUxvY3NMaXN0IiwicHJvdG9HZW5lcmF0b3IiLCJHZW5lcmF0b3IiLCJnZW5lcmF0b3IiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwiQ29udGludWVTZW50aW5lbCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJJdGVyYXRvclByb3RvdHlwZSIsImdldFByb3RvIiwiTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUiLCJHcCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiUHJvbWlzZUltcGwiLCJpbnZva2UiLCJyZWNvcmQiLCJfX2F3YWl0IiwidW53cmFwcGVkIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJkb25lUmVzdWx0IiwiZGVsZWdhdGUiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwibWV0aG9kTmFtZSIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJpdGVyYWJsZSIsIml0ZXJhdG9yTWV0aG9kIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsInNldFByb3RvdHlwZU9mIiwiYXdyYXAiLCJpdGVyIiwicmV2ZXJzZSIsInNraXBUZW1wUmVzZXQiLCJyb290UmVjb3JkIiwicnZhbCIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImZpbmFsbHlFbnRyeSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsInJ1bnRpbWUiLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJhY2NpZGVudGFsU3RyaWN0TW9kZSIsImdsb2JhbFRoaXMiLCJfdnVlIiwiX09wZW5pbmdIb3Vyc1N0YXR1cyIsInZ1ZUVsZW1lbnRzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsIk9wZW5pbmdIb3Vyc1N0YXR1cyJdLCJzb3VyY2VSb290IjoiIn0=
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.