// ==UserScript==
// @name Eldarya Enhancements
// @namespace https://gitlab.com/NatoBoram/eldarya-enhancements
// @license GPL-3.0-or-later
// @version 1.2.14
// @author Nato Boram
// @description Enhances the user experience of Eldarya.
// @description:pt Aprimora a experiência do usuário de Eldarya.
// @description:de Verbessert die Benutzererfahrung von Eldarya.
// @description:es Mejora la experiencia del usuario de Eldarya.
// @description:hu Javítja az Eldarya felhasználói élményét.
// @description:it Migliora l'esperienza utente di Eldarya.
// @description:pl Zwiększa wrażenia użytkownika Eldaryi.
// @description:ru Повышает удобство использования Эльдарьи.
// @description:en Enhances the user experience of Eldarya.
// @description:fr Améliore l'expérience utilisateur d'Eldarya.
// @icon https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/avatar.png
// @supportURL https://gitlab.com/NatoBoram/eldarya-enhancements/-/issues
// @contributionURL https://paypal.me/NatoBoram/5
//
// @match https://www.eldarya.com.br/*
// @match https://www.eldarya.de/*
// @match https://www.eldarya.es/*
// @match https://www.eldarya.hu/*
// @match https://www.eldarya.it/*
// @match https://www.eldarya.pl/*
// @match https://www.eldarya.ru/*
// @match https://www.eldarya.com/*
// @match https://www.eldarya.fr/*
//
// @grant none
// ==/UserScript==
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/.pnpm/[email protected]/node_modules/blob-util/dist/blob-util.es.js":
/*!****************************************************************************************!*\
!*** ./node_modules/.pnpm/[email protected]/node_modules/blob-util/dist/blob-util.es.js ***!
\****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "createBlob": () => (/* binding */ createBlob),
/* harmony export */ "createObjectURL": () => (/* binding */ createObjectURL),
/* harmony export */ "revokeObjectURL": () => (/* binding */ revokeObjectURL),
/* harmony export */ "blobToBinaryString": () => (/* binding */ blobToBinaryString),
/* harmony export */ "base64StringToBlob": () => (/* binding */ base64StringToBlob),
/* harmony export */ "binaryStringToBlob": () => (/* binding */ binaryStringToBlob),
/* harmony export */ "blobToBase64String": () => (/* binding */ blobToBase64String),
/* harmony export */ "dataURLToBlob": () => (/* binding */ dataURLToBlob),
/* harmony export */ "blobToDataURL": () => (/* binding */ blobToDataURL),
/* harmony export */ "imgSrcToDataURL": () => (/* binding */ imgSrcToDataURL),
/* harmony export */ "canvasToBlob": () => (/* binding */ canvasToBlob),
/* harmony export */ "imgSrcToBlob": () => (/* binding */ imgSrcToBlob),
/* harmony export */ "arrayBufferToBlob": () => (/* binding */ arrayBufferToBlob),
/* harmony export */ "blobToArrayBuffer": () => (/* binding */ blobToArrayBuffer),
/* harmony export */ "arrayBufferToBinaryString": () => (/* binding */ arrayBufferToBinaryString),
/* harmony export */ "binaryStringToArrayBuffer": () => (/* binding */ binaryStringToArrayBuffer)
/* harmony export */ });
// TODO: including these in blob-util.ts causes typedoc to generate docs for them,
// even with --excludePrivate ¯\_(ツ)_/¯
/** @private */
function loadImage(src, crossOrigin) {
return new Promise(function (resolve, reject) {
var img = new Image();
if (crossOrigin) {
img.crossOrigin = crossOrigin;
}
img.onload = function () {
resolve(img);
};
img.onerror = reject;
img.src = src;
});
}
/** @private */
function imgToCanvas(img) {
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
// copy the image contents to the canvas
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0, img.width, img.height, 0, 0, img.width, img.height);
return canvas;
}
/* global Promise, Image, Blob, FileReader, atob, btoa,
BlobBuilder, MSBlobBuilder, MozBlobBuilder, WebKitBlobBuilder, webkitURL */
/**
* Shim for
* [`new Blob()`](https://developer.mozilla.org/en-US/docs/Web/API/Blob.Blob)
* to support
* [older browsers that use the deprecated `BlobBuilder` API](http://caniuse.com/blob).
*
* Example:
*
* ```js
* var myBlob = blobUtil.createBlob(['hello world'], {type: 'text/plain'});
* ```
*
* @param parts - content of the Blob
* @param properties - usually `{type: myContentType}`,
* you can also pass a string for the content type
* @returns Blob
*/
function createBlob(parts, properties) {
parts = parts || [];
properties = properties || {};
if (typeof properties === 'string') {
properties = { type: properties }; // infer content type
}
try {
return new Blob(parts, properties);
}
catch (e) {
if (e.name !== 'TypeError') {
throw e;
}
var Builder = typeof BlobBuilder !== 'undefined'
? BlobBuilder : typeof MSBlobBuilder !== 'undefined'
? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined'
? MozBlobBuilder : WebKitBlobBuilder;
var builder = new Builder();
for (var i = 0; i < parts.length; i += 1) {
builder.append(parts[i]);
}
return builder.getBlob(properties.type);
}
}
/**
* Shim for
* [`URL.createObjectURL()`](https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL)
* to support browsers that only have the prefixed
* `webkitURL` (e.g. Android <4.4).
*
* Example:
*
* ```js
* var myUrl = blobUtil.createObjectURL(blob);
* ```
*
* @param blob
* @returns url
*/
function createObjectURL(blob) {
return (typeof URL !== 'undefined' ? URL : webkitURL).createObjectURL(blob);
}
/**
* Shim for
* [`URL.revokeObjectURL()`](https://developer.mozilla.org/en-US/docs/Web/API/URL.revokeObjectURL)
* to support browsers that only have the prefixed
* `webkitURL` (e.g. Android <4.4).
*
* Example:
*
* ```js
* blobUtil.revokeObjectURL(myUrl);
* ```
*
* @param url
*/
function revokeObjectURL(url) {
return (typeof URL !== 'undefined' ? URL : webkitURL).revokeObjectURL(url);
}
/**
* Convert a `Blob` to a binary string.
*
* Example:
*
* ```js
* blobUtil.blobToBinaryString(blob).then(function (binaryString) {
* // success
* }).catch(function (err) {
* // error
* });
* ```
*
* @param blob
* @returns Promise that resolves with the binary string
*/
function blobToBinaryString(blob) {
return new Promise(function (resolve, reject) {
var reader = new FileReader();
var hasBinaryString = typeof reader.readAsBinaryString === 'function';
reader.onloadend = function () {
var result = reader.result || '';
if (hasBinaryString) {
return resolve(result);
}
resolve(arrayBufferToBinaryString(result));
};
reader.onerror = reject;
if (hasBinaryString) {
reader.readAsBinaryString(blob);
}
else {
reader.readAsArrayBuffer(blob);
}
});
}
/**
* Convert a base64-encoded string to a `Blob`.
*
* Example:
*
* ```js
* var blob = blobUtil.base64StringToBlob(base64String);
* ```
* @param base64 - base64-encoded string
* @param type - the content type (optional)
* @returns Blob
*/
function base64StringToBlob(base64, type) {
var parts = [binaryStringToArrayBuffer(atob(base64))];
return type ? createBlob(parts, { type: type }) : createBlob(parts);
}
/**
* Convert a binary string to a `Blob`.
*
* Example:
*
* ```js
* var blob = blobUtil.binaryStringToBlob(binaryString);
* ```
*
* @param binary - binary string
* @param type - the content type (optional)
* @returns Blob
*/
function binaryStringToBlob(binary, type) {
return base64StringToBlob(btoa(binary), type);
}
/**
* Convert a `Blob` to a binary string.
*
* Example:
*
* ```js
* blobUtil.blobToBase64String(blob).then(function (base64String) {
* // success
* }).catch(function (err) {
* // error
* });
* ```
*
* @param blob
* @returns Promise that resolves with the binary string
*/
function blobToBase64String(blob) {
return blobToBinaryString(blob).then(btoa);
}
/**
* Convert a data URL string
* (e.g. `'data:image/png;base64,iVBORw0KG...'`)
* to a `Blob`.
*
* Example:
*
* ```js
* var blob = blobUtil.dataURLToBlob(dataURL);
* ```
*
* @param dataURL - dataURL-encoded string
* @returns Blob
*/
function dataURLToBlob(dataURL) {
var type = dataURL.match(/data:([^;]+)/)[1];
var base64 = dataURL.replace(/^[^,]+,/, '');
var buff = binaryStringToArrayBuffer(atob(base64));
return createBlob([buff], { type: type });
}
/**
* Convert a `Blob` to a data URL string
* (e.g. `'data:image/png;base64,iVBORw0KG...'`).
*
* Example:
*
* ```js
* var dataURL = blobUtil.blobToDataURL(blob);
* ```
*
* @param blob
* @returns Promise that resolves with the data URL string
*/
function blobToDataURL(blob) {
return blobToBase64String(blob).then(function (base64String) {
return 'data:' + blob.type + ';base64,' + base64String;
});
}
/**
* Convert an image's `src` URL to a data URL by loading the image and painting
* it to a `canvas`.
*
* Note: this will coerce the image to the desired content type, and it
* will only paint the first frame of an animated GIF.
*
* Examples:
*
* ```js
* blobUtil.imgSrcToDataURL('http://mysite.com/img.png').then(function (dataURL) {
* // success
* }).catch(function (err) {
* // error
* });
* ```
*
* ```js
* blobUtil.imgSrcToDataURL('http://some-other-site.com/img.jpg', 'image/jpeg',
* 'Anonymous', 1.0).then(function (dataURL) {
* // success
* }).catch(function (err) {
* // error
* });
* ```
*
* @param src - image src
* @param type - the content type (optional, defaults to 'image/png')
* @param crossOrigin - for CORS-enabled images, set this to
* 'Anonymous' to avoid "tainted canvas" errors
* @param quality - a number between 0 and 1 indicating image quality
* if the requested type is 'image/jpeg' or 'image/webp'
* @returns Promise that resolves with the data URL string
*/
function imgSrcToDataURL(src, type, crossOrigin, quality) {
type = type || 'image/png';
return loadImage(src, crossOrigin).then(imgToCanvas).then(function (canvas) {
return canvas.toDataURL(type, quality);
});
}
/**
* Convert a `canvas` to a `Blob`.
*
* Examples:
*
* ```js
* blobUtil.canvasToBlob(canvas).then(function (blob) {
* // success
* }).catch(function (err) {
* // error
* });
* ```
*
* Most browsers support converting a canvas to both `'image/png'` and `'image/jpeg'`. You may
* also want to try `'image/webp'`, which will work in some browsers like Chrome (and in other browsers, will just fall back to `'image/png'`):
*
* ```js
* blobUtil.canvasToBlob(canvas, 'image/webp').then(function (blob) {
* // success
* }).catch(function (err) {
* // error
* });
* ```
*
* @param canvas - HTMLCanvasElement
* @param type - the content type (optional, defaults to 'image/png')
* @param quality - a number between 0 and 1 indicating image quality
* if the requested type is 'image/jpeg' or 'image/webp'
* @returns Promise that resolves with the `Blob`
*/
function canvasToBlob(canvas, type, quality) {
if (typeof canvas.toBlob === 'function') {
return new Promise(function (resolve) {
canvas.toBlob(resolve, type, quality);
});
}
return Promise.resolve(dataURLToBlob(canvas.toDataURL(type, quality)));
}
/**
* Convert an image's `src` URL to a `Blob` by loading the image and painting
* it to a `canvas`.
*
* Note: this will coerce the image to the desired content type, and it
* will only paint the first frame of an animated GIF.
*
* Examples:
*
* ```js
* blobUtil.imgSrcToBlob('http://mysite.com/img.png').then(function (blob) {
* // success
* }).catch(function (err) {
* // error
* });
* ```
*
* ```js
* blobUtil.imgSrcToBlob('http://some-other-site.com/img.jpg', 'image/jpeg',
* 'Anonymous', 1.0).then(function (blob) {
* // success
* }).catch(function (err) {
* // error
* });
* ```
*
* @param src - image src
* @param type - the content type (optional, defaults to 'image/png')
* @param crossOrigin - for CORS-enabled images, set this to
* 'Anonymous' to avoid "tainted canvas" errors
* @param quality - a number between 0 and 1 indicating image quality
* if the requested type is 'image/jpeg' or 'image/webp'
* @returns Promise that resolves with the `Blob`
*/
function imgSrcToBlob(src, type, crossOrigin, quality) {
type = type || 'image/png';
return loadImage(src, crossOrigin).then(imgToCanvas).then(function (canvas) {
return canvasToBlob(canvas, type, quality);
});
}
/**
* Convert an `ArrayBuffer` to a `Blob`.
*
* Example:
*
* ```js
* var blob = blobUtil.arrayBufferToBlob(arrayBuff, 'audio/mpeg');
* ```
*
* @param buffer
* @param type - the content type (optional)
* @returns Blob
*/
function arrayBufferToBlob(buffer, type) {
return createBlob([buffer], type);
}
/**
* Convert a `Blob` to an `ArrayBuffer`.
*
* Example:
*
* ```js
* blobUtil.blobToArrayBuffer(blob).then(function (arrayBuff) {
* // success
* }).catch(function (err) {
* // error
* });
* ```
*
* @param blob
* @returns Promise that resolves with the `ArrayBuffer`
*/
function blobToArrayBuffer(blob) {
return new Promise(function (resolve, reject) {
var reader = new FileReader();
reader.onloadend = function () {
var result = reader.result || new ArrayBuffer(0);
resolve(result);
};
reader.onerror = reject;
reader.readAsArrayBuffer(blob);
});
}
/**
* Convert an `ArrayBuffer` to a binary string.
*
* Example:
*
* ```js
* var myString = blobUtil.arrayBufferToBinaryString(arrayBuff)
* ```
*
* @param buffer - array buffer
* @returns binary string
*/
function arrayBufferToBinaryString(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
var length = bytes.byteLength;
var i = -1;
while (++i < length) {
binary += String.fromCharCode(bytes[i]);
}
return binary;
}
/**
* Convert a binary string to an `ArrayBuffer`.
*
* ```js
* var myBuffer = blobUtil.binaryStringToArrayBuffer(binaryString)
* ```
*
* @param binary - binary string
* @returns array buffer
*/
function binaryStringToArrayBuffer(binary) {
var length = binary.length;
var buf = new ArrayBuffer(length);
var arr = new Uint8Array(buf);
var i = -1;
while (++i < length) {
arr[i] = binary.charCodeAt(i);
}
return buf;
}
/***/ }),
/***/ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/compiler.js":
/*!*********************************************************************************!*\
!*** ./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/compiler.js ***!
\*********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
/*
* Copyright 2011 Twitter, Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (Hogan) {
// Setup regex assignments
// remove whitespace according to Mustache spec
var rIsWhitespace = /\S/,
rQuot = /\"/g,
rNewline = /\n/g,
rCr = /\r/g,
rSlash = /\\/g,
rLineSep = /\u2028/,
rParagraphSep = /\u2029/;
Hogan.tags = {
'#': 1, '^': 2, '<': 3, '$': 4,
'/': 5, '!': 6, '>': 7, '=': 8, '_v': 9,
'{': 10, '&': 11, '_t': 12
};
Hogan.scan = function scan(text, delimiters) {
var len = text.length,
IN_TEXT = 0,
IN_TAG_TYPE = 1,
IN_TAG = 2,
state = IN_TEXT,
tagType = null,
tag = null,
buf = '',
tokens = [],
seenTag = false,
i = 0,
lineStart = 0,
otag = '{{',
ctag = '}}';
function addBuf() {
if (buf.length > 0) {
tokens.push({tag: '_t', text: new String(buf)});
buf = '';
}
}
function lineIsWhitespace() {
var isAllWhitespace = true;
for (var j = lineStart; j < tokens.length; j++) {
isAllWhitespace =
(Hogan.tags[tokens[j].tag] < Hogan.tags['_v']) ||
(tokens[j].tag == '_t' && tokens[j].text.match(rIsWhitespace) === null);
if (!isAllWhitespace) {
return false;
}
}
return isAllWhitespace;
}
function filterLine(haveSeenTag, noNewLine) {
addBuf();
if (haveSeenTag && lineIsWhitespace()) {
for (var j = lineStart, next; j < tokens.length; j++) {
if (tokens[j].text) {
if ((next = tokens[j+1]) && next.tag == '>') {
// set indent to token value
next.indent = tokens[j].text.toString()
}
tokens.splice(j, 1);
}
}
} else if (!noNewLine) {
tokens.push({tag:'\n'});
}
seenTag = false;
lineStart = tokens.length;
}
function changeDelimiters(text, index) {
var close = '=' + ctag,
closeIndex = text.indexOf(close, index),
delimiters = trim(
text.substring(text.indexOf('=', index) + 1, closeIndex)
).split(' ');
otag = delimiters[0];
ctag = delimiters[delimiters.length - 1];
return closeIndex + close.length - 1;
}
if (delimiters) {
delimiters = delimiters.split(' ');
otag = delimiters[0];
ctag = delimiters[1];
}
for (i = 0; i < len; i++) {
if (state == IN_TEXT) {
if (tagChange(otag, text, i)) {
--i;
addBuf();
state = IN_TAG_TYPE;
} else {
if (text.charAt(i) == '\n') {
filterLine(seenTag);
} else {
buf += text.charAt(i);
}
}
} else if (state == IN_TAG_TYPE) {
i += otag.length - 1;
tag = Hogan.tags[text.charAt(i + 1)];
tagType = tag ? text.charAt(i + 1) : '_v';
if (tagType == '=') {
i = changeDelimiters(text, i);
state = IN_TEXT;
} else {
if (tag) {
i++;
}
state = IN_TAG;
}
seenTag = i;
} else {
if (tagChange(ctag, text, i)) {
tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag,
i: (tagType == '/') ? seenTag - otag.length : i + ctag.length});
buf = '';
i += ctag.length - 1;
state = IN_TEXT;
if (tagType == '{') {
if (ctag == '}}') {
i++;
} else {
cleanTripleStache(tokens[tokens.length - 1]);
}
}
} else {
buf += text.charAt(i);
}
}
}
filterLine(seenTag, true);
return tokens;
}
function cleanTripleStache(token) {
if (token.n.substr(token.n.length - 1) === '}') {
token.n = token.n.substring(0, token.n.length - 1);
}
}
function trim(s) {
if (s.trim) {
return s.trim();
}
return s.replace(/^\s*|\s*$/g, '');
}
function tagChange(tag, text, index) {
if (text.charAt(index) != tag.charAt(0)) {
return false;
}
for (var i = 1, l = tag.length; i < l; i++) {
if (text.charAt(index + i) != tag.charAt(i)) {
return false;
}
}
return true;
}
// the tags allowed inside super templates
var allowedInSuper = {'_t': true, '\n': true, '$': true, '/': true};
function buildTree(tokens, kind, stack, customTags) {
var instructions = [],
opener = null,
tail = null,
token = null;
tail = stack[stack.length - 1];
while (tokens.length > 0) {
token = tokens.shift();
if (tail && tail.tag == '<' && !(token.tag in allowedInSuper)) {
throw new Error('Illegal content in < super tag.');
}
if (Hogan.tags[token.tag] <= Hogan.tags['$'] || isOpener(token, customTags)) {
stack.push(token);
token.nodes = buildTree(tokens, token.tag, stack, customTags);
} else if (token.tag == '/') {
if (stack.length === 0) {
throw new Error('Closing tag without opener: /' + token.n);
}
opener = stack.pop();
if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) {
throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n);
}
opener.end = token.i;
return instructions;
} else if (token.tag == '\n') {
token.last = (tokens.length == 0) || (tokens[0].tag == '\n');
}
instructions.push(token);
}
if (stack.length > 0) {
throw new Error('missing closing tag: ' + stack.pop().n);
}
return instructions;
}
function isOpener(token, tags) {
for (var i = 0, l = tags.length; i < l; i++) {
if (tags[i].o == token.n) {
token.tag = '#';
return true;
}
}
}
function isCloser(close, open, tags) {
for (var i = 0, l = tags.length; i < l; i++) {
if (tags[i].c == close && tags[i].o == open) {
return true;
}
}
}
function stringifySubstitutions(obj) {
var items = [];
for (var key in obj) {
items.push('"' + esc(key) + '": function(c,p,t,i) {' + obj[key] + '}');
}
return "{ " + items.join(",") + " }";
}
function stringifyPartials(codeObj) {
var partials = [];
for (var key in codeObj.partials) {
partials.push('"' + esc(key) + '":{name:"' + esc(codeObj.partials[key].name) + '", ' + stringifyPartials(codeObj.partials[key]) + "}");
}
return "partials: {" + partials.join(",") + "}, subs: " + stringifySubstitutions(codeObj.subs);
}
Hogan.stringify = function(codeObj, text, options) {
return "{code: function (c,p,i) { " + Hogan.wrapMain(codeObj.code) + " }," + stringifyPartials(codeObj) + "}";
}
var serialNo = 0;
Hogan.generate = function(tree, text, options) {
serialNo = 0;
var context = { code: '', subs: {}, partials: {} };
Hogan.walk(tree, context);
if (options.asString) {
return this.stringify(context, text, options);
}
return this.makeTemplate(context, text, options);
}
Hogan.wrapMain = function(code) {
return 'var t=this;t.b(i=i||"");' + code + 'return t.fl();';
}
Hogan.template = Hogan.Template;
Hogan.makeTemplate = function(codeObj, text, options) {
var template = this.makePartials(codeObj);
template.code = new Function('c', 'p', 'i', this.wrapMain(codeObj.code));
return new this.template(template, text, this, options);
}
Hogan.makePartials = function(codeObj) {
var key, template = {subs: {}, partials: codeObj.partials, name: codeObj.name};
for (key in template.partials) {
template.partials[key] = this.makePartials(template.partials[key]);
}
for (key in codeObj.subs) {
template.subs[key] = new Function('c', 'p', 't', 'i', codeObj.subs[key]);
}
return template;
}
function esc(s) {
return s.replace(rSlash, '\\\\')
.replace(rQuot, '\\\"')
.replace(rNewline, '\\n')
.replace(rCr, '\\r')
.replace(rLineSep, '\\u2028')
.replace(rParagraphSep, '\\u2029');
}
function chooseMethod(s) {
return (~s.indexOf('.')) ? 'd' : 'f';
}
function createPartial(node, context) {
var prefix = "<" + (context.prefix || "");
var sym = prefix + node.n + serialNo++;
context.partials[sym] = {name: node.n, partials: {}};
context.code += 't.b(t.rp("' + esc(sym) + '",c,p,"' + (node.indent || '') + '"));';
return sym;
}
Hogan.codegen = {
'#': function(node, context) {
context.code += 'if(t.s(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),' +
'c,p,0,' + node.i + ',' + node.end + ',"' + node.otag + " " + node.ctag + '")){' +
't.rs(c,p,' + 'function(c,p,t){';
Hogan.walk(node.nodes, context);
context.code += '});c.pop();}';
},
'^': function(node, context) {
context.code += 'if(!t.s(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),c,p,1,0,0,"")){';
Hogan.walk(node.nodes, context);
context.code += '};';
},
'>': createPartial,
'<': function(node, context) {
var ctx = {partials: {}, code: '', subs: {}, inPartial: true};
Hogan.walk(node.nodes, ctx);
var template = context.partials[createPartial(node, context)];
template.subs = ctx.subs;
template.partials = ctx.partials;
},
'$': function(node, context) {
var ctx = {subs: {}, code: '', partials: context.partials, prefix: node.n};
Hogan.walk(node.nodes, ctx);
context.subs[node.n] = ctx.code;
if (!context.inPartial) {
context.code += 't.sub("' + esc(node.n) + '",c,p,i);';
}
},
'\n': function(node, context) {
context.code += write('"\\n"' + (node.last ? '' : ' + i'));
},
'_v': function(node, context) {
context.code += 't.b(t.v(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));';
},
'_t': function(node, context) {
context.code += write('"' + esc(node.text) + '"');
},
'{': tripleStache,
'&': tripleStache
}
function tripleStache(node, context) {
context.code += 't.b(t.t(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));';
}
function write(s) {
return 't.b(' + s + ');';
}
Hogan.walk = function(nodelist, context) {
var func;
for (var i = 0, l = nodelist.length; i < l; i++) {
func = Hogan.codegen[nodelist[i].tag];
func && func(nodelist[i], context);
}
return context;
}
Hogan.parse = function(tokens, text, options) {
options = options || {};
return buildTree(tokens, '', [], options.sectionTags || []);
}
Hogan.cache = {};
Hogan.cacheKey = function(text, options) {
return [text, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join('||');
}
Hogan.compile = function(text, options) {
options = options || {};
var key = Hogan.cacheKey(text, options);
var template = this.cache[key];
if (template) {
var partials = template.partials;
for (var name in partials) {
delete partials[name].instance;
}
return template;
}
template = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options);
return this.cache[key] = template;
}
})( true ? exports : 0);
/***/ }),
/***/ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js":
/*!******************************************************************************!*\
!*** ./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js ***!
\******************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
/*
* Copyright 2011 Twitter, Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// This file is for use with Node.js. See dist/ for browser files.
var Hogan = __webpack_require__(/*! ./compiler */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/compiler.js");
Hogan.Template = (__webpack_require__(/*! ./template */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/template.js").Template);
Hogan.template = Hogan.Template;
module.exports = Hogan;
/***/ }),
/***/ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/template.js":
/*!*********************************************************************************!*\
!*** ./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/template.js ***!
\*********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {
/*
* Copyright 2011 Twitter, Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var Hogan = {};
(function (Hogan) {
Hogan.Template = function (codeObj, text, compiler, options) {
codeObj = codeObj || {};
this.r = codeObj.code || this.r;
this.c = compiler;
this.options = options || {};
this.text = text || '';
this.partials = codeObj.partials || {};
this.subs = codeObj.subs || {};
this.buf = '';
}
Hogan.Template.prototype = {
// render: replaced by generated code.
r: function (context, partials, indent) { return ''; },
// variable escaping
v: hoganEscape,
// triple stache
t: coerceToString,
render: function render(context, partials, indent) {
return this.ri([context], partials || {}, indent);
},
// render internal -- a hook for overrides that catches partials too
ri: function (context, partials, indent) {
return this.r(context, partials, indent);
},
// ensurePartial
ep: function(symbol, partials) {
var partial = this.partials[symbol];
// check to see that if we've instantiated this partial before
var template = partials[partial.name];
if (partial.instance && partial.base == template) {
return partial.instance;
}
if (typeof template == 'string') {
if (!this.c) {
throw new Error("No compiler available.");
}
template = this.c.compile(template, this.options);
}
if (!template) {
return null;
}
// We use this to check whether the partials dictionary has changed
this.partials[symbol].base = template;
if (partial.subs) {
// Make sure we consider parent template now
if (!partials.stackText) partials.stackText = {};
for (key in partial.subs) {
if (!partials.stackText[key]) {
partials.stackText[key] = (this.activeSub !== undefined && partials.stackText[this.activeSub]) ? partials.stackText[this.activeSub] : this.text;
}
}
template = createSpecializedPartial(template, partial.subs, partial.partials,
this.stackSubs, this.stackPartials, partials.stackText);
}
this.partials[symbol].instance = template;
return template;
},
// tries to find a partial in the current scope and render it
rp: function(symbol, context, partials, indent) {
var partial = this.ep(symbol, partials);
if (!partial) {
return '';
}
return partial.ri(context, partials, indent);
},
// render a section
rs: function(context, partials, section) {
var tail = context[context.length - 1];
if (!isArray(tail)) {
section(context, partials, this);
return;
}
for (var i = 0; i < tail.length; i++) {
context.push(tail[i]);
section(context, partials, this);
context.pop();
}
},
// maybe start a section
s: function(val, ctx, partials, inverted, start, end, tags) {
var pass;
if (isArray(val) && val.length === 0) {
return false;
}
if (typeof val == 'function') {
val = this.ms(val, ctx, partials, inverted, start, end, tags);
}
pass = !!val;
if (!inverted && pass && ctx) {
ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]);
}
return pass;
},
// find values with dotted names
d: function(key, ctx, partials, returnFound) {
var found,
names = key.split('.'),
val = this.f(names[0], ctx, partials, returnFound),
doModelGet = this.options.modelGet,
cx = null;
if (key === '.' && isArray(ctx[ctx.length - 2])) {
val = ctx[ctx.length - 1];
} else {
for (var i = 1; i < names.length; i++) {
found = findInScope(names[i], val, doModelGet);
if (found !== undefined) {
cx = val;
val = found;
} else {
val = '';
}
}
}
if (returnFound && !val) {
return false;
}
if (!returnFound && typeof val == 'function') {
ctx.push(cx);
val = this.mv(val, ctx, partials);
ctx.pop();
}
return val;
},
// find values with normal names
f: function(key, ctx, partials, returnFound) {
var val = false,
v = null,
found = false,
doModelGet = this.options.modelGet;
for (var i = ctx.length - 1; i >= 0; i--) {
v = ctx[i];
val = findInScope(key, v, doModelGet);
if (val !== undefined) {
found = true;
break;
}
}
if (!found) {
return (returnFound) ? false : "";
}
if (!returnFound && typeof val == 'function') {
val = this.mv(val, ctx, partials);
}
return val;
},
// higher order templates
ls: function(func, cx, partials, text, tags) {
var oldTags = this.options.delimiters;
this.options.delimiters = tags;
this.b(this.ct(coerceToString(func.call(cx, text)), cx, partials));
this.options.delimiters = oldTags;
return false;
},
// compile text
ct: function(text, cx, partials) {
if (this.options.disableLambda) {
throw new Error('Lambda features disabled.');
}
return this.c.compile(text, this.options).render(cx, partials);
},
// template result buffering
b: function(s) { this.buf += s; },
fl: function() { var r = this.buf; this.buf = ''; return r; },
// method replace section
ms: function(func, ctx, partials, inverted, start, end, tags) {
var textSource,
cx = ctx[ctx.length - 1],
result = func.call(cx);
if (typeof result == 'function') {
if (inverted) {
return true;
} else {
textSource = (this.activeSub && this.subsText && this.subsText[this.activeSub]) ? this.subsText[this.activeSub] : this.text;
return this.ls(result, cx, partials, textSource.substring(start, end), tags);
}
}
return result;
},
// method replace variable
mv: function(func, ctx, partials) {
var cx = ctx[ctx.length - 1];
var result = func.call(cx);
if (typeof result == 'function') {
return this.ct(coerceToString(result.call(cx)), cx, partials);
}
return result;
},
sub: function(name, context, partials, indent) {
var f = this.subs[name];
if (f) {
this.activeSub = name;
f(context, partials, this, indent);
this.activeSub = false;
}
}
};
//Find a key in an object
function findInScope(key, scope, doModelGet) {
var val;
if (scope && typeof scope == 'object') {
if (scope[key] !== undefined) {
val = scope[key];
// try lookup with get for backbone or similar model data
} else if (doModelGet && scope.get && typeof scope.get == 'function') {
val = scope.get(key);
}
}
return val;
}
function createSpecializedPartial(instance, subs, partials, stackSubs, stackPartials, stackText) {
function PartialTemplate() {};
PartialTemplate.prototype = instance;
function Substitutions() {};
Substitutions.prototype = instance.subs;
var key;
var partial = new PartialTemplate();
partial.subs = new Substitutions();
partial.subsText = {}; //hehe. substext.
partial.buf = '';
stackSubs = stackSubs || {};
partial.stackSubs = stackSubs;
partial.subsText = stackText;
for (key in subs) {
if (!stackSubs[key]) stackSubs[key] = subs[key];
}
for (key in stackSubs) {
partial.subs[key] = stackSubs[key];
}
stackPartials = stackPartials || {};
partial.stackPartials = stackPartials;
for (key in partials) {
if (!stackPartials[key]) stackPartials[key] = partials[key];
}
for (key in stackPartials) {
partial.partials[key] = stackPartials[key];
}
return partial;
}
var rAmp = /&/g,
rLt = /</g,
rGt = />/g,
rApos = /\'/g,
rQuot = /\"/g,
hChars = /[&<>\"\']/;
function coerceToString(val) {
return String((val === null || val === undefined) ? '' : val);
}
function hoganEscape(str) {
str = coerceToString(str);
return hChars.test(str) ?
str
.replace(rAmp, '&')
.replace(rLt, '<')
.replace(rGt, '>')
.replace(rApos, ''')
.replace(rQuot, '"') :
str;
}
var isArray = Array.isArray || function(a) {
return Object.prototype.toString.call(a) === '[object Array]';
};
})( true ? exports : 0);
/***/ }),
/***/ "./src/templates/html/appearance_item.html":
/*!*************************************************!*\
!*** ./src/templates/html/appearance_item.html ***!
\*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li");t.b("\n" + i);t.b(" id=\"appearance-item-");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" class=\"appearance-item group-");t.b(t.v(t.f("group",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" data-itemid=\"");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" data-name=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" data-rarity=\"");t.b(t.v(t.f("rarity",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" data-rarityname=\"");t.b(t.v(t.f("rarityname",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b(" <div class=\"rarity-marker-");t.b(t.v(t.f("rarity",c,p,0)));t.b("\"></div>");t.b("\n" + i);t.b(" <img class=\"appearance-item-icon\" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<li\n id=\"appearance-item-{{itemid}}\"\n class=\"appearance-item group-{{group}}\"\n data-itemid=\"{{itemid}}\"\n data-name=\"{{name}}\"\n data-rarity=\"{{rarity}}\"\n data-rarityname=\"{{rarityname}}\"\n>\n <div class=\"rarity-marker-{{rarity}}\"></div>\n <img class=\"appearance-item-icon\" src=\"{{icon}}\" />\n</li>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/appearance_items_category.html":
/*!***********************************************************!*\
!*** ./src/templates/html/appearance_items_category.html ***!
\***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div");t.b("\n" + i);t.b(" id=\"ee-category\"");t.b("\n" + i);t.b(" class=\"appearance-items-category active\"");t.b("\n" + i);t.b(" data-category=\"");t.b(t.v(t.f("category",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" data-categoryid=\"");t.b(t.v(t.f("categoryid",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b(" <style>");t.b("\n" + i);t.b(" #ee-items {");t.b("\n" + i);t.b(" scrollbar-color: dark;");t.b("\n" + i);t.b(" scrollbar-width: thin;");t.b("\n" + i);t.b(" }");t.b("\n" + i);t.b(" </style>");t.b("\n" + i);t.b(" <ul");t.b("\n" + i);t.b(" class=\"appearance-items-list\"");t.b("\n" + i);t.b(" id=\"ee-items\"");t.b("\n" + i);t.b(" style=\"max-height: calc(100vh - 565px)\"");t.b("\n" + i);t.b(" >");t.b("\n" + i);t.b(" ");t.b(t.t(t.f("items",c,p,0)));t.b("\n" + i);t.b(" </ul>");t.b("\n");t.b("\n" + i);t.b(" <!-- Info -->");t.b("\n" + i);t.b(" <div id=\"ee-info\" class=\"appearance-items-info\">");t.b("\n" + i);t.b(" <div class=\"appearance-info-tips\"></div>");t.b("\n");t.b("\n" + i);t.b(" <h3 class=\"appearance-item-info-name\"></h3>");t.b("\n");t.b("\n" + i);t.b(" <div class=\"appearance-item-info-guard\"></div>");t.b("\n" + i);t.b(" <div class=\"appearance-item-info-rarity\"></div>");t.b("\n" + i);t.b(" <div class=\"appearance-item-info-buttons\">");t.b("\n" + i);t.b(" <div class=\"appearance-forward nl-button\">");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.appearance.buttons.forward",c,p,0)));t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" <div class=\"appearance-backward nl-button\">");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.appearance.buttons.backward",c,p,0)));t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<div\n id=\"ee-category\"\n class=\"appearance-items-category active\"\n data-category=\"{{category}}\"\n data-categoryid=\"{{categoryid}}\"\n>\n <style>\n #ee-items {\n scrollbar-color: dark;\n scrollbar-width: thin;\n }\n </style>\n <ul\n class=\"appearance-items-list\"\n id=\"ee-items\"\n style=\"max-height: calc(100vh - 565px)\"\n >\n {{{items}}}\n </ul>\n\n <!-- Info -->\n <div id=\"ee-info\" class=\"appearance-items-info\">\n <div class=\"appearance-info-tips\"></div>\n\n <h3 class=\"appearance-item-info-name\"></h3>\n\n <div class=\"appearance-item-info-guard\"></div>\n <div class=\"appearance-item-info-rarity\"></div>\n <div class=\"appearance-item-info-buttons\">\n <div class=\"appearance-forward nl-button\">\n {{translate.appearance.buttons.forward}}\n </div>\n <div class=\"appearance-backward nl-button\">\n {{translate.appearance.buttons.backward}}\n </div>\n </div>\n </div>\n</div>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/appearance_items_group.html":
/*!********************************************************!*\
!*** ./src/templates/html/appearance_items_group.html ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div");t.b("\n" + i);t.b(" id=\"appearance-items-group-");t.b(t.v(t.f("group",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" class=\"appearance-items-category\"");t.b("\n" + i);t.b(" data-categoryid=\"");t.b(t.v(t.f("categoryid",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" data-category=\"");t.b(t.v(t.f("category",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b(" <ul class=\"appearance-items-list\">");t.b("\n" + i);t.b(" ");t.b(t.t(t.f("items",c,p,0)));t.b("\n" + i);t.b(" </ul>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<div\n id=\"appearance-items-group-{{group}}\"\n class=\"appearance-items-category\"\n data-categoryid=\"{{categoryid}}\"\n data-category=\"{{category}}\"\n>\n <ul class=\"appearance-items-list\">\n {{{items}}}\n </ul>\n</div>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/auto_buy_button.html":
/*!*************************************************!*\
!*** ./src/templates/html/auto_buy_button.html ***!
\*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div");t.b("\n" + i);t.b(" id=\"marketplace-itemDetail-info-autobuy\"");t.b("\n" + i);t.b(" style=\"text-align: center; margin: 20px auto\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b(" <div class=\"nl-button\">");t.b(t.v(t.d("translate.market.add_to_wishlist.title",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<div\n id=\"marketplace-itemDetail-info-autobuy\"\n style=\"text-align: center; margin: 20px auto\"\n>\n <div class=\"nl-button\">{{translate.market.add_to_wishlist.title}}</div>\n</div>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/auto_buy_flavr.html":
/*!************************************************!*\
!*** ./src/templates/html/auto_buy_flavr.html ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.market.add_to_wishlist.title",c,p,0)));t.b("</h1>");t.b("\n" + i);t.b("<p>");t.b(t.v(t.d("translate.market.add_to_wishlist.text",c,p,0)));t.b("</p>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<h1>{{translate.market.add_to_wishlist.title}}</h1>\n<p>{{translate.market.add_to_wishlist.text}}</p>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/auto_buy_flavr_mall.html":
/*!*****************************************************!*\
!*** ./src/templates/html/auto_buy_flavr_mall.html ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.mall.add_to_wishlist.title",c,p,0)));t.b("</h1>");t.b("\n" + i);t.b("<p>");t.b(t.v(t.d("translate.mall.add_to_wishlist.text",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("<p style=\"font-size: 14px\"><em>");t.b(t.v(t.d("translate.mall.add_to_wishlist.note",c,p,0)));t.b("</em></p>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<h1>{{translate.mall.add_to_wishlist.title}}</h1>\n<p>{{translate.mall.add_to_wishlist.text}}</p>\n<p style=\"font-size: 14px\"><em>{{translate.mall.add_to_wishlist.note}}</em></p>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/auto_explore_button.html":
/*!*****************************************************!*\
!*** ./src/templates/html/auto_explore_button.html ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<button");t.b("\n" + i);t.b(" id=\"auto-explore-button\"");t.b("\n" + i);t.b(" class=\"nl-button ");if(t.s(t.f("active",c,p,1),c,p,0,65,71,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b(" data-id=\"");t.b(t.v(t.f("locationId",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" data-mapid=\"");t.b(t.v(t.f("regionId",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.pet.auto_explore",c,p,0)));t.b("\n" + i);t.b("</button>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<button\n id=\"auto-explore-button\"\n class=\"nl-button {{#active}}active{{/active}}\"\n data-id=\"{{locationId}}\"\n data-mapid=\"{{regionId}}\"\n>\n {{translate.pet.auto_explore}}\n</button>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/carousel_news.html":
/*!***********************************************!*\
!*** ./src/templates/html/carousel_news.html ***!
\***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<a");t.b("\n" + i);t.b(" id=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" class=\"carousel-news carousel-ee\"");t.b("\n" + i);t.b(" href=\"\"");t.b("\n" + i);t.b(" style=\"background-image: url(");t.b(t.v(t.f("backgroundImage",c,p,0)));t.b(")\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b(" <div>");t.b("\n" + i);t.b(" <h4>");t.b(t.v(t.f("h4",c,p,0)));t.b("</h4>");t.b("\n" + i);t.b(" <h5>");t.b(t.v(t.f("h5",c,p,0)));t.b("</h5>");t.b("\n" + i);t.b(" <p>");t.b(t.v(t.f("p",c,p,0)));t.b("</p>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b("</a>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<a\n id=\"{{id}}\"\n class=\"carousel-news carousel-ee\"\n href=\"\"\n style=\"background-image: url({{backgroundImage}})\"\n>\n <div>\n <h4>{{h4}}</h4>\n <h5>{{h5}}</h5>\n <p>{{p}}</p>\n </div>\n</a>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/change_price_flavr.html":
/*!****************************************************!*\
!*** ./src/templates/html/change_price_flavr.html ***!
\****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.market.change_price.title",c,p,0)));t.b("</h1>");t.b("\n" + i);t.b("<p>");t.b(t.v(t.d("translate.market.change_price.text",c,p,0)));t.b("</p>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<h1>{{translate.market.change_price.title}}</h1>\n<p>{{translate.market.change_price.text}}</p>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/created_outfit_flavr.html":
/*!******************************************************!*\
!*** ./src/templates/html/created_outfit_flavr.html ***!
\******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.appearance.favourites.save_outfit.title",c,p,0)));t.b("</h1>");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.save_outfit.saved_locally",c,p,0)));t.b("</p>");t.b("\n");t.b("\n" + i);t.b("<br />");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.save_outfit.goto_account",c,p,0)));t.b("</p>");t.b("\n");t.b("\n" + i);t.b("<input");t.b("\n" + i);t.b(" id=\"choose-name\"");t.b("\n" + i);t.b(" maxlength=\"30\"");t.b("\n" + i);t.b(" minlength=\"1\"");t.b("\n" + i);t.b(" placeholder=\"");t.b(t.v(t.d("translate.appearance.favourites.save_outfit.placeholder",c,p,0)));t.b("\"");t.b("\n" + i);t.b("/>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<h1>{{translate.appearance.favourites.save_outfit.title}}</h1>\n\n<p>{{{translate.appearance.favourites.save_outfit.saved_locally}}}</p>\n\n<br />\n\n<p>{{{translate.appearance.favourites.save_outfit.goto_account}}}</p>\n\n<input\n id=\"choose-name\"\n maxlength=\"30\"\n minlength=\"1\"\n placeholder=\"{{translate.appearance.favourites.save_outfit.placeholder}}\"\n/>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/exploration_history.html":
/*!*****************************************************!*\
!*** ./src/templates/html/exploration_history.html ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div id=\"history-container\" style=\"width: 100%\">");t.b("\n" + i);t.b(" <style>");t.b("\n" + i);t.b(" .history-actions {");t.b("\n" + i);t.b(" margin-bottom: 1em;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #delete-history {");t.b("\n" + i);t.b(" margin-right: 1em;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .help-icon {");t.b("\n" + i);t.b(" background-color: #0291f6;");t.b("\n" + i);t.b(" border-radius: 50%;");t.b("\n" + i);t.b(" box-shadow: none;");t.b("\n" + i);t.b(" color: #fff;");t.b("\n" + i);t.b(" font-size: 26px;");t.b("\n" + i);t.b(" font-weight: bold;");t.b("\n" + i);t.b(" height: 23px;");t.b("\n" + i);t.b(" line-height: 20px;");t.b("\n" + i);t.b(" padding: 0;");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" width: 23px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .history-message {");t.b("\n" + i);t.b(" background-color: rgba(255, 255, 255, 0.7);");t.b("\n" + i);t.b(" border-radius: 1em;");t.b("\n" + i);t.b(" margin: 1em;");t.b("\n" + i);t.b(" padding: 1em;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .history-row {");t.b("\n" + i);t.b(" display: flex;");t.b("\n" + i);t.b(" flex-wrap: wrap;");t.b("\n" + i);t.b(" height: 465px;");t.b("\n" + i);t.b(" margin-right: 1em;");t.b("\n" + i);t.b(" overflow-y: auto;");t.b("\n" + i);t.b(" scrollbar-color: dark;");t.b("\n" + i);t.b(" scrollbar-width: thin;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-card {");t.b("\n" + i);t.b(" background-color: white;");t.b("\n" + i);t.b(" border-radius: 1em;");t.b("\n" + i);t.b(" box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.3);");t.b("\n" + i);t.b(" height: 205px;");t.b("\n" + i);t.b(" margin: 0.5em;");t.b("\n" + i);t.b(" padding: 0.5em;");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" width: 128px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-image {");t.b("\n" + i);t.b(" background-color: white;");t.b("\n" + i);t.b(" border-radius: 1em;");t.b("\n" + i);t.b(" box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.12),");t.b("\n" + i);t.b(" 0 2px 4px 2px rgba(0, 0, 0, 0.08);");t.b("\n" + i);t.b(" height: 100px;");t.b("\n" + i);t.b(" position: relative;");t.b("\n" + i);t.b(" top: -0.8em;");t.b("\n" + i);t.b(" width: 100px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-content-column {");t.b("\n" + i);t.b(" display: flex;");t.b("\n" + i);t.b(" flex-direction: column;");t.b("\n" + i);t.b(" height: 103px;");t.b("\n" + i);t.b(" justify-content: space-between;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-name {");t.b("\n" + i);t.b(" -webkit-box-orient: vertical;");t.b("\n" + i);t.b(" -webkit-line-clamp: 3;");t.b("\n" + i);t.b(" color: rgb(52, 56, 111);");t.b("\n" + i);t.b(" display: -webkit-box;");t.b("\n" + i);t.b(" flex-grow: 1;");t.b("\n" + i);t.b(" font-size: 16px;");t.b("\n" + i);t.b(" font-weight: bold;");t.b("\n" + i);t.b(" margin-top: -0.2em;");t.b("\n" + i);t.b(" overflow: hidden;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-location {");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-date {");t.b("\n" + i);t.b(" color: #fb8900;");t.b("\n" + i);t.b(" font-size: 13px;");t.b("\n" + i);t.b(" font-weight: bold;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-icons {");t.b("\n" + i);t.b(" margin-top: 0.5em;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-count {");t.b("\n" + i);t.b(" background: #ffffff;");t.b("\n" + i);t.b(" border-radius: 100%;");t.b("\n" + i);t.b(" border: 1px solid #00cdfb;");t.b("\n" + i);t.b(" box-sizing: border-box;");t.b("\n" + i);t.b(" color: #3ec0d7;");t.b("\n" + i);t.b(" display: inline-block;");t.b("\n" + i);t.b(" font-family: \"Alegreya Sans SC\", sans-serif;");t.b("\n" + i);t.b(" font-size: 18px;");t.b("\n" + i);t.b(" font-weight: 800;");t.b("\n" + i);t.b(" height: 29px;");t.b("\n" + i);t.b(" line-height: 27px;");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" user-select: none;");t.b("\n" + i);t.b(" width: 29px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .history-tradable {");t.b("\n" + i);t.b(" background-color: #666;");t.b("\n" + i);t.b(" border-radius: 25px;");t.b("\n" + i);t.b(" border: 1px solid #b9b9b9;");t.b("\n" + i);t.b(" color: #ffffff;");t.b("\n" + i);t.b(" display: inline-block;");t.b("\n" + i);t.b(" font-family: \"Temp Menu\", serif;");t.b("\n" + i);t.b(" font-size: 13px;");t.b("\n" + i);t.b(" height: 15px;");t.b("\n" + i);t.b(" line-height: 15px;");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" width: 15px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .icon-spacer {");t.b("\n" + i);t.b(" display: inline-block;");t.b("\n" + i);t.b(" width: 0.1em;");t.b("\n" + i);t.b(" }");t.b("\n" + i);t.b(" </style>");t.b("\n");t.b("\n" + i);t.b(" <div class=\"history-actions\">");t.b("\n" + i);t.b(" <button id=\"delete-history\" class=\"nl-button\">");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.pet.delete_history",c,p,0)));t.b("\n" + i);t.b(" </button>");t.b("\n");t.b("\n" + i);t.b(" <span class=\"tooltip\">");t.b("\n" + i);t.b(" <span class=\"nl-button help-icon\">?</span>");t.b("\n" + i);t.b(" <div class=\"tooltip-content\">");t.b("\n" + i);t.b(" <p>");t.b(t.t(t.d("translate.pet.saved_locally",c,p,0)));t.b("</p>");t.b("\n" + i);t.b(" <p>");t.b(t.t(t.d("translate.pet.goto_account",c,p,0)));t.b("</p>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </span>");t.b("\n" + i);t.b(" </div>");t.b("\n");t.b("\n" + i);if(!t.s(t.f("history",c,p,1),c,p,1,0,0,"")){t.b(" <p class=\"history-message\">");t.b(t.v(t.d("translate.pet.empty_history",c,p,0)));t.b("</p>");t.b("\n" + i);};t.b("\n" + i);t.b(" <div class=\"history-row\">");t.b("\n" + i);if(t.s(t.f("history",c,p,1),c,p,0,3230,3863,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" <div class=\"result-card\">");t.b("\n" + i);t.b(" <img class=\"result-image\" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n");t.b("\n" + i);t.b(" <div class=\"result-content-column\">");t.b("\n" + i);t.b(" <div class=\"result-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" <div class=\"result-location\">");t.b(t.v(t.f("locationName",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" <div class=\"result-date\">");t.b(t.v(t.f("date",c,p,0)));t.b("</div>");t.b("\n");t.b("\n" + i);t.b(" <div class=\"result-icons\">");t.b("\n" + i);t.b(" ");if(t.s(t.f("count",c,p,1),c,p,0,3566,3609,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("<span class=\"result-count\">");t.b(t.v(t.f("count",c,p,0)));t.b("</span>");});c.pop();}t.b("\n" + i);if(t.s(t.f("count",c,p,1),c,p,0,3640,3719,"{{ }}")){t.rs(c,p,function(c,p,t){if(t.s(t.f("tradable",c,p,1),c,p,0,3653,3706,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" <div class=\"icon-spacer\"></div>");t.b("\n" + i);t.b(" ");});c.pop();}});c.pop();}t.b(" ");if(t.s(t.f("tradable",c,p,1),c,p,0,3743,3806,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("<span class=\"history-tradable\"");t.b("\n" + i);t.b(" ></span");t.b("\n" + i);t.b(" >");});c.pop();}t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);});c.pop();}t.b(" </div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<div id=\"history-container\" style=\"width: 100%\">\n <style>\n .history-actions {\n margin-bottom: 1em;\n }\n\n #delete-history {\n margin-right: 1em;\n }\n\n .help-icon {\n background-color: #0291f6;\n border-radius: 50%;\n box-shadow: none;\n color: #fff;\n font-size: 26px;\n font-weight: bold;\n height: 23px;\n line-height: 20px;\n padding: 0;\n text-align: center;\n width: 23px;\n }\n\n .history-message {\n background-color: rgba(255, 255, 255, 0.7);\n border-radius: 1em;\n margin: 1em;\n padding: 1em;\n }\n\n .history-row {\n display: flex;\n flex-wrap: wrap;\n height: 465px;\n margin-right: 1em;\n overflow-y: auto;\n scrollbar-color: dark;\n scrollbar-width: thin;\n }\n\n .result-card {\n background-color: white;\n border-radius: 1em;\n box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.3);\n height: 205px;\n margin: 0.5em;\n padding: 0.5em;\n text-align: center;\n width: 128px;\n }\n\n .result-image {\n background-color: white;\n border-radius: 1em;\n box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.12),\n 0 2px 4px 2px rgba(0, 0, 0, 0.08);\n height: 100px;\n position: relative;\n top: -0.8em;\n width: 100px;\n }\n\n .result-content-column {\n display: flex;\n flex-direction: column;\n height: 103px;\n justify-content: space-between;\n }\n\n .result-name {\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n color: rgb(52, 56, 111);\n display: -webkit-box;\n flex-grow: 1;\n font-size: 16px;\n font-weight: bold;\n margin-top: -0.2em;\n overflow: hidden;\n }\n\n .result-location {\n }\n\n .result-date {\n color: #fb8900;\n font-size: 13px;\n font-weight: bold;\n }\n\n .result-icons {\n margin-top: 0.5em;\n }\n\n .result-count {\n background: #ffffff;\n border-radius: 100%;\n border: 1px solid #00cdfb;\n box-sizing: border-box;\n color: #3ec0d7;\n display: inline-block;\n font-family: \"Alegreya Sans SC\", sans-serif;\n font-size: 18px;\n font-weight: 800;\n height: 29px;\n line-height: 27px;\n text-align: center;\n user-select: none;\n width: 29px;\n }\n\n .history-tradable {\n background-color: #666;\n border-radius: 25px;\n border: 1px solid #b9b9b9;\n color: #ffffff;\n display: inline-block;\n font-family: \"Temp Menu\", serif;\n font-size: 13px;\n height: 15px;\n line-height: 15px;\n text-align: center;\n width: 15px;\n }\n\n .icon-spacer {\n display: inline-block;\n width: 0.1em;\n }\n </style>\n\n <div class=\"history-actions\">\n <button id=\"delete-history\" class=\"nl-button\">\n {{translate.pet.delete_history}}\n </button>\n\n <span class=\"tooltip\">\n <span class=\"nl-button help-icon\">?</span>\n <div class=\"tooltip-content\">\n <p>{{{translate.pet.saved_locally}}}</p>\n <p>{{{translate.pet.goto_account}}}</p>\n </div>\n </span>\n </div>\n\n {{^history}}\n <p class=\"history-message\">{{translate.pet.empty_history}}</p>\n {{/history}}\n\n <div class=\"history-row\">\n {{#history}}\n <div class=\"result-card\">\n <img class=\"result-image\" src=\"{{icon}}\" />\n\n <div class=\"result-content-column\">\n <div class=\"result-name\">{{name}}</div>\n <div class=\"result-location\">{{locationName}}</div>\n <div class=\"result-date\">{{date}}</div>\n\n <div class=\"result-icons\">\n {{#count}}<span class=\"result-count\">{{count}}</span>{{/count}}\n {{#count}}{{#tradable}}\n <div class=\"icon-spacer\"></div>\n {{/tradable}}{{/count}} {{#tradable}}<span class=\"history-tradable\"\n ></span\n >{{/tradable}}\n </div>\n </div>\n </div>\n {{/history}}\n </div>\n</div>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/favourite_outfit_flavr.html":
/*!********************************************************!*\
!*** ./src/templates/html/favourite_outfit_flavr.html ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<style>");t.b("\n" + i);t.b(" .created-outfit-popup .flavr-outer .flavr-message::after {");t.b("\n" + i);t.b(" background-image: url(");t.b(t.v(t.f("url",c,p,0)));t.b(");");t.b("\n" + i);t.b(" background-size: contain;");t.b("\n" + i);t.b(" }");t.b("\n" + i);t.b("</style>");t.b("\n");t.b("\n" + i);t.b("<h1>");t.b(t.v(t.f("name",c,p,0)));t.b("</h1>");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.click_outfit.saved_locally",c,p,0)));t.b("</p>");t.b("\n");t.b("\n" + i);t.b("<br />");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.click_outfit.goto_account",c,p,0)));t.b("</p>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<style>\n .created-outfit-popup .flavr-outer .flavr-message::after {\n background-image: url({{url}});\n background-size: contain;\n }\n</style>\n\n<h1>{{name}}</h1>\n\n<p>{{{translate.appearance.favourites.click_outfit.saved_locally}}}</p>\n\n<br />\n\n<p>{{{translate.appearance.favourites.click_outfit.goto_account}}}</p>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/favourites_action.html":
/*!***************************************************!*\
!*** ./src/templates/html/favourites_action.html ***!
\***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<button id=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\" class=\"nl-button favorites-action-ee\">");t.b(t.v(t.f("text",c,p,0)));t.b("</button>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<button id=\"{{id}}\" class=\"nl-button favorites-action-ee\">{{text}}</button>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/flavr_notif/icon_message.html":
/*!**********************************************************!*\
!*** ./src/templates/html/flavr_notif/icon_message.html ***!
\**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<img");t.b("\n" + i);t.b(" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" alt=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" height=\"21\"");t.b("\n" + i);t.b(" style=\"display: inline-block; margin: -2px auto\"");t.b("\n" + i);t.b("/>");t.b("\n" + i);t.b(t.t(t.f("message",c,p,0)));t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<img\n src=\"{{icon}}\"\n alt=\"{{name}}\"\n height=\"21\"\n style=\"display: inline-block; margin: -2px auto\"\n/>\n{{{message}}}\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/header_takeover.html":
/*!*************************************************!*\
!*** ./src/templates/html/header_takeover.html ***!
\*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li");t.b("\n" + i);t.b(" id=\"header-takeover\"");t.b("\n" + i);t.b(" title=\"");t.b(t.v(t.d("translate.home.takeover",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" style=\"transition: transform ease-in-out 200ms; cursor: pointer\"");t.b("\n" + i);t.b(" onMouseOver=\"this.style.transform='scale(1.3)'\"");t.b("\n" + i);t.b(" onMouseOut=\"this.style.transform='scale(1)'\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b(" <a>");t.b("\n" + i);t.b(" <img");t.b("\n" + i);t.b(" src=\"/static/img/new-layout/home/connected/lock.png\"");t.b("\n" + i);t.b(" alt=\"");t.b(t.v(t.d("translate.home.takeover",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" style=\"filter: contrast(0%) brightness(200%) ");if(!t.s(t.f("takeover",c,p,1),c,p,1,0,0,"")){t.b("opacity(0)");};t.b("\"");t.b("\n" + i);t.b(" height=\"21\"");t.b("\n" + i);t.b(" />");t.b("\n" + i);t.b(" </a>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<li\n id=\"header-takeover\"\n title=\"{{translate.home.takeover}}\"\n style=\"transition: transform ease-in-out 200ms; cursor: pointer\"\n onMouseOver=\"this.style.transform='scale(1.3)'\"\n onMouseOut=\"this.style.transform='scale(1)'\"\n>\n <a>\n <img\n src=\"/static/img/new-layout/home/connected/lock.png\"\n alt=\"{{translate.home.takeover}}\"\n style=\"filter: contrast(0%) brightness(200%) {{^takeover}}opacity(0){{/takeover}}\"\n height=\"21\"\n />\n </a>\n</li>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/home_content_small.html":
/*!****************************************************!*\
!*** ./src/templates/html/home_content_small.html ***!
\****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<a");t.b("\n" + i);t.b(" id=\"home-");t.b(t.v(t.f("id",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" class=\"home-content-tile home-content-small home-content-small-ee\"");t.b("\n" + i);t.b(" href=\"");t.b(t.v(t.f("href",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" style=\"background-image: url(");t.b(t.v(t.f("backgroundImage",c,p,0)));t.b(");\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b(" <h4>");t.b(t.v(t.f("h4",c,p,0)));t.b("</h4>");t.b("\n" + i);t.b("</a>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<a\n id=\"home-{{id}}\"\n class=\"home-content-tile home-content-small home-content-small-ee\"\n href=\"{{href}}\"\n style=\"background-image: url({{backgroundImage}});\"\n>\n <h4>{{h4}}</h4>\n</a>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/main_menu.html":
/*!*******************************************!*\
!*** ./src/templates/html/main_menu.html ***!
\*******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li class=\"main-menu-");t.b(t.v(t.f("class",c,p,0)));t.b(" main-menu-ee\">");t.b("\n" + i);t.b(" <a href=\"");t.b(t.v(t.f("href",c,p,0)));t.b("\">");t.b(t.v(t.f("text",c,p,0)));t.b("</a>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<li class=\"main-menu-{{class}} main-menu-ee\">\n <a href=\"{{href}}\">{{text}}</a>\n</li>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/main_menu_purroshop.html":
/*!*****************************************************!*\
!*** ./src/templates/html/main_menu_purroshop.html ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li class=\"main-menu-purroshop\">");t.b("\n" + i);t.b(" <a href=\"/mall/purroshop\">");t.b("\n" + i);t.b(" <img");t.b("\n" + i);t.b(" height=\"20\"");t.b("\n" + i);t.b(" src=\"/assets/img/item/consumable/b647d54afd6b04353e129219810512f5.png\"");t.b("\n" + i);t.b(" style=\"vertical-align: middle\"");t.b("\n" + i);t.b(" />");t.b("\n" + i);t.b(" Purro'Shop");t.b("\n" + i);t.b(" </a>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<li class=\"main-menu-purroshop\">\n <a href=\"/mall/purroshop\">\n <img\n height=\"20\"\n src=\"/assets/img/item/consumable/b647d54afd6b04353e129219810512f5.png\"\n style=\"vertical-align: middle\"\n />\n Purro'Shop\n </a>\n</li>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/market_history.html":
/*!************************************************!*\
!*** ./src/templates/html/market_history.html ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<style>");t.b("\n" + i);t.b(" /* #marketplace-abstract-purchases and #marketplace-abstract-sales were");t.b("\n" + i);t.b(" re-written to target #purchase-history and #sale-history. */");t.b("\n");t.b("\n" + i);t.b(" #purchase-history,");t.b("\n" + i);t.b(" #sale-history {");t.b("\n" + i);t.b(" height: 600px;");t.b("\n" + i);t.b(" position: relative;");t.b("\n" + i);t.b(" width: 360px;");t.b("\n" + i);t.b(" display: inline-block;");t.b("\n" + i);t.b(" vertical-align: top;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #sale-history .abstract-actions,");t.b("\n" + i);t.b(" #purchase-history .abstract-actions {");t.b("\n" + i);t.b(" position: relative;");t.b("\n" + i);t.b(" top: -40px;");t.b("\n" + i);t.b(" display: flex;");t.b("\n" + i);t.b(" flex-direction: column;");t.b("\n" + i);t.b(" justify-content: space-evenly;");t.b("\n" + i);t.b(" height: 80px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #sale-history .abstract-time,");t.b("\n" + i);t.b(" #purchase-history .abstract-time {");t.b("\n" + i);t.b(" position: static;");t.b("\n" + i);t.b(" display: inline;");t.b("\n" + i);t.b(" height: auto;");t.b("\n" + i);t.b(" color: #fb8900;");t.b("\n" + i);t.b(" font-weight: bold;");t.b("\n" + i);t.b(" font-size: 13px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #purchase-history {");t.b("\n" + i);t.b(" margin-right: 80px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #purchase-history:before {");t.b("\n" + i);t.b(" content: \"\";");t.b("\n" + i);t.b(" position: absolute;");t.b("\n" + i);t.b(" top: 120px;");t.b("\n" + i);t.b(" right: -42px;");t.b("\n" + i);t.b(" border-right: solid 2px #aaa;");t.b("\n" + i);t.b(" height: 320px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" /* Custom fixes to the layout */");t.b("\n");t.b("\n" + i);t.b(" #purchase-history li {");t.b("\n" + i);t.b(" margin-left: 4px;");t.b("\n" + i);t.b(" margin-right: 4px;");t.b("\n" + i);t.b(" }");t.b("\n" + i);t.b("</style>");t.b("\n");t.b("\n" + i);t.b("<!-- Purchases -->");t.b("\n" + i);t.b("<div class=\"marketplace-abstract\" id=\"purchase-history\">");t.b("\n" + i);t.b(" <h2 class=\"section-subtitle\">");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.market.auctions.purchase_history",c,p,0)));t.b("\n" + i);t.b(" </h2>");t.b("\n");t.b("\n" + i);t.b(" <ul class=\"marketplace-purchases-items\">");t.b("\n" + i);if(t.s(t.f("purchases",c,p,1),c,p,0,1284,2545,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" <li");t.b("\n" + i);t.b(" data-itemid=\"");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" class=\"marketplace-abstract marketplace-auctions-item marketplace-sales-item\"");t.b("\n" + i);t.b(" >");t.b("\n" + i);t.b(" <!-- Icon -->");t.b("\n" + i);t.b(" <div class=\"abstract-icon\">");t.b("\n" + i);t.b(" <img src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n" + i);t.b(" </div>");t.b("\n");t.b("\n" + i);t.b(" <!-- Prices -->");t.b("\n" + i);t.b(" <div class=\"abstract-container\">");t.b("\n" + i);t.b(" <div class=\"abstract-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" <div class=\"abstract-content\">");t.b("\n" + i);t.b(" <div class=\"abstract-currentPrice\">");t.b("\n" + i);t.b(" ");if(t.s(t.f("currentPrice",c,p,1),c,p,0,1738,1907,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.current_price",c,p,0)));t.b("\n" + i);t.b(" <span class=\"price-item\">");t.b(t.v(t.d("currentPrice.price",c,p,0)));t.b("</span>");t.b("\n" + i);t.b(" <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b(" <br />");t.b("\n" + i);t.b(" ");if(t.s(t.f("buyNowPrice",c,p,1),c,p,0,1972,2140,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.buy_now_price",c,p,0)));t.b("\n" + i);t.b(" <span class=\"price-item\">");t.b(t.v(t.d("buyNowPrice.price",c,p,0)));t.b("</span>");t.b("\n" + i);t.b(" <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n");t.b("\n" + i);t.b(" <!-- Actions -->");t.b("\n" + i);t.b(" <div class=\"abstract-actions\">");t.b("\n" + i);t.b(" <div class=\"abstract-time\">");t.b(t.v(t.f("date",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" <div");t.b("\n" + i);t.b(" class=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"");t.b("\n" + i);t.b(" data-itemid=\"");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" >");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.market.auctions.delete",c,p,0)));t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </li>");t.b("\n" + i);});c.pop();}t.b(" </ul>");t.b("\n" + i);t.b("</div>");t.b("\n");t.b("\n" + i);t.b("<!-- Sales -->");t.b("\n" + i);t.b("<div class=\"marketplace-abstract\" id=\"sale-history\">");t.b("\n" + i);t.b(" <h2 class=\"section-subtitle\">");t.b(t.v(t.d("translate.market.auctions.sales_history",c,p,0)));t.b("</h2>");t.b("\n");t.b("\n" + i);t.b(" <ul class=\"marketplace-sales-items\">");t.b("\n" + i);if(t.s(t.f("sales",c,p,1),c,p,0,2778,3924,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" <li class=\"marketplace-abstract marketplace-sales-item\">");t.b("\n" + i);t.b(" <!-- Icon -->");t.b("\n" + i);t.b(" <div class=\"abstract-icon\">");t.b("\n" + i);t.b(" <img src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n" + i);t.b(" </div>");t.b("\n");t.b("\n" + i);t.b(" <!-- Prices -->");t.b("\n" + i);t.b(" <div class=\"abstract-container\">");t.b("\n" + i);t.b(" <div class=\"abstract-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" <div class=\"abstract-content\">");t.b("\n" + i);t.b(" <div class=\"abstract-currentPrice\">");t.b("\n" + i);t.b(" ");if(t.s(t.f("currentPrice",c,p,1),c,p,0,3164,3327,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.current_price",c,p,0)));t.b("\n" + i);t.b(" <span class=\"price-item\">");t.b(t.v(t.f("currentPrice",c,p,0)));t.b("</span>");t.b("\n" + i);t.b(" <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b(" <br />");t.b("\n" + i);t.b(" ");if(t.s(t.f("buyNowPrice",c,p,1),c,p,0,3392,3554,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.buy_now_price",c,p,0)));t.b("\n" + i);t.b(" <span class=\"price-item\">");t.b(t.v(t.f("buyNowPrice",c,p,0)));t.b("</span>");t.b("\n" + i);t.b(" <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n");t.b("\n" + i);t.b(" <!-- Actions -->");t.b("\n" + i);t.b(" <div class=\"abstract-actions\">");t.b("\n" + i);t.b(" <div class=\"abstract-time\">");t.b(t.v(t.f("date",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" <div");t.b("\n" + i);t.b(" class=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"");t.b("\n" + i);t.b(" >");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.market.auctions.delete",c,p,0)));t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </li>");t.b("\n" + i);});c.pop();}t.b(" </ul>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<style>\n /* #marketplace-abstract-purchases and #marketplace-abstract-sales were\n re-written to target #purchase-history and #sale-history. */\n\n #purchase-history,\n #sale-history {\n height: 600px;\n position: relative;\n width: 360px;\n display: inline-block;\n vertical-align: top;\n }\n\n #sale-history .abstract-actions,\n #purchase-history .abstract-actions {\n position: relative;\n top: -40px;\n display: flex;\n flex-direction: column;\n justify-content: space-evenly;\n height: 80px;\n }\n\n #sale-history .abstract-time,\n #purchase-history .abstract-time {\n position: static;\n display: inline;\n height: auto;\n color: #fb8900;\n font-weight: bold;\n font-size: 13px;\n }\n\n #purchase-history {\n margin-right: 80px;\n }\n\n #purchase-history:before {\n content: \"\";\n position: absolute;\n top: 120px;\n right: -42px;\n border-right: solid 2px #aaa;\n height: 320px;\n }\n\n /* Custom fixes to the layout */\n\n #purchase-history li {\n margin-left: 4px;\n margin-right: 4px;\n }\n</style>\n\n<!-- Purchases -->\n<div class=\"marketplace-abstract\" id=\"purchase-history\">\n <h2 class=\"section-subtitle\">\n {{translate.market.auctions.purchase_history}}\n </h2>\n\n <ul class=\"marketplace-purchases-items\">\n {{#purchases}}\n <li\n data-itemid=\"{{itemid}}\"\n class=\"marketplace-abstract marketplace-auctions-item marketplace-sales-item\"\n >\n <!-- Icon -->\n <div class=\"abstract-icon\">\n <img src=\"{{icon}}\" />\n </div>\n\n <!-- Prices -->\n <div class=\"abstract-container\">\n <div class=\"abstract-name\">{{name}}</div>\n <div class=\"abstract-content\">\n <div class=\"abstract-currentPrice\">\n {{#currentPrice}} {{translate.market.auctions.current_price}}\n <span class=\"price-item\">{{currentPrice.price}}</span>\n <span class=\"maana-icon\"></span>\n {{/currentPrice}}\n <br />\n {{#buyNowPrice}} {{translate.market.auctions.buy_now_price}}\n <span class=\"price-item\">{{buyNowPrice.price}}</span>\n <span class=\"maana-icon\"></span>\n {{/buyNowPrice}}\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"abstract-actions\">\n <div class=\"abstract-time\">{{date}}</div>\n <div\n class=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"\n data-itemid=\"{{itemid}}\"\n >\n {{translate.market.auctions.delete}}\n </div>\n </div>\n </li>\n {{/purchases}}\n </ul>\n</div>\n\n<!-- Sales -->\n<div class=\"marketplace-abstract\" id=\"sale-history\">\n <h2 class=\"section-subtitle\">{{translate.market.auctions.sales_history}}</h2>\n\n <ul class=\"marketplace-sales-items\">\n {{#sales}}\n <li class=\"marketplace-abstract marketplace-sales-item\">\n <!-- Icon -->\n <div class=\"abstract-icon\">\n <img src=\"{{icon}}\" />\n </div>\n\n <!-- Prices -->\n <div class=\"abstract-container\">\n <div class=\"abstract-name\">{{name}}</div>\n <div class=\"abstract-content\">\n <div class=\"abstract-currentPrice\">\n {{#currentPrice}} {{translate.market.auctions.current_price}}\n <span class=\"price-item\">{{currentPrice}}</span>\n <span class=\"maana-icon\"></span>\n {{/currentPrice}}\n <br />\n {{#buyNowPrice}} {{translate.market.auctions.buy_now_price}}\n <span class=\"price-item\">{{buyNowPrice}}</span>\n <span class=\"maana-icon\"></span>\n {{/buyNowPrice}}\n </div>\n </div>\n </div>\n\n <!-- Actions -->\n <div class=\"abstract-actions\">\n <div class=\"abstract-time\">{{date}}</div>\n <div\n class=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"\n >\n {{translate.market.auctions.delete}}\n </div>\n </div>\n </li>\n {{/sales}}\n </ul>\n</div>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/outfit_thumbs.html":
/*!***********************************************!*\
!*** ./src/templates/html/outfit_thumbs.html ***!
\***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div id=\"ee-outfit-thumbs\">");t.b("\n" + i);t.b(" <style>");t.b("\n" + i);t.b(" #appearance-items-category-favorites .slot.ee-available-slot {");t.b("\n" + i);t.b(" background-image: url(https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/available-favorite.png);");t.b("\n" + i);t.b(" background-position: -14px -11px;");t.b("\n" + i);t.b(" background-size: 171px 244px;");t.b("\n" + i);t.b(" border-radius: 44px;");t.b("\n" + i);t.b(" box-shadow: 0 0 4px 4px rgba(255, 255, 255, 0.8);");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #appearance-items-category-favorites .slot.ee-available-slot::after {");t.b("\n" + i);t.b(" background: url(/static/img/new-layout/wardrobe/icon-plus.png);");t.b("\n" + i);t.b(" content: \" \";");t.b("\n" + i);t.b(" filter: drop-shadow(0 0 6px rgba(237, 12, 245, 0.9));");t.b("\n" + i);t.b(" height: 71px;");t.b("\n" + i);t.b(" left: 50%;");t.b("\n" + i);t.b(" opacity: 0;");t.b("\n" + i);t.b(" position: absolute;");t.b("\n" + i);t.b(" top: 50%;");t.b("\n" + i);t.b(" transform: translate(-50%, -50%);");t.b("\n" + i);t.b(" transition: opacity ease-in-out 100ms;");t.b("\n" + i);t.b(" width: 66px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #appearance-items-category-favorites .slot.ee-available-slot:hover::after,");t.b("\n" + i);t.b(" #appearance-items-category-favorites .slot.ee-outfit-thumb:hover p {");t.b("\n" + i);t.b(" opacity: 1;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #appearance-items-category-favorites .slot.ee-outfit-thumb img {");t.b("\n" + i);t.b(" border-radius: 44px;");t.b("\n" + i);t.b(" height: 100%;");t.b("\n" + i);t.b(" width: 100%;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #appearance-items-category-favorites .slot.ee-outfit-thumb p {");t.b("\n" + i);t.b(" background: rgba(0, 0, 0, 0.5);");t.b("\n" + i);t.b(" color: #fff;");t.b("\n" + i);t.b(" font-family: \"Alegreya Sans SC\", sans-serif;");t.b("\n" + i);t.b(" font-size: 22px;");t.b("\n" + i);t.b(" font-weight: 700;");t.b("\n" + i);t.b(" left: 50%;");t.b("\n" + i);t.b(" line-height: 22px;");t.b("\n" + i);t.b(" opacity: 0;");t.b("\n" + i);t.b(" padding: 12px 0;");t.b("\n" + i);t.b(" position: absolute;");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" top: 50%;");t.b("\n" + i);t.b(" transform: translate(-50%, -50%);");t.b("\n" + i);t.b(" transition: opacity ease-in-out 400ms;");t.b("\n" + i);t.b(" width: 100%;");t.b("\n" + i);t.b(" }");t.b("\n" + i);t.b(" </style>");t.b("\n");t.b("\n" + i);if(t.s(t.f("outfits",c,p,1),c,p,0,1654,1790,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" <div class=\"slot ee-outfit-thumb\" data-array-index=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\">");t.b("\n" + i);t.b(" <img alt=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\" src=\"");t.b(t.v(t.f("url",c,p,0)));t.b("\" />");t.b("\n" + i);t.b(" <p>");t.b(t.v(t.f("name",c,p,0)));t.b("</p>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);});c.pop();}t.b("\n" + i);t.b(" <div class=\"slot ee-available-slot\"></div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<div id=\"ee-outfit-thumbs\">\n <style>\n #appearance-items-category-favorites .slot.ee-available-slot {\n background-image: url(https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/available-favorite.png);\n background-position: -14px -11px;\n background-size: 171px 244px;\n border-radius: 44px;\n box-shadow: 0 0 4px 4px rgba(255, 255, 255, 0.8);\n }\n\n #appearance-items-category-favorites .slot.ee-available-slot::after {\n background: url(/static/img/new-layout/wardrobe/icon-plus.png);\n content: \" \";\n filter: drop-shadow(0 0 6px rgba(237, 12, 245, 0.9));\n height: 71px;\n left: 50%;\n opacity: 0;\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n transition: opacity ease-in-out 100ms;\n width: 66px;\n }\n\n #appearance-items-category-favorites .slot.ee-available-slot:hover::after,\n #appearance-items-category-favorites .slot.ee-outfit-thumb:hover p {\n opacity: 1;\n }\n\n #appearance-items-category-favorites .slot.ee-outfit-thumb img {\n border-radius: 44px;\n height: 100%;\n width: 100%;\n }\n\n #appearance-items-category-favorites .slot.ee-outfit-thumb p {\n background: rgba(0, 0, 0, 0.5);\n color: #fff;\n font-family: \"Alegreya Sans SC\", sans-serif;\n font-size: 22px;\n font-weight: 700;\n left: 50%;\n line-height: 22px;\n opacity: 0;\n padding: 12px 0;\n position: absolute;\n text-align: center;\n top: 50%;\n transform: translate(-50%, -50%);\n transition: opacity ease-in-out 400ms;\n width: 100%;\n }\n </style>\n\n {{#outfits}}\n <div class=\"slot ee-outfit-thumb\" data-array-index=\"{{id}}\">\n <img alt=\"{{name}}\" src=\"{{url}}\" />\n <p>{{name}}</p>\n </div>\n {{/outfits}}\n\n <div class=\"slot ee-available-slot\"></div>\n</div>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/profile_contact_action.html":
/*!********************************************************!*\
!*** ./src/templates/html/profile_contact_action.html ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li id=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\" class=\"profile-contact-action-ee\">");t.b("\n" + i);t.b(" <span class=\"nl-button nl-button-sm\">");t.b("\n" + i);t.b(" <div class=\"action-description\">");t.b(t.v(t.f("actionDescription",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" </span>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<li id=\"{{id}}\" class=\"profile-contact-action-ee\">\n <span class=\"nl-button nl-button-sm\">\n <div class=\"action-description\">{{actionDescription}}</div>\n </span>\n</li>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/settings.html":
/*!******************************************!*\
!*** ./src/templates/html/settings.html ***!
\******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div class=\"account-misc-bloc account-ee-bloc bloc\">");t.b("\n" + i);t.b(" <!--");t.b("\n" + i);t.b(" <style>");t.b("\n" + i);t.b(" table {");t.b("\n" + i);t.b(" width: 100%;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" th {");t.b("\n" + i);t.b(" text-align: start;");t.b("\n" + i);t.b(" padding: 1em;");t.b("\n" + i);t.b(" }");t.b("\n" + i);t.b(" </style>");t.b("\n" + i);t.b(" -->");t.b("\n");t.b("\n" + i);t.b(" <!-- Settings -->");t.b("\n" + i);t.b(" <h2 class=\"section-title\">");t.b(t.v(t.d("translate.account.enhancements",c,p,0)));t.b("</h2>");t.b("\n" + i);t.b(" <ul class=\"account-misc-actions\">");t.b("\n" + i);t.b(" <li");t.b("\n" + i);t.b(" id=\"ee-debug-enabled\"");t.b("\n" + i);t.b(" class=\"nl-button nl-button-sm ");if(t.s(t.f("debug",c,p,1),c,p,0,392,398,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b(" title=\"");t.b(t.v(t.d("translate.account.debug_tooltip",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" >");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.account.debug",c,p,0)));t.b("\n" + i);t.b(" </li>");t.b("\n" + i);t.b(" <li");t.b("\n" + i);t.b(" id=\"ee-minigames-enabled\"");t.b("\n" + i);t.b(" class=\"nl-button nl-button-sm ");if(t.s(t.f("minigames",c,p,1),c,p,0,600,606,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b(" >");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.account.minigames",c,p,0)));t.b("\n" + i);t.b(" </li>");t.b("\n" + i);t.b(" <li");t.b("\n" + i);t.b(" id=\"ee-explorations-enabled\"");t.b("\n" + i);t.b(" class=\"nl-button nl-button-sm ");if(t.s(t.f("explorations",c,p,1),c,p,0,772,778,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b(" >");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.account.explorations",c,p,0)));t.b("\n" + i);t.b(" </li>");t.b("\n" + i);t.b(" <li");t.b("\n" + i);t.b(" id=\"ee-market-enabled\"");t.b("\n" + i);t.b(" class=\"nl-button nl-button-sm ");if(t.s(t.f("market",c,p,1),c,p,0,938,944,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b(" >");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.account.market",c,p,0)));t.b("\n" + i);t.b(" </li>");t.b("\n" + i);t.b(" <li id=\"ee-import\" class=\"nl-button nl-button-sm\">");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.account.import",c,p,0)));t.b("\n" + i);t.b(" </li>");t.b("\n" + i);t.b(" <li id=\"ee-export\" class=\"nl-button nl-button-sm\">");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.account.export",c,p,0)));t.b("\n" + i);t.b(" </li>");t.b("\n" + i);t.b(" </ul>");t.b("\n");t.b("\n" + i);t.b(" <!-- Explorations");t.b("\n" + i);t.b(" <h3 class=\"section-title\">Explorations</h3>");t.b("\n" + i);t.b(" <table>");t.b("\n" + i);t.b(" <thead>");t.b("\n" + i);t.b(" <th>Location</th>");t.b("\n" + i);t.b(" <th>Delete</th>");t.b("\n" + i);t.b(" </thead>");t.b("\n" + i);t.b(" <tbody>");t.b("\n" + i);t.b(" <td>Rock</td>");t.b("\n" + i);t.b(" <td>");t.b("\n" + i);t.b(" <div class=\"nl-button nl-button-sm\">Delete</div>");t.b("\n" + i);t.b(" </td>");t.b("\n" + i);t.b(" </tbody>");t.b("\n" + i);t.b(" </table>");t.b("\n" + i);t.b(" -->");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<div class=\"account-misc-bloc account-ee-bloc bloc\">\n <!--\n <style>\n table {\n width: 100%;\n }\n\n th {\n text-align: start;\n padding: 1em;\n }\n </style>\n -->\n\n <!-- Settings -->\n <h2 class=\"section-title\">{{translate.account.enhancements}}</h2>\n <ul class=\"account-misc-actions\">\n <li\n id=\"ee-debug-enabled\"\n class=\"nl-button nl-button-sm {{#debug}}active{{/debug}}\"\n title=\"{{translate.account.debug_tooltip}}\"\n >\n {{translate.account.debug}}\n </li>\n <li\n id=\"ee-minigames-enabled\"\n class=\"nl-button nl-button-sm {{#minigames}}active{{/minigames}}\"\n >\n {{translate.account.minigames}}\n </li>\n <li\n id=\"ee-explorations-enabled\"\n class=\"nl-button nl-button-sm {{#explorations}}active{{/explorations}}\"\n >\n {{translate.account.explorations}}\n </li>\n <li\n id=\"ee-market-enabled\"\n class=\"nl-button nl-button-sm {{#market}}active{{/market}}\"\n >\n {{translate.account.market}}\n </li>\n <li id=\"ee-import\" class=\"nl-button nl-button-sm\">\n {{translate.account.import}}\n </li>\n <li id=\"ee-export\" class=\"nl-button nl-button-sm\">\n {{translate.account.export}}\n </li>\n </ul>\n\n <!-- Explorations\n <h3 class=\"section-title\">Explorations</h3>\n <table>\n <thead>\n <th>Location</th>\n <th>Delete</th>\n </thead>\n <tbody>\n <td>Rock</td>\n <td>\n <div class=\"nl-button nl-button-sm\">Delete</div>\n </td>\n </tbody>\n </table>\n -->\n</div>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/wishlist_button.html":
/*!*************************************************!*\
!*** ./src/templates/html/wishlist_button.html ***!
\*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<a id=\"wishlist-button\" class=\"nl-button\">");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.market.wishlist.title",c,p,0)));t.b("\n" + i);t.b("</a>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<a id=\"wishlist-button\" class=\"nl-button\">\n {{translate.market.wishlist.title}}\n</a>\n", H);return T; }();
/***/ }),
/***/ "./src/templates/html/wishlist_settings.html":
/*!***************************************************!*\
!*** ./src/templates/html/wishlist_settings.html ***!
\***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<style>");t.b("\n" + i);t.b(" table {");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" width: 100%;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .action-picto {");t.b("\n" + i);t.b(" height: 50px;");t.b("\n" + i);t.b(" width: 50px;");t.b("\n" + i);t.b(" cursor: pointer;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .action-picto:hover:not(.disabled),");t.b("\n" + i);t.b(" .edit-price:hover {");t.b("\n" + i);t.b(" animation: button-bounce 300ms linear forwards;");t.b("\n" + i);t.b(" filter: brightness(1.05) contrast(1.1);");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .edit-price {");t.b("\n" + i);t.b(" cursor: pointer;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" img.disabled {");t.b("\n" + i);t.b(" filter: grayscale(1);");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .item-icon-container {");t.b("\n" + i);t.b(" display: inline-block;");t.b("\n" + i);t.b(" position: relative;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .item-icon {");t.b("\n" + i);t.b(" width: 100px;");t.b("\n" + i);t.b(" height: 100px;");t.b("\n" + i);t.b(" }");t.b("\n" + i);t.b("</style>");t.b("\n");t.b("\n" + i);t.b("<table>");t.b("\n" + i);t.b(" <thead>");t.b("\n" + i);t.b(" <tr>");t.b("\n" + i);t.b(" <th>");t.b(t.v(t.d("translate.market.wishlist.icon",c,p,0)));t.b("</th>");t.b("\n" + i);t.b(" <th>");t.b(t.v(t.d("translate.market.wishlist.name",c,p,0)));t.b("</th>");t.b("\n" + i);t.b(" <th>");t.b(t.v(t.d("translate.market.wishlist.price",c,p,0)));t.b("</th>");t.b("\n" + i);t.b(" <th>");t.b(t.v(t.d("translate.market.wishlist.status",c,p,0)));t.b("</th>");t.b("\n" + i);t.b(" <th>");t.b(t.v(t.d("translate.market.wishlist.actions",c,p,0)));t.b("</th>");t.b("\n" + i);t.b(" </tr>");t.b("\n" + i);t.b(" </thead>");t.b("\n" + i);t.b(" <tbody>");t.b("\n" + i);if(t.s(t.f("wishlist",c,p,1),c,p,0,872,2260,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" <tr class=\"marketplace-abstract\" data-icon=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\">");t.b("\n" + i);t.b(" <!-- Icon -->");t.b("\n" + i);t.b(" <td>");t.b("\n" + i);t.b(" <div class=\"item-icon-container\">");t.b("\n" + i);t.b(" <img class=\"item-icon\" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" alt=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\" />");t.b("\n" + i);t.b(" <div class=\"rarity-marker-");t.b(t.v(t.f("rarity",c,p,0)));t.b("\"></div>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </td>");t.b("\n");t.b("\n" + i);t.b(" <!-- Name -->");t.b("\n" + i);t.b(" <td>");t.b("\n" + i);t.b(" <div class=\"abstract-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" <div class=\"abstract-type\">");t.b(t.v(t.f("abstractType",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" </td>");t.b("\n");t.b("\n" + i);t.b(" <!-- Price -->");t.b("\n" + i);t.b(" <td>");t.b("\n" + i);t.b(" <div");t.b("\n" + i);t.b(" class=\"edit-price\"");t.b("\n" + i);t.b(" title=\"");t.b(t.v(t.d("translate.market.wishlist.change_price",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" >");t.b("\n" + i);t.b(" <span class=\"price-item\">");t.b(t.v(t.f("price",c,p,0)));t.b("</span>");t.b("\n" + i);t.b(" <span class=\"maana-icon\" alt=\"maanas\"></span>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </td>");t.b("\n");t.b("\n" + i);t.b(" <!-- Error -->");t.b("\n" + i);t.b(" <td>");t.b("\n" + i);t.b(" <p class=\"error\">");t.b(t.v(t.f("error",c,p,0)));t.b("</p>");t.b("\n" + i);t.b(" </td>");t.b("\n");t.b("\n" + i);t.b(" <!-- Actions -->");t.b("\n" + i);t.b(" <td>");t.b("\n" + i);t.b(" <img");t.b("\n" + i);t.b(" class=\"action-picto reset-item-status ");if(!t.s(t.f("error",c,p,1),c,p,1,0,0,"")){t.b("disabled");};t.b("\"");t.b("\n" + i);t.b(" src=\"/static/img/new-layout/wardrobe/reset-btn.png\"");t.b("\n" + i);t.b(" title=\"");t.b(t.v(t.d("translate.market.wishlist.reset_tooltip",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" alt=\"");t.b(t.v(t.d("translate.market.wishlist.reset",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" />");t.b("\n" + i);t.b(" <img");t.b("\n" + i);t.b(" class=\"action-picto delete-wishlist-item\"");t.b("\n" + i);t.b(" src=\"/static/img/new-layout/wardrobe/delete.png\"");t.b("\n" + i);t.b(" title=\"");t.b(t.v(t.d("translate.market.wishlist.delete_tooltip",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" alt=\"");t.b(t.v(t.d("translate.market.wishlist.delete",c,p,0)));t.b("\"");t.b("\n" + i);t.b(" />");t.b("\n" + i);t.b(" </td>");t.b("\n" + i);t.b(" </tr>");t.b("\n" + i);});c.pop();}t.b(" </tbody>");t.b("\n" + i);t.b("</table>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<style>\n table {\n text-align: center;\n width: 100%;\n }\n\n .action-picto {\n height: 50px;\n width: 50px;\n cursor: pointer;\n }\n\n .action-picto:hover:not(.disabled),\n .edit-price:hover {\n animation: button-bounce 300ms linear forwards;\n filter: brightness(1.05) contrast(1.1);\n }\n\n .edit-price {\n cursor: pointer;\n }\n\n img.disabled {\n filter: grayscale(1);\n }\n\n .item-icon-container {\n display: inline-block;\n position: relative;\n }\n\n .item-icon {\n width: 100px;\n height: 100px;\n }\n</style>\n\n<table>\n <thead>\n <tr>\n <th>{{translate.market.wishlist.icon}}</th>\n <th>{{translate.market.wishlist.name}}</th>\n <th>{{translate.market.wishlist.price}}</th>\n <th>{{translate.market.wishlist.status}}</th>\n <th>{{translate.market.wishlist.actions}}</th>\n </tr>\n </thead>\n <tbody>\n {{#wishlist}}\n <tr class=\"marketplace-abstract\" data-icon=\"{{icon}}\">\n <!-- Icon -->\n <td>\n <div class=\"item-icon-container\">\n <img class=\"item-icon\" src=\"{{icon}}\" alt=\"{{name}}\" />\n <div class=\"rarity-marker-{{rarity}}\"></div>\n </div>\n </td>\n\n <!-- Name -->\n <td>\n <div class=\"abstract-name\">{{name}}</div>\n <div class=\"abstract-type\">{{abstractType}}</div>\n </td>\n\n <!-- Price -->\n <td>\n <div\n class=\"edit-price\"\n title=\"{{translate.market.wishlist.change_price}}\"\n >\n <span class=\"price-item\">{{price}}</span>\n <span class=\"maana-icon\" alt=\"maanas\"></span>\n </div>\n </td>\n\n <!-- Error -->\n <td>\n <p class=\"error\">{{error}}</p>\n </td>\n\n <!-- Actions -->\n <td>\n <img\n class=\"action-picto reset-item-status {{^error}}disabled{{/error}}\"\n src=\"/static/img/new-layout/wardrobe/reset-btn.png\"\n title=\"{{translate.market.wishlist.reset_tooltip}}\"\n alt=\"{{translate.market.wishlist.reset}}\"\n />\n <img\n class=\"action-picto delete-wishlist-item\"\n src=\"/static/img/new-layout/wardrobe/delete.png\"\n title=\"{{translate.market.wishlist.delete_tooltip}}\"\n alt=\"{{translate.market.wishlist.delete}}\"\n />\n </td>\n </tr>\n {{/wishlist}}\n </tbody>\n</table>\n", H);return T; }();
/***/ }),
/***/ "./src/ajax/ajax_search.ts":
/*!*********************************!*\
!*** ./src/ajax/ajax_search.ts ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "ajaxSearch": () => (/* binding */ ajaxSearch)
/* harmony export */ });
/* harmony import */ var _marketplace_enums_body_location_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../marketplace/enums/body_location.enum */ "./src/marketplace/enums/body_location.enum.ts");
/* harmony import */ var _marketplace_enums_category_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../marketplace/enums/category.enum */ "./src/marketplace/enums/category.enum.ts");
/* harmony import */ var _marketplace_enums_guard_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../marketplace/enums/guard.enum */ "./src/marketplace/enums/guard.enum.ts");
/* harmony import */ var _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../marketplace/enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
/* harmony import */ var _marketplace_enums_type_enum__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../marketplace/enums/type.enum */ "./src/marketplace/enums/type.enum.ts");
async function ajaxSearch(data) {
data = {
...{
type: _marketplace_enums_type_enum__WEBPACK_IMPORTED_MODULE_4__.Type.All,
bodyLocation: _marketplace_enums_body_location_enum__WEBPACK_IMPORTED_MODULE_0__.BodyLocation.All,
category: _marketplace_enums_category_enum__WEBPACK_IMPORTED_MODULE_1__.CategoryNumber.all,
rarity: _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity.all,
price: "",
guard: _marketplace_enums_guard_enum__WEBPACK_IMPORTED_MODULE_2__.Guard.any,
page: 1,
name: "",
},
...data,
};
const ITEMS_PER_PAGE = 8;
return (await $.get("/marketplace/ajax_search", {
...data,
from: (data.page - 1) * ITEMS_PER_PAGE,
to: ITEMS_PER_PAGE,
}));
}
/***/ }),
/***/ "./src/ajax/buy.ts":
/*!*************************!*\
!*** ./src/ajax/buy.ts ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "buy": () => (/* binding */ buy)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
async function buy(itemId) {
return new Promise(resolve => {
void $.post("/marketplace/buy", { id: itemId }, (json) => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.meta = json.meta;
resolve(json);
if (json.result !== "success") {
$.flavrNotif(json.data);
return;
}
}, "json");
});
}
/***/ }),
/***/ "./src/ajax/capture_end.ts":
/*!*********************************!*\
!*** ./src/ajax/capture_end.ts ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "captureEnd": () => (/* binding */ captureEnd)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
async function captureEnd() {
return new Promise(resolve => {
void $.post("/pet/capture/end", (json) => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.meta = json.meta;
resolve(json);
if (json.result !== "success") {
$.flavrNotif(json.data);
return;
}
});
});
}
/***/ }),
/***/ "./src/ajax/change_region.ts":
/*!***********************************!*\
!*** ./src/ajax/change_region.ts ***!
\***********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "changeRegion": () => (/* binding */ changeRegion)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
async function changeRegion(newRegionId) {
return new Promise((resolve) => {
void $.post("/pet/changeRegion", { newRegionId }, (json) => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.meta = json.meta;
resolve(json);
if (json.result !== "success") {
$.flavrNotif(json.data);
return;
}
currentRegion = json.data.currentRegion;
pendingTreasureHuntLocation =
typeof json.data.pendingTreasureHuntLocation === "undefined"
? null
: json.data.pendingTreasureHuntLocation;
timeLeftExploration =
typeof json.data.timeLeftExploration === "undefined"
? null
: json.data.timeLeftExploration;
});
});
}
/***/ }),
/***/ "./src/ajax/exploration_results.ts":
/*!*****************************************!*\
!*** ./src/ajax/exploration_results.ts ***!
\*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "explorationResults": () => (/* binding */ explorationResults)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
async function explorationResults() {
return new Promise((resolve) => {
void $.post("/pet/explorationResults", (json) => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.meta = json.meta;
resolve(json);
if (json.result !== "success") {
$.flavrNotif(json.data);
return;
}
});
});
}
/***/ }),
/***/ "./src/api/meta.ts":
/*!*************************!*\
!*** ./src/api/meta.ts ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "PurroshopStatus": () => (/* binding */ PurroshopStatus)
/* harmony export */ });
var PurroshopStatus;
(function (PurroshopStatus) {
PurroshopStatus["disabled"] = "disabled";
PurroshopStatus["enabled"] = "enabled";
})(PurroshopStatus || (PurroshopStatus = {}));
/***/ }),
/***/ "./src/api/result.enum.ts":
/*!********************************!*\
!*** ./src/api/result.enum.ts ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Result": () => (/* binding */ Result)
/* harmony export */ });
var Result;
(function (Result) {
Result["error"] = "error";
Result["success"] = "success";
})(Result || (Result = {}));
/***/ }),
/***/ "./src/appearance/appearance_ui.ts":
/*!*****************************************!*\
!*** ./src/appearance/appearance_ui.ts ***!
\*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadAppearanceUI": () => (/* binding */ loadAppearanceUI)
/* harmony export */ });
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");
function loadAppearanceUI() {
setupBackground();
setupLeftPanel();
setupRightPanel();
if (_wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].availableItems)
availableItems = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].availableItems;
else
_wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].availableItems = availableItems;
}
function setupBackground() {
const background = document.querySelector("#avatar-background img");
if (background) {
background.style.filter = "unset";
background.style.height = "unset";
background.style.mask =
"linear-gradient(to right, black 50%, transparent 100%)";
background.style.minHeight = "100vh";
background.style.minWidth = "50vw";
background.style.position = "fixed";
background.style.transform = "unset";
background.style.width = "unset";
}
}
function setupRightPanel() {
const rightPanel = document.getElementById("appearance-right");
if (rightPanel)
rightPanel.style.paddingTop = "80px";
}
function setupLeftPanel() {
const previewOuter = document.getElementById("appearance-preview-outer");
if (previewOuter) {
previewOuter.style.padding = "0px";
}
const preview = document.getElementById("appearance-preview");
if (preview) {
preview.style.left = "0";
preview.style.position = "fixed";
preview.style.top = "calc(50% - var(--topbar-height))";
preview.style.transform = "translateY(-50%)";
}
const canvas = document.querySelector("#appearance-preview canvas");
if (canvas) {
canvas.style.maxHeight = "100vh";
canvas.style.maxWidth = "50vw";
}
}
/***/ }),
/***/ "./src/appearance/data_set.ts":
/*!************************************!*\
!*** ./src/appearance/data_set.ts ***!
\************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "categoryContainerDataSet": () => (/* binding */ categoryContainerDataSet),
/* harmony export */ "categoryGroupDataSet": () => (/* binding */ categoryGroupDataSet),
/* harmony export */ "itemDataSet": () => (/* binding */ itemDataSet)
/* harmony export */ });
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
function categoryContainerDataSet(categoryContainer) {
const { categoryid, category, categoryname } = categoryContainer.dataset;
if (!categoryid || !category || !categoryname)
return;
return {
categoryid: Number(categoryid),
category: category,
categoryname,
};
}
function categoryGroupDataSet(groupItem, appearanceCategory) {
const { itemid, group, name, rarity, rarityname } = groupItem.dataset;
if (!itemid || !group || !name || !rarity || !rarityname)
return;
return {
...appearanceCategory,
itemid: Number(itemid),
group: Number(group),
name,
rarity,
rarityname,
};
}
function itemDataSet(li, appearanceGroup) {
const { itemid, name, rarity, rarityname } = li.dataset;
const icon = li.querySelector("img")?.src;
if (!itemid || !name || !rarity || !rarityname || !icon)
return;
return {
...appearanceGroup,
itemid: Number(itemid),
name,
rarity,
rarityname,
icon: (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_0__.trimIcon)(icon),
};
}
/***/ }),
/***/ "./src/appearance/dressing_experience.ts":
/*!***********************************************!*\
!*** ./src/appearance/dressing_experience.ts ***!
\***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadDressingExperience": () => (/* binding */ loadDressingExperience),
/* harmony export */ "loadBackground": () => (/* binding */ loadBackground)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _ts_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ts_util */ "./src/ts_util.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _appearance_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./appearance_ui */ "./src/appearance/appearance_ui.ts");
/* harmony import */ var _data_set__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./data_set */ "./src/appearance/data_set.ts");
/* harmony import */ var _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./enums/appearance_category_code.enum */ "./src/appearance/enums/appearance_category_code.enum.ts");
/* harmony import */ var _favourites_actions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./favourites_actions */ "./src/appearance/favourites_actions.ts");
/* harmony import */ var _hidden__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hidden */ "./src/appearance/hidden.ts");
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");
async function loadDressingExperience() {
if (!location.pathname.startsWith("/player/appearance"))
return;
handledCategories.clear();
loading = false;
(0,_appearance_ui__WEBPACK_IMPORTED_MODULE_3__.loadAppearanceUI)();
// Setup categories
for (const li of document.querySelectorAll("#wardrobe-menu>li, #appearance-items-categories li")) {
const { category } = li.dataset;
if (!(0,_ts_util__WEBPACK_IMPORTED_MODULE_1__.isEnum)(category, _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode))
continue;
switch (category) {
case _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.background:
li.addEventListener("click", () => document.getElementById("ee-category")?.remove());
continue;
case _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.favorites:
li.addEventListener("click", () => {
document.getElementById("ee-category")?.remove();
void handleCategory(category);
});
continue;
case _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.attic:
continue;
default:
li.addEventListener("click", () => {
document
.getElementById("appearance-items-category-favorites")
?.remove();
void handleCategory(category);
});
}
}
await new Promise(resolve => setTimeout(resolve, 1000));
await loadBackground();
}
/**
* Get the category container for the clicked category and load its groups
* @returns Category container
*/
async function handleCategory(category) {
const appearanceItems = document.querySelector("#appearance-items");
if (!appearanceItems)
return null;
const oldCatContainer = document.querySelector(`#appearance-items-category-${category}`);
if (oldCatContainer) {
await onAppearanceItemsCategory(category, appearanceItems, oldCatContainer);
return oldCatContainer;
}
return new Promise(resolve => {
new MutationObserver((_, observer) => {
const newCatContainer = document.querySelector(`#appearance-items-category-${category}`);
if (!newCatContainer)
return;
observer.disconnect();
void (async () => {
await onAppearanceItemsCategory(category, appearanceItems, newCatContainer);
resolve(newCatContainer);
})();
}).observe(appearanceItems, { childList: true });
});
}
async function onAppearanceItemsCategory(category, appearanceItems, categoryContainer) {
if (category === _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.favorites)
(0,_ui_favourites__WEBPACK_IMPORTED_MODULE_2__.loadFavourites)();
else {
await new Promise(resolve => setTimeout(resolve, 220));
loadEeItems(appearanceItems, categoryContainer);
await handleGroups(categoryContainer);
}
}
function loadEeItems(appearanceItems, categoryContainer) {
// Get information about the current category
const appearanceCategory = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.categoryContainerDataSet)(categoryContainer);
if (!appearanceCategory)
return null;
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setCategory(appearanceCategory);
categoryContainer.classList.remove("active");
categoryContainer.style.display = "none";
// Setup appearance_items_category
const template = __webpack_require__(/*! ../templates/html/appearance_items_category.html */ "./src/templates/html/appearance_items_category.html");
document.getElementById("ee-category")?.remove();
appearanceItems.insertAdjacentHTML("beforeend", template.render({ ...appearanceCategory, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
const eeItems = document.querySelector("#ee-items");
if (!eeItems)
return null;
eeItems.dataset.categoryid = appearanceCategory.categoryid.toString();
eeItems.dataset.category = appearanceCategory.category;
eeItems.dataset.categoryname = appearanceCategory.categoryname;
return eeItems;
}
const handledCategories = new Set();
/** Load each groups synchronously and add them to a custom container. */
async function handleGroups(categoryContainer) {
const appearanceCategory = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.categoryContainerDataSet)(categoryContainer);
if (!appearanceCategory)
return;
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setCategory(appearanceCategory);
categoryContainer.classList.remove("active");
categoryContainer.style.display = "none";
const handled = handledCategories.has(appearanceCategory.category);
handledCategories.add(appearanceCategory.category);
(0,_hidden__WEBPACK_IMPORTED_MODULE_7__.loadHiddenCategory)(appearanceCategory.category);
for (const li of categoryContainer.querySelectorAll("li.appearance-item-group")) {
const appearanceGroup = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.categoryGroupDataSet)(li, appearanceCategory);
if (!appearanceGroup?.group)
break;
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setGroup(appearanceGroup);
if (!document.querySelector(`#appearance-items-group-${appearanceGroup.group}`) &&
!handled
// && !loadHiddenGroup(appearanceGroup.group)
)
await (0,_favourites_actions__WEBPACK_IMPORTED_MODULE_6__.openGroup)(appearanceGroup.group);
const div = document.querySelector(`#appearance-items-group-${appearanceGroup.group}`);
if (!div)
break;
div.classList.remove("active");
const script = div.querySelector("script"); // eslint-disable-next-line @typescript-eslint/no-implied-eval
if (script)
setTimeout(script.innerHTML, 0);
const outerHTML = Array.from(div.querySelectorAll("li.appearance-item"))
.map(li => {
const appearanceItem = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.itemDataSet)(li, appearanceGroup);
if (!appearanceItem?.icon)
return li.outerHTML;
li.dataset.categoryid = appearanceItem.categoryid.toString();
li.dataset.category = appearanceItem.category;
li.dataset.categoryname = appearanceItem.categoryname;
li.dataset.group = appearanceItem.group.toString();
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setItem(appearanceItem);
return li.outerHTML;
})
.join("\n");
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].availableItems = availableItems;
div.remove();
const active = document.querySelector(`#wardrobe-menu li[data-category="${appearanceGroup.category}"].active`);
if (active) {
document
.querySelector("#ee-items")
?.insertAdjacentHTML("beforeend", outerHTML);
initializeSelectedItems();
initializeHiddenCategories();
}
else if (handled)
break;
}
if (!handled)
handledCategories.delete(appearanceCategory.category);
(0,_hidden__WEBPACK_IMPORTED_MODULE_7__.unloadHiddenCategories)();
}
let loading = false;
async function loadBackground() {
if (loading)
return;
loading = true;
let success = true;
const categories = [
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.underwear,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.skin,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.tatoo,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.mouth,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.eye,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.hair,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.sock,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.shoe,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.pants,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.handAccessory,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.top,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.coat,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.glove,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.necklace,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.dress,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.hat,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.faceAccessory,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.belt,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.ambient,
];
const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
for (const category of categories) {
if (!location.pathname.startsWith("/player/appearance")) {
success = false;
break;
}
const active = document.querySelector(`#wardrobe-menu li[data-category="${category}"].active`);
if (active)
continue;
const categoryContainer = await (0,_favourites_actions__WEBPACK_IMPORTED_MODULE_6__.openCategory)(category);
if (!categoryContainer) {
success = false;
break;
}
let finished = false;
setTimeout(() => {
if (!finished)
$.flavrNotif(template.render({
icon: `/static/img/mall/categories/${category}.png`,
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.loading(document.querySelector(`#wardrobe-menu li[data-category="${category}"]`)?.dataset.categoryname ?? category),
}));
}, 1000);
await handleGroups(categoryContainer);
finished = true;
}
if (success)
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.loaded);
loading = false;
}
/***/ }),
/***/ "./src/appearance/enums/appearance_category_code.enum.ts":
/*!***************************************************************!*\
!*** ./src/appearance/enums/appearance_category_code.enum.ts ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "AppearanceCategoryCode": () => (/* binding */ AppearanceCategoryCode)
/* harmony export */ });
var AppearanceCategoryCode;
(function (AppearanceCategoryCode) {
AppearanceCategoryCode["attic"] = "attic";
AppearanceCategoryCode["favorites"] = "favorites";
AppearanceCategoryCode["underwear"] = "underwear";
AppearanceCategoryCode["skin"] = "skin";
AppearanceCategoryCode["tatoo"] = "tatoo";
AppearanceCategoryCode["mouth"] = "mouth";
AppearanceCategoryCode["eye"] = "eye";
AppearanceCategoryCode["hair"] = "hair";
AppearanceCategoryCode["sock"] = "sock";
AppearanceCategoryCode["shoe"] = "shoe";
AppearanceCategoryCode["pants"] = "pants";
AppearanceCategoryCode["handAccessory"] = "handAccessory";
AppearanceCategoryCode["top"] = "top";
AppearanceCategoryCode["coat"] = "coat";
AppearanceCategoryCode["glove"] = "glove";
AppearanceCategoryCode["necklace"] = "necklace";
AppearanceCategoryCode["dress"] = "dress";
AppearanceCategoryCode["hat"] = "hat";
AppearanceCategoryCode["faceAccessory"] = "faceAccessory";
AppearanceCategoryCode["background"] = "background";
AppearanceCategoryCode["belt"] = "belt";
AppearanceCategoryCode["ambient"] = "ambient";
})(AppearanceCategoryCode || (AppearanceCategoryCode = {}));
/***/ }),
/***/ "./src/appearance/fake_favourites.ts":
/*!*******************************************!*\
!*** ./src/appearance/fake_favourites.ts ***!
\*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "saveFavourite": () => (/* binding */ saveFavourite),
/* harmony export */ "showFavourite": () => (/* binding */ showFavourite)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../indexed_db/indexed_db */ "./src/indexed_db/indexed_db.ts");
/* harmony import */ var _outfit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../outfit */ "./src/outfit.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _favourites_actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./favourites_actions */ "./src/appearance/favourites_actions.ts");
async function saveFavourite() {
const favourite = await showOutfit();
if (favourite)
await (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_3__.loadFakeFavourites)();
return favourite;
}
async function deleteFavourite(favourite) {
await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].deleteFavouriteOutfit(favourite);
await (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_3__.loadFakeFavourites)();
}
async function showOutfit() {
const template = __webpack_require__(/*! ../templates/html/created_outfit_flavr.html */ "./src/templates/html/created_outfit_flavr.html");
return new Promise(resolve => $.flavr({
content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
onBuild: $container => {
$container.addClass("new-layout-popup");
$container.addClass("created-outfit-popup");
const saveButton = document.querySelector('[rel="btn-save"]');
if (!saveButton)
return;
document
.querySelector("#choose-name")
?.addEventListener("keyup", event => {
if (event.key === "Enter")
saveButton.click();
if (document.querySelector("#choose-name")?.value)
saveButton.classList.remove("disabled");
else
saveButton.classList.add("disabled");
});
saveButton.classList.add("nl-button", "nl-button-lg", "disabled");
},
buttons: {
close: {
text: "",
style: "close",
action: () => {
resolve(null);
return true;
},
},
save: {
text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.save_outfit.save,
style: "default",
action: () => {
const name = document.querySelector("#choose-name")?.value;
if (!name)
return false;
const avatar = Sacha.Avatar.avatars["#appearance-preview"];
if (!avatar)
return false;
const items = (0,_outfit__WEBPACK_IMPORTED_MODULE_2__.parseAvatar)(avatar);
void saveAction(name, items, resolve);
return true;
},
},
},
}));
}
function showFavourite(favourite) {
const template = __webpack_require__(/*! ../templates/html/favourite_outfit_flavr.html */ "./src/templates/html/favourite_outfit_flavr.html");
$.flavr({
content: template.render({ ...favourite, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
onBuild: $container => {
$container.addClass("new-layout-popup");
$container.addClass("created-outfit-popup");
},
buttons: {
close: {
text: "",
style: "close",
action: () => true,
},
delete: {
text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.click_outfit["delete"],
style: "default",
action: () => {
void deleteFavourite(favourite);
return true;
},
},
wear: {
text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.click_outfit.wear,
style: "default",
action: () => {
const avatar = Sacha.Avatar.avatars["#appearance-preview"];
if (!avatar)
return false;
void (async () => (0,_favourites_actions__WEBPACK_IMPORTED_MODULE_4__.wearOutfit)(avatar, favourite.items))();
return true;
},
},
},
});
}
async function saveAction(name, items, resolve) {
const blob = await new Promise(resolve => {
document
.querySelector("#appearance-preview canvas")
?.toBlob(blob => resolve(blob), "image/png", 1);
});
resolve({
...(await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].addFavouriteOutfit({
items,
name,
blob,
})),
url: URL.createObjectURL(blob),
});
}
/***/ }),
/***/ "./src/appearance/favourites_actions.ts":
/*!**********************************************!*\
!*** ./src/appearance/favourites_actions.ts ***!
\**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "exportPreview": () => (/* binding */ exportPreview),
/* harmony export */ "importOutfit": () => (/* binding */ importOutfit),
/* harmony export */ "openGroup": () => (/* binding */ openGroup),
/* harmony export */ "openCategory": () => (/* binding */ openCategory),
/* harmony export */ "wearOutfit": () => (/* binding */ wearOutfit)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _outfit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../outfit */ "./src/outfit.ts");
function exportPreview() {
(0,_outfit__WEBPACK_IMPORTED_MODULE_1__.exportOutfit)("#appearance-preview");
}
function importOutfit() {
const input = document.createElement("input");
input.setAttribute("type", "file");
input.setAttribute("accept", "application/json");
input.click();
input.addEventListener("input", event => {
if (!event.target)
return;
const files = event.target.files;
if (!files)
return;
const file = files[0];
if (!file)
return;
void file.text().then(async (value) => {
if (!value)
return;
const outfit = JSON.parse(value);
const avatar = Sacha.Avatar.avatars["#appearance-preview"];
if (!avatar)
return;
await wearOutfit(avatar, outfit);
});
});
}
function removeClothes() {
const avatar = Sacha.Avatar.avatars["#appearance-preview"];
if (!avatar)
return;
for (let i = avatar.children.length - 1; i >= 0; i--) {
const itemRender = avatar.children[i];
if (!itemRender)
continue;
const item = itemRender.getItem();
if (Sacha.Avatar.removeItemFromAllAvatars(item)) {
$(`#appearance-item-${item._id}`).removeClass("selected");
}
}
}
async function openGroup(group) {
return new Promise((resolve) => {
const groupContainer = document.querySelector(`#appearance-items-group-${group}`);
if (groupContainer)
return void resolve(groupContainer);
const avatar = Sacha.Avatar.avatars["#appearance-preview"];
if (!avatar)
return void resolve(null);
void $.get(`/player/openGroup/${group}`, { wornItems: avatar.getItemsToSave() }, (view) => {
$(view).hide().appendTo("#appearance-items");
resolve(document.querySelector(`#appearance-items-group-${group}`));
});
});
}
async function openCategory(category) {
return new Promise((resolve) => {
const categoryContainer = document.querySelector(`#appearance-items-category-${category}`);
if (categoryContainer)
return void resolve(categoryContainer);
void $.post(`/player/openCategory/${category}`, (view) => {
$(view).hide().appendTo("#appearance-items");
resolve(document.querySelector(`#appearance-items-category-${category}`));
});
});
}
async function wearOutfit(avatar, outfit) {
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.importing);
// Get all categories
const categories = new Set();
for (const clothing of outfit)
if (!availableItems[clothing.id])
categories.add(clothing.type);
// Open all categories
await Promise.all(Array.from(categories.values()).map(async (category) => openCategory(category)));
// Get all groups
const groups = new Set();
for (const clothing of outfit)
if (document.querySelector(`[data-group="${clothing.group}"]`) &&
!availableItems[clothing.id])
groups.add(clothing.group);
// Open all groups
await Promise.all(Array.from(groups.values()).map(async (group) => openGroup(group)));
// Get the items from `availableItems`
const wornItems = [];
for (const clothing of outfit) {
const item = availableItems[clothing.id];
if (item)
wornItems.push(item);
}
removeClothes();
avatar.addItems(wornItems);
initializeSelectedItems();
initializeHiddenCategories();
const avatarActions = document.getElementById("avatar-actions");
if (avatarActions)
avatarActions.style.display = "initial";
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.imported);
}
/***/ }),
/***/ "./src/appearance/hidden.ts":
/*!**********************************!*\
!*** ./src/appearance/hidden.ts ***!
\**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "unloadHiddenCategories": () => (/* binding */ unloadHiddenCategories),
/* harmony export */ "loadHiddenCategory": () => (/* binding */ loadHiddenCategory),
/* harmony export */ "loadHiddenGroup": () => (/* binding */ loadHiddenGroup)
/* harmony export */ });
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");
function unloadHiddenCategories() {
const hidden = document.querySelectorAll("#appearance-items .appearance-items-category:not(.active):not([data-categoryname]), #appearance-items script, body>script");
for (const div of hidden) {
div.remove();
}
}
/**
* Place the saved groups on the DOM as if it was Eldarya doing it.
* @returns the associated `AppearanceCategory` if it's found in the wardrobe.
*/
function loadHiddenCategory(code) {
const category = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getCategories().find(c => c.category === code);
if (!category)
return null;
const groups = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getCategoryGroups(category.categoryid);
const itemTemplate = __webpack_require__(/*! ../templates/html/appearance_item.html */ "./src/templates/html/appearance_item.html");
const groupTemplate = __webpack_require__(/*! ../templates/html/appearance_items_group.html */ "./src/templates/html/appearance_items_group.html");
document
.querySelector("#appearance-items")
?.insertAdjacentHTML("beforeend", groups
.map(group => groupTemplate.render({
...group,
items: _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getItems(group.group)
.map(item => itemTemplate.render(item))
.join("\n"),
}))
.join("\n"));
return category;
}
/**
* Load the saved group on the DOM as if it was Eldarya doing it.
* @returns the associated `AppearanceGroup` if it's found in the wardrobe.
*/
function loadHiddenGroup(id) {
const group = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getGroup(id);
if (!group)
return null;
const itemTemplate = __webpack_require__(/*! ../templates/html/appearance_item.html */ "./src/templates/html/appearance_item.html");
const groupTemplate = __webpack_require__(/*! ../templates/html/appearance_items_group.html */ "./src/templates/html/appearance_items_group.html");
document
.querySelector("#appearance-items")
?.insertAdjacentHTML("beforeend", groupTemplate.render({
...group,
items: _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getItems(group.group)
.map(item => itemTemplate.render(item))
.join("\n"),
}));
return group;
}
/***/ }),
/***/ "./src/appearance/wardrobe.ts":
/*!************************************!*\
!*** ./src/appearance/wardrobe.ts ***!
\************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
class Wardrobe {
categories = {};
groups = {};
items = {};
availableItems;
getCategories() {
return Object.values(this.categories);
}
getCategory(id) {
return this.categories[id];
}
getCategoryGroups(categoryid) {
return Object.values(this.groups).filter(group => group.categoryid === categoryid);
}
getGroup(id) {
return this.groups[id];
}
getGroups() {
return Object.values(this.groups);
}
getItem(id) {
return this.items[id];
}
getItems(group) {
return Object.values(this.items).filter(item => item.group === group);
}
setCategory(category) {
this.categories[category.categoryid] = category;
}
setGroup(group) {
this.groups[group.group] = group;
}
setItem(item) {
this.items[item.itemid] = item;
}
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new Wardrobe());
/***/ }),
/***/ "./src/carousel/carousel_beemoov_annoyances.ts":
/*!*****************************************************!*\
!*** ./src/carousel/carousel_beemoov_annoyances.ts ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "carouselBeemoovAnnoyances": () => (/* binding */ carouselBeemoovAnnoyances)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
const carouselBeemoovAnnoyances = {
backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_beemoov_annoyances.png",
h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.beemoov_annoyances.title,
href: "https://gitlab.com/NatoBoram/Beemoov-Annoyances",
id: "carousel-beemoov-annoyances",
p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.beemoov_annoyances.subtitle,
};
/***/ }),
/***/ "./src/carousel/carousel_download_face.ts":
/*!************************************************!*\
!*** ./src/carousel/carousel_download_face.ts ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "carouselDownloadFace": () => (/* binding */ carouselDownloadFace)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
const carouselDownloadFace = {
backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_face.png",
id: "carousel-download-face",
h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_face.title,
p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_face.subtitle,
};
/***/ }),
/***/ "./src/carousel/carousel_download_guardian.ts":
/*!****************************************************!*\
!*** ./src/carousel/carousel_download_guardian.ts ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "carouselDownloadGuardian": () => (/* binding */ carouselDownloadGuardian)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
const carouselDownloadGuardian = {
backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_guardian.png",
id: "carousel-download-guardian",
h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_guardian.title,
p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_guardian.subtitle,
};
/***/ }),
/***/ "./src/carousel/carousel_eldarya_enhancements.ts":
/*!*******************************************************!*\
!*** ./src/carousel/carousel_eldarya_enhancements.ts ***!
\*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "carouselEE": () => (/* binding */ carouselEE)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
const carouselEE = {
backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_eldarya_enhancements.png",
h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.eldarya_enhancements.title,
href: GM.info.script.namespace,
id: "carousel-eldarya-enhancements",
p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.eldarya_enhancements.subtitle,
};
/***/ }),
/***/ "./src/carousel/carousel_takeover.ts":
/*!*******************************************!*\
!*** ./src/carousel/carousel_takeover.ts ***!
\*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "carouselTakeover": () => (/* binding */ carouselTakeover)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
const carouselTakeover = {
backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_takeover.png",
id: "carousel-takeover",
h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.takeover.title,
p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.takeover.subtitle,
};
/***/ }),
/***/ "./src/console.ts":
/*!************************!*\
!*** ./src/console.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Console": () => (/* binding */ Console)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./local_storage/local_storage */ "./src/local_storage/local_storage.ts");
class Console {
static console = console;
constructor() { }
static get debugging() {
return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.debug;
}
static get time() {
return new Date().toLocaleTimeString();
}
static assert(value, message, ...optionalParams) {
if (!this.debugging)
return;
this.console.assert(value, ...this.format(message), ...optionalParams);
}
static debug(message, ...optionalParams) {
if (!this.debugging)
return;
this.console.debug(...this.format(message), ...optionalParams);
}
static error(message, ...optionalParams) {
if (!this.debugging)
return;
this.console.error(...this.format(message), ...optionalParams);
}
static info(message, ...optionalParams) {
if (!this.debugging)
return;
this.console.info(...this.format(message), ...optionalParams);
}
static log(message, ...optionalParams) {
if (!this.debugging)
return;
this.console.log(...this.format(message), ...optionalParams);
}
static warn(message, ...optionalParams) {
if (!this.debugging)
return;
this.console.warn(...this.format(message), ...optionalParams);
}
static format(message) {
return [
`%c[%c${this.time}%c]`,
"color:#9742c2",
"color:none",
"color:#9742c2",
message,
];
}
}
/***/ }),
/***/ "./src/download-canvas.ts":
/*!********************************!*\
!*** ./src/download-canvas.ts ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "downloadFace": () => (/* binding */ downloadFace),
/* harmony export */ "downloadGuardian": () => (/* binding */ downloadGuardian),
/* harmony export */ "downloadAppearance": () => (/* binding */ downloadAppearance),
/* harmony export */ "downloadProfile": () => (/* binding */ downloadProfile),
/* harmony export */ "getName": () => (/* binding */ getName)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./i18n/translate */ "./src/i18n/translate.ts");
function downloadCanvas(canvas, name) {
canvas.toBlob(blob => {
if (!blob) {
_console__WEBPACK_IMPORTED_MODULE_0__.Console.error("Canvas is empty");
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.error.downloadCanvas);
return;
}
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.setAttribute("href", url);
a.setAttribute("download", `${name}.png`);
a.style.display = "none";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
}, "image/png", 1);
}
function downloadFace() {
const canvas = document.querySelector("#avatar-menu-container canvas");
if (!canvas) {
console.warn("Couldn't find the guardian's face.");
return;
}
downloadCanvas(canvas, "face");
}
function downloadGuardian() {
const canvas = document.querySelector("#home-avatar-player canvas");
if (!canvas) {
console.warn("Couldn't find the guardian.");
return;
}
downloadCanvas(canvas, getName() ?? "guardian");
}
function downloadAppearance() {
const canvas = document.querySelector("#appearance-preview canvas");
if (!canvas) {
console.warn("Couldn't find the guardian.");
return;
}
downloadCanvas(canvas, getName() ?? "guardian");
}
function downloadProfile() {
const canvas = document.querySelector(".playerProfileAvatar canvas");
const title = document.querySelector("#main-section .section-title");
if (!canvas || !title)
return;
downloadCanvas(canvas, title.textContent?.trim() ?? "guardian");
}
function getName() {
return (document.querySelector("#avatar-menu-container-outer>p")?.textContent ??
null);
}
/***/ }),
/***/ "./src/duration.ts":
/*!*************************!*\
!*** ./src/duration.ts ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "DurationUnit": () => (/* binding */ DurationUnit),
/* harmony export */ "Duration": () => (/* binding */ Duration)
/* harmony export */ });
var DurationUnit;
(function (DurationUnit) {
DurationUnit[DurationUnit["millisecond"] = 1] = "millisecond";
DurationUnit[DurationUnit["second"] = 1000] = "second";
DurationUnit[DurationUnit["minute"] = 60000] = "minute";
DurationUnit[DurationUnit["hour"] = 3600000] = "hour";
DurationUnit[DurationUnit["day"] = 86400000] = "day";
DurationUnit[DurationUnit["week"] = 604800000] = "week";
})(DurationUnit || (DurationUnit = {}));
class Duration {
value;
unit;
constructor(value, unit) {
this.value = value;
this.unit = unit;
}
divide(duration) {
return new Duration(this.value / duration.to(this.unit).value, this.unit);
}
minus(duration) {
return new Duration(this.value - duration.to(this.unit).value, this.unit);
}
multiply(duration) {
return new Duration(this.value * duration.to(this.unit).value, this.unit);
}
plus(duration) {
return new Duration(this.value + duration.to(this.unit).value, this.unit);
}
to(unit) {
return new Duration((this.value * this.unit) / unit, unit);
}
}
/***/ }),
/***/ "./src/eldarya/jquery.ts":
/*!*******************************!*\
!*** ./src/eldarya/jquery.ts ***!
\*******************************/
/***/ (() => {
"use strict";
/***/ }),
/***/ "./src/eldarya_util.ts":
/*!*****************************!*\
!*** ./src/eldarya_util.ts ***!
\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "trimIcon": () => (/* binding */ trimIcon)
/* harmony export */ });
function trimIcon(icon) {
const tilde = icon.lastIndexOf("~");
const dot = icon.lastIndexOf(".");
if (tilde === -1 || dot === -1)
return icon;
return icon.substring(0, tilde) + icon.substring(dot);
}
/***/ }),
/***/ "./src/i18n/en.ts":
/*!************************!*\
!*** ./src/i18n/en.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "en": () => (/* binding */ en)
/* harmony export */ });
const en = {
home: {
forum: "Forum",
takeover: "Takeover",
},
takeover: {
bought: (name, price) => `Bought <strong>${name}</strong> for <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
disabled: "Takeover mode disabled.",
enabled: "Takeover mode enabled. Please do not interact with this tab.",
},
carousel: {
beemoov_annoyances: {
title: "Beemoov Annoyances",
subtitle: "Block some of Eldarya's annoyances.",
},
download_face: {
title: "Download your guardian's face!",
subtitle: "Click here to download your guardian's face.",
},
download_guardian: {
title: "Download your guardian!",
subtitle: "Click here to download your guardian.",
},
eldarya_enhancements: {
title: `${GM.info.script.name} v${GM.info.script.version}`,
subtitle: GM.info.script.description,
},
takeover: {
disable_takeover: "Disable Takeover",
enable_takeover: "Enable Takeover",
subtitle: "Give up this tab to perform automated actions.",
title: "Takeover",
},
},
minigames: {
played_for: (name, maanas) => `Played <strong>${name}</strong> for <strong class="price-item">${maanas}</strong> <span class="maana-icon" alt="maanas"></span> earned.`,
played: name => `Played <strong>${name}</strong>.`,
playing: name => `Playing <strong>${name}</strong>...`,
},
appearance: {
buttons: {
backward: "Move back",
forward: "Bring forward",
},
favourites: {
imported: "Imported outfit!",
importing: "Importing outfit. Please wait...",
click_outfit: {
delete: "Delete",
goto_account: `To transfer your <strong>${GM.info.script.name}</strong> favourite outfits to another browser, export your settings in the <a href="/user/account" style="text-decoration: underline;">my account</a> page.`,
saved_locally: `Take note that this outfit is saved in <strong>${GM.info.script.name}</strong>' settings and was not sent to Eldarya's servers.`,
wear: "Wear",
},
save_outfit: {
goto_account: `To transfer your <strong>${GM.info.script.name}</strong> favourite outfits to another browser, export your settings in the <a href="/user/account" style="text-decoration: underline;">my account</a> page.`,
placeholder: "Name...",
save: "Save",
saved_locally: `Take note that this outfit will only be saved within <strong>${GM.info.script.name}</strong>' settings and will not be sent to Eldarya's servers.`,
title: "Save outfit",
},
buttons: {
download: "Download PNG",
export: "Export",
import: "Import",
},
},
loaded: "The wardrobe is loaded.",
loading: (categoryname) => `Loading <strong>${categoryname}</strong>...`,
},
market: {
add_to_wishlist: {
added_to_wishlist: (name, price) => `Added <strong>${name}</strong> for <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span> to the wishlist.`,
invalid_price: "This is not a valid price.",
save: "Save",
text: "How many maanas do you wish to offer to acquire this item?",
title: "Add to wishlist",
},
auctions: {
buy_now_price: "Buy now price :",
current_price: "Current price :",
delete: "Delete",
purchase_history: "Purchase history",
sales_history: "Sales history",
date_time_format: new Intl.DateTimeFormat("en-GB", {
minute: "2-digit",
hour: "2-digit",
day: "numeric",
month: "long",
year: "numeric",
}),
},
change_price: {
changed_price: (name, price) => `Changed <strong>${name}</strong>'s price for <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
invalid_price: "This is not a valid price.",
save: "Save",
text: "How many maanas do you wish to offer to acquire this item?",
title: "Change price",
},
wishlist: {
assistance: `On this page, you can organize your wishlist and check the status of your wished items. Please note that your wishlist is saved locally in <strong>${GM.info.script.name}</strong>' settings and is not sent to Eldarya's servers. To transfer your wishlist to another browser, export your settings in the <a href="/user/account" style="text-decoration: underline;">my account</a> page.`,
actions: "Actions",
change_price: "Change price",
delete_tooltip: "Remove from wishlist",
delete: "Delete",
icon: "Icon",
name: "Name",
price: "Price",
reset_tooltip: "Reset the error status",
reset: "Reset",
status: "Status",
title: "Wishlist",
},
},
account: {
debug_tooltip: "Enables or disables logging.",
debug: "Debug",
enhancements: "Enhancements",
explorations: "Explorations",
export: "Export settings",
import: "Import settings",
imported: "Imported settings!",
market: "Market",
minigames: "Minigames",
},
pet: {
auto_explore: "Highlight",
date_time_format: new Intl.DateTimeFormat("en-GB", {
minute: "2-digit",
hour: "2-digit",
day: "numeric",
month: "long",
year: "numeric",
}),
delete_history: "Delete history",
empty_history: "Your exploration history is empty. It will automatically fill up as your familiar finds items while exploring.",
goto_account: `To transfer your exploration history to another browser, export your settings from the <em>my account</em> page.`,
history: "History",
saved_locally: `Please note that your exploration history is saved locally in <strong>${GM.info.script.name}</strong>' settings and was not sent to Eldarya's servers.`,
},
profile: {
export_outfit: "Export outfit",
download_outfit: "Download PNG",
},
error: {
downloadCanvas: "There was an error while creating the image.",
},
mall: {
add_to_wishlist: {
title: "Add to market wishlist",
text: "How many maanas do you wish to offer to acquire this item?",
note: "Please note that the items added from the mall will not necessarily be available at the market.",
},
},
};
Object.freeze(en);
/***/ }),
/***/ "./src/i18n/fr.ts":
/*!************************!*\
!*** ./src/i18n/fr.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "fr": () => (/* binding */ fr)
/* harmony export */ });
const fr = {
home: {
forum: "Forum",
takeover: "Takeover",
},
takeover: {
bought: (name, price) => `Acheté <strong>${name}</strong> pour <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
disabled: "Takeover désactivé.",
enabled: "Takeover activé. Évite d'intéragir avec cet onglet.",
},
carousel: {
beemoov_annoyances: {
title: "Beemoov Annoyances",
subtitle: "Bloque certains irritants d'Eldarya.",
},
download_face: {
title: "Télécharge le visage de ta gardienne!",
subtitle: "Clique ici pour télécharger le visage de ta gardienne.",
},
download_guardian: {
title: "Télécharge ta gardienne!",
subtitle: "Clique ici pour télécharger ta gardienne.",
},
eldarya_enhancements: {
title: `${GM.info.script.name} v${GM.info.script.version}`,
subtitle: "Améliore l'expérience utilisateur d'Eldarya.",
},
takeover: {
disable_takeover: "Désactive le takeover",
enable_takeover: "Active le takeover",
subtitle: "Laisse cet onglet performer des actions automatiques.",
title: "Takeover",
},
},
minigames: {
played_for: (name, maanas) => `A joué à <strong>${name}</strong> pour <strong class="price-item">${maanas}</strong> <span class="maana-icon" alt="maanas"></span> gagnés.`,
played: (name) => `A joué à <strong>${name}</strong>.`,
playing: (name) => `Joue à <strong>${name}</strong>...`,
},
appearance: {
buttons: {
backward: "Vers l'arrière",
forward: "Vers l'avant",
},
favourites: {
imported: "Importation réussie!",
importing: "Importation en cours...",
click_outfit: {
delete: "Supprimer",
goto_account: `Pour transférer tes tenues favorites d'<strong>${GM.info.script.name}</strong> vers un autre navigateur, exporte tes paramètres à partir de la page <a href="/user/account" style="text-decoration: underline;">mon compte</a>.`,
saved_locally: `Prends note que cette tenue est sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'a pas été envoyée aux serveurs d'Eldarya.`,
wear: "Porter",
},
save_outfit: {
goto_account: `Pour transférer tes tenues favorites d'<strong>${GM.info.script.name}</strong> vers un autre navigateur, exporte tes paramètres à partir de la page <a href="/user/account" style="text-decoration: underline;">mon compte</a>.`,
placeholder: "Nom...",
save: "Sauvegarder",
saved_locally: `Prends note que cette tenue sera sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et ne sera pas envoyée aux serveurs d'Eldarya.`,
title: "Sauvegarder cette tenue",
},
buttons: {
download: "Télécharger le PNG",
export: "Exporter",
import: "Importer",
},
},
loaded: "Le chargement de la garde-robe est terminé.",
loading: (categoryname) => `Chargement de <strong>${categoryname}</strong>...`,
},
market: {
add_to_wishlist: {
added_to_wishlist: (name, price) => `Ajouté <strong>${name}</strong> pour <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span> à la liste de souhaits.`,
invalid_price: "Ce prix n'est pas valide.",
save: "Sauvegarder",
text: "Combien de maanas souhaites-tu offrir pour acquérir cet item?",
title: "Ajouter à la liste de souhait",
},
auctions: {
buy_now_price: "Achat immédiat :",
current_price: "Mise actuelle :",
delete: "Supprimer",
purchase_history: "Historique d'achat",
sales_history: "Historique de vente",
date_time_format: new Intl.DateTimeFormat("fr-CA", {
minute: "2-digit",
hour: "2-digit",
day: "numeric",
month: "long",
year: "numeric",
}),
},
change_price: {
changed_price: (name, price) => `Changé le prix de <strong>${name}</strong> pour <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
invalid_price: "Ce prix n'est pas valide.",
save: "Sauvegarder",
text: "Combien de maanas souhaites-tu offrir pour acquérir cet item?",
title: "Changer le prix",
},
wishlist: {
assistance: `Sur cette page, tu peux organiser ta liste de souhaits et vérifier le statut de tes articles souhaités. Prends note que ta liste de souhaits est sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'est pas envoyée aux serveurs d'Eldarya. Pour transférer ta liste de souhaits vers un autre navigateur, exporte-la à partir de la page <a href="/user/account" style="text-decoration: underline;">mon compte</a>.`,
actions: "Actions",
change_price: "Changer le prix",
delete_tooltip: "Retirer de la liste de souhaits",
delete: "Supprimer",
icon: "Icône",
name: "Nom",
price: "Prix",
reset_tooltip: "Réinitialiser l'état d'erreur",
reset: "Réinitialiser",
status: "Statut",
title: "Liste de souhaits",
},
},
account: {
debug_tooltip: "Active ou désactive la journalisation.",
debug: "Débogage",
enhancements: "Améliorations",
explorations: "Explorations",
export: "Exporter les paramètres",
import: "Importer les paramètres",
imported: "Paramètres importés",
market: "Marché",
minigames: "Mini-jeux",
},
pet: {
auto_explore: "Marquer",
date_time_format: new Intl.DateTimeFormat("fr-CA", {
minute: "2-digit",
hour: "2-digit",
day: "numeric",
month: "long",
year: "numeric",
}),
delete_history: "Nettoyer l'historique",
empty_history: "Ton historique d'exploration est vide. Il se remplira automatiquement à mesure que ton familier trouvera des items en exploration.",
goto_account: "Pour transférer ton historique d'explorations vers un autre navigateur, exporte tes paramètres à partir de la page <em>mon compte</em>.",
history: "Historique",
saved_locally: `Prends note que ton historique d'explorations est sauvegardé localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'a pas été envoyé aux serveurs d'Eldarya.`,
},
profile: {
export_outfit: "Exporter la tenue",
download_outfit: "Télécharger le PNG",
},
error: {
downloadCanvas: "Une erreur est survenue lors du téléchargement de l'image.",
},
mall: {
add_to_wishlist: {
title: "Ajouter à la liste de souhait du marché",
text: "Combien de maanas souhaites-tu offrir pour acquérir cet item?",
note: "Prends note que les items ajoutés à partir de la boutique ne seront pas nécessairement disponibles au marché.",
},
},
};
Object.freeze(fr);
/***/ }),
/***/ "./src/i18n/translate.ts":
/*!*******************************!*\
!*** ./src/i18n/translate.ts ***!
\*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "translate": () => (/* binding */ translate)
/* harmony export */ });
/* harmony import */ var _en__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./en */ "./src/i18n/en.ts");
/* harmony import */ var _fr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fr */ "./src/i18n/fr.ts");
function translation() {
if (location.hostname.endsWith(".com.br"))
return _en__WEBPACK_IMPORTED_MODULE_0__.en;
if (location.hostname.endsWith(".de"))
return _en__WEBPACK_IMPORTED_MODULE_0__.en;
if (location.hostname.endsWith(".es"))
return _en__WEBPACK_IMPORTED_MODULE_0__.en;
if (location.hostname.endsWith(".hu"))
return _en__WEBPACK_IMPORTED_MODULE_0__.en;
if (location.hostname.endsWith(".it"))
return _en__WEBPACK_IMPORTED_MODULE_0__.en;
if (location.hostname.endsWith(".pl"))
return _en__WEBPACK_IMPORTED_MODULE_0__.en;
if (location.hostname.endsWith(".ru"))
return _en__WEBPACK_IMPORTED_MODULE_0__.en;
if (location.hostname.endsWith(".com"))
return _en__WEBPACK_IMPORTED_MODULE_0__.en;
if (location.hostname.endsWith(".fr"))
return _fr__WEBPACK_IMPORTED_MODULE_1__.fr;
else
return _en__WEBPACK_IMPORTED_MODULE_0__.en;
}
const translate = translation();
/***/ }),
/***/ "./src/indexed_db/databases.enum.ts":
/*!******************************************!*\
!*** ./src/indexed_db/databases.enum.ts ***!
\******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Databases": () => (/* binding */ Databases)
/* harmony export */ });
var Databases;
(function (Databases) {
Databases["eldarya_enhancements"] = "eldarya_enhancements";
})(Databases || (Databases = {}));
/***/ }),
/***/ "./src/indexed_db/fields.enum.ts":
/*!***************************************!*\
!*** ./src/indexed_db/fields.enum.ts ***!
\***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Fields": () => (/* binding */ Fields)
/* harmony export */ });
var Fields;
(function (Fields) {
Fields["blob"] = "blob";
Fields["id"] = "id";
Fields["items"] = "items";
Fields["name"] = "name";
})(Fields || (Fields = {}));
/***/ }),
/***/ "./src/indexed_db/indexed_db.ts":
/*!**************************************!*\
!*** ./src/indexed_db/indexed_db.ts ***!
\**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _databases_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./databases.enum */ "./src/indexed_db/databases.enum.ts");
/* harmony import */ var _fields_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fields.enum */ "./src/indexed_db/fields.enum.ts");
/* harmony import */ var _tables_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables.enum */ "./src/indexed_db/tables.enum.ts");
class IndexedDB {
db;
constructor() {
const request = indexedDB.open(_databases_enum__WEBPACK_IMPORTED_MODULE_0__.Databases.eldarya_enhancements, 1);
request.onsuccess = () => (this.db = request.result);
request.onupgradeneeded = function () {
const db = this.result;
const objectStore = db.createObjectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits, {
keyPath: "id",
autoIncrement: true,
});
objectStore.createIndex(_fields_enum__WEBPACK_IMPORTED_MODULE_1__.Fields.blob, "blob", { unique: false });
objectStore.createIndex(_fields_enum__WEBPACK_IMPORTED_MODULE_1__.Fields.items, "items", { unique: false });
objectStore.createIndex(_fields_enum__WEBPACK_IMPORTED_MODULE_1__.Fields.name, "name", { unique: false });
};
}
/** @returns a new `FavouriteOutfit` with the `key` property set. */
async addFavouriteOutfit(favourite) {
return new Promise((resolve, reject) => {
if (!this.db)
return void reject();
const request = this.db
.transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readwrite")
.objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
.add(favourite);
request.onsuccess = () => resolve({
...favourite,
url: favourite.url ?? URL.createObjectURL(favourite.blob),
id: Number(request.result),
});
});
}
async clearFavouriteOutfits() {
return new Promise((resolve, reject) => {
if (!this.db)
return void reject();
const request = this.db
.transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readwrite")
.objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
.clear();
request.onsuccess = () => resolve();
});
}
async deleteFavouriteOutfit(favourite) {
return new Promise((resolve, reject) => {
if (!this.db)
return void reject();
const request = this.db
.transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readwrite")
.objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
.delete(favourite.id);
request.onsuccess = () => {
resolve();
if (favourite.url)
URL.revokeObjectURL(favourite.url);
};
});
}
async getFavouriteOutfit(id) {
return new Promise((resolve, reject) => {
if (!this.db)
return void reject();
const request = this.db
.transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readonly")
.objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
.get(id);
const favourite = request.result;
request.onsuccess = () => resolve({ ...favourite, url: URL.createObjectURL(favourite.blob) });
});
}
async getFavouriteOutfits() {
return new Promise((resolve, reject) => {
if (!this.db)
return void reject();
const request = this.db
.transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readonly")
.objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
.getAll();
request.onsuccess = () => resolve(request.result.map((favourite) => ({
...favourite,
url: URL.createObjectURL(favourite.blob),
})));
});
}
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new IndexedDB());
/***/ }),
/***/ "./src/indexed_db/tables.enum.ts":
/*!***************************************!*\
!*** ./src/indexed_db/tables.enum.ts ***!
\***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Tables": () => (/* binding */ Tables)
/* harmony export */ });
var Tables;
(function (Tables) {
Tables["favourite_outfits"] = "favourite_outfits";
})(Tables || (Tables = {}));
/***/ }),
/***/ "./src/local_storage/local_storage.enum.ts":
/*!*************************************************!*\
!*** ./src/local_storage/local_storage.enum.ts ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "LocalStorageKey": () => (/* binding */ LocalStorageKey)
/* harmony export */ });
var LocalStorageKey;
(function (LocalStorageKey) {
LocalStorageKey["autoExploreLocations"] = "autoExploreLocations";
LocalStorageKey["debug"] = "debug";
LocalStorageKey["explorationHistory"] = "explorationHistory";
LocalStorageKey["explorations"] = "explorations";
LocalStorageKey["market"] = "market";
LocalStorageKey["meta"] = "meta";
LocalStorageKey["minigames"] = "minigames";
LocalStorageKey["purchases"] = "purchases";
LocalStorageKey["sales"] = "sales";
LocalStorageKey["version"] = "version";
LocalStorageKey["wishlist"] = "wishlist";
})(LocalStorageKey || (LocalStorageKey = {}));
/***/ }),
/***/ "./src/local_storage/local_storage.ts":
/*!********************************************!*\
!*** ./src/local_storage/local_storage.ts ***!
\********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "LocalStorage": () => (/* binding */ LocalStorage)
/* harmony export */ });
/* harmony import */ var blob_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blob-util */ "./node_modules/.pnpm/[email protected]/node_modules/blob-util/dist/blob-util.es.js");
/* harmony import */ var _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../indexed_db/indexed_db */ "./src/indexed_db/indexed_db.ts");
/* harmony import */ var _local_storage_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./local_storage.enum */ "./src/local_storage/local_storage.enum.ts");
class LocalStorage {
static localStorage = localStorage;
constructor() { }
static get autoExploreLocations() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.autoExploreLocations, []);
}
static set autoExploreLocations(locations) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.autoExploreLocations, locations);
}
static get debug() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.debug, false);
}
static set debug(enabled) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.debug, enabled);
}
static get explorationHistory() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorationHistory, []);
}
static set explorationHistory(explorationHistory) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorationHistory, explorationHistory);
}
static get explorations() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorations, false);
}
static set explorations(enabled) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorations, enabled);
}
static get market() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.market, false);
}
static set market(enabled) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.market, enabled);
}
static get meta() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.meta, null);
}
static set meta(meta) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.meta, meta);
}
static get minigames() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.minigames, false);
}
static set minigames(enabled) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.minigames, enabled);
}
static get purchases() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.purchases, []);
}
static set purchases(entry) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.purchases, entry);
}
static get sales() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.sales, []);
}
static set sales(sale) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.sales, sale);
}
static get version() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.version, "");
}
static set version(version) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.version, version);
}
static get wishlist() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.wishlist, []);
}
static set wishlist(locations) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.wishlist, locations);
}
static async getSettings() {
return {
autoExploreLocations: this.autoExploreLocations,
debug: this.debug,
explorationHistory: this.explorationHistory,
explorations: this.explorations,
favourites: await Promise.all((await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].getFavouriteOutfits()).map(async (favourite) => ({
name: favourite.name,
items: favourite.items,
base64: await (0,blob_util__WEBPACK_IMPORTED_MODULE_0__.blobToBase64String)(favourite.blob),
}))),
market: this.market,
minigames: this.minigames,
version: this.version,
wishlist: this.wishlist,
};
}
static async setSettings(settings) {
this.autoExploreLocations = settings.autoExploreLocations;
this.debug = settings.debug;
this.explorationHistory = settings.explorationHistory;
this.explorations = settings.explorations;
this.market = settings.market;
this.minigames = settings.minigames;
this.version = settings.version;
this.wishlist = settings.wishlist;
await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].clearFavouriteOutfits();
for (const favourite of settings.favourites.map(favourite => ({
blob: (0,blob_util__WEBPACK_IMPORTED_MODULE_0__.base64StringToBlob)(favourite.base64),
items: favourite.items,
name: favourite.name,
}))) {
void _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__["default"].addFavouriteOutfit(favourite);
}
}
static getItem(key, fallback) {
return (JSON.parse(this.localStorage.getItem(key) ?? JSON.stringify(fallback)) ?? fallback);
}
static setItem(key, value) {
this.localStorage.setItem(key, JSON.stringify(value));
}
}
/***/ }),
/***/ "./src/marketplace/enums/body_location.enum.ts":
/*!*****************************************************!*\
!*** ./src/marketplace/enums/body_location.enum.ts ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "BodyLocation": () => (/* binding */ BodyLocation)
/* harmony export */ });
var BodyLocation;
(function (BodyLocation) {
BodyLocation["All"] = "";
BodyLocation[BodyLocation["Underwear"] = 1] = "Underwear";
BodyLocation[BodyLocation["Skins"] = 2] = "Skins";
BodyLocation[BodyLocation["Tattoos"] = 20] = "Tattoos";
BodyLocation[BodyLocation["Mouths"] = 21] = "Mouths";
BodyLocation[BodyLocation["Eyes"] = 3] = "Eyes";
BodyLocation[BodyLocation["Hair"] = 4] = "Hair";
BodyLocation[BodyLocation["Socks"] = 5] = "Socks";
BodyLocation[BodyLocation["Shoes"] = 6] = "Shoes";
BodyLocation[BodyLocation["Pants"] = 7] = "Pants";
BodyLocation[BodyLocation["HandAccessories"] = 8] = "HandAccessories";
BodyLocation[BodyLocation["Tops"] = 9] = "Tops";
BodyLocation[BodyLocation["Coats"] = 10] = "Coats";
BodyLocation[BodyLocation["Gloves"] = 11] = "Gloves";
BodyLocation[BodyLocation["Necklaces"] = 12] = "Necklaces";
BodyLocation[BodyLocation["Dresses"] = 13] = "Dresses";
BodyLocation[BodyLocation["Hats"] = 14] = "Hats";
BodyLocation[BodyLocation["FaceAccessories"] = 15] = "FaceAccessories";
BodyLocation[BodyLocation["Funds"] = 16] = "Funds";
BodyLocation[BodyLocation["Belts"] = 18] = "Belts";
BodyLocation[BodyLocation["Atmospheres"] = 19] = "Atmospheres";
})(BodyLocation || (BodyLocation = {}));
/***/ }),
/***/ "./src/marketplace/enums/category.enum.ts":
/*!************************************************!*\
!*** ./src/marketplace/enums/category.enum.ts ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "CategoryString": () => (/* binding */ CategoryString),
/* harmony export */ "CategoryNumber": () => (/* binding */ CategoryNumber)
/* harmony export */ });
var CategoryString;
(function (CategoryString) {
CategoryString["all"] = "";
CategoryString["food"] = "food";
CategoryString["alchemy"] = "alchemy";
CategoryString["utility"] = "utility";
CategoryString["tame"] = "tame";
})(CategoryString || (CategoryString = {}));
var CategoryNumber;
(function (CategoryNumber) {
CategoryNumber["all"] = "";
CategoryNumber[CategoryNumber["food"] = 1] = "food";
CategoryNumber["alchemy"] = "Consumable";
CategoryNumber[CategoryNumber["utility"] = 3] = "utility";
CategoryNumber[CategoryNumber["tame"] = 4] = "tame";
})(CategoryNumber || (CategoryNumber = {}));
/***/ }),
/***/ "./src/marketplace/enums/guard.enum.ts":
/*!*********************************************!*\
!*** ./src/marketplace/enums/guard.enum.ts ***!
\*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Guard": () => (/* binding */ Guard)
/* harmony export */ });
var Guard;
(function (Guard) {
Guard["any"] = "";
Guard[Guard["light"] = 1] = "light";
Guard[Guard["obsidian"] = 2] = "obsidian";
Guard[Guard["absynthe"] = 3] = "absynthe";
Guard[Guard["shadow"] = 4] = "shadow";
})(Guard || (Guard = {}));
/***/ }),
/***/ "./src/marketplace/enums/rarity.enum.ts":
/*!**********************************************!*\
!*** ./src/marketplace/enums/rarity.enum.ts ***!
\**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Rarity": () => (/* binding */ Rarity)
/* harmony export */ });
var Rarity;
(function (Rarity) {
Rarity["all"] = "";
Rarity["common"] = "common";
Rarity["rare"] = "rare";
Rarity["epic"] = "epic";
Rarity["legendary"] = "legendary";
Rarity["event"] = "event";
})(Rarity || (Rarity = {}));
/***/ }),
/***/ "./src/marketplace/enums/type.enum.ts":
/*!********************************************!*\
!*** ./src/marketplace/enums/type.enum.ts ***!
\********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Type": () => (/* binding */ Type)
/* harmony export */ });
var Type;
(function (Type) {
Type["All"] = "";
Type["Bag"] = "Bag";
Type["Consumable"] = "Consumable";
Type["EggItem"] = "EggItem";
Type["PlayerWearableItem"] = "PlayerWearableItem";
Type["QuestItem"] = "QuestItem";
})(Type || (Type = {}));
/***/ }),
/***/ "./src/marketplace/marketplace_handlers.ts":
/*!*************************************************!*\
!*** ./src/marketplace/marketplace_handlers.ts ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "getItemDetails": () => (/* binding */ getItemDetails)
/* harmony export */ });
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
/* harmony import */ var _enums_rarity_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
function getItemDetails(li) {
const name = li.querySelector(".abstract-name")?.innerText;
const abstractType = li.querySelector(".abstract-type")?.innerText;
const src = li.querySelector(".abstract-icon img")?.src;
const rarity = _enums_rarity_enum__WEBPACK_IMPORTED_MODULE_1__.Rarity[(li
.querySelector(".rarity-marker-common, .rarity-marker-rare, .rarity-marker-epic, .rarity-marker-legendary, .rarity-marker-event")
?.className.split("rarity-marker-")[1] ?? "")];
const currentPrice = li.querySelector(".price-item[data-bids]")?.dataset;
const buyNowPrice = li.querySelector(".price-item:not([data-bids])")?.dataset;
if (!src || !name || !abstractType)
return null;
return {
...li.dataset,
icon: (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_0__.trimIcon)(src),
rarity,
name,
abstractType,
buyNowPrice,
currentPrice,
date: new Date(),
};
}
/***/ }),
/***/ "./src/math_util.ts":
/*!**************************!*\
!*** ./src/math_util.ts ***!
\**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "MathUtil": () => (/* binding */ MathUtil)
/* harmony export */ });
class MathUtil {
static phi = (1 + Math.sqrt(5)) / 2;
static randomBetween(min, max) {
return Math.random() * (max - min) + min;
}
}
/***/ }),
/***/ "./src/migrate.ts":
/*!************************!*\
!*** ./src/migrate.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "migrate": () => (/* binding */ migrate)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./local_storage/local_storage */ "./src/local_storage/local_storage.ts");
function migrate() {
switch (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.version) {
case GM.info.script.version:
return;
case "":
installed();
break;
default:
switch (GM.info.script.version) {
case "1.2.0":
v1_2_0();
break;
case "1.2.9":
v1_2_9();
break;
case "1.2.10":
v1_2_10();
break;
case "1.2.13":
v1_2_13();
break;
default:
installed();
break;
}
}
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.version = GM.info.script.version;
}
function installed() {
$.flavrNotif(`${name()} ${version()} installed!`);
}
function name() {
return `<strong>${GM.info.script.name}</strong>`;
}
function version() {
return `v<strong>${GM.info.script.version}</strong>`;
}
function v1_2_0() {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.sales = [];
$.flavrNotif(`Updated to ${version()}. Your sales history was erased.`);
}
function v1_2_9() {
$.flavrNotif(`Updated to ${version()}. The wishlist has been improved to sort by category/type/name, but your wished items do not have a type. You can add types by re-adding the items via the market.`);
}
function v1_2_10() {
$.flavrNotif(`Updated to ${version()}. The wishlist has been improved to sort by category/type/rarity/name, but your wished items do not have a rarity. You can add rarities by re-adding the items via the market.`);
}
function v1_2_13() {
$.flavrNotif(`Updated to ${version()}. The enhanced dressing experience was disabled.`);
}
/***/ }),
/***/ "./src/minigames/emile.ts":
/*!********************************!*\
!*** ./src/minigames/emile.ts ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "playPeggle": () => (/* binding */ playPeggle),
/* harmony export */ "playFlappy": () => (/* binding */ playFlappy),
/* harmony export */ "playHatchlings": () => (/* binding */ playHatchlings)
/* harmony export */ });
/* harmony import */ var _eldarya_jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya/jquery */ "./src/eldarya/jquery.ts");
/* harmony import */ var _eldarya_jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_eldarya_jquery__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _flappy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./flappy */ "./src/minigames/flappy.ts");
/* harmony import */ var _hatchlings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hatchlings */ "./src/minigames/hatchlings.ts");
/* harmony import */ var _peggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./peggle */ "./src/minigames/peggle.ts");
async function playPeggle() {
return play(_peggle__WEBPACK_IMPORTED_MODULE_4__.peggle);
}
async function playFlappy() {
return play(_flappy__WEBPACK_IMPORTED_MODULE_2__.flappy);
}
async function playHatchlings() {
return play(_hatchlings__WEBPACK_IMPORTED_MODULE_3__.hatchlings);
}
async function play(minigame) {
// Disable buttons
await new Promise(resolve => {
const interval = setInterval(() => {
const buttons = document.querySelectorAll(".minigames-rules .flavr-button");
if (buttons.length) {
clearInterval(interval);
for (const button of buttons) {
button.classList.add("disabled");
}
resolve(true);
}
}, 250);
});
const json = await execute(minigame);
const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
$.flavrNotif(template.render({
...minigame,
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.playing(minigame.name),
}));
const gameToken = json.data;
const score = randomInt(minigame.scoreMin, minigame.scoreMax);
const enc_token = xorEncode(gameToken, score.toString());
await new Promise(resolve => setTimeout(resolve, randomInt(minigame.delayMin, minigame.delayMax)));
await getPrizes(minigame, gameToken, score);
await new Promise(resolve => setTimeout(resolve, randomInt(1000, 3000)));
await send(enc_token, score, minigame.name.toLowerCase());
await new Promise(resolve => setTimeout(resolve, randomInt(1000, 3000)));
}
function randomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
async function execute(minigame) {
return new Promise((resolve, reject) => {
if (typeof Recaptcha !== "undefined") {
Recaptcha.execute(`minigameStart${minigame.name}`, (token) => void startGame(minigame, token).then(resolve).catch(reject));
}
else {
void startGame(minigame).then(resolve).catch(reject);
}
});
}
async function startGame(minigame, recaptchaToken) {
return new Promise((resolve, reject) => void $.ajax({
url: "/minigames/ajax_startGame",
type: "post",
dataType: "json",
data: recaptchaToken
? {
game: minigame.name.toLowerCase(),
recaptchaToken: recaptchaToken,
}
: {
game: minigame.name.toLowerCase(),
},
success: (json) => {
resolve(json);
},
error: () => {
reject();
},
}));
}
async function getPrizes(minigame, gameToken, score) {
return new Promise((resolve) => void $.post("/minigames/ajax_getPrizes", { game: minigame.name.toLowerCase(), score: score }, (json) => {
resolve(json);
if (json.result === "success") {
const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
$.flavrNotif(template.render({
...minigame,
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.played_for(minigame.name, json.data.maana),
}));
}
else
$.flavrNotif(json.data);
}, "json").fail(() => setTimeout(() => {
resolve(getPrizes(minigame, gameToken, score));
}, randomInt(1000, 3000))));
}
/**
* Sécurisation de l'envoi du score
* Basé sur l'encodage XOR : http://en.wikipedia.org/wiki/XOR_cipher
* Effectue un XOR bit à bit entre une chaine et une clé
*/
function xorEncode(str, key) {
// Assure que les deux paramètres soient des chaines de caractère
str = str.toString();
key = key.toString();
/** Encodage XOR */
let xor = "";
// eslint-disable-next-line @typescript-eslint/prefer-for-of
for (let i = 0; i < str.length; ++i) {
let tmp = str[i];
for (let j = 0; j < key.length; ++j) {
tmp = String.fromCharCode(tmp.charCodeAt(0) ^ key.charCodeAt(j));
}
xor += tmp;
}
// Renvoie le résultat en encodant les caractères spéciaux pouvant poser problème (\n par exemple)
return encodeURIComponent(xor);
}
async function send(enc_token, score, game) {
return new Promise(resolve => {
if (typeof Recaptcha !== "undefined") {
Recaptcha.execute("minigameSave" + game, (recaptchaToken) => void saveScore(enc_token, score, game, recaptchaToken).then(resolve));
}
else {
void saveScore(enc_token, score, game).then(resolve);
}
});
}
async function saveScore(enc_token, score, game, recaptchaToken) {
return new Promise(resolve => {
const token = decodeURIComponent(enc_token);
void $.ajax({
type: "post",
url: "/minigames/ajax_saveScore",
data: recaptchaToken
? {
token: token,
score: score,
game: game,
recaptchaToken: recaptchaToken,
}
: {
token: token,
score: score,
game: game,
},
success: () => {
resolve();
},
error: () => setTimeout(() => {
resolve(saveScore(enc_token, score, game));
}, randomInt(1000, 3000)),
});
});
}
/***/ }),
/***/ "./src/minigames/flappy.ts":
/*!*********************************!*\
!*** ./src/minigames/flappy.ts ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "flappy": () => (/* binding */ flappy)
/* harmony export */ });
const flappy = {
name: "Flappy",
scoreMin: 180,
scoreMax: 200,
delayMin: 60_000,
delayMax: 70_000,
buttonSelector: '.minigame-start [href="/minigames/bubbltemple"] .nl-button',
icon: "/static/img/new-layout/minigames/icon_bubbletemple.png",
};
/***/ }),
/***/ "./src/minigames/hatchlings.ts":
/*!*************************************!*\
!*** ./src/minigames/hatchlings.ts ***!
\*************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "hatchlings": () => (/* binding */ hatchlings)
/* harmony export */ });
const hatchlings = {
name: "Hatchlings",
scoreMin: 18,
scoreMax: 20,
delayMin: 30_000,
delayMax: 30_000,
buttonSelector: '.minigame-start [href="/minigames/cocooninpick"] .nl-button',
icon: "/static/img/new-layout/minigames/icon_coconinpick.png",
};
/***/ }),
/***/ "./src/minigames/peggle.ts":
/*!*********************************!*\
!*** ./src/minigames/peggle.ts ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "peggle": () => (/* binding */ peggle)
/* harmony export */ });
const peggle = {
name: "Peggle",
scoreMin: 9,
scoreMax: 10,
delayMin: 10_000,
delayMax: 20_000,
buttonSelector: '.minigame-start [href="/minigames/gembomb"] .nl-button',
icon: "/static/img/new-layout/minigames/icon_gembomb.png",
};
/***/ }),
/***/ "./src/outfit.ts":
/*!***********************!*\
!*** ./src/outfit.ts ***!
\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "exportOutfit": () => (/* binding */ exportOutfit),
/* harmony export */ "parseAvatar": () => (/* binding */ parseAvatar)
/* harmony export */ });
function exportOutfit(selector, name = "outfit") {
const avatar = Sacha.Avatar.avatars[selector];
if (!avatar)
return;
const outfit = parseAvatar(avatar);
const href = "data:text/json;charset=utf-8," +
encodeURIComponent(JSON.stringify(outfit, undefined, 2));
const a = document.createElement("a");
a.setAttribute("href", href);
a.setAttribute("download", `${name}.json`);
a.click();
}
function parseAvatar(avatar) {
return avatar.children.map(child => {
const item = child.getItem();
return {
id: item._id,
group: item._group,
name: item._name,
image: item._image,
type: item._type,
categoryId: item._categoryId,
hiddenCategories: Object.values(item._hiddenCategories),
animationData: item._animationData,
locked: item._locked,
};
});
}
/***/ }),
/***/ "./src/pet/exploration-history.ts":
/*!****************************************!*\
!*** ./src/pet/exploration-history.ts ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadExplorationHistory": () => (/* binding */ loadExplorationHistory)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _exploration_watcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./exploration-watcher */ "./src/pet/exploration-watcher.ts");
function loadExplorationHistory() {
loadHistoryButton();
(0,_exploration_watcher__WEBPACK_IMPORTED_MODULE_3__.listenTreasureHunt)();
}
function loadHistoryButton() {
const closeExplorationButton = document.querySelector("#close-treasure-hunt-interface");
if (!closeExplorationButton)
return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("Couldn't find #close-treasure-hunt-interface.");
closeExplorationButton.style.display = "inline-block";
closeExplorationButton.style.position = "relative";
closeExplorationButton.style.right = "0";
closeExplorationButton.style.top = "0";
closeExplorationButton.addEventListener("click", onClickPet);
const historyButton = document.createElement("a");
historyButton.classList.add("nl-button", "nl-button-back");
historyButton.style.marginRight = "0.6em";
historyButton.textContent = _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.pet.history;
historyButton.addEventListener("click", onClickHistory);
const row = document.createElement("div");
row.insertAdjacentElement("beforeend", historyButton);
row.insertAdjacentElement("beforeend", closeExplorationButton);
document
.querySelector("#right-container-inner")
?.insertAdjacentElement("afterbegin", row);
}
function onClickHistory() {
hidePet();
hideExploration();
makeHistory();
showHistory();
}
function onClickPet() {
hideHistory();
showPet();
}
function hidePet() {
const nameContainer = document.getElementById("name-container");
const infoContainer = document.getElementById("infos-container");
const petImageContainer = document.getElementById("pet-image-container");
if (!nameContainer || !infoContainer || !petImageContainer)
return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("The pet display was damaged.", {
nameContainer,
infoContainer,
petImageContainer,
});
nameContainer.style.display = "none";
infoContainer.style.display = "none";
petImageContainer.style.display = "none";
}
function showPet() {
const nameContainer = document.getElementById("name-container");
const infoContainer = document.getElementById("infos-container");
const petImageContainer = document.getElementById("pet-image-container");
if (!nameContainer || !infoContainer || !petImageContainer)
return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("The pet display was damaged.", {
nameContainer,
infoContainer,
petImageContainer,
});
nameContainer.style.display = "";
infoContainer.style.display = "";
petImageContainer.style.display = "";
}
function showHistory() {
const history = document.getElementById("history-container");
if (!history)
return;
history.style.display = "";
}
function hideHistory() {
const history = document.getElementById("history-container");
if (!history)
return;
history.style.display = "none";
}
function hideExploration() {
document
.getElementById("main-section")
?.classList.remove("treasure-hunt-interface-open");
}
function makeHistory() {
document.getElementById("history-container")?.remove();
const template = __webpack_require__(/*! ../templates/html/exploration_history.html */ "./src/templates/html/exploration_history.html");
document.getElementById("left-container")?.insertAdjacentHTML("beforeend", template.render({
translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate,
history: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory.map(history => ({
...history,
date: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.pet.date_time_format.format(new Date(history.date)),
})),
}));
document.getElementById("delete-history")?.addEventListener("click", () => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory = [];
makeHistory();
});
}
/***/ }),
/***/ "./src/pet/exploration-watcher.ts":
/*!****************************************!*\
!*** ./src/pet/exploration-watcher.ts ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "listenTreasureHunt": () => (/* binding */ listenTreasureHunt)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
function listenTreasureHunt() {
const resultOverlay = document.querySelector("#treasure-hunt-result-overlay");
if (!resultOverlay)
return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("There is no result overlay.", resultOverlay);
new MutationObserver(() => {
_console__WEBPACK_IMPORTED_MODULE_0__.Console.log("Mutation in", resultOverlay);
if (!resultOverlay.classList.contains("active"))
return;
const results = getResults();
if (results.length === 0)
return;
_console__WEBPACK_IMPORTED_MODULE_0__.Console.log("Results:", results);
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory = [
...results,
..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory,
];
}).observe(resultOverlay, {
attributeFilter: ["class"],
});
}
function getResults() {
const locationName = document
.querySelector("#th-again strong")
?.textContent?.trim();
const now = new Date();
return Array.from(document.querySelectorAll(".th-result")).map(result => {
const img = result.querySelector("img.th-result-img");
return {
count: result.querySelector(".resource-count")?.textContent?.trim(),
date: now,
icon: img ? (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_1__.trimIcon)(img.src) : undefined,
locationName,
name: result.querySelector(".tooltip-content h3")?.textContent?.trim(),
tradable: Boolean(result.querySelector(".tradable")),
};
});
}
/***/ }),
/***/ "./src/pet/exploration.ts":
/*!********************************!*\
!*** ./src/pet/exploration.ts ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadMarkers": () => (/* binding */ loadMarkers)
/* harmony export */ });
/* harmony import */ var _ajax_change_region__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ajax/change_region */ "./src/ajax/change_region.ts");
/* harmony import */ var _api_result_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../api/result.enum */ "./src/api/result.enum.ts");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
function loadMarkers() {
const autoExploreLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations;
for (const div of document.querySelectorAll(".map-location[data-id]")) {
const locationId = Number(div.getAttribute("data-id"));
if (!locationId)
continue;
loadPictoMap(autoExploreLocations, div);
div.addEventListener("click", () => new MutationObserver((_, observer) => {
addAutoExploreButton(locationId, observer);
}).observe(document.getElementById("map-location-preview"), {
attributes: true,
}));
}
}
function addAutoExploreButton(locationId, observer) {
const buttonsContainer = document.querySelector("#buttons-container");
if (!buttonsContainer)
return;
observer?.disconnect();
// Parameters to be injected into the template
const context = {
locationId,
active: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations.some(saved => saved.location.id === locationId),
regionId: Number(document
.querySelector(".minimap.current[data-mapid]")
?.getAttribute("data-mapid")),
};
// Add the auto explore button
buttonsContainer.querySelector("#auto-explore-button")?.remove();
const autoExploreTemplate = __webpack_require__(/*! ../templates/html/auto_explore_button.html */ "./src/templates/html/auto_explore_button.html");
buttonsContainer.insertAdjacentHTML("beforeend", autoExploreTemplate.render({ ...context, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate }));
// Bind `autoExplore` and `loadPictoMaps`
buttonsContainer
.querySelector("#auto-explore-button")
?.addEventListener("click", () => {
_console__WEBPACK_IMPORTED_MODULE_2__.Console.debug("Clicked on #auto-explore-button.", context);
void markLocation(context).then(loadPictoMaps);
});
void disableExplore(context);
}
async function disableExplore(context) {
const entry = await getAutoExploreEntry(context.regionId, context.locationId);
if (!entry)
return;
if (petEnergy < Number(entry.location.energyRequired))
document.getElementById("explore-button")?.classList.add("disabled");
}
async function markLocation(context) {
if (context.active) {
const filteredLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations.filter(saved => saved.location.id !== context.locationId);
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations = filteredLocations;
addAutoExploreButton(context.locationId);
return;
}
const newAutoExplore = await getAutoExploreEntry(context.regionId, context.locationId);
if (!newAutoExplore) {
_console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Could not generate an auto explore entry for location #${context.locationId}.`, context);
return;
}
const newLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations;
newLocations.push(newAutoExplore);
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations = newLocations;
addAutoExploreButton(context.locationId);
}
async function getAutoExploreEntry(regionId, locationId) {
const region = await getRegion(regionId);
if (!region) {
_console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Could not get region #${regionId}.`);
return null;
}
const location = region.locations.find(location => location.id === locationId);
if (!location) {
_console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Could not get location #${locationId} in ${region.name}.`, region);
return null;
}
return {
location,
region,
};
}
async function getRegion(id) {
if (id.toString() === currentRegion.id)
return currentRegion;
const json = await (0,_ajax_change_region__WEBPACK_IMPORTED_MODULE_0__.changeRegion)(id);
if (json.result === _api_result_enum__WEBPACK_IMPORTED_MODULE_1__.Result.success)
return json.data.currentRegion;
return null;
}
// Picto map
function loadPictoMaps() {
const autoExploreLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations;
for (const div of document.querySelectorAll(".map-location[data-id]")) {
loadPictoMap(autoExploreLocations, div);
}
}
function loadPictoMap(autoExploreLocations, div) {
const mapLocation = div.getAttribute("data-id");
if (!mapLocation)
return;
div.style.backgroundImage = autoExploreLocations.some(saved => saved.location.id === Number(mapLocation))
? "url(/static/img/new-layout/pet/icons/picto_map_explo.png)"
: "url(/static/img/new-layout/pet/icons/picto_map.png)";
}
/***/ }),
/***/ "./src/session_storage/session_storage.enum.ts":
/*!*****************************************************!*\
!*** ./src/session_storage/session_storage.enum.ts ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "SessionStorageKey": () => (/* binding */ SessionStorageKey)
/* harmony export */ });
var SessionStorageKey;
(function (SessionStorageKey) {
SessionStorageKey["action"] = "action";
SessionStorageKey["explorationsDone"] = "explorationsDone";
SessionStorageKey["minigamesDone"] = "minigamesDone";
SessionStorageKey["selectedLocation"] = "selectedLocation";
SessionStorageKey["takeover"] = "takeover";
SessionStorageKey["wishlist"] = "wishlist";
SessionStorageKey["summerGameDone"] = "summerGameDone";
})(SessionStorageKey || (SessionStorageKey = {}));
/***/ }),
/***/ "./src/session_storage/session_storage.ts":
/*!************************************************!*\
!*** ./src/session_storage/session_storage.ts ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "SessionStorage": () => (/* binding */ SessionStorage)
/* harmony export */ });
/* harmony import */ var _session_storage_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./session_storage.enum */ "./src/session_storage/session_storage.enum.ts");
class SessionStorage {
static sessionStorage = sessionStorage;
constructor() { }
static get action() {
return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.action, null);
}
static set action(action) {
this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.action, action);
}
static get explorationsDone() {
return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.explorationsDone, false);
}
static set explorationsDone(done) {
this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.explorationsDone, done);
}
static get minigamesDone() {
return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.minigamesDone, false);
}
static set minigamesDone(done) {
this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.minigamesDone, done);
}
static get summerGameDone() {
return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.summerGameDone, false);
}
static set summerGameDone(done) {
this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.summerGameDone, done);
}
static get selectedLocation() {
return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.selectedLocation, null);
}
static set selectedLocation(selected) {
this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.selectedLocation, selected);
}
static get takeover() {
return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.takeover, false);
}
static set takeover(enabled) {
this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.takeover, enabled);
}
static get wishlist() {
return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.wishlist, []);
}
static set wishlist(wishlist) {
this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.wishlist, wishlist);
}
static getItem(key, fallback) {
return (JSON.parse(this.sessionStorage.getItem(key) ?? JSON.stringify(fallback)) ?? fallback);
}
static setItem(key, value) {
this.sessionStorage.setItem(key, JSON.stringify(value));
}
}
/***/ }),
/***/ "./src/session_storage/takeover_action.enum.ts":
/*!*****************************************************!*\
!*** ./src/session_storage/takeover_action.enum.ts ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "TakeoverAction": () => (/* binding */ TakeoverAction)
/* harmony export */ });
var TakeoverAction;
(function (TakeoverAction) {
TakeoverAction["daily"] = "daily";
TakeoverAction["minigames"] = "minigames";
TakeoverAction["explorations"] = "explorations";
TakeoverAction["auctions"] = "auctions";
TakeoverAction["buy"] = "buy";
// sell,
TakeoverAction["summerGame"] = "summerGame";
TakeoverAction["wait"] = "wait";
})(TakeoverAction || (TakeoverAction = {}));
/***/ }),
/***/ "./src/takeover/brain.ts":
/*!*******************************!*\
!*** ./src/takeover/brain.ts ***!
\*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadTakeover": () => (/* binding */ loadTakeover),
/* harmony export */ "toggleTakeover": () => (/* binding */ toggleTakeover),
/* harmony export */ "resetTakeover": () => (/* binding */ resetTakeover)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _ui_top_bar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/top_bar */ "./src/ui/top_bar.ts");
/* harmony import */ var _classes_buy_action__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./classes/buy_action */ "./src/takeover/classes/buy_action.ts");
/* harmony import */ var _classes_daily_action__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./classes/daily_action */ "./src/takeover/classes/daily_action.ts");
/* harmony import */ var _classes_exploration_action__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./classes/exploration_action */ "./src/takeover/classes/exploration_action.ts");
/* harmony import */ var _classes_minigame_action__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./classes/minigame_action */ "./src/takeover/classes/minigame_action.ts");
/* harmony import */ var _classes_summer_game_action__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./classes/summer_game_action */ "./src/takeover/classes/summer_game_action.ts");
/* harmony import */ var _classes_wait_action__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./classes/wait_action */ "./src/takeover/classes/wait_action.ts");
/** Automated entry point of the takeover. */
function loadTakeover() {
if (_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover)
void takeover();
}
/** Manual entry point of the takeover. */
function toggleTakeover() {
resetTakeover();
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover = !_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover;
(0,_ui_top_bar__WEBPACK_IMPORTED_MODULE_3__.loadTopBar)();
if (_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover)
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.takeover.enabled);
else
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.takeover.disabled);
void takeover();
}
function resetTakeover() {
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action = null;
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.explorationsDone = false;
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.minigamesDone = false;
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.selectedLocation = null;
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.summerGameDone = false;
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.wishlist = [];
}
async function takeover() {
if (!_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover)
return;
if (_classes_daily_action__WEBPACK_IMPORTED_MODULE_5__["default"].condition())
await _classes_daily_action__WEBPACK_IMPORTED_MODULE_5__["default"].perform();
const action = actions.find(action => action.key === _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action);
if (action?.condition()) {
_console__WEBPACK_IMPORTED_MODULE_0__.Console.info("Action:", action.key);
if (await action.perform())
return;
}
changeAction();
void takeover();
}
const actions = [
_classes_exploration_action__WEBPACK_IMPORTED_MODULE_6__["default"],
_classes_buy_action__WEBPACK_IMPORTED_MODULE_4__["default"],
_classes_minigame_action__WEBPACK_IMPORTED_MODULE_7__["default"],
_classes_summer_game_action__WEBPACK_IMPORTED_MODULE_8__.summerGameAction,
_classes_wait_action__WEBPACK_IMPORTED_MODULE_9__["default"],
];
function changeAction() {
const next = actions.findIndex(action => action.key === _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action) + 1;
return (_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action =
actions[next >= actions.length ? 0 : next].key);
}
/***/ }),
/***/ "./src/takeover/classes/action.ts":
/*!****************************************!*\
!*** ./src/takeover/classes/action.ts ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "Action": () => (/* binding */ Action)
/* harmony export */ });
class Action {
}
/***/ }),
/***/ "./src/takeover/classes/buy_action.ts":
/*!********************************************!*\
!*** ./src/takeover/classes/buy_action.ts ***!
\********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ajax_ajax_search__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ajax/ajax_search */ "./src/ajax/ajax_search.ts");
/* harmony import */ var _ajax_buy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ajax/buy */ "./src/ajax/buy.ts");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../marketplace/marketplace_handlers */ "./src/marketplace/marketplace_handlers.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");
class BuyAction extends _action__WEBPACK_IMPORTED_MODULE_7__.Action {
key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__.TakeoverAction.buy;
get currentMaana() {
return Number(document.querySelector("#currency-maana")?.dataset
.maana);
}
condition() {
return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.market && Boolean(_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist.length);
}
async perform() {
if (location.pathname !== "/marketplace") {
pageLoad("/marketplace");
return true;
}
const iconMessage = __webpack_require__(/*! ../../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
for (const wished of _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist) {
// Clothes might be a special exception. If they are, then check for
// `wished.type === Type.PlayerWearableItem`.
if (wished.error) {
_console__WEBPACK_IMPORTED_MODULE_2__.Console.warn(`Skipped "${wished.name}"`, wished);
continue;
}
_console__WEBPACK_IMPORTED_MODULE_2__.Console.info(`Searching for "${wished.name}"`, wished);
/** Search in each pages until the amount of items is less than 8 */
let amount = 8;
forpage: for (let page = 1; amount === 8; page++) {
let results = [];
try {
results = await this.search(wished, page);
}
catch (e) {
const error = e;
_console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Failed to search for "${wished.name}"`, error);
this.setError(wished.icon, `${error.statusText}`);
break forpage;
}
amount = results.length;
_console__WEBPACK_IMPORTED_MODULE_2__.Console.log(`Found ${amount} results`, results);
const wanted = results.filter(result => result.icon === wished.icon &&
result.buyNowPrice &&
Number(result.buyNowPrice.price) <= wished.price &&
Number(result.buyNowPrice.price) <= this.currentMaana);
for (const result of wanted) {
if (!(await this.buy(result)))
break forpage;
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.purchases = [
result,
..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.purchases.filter(purchase => purchase.itemid !== result.itemid),
];
_console__WEBPACK_IMPORTED_MODULE_2__.Console.info(`Bought "${result.name}" for ${Number(result.buyNowPrice?.price)} maanas.`, result);
$.flavrNotif(iconMessage.render({
...result,
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.takeover.bought(result.name, Number(result.buyNowPrice?.price)),
}));
}
}
}
return false;
}
/**
* Purchase an item from the market.
* @returns whether the item was successfully purchased.
*/
async buy(result) {
const json = await (0,_ajax_buy__WEBPACK_IMPORTED_MODULE_1__.buy)(Number(result.itemid));
if (json.result !== "success")
this.setError(result.icon, json.data);
return json.result === "success";
}
/** Search for a wished item on a specific page using the item's name. */
async search(wished, page = 1) {
// Put the name of the item in the filter
const filterItemName = document.querySelector("#filter-itemName");
if (filterItemName)
filterItemName.value = wished.name;
// Show the results of the search
const marketplaceSearchItems = document.querySelector(".marketplace-search-items");
if (!marketplaceSearchItems)
return [];
marketplaceSearchItems.innerHTML = await (0,_ajax_ajax_search__WEBPACK_IMPORTED_MODULE_0__.ajaxSearch)({
name: wished.name,
page,
});
return Array.from(marketplaceSearchItems.querySelectorAll(".marketplace-search-item"))
.map(_marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_5__.getItemDetails)
.filter((item) => item !== null);
}
/** Set the `WishedItem.error` property without reordering the wishlist. */
setError(icon, error) {
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist;
const index = wishlist.findIndex(item => item.icon === icon);
const entry = wishlist[index];
if (!entry)
return;
entry.error = error;
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist = [
...wishlist.slice(undefined, index),
entry,
...wishlist.slice(index + 1, undefined),
];
}
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new BuyAction());
/***/ }),
/***/ "./src/takeover/classes/daily_action.ts":
/*!**********************************************!*\
!*** ./src/takeover/classes/daily_action.ts ***!
\**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _brain__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../brain */ "./src/takeover/brain.ts");
/* harmony import */ var _click__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../click */ "./src/takeover/click.ts");
class DailyAction {
key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_0__.TakeoverAction.daily;
/** Checks if the daily maana gift if there. */
condition() {
const dailyGiftContainer = document.getElementById("daily-gift-container");
return (!!dailyGiftContainer &&
getComputedStyle(dailyGiftContainer).display !== "none");
}
/**
* Click on the daily maana gift.
* @returns `false`. This action does not perform meaningful actions on the
* page.
*/
async perform() {
const dailyGiftContainer = document.getElementById("daily-gift-container");
if (!dailyGiftContainer ||
getComputedStyle(dailyGiftContainer).display === "none") {
return false;
}
dailyGiftContainer.click();
await (0,_click__WEBPACK_IMPORTED_MODULE_2__.click)(".first-connexion .flavr-button.default");
(0,_brain__WEBPACK_IMPORTED_MODULE_1__.resetTakeover)();
return false;
}
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new DailyAction());
/***/ }),
/***/ "./src/takeover/classes/exploration_action.ts":
/*!****************************************************!*\
!*** ./src/takeover/classes/exploration_action.ts ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ajax_capture_end__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ajax/capture_end */ "./src/ajax/capture_end.ts");
/* harmony import */ var _ajax_change_region__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ajax/change_region */ "./src/ajax/change_region.ts");
/* harmony import */ var _ajax_exploration_results__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../ajax/exploration_results */ "./src/ajax/exploration_results.ts");
/* harmony import */ var _api_result_enum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../api/result.enum */ "./src/api/result.enum.ts");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../duration */ "./src/duration.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _click__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../click */ "./src/takeover/click.ts");
/* harmony import */ var _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../exploration_status.enum */ "./src/takeover/exploration_status.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");
class ExplorationAction extends _action__WEBPACK_IMPORTED_MODULE_11__.Action {
key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_8__.TakeoverAction.explorations;
get globals() {
return { currentRegion, pendingTreasureHuntLocation, timeLeftExploration };
}
condition() {
return (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.explorations &&
!_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.explorationsDone &&
!!_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.length);
}
async perform() {
if (location.pathname !== "/pet") {
pageLoad("/pet");
return true;
}
const status = this.getExplorationStatus();
_console__WEBPACK_IMPORTED_MODULE_4__.Console.log("Exploration status:", _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus[status]);
switch (status) {
case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.idle:
if (!(await this.startExploration()).selected)
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.explorationsDone = true;
return false;
case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.pending:
return (await this.waitExploration()) && this.perform();
case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.result:
await this.endExploration();
return this.perform();
case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.capture:
await this.endCapture();
return this.perform();
default:
return false;
}
}
async clickExplore() {
return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#explore-button");
}
async clickLocation(selected) {
return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)(`.map-location[data-id="${selected.location.id}"]`);
}
clickRegion(selected) {
const div = document.querySelector(`.minimap[data-mapid="${selected.region.id}"]`);
if (!div) {
// Clearing invalid regions is useful to remove finished events.
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations =
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.filter(saved => saved.region.id !== selected.region.id);
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = null;
pageLoad("/pet");
return null;
}
div.click();
return div;
}
async clickSeason() {
return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#crystal-images-container");
}
async endCapture() {
try {
void new Audio("/static/event/2021/music/sounds/mission-complete.mp3").play();
}
catch (e) {
// eslint-disable-next-line no-empty
}
await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#open-capture-interface");
await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#capture-button");
await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#close-result");
}
async endExploration() {
return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#close-result");
}
getCurrentSeason() {
return (Array.from(document.querySelector("body")?.classList ?? [])
.find(c => c.startsWith("season-"))
?.replace("season-", "") ?? null);
}
getExplorationStatus() {
if (document.querySelector("#treasure-hunt-result-overlay.active #open-capture-interface") ||
document.querySelector("#capture-interface-outer.active")) {
return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.capture;
}
else if (document.querySelector("#pending-map-location-data-outer.active") ||
document.querySelector("#map-container.pending")) {
return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.pending;
}
else if (document.querySelector("#treasure-hunt-result-overlay.active"))
return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.result;
return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.idle;
}
getLowestEnergyLocation() {
return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.reduce((lowest, place) => Number(place.location.energyRequired) <
Number(lowest.location.energyRequired)
? place
: lowest);
}
getSelectedLocation() {
let selected = _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation;
if (!selected) {
selected = this.selectLocation();
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = selected;
}
return selected;
}
selectLocation() {
const affordable = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.filter(saved => Number(saved.location.energyRequired) <= petEnergy);
const minimumEnergy = this.getLowestEnergyLocation();
const notDeadEnd = affordable.filter(place => petEnergy - Number(place.location.energyRequired) >=
Number(minimumEnergy.location.energyRequired));
if (notDeadEnd.length)
return notDeadEnd[Math.floor(Math.random() * notDeadEnd.length)] ?? null;
const sameEnergy = affordable.filter(place => Number(place.location.energyRequired) === petEnergy);
if (sameEnergy.length)
return sameEnergy[Math.floor(Math.random() * sameEnergy.length)] ?? null;
return affordable[Math.floor(Math.random() * affordable.length)] ?? null;
}
async startExploration() {
const selected = this.getSelectedLocation();
if (!selected)
return { exploring: false, selected };
_console__WEBPACK_IMPORTED_MODULE_4__.Console.info("Exploring", selected);
// Go to season
if (selected.region.season &&
this.getCurrentSeason() !== selected.region.season) {
await this.clickSeason();
return { exploring: false, selected };
}
// Go to region
this.clickRegion(selected);
// Go to location
await this.clickLocation(selected);
await this.clickExplore();
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = null;
return { exploring: true, selected };
}
/**
* Wait for up to 10 minutes.
* @returns whether the exploration is finished.
*/
async waitExploration(selected) {
document
.querySelector(`.minimap[data-mapid="${selected?.region.id ?? currentRegion.id}"]`)
?.click();
let ms = 3 * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second;
if (selected)
ms += selected.location.timeToExplore * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.minute;
else if (timeLeftExploration && timeLeftExploration > 0)
ms += timeLeftExploration * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second;
else if (!pendingTreasureHuntLocation &&
document.querySelector("#map-container.pending")) {
const json = await (0,_ajax_exploration_results__WEBPACK_IMPORTED_MODULE_2__.explorationResults)();
if (json.result !== _api_result_enum__WEBPACK_IMPORTED_MODULE_3__.Result.success)
return false;
const capture = json.data.results.find(result => result.type === "capture");
if (!capture)
return false;
await (0,_ajax_capture_end__WEBPACK_IMPORTED_MODULE_0__.captureEnd)();
// Reloading is the only possible action if the exploration finished in a
// different region.
_console__WEBPACK_IMPORTED_MODULE_4__.Console.error("Reloading because the exploration is in another region.", this.globals);
await new Promise(resolve => setTimeout(resolve, _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.minute));
pageLoad("/pet");
return true;
}
if (ms > 10 * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.minute)
return false;
_console__WEBPACK_IMPORTED_MODULE_4__.Console.log(`Waiting for the exploration to end in ${Math.ceil(ms / _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second)} seconds...`, this.globals);
await new Promise(resolve => setTimeout(resolve, ms));
await (0,_ajax_change_region__WEBPACK_IMPORTED_MODULE_1__.changeRegion)(Number(selected?.region.id ?? currentRegion.id));
if (this.getExplorationStatus() === _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.pending &&
timeLeftExploration &&
timeLeftExploration < 0) {
_console__WEBPACK_IMPORTED_MODULE_4__.Console.info("Reloading because the timer is desynchronised.", this.globals);
await new Promise(resolve => setTimeout(resolve, _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second));
pageLoad("/pet");
}
return true;
}
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new ExplorationAction());
/***/ }),
/***/ "./src/takeover/classes/minigame_action.ts":
/*!*************************************************!*\
!*** ./src/takeover/classes/minigame_action.ts ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _minigames_emile__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../minigames/emile */ "./src/minigames/emile.ts");
/* harmony import */ var _minigames_flappy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../minigames/flappy */ "./src/minigames/flappy.ts");
/* harmony import */ var _minigames_hatchlings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../minigames/hatchlings */ "./src/minigames/hatchlings.ts");
/* harmony import */ var _minigames_peggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../minigames/peggle */ "./src/minigames/peggle.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
class MinigameAction {
key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__.TakeoverAction.minigames;
condition() {
return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.minigames && !_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_5__.SessionStorage.minigamesDone;
}
/** Determines if the minigames should be played right now.
* @returns whether the minigames are currently being played.
*/
async perform() {
switch (location.pathname) {
case "/minigames": {
const playing = this.openMinigame(_minigames_peggle__WEBPACK_IMPORTED_MODULE_4__.peggle) ||
this.openMinigame(_minigames_flappy__WEBPACK_IMPORTED_MODULE_2__.flappy) ||
this.openMinigame(_minigames_hatchlings__WEBPACK_IMPORTED_MODULE_3__.hatchlings);
if (!playing) {
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_5__.SessionStorage.minigamesDone = true;
document
.querySelector('.minigames-rules [rel="btn-cancel"]')
?.click();
}
return playing;
}
case "/minigames/gembomb":
await (0,_minigames_emile__WEBPACK_IMPORTED_MODULE_1__.playPeggle)();
break;
case "/minigames/bubbltemple":
await (0,_minigames_emile__WEBPACK_IMPORTED_MODULE_1__.playFlappy)();
break;
case "/minigames/cocooninpick":
await (0,_minigames_emile__WEBPACK_IMPORTED_MODULE_1__.playHatchlings)();
break;
default:
pageLoad("/minigames");
return true;
}
pageLoad("/minigames");
return true;
}
/** Click on a minigame's link. @returns whether the minigame was opened. */
openMinigame(minigame) {
const start = document.querySelector(minigame.buttonSelector);
if (!start) {
return false;
}
start.click();
return true;
}
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new MinigameAction());
/***/ }),
/***/ "./src/takeover/classes/summer_game_action.ts":
/*!****************************************************!*\
!*** ./src/takeover/classes/summer_game_action.ts ***!
\****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "summerGameAction": () => (/* binding */ summerGameAction)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _math_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../math_util */ "./src/math_util.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");
class SummerGameAction extends _action__WEBPACK_IMPORTED_MODULE_6__.Action {
key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_5__.TakeoverAction.summerGame;
condition() {
return (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.minigames &&
!_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone &&
!!document.querySelector('a[href="/event/summer"]'));
}
async perform() {
if (location.pathname !== "/event/summer/game") {
pageLoad("/event/summer/game");
return true;
}
await new Promise(resolve => setTimeout(resolve, 3000));
const play = document.querySelector('button.summer2021-button.event-coin-button.active[data-currency="token"]');
_console__WEBPACK_IMPORTED_MODULE_0__.Console.log("Looking for play button:", play);
if (!play) {
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone = true;
return false;
}
const started = await summerGameStart();
if (started.result !== "success") {
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone = true;
return false;
}
play.classList.remove("active");
play.classList.add("inactive");
const template = __webpack_require__(/*! ../../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
$.flavrNotif(template.render({
icon: "/static/event/minigames/snake/img/head.png",
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.playing("Snake"),
}));
await new Promise(resolve => setTimeout(() => resolve(true), _math_util__WEBPACK_IMPORTED_MODULE_3__.MathUtil.randomBetween(60_000 * 0.8, 60_000)));
const saved = await summerGameSave();
if (saved.result !== "success") {
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone = true;
return false;
}
$.flavrNotif(template.render({
icon: "/static/event/minigames/snake/img/head.png",
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.played("Snake"),
}));
pageLoad("/event/summer/game");
return true;
}
}
async function summerGameStart() {
const currency = "token";
return new Promise(resolve => {
void $.post("/event/summer/game/start", { currency: currency }, function (json) {
if (json.result !== "success")
$.flavrNotif(json.data);
resolve(json);
});
});
}
async function summerGameSave() {
const win = true;
return new Promise(resolve => {
void $.post("/event/summer/game/save", { win: win }, function (json) {
if (json.result !== "success")
$.flavrNotif(json.data);
resolve(json);
});
});
}
const summerGameAction = new SummerGameAction();
/***/ }),
/***/ "./src/takeover/classes/wait_action.ts":
/*!*********************************************!*\
!*** ./src/takeover/classes/wait_action.ts ***!
\*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");
class WaitAction extends _action__WEBPACK_IMPORTED_MODULE_2__.Action {
key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_1__.TakeoverAction.wait;
condition() {
return true;
}
async perform() {
_console__WEBPACK_IMPORTED_MODULE_0__.Console.log(`Waiting for 10 minutes...`);
return new Promise(resolve => setTimeout(() => resolve(false), 10 * 60 * 1000));
}
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new WaitAction());
/***/ }),
/***/ "./src/takeover/click.ts":
/*!*******************************!*\
!*** ./src/takeover/click.ts ***!
\*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "click": () => (/* binding */ click),
/* harmony export */ "wait": () => (/* binding */ wait)
/* harmony export */ });
async function click(selector) {
return new Promise(resolve => {
const interval = setInterval(() => {
const element = document.querySelector(selector);
if (!element)
return;
clearInterval(interval);
// Some elements don't have their click handlers ready until they're
// hovered.
const mouseEvent = document.createEvent("MouseEvent");
mouseEvent.initEvent("mouseover");
element.dispatchEvent(mouseEvent);
setTimeout(() => {
element.click();
resolve(element);
}, 800);
}, 800);
});
}
async function wait(selector) {
return new Promise(resolve => {
const interval = setInterval(() => {
const element = document.querySelector(selector);
if (!element)
return;
clearInterval(interval);
resolve(element);
}, 800);
});
}
/***/ }),
/***/ "./src/takeover/exploration_status.enum.ts":
/*!*************************************************!*\
!*** ./src/takeover/exploration_status.enum.ts ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "ExplorationStatus": () => (/* binding */ ExplorationStatus)
/* harmony export */ });
var ExplorationStatus;
(function (ExplorationStatus) {
ExplorationStatus[ExplorationStatus["idle"] = 0] = "idle";
ExplorationStatus[ExplorationStatus["result"] = 1] = "result";
ExplorationStatus[ExplorationStatus["capture"] = 2] = "capture";
ExplorationStatus[ExplorationStatus["pending"] = 3] = "pending";
})(ExplorationStatus || (ExplorationStatus = {}));
/***/ }),
/***/ "./src/ts_util.ts":
/*!************************!*\
!*** ./src/ts_util.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "isEnum": () => (/* binding */ isEnum)
/* harmony export */ });
function isEnum(value, enumeration) {
return Object.values(enumeration).includes(value);
}
/***/ }),
/***/ "./src/ui/auctions.ts":
/*!****************************!*\
!*** ./src/ui/auctions.ts ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadAuctions": () => (/* binding */ loadAuctions)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
function loadAuctions() {
if (location.pathname !== "/marketplace/auctions")
return;
const marketplaceActiveAuctions = document.querySelector("#marketplace-active-auctions");
if (!marketplaceActiveAuctions)
return;
const layout2col = document.querySelector(".marketplace-main-container #layout-2col");
if (layout2col)
layout2col.style.overflowX = "visible";
loadHistory(marketplaceActiveAuctions);
}
function loadHistory(marketplaceActiveAuctions) {
marketplaceActiveAuctions.querySelector("style")?.remove();
marketplaceActiveAuctions.querySelector("#purchase-history")?.remove();
marketplaceActiveAuctions.querySelector("#sale-history")?.remove();
const template = __webpack_require__(/*! ../templates/html/market_history.html */ "./src/templates/html/market_history.html");
const history = {
purchases: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases.map(purchase => ({
...purchase,
date: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.auctions.date_time_format.format(new Date(purchase.date)),
})),
sales: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.sales.map(sale => ({
...sale,
date: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.auctions.date_time_format.format(new Date(sale.date)),
})),
};
marketplaceActiveAuctions.insertAdjacentHTML("beforeend", template.render({ ...history, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
for (const purchase of document.querySelectorAll("#purchase-history .marketplace-auctions-item")) {
const itemid = purchase.dataset.itemid;
purchase.querySelector(".delete-button")?.addEventListener("click", () => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases.filter(purchase => purchase.itemid !== itemid);
loadHistory(marketplaceActiveAuctions);
});
}
for (const sale of document.querySelectorAll("#sale-history .marketplace-sales-item")) {
const icon = sale.querySelector(".abstract-icon img")?.src;
sale.querySelector(".delete-button")?.addEventListener("click", () => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.sales = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.sales.filter(sale => sale.icon !== icon);
loadHistory(marketplaceActiveAuctions);
});
}
}
/***/ }),
/***/ "./src/ui/carousel.ts":
/*!****************************!*\
!*** ./src/ui/carousel.ts ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadCarousel": () => (/* binding */ loadCarousel)
/* harmony export */ });
/* harmony import */ var _carousel_carousel_beemoov_annoyances__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../carousel/carousel_beemoov_annoyances */ "./src/carousel/carousel_beemoov_annoyances.ts");
/* harmony import */ var _carousel_carousel_download_face__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../carousel/carousel_download_face */ "./src/carousel/carousel_download_face.ts");
/* harmony import */ var _carousel_carousel_download_guardian__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../carousel/carousel_download_guardian */ "./src/carousel/carousel_download_guardian.ts");
/* harmony import */ var _carousel_carousel_eldarya_enhancements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../carousel/carousel_eldarya_enhancements */ "./src/carousel/carousel_eldarya_enhancements.ts");
/* harmony import */ var _carousel_carousel_takeover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../carousel/carousel_takeover */ "./src/carousel/carousel_takeover.ts");
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../takeover/brain */ "./src/takeover/brain.ts");
function loadCarousel() {
const carouselInner = document.querySelector("#carousel-inner");
if (!carouselInner || document.querySelector(".carousel-ee")) {
return;
}
// Import carousel template
const template = __webpack_require__(/*! ../templates/html/carousel_news.html */ "./src/templates/html/carousel_news.html");
const contexts = [
// Intro
_carousel_carousel_eldarya_enhancements__WEBPACK_IMPORTED_MODULE_3__.carouselEE,
// Features
...(_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__.LocalStorage.minigames ||
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__.LocalStorage.explorations ||
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__.LocalStorage.market
? [_carousel_carousel_takeover__WEBPACK_IMPORTED_MODULE_4__.carouselTakeover]
: []),
_carousel_carousel_download_guardian__WEBPACK_IMPORTED_MODULE_2__.carouselDownloadGuardian,
_carousel_carousel_download_face__WEBPACK_IMPORTED_MODULE_1__.carouselDownloadFace,
// Ads
_carousel_carousel_beemoov_annoyances__WEBPACK_IMPORTED_MODULE_0__.carouselBeemoovAnnoyances,
];
// Add entries to the carousel
carouselInner.insertAdjacentHTML("beforeend", contexts.map(banner => template.render(banner)).join("\n"));
// Add links
for (const carousel of contexts) {
if (!carousel.href)
continue;
const element = carouselInner.querySelector(`#${carousel.id}`);
if (!element)
continue;
element.addEventListener("click", () => {
if (element.classList.contains("active"))
open(carousel.href, "_blank");
});
}
// Add click events
document
.getElementById(_carousel_carousel_download_face__WEBPACK_IMPORTED_MODULE_1__.carouselDownloadFace.id)
?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_5__.downloadFace);
document
.getElementById(_carousel_carousel_download_guardian__WEBPACK_IMPORTED_MODULE_2__.carouselDownloadGuardian.id)
?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_5__.downloadGuardian);
const takeoverAnchor = document.getElementById(_carousel_carousel_takeover__WEBPACK_IMPORTED_MODULE_4__.carouselTakeover.id);
takeoverAnchor?.addEventListener("click", () => {
(0,_takeover_brain__WEBPACK_IMPORTED_MODULE_9__.toggleTakeover)();
takeoverTitle(takeoverAnchor);
});
if (takeoverAnchor)
takeoverTitle(takeoverAnchor);
}
function takeoverTitle(takeoverAnchor) {
const takeoverH4 = takeoverAnchor.querySelector("h4");
if (takeoverH4) {
takeoverH4.innerText = _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_8__.SessionStorage.takeover
? _i18n_translate__WEBPACK_IMPORTED_MODULE_6__.translate.carousel.takeover.disable_takeover
: _i18n_translate__WEBPACK_IMPORTED_MODULE_6__.translate.carousel.takeover.enable_takeover;
}
}
/***/ }),
/***/ "./src/ui/favourites.ts":
/*!******************************!*\
!*** ./src/ui/favourites.ts ***!
\******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadFavourites": () => (/* binding */ loadFavourites),
/* harmony export */ "loadFakeFavourites": () => (/* binding */ loadFakeFavourites)
/* harmony export */ });
/* harmony import */ var _appearance_fake_favourites__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../appearance/fake_favourites */ "./src/appearance/fake_favourites.ts");
/* harmony import */ var _appearance_favourites_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../appearance/favourites_actions */ "./src/appearance/favourites_actions.ts");
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../indexed_db/indexed_db */ "./src/indexed_db/indexed_db.ts");
function loadFavourites() {
loadFavouritesActions();
void loadFakeFavourites();
}
function loadFavouritesActions() {
const actions = document.getElementById("favorites-actions");
if (!actions || document.querySelector(".favorites-action-ee"))
return;
const actionTemplate = __webpack_require__(/*! ../templates/html/favourites_action.html */ "./src/templates/html/favourites_action.html");
const importAction = {
id: "import-outfit",
text: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.appearance.favourites.buttons["import"],
};
const exportAction = {
id: "export-outfit",
text: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.appearance.favourites.buttons["export"],
};
const downloadAction = {
id: "download-outfit",
text: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.appearance.favourites.buttons.download,
};
actions.insertAdjacentHTML("beforeend", actionTemplate.render(importAction) +
actionTemplate.render(exportAction) +
actionTemplate.render(downloadAction));
document
.getElementById(importAction.id)
?.addEventListener("click", _appearance_favourites_actions__WEBPACK_IMPORTED_MODULE_1__.importOutfit);
document
.getElementById(exportAction.id)
?.addEventListener("click", _appearance_favourites_actions__WEBPACK_IMPORTED_MODULE_1__.exportPreview);
document
.getElementById(downloadAction.id)
?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_2__.downloadAppearance);
}
async function loadFakeFavourites() {
const thumbs = document.querySelector("#all-outfit-thumbs .mCSB_container");
if (!thumbs)
return;
const template = __webpack_require__(/*! ../templates/html/outfit_thumbs.html */ "./src/templates/html/outfit_thumbs.html");
const favourites = await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_4__["default"].getFavouriteOutfits();
document.querySelector("#ee-outfit-thumbs")?.remove();
thumbs.insertAdjacentHTML("beforeend", template.render({
outfits: favourites,
}));
document
.querySelector(".ee-available-slot")
?.addEventListener("click", () => void (0,_appearance_fake_favourites__WEBPACK_IMPORTED_MODULE_0__.saveFavourite)());
for (const div of document.querySelectorAll(".ee-outfit-thumb")) {
div.addEventListener("click", () => {
const favourite = favourites.find(favourite => favourite.id === Number(div.dataset.arrayIndex));
if (!favourite)
return;
(0,_appearance_fake_favourites__WEBPACK_IMPORTED_MODULE_0__.showFavourite)(favourite);
});
}
}
/***/ }),
/***/ "./src/ui/home_content.ts":
/*!********************************!*\
!*** ./src/ui/home_content.ts ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadHomeContent": () => (/* binding */ loadHomeContent)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
function loadHomeContent() {
const homeContentSmalls = document.getElementById("home-content-smalls");
if (!homeContentSmalls ||
homeContentSmalls.querySelector(".home-content-small-ee"))
return;
// Remove bank
document.getElementById("home-bank")?.remove();
// Add forum
const smallTemplate = __webpack_require__(/*! ../templates/html/home_content_small.html */ "./src/templates/html/home_content_small.html");
const smallContent = {
backgroundImage: "/assets/img/minigames/treasurehunt/a48bbc4e4849745ebe6dbcf5313eb3f0.jpg",
h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.home.forum,
href: "/forum",
id: "forum",
};
homeContentSmalls.insertAdjacentHTML("beforeend", smallTemplate.render(smallContent));
}
/***/ }),
/***/ "./src/ui/mall.ts":
/*!************************!*\
!*** ./src/ui/mall.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadMall": () => (/* binding */ loadMall),
/* harmony export */ "addToWishlistFlavr": () => (/* binding */ addToWishlistFlavr)
/* harmony export */ });
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../marketplace/enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
function loadMall() {
if (!location.pathname.startsWith("/mall"))
return;
for (const li of document.querySelectorAll("[data-product]"))
li.addEventListener("click", () => addWishlistButton(li));
}
function addWishlistButton(li) {
document.querySelector("#add-to-wishlist")?.remove();
document
.querySelector("#mall-productDetail-info")
?.insertAdjacentHTML("beforeend", "<button id='add-to-wishlist' class='nl-button' style='margin: 20px auto 0; min-width: 200px;'>Add to market wishlist</button>");
const maxQuantity = li.querySelector(".item-maxQuantity");
const mallEntry = {
product: JSON.parse(li.dataset.product),
icon: (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_0__.trimIcon)(li.querySelector("img.mall-product-icon").src),
rarity: _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity[(li
.querySelector(".rarity-marker-common, .rarity-marker-rare, .rarity-marker-epic, .rarity-marker-legendary, .rarity-marker-event")
?.className.split("rarity-marker-")[1] ?? "")],
maxQuantity: maxQuantity ? Number(maxQuantity.innerText) : undefined,
abstractType: document.querySelector("#mall-menu .tooltip.active .tooltip-content")?.innerText ?? "",
};
document
.querySelector("#add-to-wishlist")
?.addEventListener("click", () => addToWishlistFlavr(mallEntry));
}
function addToWishlistFlavr(mallEntry) {
const template = __webpack_require__(/*! ../templates/html/auto_buy_flavr_mall.html */ "./src/templates/html/auto_buy_flavr_mall.html");
$.flavr({
content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate }),
buttons: {
close: { style: "close" },
save: {
action: () => save(mallEntry),
},
},
dialog: "prompt",
prompt: {
value: "",
},
onBuild: $container => {
$container.addClass("new-layout-popup");
document
.querySelector(".flavr-prompt")
?.addEventListener("keyup", ({ key }) => {
if (key !== "Enter")
return;
save(mallEntry);
});
},
});
}
function save(mallEntry) {
const price = Number(document.querySelector(".flavr-prompt")?.value.trim());
if (!price || price <= 0) {
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.market.add_to_wishlist.invalid_price);
return false;
}
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.wishlist.filter(wishlistEntry => wishlistEntry.icon !== mallEntry.icon);
const wished = {
...mallEntry,
...mallEntry.product,
price,
};
wishlist.push(wished);
wishlist.sort((a, b) => {
const typeCompare = a.type.localeCompare(b.type);
if (typeCompare !== 0)
return typeCompare;
const abstractTypeCompare = (a.abstractType ?? "").localeCompare(b.abstractType ?? "");
if (abstractTypeCompare !== 0)
return abstractTypeCompare;
const rarityCompare = Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity).indexOf(a.rarity ?? "") -
Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity).indexOf(b.rarity ?? "");
if (rarityCompare !== 0)
return rarityCompare;
return a.name.localeCompare(b.name);
});
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.wishlist = wishlist;
const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
$.flavrNotif(template.render({
...wished,
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.market.add_to_wishlist.added_to_wishlist(wished.name, wished.price),
}));
return true;
}
/***/ }),
/***/ "./src/ui/market.ts":
/*!**************************!*\
!*** ./src/ui/market.ts ***!
\**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadMarket": () => (/* binding */ loadMarket)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../marketplace/enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
/* harmony import */ var _marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../marketplace/marketplace_handlers */ "./src/marketplace/marketplace_handlers.ts");
let marketObserver;
function loadMarket() {
marketObserver?.disconnect();
marketObserver = null;
if (location.pathname !== "/marketplace")
return;
// `.marketplace-search-items` is the container whose HTML content is being
// replaced on every action.
const searchItems = document.querySelector(".marketplace-search-items");
if (!searchItems)
return;
marketObserver = new MutationObserver(loadWishlist);
marketObserver.observe(searchItems, {
childList: true,
});
loadWishlist();
}
function loadWishlist() {
for (const li of document.querySelectorAll(".marketplace-abstract")) {
li.addEventListener("click", () => new MutationObserver((_, observer) => {
const marketEntry = (0,_marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_3__.getItemDetails)(li);
if (!marketEntry)
return;
addWishistButton(marketEntry, observer);
}).observe(document.getElementById("marketplace-zoom"), {
childList: true,
}));
}
}
function addWishistButton(marketEntry, observer) {
const buttonsContainer = document.querySelector("#marketplace-itemDetail");
if (!buttonsContainer)
return;
observer?.disconnect();
hijackBuyButtons(marketEntry);
document.getElementById("marketplace-itemDetail-info-autobuy")?.remove();
const buttonTemplate = __webpack_require__(/*! ../templates/html/auto_buy_button.html */ "./src/templates/html/auto_buy_button.html");
buttonsContainer.insertAdjacentHTML("beforeend", buttonTemplate.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
buttonsContainer
.querySelector("#marketplace-itemDetail-info-autobuy")
?.addEventListener("click", () => addToWishlistFlavr(marketEntry));
}
function addToWishlistFlavr(marketEntry) {
const template = __webpack_require__(/*! ../templates/html/auto_buy_flavr.html */ "./src/templates/html/auto_buy_flavr.html");
$.flavr({
content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
buttons: {
close: { style: "close" },
save: {
action: () => save(marketEntry),
},
},
dialog: "prompt",
prompt: {
value: "",
},
onBuild: $container => {
$container.addClass("new-layout-popup");
document
.querySelector(".flavr-prompt")
?.addEventListener("keyup", ({ key }) => {
if (key !== "Enter")
return;
save(marketEntry);
});
},
});
}
function save(marketEntry) {
const price = Number(document.querySelector(".flavr-prompt")?.value.trim());
if (!price || price <= 0) {
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.add_to_wishlist.invalid_price);
return false;
}
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist.filter(wishlistEntry => wishlistEntry.icon !== marketEntry.icon);
const wished = { ...marketEntry, price };
wishlist.push(wished);
wishlist.sort((a, b) => {
const typeCompare = a.type.localeCompare(b.type);
if (typeCompare !== 0)
return typeCompare;
const abstractTypeCompare = (a.abstractType ?? "").localeCompare(b.abstractType ?? "");
if (abstractTypeCompare !== 0)
return abstractTypeCompare;
const rarityCompare = Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_2__.Rarity).indexOf(a.rarity ?? "") -
Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_2__.Rarity).indexOf(b.rarity ?? "");
if (rarityCompare !== 0)
return rarityCompare;
return a.name.localeCompare(b.name);
});
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = wishlist;
const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
$.flavrNotif(template.render({
...wished,
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.add_to_wishlist.added_to_wishlist(wished.name, wished.price),
}));
return true;
}
function hijackBuyButtons(marketEntry) {
document
.querySelector(".marketplace-itemDetail-buy")
?.addEventListener("click", () => {
addPurchase(marketEntry);
});
}
function addPurchase(marketEntry) {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases = [
marketEntry,
..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases.filter(purchase => purchase.itemid !== marketEntry.itemid),
];
}
/***/ }),
/***/ "./src/ui/menu.ts":
/*!************************!*\
!*** ./src/ui/menu.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadMenu": () => (/* binding */ loadMenu)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
function loadMenu() {
const menuInnerRight = document.getElementById("menu-inner-right");
if (!menuInnerRight || menuInnerRight.querySelector(".main-menu-ee"))
return;
// Remove bank
menuInnerRight.querySelector(".main-menu-bank")?.remove();
// Add Forum
const menuTemplate = __webpack_require__(/*! ../templates/html/main_menu.html */ "./src/templates/html/main_menu.html");
const mainMenuForum = {
class: "forum",
href: "/forum",
text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.home.forum,
};
menuInnerRight.insertAdjacentHTML("beforeend", menuTemplate.render(mainMenuForum));
}
/***/ }),
/***/ "./src/ui/pet.ts":
/*!***********************!*\
!*** ./src/ui/pet.ts ***!
\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadPet": () => (/* binding */ loadPet)
/* harmony export */ });
/* harmony import */ var _pet_exploration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pet/exploration */ "./src/pet/exploration.ts");
/* harmony import */ var _pet_exploration_history__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pet/exploration-history */ "./src/pet/exploration-history.ts");
let petObserver;
function loadExplorations() {
petObserver?.disconnect();
petObserver = null;
/** `.page-main-container` changes background depending on the currently selected region. */
const mainContainer = document.querySelector(".page-main-container");
if (!mainContainer)
return;
petObserver = new MutationObserver(loadExplorations);
petObserver.observe(mainContainer, {
attributes: true,
});
(0,_pet_exploration__WEBPACK_IMPORTED_MODULE_0__.loadMarkers)();
}
function loadPet() {
if (location.pathname !== "/pet")
return;
loadExplorations();
(0,_pet_exploration_history__WEBPACK_IMPORTED_MODULE_1__.loadExplorationHistory)();
}
/***/ }),
/***/ "./src/ui/profile.ts":
/*!***************************!*\
!*** ./src/ui/profile.ts ***!
\***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadProfile": () => (/* binding */ loadProfile)
/* harmony export */ });
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _outfit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../outfit */ "./src/outfit.ts");
function loadProfile() {
const profileContactActions = document.getElementById("profile-contact-actions");
if (!profileContactActions ||
document.querySelector(".profile-contact-action-ee")) {
return;
}
const template = __webpack_require__(/*! ../templates/html/profile_contact_action.html */ "./src/templates/html/profile_contact_action.html");
const profileActionExport = {
id: "profile-contact-action-export",
actionDescription: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.profile.export_outfit,
};
const profileActionDownload = {
id: "profile-contact-action-download",
actionDescription: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.profile.download_outfit,
};
// Add entries
profileContactActions.insertAdjacentHTML("beforeend", template.render(profileActionExport));
profileContactActions.insertAdjacentHTML("beforeend", template.render(profileActionDownload));
// Add click events
document
.getElementById(profileActionExport.id)
?.addEventListener("click", exportProfile);
document
.getElementById(profileActionDownload.id)
?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_0__.downloadProfile);
}
function exportProfile() {
const title = document.querySelector("#main-section .section-title");
const keys = Object.keys(Sacha.Avatar.avatars).filter(key => key.startsWith("#playerProfileAvatar"));
for (const key of keys) {
(0,_outfit__WEBPACK_IMPORTED_MODULE_2__.exportOutfit)(key, title?.textContent?.trim());
}
}
/***/ }),
/***/ "./src/ui/purro_shop.ts":
/*!******************************!*\
!*** ./src/ui/purro_shop.ts ***!
\******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadPurroShop": () => (/* binding */ loadPurroShop)
/* harmony export */ });
/* harmony import */ var _api_meta__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../api/meta */ "./src/api/meta.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/** Shows a Purro'Shop button in the main menu when it's available. */
function loadPurroShop() {
document.querySelector(".main-menu-purroshop")?.remove();
// A bug in WebPack prevents using `LocalStorage.meta?.purroshop.status`.
if (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.meta === null ||
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.meta.purroshop.status !== _api_meta__WEBPACK_IMPORTED_MODULE_0__.PurroshopStatus.enabled)
return;
const template = __webpack_require__(/*! ../templates/html/main_menu_purroshop.html */ "./src/templates/html/main_menu_purroshop.html");
document
.getElementById("menu-inner-left")
?.insertAdjacentHTML("afterbegin", template.render({}));
}
/***/ }),
/***/ "./src/ui/settings.ts":
/*!****************************!*\
!*** ./src/ui/settings.ts ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadSettings": () => (/* binding */ loadSettings)
/* harmony export */ });
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
async function loadSettings() {
const accountRight = document.querySelector("#account-right div");
if (!accountRight || accountRight.querySelector(".account-ee-bloc"))
return;
const settingsTemplate = __webpack_require__(/*! ../templates/html/settings.html */ "./src/templates/html/settings.html");
accountRight.insertAdjacentHTML("beforeend", settingsTemplate.render({
...(await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.getSettings()),
translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate,
}));
document.getElementById("ee-debug-enabled")?.addEventListener("click", () => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.debug = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.debug;
reloadSettings();
});
document
.getElementById("ee-minigames-enabled")
?.addEventListener("click", () => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.minigames = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.minigames;
reloadSettings();
});
document
.getElementById("ee-explorations-enabled")
?.addEventListener("click", () => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorations = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorations;
reloadSettings();
});
document
.getElementById("ee-market-enabled")
?.addEventListener("click", () => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.market = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.market;
reloadSettings();
});
document
.getElementById("ee-import")
?.addEventListener("click", importSettings);
document
.getElementById("ee-export")
?.addEventListener("click", () => void exportSettings());
}
function reloadSettings() {
document.querySelector(".account-ee-bloc")?.remove();
void loadSettings();
}
function importSettings() {
const input = document.createElement("input");
input.setAttribute("type", "file");
input.setAttribute("accept", "application/json");
input.click();
input.addEventListener("input", event => {
if (!event.target)
return;
const files = event.target.files;
if (!files)
return;
const file = files[0];
if (!file)
return;
void file.text().then(async (value) => {
if (!value)
return;
const parsed = JSON.parse(value);
await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.setSettings(parsed);
reloadSettings();
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.account.imported);
});
});
}
async function exportSettings() {
const href = "data:text/json;charset=utf-8," +
encodeURIComponent(JSON.stringify(await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.getSettings(), null, 2));
const a = document.createElement("a");
a.setAttribute("href", href);
a.setAttribute("download", `${(0,_download_canvas__WEBPACK_IMPORTED_MODULE_0__.getName)() ?? "eldarya-enhancements"}-settings.json`);
a.click();
}
/***/ }),
/***/ "./src/ui/top_bar.ts":
/*!***************************!*\
!*** ./src/ui/top_bar.ts ***!
\***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadTopBar": () => (/* binding */ loadTopBar)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../takeover/brain */ "./src/takeover/brain.ts");
function loadTopBar() {
const headerRight = document.getElementById("header-right");
if (!headerRight)
return;
const headerTakeover = headerRight.querySelector("#header-takeover");
if (headerTakeover)
headerTakeover.remove();
else
loadLinks();
const template = __webpack_require__(/*! ../templates/html/header_takeover.html */ "./src/templates/html/header_takeover.html");
headerRight.insertAdjacentHTML("afterbegin", template.render({ takeover: _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_1__.SessionStorage.takeover, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
headerRight
.querySelector("#header-takeover")
?.addEventListener("click", _takeover_brain__WEBPACK_IMPORTED_MODULE_2__.toggleTakeover);
}
function loadLinks() {
const headerProfile = document.getElementById("header-profile")?.firstChild;
if (headerProfile?.textContent) {
const a = document.createElement("a");
a.href = "/player/profile";
a.style.color = "var(--text-color)";
a.style.fontFamily = '"Alegreya Sans", sans-serif';
a.style.fontWeight = "unset";
a.textContent = headerProfile.textContent.trim();
const p = document.createElement("p");
p.insertAdjacentElement("beforeend", a);
headerProfile.replaceWith(p);
}
const avatarTitle = document.querySelector("#avatar-menu-container-outer>p");
if (avatarTitle?.textContent)
avatarTitle.innerHTML = `<a href="/player/profile" style="color: #FFFFFF; font-size: 23px; font-weight: 900; text-transform: uppercase;">${avatarTitle.textContent.trim()}</a>`;
document
.querySelector("#avatar-menu-container>canvas")
?.addEventListener("click", () => pageLoad("/player/appearance"));
}
/***/ }),
/***/ "./src/ui/wishlist.ts":
/*!****************************!*\
!*** ./src/ui/wishlist.ts ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadWishlist": () => (/* binding */ loadWishlist)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
function loadWishlist() {
const marketplaceMenu = document.getElementById("marketplace-menu");
if (!marketplaceMenu)
return;
if (!marketplaceMenu.querySelector("#wishlist-button")) {
for (const a of marketplaceMenu.querySelectorAll("a")) {
a.addEventListener("click", () => pageLoad(a.href, undefined, undefined, undefined, true));
}
}
marketplaceMenu.querySelector("#wishlist-button")?.remove();
const wishlistButtonTemplate = __webpack_require__(/*! ../templates/html/wishlist_button.html */ "./src/templates/html/wishlist_button.html");
marketplaceMenu.insertAdjacentHTML("beforeend", wishlistButtonTemplate.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
const wishlistButton = marketplaceMenu.querySelector("#wishlist-button");
wishlistButton?.addEventListener("click", () => insertWishlist(wishlistButton));
}
function insertWishlist(button) {
// Assistance
const assistance = document.querySelector(".marketplace-assistance");
if (assistance)
assistance.innerHTML = _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.wishlist.assistance;
// Menu
document
.querySelector("#marketplace-menu .active")
?.classList.remove("active");
button.classList.add("active");
// Filters
const filters = document.getElementById("marketplace-filters");
if (filters)
filters.innerHTML = "";
// Content
const wishlistTemplate = __webpack_require__(/*! ../templates/html/wishlist_settings.html */ "./src/templates/html/wishlist_settings.html");
const container = document.querySelector(".marketplace-container") ??
document.getElementById("marketplace-active-auctions") ??
document.getElementById("marketplace-itemsForSale");
if (!container)
return;
const wishlistContext = {
wishlist: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist,
};
container.innerHTML = wishlistTemplate.render({
...wishlistContext,
translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate,
});
// Buttons
for (const tr of container.querySelectorAll("tr")) {
const icon = tr.dataset.icon;
if (!icon)
continue;
// Reset status
const reset = tr.querySelector(".reset-item-status");
if (reset)
reset.addEventListener("click", () => {
resetStatus(icon);
insertWishlist(button);
});
// Delete item from wishlist
const deleteButton = tr.querySelector(".delete-wishlist-item");
if (deleteButton)
deleteButton.addEventListener("click", () => {
deleteItem(icon);
insertWishlist(button);
});
// Change price
const editPrice = tr.querySelector(".edit-price");
if (editPrice)
editPrice.addEventListener("click", () => void changePrice(icon).then(() => insertWishlist(button)));
}
}
function resetStatus(icon) {
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
const index = wishlist.findIndex(item => item.icon === icon);
const entry = wishlist[index];
if (!entry)
return;
delete entry.error;
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = [
...wishlist.slice(undefined, index),
entry,
...wishlist.slice(index + 1, undefined),
];
}
function deleteItem(icon) {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist.filter(item => item.icon !== icon);
}
async function changePrice(icon) {
const template = __webpack_require__(/*! ../templates/html/change_price_flavr.html */ "./src/templates/html/change_price_flavr.html");
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
const index = wishlist.findIndex(item => item.icon === icon);
const entry = wishlist[index];
if (!entry)
return;
return new Promise(resolve => {
$.flavr({
content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
dialog: "prompt",
prompt: {
value: entry.price.toString(),
},
buttons: {
close: {
style: "close",
action: () => {
resolve();
return true;
},
},
save: {
action: () => save(icon, resolve),
},
},
onBuild: $container => {
$container.addClass("new-layout-popup");
document
.querySelector(".flavr-prompt")
?.addEventListener("keyup", ({ key }) => {
if (key !== "Enter")
return;
save(icon, resolve);
});
},
});
});
}
function save(icon, resolve) {
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
const index = wishlist.findIndex(item => item.icon === icon);
const entry = wishlist[index];
if (!entry)
return false;
const price = Number(document.querySelector(".flavr-prompt")?.value.trim());
if (!price || price <= 0) {
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.change_price.invalid_price);
return false;
}
entry.price = price;
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = [
...wishlist.slice(undefined, index),
entry,
...wishlist.slice(index + 1, undefined),
];
const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
$.flavrNotif(template.render({
...entry,
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.change_price.changed_price(entry.name, entry.price),
}));
resolve();
return true;
}
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";
/*!*********************!*\
!*** ./src/main.ts ***!
\*********************/
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _appearance_dressing_experience__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./appearance/dressing_experience */ "./src/appearance/dressing_experience.ts");
/* harmony import */ var _migrate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./migrate */ "./src/migrate.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./takeover/brain */ "./src/takeover/brain.ts");
/* harmony import */ var _ui_auctions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ui/auctions */ "./src/ui/auctions.ts");
/* harmony import */ var _ui_carousel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ui/carousel */ "./src/ui/carousel.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _ui_home_content__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ui/home_content */ "./src/ui/home_content.ts");
/* harmony import */ var _ui_mall__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ui/mall */ "./src/ui/mall.ts");
/* harmony import */ var _ui_market__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ui/market */ "./src/ui/market.ts");
/* harmony import */ var _ui_menu__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ui/menu */ "./src/ui/menu.ts");
/* harmony import */ var _ui_pet__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ui/pet */ "./src/ui/pet.ts");
/* harmony import */ var _ui_profile__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ui/profile */ "./src/ui/profile.ts");
/* harmony import */ var _ui_purro_shop__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ui/purro_shop */ "./src/ui/purro_shop.ts");
/* harmony import */ var _ui_settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ui/settings */ "./src/ui/settings.ts");
/* harmony import */ var _ui_top_bar__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ui/top_bar */ "./src/ui/top_bar.ts");
/* harmony import */ var _ui_wishlist__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./ui/wishlist */ "./src/ui/wishlist.ts");
// loadJS("https://unpkg.com/hogan.js/dist/template-3.0.2.min.js", true);
function load() {
loadUI();
(0,_takeover_brain__WEBPACK_IMPORTED_MODULE_2__.loadTakeover)();
}
function loadUI() {
(0,_ui_menu__WEBPACK_IMPORTED_MODULE_9__.loadMenu)();
(0,_ui_carousel__WEBPACK_IMPORTED_MODULE_4__.loadCarousel)();
(0,_ui_home_content__WEBPACK_IMPORTED_MODULE_6__.loadHomeContent)();
(0,_ui_favourites__WEBPACK_IMPORTED_MODULE_5__.loadFavourites)();
(0,_ui_profile__WEBPACK_IMPORTED_MODULE_11__.loadProfile)();
(0,_ui_pet__WEBPACK_IMPORTED_MODULE_10__.loadPet)();
(0,_ui_market__WEBPACK_IMPORTED_MODULE_8__.loadMarket)();
(0,_ui_wishlist__WEBPACK_IMPORTED_MODULE_15__.loadWishlist)();
(0,_ui_top_bar__WEBPACK_IMPORTED_MODULE_14__.loadTopBar)();
(0,_ui_auctions__WEBPACK_IMPORTED_MODULE_3__.loadAuctions)();
(0,_ui_purro_shop__WEBPACK_IMPORTED_MODULE_12__.loadPurroShop)();
(0,_ui_mall__WEBPACK_IMPORTED_MODULE_7__.loadMall)();
// Eldarya is crashing when opening groups.
// TODO: Handle errors and stop the loading process.
void (0,_appearance_dressing_experience__WEBPACK_IMPORTED_MODULE_0__.loadDressingExperience)();
if (document.readyState === "complete")
void loadIndexedDb();
else
window.addEventListener("load", () => loadIndexedDb());
}
function loadIndexedDb() {
void (0,_ui_settings__WEBPACK_IMPORTED_MODULE_13__.loadSettings)();
}
new MutationObserver(load).observe(document.getElementById("container"), {
childList: true,
});
(0,_migrate__WEBPACK_IMPORTED_MODULE_1__.migrate)();
loadUI();
console.log(`${GM.info.script.name} v${GM.info.script.version} loaded.`);
(0,_takeover_brain__WEBPACK_IMPORTED_MODULE_2__.loadTakeover)();
})();
/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkYXJ5YS1lbmhhbmNlbWVudHMudXNlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsbUJBQW1CO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxvQkFBb0I7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsWUFBWTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBLGdDQUFnQyxZQUFZO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFK1M7Ozs7Ozs7Ozs7O0FDbGIvUztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFD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RjtBQUNRO0FBQ0s7QUFDSDtBQUNIO0FBQ0c7QUFFNUMseUVBQXlFO0FBRXpFLFNBQVMsSUFBSTtJQUNYLE1BQU0sRUFBRTtJQUNSLDZEQUFZLEVBQUU7QUFDaEIsQ0FBQztBQUVELFNBQVMsTUFBTTtJQUNiLGtEQUFRLEVBQUU7SUFDViwwREFBWSxFQUFFO0lBQ2QsaUVBQWUsRUFBRTtJQUNqQiw4REFBYyxFQUFFO0lBQ2hCLHlEQUFXLEVBQUU7SUFDYixpREFBTyxFQUFFO0lBQ1Qsc0RBQVUsRUFBRTtJQUNaLDJEQUFZLEVBQUU7SUFDZCx3REFBVSxFQUFFO0lBQ1osMERBQVksRUFBRTtJQUNkLDhEQUFhLEVBQUU7SUFDZixrREFBUSxFQUFFO0lBRVYsMkNBQTJDO0lBQzNDLG9EQUFvRDtJQUNwRCxLQUFLLHVGQUFzQixFQUFFO0lBRTdCLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVO1FBQUUsS0FBSyxhQUFhLEVBQUU7O1FBQ3ZELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDN0QsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixLQUFLLDJEQUFZLEVBQUU7QUFDckIsQ0FBQztBQUVELElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUNoQyxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBUyxFQUM1QztJQUNFLFNBQVMsRUFBRSxJQUFJO0NBQ2hCLENBQ0Y7QUFFRCxpREFBTyxFQUFFO0FBRVQsTUFBTSxFQUFFO0FBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLFVBQVUsQ0FBQztBQUN4RSw2REFBWSxFQUFFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9ub2RlX21vZHVsZXMvLnBucG0vYmxvYi11dGlsQDIuMC4yL25vZGVfbW9kdWxlcy9ibG9iLXV0aWwvZGlzdC9ibG9iLXV0aWwuZXMuanMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9ub2RlX21vZHVsZXMvLnBucG0vaG9nYW4uanNAMy4wLjIvbm9kZV9tb2R1bGVzL2hvZ2FuLmpzL2xpYi9jb21waWxlci5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ob2dhbi5qc0AzLjAuMi9ub2RlX21vZHVsZXMvaG9nYW4uanMvbGliL2hvZ2FuLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hvZ2FuLmpzQDMuMC4yL25vZGVfbW9kdWxlcy9ob2dhbi5qcy9saWIvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19jYXRlZ29yeS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2FwcGVhcmFuY2VfaXRlbXNfZ3JvdXAuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2ZsYXZyX21hbGwuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2V4cGxvcmVfYnV0dG9uLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvY2Fyb3VzZWxfbmV3cy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2NoYW5nZV9wcmljZV9mbGF2ci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2NyZWF0ZWRfb3V0Zml0X2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvZXhwbG9yYXRpb25faGlzdG9yeS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2Zhdm91cml0ZV9vdXRmaXRfZmxhdnIuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9mYXZvdXJpdGVzX2FjdGlvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2hlYWRlcl90YWtlb3Zlci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2hvbWVfY29udGVudF9zbWFsbC5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL21haW5fbWVudV9wdXJyb3Nob3AuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9tYXJrZXRfaGlzdG9yeS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL291dGZpdF90aHVtYnMuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9wcm9maWxlX2NvbnRhY3RfYWN0aW9uLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvc2V0dGluZ3MuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9zZXR0aW5ncy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvYWpheF9zZWFyY2gudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9idXkudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9jYXB0dXJlX2VuZC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2NoYW5nZV9yZWdpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9leHBsb3JhdGlvbl9yZXN1bHRzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwaS9tZXRhLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwaS9yZXN1bHQuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2FwcGVhcmFuY2VfdWkudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9kYXRhX3NldC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2RyZXNzaW5nX2V4cGVyaWVuY2UudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9lbnVtcy9hcHBlYXJhbmNlX2NhdGVnb3J5X2NvZGUuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2Zha2VfZmF2b3VyaXRlcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2Zhdm91cml0ZXNfYWN0aW9ucy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2hpZGRlbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL3dhcmRyb2JlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9mYWNlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2d1YXJkaWFuLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2VsZGFyeWFfZW5oYW5jZW1lbnRzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX3Rha2VvdmVyLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2NvbnNvbGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvZG93bmxvYWQtY2FudmFzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2R1cmF0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2VsZGFyeWEvanF1ZXJ5LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2VsZGFyeWFfdXRpbC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pMThuL2VuLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2kxOG4vZnIudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaTE4bi90cmFuc2xhdGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaW5kZXhlZF9kYi9kYXRhYmFzZXMuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pbmRleGVkX2RiL2ZpZWxkcy5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2luZGV4ZWRfZGIvaW5kZXhlZF9kYi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pbmRleGVkX2RiL3RhYmxlcy5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9ib2R5X2xvY2F0aW9uLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvY2F0ZWdvcnkuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9ndWFyZC5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL3Jhcml0eS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL3R5cGUuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZV9oYW5kbGVycy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXRoX3V0aWwudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWlncmF0ZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvZW1pbGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWluaWdhbWVzL2ZsYXBweS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvaGF0Y2hsaW5ncy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvcGVnZ2xlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL291dGZpdC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9wZXQvZXhwbG9yYXRpb24taGlzdG9yeS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9wZXQvZXhwbG9yYXRpb24td2F0Y2hlci50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9wZXQvZXhwbG9yYXRpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2UudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2JyYWluLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvYnV5X2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL2RhaWx5X2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL2V4cGxvcmF0aW9uX2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL21pbmlnYW1lX2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL3N1bW1lcl9nYW1lX2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL3dhaXRfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsaWNrLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2V4cGxvcmF0aW9uX3N0YXR1cy5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RzX3V0aWwudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvYXVjdGlvbnMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvY2Fyb3VzZWwudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvZmF2b3VyaXRlcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9ob21lX2NvbnRlbnQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvbWFsbC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9tYXJrZXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvbWVudS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9wZXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvcHJvZmlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9wdXJyb19zaG9wLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3NldHRpbmdzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3RvcF9iYXIudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvd2lzaGxpc3QudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IGluY2x1ZGluZyB0aGVzZSBpbiBibG9iLXV0aWwudHMgY2F1c2VzIHR5cGVkb2MgdG8gZ2VuZXJhdGUgZG9jcyBmb3IgdGhlbSxcbi8vIGV2ZW4gd2l0aCAtLWV4Y2x1ZGVQcml2YXRlIMKvXFxfKOODhClfL8KvXG4vKiogQHByaXZhdGUgKi9cbmZ1bmN0aW9uIGxvYWRJbWFnZShzcmMsIGNyb3NzT3JpZ2luKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgIGltZy5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xuICAgICAgICB9XG4gICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXNvbHZlKGltZyk7XG4gICAgICAgIH07XG4gICAgICAgIGltZy5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICBpbWcuc3JjID0gc3JjO1xuICAgIH0pO1xufVxuLyoqIEBwcml2YXRlICovXG5mdW5jdGlvbiBpbWdUb0NhbnZhcyhpbWcpIHtcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzLndpZHRoID0gaW1nLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xuICAgIC8vIGNvcHkgdGhlIGltYWdlIGNvbnRlbnRzIHRvIHRoZSBjYW52YXNcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0LCAwLCAwLCBpbWcud2lkdGgsIGltZy5oZWlnaHQpO1xuICAgIHJldHVybiBjYW52YXM7XG59XG5cbi8qIGdsb2JhbCBQcm9taXNlLCBJbWFnZSwgQmxvYiwgRmlsZVJlYWRlciwgYXRvYiwgYnRvYSxcbiAgIEJsb2JCdWlsZGVyLCBNU0Jsb2JCdWlsZGVyLCBNb3pCbG9iQnVpbGRlciwgV2ViS2l0QmxvYkJ1aWxkZXIsIHdlYmtpdFVSTCAqL1xuLyoqXG4gKiBTaGltIGZvclxuICogW2BuZXcgQmxvYigpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Jsb2IuQmxvYilcbiAqIHRvIHN1cHBvcnRcbiAqIFtvbGRlciBicm93c2VycyB0aGF0IHVzZSB0aGUgZGVwcmVjYXRlZCBgQmxvYkJ1aWxkZXJgIEFQSV0oaHR0cDovL2Nhbml1c2UuY29tL2Jsb2IpLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBteUJsb2IgPSBibG9iVXRpbC5jcmVhdGVCbG9iKFsnaGVsbG8gd29ybGQnXSwge3R5cGU6ICd0ZXh0L3BsYWluJ30pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhcnRzIC0gY29udGVudCBvZiB0aGUgQmxvYlxuICogQHBhcmFtIHByb3BlcnRpZXMgLSB1c3VhbGx5IGB7dHlwZTogbXlDb250ZW50VHlwZX1gLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGFsc28gcGFzcyBhIHN0cmluZyBmb3IgdGhlIGNvbnRlbnQgdHlwZVxuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBjcmVhdGVCbG9iKHBhcnRzLCBwcm9wZXJ0aWVzKSB7XG4gICAgcGFydHMgPSBwYXJ0cyB8fCBbXTtcbiAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7IHR5cGU6IHByb3BlcnRpZXMgfTsgLy8gaW5mZXIgY29udGVudCB0eXBlXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYihwYXJ0cywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLm5hbWUgIT09ICdUeXBlRXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBCdWlsZGVyID0gdHlwZW9mIEJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBCbG9iQnVpbGRlciA6IHR5cGVvZiBNU0Jsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBNU0Jsb2JCdWlsZGVyIDogdHlwZW9mIE1vekJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBNb3pCbG9iQnVpbGRlciA6IFdlYktpdEJsb2JCdWlsZGVyO1xuICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhcnRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKHByb3BlcnRpZXMudHlwZSk7XG4gICAgfVxufVxuLyoqXG4gKiBTaGltIGZvclxuICogW2BVUkwuY3JlYXRlT2JqZWN0VVJMKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJMLmNyZWF0ZU9iamVjdFVSTClcbiAqIHRvIHN1cHBvcnQgYnJvd3NlcnMgdGhhdCBvbmx5IGhhdmUgdGhlIHByZWZpeGVkXG4gKiBgd2Via2l0VVJMYCAoZS5nLiBBbmRyb2lkIDw0LjQpLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBteVVybCA9IGJsb2JVdGlsLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBibG9iXG4gKiBAcmV0dXJucyB1cmxcbiAqL1xuZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKGJsb2IpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBVUkwgIT09ICd1bmRlZmluZWQnID8gVVJMIDogd2Via2l0VVJMKS5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG59XG4vKipcbiAqIFNoaW0gZm9yXG4gKiBbYFVSTC5yZXZva2VPYmplY3RVUkwoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwucmV2b2tlT2JqZWN0VVJMKVxuICogdG8gc3VwcG9ydCBicm93c2VycyB0aGF0IG9ubHkgaGF2ZSB0aGUgcHJlZml4ZWRcbiAqIGB3ZWJraXRVUkxgIChlLmcuIEFuZHJvaWQgPDQuNCkuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwucmV2b2tlT2JqZWN0VVJMKG15VXJsKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB1cmxcbiAqL1xuZnVuY3Rpb24gcmV2b2tlT2JqZWN0VVJMKHVybCkge1xuICAgIHJldHVybiAodHlwZW9mIFVSTCAhPT0gJ3VuZGVmaW5lZCcgPyBVUkwgOiB3ZWJraXRVUkwpLnJldm9rZU9iamVjdFVSTCh1cmwpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYEJsb2JgIHRvIGEgYmluYXJ5IHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5ibG9iVG9CaW5hcnlTdHJpbmcoYmxvYikudGhlbihmdW5jdGlvbiAoYmluYXJ5U3RyaW5nKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGJsb2JUb0JpbmFyeVN0cmluZyhibG9iKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHZhciBoYXNCaW5hcnlTdHJpbmcgPSB0eXBlb2YgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIucmVzdWx0IHx8ICcnO1xuICAgICAgICAgICAgaWYgKGhhc0JpbmFyeVN0cmluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKGFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcocmVzdWx0KSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICBpZiAoaGFzQmluYXJ5U3RyaW5nKSB7XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgdG8gYSBgQmxvYmAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGJsb2IgPSBibG9iVXRpbC5iYXNlNjRTdHJpbmdUb0Jsb2IoYmFzZTY0U3RyaW5nKTtcbiAqIGBgYFxuICogQHBhcmFtIGJhc2U2NCAtIGJhc2U2NC1lbmNvZGVkIHN0cmluZ1xuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEJsb2JcbiAqL1xuZnVuY3Rpb24gYmFzZTY0U3RyaW5nVG9CbG9iKGJhc2U2NCwgdHlwZSkge1xuICAgIHZhciBwYXJ0cyA9IFtiaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyKGF0b2IoYmFzZTY0KSldO1xuICAgIHJldHVybiB0eXBlID8gY3JlYXRlQmxvYihwYXJ0cywgeyB0eXBlOiB0eXBlIH0pIDogY3JlYXRlQmxvYihwYXJ0cyk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBiaW5hcnkgc3RyaW5nIHRvIGEgYEJsb2JgLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBibG9iID0gYmxvYlV0aWwuYmluYXJ5U3RyaW5nVG9CbG9iKGJpbmFyeVN0cmluZyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmluYXJ5IC0gYmluYXJ5IHN0cmluZ1xuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEJsb2JcbiAqL1xuZnVuY3Rpb24gYmluYXJ5U3RyaW5nVG9CbG9iKGJpbmFyeSwgdHlwZSkge1xuICAgIHJldHVybiBiYXNlNjRTdHJpbmdUb0Jsb2IoYnRvYShiaW5hcnkpLCB0eXBlKTtcbn1cbi8qKlxuICogQ29udmVydCBhIGBCbG9iYCB0byBhIGJpbmFyeSBzdHJpbmcuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuYmxvYlRvQmFzZTY0U3RyaW5nKGJsb2IpLnRoZW4oZnVuY3Rpb24gKGJhc2U2NFN0cmluZykge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBibG9iXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYmluYXJ5IHN0cmluZ1xuICovXG5mdW5jdGlvbiBibG9iVG9CYXNlNjRTdHJpbmcoYmxvYikge1xuICAgIHJldHVybiBibG9iVG9CaW5hcnlTdHJpbmcoYmxvYikudGhlbihidG9hKTtcbn1cbi8qKlxuICogQ29udmVydCBhIGRhdGEgVVJMIHN0cmluZ1xuICogKGUuZy4gYCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHLi4uJ2ApXG4gKiB0byBhIGBCbG9iYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYmxvYiA9IGJsb2JVdGlsLmRhdGFVUkxUb0Jsb2IoZGF0YVVSTCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZGF0YVVSTCAtIGRhdGFVUkwtZW5jb2RlZCBzdHJpbmdcbiAqIEByZXR1cm5zIEJsb2JcbiAqL1xuZnVuY3Rpb24gZGF0YVVSTFRvQmxvYihkYXRhVVJMKSB7XG4gICAgdmFyIHR5cGUgPSBkYXRhVVJMLm1hdGNoKC9kYXRhOihbXjtdKykvKVsxXTtcbiAgICB2YXIgYmFzZTY0ID0gZGF0YVVSTC5yZXBsYWNlKC9eW14sXSssLywgJycpO1xuICAgIHZhciBidWZmID0gYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlcihhdG9iKGJhc2U2NCkpO1xuICAgIHJldHVybiBjcmVhdGVCbG9iKFtidWZmXSwgeyB0eXBlOiB0eXBlIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYEJsb2JgIHRvIGEgZGF0YSBVUkwgc3RyaW5nXG4gKiAoZS5nLiBgJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0cuLi4nYCkuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRhdGFVUkwgPSBibG9iVXRpbC5ibG9iVG9EYXRhVVJMKGJsb2IpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBkYXRhIFVSTCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYmxvYlRvRGF0YVVSTChibG9iKSB7XG4gICAgcmV0dXJuIGJsb2JUb0Jhc2U2NFN0cmluZyhibG9iKS50aGVuKGZ1bmN0aW9uIChiYXNlNjRTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICdkYXRhOicgKyBibG9iLnR5cGUgKyAnO2Jhc2U2NCwnICsgYmFzZTY0U3RyaW5nO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGFuIGltYWdlJ3MgYHNyY2AgVVJMIHRvIGEgZGF0YSBVUkwgYnkgbG9hZGluZyB0aGUgaW1hZ2UgYW5kIHBhaW50aW5nXG4gKiBpdCB0byBhIGBjYW52YXNgLlxuICpcbiAqIE5vdGU6IHRoaXMgd2lsbCBjb2VyY2UgdGhlIGltYWdlIHRvIHRoZSBkZXNpcmVkIGNvbnRlbnQgdHlwZSwgYW5kIGl0XG4gKiB3aWxsIG9ubHkgcGFpbnQgdGhlIGZpcnN0IGZyYW1lIG9mIGFuIGFuaW1hdGVkIEdJRi5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuaW1nU3JjVG9EYXRhVVJMKCdodHRwOi8vbXlzaXRlLmNvbS9pbWcucG5nJykudGhlbihmdW5jdGlvbiAoZGF0YVVSTCkge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5pbWdTcmNUb0RhdGFVUkwoJ2h0dHA6Ly9zb21lLW90aGVyLXNpdGUuY29tL2ltZy5qcGcnLCAnaW1hZ2UvanBlZycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub255bW91cycsIDEuMCkudGhlbihmdW5jdGlvbiAoZGF0YVVSTCkge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzcmMgLSBpbWFnZSBzcmNcbiAqIEBwYXJhbSB0eXBlIC0gdGhlIGNvbnRlbnQgdHlwZSAob3B0aW9uYWwsIGRlZmF1bHRzIHRvICdpbWFnZS9wbmcnKVxuICogQHBhcmFtIGNyb3NzT3JpZ2luIC0gZm9yIENPUlMtZW5hYmxlZCBpbWFnZXMsIHNldCB0aGlzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub255bW91cycgdG8gYXZvaWQgXCJ0YWludGVkIGNhbnZhc1wiIGVycm9yc1xuICogQHBhcmFtIHF1YWxpdHkgLSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgaXMgJ2ltYWdlL2pwZWcnIG9yICdpbWFnZS93ZWJwJ1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRhdGEgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBpbWdTcmNUb0RhdGFVUkwoc3JjLCB0eXBlLCBjcm9zc09yaWdpbiwgcXVhbGl0eSkge1xuICAgIHR5cGUgPSB0eXBlIHx8ICdpbWFnZS9wbmcnO1xuICAgIHJldHVybiBsb2FkSW1hZ2Uoc3JjLCBjcm9zc09yaWdpbikudGhlbihpbWdUb0NhbnZhcykudGhlbihmdW5jdGlvbiAoY2FudmFzKSB7XG4gICAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKHR5cGUsIHF1YWxpdHkpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYGNhbnZhc2AgdG8gYSBgQmxvYmAuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmNhbnZhc1RvQmxvYihjYW52YXMpLnRoZW4oZnVuY3Rpb24gKGJsb2IpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBNb3N0IGJyb3dzZXJzIHN1cHBvcnQgY29udmVydGluZyBhIGNhbnZhcyB0byBib3RoIGAnaW1hZ2UvcG5nJ2AgYW5kIGAnaW1hZ2UvanBlZydgLiBZb3UgbWF5XG4gKiBhbHNvIHdhbnQgdG8gdHJ5IGAnaW1hZ2Uvd2VicCdgLCB3aGljaCB3aWxsIHdvcmsgaW4gc29tZSBicm93c2VycyBsaWtlIENocm9tZSAoYW5kIGluIG90aGVyIGJyb3dzZXJzLCB3aWxsIGp1c3QgZmFsbCBiYWNrIHRvIGAnaW1hZ2UvcG5nJ2ApOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5jYW52YXNUb0Jsb2IoY2FudmFzLCAnaW1hZ2Uvd2VicCcpLnRoZW4oZnVuY3Rpb24gKGJsb2IpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY2FudmFzIC0gSFRNTENhbnZhc0VsZW1lbnRcbiAqIEBwYXJhbSB0eXBlIC0gdGhlIGNvbnRlbnQgdHlwZSAob3B0aW9uYWwsIGRlZmF1bHRzIHRvICdpbWFnZS9wbmcnKVxuICogQHBhcmFtIHF1YWxpdHkgLSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgaXMgJ2ltYWdlL2pwZWcnIG9yICdpbWFnZS93ZWJwJ1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGBCbG9iYFxuICovXG5mdW5jdGlvbiBjYW52YXNUb0Jsb2IoY2FudmFzLCB0eXBlLCBxdWFsaXR5KSB7XG4gICAgaWYgKHR5cGVvZiBjYW52YXMudG9CbG9iID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgY2FudmFzLnRvQmxvYihyZXNvbHZlLCB0eXBlLCBxdWFsaXR5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YVVSTFRvQmxvYihjYW52YXMudG9EYXRhVVJMKHR5cGUsIHF1YWxpdHkpKSk7XG59XG4vKipcbiAqIENvbnZlcnQgYW4gaW1hZ2UncyBgc3JjYCBVUkwgdG8gYSBgQmxvYmAgYnkgbG9hZGluZyB0aGUgaW1hZ2UgYW5kIHBhaW50aW5nXG4gKiBpdCB0byBhIGBjYW52YXNgLlxuICpcbiAqIE5vdGU6IHRoaXMgd2lsbCBjb2VyY2UgdGhlIGltYWdlIHRvIHRoZSBkZXNpcmVkIGNvbnRlbnQgdHlwZSwgYW5kIGl0XG4gKiB3aWxsIG9ubHkgcGFpbnQgdGhlIGZpcnN0IGZyYW1lIG9mIGFuIGFuaW1hdGVkIEdJRi5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuaW1nU3JjVG9CbG9iKCdodHRwOi8vbXlzaXRlLmNvbS9pbWcucG5nJykudGhlbihmdW5jdGlvbiAoYmxvYikge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5pbWdTcmNUb0Jsb2IoJ2h0dHA6Ly9zb21lLW90aGVyLXNpdGUuY29tL2ltZy5qcGcnLCAnaW1hZ2UvanBlZycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub255bW91cycsIDEuMCkudGhlbihmdW5jdGlvbiAoYmxvYikge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzcmMgLSBpbWFnZSBzcmNcbiAqIEBwYXJhbSB0eXBlIC0gdGhlIGNvbnRlbnQgdHlwZSAob3B0aW9uYWwsIGRlZmF1bHRzIHRvICdpbWFnZS9wbmcnKVxuICogQHBhcmFtIGNyb3NzT3JpZ2luIC0gZm9yIENPUlMtZW5hYmxlZCBpbWFnZXMsIHNldCB0aGlzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub255bW91cycgdG8gYXZvaWQgXCJ0YWludGVkIGNhbnZhc1wiIGVycm9yc1xuICogQHBhcmFtIHF1YWxpdHkgLSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgaXMgJ2ltYWdlL2pwZWcnIG9yICdpbWFnZS93ZWJwJ1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGBCbG9iYFxuICovXG5mdW5jdGlvbiBpbWdTcmNUb0Jsb2Ioc3JjLCB0eXBlLCBjcm9zc09yaWdpbiwgcXVhbGl0eSkge1xuICAgIHR5cGUgPSB0eXBlIHx8ICdpbWFnZS9wbmcnO1xuICAgIHJldHVybiBsb2FkSW1hZ2Uoc3JjLCBjcm9zc09yaWdpbikudGhlbihpbWdUb0NhbnZhcykudGhlbihmdW5jdGlvbiAoY2FudmFzKSB7XG4gICAgICAgIHJldHVybiBjYW52YXNUb0Jsb2IoY2FudmFzLCB0eXBlLCBxdWFsaXR5KTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydCBhbiBgQXJyYXlCdWZmZXJgIHRvIGEgYEJsb2JgLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBibG9iID0gYmxvYlV0aWwuYXJyYXlCdWZmZXJUb0Jsb2IoYXJyYXlCdWZmLCAnYXVkaW8vbXBlZycpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJ1ZmZlclxuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEJsb2JcbiAqL1xuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0Jsb2IoYnVmZmVyLCB0eXBlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZlcl0sIHR5cGUpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYEJsb2JgIHRvIGFuIGBBcnJheUJ1ZmZlcmAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuYmxvYlRvQXJyYXlCdWZmZXIoYmxvYikudGhlbihmdW5jdGlvbiAoYXJyYXlCdWZmKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBgQXJyYXlCdWZmZXJgXG4gKi9cbmZ1bmN0aW9uIGJsb2JUb0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIucmVzdWx0IHx8IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydCBhbiBgQXJyYXlCdWZmZXJgIHRvIGEgYmluYXJ5IHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbXlTdHJpbmcgPSBibG9iVXRpbC5hcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKGFycmF5QnVmZilcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBidWZmZXIgLSBhcnJheSBidWZmZXJcbiAqIEByZXR1cm5zIGJpbmFyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhidWZmZXIpIHtcbiAgICB2YXIgYmluYXJ5ID0gJyc7XG4gICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICB2YXIgbGVuZ3RoID0gYnl0ZXMuYnl0ZUxlbmd0aDtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHtcbiAgICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYmluYXJ5O1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYmluYXJ5IHN0cmluZyB0byBhbiBgQXJyYXlCdWZmZXJgLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbXlCdWZmZXIgPSBibG9iVXRpbC5iaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyKGJpbmFyeVN0cmluZylcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBiaW5hcnkgLSBiaW5hcnkgc3RyaW5nXG4gKiBAcmV0dXJucyBhcnJheSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlcihiaW5hcnkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYmluYXJ5Lmxlbmd0aDtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7XG4gICAgICAgIGFycltpXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgeyBjcmVhdGVCbG9iLCBjcmVhdGVPYmplY3RVUkwsIHJldm9rZU9iamVjdFVSTCwgYmxvYlRvQmluYXJ5U3RyaW5nLCBiYXNlNjRTdHJpbmdUb0Jsb2IsIGJpbmFyeVN0cmluZ1RvQmxvYiwgYmxvYlRvQmFzZTY0U3RyaW5nLCBkYXRhVVJMVG9CbG9iLCBibG9iVG9EYXRhVVJMLCBpbWdTcmNUb0RhdGFVUkwsIGNhbnZhc1RvQmxvYiwgaW1nU3JjVG9CbG9iLCBhcnJheUJ1ZmZlclRvQmxvYiwgYmxvYlRvQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcsIGJpbmFyeVN0cmluZ1RvQXJyYXlCdWZmZXIgfTtcbiIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMTEgVHdpdHRlciwgSW5jLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuKGZ1bmN0aW9uIChIb2dhbikge1xuICAvLyBTZXR1cCByZWdleCAgYXNzaWdubWVudHNcbiAgLy8gcmVtb3ZlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIE11c3RhY2hlIHNwZWNcbiAgdmFyIHJJc1doaXRlc3BhY2UgPSAvXFxTLyxcbiAgICAgIHJRdW90ID0gL1xcXCIvZyxcbiAgICAgIHJOZXdsaW5lID0gIC9cXG4vZyxcbiAgICAgIHJDciA9IC9cXHIvZyxcbiAgICAgIHJTbGFzaCA9IC9cXFxcL2csXG4gICAgICByTGluZVNlcCA9IC9cXHUyMDI4LyxcbiAgICAgIHJQYXJhZ3JhcGhTZXAgPSAvXFx1MjAyOS87XG5cbiAgSG9nYW4udGFncyA9IHtcbiAgICAnIyc6IDEsICdeJzogMiwgJzwnOiAzLCAnJCc6IDQsXG4gICAgJy8nOiA1LCAnISc6IDYsICc+JzogNywgJz0nOiA4LCAnX3YnOiA5LFxuICAgICd7JzogMTAsICcmJzogMTEsICdfdCc6IDEyXG4gIH07XG5cbiAgSG9nYW4uc2NhbiA9IGZ1bmN0aW9uIHNjYW4odGV4dCwgZGVsaW1pdGVycykge1xuICAgIHZhciBsZW4gPSB0ZXh0Lmxlbmd0aCxcbiAgICAgICAgSU5fVEVYVCA9IDAsXG4gICAgICAgIElOX1RBR19UWVBFID0gMSxcbiAgICAgICAgSU5fVEFHID0gMixcbiAgICAgICAgc3RhdGUgPSBJTl9URVhULFxuICAgICAgICB0YWdUeXBlID0gbnVsbCxcbiAgICAgICAgdGFnID0gbnVsbCxcbiAgICAgICAgYnVmID0gJycsXG4gICAgICAgIHRva2VucyA9IFtdLFxuICAgICAgICBzZWVuVGFnID0gZmFsc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBsaW5lU3RhcnQgPSAwLFxuICAgICAgICBvdGFnID0gJ3t7JyxcbiAgICAgICAgY3RhZyA9ICd9fSc7XG5cbiAgICBmdW5jdGlvbiBhZGRCdWYoKSB7XG4gICAgICBpZiAoYnVmLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9rZW5zLnB1c2goe3RhZzogJ190JywgdGV4dDogbmV3IFN0cmluZyhidWYpfSk7XG4gICAgICAgIGJ1ZiA9ICcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVJc1doaXRlc3BhY2UoKSB7XG4gICAgICB2YXIgaXNBbGxXaGl0ZXNwYWNlID0gdHJ1ZTtcbiAgICAgIGZvciAodmFyIGogPSBsaW5lU3RhcnQ7IGogPCB0b2tlbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaXNBbGxXaGl0ZXNwYWNlID1cbiAgICAgICAgICAoSG9nYW4udGFnc1t0b2tlbnNbal0udGFnXSA8IEhvZ2FuLnRhZ3NbJ192J10pIHx8XG4gICAgICAgICAgKHRva2Vuc1tqXS50YWcgPT0gJ190JyAmJiB0b2tlbnNbal0udGV4dC5tYXRjaChySXNXaGl0ZXNwYWNlKSA9PT0gbnVsbCk7XG4gICAgICAgIGlmICghaXNBbGxXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpc0FsbFdoaXRlc3BhY2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsdGVyTGluZShoYXZlU2VlblRhZywgbm9OZXdMaW5lKSB7XG4gICAgICBhZGRCdWYoKTtcblxuICAgICAgaWYgKGhhdmVTZWVuVGFnICYmIGxpbmVJc1doaXRlc3BhY2UoKSkge1xuICAgICAgICBmb3IgKHZhciBqID0gbGluZVN0YXJ0LCBuZXh0OyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKHRva2Vuc1tqXS50ZXh0KSB7XG4gICAgICAgICAgICBpZiAoKG5leHQgPSB0b2tlbnNbaisxXSkgJiYgbmV4dC50YWcgPT0gJz4nKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBpbmRlbnQgdG8gdG9rZW4gdmFsdWVcbiAgICAgICAgICAgICAgbmV4dC5pbmRlbnQgPSB0b2tlbnNbal0udGV4dC50b1N0cmluZygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghbm9OZXdMaW5lKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHt0YWc6J1xcbid9KTtcbiAgICAgIH1cblxuICAgICAgc2VlblRhZyA9IGZhbHNlO1xuICAgICAgbGluZVN0YXJ0ID0gdG9rZW5zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGFuZ2VEZWxpbWl0ZXJzKHRleHQsIGluZGV4KSB7XG4gICAgICB2YXIgY2xvc2UgPSAnPScgKyBjdGFnLFxuICAgICAgICAgIGNsb3NlSW5kZXggPSB0ZXh0LmluZGV4T2YoY2xvc2UsIGluZGV4KSxcbiAgICAgICAgICBkZWxpbWl0ZXJzID0gdHJpbShcbiAgICAgICAgICAgIHRleHQuc3Vic3RyaW5nKHRleHQuaW5kZXhPZignPScsIGluZGV4KSArIDEsIGNsb3NlSW5kZXgpXG4gICAgICAgICAgKS5zcGxpdCgnICcpO1xuXG4gICAgICBvdGFnID0gZGVsaW1pdGVyc1swXTtcbiAgICAgIGN0YWcgPSBkZWxpbWl0ZXJzW2RlbGltaXRlcnMubGVuZ3RoIC0gMV07XG5cbiAgICAgIHJldHVybiBjbG9zZUluZGV4ICsgY2xvc2UubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBpZiAoZGVsaW1pdGVycykge1xuICAgICAgZGVsaW1pdGVycyA9IGRlbGltaXRlcnMuc3BsaXQoJyAnKTtcbiAgICAgIG90YWcgPSBkZWxpbWl0ZXJzWzBdO1xuICAgICAgY3RhZyA9IGRlbGltaXRlcnNbMV07XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoc3RhdGUgPT0gSU5fVEVYVCkge1xuICAgICAgICBpZiAodGFnQ2hhbmdlKG90YWcsIHRleHQsIGkpKSB7XG4gICAgICAgICAgLS1pO1xuICAgICAgICAgIGFkZEJ1ZigpO1xuICAgICAgICAgIHN0YXRlID0gSU5fVEFHX1RZUEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09ICdcXG4nKSB7XG4gICAgICAgICAgICBmaWx0ZXJMaW5lKHNlZW5UYWcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWYgKz0gdGV4dC5jaGFyQXQoaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09IElOX1RBR19UWVBFKSB7XG4gICAgICAgIGkgKz0gb3RhZy5sZW5ndGggLSAxO1xuICAgICAgICB0YWcgPSBIb2dhbi50YWdzW3RleHQuY2hhckF0KGkgKyAxKV07XG4gICAgICAgIHRhZ1R5cGUgPSB0YWcgPyB0ZXh0LmNoYXJBdChpICsgMSkgOiAnX3YnO1xuICAgICAgICBpZiAodGFnVHlwZSA9PSAnPScpIHtcbiAgICAgICAgICBpID0gY2hhbmdlRGVsaW1pdGVycyh0ZXh0LCBpKTtcbiAgICAgICAgICBzdGF0ZSA9IElOX1RFWFQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRhZykge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZSA9IElOX1RBRztcbiAgICAgICAgfVxuICAgICAgICBzZWVuVGFnID0gaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YWdDaGFuZ2UoY3RhZywgdGV4dCwgaSkpIHtcbiAgICAgICAgICB0b2tlbnMucHVzaCh7dGFnOiB0YWdUeXBlLCBuOiB0cmltKGJ1ZiksIG90YWc6IG90YWcsIGN0YWc6IGN0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgIGk6ICh0YWdUeXBlID09ICcvJykgPyBzZWVuVGFnIC0gb3RhZy5sZW5ndGggOiBpICsgY3RhZy5sZW5ndGh9KTtcbiAgICAgICAgICBidWYgPSAnJztcbiAgICAgICAgICBpICs9IGN0YWcubGVuZ3RoIC0gMTtcbiAgICAgICAgICBzdGF0ZSA9IElOX1RFWFQ7XG4gICAgICAgICAgaWYgKHRhZ1R5cGUgPT0gJ3snKSB7XG4gICAgICAgICAgICBpZiAoY3RhZyA9PSAnfX0nKSB7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNsZWFuVHJpcGxlU3RhY2hlKHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWYgKz0gdGV4dC5jaGFyQXQoaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWx0ZXJMaW5lKHNlZW5UYWcsIHRydWUpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFuVHJpcGxlU3RhY2hlKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLm4uc3Vic3RyKHRva2VuLm4ubGVuZ3RoIC0gMSkgPT09ICd9Jykge1xuICAgICAgdG9rZW4ubiA9IHRva2VuLm4uc3Vic3RyaW5nKDAsIHRva2VuLm4ubGVuZ3RoIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpbShzKSB7XG4gICAgaWYgKHMudHJpbSkge1xuICAgICAgcmV0dXJuIHMudHJpbSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRhZ0NoYW5nZSh0YWcsIHRleHQsIGluZGV4KSB7XG4gICAgaWYgKHRleHQuY2hhckF0KGluZGV4KSAhPSB0YWcuY2hhckF0KDApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0YWcubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAodGV4dC5jaGFyQXQoaW5kZXggKyBpKSAhPSB0YWcuY2hhckF0KGkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRoZSB0YWdzIGFsbG93ZWQgaW5zaWRlIHN1cGVyIHRlbXBsYXRlc1xuICB2YXIgYWxsb3dlZEluU3VwZXIgPSB7J190JzogdHJ1ZSwgJ1xcbic6IHRydWUsICckJzogdHJ1ZSwgJy8nOiB0cnVlfTtcblxuICBmdW5jdGlvbiBidWlsZFRyZWUodG9rZW5zLCBraW5kLCBzdGFjaywgY3VzdG9tVGFncykge1xuICAgIHZhciBpbnN0cnVjdGlvbnMgPSBbXSxcbiAgICAgICAgb3BlbmVyID0gbnVsbCxcbiAgICAgICAgdGFpbCA9IG51bGwsXG4gICAgICAgIHRva2VuID0gbnVsbDtcblxuICAgIHRhaWwgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgdG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblxuICAgICAgaWYgKHRhaWwgJiYgdGFpbC50YWcgPT0gJzwnICYmICEodG9rZW4udGFnIGluIGFsbG93ZWRJblN1cGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgY29udGVudCBpbiA8IHN1cGVyIHRhZy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEhvZ2FuLnRhZ3NbdG9rZW4udGFnXSA8PSBIb2dhbi50YWdzWyckJ10gfHwgaXNPcGVuZXIodG9rZW4sIGN1c3RvbVRhZ3MpKSB7XG4gICAgICAgIHN0YWNrLnB1c2godG9rZW4pO1xuICAgICAgICB0b2tlbi5ub2RlcyA9IGJ1aWxkVHJlZSh0b2tlbnMsIHRva2VuLnRhZywgc3RhY2ssIGN1c3RvbVRhZ3MpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50YWcgPT0gJy8nKSB7XG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nsb3NpbmcgdGFnIHdpdGhvdXQgb3BlbmVyOiAvJyArIHRva2VuLm4pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW5lciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAodG9rZW4ubiAhPSBvcGVuZXIubiAmJiAhaXNDbG9zZXIodG9rZW4ubiwgb3BlbmVyLm4sIGN1c3RvbVRhZ3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXN0aW5nIGVycm9yOiAnICsgb3BlbmVyLm4gKyAnIHZzLiAnICsgdG9rZW4ubik7XG4gICAgICAgIH1cbiAgICAgICAgb3BlbmVyLmVuZCA9IHRva2VuLmk7XG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLnRhZyA9PSAnXFxuJykge1xuICAgICAgICB0b2tlbi5sYXN0ID0gKHRva2Vucy5sZW5ndGggPT0gMCkgfHwgKHRva2Vuc1swXS50YWcgPT0gJ1xcbicpO1xuICAgICAgfVxuXG4gICAgICBpbnN0cnVjdGlvbnMucHVzaCh0b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjbG9zaW5nIHRhZzogJyArIHN0YWNrLnBvcCgpLm4pO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gIH1cblxuICBmdW5jdGlvbiBpc09wZW5lcih0b2tlbiwgdGFncykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFncy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0YWdzW2ldLm8gPT0gdG9rZW4ubikge1xuICAgICAgICB0b2tlbi50YWcgPSAnIyc7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ2xvc2VyKGNsb3NlLCBvcGVuLCB0YWdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRhZ3NbaV0uYyA9PSBjbG9zZSAmJiB0YWdzW2ldLm8gPT0gb3Blbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlTdWJzdGl0dXRpb25zKG9iaikge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGl0ZW1zLnB1c2goJ1wiJyArIGVzYyhrZXkpICsgJ1wiOiBmdW5jdGlvbihjLHAsdCxpKSB7JyArIG9ialtrZXldICsgJ30nKTtcbiAgICB9XG4gICAgcmV0dXJuIFwieyBcIiArIGl0ZW1zLmpvaW4oXCIsXCIpICsgXCIgfVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5naWZ5UGFydGlhbHMoY29kZU9iaikge1xuICAgIHZhciBwYXJ0aWFscyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBjb2RlT2JqLnBhcnRpYWxzKSB7XG4gICAgICBwYXJ0aWFscy5wdXNoKCdcIicgKyBlc2Moa2V5KSArICdcIjp7bmFtZTpcIicgKyBlc2MoY29kZU9iai5wYXJ0aWFsc1trZXldLm5hbWUpICsgJ1wiLCAnICsgc3RyaW5naWZ5UGFydGlhbHMoY29kZU9iai5wYXJ0aWFsc1trZXldKSArIFwifVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwicGFydGlhbHM6IHtcIiArIHBhcnRpYWxzLmpvaW4oXCIsXCIpICsgXCJ9LCBzdWJzOiBcIiArIHN0cmluZ2lmeVN1YnN0aXR1dGlvbnMoY29kZU9iai5zdWJzKTtcbiAgfVxuXG4gIEhvZ2FuLnN0cmluZ2lmeSA9IGZ1bmN0aW9uKGNvZGVPYmosIHRleHQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gXCJ7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IFwiICsgSG9nYW4ud3JhcE1haW4oY29kZU9iai5jb2RlKSArIFwiIH0sXCIgKyBzdHJpbmdpZnlQYXJ0aWFscyhjb2RlT2JqKSArICBcIn1cIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxObyA9IDA7XG4gIEhvZ2FuLmdlbmVyYXRlID0gZnVuY3Rpb24odHJlZSwgdGV4dCwgb3B0aW9ucykge1xuICAgIHNlcmlhbE5vID0gMDtcbiAgICB2YXIgY29udGV4dCA9IHsgY29kZTogJycsIHN1YnM6IHt9LCBwYXJ0aWFsczoge30gfTtcbiAgICBIb2dhbi53YWxrKHRyZWUsIGNvbnRleHQpO1xuXG4gICAgaWYgKG9wdGlvbnMuYXNTdHJpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeShjb250ZXh0LCB0ZXh0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tYWtlVGVtcGxhdGUoY29udGV4dCwgdGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICBIb2dhbi53cmFwTWFpbiA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICByZXR1cm4gJ3ZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7JyArIGNvZGUgKyAncmV0dXJuIHQuZmwoKTsnO1xuICB9XG5cbiAgSG9nYW4udGVtcGxhdGUgPSBIb2dhbi5UZW1wbGF0ZTtcblxuICBIb2dhbi5tYWtlVGVtcGxhdGUgPSBmdW5jdGlvbihjb2RlT2JqLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gdGhpcy5tYWtlUGFydGlhbHMoY29kZU9iaik7XG4gICAgdGVtcGxhdGUuY29kZSA9IG5ldyBGdW5jdGlvbignYycsICdwJywgJ2knLCB0aGlzLndyYXBNYWluKGNvZGVPYmouY29kZSkpO1xuICAgIHJldHVybiBuZXcgdGhpcy50ZW1wbGF0ZSh0ZW1wbGF0ZSwgdGV4dCwgdGhpcywgb3B0aW9ucyk7XG4gIH1cblxuICBIb2dhbi5tYWtlUGFydGlhbHMgPSBmdW5jdGlvbihjb2RlT2JqKSB7XG4gICAgdmFyIGtleSwgdGVtcGxhdGUgPSB7c3Viczoge30sIHBhcnRpYWxzOiBjb2RlT2JqLnBhcnRpYWxzLCBuYW1lOiBjb2RlT2JqLm5hbWV9O1xuICAgIGZvciAoa2V5IGluIHRlbXBsYXRlLnBhcnRpYWxzKSB7XG4gICAgICB0ZW1wbGF0ZS5wYXJ0aWFsc1trZXldID0gdGhpcy5tYWtlUGFydGlhbHModGVtcGxhdGUucGFydGlhbHNba2V5XSk7XG4gICAgfVxuICAgIGZvciAoa2V5IGluIGNvZGVPYmouc3Vicykge1xuICAgICAgdGVtcGxhdGUuc3Vic1trZXldID0gbmV3IEZ1bmN0aW9uKCdjJywgJ3AnLCAndCcsICdpJywgY29kZU9iai5zdWJzW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBlc2Mocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoclNsYXNoLCAnXFxcXFxcXFwnKVxuICAgICAgICAgICAgLnJlcGxhY2UoclF1b3QsICdcXFxcXFxcIicpXG4gICAgICAgICAgICAucmVwbGFjZShyTmV3bGluZSwgJ1xcXFxuJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJDciwgJ1xcXFxyJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJMaW5lU2VwLCAnXFxcXHUyMDI4JylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJQYXJhZ3JhcGhTZXAsICdcXFxcdTIwMjknKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNob29zZU1ldGhvZChzKSB7XG4gICAgcmV0dXJuICh+cy5pbmRleE9mKCcuJykpID8gJ2QnIDogJ2YnO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFydGlhbChub2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIHByZWZpeCA9IFwiPFwiICsgKGNvbnRleHQucHJlZml4IHx8IFwiXCIpO1xuICAgIHZhciBzeW0gPSBwcmVmaXggKyBub2RlLm4gKyBzZXJpYWxObysrO1xuICAgIGNvbnRleHQucGFydGlhbHNbc3ltXSA9IHtuYW1lOiBub2RlLm4sIHBhcnRpYWxzOiB7fX07XG4gICAgY29udGV4dC5jb2RlICs9ICd0LmIodC5ycChcIicgKyAgZXNjKHN5bSkgKyAnXCIsYyxwLFwiJyArIChub2RlLmluZGVudCB8fCAnJykgKyAnXCIpKTsnO1xuICAgIHJldHVybiBzeW07XG4gIH1cblxuICBIb2dhbi5jb2RlZ2VuID0ge1xuICAgICcjJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9ICdpZih0LnModC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwxKSwnICtcbiAgICAgICAgICAgICAgICAgICAgICAnYyxwLDAsJyArIG5vZGUuaSArICcsJyArIG5vZGUuZW5kICsgJyxcIicgKyBub2RlLm90YWcgKyBcIiBcIiArIG5vZGUuY3RhZyArICdcIikpeycgK1xuICAgICAgICAgICAgICAgICAgICAgICd0LnJzKGMscCwnICsgJ2Z1bmN0aW9uKGMscCx0KXsnO1xuICAgICAgSG9nYW4ud2Fsayhub2RlLm5vZGVzLCBjb250ZXh0KTtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnfSk7Yy5wb3AoKTt9JztcbiAgICB9LFxuXG4gICAgJ14nOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ2lmKCF0LnModC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwxKSxjLHAsMSwwLDAsXCJcIikpeyc7XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGNvbnRleHQpO1xuICAgICAgY29udGV4dC5jb2RlICs9ICd9Oyc7XG4gICAgfSxcblxuICAgICc+JzogY3JlYXRlUGFydGlhbCxcbiAgICAnPCc6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBjdHggPSB7cGFydGlhbHM6IHt9LCBjb2RlOiAnJywgc3Viczoge30sIGluUGFydGlhbDogdHJ1ZX07XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGN0eCk7XG4gICAgICB2YXIgdGVtcGxhdGUgPSBjb250ZXh0LnBhcnRpYWxzW2NyZWF0ZVBhcnRpYWwobm9kZSwgY29udGV4dCldO1xuICAgICAgdGVtcGxhdGUuc3VicyA9IGN0eC5zdWJzO1xuICAgICAgdGVtcGxhdGUucGFydGlhbHMgPSBjdHgucGFydGlhbHM7XG4gICAgfSxcblxuICAgICckJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgdmFyIGN0eCA9IHtzdWJzOiB7fSwgY29kZTogJycsIHBhcnRpYWxzOiBjb250ZXh0LnBhcnRpYWxzLCBwcmVmaXg6IG5vZGUubn07XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGN0eCk7XG4gICAgICBjb250ZXh0LnN1YnNbbm9kZS5uXSA9IGN0eC5jb2RlO1xuICAgICAgaWYgKCFjb250ZXh0LmluUGFydGlhbCkge1xuICAgICAgICBjb250ZXh0LmNvZGUgKz0gJ3Quc3ViKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCxpKTsnO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAnXFxuJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9IHdyaXRlKCdcIlxcXFxuXCInICsgKG5vZGUubGFzdCA/ICcnIDogJyArIGknKSk7XG4gICAgfSxcblxuICAgICdfdic6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSAndC5iKHQudih0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDApKSk7JztcbiAgICB9LFxuXG4gICAgJ190JzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9IHdyaXRlKCdcIicgKyBlc2Mobm9kZS50ZXh0KSArICdcIicpO1xuICAgIH0sXG5cbiAgICAneyc6IHRyaXBsZVN0YWNoZSxcblxuICAgICcmJzogdHJpcGxlU3RhY2hlXG4gIH1cblxuICBmdW5jdGlvbiB0cmlwbGVTdGFjaGUobm9kZSwgY29udGV4dCkge1xuICAgIGNvbnRleHQuY29kZSArPSAndC5iKHQudCh0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDApKSk7JztcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlKHMpIHtcbiAgICByZXR1cm4gJ3QuYignICsgcyArICcpOyc7XG4gIH1cblxuICBIb2dhbi53YWxrID0gZnVuY3Rpb24obm9kZWxpc3QsIGNvbnRleHQpIHtcbiAgICB2YXIgZnVuYztcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGVsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZnVuYyA9IEhvZ2FuLmNvZGVnZW5bbm9kZWxpc3RbaV0udGFnXTtcbiAgICAgIGZ1bmMgJiYgZnVuYyhub2RlbGlzdFtpXSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgSG9nYW4ucGFyc2UgPSBmdW5jdGlvbih0b2tlbnMsIHRleHQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gYnVpbGRUcmVlKHRva2VucywgJycsIFtdLCBvcHRpb25zLnNlY3Rpb25UYWdzIHx8IFtdKTtcbiAgfVxuXG4gIEhvZ2FuLmNhY2hlID0ge307XG5cbiAgSG9nYW4uY2FjaGVLZXkgPSBmdW5jdGlvbih0ZXh0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFt0ZXh0LCAhIW9wdGlvbnMuYXNTdHJpbmcsICEhb3B0aW9ucy5kaXNhYmxlTGFtYmRhLCBvcHRpb25zLmRlbGltaXRlcnMsICEhb3B0aW9ucy5tb2RlbEdldF0uam9pbignfHwnKTtcbiAgfVxuXG4gIEhvZ2FuLmNvbXBpbGUgPSBmdW5jdGlvbih0ZXh0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdmFyIGtleSA9IEhvZ2FuLmNhY2hlS2V5KHRleHQsIG9wdGlvbnMpO1xuICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMuY2FjaGVba2V5XTtcblxuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgdmFyIHBhcnRpYWxzID0gdGVtcGxhdGUucGFydGlhbHM7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIHBhcnRpYWxzKSB7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsc1tuYW1lXS5pbnN0YW5jZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9XG5cbiAgICB0ZW1wbGF0ZSA9IHRoaXMuZ2VuZXJhdGUodGhpcy5wYXJzZSh0aGlzLnNjYW4odGV4dCwgb3B0aW9ucy5kZWxpbWl0ZXJzKSwgdGV4dCwgb3B0aW9ucyksIHRleHQsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlW2tleV0gPSB0ZW1wbGF0ZTtcbiAgfVxufSkodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnID8gZXhwb3J0cyA6IEhvZ2FuKTtcbiIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMTEgVHdpdHRlciwgSW5jLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gVGhpcyBmaWxlIGlzIGZvciB1c2Ugd2l0aCBOb2RlLmpzLiBTZWUgZGlzdC8gZm9yIGJyb3dzZXIgZmlsZXMuXG5cbnZhciBIb2dhbiA9IHJlcXVpcmUoJy4vY29tcGlsZXInKTtcbkhvZ2FuLlRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZScpLlRlbXBsYXRlO1xuSG9nYW4udGVtcGxhdGUgPSBIb2dhbi5UZW1wbGF0ZTtcbm1vZHVsZS5leHBvcnRzID0gSG9nYW47XG4iLCIvKlxuICogIENvcHlyaWdodCAyMDExIFR3aXR0ZXIsIEluYy5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBIb2dhbiA9IHt9O1xuXG4oZnVuY3Rpb24gKEhvZ2FuKSB7XG4gIEhvZ2FuLlRlbXBsYXRlID0gZnVuY3Rpb24gKGNvZGVPYmosIHRleHQsIGNvbXBpbGVyLCBvcHRpb25zKSB7XG4gICAgY29kZU9iaiA9IGNvZGVPYmogfHwge307XG4gICAgdGhpcy5yID0gY29kZU9iai5jb2RlIHx8IHRoaXMucjtcbiAgICB0aGlzLmMgPSBjb21waWxlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMudGV4dCA9IHRleHQgfHwgJyc7XG4gICAgdGhpcy5wYXJ0aWFscyA9IGNvZGVPYmoucGFydGlhbHMgfHwge307XG4gICAgdGhpcy5zdWJzID0gY29kZU9iai5zdWJzIHx8IHt9O1xuICAgIHRoaXMuYnVmID0gJyc7XG4gIH1cblxuICBIb2dhbi5UZW1wbGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgLy8gcmVuZGVyOiByZXBsYWNlZCBieSBnZW5lcmF0ZWQgY29kZS5cbiAgICByOiBmdW5jdGlvbiAoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkgeyByZXR1cm4gJyc7IH0sXG5cbiAgICAvLyB2YXJpYWJsZSBlc2NhcGluZ1xuICAgIHY6IGhvZ2FuRXNjYXBlLFxuXG4gICAgLy8gdHJpcGxlIHN0YWNoZVxuICAgIHQ6IGNvZXJjZVRvU3RyaW5nLFxuXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmkoW2NvbnRleHRdLCBwYXJ0aWFscyB8fCB7fSwgaW5kZW50KTtcbiAgICB9LFxuXG4gICAgLy8gcmVuZGVyIGludGVybmFsIC0tIGEgaG9vayBmb3Igb3ZlcnJpZGVzIHRoYXQgY2F0Y2hlcyBwYXJ0aWFscyB0b29cbiAgICByaTogZnVuY3Rpb24gKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnIoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCk7XG4gICAgfSxcblxuICAgIC8vIGVuc3VyZVBhcnRpYWxcbiAgICBlcDogZnVuY3Rpb24oc3ltYm9sLCBwYXJ0aWFscykge1xuICAgICAgdmFyIHBhcnRpYWwgPSB0aGlzLnBhcnRpYWxzW3N5bWJvbF07XG5cbiAgICAgIC8vIGNoZWNrIHRvIHNlZSB0aGF0IGlmIHdlJ3ZlIGluc3RhbnRpYXRlZCB0aGlzIHBhcnRpYWwgYmVmb3JlXG4gICAgICB2YXIgdGVtcGxhdGUgPSBwYXJ0aWFsc1twYXJ0aWFsLm5hbWVdO1xuICAgICAgaWYgKHBhcnRpYWwuaW5zdGFuY2UgJiYgcGFydGlhbC5iYXNlID09IHRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBwYXJ0aWFsLmluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghdGhpcy5jKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tcGlsZXIgYXZhaWxhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSA9IHRoaXMuYy5jb21waWxlKHRlbXBsYXRlLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSB1c2UgdGhpcyB0byBjaGVjayB3aGV0aGVyIHRoZSBwYXJ0aWFscyBkaWN0aW9uYXJ5IGhhcyBjaGFuZ2VkXG4gICAgICB0aGlzLnBhcnRpYWxzW3N5bWJvbF0uYmFzZSA9IHRlbXBsYXRlO1xuXG4gICAgICBpZiAocGFydGlhbC5zdWJzKSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjb25zaWRlciBwYXJlbnQgdGVtcGxhdGUgbm93XG4gICAgICAgIGlmICghcGFydGlhbHMuc3RhY2tUZXh0KSBwYXJ0aWFscy5zdGFja1RleHQgPSB7fTtcbiAgICAgICAgZm9yIChrZXkgaW4gcGFydGlhbC5zdWJzKSB7XG4gICAgICAgICAgaWYgKCFwYXJ0aWFscy5zdGFja1RleHRba2V5XSkge1xuICAgICAgICAgICAgcGFydGlhbHMuc3RhY2tUZXh0W2tleV0gPSAodGhpcy5hY3RpdmVTdWIgIT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFscy5zdGFja1RleHRbdGhpcy5hY3RpdmVTdWJdKSA/IHBhcnRpYWxzLnN0YWNrVGV4dFt0aGlzLmFjdGl2ZVN1Yl0gOiB0aGlzLnRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRlbXBsYXRlID0gY3JlYXRlU3BlY2lhbGl6ZWRQYXJ0aWFsKHRlbXBsYXRlLCBwYXJ0aWFsLnN1YnMsIHBhcnRpYWwucGFydGlhbHMsXG4gICAgICAgICAgdGhpcy5zdGFja1N1YnMsIHRoaXMuc3RhY2tQYXJ0aWFscywgcGFydGlhbHMuc3RhY2tUZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbc3ltYm9sXS5pbnN0YW5jZSA9IHRlbXBsYXRlO1xuXG4gICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfSxcblxuICAgIC8vIHRyaWVzIHRvIGZpbmQgYSBwYXJ0aWFsIGluIHRoZSBjdXJyZW50IHNjb3BlIGFuZCByZW5kZXIgaXRcbiAgICBycDogZnVuY3Rpb24oc3ltYm9sLCBjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHRoaXMuZXAoc3ltYm9sLCBwYXJ0aWFscyk7XG4gICAgICBpZiAoIXBhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydGlhbC5yaShjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KTtcbiAgICB9LFxuXG4gICAgLy8gcmVuZGVyIGEgc2VjdGlvblxuICAgIHJzOiBmdW5jdGlvbihjb250ZXh0LCBwYXJ0aWFscywgc2VjdGlvbikge1xuICAgICAgdmFyIHRhaWwgPSBjb250ZXh0W2NvbnRleHQubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICghaXNBcnJheSh0YWlsKSkge1xuICAgICAgICBzZWN0aW9uKGNvbnRleHQsIHBhcnRpYWxzLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhaWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29udGV4dC5wdXNoKHRhaWxbaV0pO1xuICAgICAgICBzZWN0aW9uKGNvbnRleHQsIHBhcnRpYWxzLCB0aGlzKTtcbiAgICAgICAgY29udGV4dC5wb3AoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWF5YmUgc3RhcnQgYSBzZWN0aW9uXG4gICAgczogZnVuY3Rpb24odmFsLCBjdHgsIHBhcnRpYWxzLCBpbnZlcnRlZCwgc3RhcnQsIGVuZCwgdGFncykge1xuICAgICAgdmFyIHBhc3M7XG5cbiAgICAgIGlmIChpc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsID0gdGhpcy5tcyh2YWwsIGN0eCwgcGFydGlhbHMsIGludmVydGVkLCBzdGFydCwgZW5kLCB0YWdzKTtcbiAgICAgIH1cblxuICAgICAgcGFzcyA9ICEhdmFsO1xuXG4gICAgICBpZiAoIWludmVydGVkICYmIHBhc3MgJiYgY3R4KSB7XG4gICAgICAgIGN0eC5wdXNoKCh0eXBlb2YgdmFsID09ICdvYmplY3QnKSA/IHZhbCA6IGN0eFtjdHgubGVuZ3RoIC0gMV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFzcztcbiAgICB9LFxuXG4gICAgLy8gZmluZCB2YWx1ZXMgd2l0aCBkb3R0ZWQgbmFtZXNcbiAgICBkOiBmdW5jdGlvbihrZXksIGN0eCwgcGFydGlhbHMsIHJldHVybkZvdW5kKSB7XG4gICAgICB2YXIgZm91bmQsXG4gICAgICAgICAgbmFtZXMgPSBrZXkuc3BsaXQoJy4nKSxcbiAgICAgICAgICB2YWwgPSB0aGlzLmYobmFtZXNbMF0sIGN0eCwgcGFydGlhbHMsIHJldHVybkZvdW5kKSxcbiAgICAgICAgICBkb01vZGVsR2V0ID0gdGhpcy5vcHRpb25zLm1vZGVsR2V0LFxuICAgICAgICAgIGN4ID0gbnVsbDtcblxuICAgICAgaWYgKGtleSA9PT0gJy4nICYmIGlzQXJyYXkoY3R4W2N0eC5sZW5ndGggLSAyXSkpIHtcbiAgICAgICAgdmFsID0gY3R4W2N0eC5sZW5ndGggLSAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3VuZCA9IGZpbmRJblNjb3BlKG5hbWVzW2ldLCB2YWwsIGRvTW9kZWxHZXQpO1xuICAgICAgICAgIGlmIChmb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjeCA9IHZhbDtcbiAgICAgICAgICAgIHZhbCA9IGZvdW5kO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWwgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVybkZvdW5kICYmICF2YWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJldHVybkZvdW5kICYmIHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjdHgucHVzaChjeCk7XG4gICAgICAgIHZhbCA9IHRoaXMubXYodmFsLCBjdHgsIHBhcnRpYWxzKTtcbiAgICAgICAgY3R4LnBvcCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICAvLyBmaW5kIHZhbHVlcyB3aXRoIG5vcm1hbCBuYW1lc1xuICAgIGY6IGZ1bmN0aW9uKGtleSwgY3R4LCBwYXJ0aWFscywgcmV0dXJuRm91bmQpIHtcbiAgICAgIHZhciB2YWwgPSBmYWxzZSxcbiAgICAgICAgICB2ID0gbnVsbCxcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlLFxuICAgICAgICAgIGRvTW9kZWxHZXQgPSB0aGlzLm9wdGlvbnMubW9kZWxHZXQ7XG5cbiAgICAgIGZvciAodmFyIGkgPSBjdHgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdiA9IGN0eFtpXTtcbiAgICAgICAgdmFsID0gZmluZEluU2NvcGUoa2V5LCB2LCBkb01vZGVsR2V0KTtcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIChyZXR1cm5Gb3VuZCkgPyBmYWxzZSA6IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmV0dXJuRm91bmQgJiYgdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbCA9IHRoaXMubXYodmFsLCBjdHgsIHBhcnRpYWxzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgLy8gaGlnaGVyIG9yZGVyIHRlbXBsYXRlc1xuICAgIGxzOiBmdW5jdGlvbihmdW5jLCBjeCwgcGFydGlhbHMsIHRleHQsIHRhZ3MpIHtcbiAgICAgIHZhciBvbGRUYWdzID0gdGhpcy5vcHRpb25zLmRlbGltaXRlcnM7XG5cbiAgICAgIHRoaXMub3B0aW9ucy5kZWxpbWl0ZXJzID0gdGFncztcbiAgICAgIHRoaXMuYih0aGlzLmN0KGNvZXJjZVRvU3RyaW5nKGZ1bmMuY2FsbChjeCwgdGV4dCkpLCBjeCwgcGFydGlhbHMpKTtcbiAgICAgIHRoaXMub3B0aW9ucy5kZWxpbWl0ZXJzID0gb2xkVGFncztcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvLyBjb21waWxlIHRleHRcbiAgICBjdDogZnVuY3Rpb24odGV4dCwgY3gsIHBhcnRpYWxzKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMYW1iZGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMYW1iZGEgZmVhdHVyZXMgZGlzYWJsZWQuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jLmNvbXBpbGUodGV4dCwgdGhpcy5vcHRpb25zKS5yZW5kZXIoY3gsIHBhcnRpYWxzKTtcbiAgICB9LFxuXG4gICAgLy8gdGVtcGxhdGUgcmVzdWx0IGJ1ZmZlcmluZ1xuICAgIGI6IGZ1bmN0aW9uKHMpIHsgdGhpcy5idWYgKz0gczsgfSxcblxuICAgIGZsOiBmdW5jdGlvbigpIHsgdmFyIHIgPSB0aGlzLmJ1ZjsgdGhpcy5idWYgPSAnJzsgcmV0dXJuIHI7IH0sXG5cbiAgICAvLyBtZXRob2QgcmVwbGFjZSBzZWN0aW9uXG4gICAgbXM6IGZ1bmN0aW9uKGZ1bmMsIGN0eCwgcGFydGlhbHMsIGludmVydGVkLCBzdGFydCwgZW5kLCB0YWdzKSB7XG4gICAgICB2YXIgdGV4dFNvdXJjZSxcbiAgICAgICAgICBjeCA9IGN0eFtjdHgubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5jYWxsKGN4KTtcblxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoaW52ZXJ0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0U291cmNlID0gKHRoaXMuYWN0aXZlU3ViICYmIHRoaXMuc3Vic1RleHQgJiYgdGhpcy5zdWJzVGV4dFt0aGlzLmFjdGl2ZVN1Yl0pID8gdGhpcy5zdWJzVGV4dFt0aGlzLmFjdGl2ZVN1Yl0gOiB0aGlzLnRleHQ7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubHMocmVzdWx0LCBjeCwgcGFydGlhbHMsIHRleHRTb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLCB0YWdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICAvLyBtZXRob2QgcmVwbGFjZSB2YXJpYWJsZVxuICAgIG12OiBmdW5jdGlvbihmdW5jLCBjdHgsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgY3ggPSBjdHhbY3R4Lmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuY2FsbChjeCk7XG5cbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3QoY29lcmNlVG9TdHJpbmcocmVzdWx0LmNhbGwoY3gpKSwgY3gsIHBhcnRpYWxzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgc3ViOiBmdW5jdGlvbihuYW1lLCBjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICB2YXIgZiA9IHRoaXMuc3Vic1tuYW1lXTtcbiAgICAgIGlmIChmKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlU3ViID0gbmFtZTtcbiAgICAgICAgZihjb250ZXh0LCBwYXJ0aWFscywgdGhpcywgaW5kZW50KTtcbiAgICAgICAgdGhpcy5hY3RpdmVTdWIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfTtcblxuICAvL0ZpbmQgYSBrZXkgaW4gYW4gb2JqZWN0XG4gIGZ1bmN0aW9uIGZpbmRJblNjb3BlKGtleSwgc2NvcGUsIGRvTW9kZWxHZXQpIHtcbiAgICB2YXIgdmFsO1xuXG4gICAgaWYgKHNjb3BlICYmIHR5cGVvZiBzY29wZSA9PSAnb2JqZWN0Jykge1xuXG4gICAgICBpZiAoc2NvcGVba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbCA9IHNjb3BlW2tleV07XG5cbiAgICAgIC8vIHRyeSBsb29rdXAgd2l0aCBnZXQgZm9yIGJhY2tib25lIG9yIHNpbWlsYXIgbW9kZWwgZGF0YVxuICAgICAgfSBlbHNlIGlmIChkb01vZGVsR2V0ICYmIHNjb3BlLmdldCAmJiB0eXBlb2Ygc2NvcGUuZ2V0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsID0gc2NvcGUuZ2V0KGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNwZWNpYWxpemVkUGFydGlhbChpbnN0YW5jZSwgc3VicywgcGFydGlhbHMsIHN0YWNrU3Vicywgc3RhY2tQYXJ0aWFscywgc3RhY2tUZXh0KSB7XG4gICAgZnVuY3Rpb24gUGFydGlhbFRlbXBsYXRlKCkge307XG4gICAgUGFydGlhbFRlbXBsYXRlLnByb3RvdHlwZSA9IGluc3RhbmNlO1xuICAgIGZ1bmN0aW9uIFN1YnN0aXR1dGlvbnMoKSB7fTtcbiAgICBTdWJzdGl0dXRpb25zLnByb3RvdHlwZSA9IGluc3RhbmNlLnN1YnM7XG4gICAgdmFyIGtleTtcbiAgICB2YXIgcGFydGlhbCA9IG5ldyBQYXJ0aWFsVGVtcGxhdGUoKTtcbiAgICBwYXJ0aWFsLnN1YnMgPSBuZXcgU3Vic3RpdHV0aW9ucygpO1xuICAgIHBhcnRpYWwuc3Vic1RleHQgPSB7fTsgIC8vaGVoZS4gc3Vic3RleHQuXG4gICAgcGFydGlhbC5idWYgPSAnJztcblxuICAgIHN0YWNrU3VicyA9IHN0YWNrU3VicyB8fCB7fTtcbiAgICBwYXJ0aWFsLnN0YWNrU3VicyA9IHN0YWNrU3VicztcbiAgICBwYXJ0aWFsLnN1YnNUZXh0ID0gc3RhY2tUZXh0O1xuICAgIGZvciAoa2V5IGluIHN1YnMpIHtcbiAgICAgIGlmICghc3RhY2tTdWJzW2tleV0pIHN0YWNrU3Vic1trZXldID0gc3Vic1trZXldO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBzdGFja1N1YnMpIHtcbiAgICAgIHBhcnRpYWwuc3Vic1trZXldID0gc3RhY2tTdWJzW2tleV07XG4gICAgfVxuXG4gICAgc3RhY2tQYXJ0aWFscyA9IHN0YWNrUGFydGlhbHMgfHwge307XG4gICAgcGFydGlhbC5zdGFja1BhcnRpYWxzID0gc3RhY2tQYXJ0aWFscztcbiAgICBmb3IgKGtleSBpbiBwYXJ0aWFscykge1xuICAgICAgaWYgKCFzdGFja1BhcnRpYWxzW2tleV0pIHN0YWNrUGFydGlhbHNba2V5XSA9IHBhcnRpYWxzW2tleV07XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHN0YWNrUGFydGlhbHMpIHtcbiAgICAgIHBhcnRpYWwucGFydGlhbHNba2V5XSA9IHN0YWNrUGFydGlhbHNba2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydGlhbDtcbiAgfVxuXG4gIHZhciByQW1wID0gLyYvZyxcbiAgICAgIHJMdCA9IC88L2csXG4gICAgICByR3QgPSAvPi9nLFxuICAgICAgckFwb3MgPSAvXFwnL2csXG4gICAgICByUXVvdCA9IC9cXFwiL2csXG4gICAgICBoQ2hhcnMgPSAvWyY8PlxcXCJcXCddLztcblxuICBmdW5jdGlvbiBjb2VyY2VUb1N0cmluZyh2YWwpIHtcbiAgICByZXR1cm4gU3RyaW5nKCh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpID8gJycgOiB2YWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gaG9nYW5Fc2NhcGUoc3RyKSB7XG4gICAgc3RyID0gY29lcmNlVG9TdHJpbmcoc3RyKTtcbiAgICByZXR1cm4gaENoYXJzLnRlc3Qoc3RyKSA/XG4gICAgICBzdHJcbiAgICAgICAgLnJlcGxhY2UockFtcCwgJyZhbXA7JylcbiAgICAgICAgLnJlcGxhY2Uockx0LCAnJmx0OycpXG4gICAgICAgIC5yZXBsYWNlKHJHdCwgJyZndDsnKVxuICAgICAgICAucmVwbGFjZShyQXBvcywgJyYjMzk7JylcbiAgICAgICAgLnJlcGxhY2UoclF1b3QsICcmcXVvdDsnKSA6XG4gICAgICBzdHI7XG4gIH1cblxuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG5cbn0pKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJyA/IGV4cG9ydHMgOiBIb2dhbik7XG4iLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxsaVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcImFwcGVhcmFuY2UtaXRlbS1cIik7dC5iKHQudih0LmYoXCJpdGVtaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtIGdyb3VwLVwiKTt0LmIodC52KHQuZihcImdyb3VwXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1pdGVtaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcIml0ZW1pZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtbmFtZT1cXFwiXCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtcmFyaXR5PVxcXCJcIik7dC5iKHQudih0LmYoXCJyYXJpdHlcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLXJhcml0eW5hbWU9XFxcIlwiKTt0LmIodC52KHQuZihcInJhcml0eW5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdiBjbGFzcz1cXFwicmFyaXR5LW1hcmtlci1cIik7dC5iKHQudih0LmYoXCJyYXJpdHlcIixjLHAsMCkpKTt0LmIoXCJcXFwiPjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGltZyBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWljb25cXFwiIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2xpPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxsaVxcbiAgaWQ9XFxcImFwcGVhcmFuY2UtaXRlbS17e2l0ZW1pZH19XFxcIlxcbiAgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbSBncm91cC17e2dyb3VwfX1cXFwiXFxuICBkYXRhLWl0ZW1pZD1cXFwie3tpdGVtaWR9fVxcXCJcXG4gIGRhdGEtbmFtZT1cXFwie3tuYW1lfX1cXFwiXFxuICBkYXRhLXJhcml0eT1cXFwie3tyYXJpdHl9fVxcXCJcXG4gIGRhdGEtcmFyaXR5bmFtZT1cXFwie3tyYXJpdHluYW1lfX1cXFwiXFxuPlxcbiAgPGRpdiBjbGFzcz1cXFwicmFyaXR5LW1hcmtlci17e3Jhcml0eX19XFxcIj48L2Rpdj5cXG4gIDxpbWcgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pY29uXFxcIiBzcmM9XFxcInt7aWNvbn19XFxcIiAvPlxcbjwvbGk+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiZWUtY2F0ZWdvcnlcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeSBhY3RpdmVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLWNhdGVnb3J5PVxcXCJcIik7dC5iKHQudih0LmYoXCJjYXRlZ29yeVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtY2F0ZWdvcnlpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiY2F0ZWdvcnlpZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8c3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNlZS1pdGVtcyB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgc2Nyb2xsYmFyLWNvbG9yOiBkYXJrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9zdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx1bFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1saXN0XFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBpZD1cXFwiZWUtaXRlbXNcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHN0eWxlPVxcXCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNTY1cHgpXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBcIik7dC5iKHQudCh0LmYoXCJpdGVtc1wiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3VsPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwhLS0gSW5mbyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxkaXYgaWQ9XFxcImVlLWluZm9cXFwiIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWluZm9cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWluZm8tdGlwc1xcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8aDMgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLW5hbWVcXFwiPjwvaDM+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1ndWFyZFxcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLXJhcml0eVxcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLWJ1dHRvbnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtZm9yd2FyZCBubC1idXR0b25cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFwcGVhcmFuY2UuYnV0dG9ucy5mb3J3YXJkXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWJhY2t3YXJkIG5sLWJ1dHRvblxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5idXR0b25zLmJhY2t3YXJkXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8ZGl2XFxuICBpZD1cXFwiZWUtY2F0ZWdvcnlcXFwiXFxuICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeSBhY3RpdmVcXFwiXFxuICBkYXRhLWNhdGVnb3J5PVxcXCJ7e2NhdGVnb3J5fX1cXFwiXFxuICBkYXRhLWNhdGVnb3J5aWQ9XFxcInt7Y2F0ZWdvcnlpZH19XFxcIlxcbj5cXG4gIDxzdHlsZT5cXG4gICAgI2VlLWl0ZW1zIHtcXG4gICAgICBzY3JvbGxiYXItY29sb3I6IGRhcms7XFxuICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xcbiAgICB9XFxuICA8L3N0eWxlPlxcbiAgPHVsXFxuICAgIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWxpc3RcXFwiXFxuICAgIGlkPVxcXCJlZS1pdGVtc1xcXCJcXG4gICAgc3R5bGU9XFxcIm1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1NjVweClcXFwiXFxuICA+XFxuICAgIHt7e2l0ZW1zfX19XFxuICA8L3VsPlxcblxcbiAgPCEtLSBJbmZvIC0tPlxcbiAgPGRpdiBpZD1cXFwiZWUtaW5mb1xcXCIgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtaW5mb1xcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaW5mby10aXBzXFxcIj48L2Rpdj5cXG5cXG4gICAgPGgzIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1uYW1lXFxcIj48L2gzPlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1ndWFyZFxcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLXJhcml0eVxcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLWJ1dHRvbnNcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtZm9yd2FyZCBubC1idXR0b25cXFwiPlxcbiAgICAgICAge3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5idXR0b25zLmZvcndhcmR9fVxcbiAgICAgIDwvZGl2PlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtYmFja3dhcmQgbmwtYnV0dG9uXFxcIj5cXG4gICAgICAgIHt7dHJhbnNsYXRlLmFwcGVhcmFuY2UuYnV0dG9ucy5iYWNrd2FyZH19XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiYXBwZWFyYW5jZS1pdGVtcy1ncm91cC1cIik7dC5iKHQudih0LmYoXCJncm91cFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5XFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1jYXRlZ29yeWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJjYXRlZ29yeWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1jYXRlZ29yeT1cXFwiXCIpO3QuYih0LnYodC5mKFwiY2F0ZWdvcnlcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHVsIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWxpc3RcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBcIik7dC5iKHQudCh0LmYoXCJpdGVtc1wiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3VsPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXZcXG4gIGlkPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLXt7Z3JvdXB9fVxcXCJcXG4gIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5XFxcIlxcbiAgZGF0YS1jYXRlZ29yeWlkPVxcXCJ7e2NhdGVnb3J5aWR9fVxcXCJcXG4gIGRhdGEtY2F0ZWdvcnk9XFxcInt7Y2F0ZWdvcnl9fVxcXCJcXG4+XFxuICA8dWwgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtbGlzdFxcXCI+XFxuICAgIHt7e2l0ZW1zfX19XFxuICA8L3VsPlxcbjwvZGl2PlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcIm1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtaW5mby1hdXRvYnV5XFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luOiAyMHB4IGF1dG9cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdiBjbGFzcz1cXFwibmwtYnV0dG9uXFxcIj5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50aXRsZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXZcXG4gIGlkPVxcXCJtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVxcXCJcXG4gIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogMjBweCBhdXRvXFxcIlxcbj5cXG4gIDxkaXYgY2xhc3M9XFxcIm5sLWJ1dHRvblxcXCI+e3t0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50aXRsZX19PC9kaXY+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aDE+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QudGl0bGVcIixjLHAsMCkpKTt0LmIoXCI8L2gxPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LnRleHRcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGgxPnt7dHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QudGl0bGV9fTwvaDE+XFxuPHA+e3t0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50ZXh0fX08L3A+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aDE+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hbGwuYWRkX3RvX3dpc2hsaXN0LnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiPC9oMT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFsbC5hZGRfdG9fd2lzaGxpc3QudGV4dFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cCBzdHlsZT1cXFwiZm9udC1zaXplOiAxNHB4XFxcIj48ZW0+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hbGwuYWRkX3RvX3dpc2hsaXN0Lm5vdGVcIixjLHAsMCkpKTt0LmIoXCI8L2VtPjwvcD5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8aDE+e3t0cmFuc2xhdGUubWFsbC5hZGRfdG9fd2lzaGxpc3QudGl0bGV9fTwvaDE+XFxuPHA+e3t0cmFuc2xhdGUubWFsbC5hZGRfdG9fd2lzaGxpc3QudGV4dH19PC9wPlxcbjxwIHN0eWxlPVxcXCJmb250LXNpemU6IDE0cHhcXFwiPjxlbT57e3RyYW5zbGF0ZS5tYWxsLmFkZF90b193aXNobGlzdC5ub3RlfX08L2VtPjwvcD5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxidXR0b25cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJhdXRvLWV4cGxvcmUtYnV0dG9uXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBcIik7aWYodC5zKHQuZihcImFjdGl2ZVwiLGMscCwxKSxjLHAsMCw2NSw3MSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImxvY2F0aW9uSWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLW1hcGlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJyZWdpb25JZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUucGV0LmF1dG9fZXhwbG9yZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9idXR0b24+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGJ1dHRvblxcbiAgaWQ9XFxcImF1dG8tZXhwbG9yZS1idXR0b25cXFwiXFxuICBjbGFzcz1cXFwibmwtYnV0dG9uIHt7I2FjdGl2ZX19YWN0aXZle3svYWN0aXZlfX1cXFwiXFxuICBkYXRhLWlkPVxcXCJ7e2xvY2F0aW9uSWR9fVxcXCJcXG4gIGRhdGEtbWFwaWQ9XFxcInt7cmVnaW9uSWR9fVxcXCJcXG4+XFxuICB7e3RyYW5zbGF0ZS5wZXQuYXV0b19leHBsb3JlfX1cXG48L2J1dHRvbj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxhXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBjbGFzcz1cXFwiY2Fyb3VzZWwtbmV3cyBjYXJvdXNlbC1lZVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGhyZWY9XFxcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIpO3QuYih0LnYodC5mKFwiYmFja2dyb3VuZEltYWdlXCIsYyxwLDApKSk7dC5iKFwiKVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8ZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8aDQ+XCIpO3QuYih0LnYodC5mKFwiaDRcIixjLHAsMCkpKTt0LmIoXCI8L2g0PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8aDU+XCIpO3QuYih0LnYodC5mKFwiaDVcIixjLHAsMCkpKTt0LmIoXCI8L2g1PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8cD5cIik7dC5iKHQudih0LmYoXCJwXCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9hPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxhXFxuICBpZD1cXFwie3tpZH19XFxcIlxcbiAgY2xhc3M9XFxcImNhcm91c2VsLW5ld3MgY2Fyb3VzZWwtZWVcXFwiXFxuICBocmVmPVxcXCJcXFwiXFxuICBzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKHt7YmFja2dyb3VuZEltYWdlfX0pXFxcIlxcbj5cXG4gIDxkaXY+XFxuICAgIDxoND57e2g0fX08L2g0PlxcbiAgICA8aDU+e3toNX19PC9oNT5cXG4gICAgPHA+e3twfX08L3A+XFxuICA8L2Rpdj5cXG48L2E+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aDE+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5jaGFuZ2VfcHJpY2UudGl0bGVcIixjLHAsMCkpKTt0LmIoXCI8L2gxPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLnRleHRcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGgxPnt7dHJhbnNsYXRlLm1hcmtldC5jaGFuZ2VfcHJpY2UudGl0bGV9fTwvaDE+XFxuPHA+e3t0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS50ZXh0fX08L3A+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aDE+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5zYXZlX291dGZpdC50aXRsZVwiLGMscCwwKSkpO3QuYihcIjwvaDE+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQuc2F2ZWRfbG9jYWxseVwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPGJyIC8+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQuZ290b19hY2NvdW50XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8aW5wdXRcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJjaG9vc2UtbmFtZVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIG1heGxlbmd0aD1cXFwiMzBcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBtaW5sZW5ndGg9XFxcIjFcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBwbGFjZWhvbGRlcj1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5zYXZlX291dGZpdC5wbGFjZWhvbGRlclwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIvPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxoMT57e3RyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQudGl0bGV9fTwvaDE+XFxuXFxuPHA+e3t7dHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5zYXZlX291dGZpdC5zYXZlZF9sb2NhbGx5fX19PC9wPlxcblxcbjxiciAvPlxcblxcbjxwPnt7e3RyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQuZ290b19hY2NvdW50fX19PC9wPlxcblxcbjxpbnB1dFxcbiAgaWQ9XFxcImNob29zZS1uYW1lXFxcIlxcbiAgbWF4bGVuZ3RoPVxcXCIzMFxcXCJcXG4gIG1pbmxlbmd0aD1cXFwiMVxcXCJcXG4gIHBsYWNlaG9sZGVyPVxcXCJ7e3RyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQucGxhY2Vob2xkZXJ9fVxcXCJcXG4vPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdiBpZD1cXFwiaGlzdG9yeS1jb250YWluZXJcXFwiIHN0eWxlPVxcXCJ3aWR0aDogMTAwJVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8c3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5oaXN0b3J5LWFjdGlvbnMge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2RlbGV0ZS1oaXN0b3J5IHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLmhlbHAtaWNvbiB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAyOTFmNjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm94LXNoYWRvdzogbm9uZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjb2xvcjogI2ZmZjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXNpemU6IDI2cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiAyM3B4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBhZGRpbmc6IDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAyM3B4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAuaGlzdG9yeS1tZXNzYWdlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG1hcmdpbjogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBhZGRpbmc6IDFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLmhpc3Rvcnktcm93IHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBkaXNwbGF5OiBmbGV4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZsZXgtd3JhcDogd3JhcDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ6IDQ2NXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG1hcmdpbi1yaWdodDogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG92ZXJmbG93LXk6IGF1dG87XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgc2Nyb2xsYmFyLWNvbG9yOiBkYXJrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLnJlc3VsdC1jYXJkIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiAxZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAycHggcmdiYSgwLCAwLCAwLCAwLjMpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogMjA1cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbWFyZ2luOiAwLjVlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwYWRkaW5nOiAwLjVlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDEyOHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAucmVzdWx0LWltYWdlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiAxZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm94LXNoYWRvdzogMCAwIDRweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAwIDJweCA0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiAxMDBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdG9wOiAtMC44ZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDEwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAucmVzdWx0LWNvbnRlbnQtY29sdW1uIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBkaXNwbGF5OiBmbGV4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiAxMDNweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5yZXN1bHQtbmFtZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29sb3I6IHJnYig1MiwgNTYsIDExMSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZmxleC1ncm93OiAxO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtc2l6ZTogMTZweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXdlaWdodDogYm9sZDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBtYXJnaW4tdG9wOiAtMC4yZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLnJlc3VsdC1sb2NhdGlvbiB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5yZXN1bHQtZGF0ZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29sb3I6ICNmYjg5MDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1zaXplOiAxM3B4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAucmVzdWx0LWljb25zIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBtYXJnaW4tdG9wOiAwLjVlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLnJlc3VsdC1jb3VudCB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMGNkZmI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjb2xvcjogIzNlYzBkNztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1mYW1pbHk6IFxcXCJBbGVncmV5YSBTYW5zIFNDXFxcIiwgc2Fucy1zZXJpZjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXNpemU6IDE4cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ6IDI5cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbGluZS1oZWlnaHQ6IDI3cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHVzZXItc2VsZWN0OiBub25lO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAyOXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAuaGlzdG9yeS10cmFkYWJsZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzY2NjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiOWI5Yjk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29sb3I6ICNmZmZmZmY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtZmFtaWx5OiBcXFwiVGVtcCBNZW51XFxcIiwgc2VyaWY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1zaXplOiAxM3B4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogMTVweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBsaW5lLWhlaWdodDogMTVweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDE1cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5pY29uLXNwYWNlciB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAwLjFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9zdHlsZT5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8ZGl2IGNsYXNzPVxcXCJoaXN0b3J5LWFjdGlvbnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8YnV0dG9uIGlkPVxcXCJkZWxldGUtaGlzdG9yeVxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvblxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLnBldC5kZWxldGVfaGlzdG9yeVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvYnV0dG9uPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPHNwYW4gY2xhc3M9XFxcInRvb2x0aXBcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxzcGFuIGNsYXNzPVxcXCJubC1idXR0b24gaGVscC1pY29uXFxcIj4/PC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcInRvb2x0aXAtY29udGVudFxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUucGV0LnNhdmVkX2xvY2FsbHlcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUucGV0LmdvdG9fYWNjb3VudFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO2lmKCF0LnModC5mKFwiaGlzdG9yeVwiLGMscCwxKSxjLHAsMSwwLDAsXCJcIikpe3QuYihcIiAgPHAgY2xhc3M9XFxcImhpc3RvcnktbWVzc2FnZVxcXCI+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLnBldC5lbXB0eV9oaXN0b3J5XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIiArIGkpO307dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxkaXYgY2xhc3M9XFxcImhpc3Rvcnktcm93XFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTtpZih0LnModC5mKFwiaGlzdG9yeVwiLGMscCwxKSxjLHAsMCwzMjMwLDM4NjMsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtY2FyZFxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGltZyBjbGFzcz1cXFwicmVzdWx0LWltYWdlXFxcIiBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiIC8+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1jb250ZW50LWNvbHVtblxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtbmFtZVxcXCI+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWxvY2F0aW9uXFxcIj5cIik7dC5iKHQudih0LmYoXCJsb2NhdGlvbk5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1kYXRlXFxcIj5cIik7dC5iKHQudih0LmYoXCJkYXRlXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWljb25zXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgXCIpO2lmKHQucyh0LmYoXCJjb3VudFwiLGMscCwxKSxjLHAsMCwzNTY2LDM2MDksXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIjxzcGFuIGNsYXNzPVxcXCJyZXN1bHQtY291bnRcXFwiPlwiKTt0LmIodC52KHQuZihcImNvdW50XCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPlwiKTt9KTtjLnBvcCgpO310LmIoXCJcXG5cIiArIGkpO2lmKHQucyh0LmYoXCJjb3VudFwiLGMscCwxKSxjLHAsMCwzNjQwLDM3MTksXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe2lmKHQucyh0LmYoXCJ0cmFkYWJsZVwiLGMscCwxKSxjLHAsMCwzNjUzLDM3MDYsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpY29uLXNwYWNlclxcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIFwiKTt9KTtjLnBvcCgpO319KTtjLnBvcCgpO310LmIoXCIgXCIpO2lmKHQucyh0LmYoXCJ0cmFkYWJsZVwiLGMscCwxKSxjLHAsMCwzNzQzLDM4MDYsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIjxzcGFuIGNsYXNzPVxcXCJoaXN0b3J5LXRyYWRhYmxlXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgID7uoII8L3NwYW5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgPlwiKTt9KTtjLnBvcCgpO310LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGRpdiBpZD1cXFwiaGlzdG9yeS1jb250YWluZXJcXFwiIHN0eWxlPVxcXCJ3aWR0aDogMTAwJVxcXCI+XFxuICA8c3R5bGU+XFxuICAgIC5oaXN0b3J5LWFjdGlvbnMge1xcbiAgICAgIG1hcmdpbi1ib3R0b206IDFlbTtcXG4gICAgfVxcblxcbiAgICAjZGVsZXRlLWhpc3Rvcnkge1xcbiAgICAgIG1hcmdpbi1yaWdodDogMWVtO1xcbiAgICB9XFxuXFxuICAgIC5oZWxwLWljb24ge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMjkxZjY7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICAgICAgY29sb3I6ICNmZmY7XFxuICAgICAgZm9udC1zaXplOiAyNnB4O1xcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICAgIGhlaWdodDogMjNweDtcXG4gICAgICBsaW5lLWhlaWdodDogMjBweDtcXG4gICAgICBwYWRkaW5nOiAwO1xcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgICB3aWR0aDogMjNweDtcXG4gICAgfVxcblxcbiAgICAuaGlzdG9yeS1tZXNzYWdlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xcbiAgICAgIG1hcmdpbjogMWVtO1xcbiAgICAgIHBhZGRpbmc6IDFlbTtcXG4gICAgfVxcblxcbiAgICAuaGlzdG9yeS1yb3cge1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcbiAgICAgIGhlaWdodDogNDY1cHg7XFxuICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XFxuICAgICAgb3ZlcmZsb3cteTogYXV0bztcXG4gICAgICBzY3JvbGxiYXItY29sb3I6IGRhcms7XFxuICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xcbiAgICB9XFxuXFxuICAgIC5yZXN1bHQtY2FyZCB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xcbiAgICAgIGJveC1zaGFkb3c6IDAgMCA1cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcXG4gICAgICBoZWlnaHQ6IDIwNXB4O1xcbiAgICAgIG1hcmdpbjogMC41ZW07XFxuICAgICAgcGFkZGluZzogMC41ZW07XFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgIHdpZHRoOiAxMjhweDtcXG4gICAgfVxcblxcbiAgICAucmVzdWx0LWltYWdlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XFxuICAgICAgYm94LXNoYWRvdzogMCAwIDRweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksXFxuICAgICAgICAwIDJweCA0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XFxuICAgICAgaGVpZ2h0OiAxMDBweDtcXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgdG9wOiAtMC44ZW07XFxuICAgICAgd2lkdGg6IDEwMHB4O1xcbiAgICB9XFxuXFxuICAgIC5yZXN1bHQtY29udGVudC1jb2x1bW4ge1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgICBoZWlnaHQ6IDEwM3B4O1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgfVxcblxcbiAgICAucmVzdWx0LW5hbWUge1xcbiAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XFxuICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1xcbiAgICAgIGNvbG9yOiByZ2IoNTIsIDU2LCAxMTEpO1xcbiAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgICAgIGZsZXgtZ3JvdzogMTtcXG4gICAgICBmb250LXNpemU6IDE2cHg7XFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgICAgbWFyZ2luLXRvcDogLTAuMmVtO1xcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIH1cXG5cXG4gICAgLnJlc3VsdC1sb2NhdGlvbiB7XFxuICAgIH1cXG5cXG4gICAgLnJlc3VsdC1kYXRlIHtcXG4gICAgICBjb2xvcjogI2ZiODkwMDtcXG4gICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgIH1cXG5cXG4gICAgLnJlc3VsdC1pY29ucyB7XFxuICAgICAgbWFyZ2luLXRvcDogMC41ZW07XFxuICAgIH1cXG5cXG4gICAgLnJlc3VsdC1jb3VudCB7XFxuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcXG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMGNkZmI7XFxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICBjb2xvcjogIzNlYzBkNztcXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgICAgZm9udC1mYW1pbHk6IFxcXCJBbGVncmV5YSBTYW5zIFNDXFxcIiwgc2Fucy1zZXJpZjtcXG4gICAgICBmb250LXNpemU6IDE4cHg7XFxuICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcXG4gICAgICBoZWlnaHQ6IDI5cHg7XFxuICAgICAgbGluZS1oZWlnaHQ6IDI3cHg7XFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIHdpZHRoOiAyOXB4O1xcbiAgICB9XFxuXFxuICAgIC5oaXN0b3J5LXRyYWRhYmxlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjY2O1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7XFxuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2I5YjliOTtcXG4gICAgICBjb2xvcjogI2ZmZmZmZjtcXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgICAgZm9udC1mYW1pbHk6IFxcXCJUZW1wIE1lbnVcXFwiLCBzZXJpZjtcXG4gICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgaGVpZ2h0OiAxNXB4O1xcbiAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4O1xcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgICB3aWR0aDogMTVweDtcXG4gICAgfVxcblxcbiAgICAuaWNvbi1zcGFjZXIge1xcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICB3aWR0aDogMC4xZW07XFxuICAgIH1cXG4gIDwvc3R5bGU+XFxuXFxuICA8ZGl2IGNsYXNzPVxcXCJoaXN0b3J5LWFjdGlvbnNcXFwiPlxcbiAgICA8YnV0dG9uIGlkPVxcXCJkZWxldGUtaGlzdG9yeVxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvblxcXCI+XFxuICAgICAge3t0cmFuc2xhdGUucGV0LmRlbGV0ZV9oaXN0b3J5fX1cXG4gICAgPC9idXR0b24+XFxuXFxuICAgIDxzcGFuIGNsYXNzPVxcXCJ0b29sdGlwXFxcIj5cXG4gICAgICA8c3BhbiBjbGFzcz1cXFwibmwtYnV0dG9uIGhlbHAtaWNvblxcXCI+Pzwvc3Bhbj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJ0b29sdGlwLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgPHA+e3t7dHJhbnNsYXRlLnBldC5zYXZlZF9sb2NhbGx5fX19PC9wPlxcbiAgICAgICAgPHA+e3t7dHJhbnNsYXRlLnBldC5nb3RvX2FjY291bnR9fX08L3A+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvc3Bhbj5cXG4gIDwvZGl2PlxcblxcbiAge3teaGlzdG9yeX19XFxuICA8cCBjbGFzcz1cXFwiaGlzdG9yeS1tZXNzYWdlXFxcIj57e3RyYW5zbGF0ZS5wZXQuZW1wdHlfaGlzdG9yeX19PC9wPlxcbiAge3svaGlzdG9yeX19XFxuXFxuICA8ZGl2IGNsYXNzPVxcXCJoaXN0b3J5LXJvd1xcXCI+XFxuICAgIHt7I2hpc3Rvcnl9fVxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtY2FyZFxcXCI+XFxuICAgICAgPGltZyBjbGFzcz1cXFwicmVzdWx0LWltYWdlXFxcIiBzcmM9XFxcInt7aWNvbn19XFxcIiAvPlxcblxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1jb250ZW50LWNvbHVtblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtbmFtZVxcXCI+e3tuYW1lfX08L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1sb2NhdGlvblxcXCI+e3tsb2NhdGlvbk5hbWV9fTwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWRhdGVcXFwiPnt7ZGF0ZX19PC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtaWNvbnNcXFwiPlxcbiAgICAgICAgICB7eyNjb3VudH19PHNwYW4gY2xhc3M9XFxcInJlc3VsdC1jb3VudFxcXCI+e3tjb3VudH19PC9zcGFuPnt7L2NvdW50fX1cXG4gICAgICAgICAge3sjY291bnR9fXt7I3RyYWRhYmxlfX1cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaWNvbi1zcGFjZXJcXFwiPjwvZGl2PlxcbiAgICAgICAgICB7ey90cmFkYWJsZX19e3svY291bnR9fSB7eyN0cmFkYWJsZX19PHNwYW4gY2xhc3M9XFxcImhpc3RvcnktdHJhZGFibGVcXFwiXFxuICAgICAgICAgICAgPu6ggjwvc3BhblxcbiAgICAgICAgICA+e3svdHJhZGFibGV9fVxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICB7ey9oaXN0b3J5fX1cXG4gIDwvZGl2PlxcbjwvZGl2PlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPHN0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmNyZWF0ZWQtb3V0Zml0LXBvcHVwIC5mbGF2ci1vdXRlciAuZmxhdnItbWVzc2FnZTo6YWZ0ZXIge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIpO3QuYih0LnYodC5mKFwidXJsXCIsYyxwLDApKSk7dC5iKFwiKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvc3R5bGU+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxoMT5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9oMT5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPHA+XCIpO3QuYih0LnQodC5kKFwidHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5jbGlja19vdXRmaXQuc2F2ZWRfbG9jYWxseVwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPGJyIC8+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LmdvdG9fYWNjb3VudFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8c3R5bGU+XFxuICAuY3JlYXRlZC1vdXRmaXQtcG9wdXAgLmZsYXZyLW91dGVyIC5mbGF2ci1tZXNzYWdlOjphZnRlciB7XFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCh7e3VybH19KTtcXG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xcbiAgfVxcbjwvc3R5bGU+XFxuXFxuPGgxPnt7bmFtZX19PC9oMT5cXG5cXG48cD57e3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmNsaWNrX291dGZpdC5zYXZlZF9sb2NhbGx5fX19PC9wPlxcblxcbjxiciAvPlxcblxcbjxwPnt7e3RyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LmdvdG9fYWNjb3VudH19fTwvcD5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxidXR0b24gaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIGZhdm9yaXRlcy1hY3Rpb24tZWVcXFwiPlwiKTt0LmIodC52KHQuZihcInRleHRcIixjLHAsMCkpKTt0LmIoXCI8L2J1dHRvbj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8YnV0dG9uIGlkPVxcXCJ7e2lkfX1cXFwiIGNsYXNzPVxcXCJubC1idXR0b24gZmF2b3JpdGVzLWFjdGlvbi1lZVxcXCI+e3t0ZXh0fX08L2J1dHRvbj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxpbWdcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGFsdD1cXFwiXCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGhlaWdodD1cXFwiMjFcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBzdHlsZT1cXFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW46IC0ycHggYXV0b1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYih0LnQodC5mKFwibWVzc2FnZVwiLGMscCwwKSkpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGltZ1xcbiAgc3JjPVxcXCJ7e2ljb259fVxcXCJcXG4gIGFsdD1cXFwie3tuYW1lfX1cXFwiXFxuICBoZWlnaHQ9XFxcIjIxXFxcIlxcbiAgc3R5bGU9XFxcImRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAtMnB4IGF1dG9cXFwiXFxuLz5cXG57e3ttZXNzYWdlfX19XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGlcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJoZWFkZXItdGFrZW92ZXJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB0aXRsZT1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmhvbWUudGFrZW92ZXJcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBzdHlsZT1cXFwidHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UtaW4tb3V0IDIwMG1zOyBjdXJzb3I6IHBvaW50ZXJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBvbk1vdXNlT3Zlcj1cXFwidGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEuMyknXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgb25Nb3VzZU91dD1cXFwidGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEpJ1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8YT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGltZ1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC9ob21lL2Nvbm5lY3RlZC9sb2NrLnBuZ1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5ob21lLnRha2VvdmVyXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHN0eWxlPVxcXCJmaWx0ZXI6IGNvbnRyYXN0KDAlKSBicmlnaHRuZXNzKDIwMCUpIFwiKTtpZighdC5zKHQuZihcInRha2VvdmVyXCIsYyxwLDEpLGMscCwxLDAsMCxcIlwiKSl7dC5iKFwib3BhY2l0eSgwKVwiKTt9O3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ9XFxcIjIxXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9hPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvbGk+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGxpXFxuICBpZD1cXFwiaGVhZGVyLXRha2VvdmVyXFxcIlxcbiAgdGl0bGU9XFxcInt7dHJhbnNsYXRlLmhvbWUudGFrZW92ZXJ9fVxcXCJcXG4gIHN0eWxlPVxcXCJ0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gZWFzZS1pbi1vdXQgMjAwbXM7IGN1cnNvcjogcG9pbnRlclxcXCJcXG4gIG9uTW91c2VPdmVyPVxcXCJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMS4zKSdcXFwiXFxuICBvbk1vdXNlT3V0PVxcXCJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMSknXFxcIlxcbj5cXG4gIDxhPlxcbiAgICA8aW1nXFxuICAgICAgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L2hvbWUvY29ubmVjdGVkL2xvY2sucG5nXFxcIlxcbiAgICAgIGFsdD1cXFwie3t0cmFuc2xhdGUuaG9tZS50YWtlb3Zlcn19XFxcIlxcbiAgICAgIHN0eWxlPVxcXCJmaWx0ZXI6IGNvbnRyYXN0KDAlKSBicmlnaHRuZXNzKDIwMCUpIHt7XnRha2VvdmVyfX1vcGFjaXR5KDApe3svdGFrZW92ZXJ9fVxcXCJcXG4gICAgICBoZWlnaHQ9XFxcIjIxXFxcIlxcbiAgICAvPlxcbiAgPC9hPlxcbjwvbGk+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcImhvbWUtXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBjbGFzcz1cXFwiaG9tZS1jb250ZW50LXRpbGUgaG9tZS1jb250ZW50LXNtYWxsIGhvbWUtY29udGVudC1zbWFsbC1lZVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGhyZWY9XFxcIlwiKTt0LmIodC52KHQuZihcImhyZWZcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiKTt0LmIodC52KHQuZihcImJhY2tncm91bmRJbWFnZVwiLGMscCwwKSkpO3QuYihcIik7XFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxoND5cIik7dC5iKHQudih0LmYoXCJoNFwiLGMscCwwKSkpO3QuYihcIjwvaDQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9hPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxhXFxuICBpZD1cXFwiaG9tZS17e2lkfX1cXFwiXFxuICBjbGFzcz1cXFwiaG9tZS1jb250ZW50LXRpbGUgaG9tZS1jb250ZW50LXNtYWxsIGhvbWUtY29udGVudC1zbWFsbC1lZVxcXCJcXG4gIGhyZWY9XFxcInt7aHJlZn19XFxcIlxcbiAgc3R5bGU9XFxcImJhY2tncm91bmQtaW1hZ2U6IHVybCh7e2JhY2tncm91bmRJbWFnZX19KTtcXFwiXFxuPlxcbiAgPGg0Pnt7aDR9fTwvaDQ+XFxuPC9hPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpIGNsYXNzPVxcXCJtYWluLW1lbnUtXCIpO3QuYih0LnYodC5mKFwiY2xhc3NcIixjLHAsMCkpKTt0LmIoXCIgbWFpbi1tZW51LWVlXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxhIGhyZWY9XFxcIlwiKTt0LmIodC52KHQuZihcImhyZWZcIixjLHAsMCkpKTt0LmIoXCJcXFwiPlwiKTt0LmIodC52KHQuZihcInRleHRcIixjLHAsMCkpKTt0LmIoXCI8L2E+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9saT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8bGkgY2xhc3M9XFxcIm1haW4tbWVudS17e2NsYXNzfX0gbWFpbi1tZW51LWVlXFxcIj5cXG4gIDxhIGhyZWY9XFxcInt7aHJlZn19XFxcIj57e3RleHR9fTwvYT5cXG48L2xpPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpIGNsYXNzPVxcXCJtYWluLW1lbnUtcHVycm9zaG9wXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxhIGhyZWY9XFxcIi9tYWxsL3B1cnJvc2hvcFxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxpbWdcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ9XFxcIjIwXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHNyYz1cXFwiL2Fzc2V0cy9pbWcvaXRlbS9jb25zdW1hYmxlL2I2NDdkNTRhZmQ2YjA0MzUzZTEyOTIxOTgxMDUxMmY1LnBuZ1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzdHlsZT1cXFwidmVydGljYWwtYWxpZ246IG1pZGRsZVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgUHVycm8nU2hvcFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9hPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvbGk+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGxpIGNsYXNzPVxcXCJtYWluLW1lbnUtcHVycm9zaG9wXFxcIj5cXG4gIDxhIGhyZWY9XFxcIi9tYWxsL3B1cnJvc2hvcFxcXCI+XFxuICAgIDxpbWdcXG4gICAgICBoZWlnaHQ9XFxcIjIwXFxcIlxcbiAgICAgIHNyYz1cXFwiL2Fzc2V0cy9pbWcvaXRlbS9jb25zdW1hYmxlL2I2NDdkNTRhZmQ2YjA0MzUzZTEyOTIxOTgxMDUxMmY1LnBuZ1xcXCJcXG4gICAgICBzdHlsZT1cXFwidmVydGljYWwtYWxpZ246IG1pZGRsZVxcXCJcXG4gICAgLz5cXG4gICAgUHVycm8nU2hvcFxcbiAgPC9hPlxcbjwvbGk+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8c3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAvKiAjbWFya2V0cGxhY2UtYWJzdHJhY3QtcHVyY2hhc2VzIGFuZCAjbWFya2V0cGxhY2UtYWJzdHJhY3Qtc2FsZXMgd2VyZVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgcmUtd3JpdHRlbiB0byB0YXJnZXQgI3B1cmNoYXNlLWhpc3RvcnkgYW5kICNzYWxlLWhpc3RvcnkuICovXCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3RvcnksXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjc2FsZS1oaXN0b3J5IHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgaGVpZ2h0OiA2MDBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgcG9zaXRpb246IHJlbGF0aXZlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB3aWR0aDogMzYwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdmVydGljYWwtYWxpZ246IHRvcDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjc2FsZS1oaXN0b3J5IC5hYnN0cmFjdC1hY3Rpb25zLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3RvcnkgLmFic3RyYWN0LWFjdGlvbnMge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHRvcDogLTQwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGRpc3BsYXk6IGZsZXg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDgwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3NhbGUtaGlzdG9yeSAuYWJzdHJhY3QtdGltZSxcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNwdXJjaGFzZS1oaXN0b3J5IC5hYnN0cmFjdC10aW1lIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgcG9zaXRpb246IHN0YXRpYztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZGlzcGxheTogaW5saW5lO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IGF1dG87XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGNvbG9yOiAjZmI4OTAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmb250LXdlaWdodDogYm9sZDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZm9udC1zaXplOiAxM3B4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNwdXJjaGFzZS1oaXN0b3J5IHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgbWFyZ2luLXJpZ2h0OiA4MHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNwdXJjaGFzZS1oaXN0b3J5OmJlZm9yZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHRvcDogMTIwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHJpZ2h0OiAtNDJweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAycHggI2FhYTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgaGVpZ2h0OiAzMjBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAvKiBDdXN0b20gZml4ZXMgdG8gdGhlIGxheW91dCAqL1wiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNwdXJjaGFzZS1oaXN0b3J5IGxpIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgbWFyZ2luLWxlZnQ6IDRweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9zdHlsZT5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPCEtLSBQdXJjaGFzZXMgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPGRpdiBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3RcXFwiIGlkPVxcXCJwdXJjaGFzZS1oaXN0b3J5XFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxoMiBjbGFzcz1cXFwic2VjdGlvbi1zdWJ0aXRsZVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMucHVyY2hhc2VfaGlzdG9yeVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L2gyPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx1bCBjbGFzcz1cXFwibWFya2V0cGxhY2UtcHVyY2hhc2VzLWl0ZW1zXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTtpZih0LnModC5mKFwicHVyY2hhc2VzXCIsYyxwLDEpLGMscCwwLDEyODQsMjU0NSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiICAgIDxsaVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGRhdGEtaXRlbWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpdGVtaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0IG1hcmtldHBsYWNlLWF1Y3Rpb25zLWl0ZW0gbWFya2V0cGxhY2Utc2FsZXMtaXRlbVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gSWNvbiAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1pY29uXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxpbWcgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIiAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIFByaWNlcyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jb250YWluZXJcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtbmFtZVxcXCI+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGVudFxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWN1cnJlbnRQcmljZVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgXCIpO2lmKHQucyh0LmYoXCJjdXJyZW50UHJpY2VcIixjLHAsMSksYyxwLDAsMTczOCwxOTA3LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5jdXJyZW50X3ByaWNlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5kKFwiY3VycmVudFByaWNlLnByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICAgICAgICAgICAgPGJyIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgXCIpO2lmKHQucyh0LmYoXCJidXlOb3dQcmljZVwiLGMscCwxKSxjLHAsMCwxOTcyLDIxNDAsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmJ1eV9ub3dfcHJpY2VcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmQoXCJidXlOb3dQcmljZS5wcmljZVwiLGMscCwwKSkpO3QuYihcIjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIEFjdGlvbnMgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtYWN0aW9uc1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC10aW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJkYXRlXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIG1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtY2FuY2VsIGRlbGV0ZS1idXR0b25cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGRhdGEtaXRlbWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpdGVtaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuZGVsZXRlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgPC91bD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPCEtLSBTYWxlcyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8ZGl2IGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgaWQ9XFxcInNhbGUtaGlzdG9yeVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8aDIgY2xhc3M9XFxcInNlY3Rpb24tc3VidGl0bGVcXFwiPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuc2FsZXNfaGlzdG9yeVwiLGMscCwwKSkpO3QuYihcIjwvaDI+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHVsIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1zYWxlcy1pdGVtc1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7aWYodC5zKHQuZihcInNhbGVzXCIsYyxwLDEpLGMscCwwLDI3NzgsMzkyNCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiICAgIDxsaSBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3QgbWFya2V0cGxhY2Utc2FsZXMtaXRlbVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBJY29uIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWljb25cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGltZyBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gUHJpY2VzIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRhaW5lclxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jb250ZW50XFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY3VycmVudFByaWNlXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICBcIik7aWYodC5zKHQuZihcImN1cnJlbnRQcmljZVwiLGMscCwxKSxjLHAsMCwzMTY0LDMzMjcsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmN1cnJlbnRfcHJpY2VcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmYoXCJjdXJyZW50UHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgICAgICAgICAgICA8YnIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICBcIik7aWYodC5zKHQuZihcImJ1eU5vd1ByaWNlXCIsYyxwLDEpLGMscCwwLDMzOTIsMzU1NCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuYnV5X25vd19wcmljZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZihcImJ1eU5vd1ByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICAgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gQWN0aW9ucyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1hY3Rpb25zXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXRpbWVcXFwiPlwiKTt0LmIodC52KHQuZihcImRhdGVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXZcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gbWFya2V0cGxhY2UtaXRlbURldGFpbC1jYW5jZWwgZGVsZXRlLWJ1dHRvblxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kZWxldGVcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICA8L3VsPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxzdHlsZT5cXG4gIC8qICNtYXJrZXRwbGFjZS1hYnN0cmFjdC1wdXJjaGFzZXMgYW5kICNtYXJrZXRwbGFjZS1hYnN0cmFjdC1zYWxlcyB3ZXJlXFxuICByZS13cml0dGVuIHRvIHRhcmdldCAjcHVyY2hhc2UtaGlzdG9yeSBhbmQgI3NhbGUtaGlzdG9yeS4gKi9cXG5cXG4gICNwdXJjaGFzZS1oaXN0b3J5LFxcbiAgI3NhbGUtaGlzdG9yeSB7XFxuICAgIGhlaWdodDogNjAwcHg7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgd2lkdGg6IDM2MHB4O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxuICB9XFxuXFxuICAjc2FsZS1oaXN0b3J5IC5hYnN0cmFjdC1hY3Rpb25zLFxcbiAgI3B1cmNoYXNlLWhpc3RvcnkgLmFic3RyYWN0LWFjdGlvbnMge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHRvcDogLTQwcHg7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1xcbiAgICBoZWlnaHQ6IDgwcHg7XFxuICB9XFxuXFxuICAjc2FsZS1oaXN0b3J5IC5hYnN0cmFjdC10aW1lLFxcbiAgI3B1cmNoYXNlLWhpc3RvcnkgLmFic3RyYWN0LXRpbWUge1xcbiAgICBwb3NpdGlvbjogc3RhdGljO1xcbiAgICBkaXNwbGF5OiBpbmxpbmU7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgY29sb3I6ICNmYjg5MDA7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICBmb250LXNpemU6IDEzcHg7XFxuICB9XFxuXFxuICAjcHVyY2hhc2UtaGlzdG9yeSB7XFxuICAgIG1hcmdpbi1yaWdodDogODBweDtcXG4gIH1cXG5cXG4gICNwdXJjaGFzZS1oaXN0b3J5OmJlZm9yZSB7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogMTIwcHg7XFxuICAgIHJpZ2h0OiAtNDJweDtcXG4gICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAycHggI2FhYTtcXG4gICAgaGVpZ2h0OiAzMjBweDtcXG4gIH1cXG5cXG4gIC8qIEN1c3RvbSBmaXhlcyB0byB0aGUgbGF5b3V0ICovXFxuXFxuICAjcHVyY2hhc2UtaGlzdG9yeSBsaSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0cHg7XFxuICAgIG1hcmdpbi1yaWdodDogNHB4O1xcbiAgfVxcbjwvc3R5bGU+XFxuXFxuPCEtLSBQdXJjaGFzZXMgLS0+XFxuPGRpdiBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3RcXFwiIGlkPVxcXCJwdXJjaGFzZS1oaXN0b3J5XFxcIj5cXG4gIDxoMiBjbGFzcz1cXFwic2VjdGlvbi1zdWJ0aXRsZVxcXCI+XFxuICAgIHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5wdXJjaGFzZV9oaXN0b3J5fX1cXG4gIDwvaDI+XFxuXFxuICA8dWwgY2xhc3M9XFxcIm1hcmtldHBsYWNlLXB1cmNoYXNlcy1pdGVtc1xcXCI+XFxuICAgIHt7I3B1cmNoYXNlc319XFxuICAgIDxsaVxcbiAgICAgIGRhdGEtaXRlbWlkPVxcXCJ7e2l0ZW1pZH19XFxcIlxcbiAgICAgIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdCBtYXJrZXRwbGFjZS1hdWN0aW9ucy1pdGVtIG1hcmtldHBsYWNlLXNhbGVzLWl0ZW1cXFwiXFxuICAgID5cXG4gICAgICA8IS0tIEljb24gLS0+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtaWNvblxcXCI+XFxuICAgICAgICA8aW1nIHNyYz1cXFwie3tpY29ufX1cXFwiIC8+XFxuICAgICAgPC9kaXY+XFxuXFxuICAgICAgPCEtLSBQcmljZXMgLS0+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGFpbmVyXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LW5hbWVcXFwiPnt7bmFtZX19PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jb250ZW50XFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY3VycmVudFByaWNlXFxcIj5cXG4gICAgICAgICAgICB7eyNjdXJyZW50UHJpY2V9fSB7e3RyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuY3VycmVudF9wcmljZX19XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPnt7Y3VycmVudFByaWNlLnByaWNlfX08L3NwYW4+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICB7ey9jdXJyZW50UHJpY2V9fVxcbiAgICAgICAgICAgIDxiciAvPlxcbiAgICAgICAgICAgIHt7I2J1eU5vd1ByaWNlfX0ge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmJ1eV9ub3dfcHJpY2V9fVxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj57e2J1eU5vd1ByaWNlLnByaWNlfX08L3NwYW4+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICB7ey9idXlOb3dQcmljZX19XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuXFxuICAgICAgPCEtLSBBY3Rpb25zIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWFjdGlvbnNcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtdGltZVxcXCI+e3tkYXRlfX08L2Rpdj5cXG4gICAgICAgIDxkaXZcXG4gICAgICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gbWFya2V0cGxhY2UtaXRlbURldGFpbC1jYW5jZWwgZGVsZXRlLWJ1dHRvblxcXCJcXG4gICAgICAgICAgZGF0YS1pdGVtaWQ9XFxcInt7aXRlbWlkfX1cXFwiXFxuICAgICAgICA+XFxuICAgICAgICAgIHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kZWxldGV9fVxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvbGk+XFxuICAgIHt7L3B1cmNoYXNlc319XFxuICA8L3VsPlxcbjwvZGl2PlxcblxcbjwhLS0gU2FsZXMgLS0+XFxuPGRpdiBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3RcXFwiIGlkPVxcXCJzYWxlLWhpc3RvcnlcXFwiPlxcbiAgPGgyIGNsYXNzPVxcXCJzZWN0aW9uLXN1YnRpdGxlXFxcIj57e3RyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuc2FsZXNfaGlzdG9yeX19PC9oMj5cXG5cXG4gIDx1bCBjbGFzcz1cXFwibWFya2V0cGxhY2Utc2FsZXMtaXRlbXNcXFwiPlxcbiAgICB7eyNzYWxlc319XFxuICAgIDxsaSBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3QgbWFya2V0cGxhY2Utc2FsZXMtaXRlbVxcXCI+XFxuICAgICAgPCEtLSBJY29uIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWljb25cXFwiPlxcbiAgICAgICAgPGltZyBzcmM9XFxcInt7aWNvbn19XFxcIiAvPlxcbiAgICAgIDwvZGl2PlxcblxcbiAgICAgIDwhLS0gUHJpY2VzIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRhaW5lclxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj57e25hbWV9fTwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGVudFxcXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWN1cnJlbnRQcmljZVxcXCI+XFxuICAgICAgICAgICAge3sjY3VycmVudFByaWNlfX0ge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmN1cnJlbnRfcHJpY2V9fVxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj57e2N1cnJlbnRQcmljZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAge3svY3VycmVudFByaWNlfX1cXG4gICAgICAgICAgICA8YnIgLz5cXG4gICAgICAgICAgICB7eyNidXlOb3dQcmljZX19IHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5idXlfbm93X3ByaWNlfX1cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+e3tidXlOb3dQcmljZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAge3svYnV5Tm93UHJpY2V9fVxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcblxcbiAgICAgIDwhLS0gQWN0aW9ucyAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1hY3Rpb25zXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXRpbWVcXFwiPnt7ZGF0ZX19PC9kaXY+XFxuICAgICAgICA8ZGl2XFxuICAgICAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIG1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtY2FuY2VsIGRlbGV0ZS1idXR0b25cXFwiXFxuICAgICAgICA+XFxuICAgICAgICAgIHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kZWxldGV9fVxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvbGk+XFxuICAgIHt7L3NhbGVzfX1cXG4gIDwvdWw+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2IGlkPVxcXCJlZS1vdXRmaXQtdGh1bWJzXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLWF2YWlsYWJsZS1zbG90IHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2F2YWlsYWJsZS1mYXZvcml0ZS5wbmcpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNHB4IC0xMXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTcxcHggMjQ0cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyLXJhZGl1czogNDRweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3gtc2hhZG93OiAwIDAgNHB4IDRweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1hdmFpbGFibGUtc2xvdDo6YWZ0ZXIge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL2ljb24tcGx1cy5wbmcpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNvbnRlbnQ6IFxcXCIgXFxcIjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCA2cHggcmdiYSgyMzcsIDEyLCAyNDUsIDAuOSkpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogNzFweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBsZWZ0OiA1MCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgb3BhY2l0eTogMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdG9wOiA1MCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSBlYXNlLWluLW91dCAxMDBtcztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogNjZweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLWF2YWlsYWJsZS1zbG90OmhvdmVyOjphZnRlcixcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLW91dGZpdC10aHVtYjpob3ZlciBwIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBvcGFjaXR5OiAxO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtb3V0Zml0LXRodW1iIGltZyB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyLXJhZGl1czogNDRweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ6IDEwMCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDEwMCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1vdXRmaXQtdGh1bWIgcCB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNvbG9yOiAjZmZmO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtZmFtaWx5OiBcXFwiQWxlZ3JleWEgU2FucyBTQ1xcXCIsIHNhbnMtc2VyaWY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1zaXplOiAyMnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbGVmdDogNTAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG9wYWNpdHk6IDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcGFkZGluZzogMTJweCAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdG9wOiA1MCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSBlYXNlLWluLW91dCA0MDBtcztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9zdHlsZT5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7aWYodC5zKHQuZihcIm91dGZpdHNcIixjLHAsMSksYyxwLDAsMTY1NCwxNzkwLFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgIDxkaXYgY2xhc3M9XFxcInNsb3QgZWUtb3V0Zml0LXRodW1iXFxcIiBkYXRhLWFycmF5LWluZGV4PVxcXCJcIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxpbWcgYWx0PVxcXCJcIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcInVybFwiLGMscCwwKSkpO3QuYihcIlxcXCIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPHA+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIlxcblwiICsgaSk7dC5iKFwiICA8ZGl2IGNsYXNzPVxcXCJzbG90IGVlLWF2YWlsYWJsZS1zbG90XFxcIj48L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8ZGl2IGlkPVxcXCJlZS1vdXRmaXQtdGh1bWJzXFxcIj5cXG4gIDxzdHlsZT5cXG4gICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLWF2YWlsYWJsZS1zbG90IHtcXG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2F2YWlsYWJsZS1mYXZvcml0ZS5wbmcpO1xcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNHB4IC0xMXB4O1xcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogMTcxcHggMjQ0cHg7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNDRweDtcXG4gICAgICBib3gtc2hhZG93OiAwIDAgNHB4IDRweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XFxuICAgIH1cXG5cXG4gICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLWF2YWlsYWJsZS1zbG90OjphZnRlciB7XFxuICAgICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvaWNvbi1wbHVzLnBuZyk7XFxuICAgICAgY29udGVudDogXFxcIiBcXFwiO1xcbiAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDZweCByZ2JhKDIzNywgMTIsIDI0NSwgMC45KSk7XFxuICAgICAgaGVpZ2h0OiA3MXB4O1xcbiAgICAgIGxlZnQ6IDUwJTtcXG4gICAgICBvcGFjaXR5OiAwO1xcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICB0b3A6IDUwJTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcXG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDEwMG1zO1xcbiAgICAgIHdpZHRoOiA2NnB4O1xcbiAgICB9XFxuXFxuICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1hdmFpbGFibGUtc2xvdDpob3Zlcjo6YWZ0ZXIsXFxuICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1vdXRmaXQtdGh1bWI6aG92ZXIgcCB7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgfVxcblxcbiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtb3V0Zml0LXRodW1iIGltZyB7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNDRweDtcXG4gICAgICBoZWlnaHQ6IDEwMCU7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG5cXG4gICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLW91dGZpdC10aHVtYiBwIHtcXG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxuICAgICAgY29sb3I6ICNmZmY7XFxuICAgICAgZm9udC1mYW1pbHk6IFxcXCJBbGVncmV5YSBTYW5zIFNDXFxcIiwgc2Fucy1zZXJpZjtcXG4gICAgICBmb250LXNpemU6IDIycHg7XFxuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gICAgICBsZWZ0OiA1MCU7XFxuICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgICBwYWRkaW5nOiAxMnB4IDA7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgICB0b3A6IDUwJTtcXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcXG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDQwMG1zO1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICB9XFxuICA8L3N0eWxlPlxcblxcbiAge3sjb3V0Zml0c319XFxuICA8ZGl2IGNsYXNzPVxcXCJzbG90IGVlLW91dGZpdC10aHVtYlxcXCIgZGF0YS1hcnJheS1pbmRleD1cXFwie3tpZH19XFxcIj5cXG4gICAgPGltZyBhbHQ9XFxcInt7bmFtZX19XFxcIiBzcmM9XFxcInt7dXJsfX1cXFwiIC8+XFxuICAgIDxwPnt7bmFtZX19PC9wPlxcbiAgPC9kaXY+XFxuICB7ey9vdXRmaXRzfX1cXG5cXG4gIDxkaXYgY2xhc3M9XFxcInNsb3QgZWUtYXZhaWxhYmxlLXNsb3RcXFwiPjwvZGl2PlxcbjwvZGl2PlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpIGlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgY2xhc3M9XFxcInByb2ZpbGUtY29udGFjdC1hY3Rpb24tZWVcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHNwYW4gY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8ZGl2IGNsYXNzPVxcXCJhY3Rpb24tZGVzY3JpcHRpb25cXFwiPlwiKTt0LmIodC52KHQuZihcImFjdGlvbkRlc2NyaXB0aW9uXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9saT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8bGkgaWQ9XFxcInt7aWR9fVxcXCIgY2xhc3M9XFxcInByb2ZpbGUtY29udGFjdC1hY3Rpb24tZWVcXFwiPlxcbiAgPHNwYW4gY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJhY3Rpb24tZGVzY3JpcHRpb25cXFwiPnt7YWN0aW9uRGVzY3JpcHRpb259fTwvZGl2PlxcbiAgPC9zcGFuPlxcbjwvbGk+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2IGNsYXNzPVxcXCJhY2NvdW50LW1pc2MtYmxvYyBhY2NvdW50LWVlLWJsb2MgYmxvY1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8IS0tXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8c3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHRhYmxlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdGgge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRleHQtYWxpZ246IHN0YXJ0O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBhZGRpbmc6IDFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9zdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC0tPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwhLS0gU2V0dGluZ3MgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8aDIgY2xhc3M9XFxcInNlY3Rpb24tdGl0bGVcXFwiPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmVuaGFuY2VtZW50c1wiLGMscCwwKSkpO3QuYihcIjwvaDI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8dWwgY2xhc3M9XFxcImFjY291bnQtbWlzYy1hY3Rpb25zXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaWQ9XFxcImVlLWRlYnVnLWVuYWJsZWRcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJkZWJ1Z1wiLGMscCwxKSxjLHAsMCwzOTIsMzk4LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRpdGxlPVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5kZWJ1Z190b29sdGlwXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuZGVidWdcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8bGlcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBpZD1cXFwiZWUtbWluaWdhbWVzLWVuYWJsZWRcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJtaW5pZ2FtZXNcIixjLHAsMSksYyxwLDAsNjAwLDYwNixcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50Lm1pbmlnYW1lc1wiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxsaVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGlkPVxcXCJlZS1leHBsb3JhdGlvbnMtZW5hYmxlZFxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcImV4cGxvcmF0aW9uc1wiLGMscCwxKSxjLHAsMCw3NzIsNzc4LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuZXhwbG9yYXRpb25zXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaWQ9XFxcImVlLW1hcmtldC1lbmFibGVkXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwibWFya2V0XCIsYyxwLDEpLGMscCwwLDkzOCw5NDQsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5tYXJrZXRcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8bGkgaWQ9XFxcImVlLWltcG9ydFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmltcG9ydFwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxsaSBpZD1cXFwiZWUtZXhwb3J0XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuZXhwb3J0XCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvdWw+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPCEtLSBFeHBsb3JhdGlvbnNcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxoMyBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+RXhwbG9yYXRpb25zPC9oMz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx0YWJsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPHRoZWFkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5Mb2NhdGlvbjwvdGg+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRoPkRlbGV0ZTwvdGg+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvdGhlYWQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDx0Ym9keT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGQ+Um9jazwvdGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+RGVsZXRlPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC90ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC90Ym9keT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvdGFibGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8ZGl2IGNsYXNzPVxcXCJhY2NvdW50LW1pc2MtYmxvYyBhY2NvdW50LWVlLWJsb2MgYmxvY1xcXCI+XFxuICA8IS0tXFxuICA8c3R5bGU+XFxuICAgIHRhYmxlIHtcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgfVxcblxcbiAgICB0aCB7XFxuICAgICAgdGV4dC1hbGlnbjogc3RhcnQ7XFxuICAgICAgcGFkZGluZzogMWVtO1xcbiAgICB9XFxuICA8L3N0eWxlPlxcbiAgLS0+XFxuXFxuICA8IS0tIFNldHRpbmdzIC0tPlxcbiAgPGgyIGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj57e3RyYW5zbGF0ZS5hY2NvdW50LmVuaGFuY2VtZW50c319PC9oMj5cXG4gIDx1bCBjbGFzcz1cXFwiYWNjb3VudC1taXNjLWFjdGlvbnNcXFwiPlxcbiAgICA8bGlcXG4gICAgICBpZD1cXFwiZWUtZGVidWctZW5hYmxlZFxcXCJcXG4gICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSB7eyNkZWJ1Z319YWN0aXZle3svZGVidWd9fVxcXCJcXG4gICAgICB0aXRsZT1cXFwie3t0cmFuc2xhdGUuYWNjb3VudC5kZWJ1Z190b29sdGlwfX1cXFwiXFxuICAgID5cXG4gICAgICB7e3RyYW5zbGF0ZS5hY2NvdW50LmRlYnVnfX1cXG4gICAgPC9saT5cXG4gICAgPGxpXFxuICAgICAgaWQ9XFxcImVlLW1pbmlnYW1lcy1lbmFibGVkXFxcIlxcbiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIHt7I21pbmlnYW1lc319YWN0aXZle3svbWluaWdhbWVzfX1cXFwiXFxuICAgID5cXG4gICAgICB7e3RyYW5zbGF0ZS5hY2NvdW50Lm1pbmlnYW1lc319XFxuICAgIDwvbGk+XFxuICAgIDxsaVxcbiAgICAgIGlkPVxcXCJlZS1leHBsb3JhdGlvbnMtZW5hYmxlZFxcXCJcXG4gICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSB7eyNleHBsb3JhdGlvbnN9fWFjdGl2ZXt7L2V4cGxvcmF0aW9uc319XFxcIlxcbiAgICA+XFxuICAgICAge3t0cmFuc2xhdGUuYWNjb3VudC5leHBsb3JhdGlvbnN9fVxcbiAgICA8L2xpPlxcbiAgICA8bGlcXG4gICAgICBpZD1cXFwiZWUtbWFya2V0LWVuYWJsZWRcXFwiXFxuICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20ge3sjbWFya2V0fX1hY3RpdmV7ey9tYXJrZXR9fVxcXCJcXG4gICAgPlxcbiAgICAgIHt7dHJhbnNsYXRlLmFjY291bnQubWFya2V0fX1cXG4gICAgPC9saT5cXG4gICAgPGxpIGlkPVxcXCJlZS1pbXBvcnRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5cXG4gICAgICB7e3RyYW5zbGF0ZS5hY2NvdW50LmltcG9ydH19XFxuICAgIDwvbGk+XFxuICAgIDxsaSBpZD1cXFwiZWUtZXhwb3J0XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+XFxuICAgICAge3t0cmFuc2xhdGUuYWNjb3VudC5leHBvcnR9fVxcbiAgICA8L2xpPlxcbiAgPC91bD5cXG5cXG4gIDwhLS0gRXhwbG9yYXRpb25zXFxuICA8aDMgY2xhc3M9XFxcInNlY3Rpb24tdGl0bGVcXFwiPkV4cGxvcmF0aW9uczwvaDM+XFxuICA8dGFibGU+XFxuICAgIDx0aGVhZD5cXG4gICAgICA8dGg+TG9jYXRpb248L3RoPlxcbiAgICAgIDx0aD5EZWxldGU8L3RoPlxcbiAgICA8L3RoZWFkPlxcbiAgICA8dGJvZHk+XFxuICAgICAgPHRkPlJvY2s8L3RkPlxcbiAgICAgIDx0ZD5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPkRlbGV0ZTwvZGl2PlxcbiAgICAgIDwvdGQ+XFxuICAgIDwvdGJvZHk+XFxuICA8L3RhYmxlPlxcbiAgLS0+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YSBpZD1cXFwid2lzaGxpc3QtYnV0dG9uXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QudGl0bGVcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvYT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8YSBpZD1cXFwid2lzaGxpc3QtYnV0dG9uXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uXFxcIj5cXG4gIHt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC50aXRsZX19XFxuPC9hPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPHN0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgdGFibGUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5hY3Rpb24tcGljdG8ge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDUwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiA1MHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBjdXJzb3I6IHBvaW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmFjdGlvbi1waWN0bzpob3Zlcjpub3QoLmRpc2FibGVkKSxcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5lZGl0LXByaWNlOmhvdmVyIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgYW5pbWF0aW9uOiBidXR0b24tYm91bmNlIDMwMG1zIGxpbmVhciBmb3J3YXJkcztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDUpIGNvbnRyYXN0KDEuMSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmVkaXQtcHJpY2Uge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBjdXJzb3I6IHBvaW50ZXI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaW1nLmRpc2FibGVkIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZmlsdGVyOiBncmF5c2NhbGUoMSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLml0ZW0taWNvbi1jb250YWluZXIge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuaXRlbS1pY29uIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDEwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDEwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvc3R5bGU+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjx0YWJsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx0aGVhZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPHRyPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0Lmljb25cIixjLHAsMCkpKTt0LmIoXCI8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0Lm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5zdGF0dXNcIixjLHAsMCkpKTt0LmIoXCI8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmFjdGlvbnNcIixjLHAsMCkpKTt0LmIoXCI8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L3RyPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC90aGVhZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx0Ym9keT5cIik7dC5iKFwiXFxuXCIgKyBpKTtpZih0LnModC5mKFwid2lzaGxpc3RcIixjLHAsMSksYyxwLDAsODcyLDIyNjAsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiAgICA8dHIgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBkYXRhLWljb249XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gSWNvbiAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpdGVtLWljb24tY29udGFpbmVyXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgPGltZyBjbGFzcz1cXFwiaXRlbS1pY29uXFxcIiBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiIGFsdD1cXFwiXCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIlxcXCIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicmFyaXR5LW1hcmtlci1cIik7dC5iKHQudih0LmYoXCJyYXJpdHlcIixjLHAsMCkpKTt0LmIoXCJcXFwiPjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC90ZD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBOYW1lIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LW5hbWVcXFwiPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXR5cGVcXFwiPlwiKTt0LmIodC52KHQuZihcImFic3RyYWN0VHlwZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvdGQ+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gUHJpY2UgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBjbGFzcz1cXFwiZWRpdC1wcmljZVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuY2hhbmdlX3ByaWNlXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5mKFwicHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIiBhbHQ9XFxcIm1hYW5hc1xcXCI+PC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC90ZD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBFcnJvciAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8cCBjbGFzcz1cXFwiZXJyb3JcXFwiPlwiKTt0LmIodC52KHQuZihcImVycm9yXCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvdGQ+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gQWN0aW9ucyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8aW1nXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGNsYXNzPVxcXCJhY3Rpb24tcGljdG8gcmVzZXQtaXRlbS1zdGF0dXMgXCIpO2lmKCF0LnModC5mKFwiZXJyb3JcIixjLHAsMSksYyxwLDEsMCwwLFwiXCIpKXt0LmIoXCJkaXNhYmxlZFwiKTt9O3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL3Jlc2V0LWJ0bi5wbmdcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIHRpdGxlPVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnJlc2V0X3Rvb2x0aXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGFsdD1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5yZXNldFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8aW1nXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGNsYXNzPVxcXCJhY3Rpb24tcGljdG8gZGVsZXRlLXdpc2hsaXN0LWl0ZW1cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9kZWxldGUucG5nXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICB0aXRsZT1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5kZWxldGVfdG9vbHRpcFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgYWx0PVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmRlbGV0ZVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC90ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC90cj5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgIDwvdGJvZHk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC90YWJsZT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8c3R5bGU+XFxuICB0YWJsZSB7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuXFxuICAuYWN0aW9uLXBpY3RvIHtcXG4gICAgaGVpZ2h0OiA1MHB4O1xcbiAgICB3aWR0aDogNTBweDtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgfVxcblxcbiAgLmFjdGlvbi1waWN0bzpob3Zlcjpub3QoLmRpc2FibGVkKSxcXG4gIC5lZGl0LXByaWNlOmhvdmVyIHtcXG4gICAgYW5pbWF0aW9uOiBidXR0b24tYm91bmNlIDMwMG1zIGxpbmVhciBmb3J3YXJkcztcXG4gICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDUpIGNvbnRyYXN0KDEuMSk7XFxuICB9XFxuXFxuICAuZWRpdC1wcmljZSB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gIH1cXG5cXG4gIGltZy5kaXNhYmxlZCB7XFxuICAgIGZpbHRlcjogZ3JheXNjYWxlKDEpO1xcbiAgfVxcblxcbiAgLml0ZW0taWNvbi1jb250YWluZXIge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIH1cXG5cXG4gIC5pdGVtLWljb24ge1xcbiAgICB3aWR0aDogMTAwcHg7XFxuICAgIGhlaWdodDogMTAwcHg7XFxuICB9XFxuPC9zdHlsZT5cXG5cXG48dGFibGU+XFxuICA8dGhlYWQ+XFxuICAgIDx0cj5cXG4gICAgICA8dGg+e3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0Lmljb259fTwvdGg+XFxuICAgICAgPHRoPnt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5uYW1lfX08L3RoPlxcbiAgICAgIDx0aD57e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QucHJpY2V9fTwvdGg+XFxuICAgICAgPHRoPnt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5zdGF0dXN9fTwvdGg+XFxuICAgICAgPHRoPnt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5hY3Rpb25zfX08L3RoPlxcbiAgICA8L3RyPlxcbiAgPC90aGVhZD5cXG4gIDx0Ym9keT5cXG4gICAge3sjd2lzaGxpc3R9fVxcbiAgICA8dHIgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBkYXRhLWljb249XFxcInt7aWNvbn19XFxcIj5cXG4gICAgICA8IS0tIEljb24gLS0+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiaXRlbS1pY29uLWNvbnRhaW5lclxcXCI+XFxuICAgICAgICAgIDxpbWcgY2xhc3M9XFxcIml0ZW0taWNvblxcXCIgc3JjPVxcXCJ7e2ljb259fVxcXCIgYWx0PVxcXCJ7e25hbWV9fVxcXCIgLz5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwicmFyaXR5LW1hcmtlci17e3Jhcml0eX19XFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvdGQ+XFxuXFxuICAgICAgPCEtLSBOYW1lIC0tPlxcbiAgICAgIDx0ZD5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LW5hbWVcXFwiPnt7bmFtZX19PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC10eXBlXFxcIj57e2Fic3RyYWN0VHlwZX19PC9kaXY+XFxuICAgICAgPC90ZD5cXG5cXG4gICAgICA8IS0tIFByaWNlIC0tPlxcbiAgICAgIDx0ZD5cXG4gICAgICAgIDxkaXZcXG4gICAgICAgICAgY2xhc3M9XFxcImVkaXQtcHJpY2VcXFwiXFxuICAgICAgICAgIHRpdGxlPVxcXCJ7e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuY2hhbmdlX3ByaWNlfX1cXFwiXFxuICAgICAgICA+XFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj57e3ByaWNlfX08L3NwYW4+XFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIiBhbHQ9XFxcIm1hYW5hc1xcXCI+PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC90ZD5cXG5cXG4gICAgICA8IS0tIEVycm9yIC0tPlxcbiAgICAgIDx0ZD5cXG4gICAgICAgIDxwIGNsYXNzPVxcXCJlcnJvclxcXCI+e3tlcnJvcn19PC9wPlxcbiAgICAgIDwvdGQ+XFxuXFxuICAgICAgPCEtLSBBY3Rpb25zIC0tPlxcbiAgICAgIDx0ZD5cXG4gICAgICAgIDxpbWdcXG4gICAgICAgICAgY2xhc3M9XFxcImFjdGlvbi1waWN0byByZXNldC1pdGVtLXN0YXR1cyB7e15lcnJvcn19ZGlzYWJsZWR7ey9lcnJvcn19XFxcIlxcbiAgICAgICAgICBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvcmVzZXQtYnRuLnBuZ1xcXCJcXG4gICAgICAgICAgdGl0bGU9XFxcInt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5yZXNldF90b29sdGlwfX1cXFwiXFxuICAgICAgICAgIGFsdD1cXFwie3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnJlc2V0fX1cXFwiXFxuICAgICAgICAvPlxcbiAgICAgICAgPGltZ1xcbiAgICAgICAgICBjbGFzcz1cXFwiYWN0aW9uLXBpY3RvIGRlbGV0ZS13aXNobGlzdC1pdGVtXFxcIlxcbiAgICAgICAgICBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvZGVsZXRlLnBuZ1xcXCJcXG4gICAgICAgICAgdGl0bGU9XFxcInt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5kZWxldGVfdG9vbHRpcH19XFxcIlxcbiAgICAgICAgICBhbHQ9XFxcInt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5kZWxldGV9fVxcXCJcXG4gICAgICAgIC8+XFxuICAgICAgPC90ZD5cXG4gICAgPC90cj5cXG4gICAge3svd2lzaGxpc3R9fVxcbiAgPC90Ym9keT5cXG48L3RhYmxlPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsImltcG9ydCB7IEJvZHlMb2NhdGlvbiB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9ib2R5X2xvY2F0aW9uLmVudW1cIlxuaW1wb3J0IHsgQ2F0ZWdvcnlOdW1iZXIgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvY2F0ZWdvcnkuZW51bVwiXG5pbXBvcnQgeyBHdWFyZCB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9ndWFyZC5lbnVtXCJcbmltcG9ydCB7IFJhcml0eSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9yYXJpdHkuZW51bVwiXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL3R5cGUuZW51bVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhamF4U2VhcmNoKGRhdGE6IHtcbiAgdHlwZT86IFR5cGVcbiAgYm9keUxvY2F0aW9uPzogQm9keUxvY2F0aW9uXG4gIGNhdGVnb3J5PzogQ2F0ZWdvcnlOdW1iZXJcbiAgcmFyaXR5PzogUmFyaXR5XG4gIHByaWNlPzogbnVtYmVyIHwgXCJcIlxuICBndWFyZD86IEd1YXJkXG4gIC8qKiBQYWdlIG51bWJlciwgaW5kZXhlZCBieSAxICovXG4gIHBhZ2U6IG51bWJlclxuICBuYW1lPzogc3RyaW5nXG59KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgZGF0YSA9IHtcbiAgICAuLi57XG4gICAgICB0eXBlOiBUeXBlLkFsbCxcbiAgICAgIGJvZHlMb2NhdGlvbjogQm9keUxvY2F0aW9uLkFsbCxcbiAgICAgIGNhdGVnb3J5OiBDYXRlZ29yeU51bWJlci5hbGwsXG4gICAgICByYXJpdHk6IFJhcml0eS5hbGwsXG4gICAgICBwcmljZTogXCJcIixcbiAgICAgIGd1YXJkOiBHdWFyZC5hbnksXG4gICAgICBwYWdlOiAxLFxuICAgICAgbmFtZTogXCJcIixcbiAgICB9LFxuICAgIC4uLmRhdGEsXG4gIH1cblxuICBjb25zdCBJVEVNU19QRVJfUEFHRSA9IDhcbiAgcmV0dXJuIChhd2FpdCAkLmdldChcIi9tYXJrZXRwbGFjZS9hamF4X3NlYXJjaFwiLCB7XG4gICAgLi4uZGF0YSxcbiAgICBmcm9tOiAoZGF0YS5wYWdlIC0gMSkgKiBJVEVNU19QRVJfUEFHRSxcbiAgICB0bzogSVRFTVNfUEVSX1BBR0UsXG4gIH0pKSBhcyBzdHJpbmdcbn1cbiIsImltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidXkoaXRlbUlkOiBudW1iZXIpOiBQcm9taXNlPFBhY2tldDxcIlwiPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9tYXJrZXRwbGFjZS9idXlcIixcbiAgICAgIHsgaWQ6IGl0ZW1JZCB9LFxuICAgICAgKGpzb246IFBhY2tldDxcIlwiPik6IHZvaWQgPT4ge1xuICAgICAgICBMb2NhbFN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImpzb25cIlxuICAgIClcbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgRXhwbG9yYXRpb25SZXN1bHRzRGF0YSB9IGZyb20gXCIuLi9hcGkvZXhwbG9yYXRpb25fcmVzdWx0c19kYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYXB0dXJlRW5kKCk6IFByb21pc2U8UGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICB2b2lkICQucG9zdChcbiAgICAgIFwiL3BldC9jYXB0dXJlL2VuZFwiLFxuICAgICAgKGpzb246IFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPik6IHZvaWQgPT4ge1xuICAgICAgICBMb2NhbFN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IENoYW5nZVJlZ2lvbkRhdGEgfSBmcm9tIFwiLi4vYXBpL2NoYW5nZV9yZWdpb25fZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFBhY2tldCB9IGZyb20gXCIuLi9hcGkvcGFja2V0XCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hhbmdlUmVnaW9uKFxuICBuZXdSZWdpb25JZDogbnVtYmVyXG4pOiBQcm9taXNlPFBhY2tldDxDaGFuZ2VSZWdpb25EYXRhPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+PigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvcGV0L2NoYW5nZVJlZ2lvblwiLFxuICAgICAgeyBuZXdSZWdpb25JZCB9LFxuICAgICAgKGpzb246IFBhY2tldDxDaGFuZ2VSZWdpb25EYXRhPik6IHZvaWQgPT4ge1xuICAgICAgICBMb2NhbFN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UmVnaW9uID0ganNvbi5kYXRhLmN1cnJlbnRSZWdpb25cblxuICAgICAgICBwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gPVxuICAgICAgICAgIHR5cGVvZiBqc29uLmRhdGEucGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoganNvbi5kYXRhLnBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvblxuXG4gICAgICAgIHRpbWVMZWZ0RXhwbG9yYXRpb24gPVxuICAgICAgICAgIHR5cGVvZiBqc29uLmRhdGEudGltZUxlZnRFeHBsb3JhdGlvbiA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGpzb24uZGF0YS50aW1lTGVmdEV4cGxvcmF0aW9uXG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBFeHBsb3JhdGlvblJlc3VsdHNEYXRhIH0gZnJvbSBcIi4uL2FwaS9leHBsb3JhdGlvbl9yZXN1bHRzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGxvcmF0aW9uUmVzdWx0cygpOiBQcm9taXNlPFxuICBQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT5cbj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+PigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvcGV0L2V4cGxvcmF0aW9uUmVzdWx0c1wiLFxuICAgICAgKGpzb246IFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPik6IHZvaWQgPT4ge1xuICAgICAgICBMb2NhbFN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0pXG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIE1ldGEge1xuICBldmVudDogTWV0YUV2ZW50XG4gIG1lc3NhZ2U6IE1lc3NhZ2VcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1xuICBwZXQ6IFBldFxuICBwbGF5ZXI6IFBsYXllclxuICBwdXJyb3Nob3A6IFB1cnJvc2hvcFxufVxuXG50eXBlIE1ldGFFdmVudCA9IFwiZWFzdGVyXCIgfCBudWxsXG5cbmludGVyZmFjZSBNZXNzYWdlIHtcbiAgdW5yZWFkOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFBldCB7XG4gIC8qKiBFeHBsb3JhdGlvbiBpcyBmaW5pc2hlZCAqL1xuICBleHBsb3JhdGlvbjogYm9vbGVhblxuICBwb3J0cmFpdDogc3RyaW5nXG59XG5cbmludGVyZmFjZSBQbGF5ZXIge1xuICBkYWlseU1hYW5hOiBib29sZWFuXG4gIGdvbGQ6IEN1cnJlbmN5XG4gIGxlZ2FjeUN1cnJlbmN5OiBDdXJyZW5jeVxuICBtYWFuYTogQ3VycmVuY3lcbiAgcHVycm9wYXNzOiBQdXJyb3Bhc3NcbiAgdW5yZWFkTmV3czogbnVsbFxuICB4cDogWFBcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXJyZW5jeSB7XG4gIGNoYW5nZTogQ2hhbmdlXG4gIHRleHQ6IHN0cmluZ1xuICB2YWx1ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBDaGFuZ2Uge1xuICB0ZXh0OiBzdHJpbmdcbiAgdmFsdWU6IG51bWJlclxufVxuXG5pbnRlcmZhY2UgUHVycm9wYXNzIHtcbiAgY2hhbmdlOiBDaGFuZ2VcbiAgdGV4dDogc3RyaW5nXG4gIHZhbHVlOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFhQIHtcbiAgZ29hbDogbnVtYmVyXG4gIGxldmVsOiBudW1iZXJcbiAgdmFsdWU6IG51bWJlclxufVxuXG5pbnRlcmZhY2UgUHVycm9zaG9wIHtcbiAgc3RhdHVzOiBQdXJyb3Nob3BTdGF0dXNcbn1cblxuaW50ZXJmYWNlIE5vdGlmaWNhdGlvbnMge1xuICBkaXNwbGF5VGltZTogbnVtYmVyXG4gIG1lc3NhZ2U6IHN0cmluZ1xuICB0eXBlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGVudW0gUHVycm9zaG9wU3RhdHVzIHtcbiAgZGlzYWJsZWQgPSBcImRpc2FibGVkXCIsXG4gIGVuYWJsZWQgPSBcImVuYWJsZWRcIixcbn1cbiIsImV4cG9ydCBlbnVtIFJlc3VsdCB7XG4gIGVycm9yID0gXCJlcnJvclwiLFxuICBzdWNjZXNzID0gXCJzdWNjZXNzXCIsXG59XG4iLCJpbXBvcnQgd2FyZHJvYmUgZnJvbSBcIi4vd2FyZHJvYmVcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFwcGVhcmFuY2VVSSgpOiB2b2lkIHtcbiAgc2V0dXBCYWNrZ3JvdW5kKClcbiAgc2V0dXBMZWZ0UGFuZWwoKVxuICBzZXR1cFJpZ2h0UGFuZWwoKVxuXG4gIGlmICh3YXJkcm9iZS5hdmFpbGFibGVJdGVtcykgYXZhaWxhYmxlSXRlbXMgPSB3YXJkcm9iZS5hdmFpbGFibGVJdGVtc1xuICBlbHNlIHdhcmRyb2JlLmF2YWlsYWJsZUl0ZW1zID0gYXZhaWxhYmxlSXRlbXNcbn1cblxuZnVuY3Rpb24gc2V0dXBCYWNrZ3JvdW5kKCk6IHZvaWQge1xuICBjb25zdCBiYWNrZ3JvdW5kID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcbiAgICBcIiNhdmF0YXItYmFja2dyb3VuZCBpbWdcIlxuICApXG4gIGlmIChiYWNrZ3JvdW5kKSB7XG4gICAgYmFja2dyb3VuZC5zdHlsZS5maWx0ZXIgPSBcInVuc2V0XCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLmhlaWdodCA9IFwidW5zZXRcIlxuICAgIGJhY2tncm91bmQuc3R5bGUubWFzayA9XG4gICAgICBcImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgYmxhY2sgNTAlLCB0cmFuc3BhcmVudCAxMDAlKVwiXG4gICAgYmFja2dyb3VuZC5zdHlsZS5taW5IZWlnaHQgPSBcIjEwMHZoXCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLm1pbldpZHRoID0gXCI1MHZ3XCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiXG4gICAgYmFja2dyb3VuZC5zdHlsZS50cmFuc2Zvcm0gPSBcInVuc2V0XCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLndpZHRoID0gXCJ1bnNldFwiXG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBSaWdodFBhbmVsKCk6IHZvaWQge1xuICBjb25zdCByaWdodFBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBlYXJhbmNlLXJpZ2h0XCIpXG4gIGlmIChyaWdodFBhbmVsKSByaWdodFBhbmVsLnN0eWxlLnBhZGRpbmdUb3AgPSBcIjgwcHhcIlxufVxuXG5mdW5jdGlvbiBzZXR1cExlZnRQYW5lbCgpOiB2b2lkIHtcbiAgY29uc3QgcHJldmlld091dGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBlYXJhbmNlLXByZXZpZXctb3V0ZXJcIilcbiAgaWYgKHByZXZpZXdPdXRlcikge1xuICAgIHByZXZpZXdPdXRlci5zdHlsZS5wYWRkaW5nID0gXCIwcHhcIlxuICB9XG5cbiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwZWFyYW5jZS1wcmV2aWV3XCIpXG4gIGlmIChwcmV2aWV3KSB7XG4gICAgcHJldmlldy5zdHlsZS5sZWZ0ID0gXCIwXCJcbiAgICBwcmV2aWV3LnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiXG4gICAgcHJldmlldy5zdHlsZS50b3AgPSBcImNhbGMoNTAlIC0gdmFyKC0tdG9wYmFyLWhlaWdodCkpXCJcbiAgICBwcmV2aWV3LnN0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlWSgtNTAlKVwiXG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLXByZXZpZXcgY2FudmFzXCJcbiAgKVxuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLm1heEhlaWdodCA9IFwiMTAwdmhcIlxuICAgIGNhbnZhcy5zdHlsZS5tYXhXaWR0aCA9IFwiNTB2d1wiXG4gIH1cbn1cbiIsImltcG9ydCB7IHRyaW1JY29uIH0gZnJvbSBcIi4uL2VsZGFyeWFfdXRpbFwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VDYXRlZ29yeSB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2NhdGVnb3J5XCJcbmltcG9ydCB0eXBlIHsgQXBwZWFyYW5jZUdyb3VwIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2FwcGVhcmFuY2VfZ3JvdXBcIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlSXRlbSB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlIH0gZnJvbSBcIi4vZW51bXMvYXBwZWFyYW5jZV9jYXRlZ29yeV9jb2RlLmVudW1cIlxuXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnlDb250YWluZXJEYXRhU2V0KFxuICBjYXRlZ29yeUNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnRcbik6IEFwcGVhcmFuY2VDYXRlZ29yeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgY2F0ZWdvcnlpZCwgY2F0ZWdvcnksIGNhdGVnb3J5bmFtZSB9ID0gY2F0ZWdvcnlDb250YWluZXIuZGF0YXNldFxuICBpZiAoIWNhdGVnb3J5aWQgfHwgIWNhdGVnb3J5IHx8ICFjYXRlZ29yeW5hbWUpIHJldHVyblxuICByZXR1cm4ge1xuICAgIGNhdGVnb3J5aWQ6IE51bWJlcihjYXRlZ29yeWlkKSxcbiAgICBjYXRlZ29yeTogY2F0ZWdvcnkgYXMgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZSxcbiAgICBjYXRlZ29yeW5hbWUsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5R3JvdXBEYXRhU2V0KFxuICBncm91cEl0ZW06IEhUTUxMSUVsZW1lbnQsXG4gIGFwcGVhcmFuY2VDYXRlZ29yeTogQXBwZWFyYW5jZUNhdGVnb3J5XG4pOiBBcHBlYXJhbmNlR3JvdXAgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IGl0ZW1pZCwgZ3JvdXAsIG5hbWUsIHJhcml0eSwgcmFyaXR5bmFtZSB9ID0gZ3JvdXBJdGVtLmRhdGFzZXRcbiAgaWYgKCFpdGVtaWQgfHwgIWdyb3VwIHx8ICFuYW1lIHx8ICFyYXJpdHkgfHwgIXJhcml0eW5hbWUpIHJldHVyblxuICByZXR1cm4ge1xuICAgIC4uLmFwcGVhcmFuY2VDYXRlZ29yeSxcbiAgICBpdGVtaWQ6IE51bWJlcihpdGVtaWQpLFxuICAgIGdyb3VwOiBOdW1iZXIoZ3JvdXApLFxuICAgIG5hbWUsXG4gICAgcmFyaXR5LFxuICAgIHJhcml0eW5hbWUsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZW1EYXRhU2V0KFxuICBsaTogSFRNTExJRWxlbWVudCxcbiAgYXBwZWFyYW5jZUdyb3VwOiBBcHBlYXJhbmNlR3JvdXBcbik6IEFwcGVhcmFuY2VJdGVtIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyBpdGVtaWQsIG5hbWUsIHJhcml0eSwgcmFyaXR5bmFtZSB9ID0gbGkuZGF0YXNldFxuICBjb25zdCBpY29uID0gbGkucXVlcnlTZWxlY3RvcihcImltZ1wiKT8uc3JjXG4gIGlmICghaXRlbWlkIHx8ICFuYW1lIHx8ICFyYXJpdHkgfHwgIXJhcml0eW5hbWUgfHwgIWljb24pIHJldHVyblxuXG4gIHJldHVybiB7XG4gICAgLi4uYXBwZWFyYW5jZUdyb3VwLFxuICAgIGl0ZW1pZDogTnVtYmVyKGl0ZW1pZCksXG4gICAgbmFtZSxcbiAgICByYXJpdHksXG4gICAgcmFyaXR5bmFtZSxcbiAgICBpY29uOiB0cmltSWNvbihpY29uKSxcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgaXNFbnVtIH0gZnJvbSBcIi4uL3RzX3V0aWxcIlxuaW1wb3J0IHsgbG9hZEZhdm91cml0ZXMgfSBmcm9tIFwiLi4vdWkvZmF2b3VyaXRlc1wiXG5pbXBvcnQgeyBsb2FkQXBwZWFyYW5jZVVJIH0gZnJvbSBcIi4vYXBwZWFyYW5jZV91aVwiXG5pbXBvcnQge1xuICBjYXRlZ29yeUNvbnRhaW5lckRhdGFTZXQsXG4gIGNhdGVnb3J5R3JvdXBEYXRhU2V0LFxuICBpdGVtRGF0YVNldCxcbn0gZnJvbSBcIi4vZGF0YV9zZXRcIlxuaW1wb3J0IHsgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZSB9IGZyb20gXCIuL2VudW1zL2FwcGVhcmFuY2VfY2F0ZWdvcnlfY29kZS5lbnVtXCJcbmltcG9ydCB7IG9wZW5DYXRlZ29yeSwgb3Blbkdyb3VwIH0gZnJvbSBcIi4vZmF2b3VyaXRlc19hY3Rpb25zXCJcbmltcG9ydCB7IGxvYWRIaWRkZW5DYXRlZ29yeSwgdW5sb2FkSGlkZGVuQ2F0ZWdvcmllcyB9IGZyb20gXCIuL2hpZGRlblwiXG5pbXBvcnQgd2FyZHJvYmUgZnJvbSBcIi4vd2FyZHJvYmVcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZERyZXNzaW5nRXhwZXJpZW5jZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL3BsYXllci9hcHBlYXJhbmNlXCIpKSByZXR1cm5cblxuICBoYW5kbGVkQ2F0ZWdvcmllcy5jbGVhcigpXG4gIGxvYWRpbmcgPSBmYWxzZVxuXG4gIGxvYWRBcHBlYXJhbmNlVUkoKVxuXG4gIC8vIFNldHVwIGNhdGVnb3JpZXNcbiAgZm9yIChjb25zdCBsaSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiI3dhcmRyb2JlLW1lbnU+bGksICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3JpZXMgbGlcIlxuICApKSB7XG4gICAgY29uc3QgeyBjYXRlZ29yeSB9ID0gbGkuZGF0YXNldFxuICAgIGlmICghaXNFbnVtKGNhdGVnb3J5LCBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlKSkgY29udGludWVcblxuICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHtcbiAgICAgIGNhc2UgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5iYWNrZ3JvdW5kOlxuICAgICAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT5cbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVlLWNhdGVnb3J5XCIpPy5yZW1vdmUoKVxuICAgICAgICApXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICBjYXNlIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuZmF2b3JpdGVzOlxuICAgICAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZWUtY2F0ZWdvcnlcIik/LnJlbW92ZSgpXG4gICAgICAgICAgdm9pZCBoYW5kbGVDYXRlZ29yeShjYXRlZ29yeSlcbiAgICAgICAgfSlcbiAgICAgICAgY29udGludWVcbiAgICAgIGNhc2UgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5hdHRpYzpcbiAgICAgICAgY29udGludWVcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChcImFwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzXCIpXG4gICAgICAgICAgICA/LnJlbW92ZSgpXG4gICAgICAgICAgdm9pZCBoYW5kbGVDYXRlZ29yeShjYXRlZ29yeSlcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpXG4gIGF3YWl0IGxvYWRCYWNrZ3JvdW5kKClcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGNhdGVnb3J5IGNvbnRhaW5lciBmb3IgdGhlIGNsaWNrZWQgY2F0ZWdvcnkgYW5kIGxvYWQgaXRzIGdyb3Vwc1xuICogQHJldHVybnMgQ2F0ZWdvcnkgY29udGFpbmVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNhdGVnb3J5KFxuICBjYXRlZ29yeTogQXBwZWFyYW5jZUNhdGVnb3J5Q29kZVxuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudCB8IG51bGw+IHtcbiAgY29uc3QgYXBwZWFyYW5jZUl0ZW1zID1cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gIGlmICghYXBwZWFyYW5jZUl0ZW1zKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IG9sZENhdENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIGAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS0ke2NhdGVnb3J5fWBcbiAgKVxuXG4gIGlmIChvbGRDYXRDb250YWluZXIpIHtcbiAgICBhd2FpdCBvbkFwcGVhcmFuY2VJdGVtc0NhdGVnb3J5KGNhdGVnb3J5LCBhcHBlYXJhbmNlSXRlbXMsIG9sZENhdENvbnRhaW5lcilcbiAgICByZXR1cm4gb2xkQ2F0Q29udGFpbmVyXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG4gICAgICBjb25zdCBuZXdDYXRDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LSR7Y2F0ZWdvcnl9YFxuICAgICAgKVxuICAgICAgaWYgKCFuZXdDYXRDb250YWluZXIpIHJldHVyblxuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG5cbiAgICAgIHZvaWQgKGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgYXdhaXQgb25BcHBlYXJhbmNlSXRlbXNDYXRlZ29yeShcbiAgICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgICBhcHBlYXJhbmNlSXRlbXMsXG4gICAgICAgICAgbmV3Q2F0Q29udGFpbmVyXG4gICAgICAgIClcbiAgICAgICAgcmVzb2x2ZShuZXdDYXRDb250YWluZXIpXG4gICAgICB9KSgpXG4gICAgfSkub2JzZXJ2ZShhcHBlYXJhbmNlSXRlbXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pXG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9uQXBwZWFyYW5jZUl0ZW1zQ2F0ZWdvcnkoXG4gIGNhdGVnb3J5OiBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLFxuICBhcHBlYXJhbmNlSXRlbXM6IEhUTUxEaXZFbGVtZW50LFxuICBjYXRlZ29yeUNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnRcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoY2F0ZWdvcnkgPT09IEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuZmF2b3JpdGVzKSBsb2FkRmF2b3VyaXRlcygpXG4gIGVsc2Uge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMjApKVxuICAgIGxvYWRFZUl0ZW1zKGFwcGVhcmFuY2VJdGVtcywgY2F0ZWdvcnlDb250YWluZXIpXG4gICAgYXdhaXQgaGFuZGxlR3JvdXBzKGNhdGVnb3J5Q29udGFpbmVyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRFZUl0ZW1zKFxuICBhcHBlYXJhbmNlSXRlbXM6IEhUTUxEaXZFbGVtZW50LFxuICBjYXRlZ29yeUNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnRcbik6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCB7XG4gIC8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBjYXRlZ29yeVxuICBjb25zdCBhcHBlYXJhbmNlQ2F0ZWdvcnkgPSBjYXRlZ29yeUNvbnRhaW5lckRhdGFTZXQoY2F0ZWdvcnlDb250YWluZXIpXG4gIGlmICghYXBwZWFyYW5jZUNhdGVnb3J5KSByZXR1cm4gbnVsbFxuICB3YXJkcm9iZS5zZXRDYXRlZ29yeShhcHBlYXJhbmNlQ2F0ZWdvcnkpXG4gIGNhdGVnb3J5Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIilcbiAgY2F0ZWdvcnlDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXG5cbiAgLy8gU2V0dXAgYXBwZWFyYW5jZV9pdGVtc19jYXRlZ29yeVxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19jYXRlZ29yeS5odG1sXCIpXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZWUtY2F0ZWdvcnlcIik/LnJlbW92ZSgpXG4gIGFwcGVhcmFuY2VJdGVtcy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoeyAuLi5hcHBlYXJhbmNlQ2F0ZWdvcnksIHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgY29uc3QgZWVJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2VlLWl0ZW1zXCIpXG4gIGlmICghZWVJdGVtcykgcmV0dXJuIG51bGxcbiAgZWVJdGVtcy5kYXRhc2V0LmNhdGVnb3J5aWQgPSBhcHBlYXJhbmNlQ2F0ZWdvcnkuY2F0ZWdvcnlpZC50b1N0cmluZygpXG4gIGVlSXRlbXMuZGF0YXNldC5jYXRlZ29yeSA9IGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeVxuICBlZUl0ZW1zLmRhdGFzZXQuY2F0ZWdvcnluYW1lID0gYXBwZWFyYW5jZUNhdGVnb3J5LmNhdGVnb3J5bmFtZVxuICByZXR1cm4gZWVJdGVtc1xufVxuXG5jb25zdCBoYW5kbGVkQ2F0ZWdvcmllcyA9IG5ldyBTZXQ8QXBwZWFyYW5jZUNhdGVnb3J5Q29kZT4oKVxuXG4vKiogTG9hZCBlYWNoIGdyb3VwcyBzeW5jaHJvbm91c2x5IGFuZCBhZGQgdGhlbSB0byBhIGN1c3RvbSBjb250YWluZXIuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVHcm91cHMoY2F0ZWdvcnlDb250YWluZXI6IEhUTUxEaXZFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGFwcGVhcmFuY2VDYXRlZ29yeSA9IGNhdGVnb3J5Q29udGFpbmVyRGF0YVNldChjYXRlZ29yeUNvbnRhaW5lcilcbiAgaWYgKCFhcHBlYXJhbmNlQ2F0ZWdvcnkpIHJldHVyblxuICB3YXJkcm9iZS5zZXRDYXRlZ29yeShhcHBlYXJhbmNlQ2F0ZWdvcnkpXG4gIGNhdGVnb3J5Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIilcbiAgY2F0ZWdvcnlDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXG5cbiAgY29uc3QgaGFuZGxlZCA9IGhhbmRsZWRDYXRlZ29yaWVzLmhhcyhhcHBlYXJhbmNlQ2F0ZWdvcnkuY2F0ZWdvcnkpXG4gIGhhbmRsZWRDYXRlZ29yaWVzLmFkZChhcHBlYXJhbmNlQ2F0ZWdvcnkuY2F0ZWdvcnkpXG5cbiAgbG9hZEhpZGRlbkNhdGVnb3J5KGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeSlcbiAgZm9yIChjb25zdCBsaSBvZiBjYXRlZ29yeUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwibGkuYXBwZWFyYW5jZS1pdGVtLWdyb3VwXCJcbiAgKSkge1xuICAgIGNvbnN0IGFwcGVhcmFuY2VHcm91cCA9IGNhdGVnb3J5R3JvdXBEYXRhU2V0KGxpLCBhcHBlYXJhbmNlQ2F0ZWdvcnkpXG4gICAgaWYgKCFhcHBlYXJhbmNlR3JvdXA/Lmdyb3VwKSBicmVha1xuICAgIHdhcmRyb2JlLnNldEdyb3VwKGFwcGVhcmFuY2VHcm91cClcblxuICAgIGlmIChcbiAgICAgICFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtJHthcHBlYXJhbmNlR3JvdXAuZ3JvdXB9YFxuICAgICAgKSAmJlxuICAgICAgIWhhbmRsZWRcbiAgICAgIC8vICYmICFsb2FkSGlkZGVuR3JvdXAoYXBwZWFyYW5jZUdyb3VwLmdyb3VwKVxuICAgIClcbiAgICAgIGF3YWl0IG9wZW5Hcm91cChhcHBlYXJhbmNlR3JvdXAuZ3JvdXApXG5cbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgIGAjYXBwZWFyYW5jZS1pdGVtcy1ncm91cC0ke2FwcGVhcmFuY2VHcm91cC5ncm91cH1gXG4gICAgKVxuICAgIGlmICghZGl2KSBicmVha1xuICAgIGRpdi5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpXG5cbiAgICBjb25zdCBzY3JpcHQgPSBkaXYucXVlcnlTZWxlY3RvcihcInNjcmlwdFwiKSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbFxuICAgIGlmIChzY3JpcHQpIHNldFRpbWVvdXQoc2NyaXB0LmlubmVySFRNTCwgMClcblxuICAgIGNvbnN0IG91dGVySFRNTCA9IEFycmF5LmZyb20oXG4gICAgICBkaXYucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcImxpLmFwcGVhcmFuY2UtaXRlbVwiKVxuICAgIClcbiAgICAgIC5tYXAobGkgPT4ge1xuICAgICAgICBjb25zdCBhcHBlYXJhbmNlSXRlbSA9IGl0ZW1EYXRhU2V0KGxpLCBhcHBlYXJhbmNlR3JvdXApXG4gICAgICAgIGlmICghYXBwZWFyYW5jZUl0ZW0/Lmljb24pIHJldHVybiBsaS5vdXRlckhUTUxcblxuICAgICAgICBsaS5kYXRhc2V0LmNhdGVnb3J5aWQgPSBhcHBlYXJhbmNlSXRlbS5jYXRlZ29yeWlkLnRvU3RyaW5nKClcbiAgICAgICAgbGkuZGF0YXNldC5jYXRlZ29yeSA9IGFwcGVhcmFuY2VJdGVtLmNhdGVnb3J5XG4gICAgICAgIGxpLmRhdGFzZXQuY2F0ZWdvcnluYW1lID0gYXBwZWFyYW5jZUl0ZW0uY2F0ZWdvcnluYW1lXG4gICAgICAgIGxpLmRhdGFzZXQuZ3JvdXAgPSBhcHBlYXJhbmNlSXRlbS5ncm91cC50b1N0cmluZygpXG4gICAgICAgIHdhcmRyb2JlLnNldEl0ZW0oYXBwZWFyYW5jZUl0ZW0pXG5cbiAgICAgICAgcmV0dXJuIGxpLm91dGVySFRNTFxuICAgICAgfSlcbiAgICAgIC5qb2luKFwiXFxuXCIpXG4gICAgd2FyZHJvYmUuYXZhaWxhYmxlSXRlbXMgPSBhdmFpbGFibGVJdGVtc1xuXG4gICAgZGl2LnJlbW92ZSgpXG5cbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYCN3YXJkcm9iZS1tZW51IGxpW2RhdGEtY2F0ZWdvcnk9XCIke2FwcGVhcmFuY2VHcm91cC5jYXRlZ29yeX1cIl0uYWN0aXZlYFxuICAgIClcblxuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIGRvY3VtZW50XG4gICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIiNlZS1pdGVtc1wiKVxuICAgICAgICA/Lmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCBvdXRlckhUTUwpXG5cbiAgICAgIGluaXRpYWxpemVTZWxlY3RlZEl0ZW1zKClcbiAgICAgIGluaXRpYWxpemVIaWRkZW5DYXRlZ29yaWVzKClcbiAgICB9IGVsc2UgaWYgKGhhbmRsZWQpIGJyZWFrXG4gIH1cblxuICBpZiAoIWhhbmRsZWQpIGhhbmRsZWRDYXRlZ29yaWVzLmRlbGV0ZShhcHBlYXJhbmNlQ2F0ZWdvcnkuY2F0ZWdvcnkpXG4gIHVubG9hZEhpZGRlbkNhdGVnb3JpZXMoKVxufVxuXG5sZXQgbG9hZGluZyA9IGZhbHNlXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQmFja2dyb3VuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGxvYWRpbmcpIHJldHVyblxuICBsb2FkaW5nID0gdHJ1ZVxuICBsZXQgc3VjY2VzcyA9IHRydWVcblxuICBjb25zdCBjYXRlZ29yaWVzID0gW1xuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUudW5kZXJ3ZWFyLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuc2tpbixcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLnRhdG9vLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUubW91dGgsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5leWUsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5oYWlyLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuc29jayxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLnNob2UsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5wYW50cyxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmhhbmRBY2Nlc3NvcnksXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS50b3AsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5jb2F0LFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuZ2xvdmUsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5uZWNrbGFjZSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmRyZXNzLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuaGF0LFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuZmFjZUFjY2Vzc29yeSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmJlbHQsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5hbWJpZW50LFxuICBdXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG5cbiAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL3BsYXllci9hcHBlYXJhbmNlXCIpKSB7XG4gICAgICBzdWNjZXNzID0gZmFsc2VcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAjd2FyZHJvYmUtbWVudSBsaVtkYXRhLWNhdGVnb3J5PVwiJHtjYXRlZ29yeX1cIl0uYWN0aXZlYFxuICAgIClcbiAgICBpZiAoYWN0aXZlKSBjb250aW51ZVxuXG4gICAgY29uc3QgY2F0ZWdvcnlDb250YWluZXIgPSBhd2FpdCBvcGVuQ2F0ZWdvcnkoY2F0ZWdvcnkpXG4gICAgaWYgKCFjYXRlZ29yeUNvbnRhaW5lcikge1xuICAgICAgc3VjY2VzcyA9IGZhbHNlXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGxldCBmaW5pc2hlZCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWZpbmlzaGVkKVxuICAgICAgICAkLmZsYXZyTm90aWYoXG4gICAgICAgICAgdGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgICAgIGljb246IGAvc3RhdGljL2ltZy9tYWxsL2NhdGVnb3JpZXMvJHtjYXRlZ29yeX0ucG5nYCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmxvYWRpbmcoXG4gICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTExJRWxlbWVudD4oXG4gICAgICAgICAgICAgICAgYCN3YXJkcm9iZS1tZW51IGxpW2RhdGEtY2F0ZWdvcnk9XCIke2NhdGVnb3J5fVwiXWBcbiAgICAgICAgICAgICAgKT8uZGF0YXNldC5jYXRlZ29yeW5hbWUgPz8gY2F0ZWdvcnlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgIH0sIDEwMDApXG5cbiAgICBhd2FpdCBoYW5kbGVHcm91cHMoY2F0ZWdvcnlDb250YWluZXIpXG4gICAgZmluaXNoZWQgPSB0cnVlXG4gIH1cblxuICBpZiAoc3VjY2VzcykgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmxvYWRlZClcbiAgbG9hZGluZyA9IGZhbHNlXG59XG4iLCJleHBvcnQgZW51bSBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlIHtcbiAgYXR0aWMgPSBcImF0dGljXCIsXG4gIGZhdm9yaXRlcyA9IFwiZmF2b3JpdGVzXCIsXG4gIHVuZGVyd2VhciA9IFwidW5kZXJ3ZWFyXCIsXG4gIHNraW4gPSBcInNraW5cIixcbiAgdGF0b28gPSBcInRhdG9vXCIsXG4gIG1vdXRoID0gXCJtb3V0aFwiLFxuICBleWUgPSBcImV5ZVwiLFxuICBoYWlyID0gXCJoYWlyXCIsXG4gIHNvY2sgPSBcInNvY2tcIixcbiAgc2hvZSA9IFwic2hvZVwiLFxuICBwYW50cyA9IFwicGFudHNcIixcbiAgaGFuZEFjY2Vzc29yeSA9IFwiaGFuZEFjY2Vzc29yeVwiLFxuICB0b3AgPSBcInRvcFwiLFxuICBjb2F0ID0gXCJjb2F0XCIsXG4gIGdsb3ZlID0gXCJnbG92ZVwiLFxuICBuZWNrbGFjZSA9IFwibmVja2xhY2VcIixcbiAgZHJlc3MgPSBcImRyZXNzXCIsXG4gIGhhdCA9IFwiaGF0XCIsXG4gIGZhY2VBY2Nlc3NvcnkgPSBcImZhY2VBY2Nlc3NvcnlcIixcbiAgYmFja2dyb3VuZCA9IFwiYmFja2dyb3VuZFwiLFxuICBiZWx0ID0gXCJiZWx0XCIsXG4gIGFtYmllbnQgPSBcImFtYmllbnRcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCBpbmRleGVkX2RiIGZyb20gXCIuLi9pbmRleGVkX2RiL2luZGV4ZWRfZGJcIlxuaW1wb3J0IHsgcGFyc2VBdmF0YXIgfSBmcm9tIFwiLi4vb3V0Zml0XCJcbmltcG9ydCB7IGxvYWRGYWtlRmF2b3VyaXRlcyB9IGZyb20gXCIuLi91aS9mYXZvdXJpdGVzXCJcbmltcG9ydCB7IHdlYXJPdXRmaXQgfSBmcm9tIFwiLi9mYXZvdXJpdGVzX2FjdGlvbnNcIlxuaW1wb3J0IHR5cGUgeyBGYXZvdXJpdGVPdXRmaXQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Zhdm91cml0ZV9vdXRmaXRcIlxuaW1wb3J0IHR5cGUgeyBQYXJzYWJsZUl0ZW0gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3BhcnNhYmxlX2l0ZW1cIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2F2ZUZhdm91cml0ZSgpOiBQcm9taXNlPEZhdm91cml0ZU91dGZpdCB8IG51bGw+IHtcbiAgY29uc3QgZmF2b3VyaXRlID0gYXdhaXQgc2hvd091dGZpdCgpXG4gIGlmIChmYXZvdXJpdGUpIGF3YWl0IGxvYWRGYWtlRmF2b3VyaXRlcygpXG4gIHJldHVybiBmYXZvdXJpdGVcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRmF2b3VyaXRlKGZhdm91cml0ZTogRmF2b3VyaXRlT3V0Zml0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGluZGV4ZWRfZGIuZGVsZXRlRmF2b3VyaXRlT3V0Zml0KGZhdm91cml0ZSlcbiAgYXdhaXQgbG9hZEZha2VGYXZvdXJpdGVzKClcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd091dGZpdCgpOiBQcm9taXNlPEZhdm91cml0ZU91dGZpdCB8IG51bGw+IHtcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2NyZWF0ZWRfb3V0Zml0X2ZsYXZyLmh0bWxcIilcblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PlxuICAgICQuZmxhdnIoe1xuICAgICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pLFxuICAgICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XG4gICAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJuZXctbGF5b3V0LXBvcHVwXCIpXG4gICAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJjcmVhdGVkLW91dGZpdC1wb3B1cFwiKVxuXG4gICAgICAgIGNvbnN0IHNhdmVCdXR0b24gPVxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KCdbcmVsPVwiYnRuLXNhdmVcIl0nKVxuICAgICAgICBpZiAoIXNhdmVCdXR0b24pIHJldHVyblxuXG4gICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIjY2hvb3NlLW5hbWVcIilcbiAgICAgICAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIpIHNhdmVCdXR0b24uY2xpY2soKVxuXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIiNjaG9vc2UtbmFtZVwiKT8udmFsdWUpXG4gICAgICAgICAgICAgIHNhdmVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcImRpc2FibGVkXCIpXG4gICAgICAgICAgICBlbHNlIHNhdmVCdXR0b24uY2xhc3NMaXN0LmFkZChcImRpc2FibGVkXCIpXG4gICAgICAgICAgfSlcblxuICAgICAgICBzYXZlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJubC1idXR0b25cIiwgXCJubC1idXR0b24tbGdcIiwgXCJkaXNhYmxlZFwiKVxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgY2xvc2U6IHtcbiAgICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICAgIHN0eWxlOiBcImNsb3NlXCIsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNhdmU6IHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnNhdmUsXG4gICAgICAgICAgc3R5bGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIjY2hvb3NlLW5hbWVcIik/LnZhbHVlXG4gICAgICAgICAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZVxuXG4gICAgICAgICAgICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tcIiNhcHBlYXJhbmNlLXByZXZpZXdcIl1cbiAgICAgICAgICAgIGlmICghYXZhdGFyKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcGFyc2VBdmF0YXIoYXZhdGFyKVxuXG4gICAgICAgICAgICB2b2lkIHNhdmVBY3Rpb24obmFtZSwgaXRlbXMsIHJlc29sdmUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dGYXZvdXJpdGUoZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXQpOiB2b2lkIHtcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2Zhdm91cml0ZV9vdXRmaXRfZmxhdnIuaHRtbFwiKVxuXG4gICQuZmxhdnIoe1xuICAgIGNvbnRlbnQ6IHRlbXBsYXRlLnJlbmRlcih7IC4uLmZhdm91cml0ZSwgdHJhbnNsYXRlIH0pLFxuICAgIG9uQnVpbGQ6ICRjb250YWluZXIgPT4ge1xuICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcbiAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJjcmVhdGVkLW91dGZpdC1wb3B1cFwiKVxuICAgIH0sXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xvc2U6IHtcbiAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgc3R5bGU6IFwiY2xvc2VcIixcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGRlbGV0ZToge1xuICAgICAgICB0ZXh0OiB0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmNsaWNrX291dGZpdC5kZWxldGUsXG4gICAgICAgIHN0eWxlOiBcImRlZmF1bHRcIixcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgdm9pZCBkZWxldGVGYXZvdXJpdGUoZmF2b3VyaXRlKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgd2Vhcjoge1xuICAgICAgICB0ZXh0OiB0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmNsaWNrX291dGZpdC53ZWFyLFxuICAgICAgICBzdHlsZTogXCJkZWZhdWx0XCIsXG4gICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW1wiI2FwcGVhcmFuY2UtcHJldmlld1wiXVxuICAgICAgICAgIGlmICghYXZhdGFyKSByZXR1cm4gZmFsc2VcblxuICAgICAgICAgIHZvaWQgKGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgICAgICB3ZWFyT3V0Zml0KGF2YXRhciwgZmF2b3VyaXRlLml0ZW1zKSkoKVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZUFjdGlvbihcbiAgbmFtZTogc3RyaW5nLFxuICBpdGVtczogUGFyc2FibGVJdGVtW10sXG4gIHJlc29sdmU6ICh2YWx1ZTogRmF2b3VyaXRlT3V0Zml0KSA9PiB2b2lkXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYmxvYiA9IGF3YWl0IG5ldyBQcm9taXNlPEJsb2I+KHJlc29sdmUgPT4ge1xuICAgIGRvY3VtZW50XG4gICAgICAucXVlcnlTZWxlY3RvcjxIVE1MQ2FudmFzRWxlbWVudD4oXCIjYXBwZWFyYW5jZS1wcmV2aWV3IGNhbnZhc1wiKVxuICAgICAgPy50b0Jsb2IoYmxvYiA9PiByZXNvbHZlKGJsb2IhKSwgXCJpbWFnZS9wbmdcIiwgMSlcbiAgfSlcblxuICByZXNvbHZlKHtcbiAgICAuLi4oYXdhaXQgaW5kZXhlZF9kYi5hZGRGYXZvdXJpdGVPdXRmaXQoe1xuICAgICAgaXRlbXMsXG4gICAgICBuYW1lLFxuICAgICAgYmxvYixcbiAgICB9KSksXG4gICAgdXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpLFxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBBdmF0YXIgfSBmcm9tIFwiLi4vZWxkYXJ5YS9hdmF0YXJcIlxuaW1wb3J0IHR5cGUgeyBJdGVtIH0gZnJvbSBcIi4uL2VsZGFyeWEvaXRlbVwiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgZXhwb3J0T3V0Zml0IH0gZnJvbSBcIi4uL291dGZpdFwiXG5pbXBvcnQgdHlwZSB7IFBhcnNhYmxlSXRlbSB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRQcmV2aWV3KCk6IHZvaWQge1xuICBleHBvcnRPdXRmaXQoXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXBvcnRPdXRmaXQoKTogdm9pZCB7XG4gIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpXG4gIGlucHV0LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJmaWxlXCIpXG4gIGlucHV0LnNldEF0dHJpYnV0ZShcImFjY2VwdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIilcbiAgaW5wdXQuY2xpY2soKVxuXG4gIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgaWYgKCFldmVudC50YXJnZXQpIHJldHVyblxuICAgIGNvbnN0IGZpbGVzID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlc1xuICAgIGlmICghZmlsZXMpIHJldHVyblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG4gICAgdm9pZCBmaWxlLnRleHQoKS50aGVuKGFzeW5jIHZhbHVlID0+IHtcbiAgICAgIGlmICghdmFsdWUpIHJldHVyblxuXG4gICAgICBjb25zdCBvdXRmaXQ6IFBhcnNhYmxlSXRlbVtdID0gSlNPTi5wYXJzZSh2YWx1ZSlcbiAgICAgIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW1wiI2FwcGVhcmFuY2UtcHJldmlld1wiXVxuICAgICAgaWYgKCFhdmF0YXIpIHJldHVyblxuXG4gICAgICBhd2FpdCB3ZWFyT3V0Zml0KGF2YXRhciwgb3V0Zml0KVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNsb3RoZXMoKTogdm9pZCB7XG4gIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW1wiI2FwcGVhcmFuY2UtcHJldmlld1wiXVxuICBpZiAoIWF2YXRhcikgcmV0dXJuXG5cbiAgZm9yIChsZXQgaSA9IGF2YXRhci5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGl0ZW1SZW5kZXIgPSBhdmF0YXIuY2hpbGRyZW5baV1cbiAgICBpZiAoIWl0ZW1SZW5kZXIpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBpdGVtID0gaXRlbVJlbmRlci5nZXRJdGVtKClcbiAgICBpZiAoU2FjaGEuQXZhdGFyLnJlbW92ZUl0ZW1Gcm9tQWxsQXZhdGFycyhpdGVtKSkge1xuICAgICAgJChgI2FwcGVhcmFuY2UtaXRlbS0ke2l0ZW0uX2lkfWApLnJlbW92ZUNsYXNzKFwic2VsZWN0ZWRcIilcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Hcm91cChncm91cDogbnVtYmVyKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudCB8IG51bGw+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICBjb25zdCBncm91cENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLSR7Z3JvdXB9YFxuICAgIClcbiAgICBpZiAoZ3JvdXBDb250YWluZXIpIHJldHVybiB2b2lkIHJlc29sdmUoZ3JvdXBDb250YWluZXIpXG5cbiAgICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tcIiNhcHBlYXJhbmNlLXByZXZpZXdcIl1cbiAgICBpZiAoIWF2YXRhcikgcmV0dXJuIHZvaWQgcmVzb2x2ZShudWxsKVxuXG4gICAgdm9pZCAkLmdldChcbiAgICAgIGAvcGxheWVyL29wZW5Hcm91cC8ke2dyb3VwfWAsXG4gICAgICB7IHdvcm5JdGVtczogYXZhdGFyLmdldEl0ZW1zVG9TYXZlKCkgfSxcbiAgICAgICh2aWV3OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgJCh2aWV3KS5oaWRlKCkuYXBwZW5kVG8oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgICAgICByZXNvbHZlKFxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLSR7Z3JvdXB9YFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5DYXRlZ29yeShcbiAgY2F0ZWdvcnk6IHN0cmluZ1xuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudCB8IG51bGw+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICBjb25zdCBjYXRlZ29yeUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LSR7Y2F0ZWdvcnl9YFxuICAgIClcbiAgICBpZiAoY2F0ZWdvcnlDb250YWluZXIpIHJldHVybiB2b2lkIHJlc29sdmUoY2F0ZWdvcnlDb250YWluZXIpXG5cbiAgICB2b2lkICQucG9zdChgL3BsYXllci9vcGVuQ2F0ZWdvcnkvJHtjYXRlZ29yeX1gLCAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAkKHZpZXcpLmhpZGUoKS5hcHBlbmRUbyhcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gICAgICByZXNvbHZlKFxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktJHtjYXRlZ29yeX1gXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2Vhck91dGZpdChcbiAgYXZhdGFyOiBBdmF0YXIsXG4gIG91dGZpdDogUGFyc2FibGVJdGVtW11cbik6IFByb21pc2U8dm9pZD4ge1xuICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5pbXBvcnRpbmcpXG5cbiAgLy8gR2V0IGFsbCBjYXRlZ29yaWVzXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdClcbiAgICBpZiAoIWF2YWlsYWJsZUl0ZW1zW2Nsb3RoaW5nLmlkXSkgY2F0ZWdvcmllcy5hZGQoY2xvdGhpbmcudHlwZSlcblxuICAvLyBPcGVuIGFsbCBjYXRlZ29yaWVzXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oY2F0ZWdvcmllcy52YWx1ZXMoKSkubWFwKGFzeW5jIGNhdGVnb3J5ID0+XG4gICAgICBvcGVuQ2F0ZWdvcnkoY2F0ZWdvcnkpXG4gICAgKVxuICApXG5cbiAgLy8gR2V0IGFsbCBncm91cHNcbiAgY29uc3QgZ3JvdXBzID0gbmV3IFNldDxudW1iZXI+KClcbiAgZm9yIChjb25zdCBjbG90aGluZyBvZiBvdXRmaXQpXG4gICAgaWYgKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtZ3JvdXA9XCIke2Nsb3RoaW5nLmdyb3VwfVwiXWApICYmXG4gICAgICAhYXZhaWxhYmxlSXRlbXNbY2xvdGhpbmcuaWRdXG4gICAgKVxuICAgICAgZ3JvdXBzLmFkZChjbG90aGluZy5ncm91cClcblxuICAvLyBPcGVuIGFsbCBncm91cHNcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpLm1hcChhc3luYyBncm91cCA9PiBvcGVuR3JvdXAoZ3JvdXApKVxuICApXG5cbiAgLy8gR2V0IHRoZSBpdGVtcyBmcm9tIGBhdmFpbGFibGVJdGVtc2BcbiAgY29uc3Qgd29ybkl0ZW1zOiBJdGVtW10gPSBbXVxuICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdCkge1xuICAgIGNvbnN0IGl0ZW0gPSBhdmFpbGFibGVJdGVtc1tjbG90aGluZy5pZF1cbiAgICBpZiAoaXRlbSkgd29ybkl0ZW1zLnB1c2goaXRlbSlcbiAgfVxuXG4gIHJlbW92ZUNsb3RoZXMoKVxuICBhdmF0YXIuYWRkSXRlbXMod29ybkl0ZW1zKVxuICBpbml0aWFsaXplU2VsZWN0ZWRJdGVtcygpXG4gIGluaXRpYWxpemVIaWRkZW5DYXRlZ29yaWVzKClcblxuICBjb25zdCBhdmF0YXJBY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhdmF0YXItYWN0aW9uc1wiKVxuICBpZiAoYXZhdGFyQWN0aW9ucykgYXZhdGFyQWN0aW9ucy5zdHlsZS5kaXNwbGF5ID0gXCJpbml0aWFsXCJcblxuICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5pbXBvcnRlZClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9jYXRlZ29yeVwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VHcm91cCB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2dyb3VwXCJcbmltcG9ydCB3YXJkcm9iZSBmcm9tIFwiLi93YXJkcm9iZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWRIaWRkZW5DYXRlZ29yaWVzKCk6IHZvaWQge1xuICBjb25zdCBoaWRkZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLWl0ZW1zIC5hcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5Om5vdCguYWN0aXZlKTpub3QoW2RhdGEtY2F0ZWdvcnluYW1lXSksICNhcHBlYXJhbmNlLWl0ZW1zIHNjcmlwdCwgYm9keT5zY3JpcHRcIlxuICApXG4gIGZvciAoY29uc3QgZGl2IG9mIGhpZGRlbikge1xuICAgIGRpdi5yZW1vdmUoKVxuICB9XG59XG5cbi8qKlxuICogUGxhY2UgdGhlIHNhdmVkIGdyb3VwcyBvbiB0aGUgRE9NIGFzIGlmIGl0IHdhcyBFbGRhcnlhIGRvaW5nIGl0LlxuICogQHJldHVybnMgdGhlIGFzc29jaWF0ZWQgYEFwcGVhcmFuY2VDYXRlZ29yeWAgaWYgaXQncyBmb3VuZCBpbiB0aGUgd2FyZHJvYmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkSGlkZGVuQ2F0ZWdvcnkoY29kZTogc3RyaW5nKTogQXBwZWFyYW5jZUNhdGVnb3J5IHwgbnVsbCB7XG4gIGNvbnN0IGNhdGVnb3J5ID0gd2FyZHJvYmUuZ2V0Q2F0ZWdvcmllcygpLmZpbmQoYyA9PiBjLmNhdGVnb3J5ID09PSBjb2RlKVxuICBpZiAoIWNhdGVnb3J5KSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGdyb3VwcyA9IHdhcmRyb2JlLmdldENhdGVnb3J5R3JvdXBzKGNhdGVnb3J5LmNhdGVnb3J5aWQpXG4gIGNvbnN0IGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtLmh0bWxcIilcbiAgY29uc3QgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19ncm91cC5odG1sXCIpXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2FwcGVhcmFuY2UtaXRlbXNcIilcbiAgICA/Lmluc2VydEFkamFjZW50SFRNTChcbiAgICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgICBncm91cHNcbiAgICAgICAgLm1hcChncm91cCA9PlxuICAgICAgICAgIGdyb3VwVGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgaXRlbXM6IHdhcmRyb2JlXG4gICAgICAgICAgICAgIC5nZXRJdGVtcyhncm91cC5ncm91cClcbiAgICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW1UZW1wbGF0ZS5yZW5kZXIoaXRlbSkpXG4gICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICApXG4gIHJldHVybiBjYXRlZ29yeVxufVxuXG4vKipcbiAqIExvYWQgdGhlIHNhdmVkIGdyb3VwIG9uIHRoZSBET00gYXMgaWYgaXQgd2FzIEVsZGFyeWEgZG9pbmcgaXQuXG4gKiBAcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBgQXBwZWFyYW5jZUdyb3VwYCBpZiBpdCdzIGZvdW5kIGluIHRoZSB3YXJkcm9iZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRIaWRkZW5Hcm91cChpZDogbnVtYmVyKTogQXBwZWFyYW5jZUdyb3VwIHwgbnVsbCB7XG4gIGNvbnN0IGdyb3VwID0gd2FyZHJvYmUuZ2V0R3JvdXAoaWQpXG4gIGlmICghZ3JvdXApIHJldHVybiBudWxsXG5cbiAgY29uc3QgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW0uaHRtbFwiKVxuICBjb25zdCBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2dyb3VwLmh0bWxcIilcbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgID8uaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgICAgXCJiZWZvcmVlbmRcIixcbiAgICAgIGdyb3VwVGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGl0ZW1zOiB3YXJkcm9iZVxuICAgICAgICAgIC5nZXRJdGVtcyhncm91cC5ncm91cClcbiAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbVRlbXBsYXRlLnJlbmRlcihpdGVtKSlcbiAgICAgICAgICAuam9pbihcIlxcblwiKSxcbiAgICAgIH0pXG4gICAgKVxuICByZXR1cm4gZ3JvdXBcbn1cbiIsImltcG9ydCB0eXBlIHsgSXRlbSB9IGZyb20gXCIuLi9lbGRhcnlhL2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9jYXRlZ29yeVwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VHcm91cCB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2dyb3VwXCJcbmltcG9ydCB0eXBlIHsgQXBwZWFyYW5jZUl0ZW0gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9pdGVtXCJcblxuY2xhc3MgV2FyZHJvYmUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3JpZXM6IFJlY29yZDxudW1iZXIsIEFwcGVhcmFuY2VDYXRlZ29yeT4gPSB7fVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBzOiBSZWNvcmQ8bnVtYmVyLCBBcHBlYXJhbmNlR3JvdXA+ID0ge31cblxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zOiBSZWNvcmQ8bnVtYmVyLCBBcHBlYXJhbmNlSXRlbT4gPSB7fVxuXG4gIGF2YWlsYWJsZUl0ZW1zPzogUmVjb3JkPG51bWJlciwgSXRlbT5cblxuICBnZXRDYXRlZ29yaWVzKCk6IEFwcGVhcmFuY2VDYXRlZ29yeVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNhdGVnb3JpZXMpXG4gIH1cblxuICBnZXRDYXRlZ29yeShpZDogbnVtYmVyKTogQXBwZWFyYW5jZUNhdGVnb3J5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzW2lkXVxuICB9XG5cbiAgZ2V0Q2F0ZWdvcnlHcm91cHMoY2F0ZWdvcnlpZDogbnVtYmVyKTogQXBwZWFyYW5jZUdyb3VwW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZ3JvdXBzKS5maWx0ZXIoXG4gICAgICBncm91cCA9PiBncm91cC5jYXRlZ29yeWlkID09PSBjYXRlZ29yeWlkXG4gICAgKVxuICB9XG5cbiAgZ2V0R3JvdXAoaWQ6IG51bWJlcik6IEFwcGVhcmFuY2VHcm91cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzW2lkXVxuICB9XG5cbiAgZ2V0R3JvdXBzKCk6IEFwcGVhcmFuY2VHcm91cFtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwcylcbiAgfVxuXG4gIGdldEl0ZW0oaWQ6IG51bWJlcik6IEFwcGVhcmFuY2VJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1tpZF1cbiAgfVxuXG4gIGdldEl0ZW1zKGdyb3VwOiBudW1iZXIpOiBBcHBlYXJhbmNlSXRlbVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLml0ZW1zKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmdyb3VwID09PSBncm91cClcbiAgfVxuXG4gIHNldENhdGVnb3J5KGNhdGVnb3J5OiBBcHBlYXJhbmNlQ2F0ZWdvcnkpOiB2b2lkIHtcbiAgICB0aGlzLmNhdGVnb3JpZXNbY2F0ZWdvcnkuY2F0ZWdvcnlpZF0gPSBjYXRlZ29yeVxuICB9XG5cbiAgc2V0R3JvdXAoZ3JvdXA6IEFwcGVhcmFuY2VHcm91cCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzW2dyb3VwLmdyb3VwXSA9IGdyb3VwXG4gIH1cblxuICBzZXRJdGVtKGl0ZW06IEFwcGVhcmFuY2VJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtc1tpdGVtLml0ZW1pZF0gPSBpdGVtXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFdhcmRyb2JlKClcbiIsImltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IENhcm91c2VsTmV3cyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9jYXJvdXNlbF9uZXdzXCJcblxuZXhwb3J0IGNvbnN0IGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXM6IENhcm91c2VsTmV3cyA9IHtcbiAgYmFja2dyb3VuZEltYWdlOlxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlcy5wbmdcIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC5iZWVtb292X2Fubm95YW5jZXMudGl0bGUsXG4gIGhyZWY6IFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9CZWVtb292LUFubm95YW5jZXNcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtYmVlbW9vdi1hbm5veWFuY2VzXCIsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC5iZWVtb292X2Fubm95YW5jZXMuc3VidGl0bGUsXG59XG4iLCJpbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbERvd25sb2FkRmFjZTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZS5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZmFjZVwiLFxuICBoNDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2ZhY2UudGl0bGUsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC5kb3dubG9hZF9mYWNlLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhbi5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZ3VhcmRpYW5cIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC5kb3dubG9hZF9ndWFyZGlhbi50aXRsZSxcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2d1YXJkaWFuLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxFRTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZWxkYXJ5YV9lbmhhbmNlbWVudHMucG5nXCIsXG4gIGg0OiB0cmFuc2xhdGUuY2Fyb3VzZWwuZWxkYXJ5YV9lbmhhbmNlbWVudHMudGl0bGUsXG4gIGhyZWY6IEdNLmluZm8uc2NyaXB0Lm5hbWVzcGFjZSxcbiAgaWQ6IFwiY2Fyb3VzZWwtZWxkYXJ5YS1lbmhhbmNlbWVudHNcIixcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmVsZGFyeWFfZW5oYW5jZW1lbnRzLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxUYWtlb3ZlcjogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfdGFrZW92ZXIucG5nXCIsXG4gIGlkOiBcImNhcm91c2VsLXRha2VvdmVyXCIsXG4gIGg0OiB0cmFuc2xhdGUuY2Fyb3VzZWwudGFrZW92ZXIudGl0bGUsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC50YWtlb3Zlci5zdWJ0aXRsZSxcbn1cbiIsImltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBjbGFzcyBDb25zb2xlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgY29uc29sZSA9IGNvbnNvbGVcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBwcml2YXRlIHN0YXRpYyBnZXQgZGVidWdnaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UuZGVidWdcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCB0aW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKClcbiAgfVxuXG4gIHN0YXRpYyBhc3NlcnQoXG4gICAgdmFsdWU6IHVua25vd24sXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmFzc2VydCh2YWx1ZSwgLi4udGhpcy5mb3JtYXQobWVzc2FnZSksIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG5cbiAgc3RhdGljIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5kZWJ1ZyguLi50aGlzLmZvcm1hdChtZXNzYWdlKSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBzdGF0aWMgZXJyb3IobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmVycm9yKC4uLnRoaXMuZm9ybWF0KG1lc3NhZ2UpLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5pbmZvKC4uLnRoaXMuZm9ybWF0KG1lc3NhZ2UpLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBsb2cobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmxvZyguLi50aGlzLmZvcm1hdChtZXNzYWdlKSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBzdGF0aWMgd2FybihtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUud2FybiguLi50aGlzLmZvcm1hdChtZXNzYWdlKSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmb3JtYXQobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICBgJWNbJWMke3RoaXMudGltZX0lY11gLFxuICAgICAgXCJjb2xvcjojOTc0MmMyXCIsXG4gICAgICBcImNvbG9yOm5vbmVcIixcbiAgICAgIFwiY29sb3I6Izk3NDJjMlwiLFxuICAgICAgbWVzc2FnZSxcbiAgICBdXG4gIH1cbn1cbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuL2kxOG4vdHJhbnNsYXRlXCJcblxuZnVuY3Rpb24gZG93bmxvYWRDYW52YXMoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIGNhbnZhcy50b0Jsb2IoXG4gICAgYmxvYiA9PiB7XG4gICAgICBpZiAoIWJsb2IpIHtcbiAgICAgICAgQ29uc29sZS5lcnJvcihcIkNhbnZhcyBpcyBlbXB0eVwiKVxuICAgICAgICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmVycm9yLmRvd25sb2FkQ2FudmFzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuXG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgICAgIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmwpXG4gICAgICBhLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGAke25hbWV9LnBuZ2ApXG4gICAgICBhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSlcblxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgfSxcbiAgICBcImltYWdlL3BuZ1wiLFxuICAgIDFcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRGYWNlKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNhdmF0YXItbWVudS1jb250YWluZXIgY2FudmFzXCJcbiAgKVxuICBpZiAoIWNhbnZhcykge1xuICAgIGNvbnNvbGUud2FybihcIkNvdWxkbid0IGZpbmQgdGhlIGd1YXJkaWFuJ3MgZmFjZS5cIilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgXCJmYWNlXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEd1YXJkaWFuKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNob21lLWF2YXRhci1wbGF5ZXIgY2FudmFzXCJcbiAgKVxuICBpZiAoIWNhbnZhcykge1xuICAgIGNvbnNvbGUud2FybihcIkNvdWxkbid0IGZpbmQgdGhlIGd1YXJkaWFuLlwiKVxuICAgIHJldHVyblxuICB9XG5cbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBnZXROYW1lKCkgPz8gXCJndWFyZGlhblwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRBcHBlYXJhbmNlKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLXByZXZpZXcgY2FudmFzXCJcbiAgKVxuICBpZiAoIWNhbnZhcykge1xuICAgIGNvbnNvbGUud2FybihcIkNvdWxkbid0IGZpbmQgdGhlIGd1YXJkaWFuLlwiKVxuICAgIHJldHVyblxuICB9XG5cbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBnZXROYW1lKCkgPz8gXCJndWFyZGlhblwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRQcm9maWxlKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIi5wbGF5ZXJQcm9maWxlQXZhdGFyIGNhbnZhc1wiXG4gIClcbiAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxIZWFkaW5nRWxlbWVudD4oXG4gICAgXCIjbWFpbi1zZWN0aW9uIC5zZWN0aW9uLXRpdGxlXCJcbiAgKVxuICBpZiAoIWNhbnZhcyB8fCAhdGl0bGUpIHJldHVyblxuXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgdGl0bGUudGV4dENvbnRlbnQ/LnRyaW0oKSA/PyBcImd1YXJkaWFuXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyLW91dGVyPnBcIik/LnRleHRDb250ZW50ID8/XG4gICAgbnVsbFxuICApXG59XG4iLCJleHBvcnQgZW51bSBEdXJhdGlvblVuaXQge1xuICBtaWxsaXNlY29uZCA9IDEsXG4gIHNlY29uZCA9IDEwMDAgKiBtaWxsaXNlY29uZCxcbiAgbWludXRlID0gNjAgKiBzZWNvbmQsXG4gIGhvdXIgPSA2MCAqIG1pbnV0ZSxcbiAgZGF5ID0gMjQgKiBob3VyLFxuICB3ZWVrID0gNyAqIGRheSxcbn1cblxuZXhwb3J0IGNsYXNzIER1cmF0aW9uIHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgdmFsdWU6IG51bWJlciwgcmVhZG9ubHkgdW5pdDogRHVyYXRpb25Vbml0KSB7fVxuXG4gIGRpdmlkZShkdXJhdGlvbjogRHVyYXRpb24pOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlIC8gZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxuICB9XG5cbiAgbWludXMoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSAtIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIG11bHRpcGx5KGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgKiBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICBwbHVzKGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgKyBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICB0byh1bml0OiBEdXJhdGlvblVuaXQpOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbigodGhpcy52YWx1ZSAqIHRoaXMudW5pdCkgLyB1bml0LCB1bml0KVxuICB9XG59XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5pbnRlcmZhY2UgSlF1ZXJ5U3RhdGljIHtcbiAgZmxhdnI6IChkYXRhOiBmbGF2clBhcmFtcykgPT4gdm9pZFxuICBmbGF2ck5vdGlmOiAoXG4gICAgY29udGVudDogc3RyaW5nIHwgdW5rbm93bixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgaWQ/OiBudW1iZXIsXG4gICAgZm9yY2U/OiBib29sZWFuXG4gICkgPT4gdm9pZFxufVxuXG5pbnRlcmZhY2UgZmxhdnJQYXJhbXMge1xuICAvKiogQW5pbWF0ZS5jc3MgKi9cbiAgYW5pbWF0ZUNsb3Npbmc/OiBcImZhZGVPdXRcIiB8IFwiZmFkZU91dFVwXCJcbiAgLyoqIEFuaW1hdGUuY3NzICovXG4gIGFuaW1hdGVFbnRyYW5jZT86IFwiZmFkZUluXCIgfCBcImZhZGVJbkRvd25cIlxuICAvKiogQnV0dG9ucyBhcmUga2V5LXZhbHVlIHBhaXJzIHdoZXJlIHRoZSBrZXkgaXMgdGhlICAqL1xuICBidXR0b25zPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBzdHlsZT86IFwiY2xvc2VcIiB8IFwiZGVmYXVsdFwiXG4gICAgICB0ZXh0Pzogc3RyaW5nXG4gICAgICBhZGRDbGFzcz86IHN0cmluZ1xuICAgICAgLyoqIEByZXR1cm5zIHdoZXRoZXIgdGhlIHBvcHVwIHNob3VsZCBjbG9zZSAqL1xuICAgICAgYWN0aW9uPzogKCRjb250YWluZXI6IEpRdWVyeSkgPT4gYm9vbGVhblxuICAgIH1cbiAgPlxuICAvKiogSFRNTCBjb250ZW50IG9mIHRoZSBmbGF2ciAqL1xuICBjb250ZW50Pzogc3RyaW5nXG4gIC8qKiBUeXBlIG9mIGRpYWxvZy4gKi9cbiAgZGlhbG9nPzogXCJhbGVydFwiIHwgXCJjb25maXJtXCIgfCBcImZvcm1cIiB8IFwicHJvbXB0XCJcbiAgb25CdWlsZD86ICgkY29udGFpbmVyOiBKUXVlcnkpID0+IHZvaWRcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkXG4gIG9uQ29uZmlybT86ICgpID0+IHZvaWRcbiAgb25TaG93PzogKCkgPT4gdm9pZFxuICBwcm9tcHQ/OiB7XG4gICAgLyoqIERlZmF1bHQgdmFsdWUgKi9cbiAgICB2YWx1ZTogc3RyaW5nXG4gIH1cblxuICB0aXRsZT86IHN0cmluZ1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHRyaW1JY29uKGljb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRpbGRlID0gaWNvbi5sYXN0SW5kZXhPZihcIn5cIilcbiAgY29uc3QgZG90ID0gaWNvbi5sYXN0SW5kZXhPZihcIi5cIilcbiAgaWYgKHRpbGRlID09PSAtMSB8fCBkb3QgPT09IC0xKSByZXR1cm4gaWNvblxuXG4gIHJldHVybiBpY29uLnN1YnN0cmluZygwLCB0aWxkZSkgKyBpY29uLnN1YnN0cmluZyhkb3QpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25cIlxuXG5leHBvcnQgY29uc3QgZW46IFRyYW5zbGF0aW9uID0ge1xuICBob21lOiB7XG4gICAgZm9ydW06IFwiRm9ydW1cIixcbiAgICB0YWtlb3ZlcjogXCJUYWtlb3ZlclwiLFxuICB9LFxuICB0YWtlb3Zlcjoge1xuICAgIGJvdWdodDogKG5hbWUsIHByaWNlKSA9PlxuICAgICAgYEJvdWdodCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4gZm9yIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPi5gLFxuICAgIGRpc2FibGVkOiBcIlRha2VvdmVyIG1vZGUgZGlzYWJsZWQuXCIsXG4gICAgZW5hYmxlZDogXCJUYWtlb3ZlciBtb2RlIGVuYWJsZWQuIFBsZWFzZSBkbyBub3QgaW50ZXJhY3Qgd2l0aCB0aGlzIHRhYi5cIixcbiAgfSxcbiAgY2Fyb3VzZWw6IHtcbiAgICBiZWVtb292X2Fubm95YW5jZXM6IHtcbiAgICAgIHRpdGxlOiBcIkJlZW1vb3YgQW5ub3lhbmNlc1wiLFxuICAgICAgc3VidGl0bGU6IFwiQmxvY2sgc29tZSBvZiBFbGRhcnlhJ3MgYW5ub3lhbmNlcy5cIixcbiAgICB9LFxuICAgIGRvd25sb2FkX2ZhY2U6IHtcbiAgICAgIHRpdGxlOiBcIkRvd25sb2FkIHlvdXIgZ3VhcmRpYW4ncyBmYWNlIVwiLFxuICAgICAgc3VidGl0bGU6IFwiQ2xpY2sgaGVyZSB0byBkb3dubG9hZCB5b3VyIGd1YXJkaWFuJ3MgZmFjZS5cIixcbiAgICB9LFxuICAgIGRvd25sb2FkX2d1YXJkaWFuOiB7XG4gICAgICB0aXRsZTogXCJEb3dubG9hZCB5b3VyIGd1YXJkaWFuIVwiLFxuICAgICAgc3VidGl0bGU6IFwiQ2xpY2sgaGVyZSB0byBkb3dubG9hZCB5b3VyIGd1YXJkaWFuLlwiLFxuICAgIH0sXG4gICAgZWxkYXJ5YV9lbmhhbmNlbWVudHM6IHtcbiAgICAgIHRpdGxlOiBgJHtHTS5pbmZvLnNjcmlwdC5uYW1lfSB2JHtHTS5pbmZvLnNjcmlwdC52ZXJzaW9ufWAsXG4gICAgICBzdWJ0aXRsZTogR00uaW5mby5zY3JpcHQuZGVzY3JpcHRpb24sXG4gICAgfSxcbiAgICB0YWtlb3Zlcjoge1xuICAgICAgZGlzYWJsZV90YWtlb3ZlcjogXCJEaXNhYmxlIFRha2VvdmVyXCIsXG4gICAgICBlbmFibGVfdGFrZW92ZXI6IFwiRW5hYmxlIFRha2VvdmVyXCIsXG4gICAgICBzdWJ0aXRsZTogXCJHaXZlIHVwIHRoaXMgdGFiIHRvIHBlcmZvcm0gYXV0b21hdGVkIGFjdGlvbnMuXCIsXG4gICAgICB0aXRsZTogXCJUYWtlb3ZlclwiLFxuICAgIH0sXG4gIH0sXG4gIG1pbmlnYW1lczoge1xuICAgIHBsYXllZF9mb3I6IChuYW1lLCBtYWFuYXMpID0+XG4gICAgICBgUGxheWVkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke21hYW5hc308L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiBlYXJuZWQuYCxcbiAgICBwbGF5ZWQ6IG5hbWUgPT4gYFBsYXllZCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4uYCxcbiAgICBwbGF5aW5nOiBuYW1lID0+IGBQbGF5aW5nIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPi4uLmAsXG4gIH0sXG4gIGFwcGVhcmFuY2U6IHtcbiAgICBidXR0b25zOiB7XG4gICAgICBiYWNrd2FyZDogXCJNb3ZlIGJhY2tcIixcbiAgICAgIGZvcndhcmQ6IFwiQnJpbmcgZm9yd2FyZFwiLFxuICAgIH0sXG4gICAgZmF2b3VyaXRlczoge1xuICAgICAgaW1wb3J0ZWQ6IFwiSW1wb3J0ZWQgb3V0Zml0IVwiLFxuICAgICAgaW1wb3J0aW5nOiBcIkltcG9ydGluZyBvdXRmaXQuIFBsZWFzZSB3YWl0Li4uXCIsXG4gICAgICBjbGlja19vdXRmaXQ6IHtcbiAgICAgICAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICAgICAgICBnb3RvX2FjY291bnQ6IGBUbyB0cmFuc2ZlciB5b3VyIDxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBmYXZvdXJpdGUgb3V0Zml0cyB0byBhbm90aGVyIGJyb3dzZXIsIGV4cG9ydCB5b3VyIHNldHRpbmdzIGluIHRoZSA8YSBocmVmPVwiL3VzZXIvYWNjb3VudFwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+bXkmbmJzcDthY2NvdW50PC9hPiBwYWdlLmAsXG4gICAgICAgIHNhdmVkX2xvY2FsbHk6IGBUYWtlIG5vdGUgdGhhdCB0aGlzIG91dGZpdCBpcyBzYXZlZCBpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCB3YXMgbm90IHNlbnQgdG8gRWxkYXJ5YSdzIHNlcnZlcnMuYCxcbiAgICAgICAgd2VhcjogXCJXZWFyXCIsXG4gICAgICB9LFxuICAgICAgc2F2ZV9vdXRmaXQ6IHtcbiAgICAgICAgZ290b19hY2NvdW50OiBgVG8gdHJhbnNmZXIgeW91ciA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4gZmF2b3VyaXRlIG91dGZpdHMgdG8gYW5vdGhlciBicm93c2VyLCBleHBvcnQgeW91ciBzZXR0aW5ncyBpbiB0aGUgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm15Jm5ic3A7YWNjb3VudDwvYT4gcGFnZS5gLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJOYW1lLi4uXCIsXG4gICAgICAgIHNhdmU6IFwiU2F2ZVwiLFxuICAgICAgICBzYXZlZF9sb2NhbGx5OiBgVGFrZSBub3RlIHRoYXQgdGhpcyBvdXRmaXQgd2lsbCBvbmx5IGJlIHNhdmVkIHdpdGhpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCB3aWxsIG5vdCBiZSBzZW50IHRvIEVsZGFyeWEncyBzZXJ2ZXJzLmAsXG4gICAgICAgIHRpdGxlOiBcIlNhdmUgb3V0Zml0XCIsXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBkb3dubG9hZDogXCJEb3dubG9hZCBQTkdcIixcbiAgICAgICAgZXhwb3J0OiBcIkV4cG9ydFwiLFxuICAgICAgICBpbXBvcnQ6IFwiSW1wb3J0XCIsXG4gICAgICB9LFxuICAgIH0sXG4gICAgbG9hZGVkOiBcIlRoZSB3YXJkcm9iZSBpcyBsb2FkZWQuXCIsXG4gICAgbG9hZGluZzogKGNhdGVnb3J5bmFtZTogc3RyaW5nKSA9PlxuICAgICAgYExvYWRpbmcgPHN0cm9uZz4ke2NhdGVnb3J5bmFtZX08L3N0cm9uZz4uLi5gLFxuICB9LFxuICBtYXJrZXQ6IHtcbiAgICBhZGRfdG9fd2lzaGxpc3Q6IHtcbiAgICAgIGFkZGVkX3RvX3dpc2hsaXN0OiAobmFtZSwgcHJpY2UpID0+XG4gICAgICAgIGBBZGRlZCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4gZm9yIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiB0byB0aGUgd2lzaGxpc3QuYCxcbiAgICAgIGludmFsaWRfcHJpY2U6IFwiVGhpcyBpcyBub3QgYSB2YWxpZCBwcmljZS5cIixcbiAgICAgIHNhdmU6IFwiU2F2ZVwiLFxuICAgICAgdGV4dDogXCJIb3cgbWFueSBtYWFuYXMgZG8geW91IHdpc2ggdG8gb2ZmZXIgdG8gYWNxdWlyZSB0aGlzIGl0ZW0/XCIsXG4gICAgICB0aXRsZTogXCJBZGQgdG8gd2lzaGxpc3RcIixcbiAgICB9LFxuICAgIGF1Y3Rpb25zOiB7XG4gICAgICBidXlfbm93X3ByaWNlOiBcIkJ1eSBub3cgcHJpY2UgOlwiLFxuICAgICAgY3VycmVudF9wcmljZTogXCJDdXJyZW50IHByaWNlIDpcIixcbiAgICAgIGRlbGV0ZTogXCJEZWxldGVcIixcbiAgICAgIHB1cmNoYXNlX2hpc3Rvcnk6IFwiUHVyY2hhc2UgaGlzdG9yeVwiLFxuICAgICAgc2FsZXNfaGlzdG9yeTogXCJTYWxlcyBoaXN0b3J5XCIsXG4gICAgICBkYXRlX3RpbWVfZm9ybWF0OiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuLUdCXCIsIHtcbiAgICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICAgIGRheTogXCJudW1lcmljXCIsXG4gICAgICAgIG1vbnRoOiBcImxvbmdcIixcbiAgICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICB9KSxcbiAgICB9LFxuICAgIGNoYW5nZV9wcmljZToge1xuICAgICAgY2hhbmdlZF9wcmljZTogKG5hbWUsIHByaWNlKSA9PlxuICAgICAgICBgQ2hhbmdlZCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4ncyBwcmljZSBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmAsXG4gICAgICBpbnZhbGlkX3ByaWNlOiBcIlRoaXMgaXMgbm90IGEgdmFsaWQgcHJpY2UuXCIsXG4gICAgICBzYXZlOiBcIlNhdmVcIixcbiAgICAgIHRleHQ6IFwiSG93IG1hbnkgbWFhbmFzIGRvIHlvdSB3aXNoIHRvIG9mZmVyIHRvIGFjcXVpcmUgdGhpcyBpdGVtP1wiLFxuICAgICAgdGl0bGU6IFwiQ2hhbmdlIHByaWNlXCIsXG4gICAgfSxcbiAgICB3aXNobGlzdDoge1xuICAgICAgYXNzaXN0YW5jZTogYE9uIHRoaXMgcGFnZSwgeW91IGNhbiBvcmdhbml6ZSB5b3VyIHdpc2hsaXN0IGFuZCBjaGVjayB0aGUgc3RhdHVzIG9mIHlvdXIgd2lzaGVkIGl0ZW1zLiBQbGVhc2Ugbm90ZSB0aGF0IHlvdXIgd2lzaGxpc3QgaXMgc2F2ZWQgbG9jYWxseSBpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCBpcyBub3Qgc2VudCB0byBFbGRhcnlhJ3Mgc2VydmVycy4gVG8gdHJhbnNmZXIgeW91ciB3aXNobGlzdCB0byBhbm90aGVyIGJyb3dzZXIsIGV4cG9ydCB5b3VyIHNldHRpbmdzIGluIHRoZSA8YSBocmVmPVwiL3VzZXIvYWNjb3VudFwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+bXkmbmJzcDthY2NvdW50PC9hPiBwYWdlLmAsXG4gICAgICBhY3Rpb25zOiBcIkFjdGlvbnNcIixcbiAgICAgIGNoYW5nZV9wcmljZTogXCJDaGFuZ2UgcHJpY2VcIixcbiAgICAgIGRlbGV0ZV90b29sdGlwOiBcIlJlbW92ZSBmcm9tIHdpc2hsaXN0XCIsXG4gICAgICBkZWxldGU6IFwiRGVsZXRlXCIsXG4gICAgICBpY29uOiBcIkljb25cIixcbiAgICAgIG5hbWU6IFwiTmFtZVwiLFxuICAgICAgcHJpY2U6IFwiUHJpY2VcIixcbiAgICAgIHJlc2V0X3Rvb2x0aXA6IFwiUmVzZXQgdGhlIGVycm9yIHN0YXR1c1wiLFxuICAgICAgcmVzZXQ6IFwiUmVzZXRcIixcbiAgICAgIHN0YXR1czogXCJTdGF0dXNcIixcbiAgICAgIHRpdGxlOiBcIldpc2hsaXN0XCIsXG4gICAgfSxcbiAgfSxcbiAgYWNjb3VudDoge1xuICAgIGRlYnVnX3Rvb2x0aXA6IFwiRW5hYmxlcyBvciBkaXNhYmxlcyBsb2dnaW5nLlwiLFxuICAgIGRlYnVnOiBcIkRlYnVnXCIsXG4gICAgZW5oYW5jZW1lbnRzOiBcIkVuaGFuY2VtZW50c1wiLFxuICAgIGV4cGxvcmF0aW9uczogXCJFeHBsb3JhdGlvbnNcIixcbiAgICBleHBvcnQ6IFwiRXhwb3J0IHNldHRpbmdzXCIsXG4gICAgaW1wb3J0OiBcIkltcG9ydCBzZXR0aW5nc1wiLFxuICAgIGltcG9ydGVkOiBcIkltcG9ydGVkIHNldHRpbmdzIVwiLFxuICAgIG1hcmtldDogXCJNYXJrZXRcIixcbiAgICBtaW5pZ2FtZXM6IFwiTWluaWdhbWVzXCIsXG4gIH0sXG4gIHBldDoge1xuICAgIGF1dG9fZXhwbG9yZTogXCJIaWdobGlnaHRcIixcbiAgICBkYXRlX3RpbWVfZm9ybWF0OiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuLUdCXCIsIHtcbiAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICBob3VyOiBcIjItZGlnaXRcIixcbiAgICAgIGRheTogXCJudW1lcmljXCIsXG4gICAgICBtb250aDogXCJsb25nXCIsXG4gICAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICB9KSxcbiAgICBkZWxldGVfaGlzdG9yeTogXCJEZWxldGUgaGlzdG9yeVwiLFxuICAgIGVtcHR5X2hpc3Rvcnk6XG4gICAgICBcIllvdXIgZXhwbG9yYXRpb24gaGlzdG9yeSBpcyBlbXB0eS4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGZpbGwgdXAgYXMgeW91ciBmYW1pbGlhciBmaW5kcyBpdGVtcyB3aGlsZSBleHBsb3JpbmcuXCIsXG4gICAgZ290b19hY2NvdW50OiBgVG8gdHJhbnNmZXIgeW91ciBleHBsb3JhdGlvbiBoaXN0b3J5IHRvIGFub3RoZXIgYnJvd3NlciwgZXhwb3J0IHlvdXIgc2V0dGluZ3MgZnJvbSB0aGUgPGVtPm15Jm5ic3A7YWNjb3VudDwvZW0+IHBhZ2UuYCxcbiAgICBoaXN0b3J5OiBcIkhpc3RvcnlcIixcbiAgICBzYXZlZF9sb2NhbGx5OiBgUGxlYXNlIG5vdGUgdGhhdCB5b3VyIGV4cGxvcmF0aW9uIGhpc3RvcnkgaXMgc2F2ZWQgbG9jYWxseSBpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCB3YXMgbm90IHNlbnQgdG8gRWxkYXJ5YSdzIHNlcnZlcnMuYCxcbiAgfSxcbiAgcHJvZmlsZToge1xuICAgIGV4cG9ydF9vdXRmaXQ6IFwiRXhwb3J0IG91dGZpdFwiLFxuICAgIGRvd25sb2FkX291dGZpdDogXCJEb3dubG9hZCBQTkdcIixcbiAgfSxcbiAgZXJyb3I6IHtcbiAgICBkb3dubG9hZENhbnZhczogXCJUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGltYWdlLlwiLFxuICB9LFxuICBtYWxsOiB7XG4gICAgYWRkX3RvX3dpc2hsaXN0OiB7XG4gICAgICB0aXRsZTogXCJBZGQgdG8gbWFya2V0IHdpc2hsaXN0XCIsXG4gICAgICB0ZXh0OiBcIkhvdyBtYW55IG1hYW5hcyBkbyB5b3Ugd2lzaCB0byBvZmZlciB0byBhY3F1aXJlIHRoaXMgaXRlbT9cIixcbiAgICAgIG5vdGU6IFwiUGxlYXNlIG5vdGUgdGhhdCB0aGUgaXRlbXMgYWRkZWQgZnJvbSB0aGUgbWFsbCB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhdmFpbGFibGUgYXQgdGhlIG1hcmtldC5cIixcbiAgICB9LFxuICB9LFxufVxuXG5PYmplY3QuZnJlZXplKGVuKVxuIiwiaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbiB9IGZyb20gXCIuL3RyYW5zbGF0aW9uXCJcblxuZXhwb3J0IGNvbnN0IGZyOiBUcmFuc2xhdGlvbiA9IHtcbiAgaG9tZToge1xuICAgIGZvcnVtOiBcIkZvcnVtXCIsXG4gICAgdGFrZW92ZXI6IFwiVGFrZW92ZXJcIixcbiAgfSxcbiAgdGFrZW92ZXI6IHtcbiAgICBib3VnaHQ6IChuYW1lLCBwcmljZSkgPT5cbiAgICAgIGBBY2hldMOpIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBwb3VyIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPi5gLFxuICAgIGRpc2FibGVkOiBcIlRha2VvdmVyIGTDqXNhY3RpdsOpLlwiLFxuICAgIGVuYWJsZWQ6IFwiVGFrZW92ZXIgYWN0aXbDqS4gw4l2aXRlIGQnaW50w6lyYWdpciBhdmVjIGNldCBvbmdsZXQuXCIsXG4gIH0sXG4gIGNhcm91c2VsOiB7XG4gICAgYmVlbW9vdl9hbm5veWFuY2VzOiB7XG4gICAgICB0aXRsZTogXCJCZWVtb292IEFubm95YW5jZXNcIixcbiAgICAgIHN1YnRpdGxlOiBcIkJsb3F1ZSBjZXJ0YWlucyBpcnJpdGFudHMgZCdFbGRhcnlhLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZmFjZToge1xuICAgICAgdGl0bGU6IFwiVMOpbMOpY2hhcmdlIGxlIHZpc2FnZSBkZSB0YSBnYXJkaWVubmUhXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGlxdWUgaWNpIHBvdXIgdMOpbMOpY2hhcmdlciBsZSB2aXNhZ2UgZGUgdGEgZ2FyZGllbm5lLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZ3VhcmRpYW46IHtcbiAgICAgIHRpdGxlOiBcIlTDqWzDqWNoYXJnZSB0YSBnYXJkaWVubmUhXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGlxdWUgaWNpIHBvdXIgdMOpbMOpY2hhcmdlciB0YSBnYXJkaWVubmUuXCIsXG4gICAgfSxcbiAgICBlbGRhcnlhX2VuaGFuY2VtZW50czoge1xuICAgICAgdGl0bGU6IGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259YCxcbiAgICAgIHN1YnRpdGxlOiBcIkFtw6lsaW9yZSBsJ2V4cMOpcmllbmNlIHV0aWxpc2F0ZXVyIGQnRWxkYXJ5YS5cIixcbiAgICB9LFxuICAgIHRha2VvdmVyOiB7XG4gICAgICBkaXNhYmxlX3Rha2VvdmVyOiBcIkTDqXNhY3RpdmUgbGUgdGFrZW92ZXJcIixcbiAgICAgIGVuYWJsZV90YWtlb3ZlcjogXCJBY3RpdmUgbGUgdGFrZW92ZXJcIixcbiAgICAgIHN1YnRpdGxlOiBcIkxhaXNzZSBjZXQgb25nbGV0IHBlcmZvcm1lciBkZXMgYWN0aW9ucyBhdXRvbWF0aXF1ZXMuXCIsXG4gICAgICB0aXRsZTogXCJUYWtlb3ZlclwiLFxuICAgIH0sXG4gIH0sXG4gIG1pbmlnYW1lczoge1xuICAgIHBsYXllZF9mb3I6IChuYW1lOiBzdHJpbmcsIG1hYW5hczogbnVtYmVyKSA9PlxuICAgICAgYEEgam91w6kgw6AgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+IHBvdXIgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke21hYW5hc308L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiBnYWduw6lzLmAsXG4gICAgcGxheWVkOiAobmFtZTogc3RyaW5nKSA9PiBgQSBqb3XDqSDDoCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4uYCxcbiAgICBwbGF5aW5nOiAobmFtZTogc3RyaW5nKSA9PiBgSm91ZSDDoCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4uLi5gLFxuICB9LFxuICBhcHBlYXJhbmNlOiB7XG4gICAgYnV0dG9uczoge1xuICAgICAgYmFja3dhcmQ6IFwiVmVycyBsJ2FycmnDqHJlXCIsXG4gICAgICBmb3J3YXJkOiBcIlZlcnMgbCdhdmFudFwiLFxuICAgIH0sXG4gICAgZmF2b3VyaXRlczoge1xuICAgICAgaW1wb3J0ZWQ6IFwiSW1wb3J0YXRpb24gcsOpdXNzaWUhXCIsXG4gICAgICBpbXBvcnRpbmc6IFwiSW1wb3J0YXRpb24gZW4gY291cnMuLi5cIixcbiAgICAgIGNsaWNrX291dGZpdDoge1xuICAgICAgICBkZWxldGU6IFwiU3VwcHJpbWVyXCIsXG4gICAgICAgIGdvdG9fYWNjb3VudDogYFBvdXIgdHJhbnNmw6lyZXIgdGVzIHRlbnVlcyBmYXZvcml0ZXMgZCc8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4gdmVycyB1biBhdXRyZSBuYXZpZ2F0ZXVyLCBleHBvcnRlIHRlcyBwYXJhbcOodHJlcyDDoCBwYXJ0aXIgZGUgbGEgcGFnZSA8YSBocmVmPVwiL3VzZXIvYWNjb3VudFwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+bW9uJm5ic3A7Y29tcHRlPC9hPi5gLFxuICAgICAgICBzYXZlZF9sb2NhbGx5OiBgUHJlbmRzIG5vdGUgcXVlIGNldHRlIHRlbnVlIGVzdCBzYXV2ZWdhcmTDqWUgbG9jYWxlbWVudCBkYW5zIGxlcyBwYXJhbcOodHJlcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBldCBuJ2EgcGFzIMOpdMOpIGVudm95w6llIGF1eCBzZXJ2ZXVycyBkJ0VsZGFyeWEuYCxcbiAgICAgICAgd2VhcjogXCJQb3J0ZXJcIixcbiAgICAgIH0sXG4gICAgICBzYXZlX291dGZpdDoge1xuICAgICAgICBnb3RvX2FjY291bnQ6IGBQb3VyIHRyYW5zZsOpcmVyIHRlcyB0ZW51ZXMgZmF2b3JpdGVzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZSB0ZXMgcGFyYW3DqHRyZXMgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm1vbiZuYnNwO2NvbXB0ZTwvYT4uYCxcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTm9tLi4uXCIsXG4gICAgICAgIHNhdmU6IFwiU2F1dmVnYXJkZXJcIixcbiAgICAgICAgc2F2ZWRfbG9jYWxseTogYFByZW5kcyBub3RlIHF1ZSBjZXR0ZSB0ZW51ZSBzZXJhIHNhdXZlZ2FyZMOpZSBsb2NhbGVtZW50IGRhbnMgbGVzIHBhcmFtw6h0cmVzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IGV0IG5lIHNlcmEgcGFzIGVudm95w6llIGF1eCBzZXJ2ZXVycyBkJ0VsZGFyeWEuYCxcbiAgICAgICAgdGl0bGU6IFwiU2F1dmVnYXJkZXIgY2V0dGUgdGVudWVcIixcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiB7XG4gICAgICAgIGRvd25sb2FkOiBcIlTDqWzDqWNoYXJnZXIgbGUgUE5HXCIsXG4gICAgICAgIGV4cG9ydDogXCJFeHBvcnRlclwiLFxuICAgICAgICBpbXBvcnQ6IFwiSW1wb3J0ZXJcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBsb2FkZWQ6IFwiTGUgY2hhcmdlbWVudCBkZSBsYSBnYXJkZS1yb2JlIGVzdCB0ZXJtaW7DqS5cIixcbiAgICBsb2FkaW5nOiAoY2F0ZWdvcnluYW1lOiBzdHJpbmcpID0+XG4gICAgICBgQ2hhcmdlbWVudCBkZSA8c3Ryb25nPiR7Y2F0ZWdvcnluYW1lfTwvc3Ryb25nPi4uLmAsXG4gIH0sXG4gIG1hcmtldDoge1xuICAgIGFkZF90b193aXNobGlzdDoge1xuICAgICAgYWRkZWRfdG9fd2lzaGxpc3Q6IChuYW1lOiBzdHJpbmcsIHByaWNlOiBudW1iZXIpID0+XG4gICAgICAgIGBBam91dMOpIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBwb3VyIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiDDoCBsYSBsaXN0ZSBkZSBzb3VoYWl0cy5gLFxuICAgICAgaW52YWxpZF9wcmljZTogXCJDZSBwcml4IG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgICBzYXZlOiBcIlNhdXZlZ2FyZGVyXCIsXG4gICAgICB0ZXh0OiBcIkNvbWJpZW4gZGUgbWFhbmFzIHNvdWhhaXRlcy10dSBvZmZyaXIgcG91ciBhY3F1w6lyaXIgY2V0IGl0ZW0/XCIsXG4gICAgICB0aXRsZTogXCJBam91dGVyIMOgIGxhIGxpc3RlIGRlIHNvdWhhaXRcIixcbiAgICB9LFxuICAgIGF1Y3Rpb25zOiB7XG4gICAgICBidXlfbm93X3ByaWNlOiBcIkFjaGF0IGltbcOpZGlhdCA6XCIsXG4gICAgICBjdXJyZW50X3ByaWNlOiBcIk1pc2UgYWN0dWVsbGUgOlwiLFxuICAgICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgICAgcHVyY2hhc2VfaGlzdG9yeTogXCJIaXN0b3JpcXVlIGQnYWNoYXRcIixcbiAgICAgIHNhbGVzX2hpc3Rvcnk6IFwiSGlzdG9yaXF1ZSBkZSB2ZW50ZVwiLFxuICAgICAgZGF0ZV90aW1lX2Zvcm1hdDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJmci1DQVwiLCB7XG4gICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgICBkYXk6IFwibnVtZXJpY1wiLFxuICAgICAgICBtb250aDogXCJsb25nXCIsXG4gICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBjaGFuZ2VfcHJpY2U6IHtcbiAgICAgIGNoYW5nZWRfcHJpY2U6IChuYW1lOiBzdHJpbmcsIHByaWNlOiBudW1iZXIpID0+XG4gICAgICAgIGBDaGFuZ8OpIGxlIHByaXggZGUgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+IHBvdXIgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmAsXG4gICAgICBpbnZhbGlkX3ByaWNlOiBcIkNlIHByaXggbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICAgIHNhdmU6IFwiU2F1dmVnYXJkZXJcIixcbiAgICAgIHRleHQ6IFwiQ29tYmllbiBkZSBtYWFuYXMgc291aGFpdGVzLXR1IG9mZnJpciBwb3VyIGFjcXXDqXJpciBjZXQgaXRlbT9cIixcbiAgICAgIHRpdGxlOiBcIkNoYW5nZXIgbGUgcHJpeFwiLFxuICAgIH0sXG4gICAgd2lzaGxpc3Q6IHtcbiAgICAgIGFzc2lzdGFuY2U6IGBTdXIgY2V0dGUgcGFnZSwgdHUgcGV1eCBvcmdhbmlzZXIgdGEgbGlzdGUgZGUgc291aGFpdHMgZXQgdsOpcmlmaWVyIGxlIHN0YXR1dCBkZSB0ZXMgYXJ0aWNsZXMgc291aGFpdMOpcy4gUHJlbmRzIG5vdGUgcXVlIHRhIGxpc3RlIGRlIHNvdWhhaXRzIGVzdCBzYXV2ZWdhcmTDqWUgbG9jYWxlbWVudCBkYW5zIGxlcyBwYXJhbcOodHJlcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBldCBuJ2VzdCBwYXMgZW52b3nDqWUgYXV4IHNlcnZldXJzIGQnRWxkYXJ5YS4gUG91ciB0cmFuc2bDqXJlciB0YSBsaXN0ZSBkZSBzb3VoYWl0cyB2ZXJzIHVuIGF1dHJlIG5hdmlnYXRldXIsIGV4cG9ydGUtbGEgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm1vbiZuYnNwO2NvbXB0ZTwvYT4uYCxcbiAgICAgIGFjdGlvbnM6IFwiQWN0aW9uc1wiLFxuICAgICAgY2hhbmdlX3ByaWNlOiBcIkNoYW5nZXIgbGUgcHJpeFwiLFxuICAgICAgZGVsZXRlX3Rvb2x0aXA6IFwiUmV0aXJlciBkZSBsYSBsaXN0ZSBkZSBzb3VoYWl0c1wiLFxuICAgICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgICAgaWNvbjogXCJJY8O0bmVcIixcbiAgICAgIG5hbWU6IFwiTm9tXCIsXG4gICAgICBwcmljZTogXCJQcml4XCIsXG4gICAgICByZXNldF90b29sdGlwOiBcIlLDqWluaXRpYWxpc2VyIGwnw6l0YXQgZCdlcnJldXJcIixcbiAgICAgIHJlc2V0OiBcIlLDqWluaXRpYWxpc2VyXCIsXG4gICAgICBzdGF0dXM6IFwiU3RhdHV0XCIsXG4gICAgICB0aXRsZTogXCJMaXN0ZSBkZSBzb3VoYWl0c1wiLFxuICAgIH0sXG4gIH0sXG4gIGFjY291bnQ6IHtcbiAgICBkZWJ1Z190b29sdGlwOiBcIkFjdGl2ZSBvdSBkw6lzYWN0aXZlIGxhIGpvdXJuYWxpc2F0aW9uLlwiLFxuICAgIGRlYnVnOiBcIkTDqWJvZ2FnZVwiLFxuICAgIGVuaGFuY2VtZW50czogXCJBbcOpbGlvcmF0aW9uc1wiLFxuICAgIGV4cGxvcmF0aW9uczogXCJFeHBsb3JhdGlvbnNcIixcbiAgICBleHBvcnQ6IFwiRXhwb3J0ZXIgbGVzIHBhcmFtw6h0cmVzXCIsXG4gICAgaW1wb3J0OiBcIkltcG9ydGVyIGxlcyBwYXJhbcOodHJlc1wiLFxuICAgIGltcG9ydGVkOiBcIlBhcmFtw6h0cmVzIGltcG9ydMOpc1wiLFxuICAgIG1hcmtldDogXCJNYXJjaMOpXCIsXG4gICAgbWluaWdhbWVzOiBcIk1pbmktamV1eFwiLFxuICB9LFxuICBwZXQ6IHtcbiAgICBhdXRvX2V4cGxvcmU6IFwiTWFycXVlclwiLFxuICAgIGRhdGVfdGltZV9mb3JtYXQ6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZnItQ0FcIiwge1xuICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgZGF5OiBcIm51bWVyaWNcIixcbiAgICAgIG1vbnRoOiBcImxvbmdcIixcbiAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgIH0pLFxuICAgIGRlbGV0ZV9oaXN0b3J5OiBcIk5ldHRveWVyIGwnaGlzdG9yaXF1ZVwiLFxuICAgIGVtcHR5X2hpc3Rvcnk6XG4gICAgICBcIlRvbiBoaXN0b3JpcXVlIGQnZXhwbG9yYXRpb24gZXN0IHZpZGUuIElsIHNlIHJlbXBsaXJhIGF1dG9tYXRpcXVlbWVudCDDoCBtZXN1cmUgcXVlIHRvbiBmYW1pbGllciB0cm91dmVyYSBkZXMgaXRlbXMgZW4gZXhwbG9yYXRpb24uXCIsXG4gICAgZ290b19hY2NvdW50OlxuICAgICAgXCJQb3VyIHRyYW5zZsOpcmVyIHRvbiBoaXN0b3JpcXVlIGQnZXhwbG9yYXRpb25zIHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZSB0ZXMgcGFyYW3DqHRyZXMgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGVtPm1vbiBjb21wdGU8L2VtPi5cIixcbiAgICBoaXN0b3J5OiBcIkhpc3RvcmlxdWVcIixcbiAgICBzYXZlZF9sb2NhbGx5OiBgUHJlbmRzIG5vdGUgcXVlIHRvbiBoaXN0b3JpcXVlIGQnZXhwbG9yYXRpb25zIGVzdCBzYXV2ZWdhcmTDqSBsb2NhbGVtZW50IGRhbnMgbGVzIHBhcmFtw6h0cmVzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IGV0IG4nYSBwYXMgw6l0w6kgZW52b3nDqSBhdXggc2VydmV1cnMgZCdFbGRhcnlhLmAsXG4gIH0sXG4gIHByb2ZpbGU6IHtcbiAgICBleHBvcnRfb3V0Zml0OiBcIkV4cG9ydGVyIGxhIHRlbnVlXCIsXG4gICAgZG93bmxvYWRfb3V0Zml0OiBcIlTDqWzDqWNoYXJnZXIgbGUgUE5HXCIsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgZG93bmxvYWRDYW52YXM6XG4gICAgICBcIlVuZSBlcnJldXIgZXN0IHN1cnZlbnVlIGxvcnMgZHUgdMOpbMOpY2hhcmdlbWVudCBkZSBsJ2ltYWdlLlwiLFxuICB9LFxuICBtYWxsOiB7XG4gICAgYWRkX3RvX3dpc2hsaXN0OiB7XG4gICAgICB0aXRsZTogXCJBam91dGVyIMOgIGxhIGxpc3RlIGRlIHNvdWhhaXQgZHUgbWFyY2jDqVwiLFxuICAgICAgdGV4dDogXCJDb21iaWVuIGRlIG1hYW5hcyBzb3VoYWl0ZXMtdHUgb2ZmcmlyIHBvdXIgYWNxdcOpcmlyIGNldCBpdGVtP1wiLFxuICAgICAgbm90ZTogXCJQcmVuZHMgbm90ZSBxdWUgbGVzIGl0ZW1zIGFqb3V0w6lzIMOgIHBhcnRpciBkZSBsYSBib3V0aXF1ZSBuZSBzZXJvbnQgcGFzIG7DqWNlc3NhaXJlbWVudCBkaXNwb25pYmxlcyBhdSBtYXJjaMOpLlwiLFxuICAgIH0sXG4gIH0sXG59XG5cbk9iamVjdC5mcmVlemUoZnIpXG4iLCJpbXBvcnQgeyBlbiB9IGZyb20gXCIuL2VuXCJcbmltcG9ydCB7IGZyIH0gZnJvbSBcIi4vZnJcIlxuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbiB9IGZyb20gXCIuL3RyYW5zbGF0aW9uXCJcblxuZnVuY3Rpb24gdHJhbnNsYXRpb24oKTogVHJhbnNsYXRpb24ge1xuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuY29tLmJyXCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLmRlXCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLmVzXCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLmh1XCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLml0XCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLnBsXCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLnJ1XCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLmNvbVwiKSkgcmV0dXJuIGVuXG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5mclwiKSkgcmV0dXJuIGZyXG4gIGVsc2UgcmV0dXJuIGVuXG59XG5cbmV4cG9ydCBjb25zdCB0cmFuc2xhdGUgPSB0cmFuc2xhdGlvbigpXG4iLCJleHBvcnQgZW51bSBEYXRhYmFzZXMge1xuICBlbGRhcnlhX2VuaGFuY2VtZW50cyA9IFwiZWxkYXJ5YV9lbmhhbmNlbWVudHNcIixcbn1cbiIsImV4cG9ydCBlbnVtIEZpZWxkcyB7XG4gIGJsb2IgPSBcImJsb2JcIixcbiAgaWQgPSBcImlkXCIsXG4gIGl0ZW1zID0gXCJpdGVtc1wiLFxuICBuYW1lID0gXCJuYW1lXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IEZhdm91cml0ZU91dGZpdCB9IGZyb20gXCIuLi9hcHBlYXJhbmNlL2ludGVyZmFjZXMvZmF2b3VyaXRlX291dGZpdFwiXG5pbXBvcnQgeyBEYXRhYmFzZXMgfSBmcm9tIFwiLi9kYXRhYmFzZXMuZW51bVwiXG5pbXBvcnQgeyBGaWVsZHMgfSBmcm9tIFwiLi9maWVsZHMuZW51bVwiXG5pbXBvcnQgeyBUYWJsZXMgfSBmcm9tIFwiLi90YWJsZXMuZW51bVwiXG5cbmNsYXNzIEluZGV4ZWREQiB7XG4gIHByaXZhdGUgZGI/OiBJREJEYXRhYmFzZVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihEYXRhYmFzZXMuZWxkYXJ5YV9lbmhhbmNlbWVudHMsIDEpXG4gICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogSURCRGF0YWJhc2UgPT4gKHRoaXMuZGIgPSByZXF1ZXN0LnJlc3VsdClcbiAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uICh0aGlzOiBJREJPcGVuREJSZXF1ZXN0KTogdm9pZCB7XG4gICAgICBjb25zdCBkYjogSURCRGF0YWJhc2UgPSB0aGlzLnJlc3VsdFxuXG4gICAgICBjb25zdCBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFRhYmxlcy5mYXZvdXJpdGVfb3V0Zml0cywge1xuICAgICAgICBrZXlQYXRoOiBcImlkXCIsXG4gICAgICAgIGF1dG9JbmNyZW1lbnQ6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleChGaWVsZHMuYmxvYiwgXCJibG9iXCIsIHsgdW5pcXVlOiBmYWxzZSB9KVxuICAgICAgb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoRmllbGRzLml0ZW1zLCBcIml0ZW1zXCIsIHsgdW5pcXVlOiBmYWxzZSB9KVxuICAgICAgb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoRmllbGRzLm5hbWUsIFwibmFtZVwiLCB7IHVuaXF1ZTogZmFsc2UgfSlcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMgYSBuZXcgYEZhdm91cml0ZU91dGZpdGAgd2l0aCB0aGUgYGtleWAgcHJvcGVydHkgc2V0LiAqL1xuICBhc3luYyBhZGRGYXZvdXJpdGVPdXRmaXQoXG4gICAgZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXRcbiAgKTogUHJvbWlzZTxGYXZvdXJpdGVPdXRmaXQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRiKSByZXR1cm4gdm9pZCByZWplY3QoKVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5kYlxuICAgICAgICAudHJhbnNhY3Rpb24oW1RhYmxlcy5mYXZvdXJpdGVfb3V0Zml0c10sIFwicmVhZHdyaXRlXCIpXG4gICAgICAgIC5vYmplY3RTdG9yZShUYWJsZXMuZmF2b3VyaXRlX291dGZpdHMpXG4gICAgICAgIC5hZGQoZmF2b3VyaXRlKVxuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIC4uLmZhdm91cml0ZSxcbiAgICAgICAgICB1cmw6IGZhdm91cml0ZS51cmwgPz8gVVJMLmNyZWF0ZU9iamVjdFVSTChmYXZvdXJpdGUuYmxvYiksXG4gICAgICAgICAgaWQ6IE51bWJlcihyZXF1ZXN0LnJlc3VsdCksXG4gICAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGNsZWFyRmF2b3VyaXRlT3V0Zml0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRiKSByZXR1cm4gdm9pZCByZWplY3QoKVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5kYlxuICAgICAgICAudHJhbnNhY3Rpb24oW1RhYmxlcy5mYXZvdXJpdGVfb3V0Zml0c10sIFwicmVhZHdyaXRlXCIpXG4gICAgICAgIC5vYmplY3RTdG9yZShUYWJsZXMuZmF2b3VyaXRlX291dGZpdHMpXG4gICAgICAgIC5jbGVhcigpXG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT4gcmVzb2x2ZSgpXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZhdm91cml0ZU91dGZpdChmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGIpIHJldHVybiB2b2lkIHJlamVjdCgpXG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmRiXG4gICAgICAgIC50cmFuc2FjdGlvbihbVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzXSwgXCJyZWFkd3JpdGVcIilcbiAgICAgICAgLm9iamVjdFN0b3JlKFRhYmxlcy5mYXZvdXJpdGVfb3V0Zml0cylcbiAgICAgICAgLmRlbGV0ZShmYXZvdXJpdGUuaWQhKVxuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgIGlmIChmYXZvdXJpdGUudXJsKSBVUkwucmV2b2tlT2JqZWN0VVJMKGZhdm91cml0ZS51cmwpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldEZhdm91cml0ZU91dGZpdChpZDogbnVtYmVyKTogUHJvbWlzZTxGYXZvdXJpdGVPdXRmaXQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRiKSByZXR1cm4gdm9pZCByZWplY3QoKVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5kYlxuICAgICAgICAudHJhbnNhY3Rpb24oW1RhYmxlcy5mYXZvdXJpdGVfb3V0Zml0c10sIFwicmVhZG9ubHlcIilcbiAgICAgICAgLm9iamVjdFN0b3JlKFRhYmxlcy5mYXZvdXJpdGVfb3V0Zml0cylcbiAgICAgICAgLmdldChpZClcblxuICAgICAgY29uc3QgZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXQgPSByZXF1ZXN0LnJlc3VsdFxuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+XG4gICAgICAgIHJlc29sdmUoeyAuLi5mYXZvdXJpdGUsIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChmYXZvdXJpdGUuYmxvYikgfSlcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgZ2V0RmF2b3VyaXRlT3V0Zml0cygpOiBQcm9taXNlPEZhdm91cml0ZU91dGZpdFtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5kYikgcmV0dXJuIHZvaWQgcmVqZWN0KClcblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZGJcbiAgICAgICAgLnRyYW5zYWN0aW9uKFtUYWJsZXMuZmF2b3VyaXRlX291dGZpdHNdLCBcInJlYWRvbmx5XCIpXG4gICAgICAgIC5vYmplY3RTdG9yZShUYWJsZXMuZmF2b3VyaXRlX291dGZpdHMpXG4gICAgICAgIC5nZXRBbGwoKVxuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+XG4gICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgcmVxdWVzdC5yZXN1bHQubWFwPEZhdm91cml0ZU91dGZpdD4oKGZhdm91cml0ZTogRmF2b3VyaXRlT3V0Zml0KSA9PiAoe1xuICAgICAgICAgICAgLi4uZmF2b3VyaXRlLFxuICAgICAgICAgICAgdXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGZhdm91cml0ZS5ibG9iKSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEluZGV4ZWREQigpXG4iLCJleHBvcnQgZW51bSBUYWJsZXMge1xuICBmYXZvdXJpdGVfb3V0Zml0cyA9IFwiZmF2b3VyaXRlX291dGZpdHNcIixcbn1cbiIsImV4cG9ydCBlbnVtIExvY2FsU3RvcmFnZUtleSB7XG4gIGF1dG9FeHBsb3JlTG9jYXRpb25zID0gXCJhdXRvRXhwbG9yZUxvY2F0aW9uc1wiLFxuICBkZWJ1ZyA9IFwiZGVidWdcIixcbiAgZXhwbG9yYXRpb25IaXN0b3J5ID0gXCJleHBsb3JhdGlvbkhpc3RvcnlcIixcbiAgZXhwbG9yYXRpb25zID0gXCJleHBsb3JhdGlvbnNcIixcbiAgbWFya2V0ID0gXCJtYXJrZXRcIixcbiAgbWV0YSA9IFwibWV0YVwiLFxuICBtaW5pZ2FtZXMgPSBcIm1pbmlnYW1lc1wiLFxuICBwdXJjaGFzZXMgPSBcInB1cmNoYXNlc1wiLFxuICBzYWxlcyA9IFwic2FsZXNcIixcbiAgdmVyc2lvbiA9IFwidmVyc2lvblwiLFxuICB3aXNobGlzdCA9IFwid2lzaGxpc3RcIixcbn1cbiIsImltcG9ydCB7IGJhc2U2NFN0cmluZ1RvQmxvYiwgYmxvYlRvQmFzZTY0U3RyaW5nIH0gZnJvbSBcImJsb2ItdXRpbFwiXG5pbXBvcnQgdHlwZSB7IE1ldGEgfSBmcm9tIFwiLi4vYXBpL21ldGFcIlxuaW1wb3J0IHR5cGUgeyBGYXZvdXJpdGVPdXRmaXQgfSBmcm9tIFwiLi4vYXBwZWFyYW5jZS9pbnRlcmZhY2VzL2Zhdm91cml0ZV9vdXRmaXRcIlxuaW1wb3J0IGluZGV4ZWRfZGIgZnJvbSBcIi4uL2luZGV4ZWRfZGIvaW5kZXhlZF9kYlwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB0eXBlIHsgU2V0dGluZ3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvc2V0dGluZ3NcIlxuaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUxvY2F0aW9uIH0gZnJvbSBcIi4vYXV0b19leHBsb3JlX2xvY2F0aW9uXCJcbmltcG9ydCB0eXBlIHsgRXhwbG9yYXRpb25SZXN1bHQgfSBmcm9tIFwiLi9leHBsb3JhdGlvbl9yZXN1bHRcIlxuaW1wb3J0IHR5cGUgeyBFeHBvcnRhYmxlRmF2b3VyaXRlIH0gZnJvbSBcIi4vZXhwb3J0YWJsZV9mYXZvdXJpdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5IH0gZnJvbSBcIi4vbG9jYWxfc3RvcmFnZS5lbnVtXCJcbmltcG9ydCB0eXBlIHsgU2FsZSB9IGZyb20gXCIuL3NhbGVcIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4vd2lzaGVkX2l0ZW1cIlxuXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlXG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc3RhdGljIGdldCBhdXRvRXhwbG9yZUxvY2F0aW9ucygpOiBBdXRvRXhwbG9yZUxvY2F0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08QXV0b0V4cGxvcmVMb2NhdGlvbltdPihcbiAgICAgIExvY2FsU3RvcmFnZUtleS5hdXRvRXhwbG9yZUxvY2F0aW9ucyxcbiAgICAgIFtdXG4gICAgKVxuICB9XG5cbiAgc3RhdGljIHNldCBhdXRvRXhwbG9yZUxvY2F0aW9ucyhsb2NhdGlvbnM6IEF1dG9FeHBsb3JlTG9jYXRpb25bXSkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuYXV0b0V4cGxvcmVMb2NhdGlvbnMsIGxvY2F0aW9ucylcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVidWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkuZGVidWcsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBkZWJ1ZyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5kZWJ1ZywgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXhwbG9yYXRpb25IaXN0b3J5KCk6IEV4cGxvcmF0aW9uUmVzdWx0W10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08RXhwbG9yYXRpb25SZXN1bHRbXT4oXG4gICAgICBMb2NhbFN0b3JhZ2VLZXkuZXhwbG9yYXRpb25IaXN0b3J5LFxuICAgICAgW11cbiAgICApXG4gIH1cblxuICBzdGF0aWMgc2V0IGV4cGxvcmF0aW9uSGlzdG9yeShleHBsb3JhdGlvbkhpc3Rvcnk6IEV4cGxvcmF0aW9uUmVzdWx0W10pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LmV4cGxvcmF0aW9uSGlzdG9yeSwgZXhwbG9yYXRpb25IaXN0b3J5KVxuICB9XG5cbiAgc3RhdGljIGdldCBleHBsb3JhdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgZXhwbG9yYXRpb25zKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LmV4cGxvcmF0aW9ucywgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWFya2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5Lm1hcmtldCwgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IG1hcmtldChlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5tYXJrZXQsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldGEoKTogTWV0YSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08TWV0YSB8IG51bGw+KExvY2FsU3RvcmFnZUtleS5tZXRhLCBudWxsKVxuICB9XG5cbiAgc3RhdGljIHNldCBtZXRhKG1ldGE6IE1ldGEgfCBudWxsKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5tZXRhLCBtZXRhKVxuICB9XG5cbiAgc3RhdGljIGdldCBtaW5pZ2FtZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkubWluaWdhbWVzLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWluaWdhbWVzKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5Lm1pbmlnYW1lcywgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHVyY2hhc2VzKCk6IE1hcmtldEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08TWFya2V0RW50cnlbXT4oTG9jYWxTdG9yYWdlS2V5LnB1cmNoYXNlcywgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHB1cmNoYXNlcyhlbnRyeTogTWFya2V0RW50cnlbXSkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkucHVyY2hhc2VzLCBlbnRyeSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2FsZXMoKTogU2FsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPFNhbGVbXT4oTG9jYWxTdG9yYWdlS2V5LnNhbGVzLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgc2FsZXMoc2FsZTogU2FsZVtdKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5zYWxlcywgc2FsZSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08c3RyaW5nPihMb2NhbFN0b3JhZ2VLZXkudmVyc2lvbiwgXCJcIilcbiAgfVxuXG4gIHN0YXRpYyBzZXQgdmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LnZlcnNpb24sIHZlcnNpb24pXG4gIH1cblxuICBzdGF0aWMgZ2V0IHdpc2hsaXN0KCk6IFdpc2hlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxXaXNoZWRJdGVtW10+KExvY2FsU3RvcmFnZUtleS53aXNobGlzdCwgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHdpc2hsaXN0KGxvY2F0aW9uczogV2lzaGVkSXRlbVtdKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS53aXNobGlzdCwgbG9jYXRpb25zKVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldFNldHRpbmdzKCk6IFByb21pc2U8U2V0dGluZ3M+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXV0b0V4cGxvcmVMb2NhdGlvbnM6IHRoaXMuYXV0b0V4cGxvcmVMb2NhdGlvbnMsXG4gICAgICBkZWJ1ZzogdGhpcy5kZWJ1ZyxcbiAgICAgIGV4cGxvcmF0aW9uSGlzdG9yeTogdGhpcy5leHBsb3JhdGlvbkhpc3RvcnksXG4gICAgICBleHBsb3JhdGlvbnM6IHRoaXMuZXhwbG9yYXRpb25zLFxuICAgICAgZmF2b3VyaXRlczogYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIChcbiAgICAgICAgICBhd2FpdCBpbmRleGVkX2RiLmdldEZhdm91cml0ZU91dGZpdHMoKVxuICAgICAgICApLm1hcDxQcm9taXNlPEV4cG9ydGFibGVGYXZvdXJpdGU+Pihhc3luYyBmYXZvdXJpdGUgPT4gKHtcbiAgICAgICAgICBuYW1lOiBmYXZvdXJpdGUubmFtZSxcbiAgICAgICAgICBpdGVtczogZmF2b3VyaXRlLml0ZW1zLFxuICAgICAgICAgIGJhc2U2NDogYXdhaXQgYmxvYlRvQmFzZTY0U3RyaW5nKGZhdm91cml0ZS5ibG9iKSxcbiAgICAgICAgfSkpXG4gICAgICApLFxuICAgICAgbWFya2V0OiB0aGlzLm1hcmtldCxcbiAgICAgIG1pbmlnYW1lczogdGhpcy5taW5pZ2FtZXMsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICB3aXNobGlzdDogdGhpcy53aXNobGlzdCxcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgc2V0U2V0dGluZ3Moc2V0dGluZ3M6IFNldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IHNldHRpbmdzLmF1dG9FeHBsb3JlTG9jYXRpb25zXG4gICAgdGhpcy5kZWJ1ZyA9IHNldHRpbmdzLmRlYnVnXG4gICAgdGhpcy5leHBsb3JhdGlvbkhpc3RvcnkgPSBzZXR0aW5ncy5leHBsb3JhdGlvbkhpc3RvcnlcbiAgICB0aGlzLmV4cGxvcmF0aW9ucyA9IHNldHRpbmdzLmV4cGxvcmF0aW9uc1xuICAgIHRoaXMubWFya2V0ID0gc2V0dGluZ3MubWFya2V0XG4gICAgdGhpcy5taW5pZ2FtZXMgPSBzZXR0aW5ncy5taW5pZ2FtZXNcbiAgICB0aGlzLnZlcnNpb24gPSBzZXR0aW5ncy52ZXJzaW9uXG4gICAgdGhpcy53aXNobGlzdCA9IHNldHRpbmdzLndpc2hsaXN0XG5cbiAgICBhd2FpdCBpbmRleGVkX2RiLmNsZWFyRmF2b3VyaXRlT3V0Zml0cygpXG4gICAgZm9yIChjb25zdCBmYXZvdXJpdGUgb2Ygc2V0dGluZ3MuZmF2b3VyaXRlcy5tYXA8RmF2b3VyaXRlT3V0Zml0PihcbiAgICAgIGZhdm91cml0ZSA9PiAoe1xuICAgICAgICBibG9iOiBiYXNlNjRTdHJpbmdUb0Jsb2IoZmF2b3VyaXRlLmJhc2U2NCksXG4gICAgICAgIGl0ZW1zOiBmYXZvdXJpdGUuaXRlbXMsXG4gICAgICAgIG5hbWU6IGZhdm91cml0ZS5uYW1lLFxuICAgICAgfSlcbiAgICApKSB7XG4gICAgICB2b2lkIGluZGV4ZWRfZGIuYWRkRmF2b3VyaXRlT3V0Zml0KGZhdm91cml0ZSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRJdGVtPFQ+KGtleTogTG9jYWxTdG9yYWdlS2V5LCBmYWxsYmFjazogVCk6IFQge1xuICAgIHJldHVybiAoSlNPTi5wYXJzZShcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSA/PyBKU09OLnN0cmluZ2lmeShmYWxsYmFjaylcbiAgICApID8/IGZhbGxiYWNrKSBhcyBUXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzZXRJdGVtPFQ+KGtleTogTG9jYWxTdG9yYWdlS2V5LCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpXG4gIH1cbn1cbiIsImV4cG9ydCBlbnVtIEJvZHlMb2NhdGlvbiB7XG4gIEFsbCA9IFwiXCIsXG4gIFVuZGVyd2VhciA9IDEsXG4gIFNraW5zID0gMixcbiAgVGF0dG9vcyA9IDIwLFxuICBNb3V0aHMgPSAyMSxcbiAgRXllcyA9IDMsXG4gIEhhaXIgPSA0LFxuICBTb2NrcyA9IDUsXG4gIFNob2VzID0gNixcbiAgUGFudHMgPSA3LFxuICBIYW5kQWNjZXNzb3JpZXMgPSA4LFxuICBUb3BzID0gOSxcbiAgQ29hdHMgPSAxMCxcbiAgR2xvdmVzID0gMTEsXG4gIE5lY2tsYWNlcyA9IDEyLFxuICBEcmVzc2VzID0gMTMsXG4gIEhhdHMgPSAxNCxcbiAgRmFjZUFjY2Vzc29yaWVzID0gMTUsXG4gIEZ1bmRzID0gMTYsXG4gIEJlbHRzID0gMTgsXG4gIEF0bW9zcGhlcmVzID0gMTksXG59XG4iLCJpbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4vdHlwZS5lbnVtXCJcblxuZXhwb3J0IGVudW0gQ2F0ZWdvcnlTdHJpbmcge1xuICBhbGwgPSBcIlwiLFxuICBmb29kID0gXCJmb29kXCIsXG4gIGFsY2hlbXkgPSBcImFsY2hlbXlcIixcbiAgdXRpbGl0eSA9IFwidXRpbGl0eVwiLFxuICB0YW1lID0gXCJ0YW1lXCIsXG59XG5cbmV4cG9ydCBlbnVtIENhdGVnb3J5TnVtYmVyIHtcbiAgYWxsID0gQ2F0ZWdvcnlTdHJpbmcuYWxsLFxuICBmb29kID0gMSxcbiAgYWxjaGVteSA9IFR5cGUuQ29uc3VtYWJsZSxcbiAgdXRpbGl0eSA9IDMsXG4gIHRhbWUgPSA0LFxufVxuIiwiZXhwb3J0IGVudW0gR3VhcmQge1xuICBhbnkgPSBcIlwiLFxuICBsaWdodCA9IDEsXG4gIG9ic2lkaWFuLFxuICBhYnN5bnRoZSxcbiAgc2hhZG93LFxufVxuIiwiZXhwb3J0IGVudW0gUmFyaXR5IHtcbiAgYWxsID0gXCJcIixcbiAgY29tbW9uID0gXCJjb21tb25cIixcbiAgcmFyZSA9IFwicmFyZVwiLFxuICBlcGljID0gXCJlcGljXCIsXG4gIGxlZ2VuZGFyeSA9IFwibGVnZW5kYXJ5XCIsXG4gIGV2ZW50ID0gXCJldmVudFwiLFxufVxuIiwiZXhwb3J0IGVudW0gVHlwZSB7XG4gIEFsbCA9IFwiXCIsXG4gIEJhZyA9IFwiQmFnXCIsXG4gIENvbnN1bWFibGUgPSBcIkNvbnN1bWFibGVcIixcbiAgRWdnSXRlbSA9IFwiRWdnSXRlbVwiLFxuICBQbGF5ZXJXZWFyYWJsZUl0ZW0gPSBcIlBsYXllcldlYXJhYmxlSXRlbVwiLFxuICBRdWVzdEl0ZW0gPSBcIlF1ZXN0SXRlbVwiLFxufVxuIiwiaW1wb3J0IHsgdHJpbUljb24gfSBmcm9tIFwiLi4vZWxkYXJ5YV91dGlsXCJcbmltcG9ydCB7IFJhcml0eSB9IGZyb20gXCIuL2VudW1zL3Jhcml0eS5lbnVtXCJcbmltcG9ydCB0eXBlIHsgQnV5Tm93UHJpY2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2J1eV9ub3dfcHJpY2VcIlxuaW1wb3J0IHR5cGUgeyBDdXJyZW50UHJpY2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2N1cnJlbnRfcHJpY2VcIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnlEYXRhU2V0IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlfZGF0YV9zZXRcIlxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURldGFpbHMobGk6IEhUTUxMSUVsZW1lbnQpOiBNYXJrZXRFbnRyeSB8IG51bGwge1xuICBjb25zdCBuYW1lID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIuYWJzdHJhY3QtbmFtZVwiKT8uaW5uZXJUZXh0XG4gIGNvbnN0IGFic3RyYWN0VHlwZSA9XG4gICAgbGkucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIuYWJzdHJhY3QtdHlwZVwiKT8uaW5uZXJUZXh0XG4gIGNvbnN0IHNyYyA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIuYWJzdHJhY3QtaWNvbiBpbWdcIik/LnNyY1xuXG4gIGNvbnN0IHJhcml0eTogUmFyaXR5ID1cbiAgICBSYXJpdHlbXG4gICAgICAobGlcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgXCIucmFyaXR5LW1hcmtlci1jb21tb24sIC5yYXJpdHktbWFya2VyLXJhcmUsIC5yYXJpdHktbWFya2VyLWVwaWMsIC5yYXJpdHktbWFya2VyLWxlZ2VuZGFyeSwgLnJhcml0eS1tYXJrZXItZXZlbnRcIlxuICAgICAgICApXG4gICAgICAgID8uY2xhc3NOYW1lLnNwbGl0KFwicmFyaXR5LW1hcmtlci1cIilbMV0gPz8gXCJcIikgYXMga2V5b2YgdHlwZW9mIFJhcml0eVxuICAgIF1cblxuICBjb25zdCBjdXJyZW50UHJpY2UgPSBsaS5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFxuICAgIFwiLnByaWNlLWl0ZW1bZGF0YS1iaWRzXVwiXG4gICk/LmRhdGFzZXQgYXMgdW5rbm93biBhcyBDdXJyZW50UHJpY2VcblxuICBjb25zdCBidXlOb3dQcmljZSA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXG4gICAgXCIucHJpY2UtaXRlbTpub3QoW2RhdGEtYmlkc10pXCJcbiAgKT8uZGF0YXNldCBhcyB1bmtub3duIGFzIEJ1eU5vd1ByaWNlXG5cbiAgaWYgKCFzcmMgfHwgIW5hbWUgfHwgIWFic3RyYWN0VHlwZSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4ge1xuICAgIC4uLihsaS5kYXRhc2V0IGFzIHVua25vd24gYXMgTWFya2V0RW50cnlEYXRhU2V0KSxcbiAgICBpY29uOiB0cmltSWNvbihzcmMpLFxuICAgIHJhcml0eSxcbiAgICBuYW1lLFxuICAgIGFic3RyYWN0VHlwZSxcbiAgICBidXlOb3dQcmljZSxcbiAgICBjdXJyZW50UHJpY2UsXG4gICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIE1hdGhVdGlsIHtcbiAgc3RhdGljIHJlYWRvbmx5IHBoaSA9ICgxICsgTWF0aC5zcXJ0KDUpKSAvIDJcblxuICBzdGF0aWMgcmFuZG9tQmV0d2VlbihtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW5cbiAgfVxufVxuIiwiaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGUoKTogdm9pZCB7XG4gIHN3aXRjaCAoTG9jYWxTdG9yYWdlLnZlcnNpb24pIHtcbiAgICBjYXNlIEdNLmluZm8uc2NyaXB0LnZlcnNpb246XG4gICAgICByZXR1cm5cblxuICAgIGNhc2UgXCJcIjpcbiAgICAgIGluc3RhbGxlZCgpXG4gICAgICBicmVha1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHN3aXRjaCAoR00uaW5mby5zY3JpcHQudmVyc2lvbikge1xuICAgICAgICBjYXNlIFwiMS4yLjBcIjpcbiAgICAgICAgICB2MV8yXzAoKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcIjEuMi45XCI6XG4gICAgICAgICAgdjFfMl85KClcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgXCIxLjIuMTBcIjpcbiAgICAgICAgICB2MV8yXzEwKClcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgXCIxLjIuMTNcIjpcbiAgICAgICAgICB2MV8yXzEzKClcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaW5zdGFsbGVkKClcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICB9XG5cbiAgTG9jYWxTdG9yYWdlLnZlcnNpb24gPSBHTS5pbmZvLnNjcmlwdC52ZXJzaW9uXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxlZCgpOiB2b2lkIHtcbiAgJC5mbGF2ck5vdGlmKGAke25hbWUoKX0gJHt2ZXJzaW9uKCl9IGluc3RhbGxlZCFgKVxufVxuXG5mdW5jdGlvbiBuYW1lKCk6IHN0cmluZyB7XG4gIHJldHVybiBgPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+YFxufVxuXG5mdW5jdGlvbiB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gIHJldHVybiBgdjxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC52ZXJzaW9ufTwvc3Ryb25nPmBcbn1cblxuZnVuY3Rpb24gdjFfMl8wKCk6IHZvaWQge1xuICBMb2NhbFN0b3JhZ2Uuc2FsZXMgPSBbXVxuICAkLmZsYXZyTm90aWYoYFVwZGF0ZWQgdG8gJHt2ZXJzaW9uKCl9LiBZb3VyIHNhbGVzIGhpc3Rvcnkgd2FzIGVyYXNlZC5gKVxufVxuXG5mdW5jdGlvbiB2MV8yXzkoKTogdm9pZCB7XG4gICQuZmxhdnJOb3RpZihcbiAgICBgVXBkYXRlZCB0byAke3ZlcnNpb24oKX0uIFRoZSB3aXNobGlzdCBoYXMgYmVlbiBpbXByb3ZlZCB0byBzb3J0IGJ5IGNhdGVnb3J5L3R5cGUvbmFtZSwgYnV0IHlvdXIgd2lzaGVkIGl0ZW1zIGRvIG5vdCBoYXZlIGEgdHlwZS4gWW91IGNhbiBhZGQgdHlwZXMgYnkgcmUtYWRkaW5nIHRoZSBpdGVtcyB2aWEgdGhlIG1hcmtldC5gXG4gIClcbn1cblxuZnVuY3Rpb24gdjFfMl8xMCgpOiB2b2lkIHtcbiAgJC5mbGF2ck5vdGlmKFxuICAgIGBVcGRhdGVkIHRvICR7dmVyc2lvbigpfS4gVGhlIHdpc2hsaXN0IGhhcyBiZWVuIGltcHJvdmVkIHRvIHNvcnQgYnkgY2F0ZWdvcnkvdHlwZS9yYXJpdHkvbmFtZSwgYnV0IHlvdXIgd2lzaGVkIGl0ZW1zIGRvIG5vdCBoYXZlIGEgcmFyaXR5LiBZb3UgY2FuIGFkZCByYXJpdGllcyBieSByZS1hZGRpbmcgdGhlIGl0ZW1zIHZpYSB0aGUgbWFya2V0LmBcbiAgKVxufVxuXG5mdW5jdGlvbiB2MV8yXzEzKCk6IHZvaWQge1xuICAkLmZsYXZyTm90aWYoXG4gICAgYFVwZGF0ZWQgdG8gJHt2ZXJzaW9uKCl9LiBUaGUgZW5oYW5jZWQgZHJlc3NpbmcgZXhwZXJpZW5jZSB3YXMgZGlzYWJsZWQuYFxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB0eXBlIHsgR2V0UHJpemVzRGF0YSB9IGZyb20gXCIuLi9hcGkvZ2V0X3ByaXplc19kYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHR5cGUgeyBTdGFydEdhbWVEYXRhIH0gZnJvbSBcIi4uL2FwaS9zdGFydF9nYW1lX2RhdGFcIlxuaW1wb3J0IFwiLi4vZWxkYXJ5YS9qcXVlcnlcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IGZsYXBweSB9IGZyb20gXCIuL2ZsYXBweVwiXG5pbXBvcnQgeyBoYXRjaGxpbmdzIH0gZnJvbSBcIi4vaGF0Y2hsaW5nc1wiXG5pbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxuaW1wb3J0IHsgcGVnZ2xlIH0gZnJvbSBcIi4vcGVnZ2xlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlQZWdnbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBwbGF5KHBlZ2dsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlGbGFwcHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBwbGF5KGZsYXBweSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlIYXRjaGxpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gcGxheShoYXRjaGxpbmdzKVxufVxuXG5hc3luYyBmdW5jdGlvbiBwbGF5KG1pbmlnYW1lOiBNaW5pZ2FtZSk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBEaXNhYmxlIGJ1dHRvbnNcbiAgYXdhaXQgbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MQnV0dG9uRWxlbWVudD4oXG4gICAgICAgIFwiLm1pbmlnYW1lcy1ydWxlcyAuZmxhdnItYnV0dG9uXCJcbiAgICAgIClcblxuICAgICAgaWYgKGJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG5cbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgYnV0dG9ucykge1xuICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgIH1cbiAgICB9LCAyNTApXG4gIH0pXG5cbiAgY29uc3QganNvbiA9IGF3YWl0IGV4ZWN1dGUobWluaWdhbWUpXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4ubWluaWdhbWUsXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWluaWdhbWVzLnBsYXlpbmcobWluaWdhbWUubmFtZSksXG4gICAgfSlcbiAgKVxuXG4gIGNvbnN0IGdhbWVUb2tlbiA9IGpzb24uZGF0YVxuICBjb25zdCBzY29yZSA9IHJhbmRvbUludChtaW5pZ2FtZS5zY29yZU1pbiwgbWluaWdhbWUuc2NvcmVNYXgpXG4gIGNvbnN0IGVuY190b2tlbiA9IHhvckVuY29kZShnYW1lVG9rZW4sIHNjb3JlLnRvU3RyaW5nKCkpXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT5cbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHJhbmRvbUludChtaW5pZ2FtZS5kZWxheU1pbiwgbWluaWdhbWUuZGVsYXlNYXgpKVxuICApXG5cbiAgYXdhaXQgZ2V0UHJpemVzKG1pbmlnYW1lLCBnYW1lVG9rZW4sIHNjb3JlKVxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKSlcblxuICBhd2FpdCBzZW5kKGVuY190b2tlbiwgc2NvcmUsIG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHJhbmRvbUludCgxMDAwLCAzMDAwKSkpXG59XG5cbmZ1bmN0aW9uIHJhbmRvbUludChtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKVxufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlKG1pbmlnYW1lOiBNaW5pZ2FtZSk6IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAodHlwZW9mIFJlY2FwdGNoYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgUmVjYXB0Y2hhLmV4ZWN1dGUoXG4gICAgICAgIGBtaW5pZ2FtZVN0YXJ0JHttaW5pZ2FtZS5uYW1lfWAsXG4gICAgICAgICh0b2tlbik6IHZvaWQgPT5cbiAgICAgICAgICB2b2lkIHN0YXJ0R2FtZShtaW5pZ2FtZSwgdG9rZW4pLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIHN0YXJ0R2FtZShtaW5pZ2FtZSkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgfVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydEdhbWUoXG4gIG1pbmlnYW1lOiBNaW5pZ2FtZSxcbiAgcmVjYXB0Y2hhVG9rZW4/OiBzdHJpbmdcbik6IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+KFxuICAgIChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICB2b2lkICQuYWpheCh7XG4gICAgICAgIHVybDogXCIvbWluaWdhbWVzL2FqYXhfc3RhcnRHYW1lXCIsXG4gICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgIGRhdGE6IHJlY2FwdGNoYVRva2VuXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGdhbWU6IG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgcmVjYXB0Y2hhVG9rZW46IHJlY2FwdGNoYVRva2VuLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBnYW1lOiBtaW5pZ2FtZS5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICBzdWNjZXNzOiAoanNvbjogUGFja2V0PFN0YXJ0R2FtZURhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShqc29uKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlamVjdCgpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICApXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFByaXplcyhcbiAgbWluaWdhbWU6IE1pbmlnYW1lLFxuICBnYW1lVG9rZW46IHN0cmluZyxcbiAgc2NvcmU6IG51bWJlclxuKTogUHJvbWlzZTxQYWNrZXQ8R2V0UHJpemVzRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxHZXRQcml6ZXNEYXRhPj4oXG4gICAgKHJlc29sdmUpOiB2b2lkID0+XG4gICAgICB2b2lkICQucG9zdChcbiAgICAgICAgXCIvbWluaWdhbWVzL2FqYXhfZ2V0UHJpemVzXCIsXG4gICAgICAgIHsgZ2FtZTogbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpLCBzY29yZTogc2NvcmUgfSxcbiAgICAgICAgKGpzb246IFBhY2tldDxHZXRQcml6ZXNEYXRhPik6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICAgIGlmIChqc29uLnJlc3VsdCA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9pY29uX21lc3NhZ2UuaHRtbFwiKVxuXG4gICAgICAgICAgICAkLmZsYXZyTm90aWYoXG4gICAgICAgICAgICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAgICAgICAgICAgLi4ubWluaWdhbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLm1pbmlnYW1lcy5wbGF5ZWRfZm9yKFxuICAgICAgICAgICAgICAgICAgbWluaWdhbWUubmFtZSxcbiAgICAgICAgICAgICAgICAgIGpzb24uZGF0YS5tYWFuYVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSBlbHNlICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgIH0sXG4gICAgICAgIFwianNvblwiXG4gICAgICApLmZhaWwoKCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShnZXRQcml6ZXMobWluaWdhbWUsIGdhbWVUb2tlbiwgc2NvcmUpKVxuICAgICAgICB9LCByYW5kb21JbnQoMTAwMCwgMzAwMCkpXG4gICAgICApXG4gIClcbn1cblxuLyoqXG4gKiBTw6ljdXJpc2F0aW9uIGRlIGwnZW52b2kgZHUgc2NvcmVcbiAqIEJhc8OpIHN1ciBsJ2VuY29kYWdlIFhPUiA6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWE9SX2NpcGhlclxuICogRWZmZWN0dWUgdW4gWE9SIGJpdCDDoCBiaXQgZW50cmUgdW5lIGNoYWluZSBldCB1bmUgY2zDqVxuICovXG5mdW5jdGlvbiB4b3JFbmNvZGUoc3RyOiBzdHJpbmcsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQXNzdXJlIHF1ZSBsZXMgZGV1eCBwYXJhbcOodHJlcyBzb2llbnQgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZVxuICBzdHIgPSBzdHIudG9TdHJpbmcoKVxuICBrZXkgPSBrZXkudG9TdHJpbmcoKVxuXG4gIC8qKiBFbmNvZGFnZSBYT1IgKi9cbiAgbGV0IHhvciA9IFwiXCJcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBsZXQgdG1wID0gc3RyW2ldXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXkubGVuZ3RoOyArK2opIHtcbiAgICAgIHRtcCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodG1wIS5jaGFyQ29kZUF0KDApIF4ga2V5LmNoYXJDb2RlQXQoaikpXG4gICAgfVxuICAgIHhvciArPSB0bXBcbiAgfVxuXG4gIC8vIFJlbnZvaWUgbGUgcsOpc3VsdGF0IGVuIGVuY29kYW50IGxlcyBjYXJhY3TDqHJlcyBzcMOpY2lhdXggcG91dmFudCBwb3NlciBwcm9ibMOobWUgKFxcbiBwYXIgZXhlbXBsZSlcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh4b3IpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmQoXG4gIGVuY190b2tlbjogc3RyaW5nLFxuICBzY29yZTogbnVtYmVyLFxuICBnYW1lOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgaWYgKHR5cGVvZiBSZWNhcHRjaGEgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIFJlY2FwdGNoYS5leGVjdXRlKFxuICAgICAgICBcIm1pbmlnYW1lU2F2ZVwiICsgZ2FtZSxcbiAgICAgICAgKHJlY2FwdGNoYVRva2VuKTogdm9pZCA9PlxuICAgICAgICAgIHZvaWQgc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUsIHJlY2FwdGNoYVRva2VuKS50aGVuKHJlc29sdmUpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUpLnRoZW4ocmVzb2x2ZSlcbiAgICB9XG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTY29yZShcbiAgZW5jX3Rva2VuOiBzdHJpbmcsXG4gIHNjb3JlOiBudW1iZXIsXG4gIGdhbWU6IHN0cmluZyxcbiAgcmVjYXB0Y2hhVG9rZW4/OiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBkZWNvZGVVUklDb21wb25lbnQoZW5jX3Rva2VuKVxuXG4gICAgdm9pZCAkLmFqYXgoe1xuICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICB1cmw6IFwiL21pbmlnYW1lcy9hamF4X3NhdmVTY29yZVwiLFxuICAgICAgZGF0YTogcmVjYXB0Y2hhVG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgICAgICBzY29yZTogc2NvcmUsXG4gICAgICAgICAgICBnYW1lOiBnYW1lLFxuICAgICAgICAgICAgcmVjYXB0Y2hhVG9rZW46IHJlY2FwdGNoYVRva2VuLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgICAgICBzY29yZTogc2NvcmUsXG4gICAgICAgICAgICBnYW1lOiBnYW1lLFxuICAgICAgICAgIH0sXG4gICAgICBzdWNjZXNzOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcbiAgICAgICAgICByZXNvbHZlKHNhdmVTY29yZShlbmNfdG9rZW4sIHNjb3JlLCBnYW1lKSlcbiAgICAgICAgfSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKSxcbiAgICB9KVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcblxuZXhwb3J0IGNvbnN0IGZsYXBweTogTWluaWdhbWUgPSB7XG4gIG5hbWU6IFwiRmxhcHB5XCIsXG4gIHNjb3JlTWluOiAxODAsXG4gIHNjb3JlTWF4OiAyMDAsXG4gIGRlbGF5TWluOiA2MF8wMDAsXG4gIGRlbGF5TWF4OiA3MF8wMDAsXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9idWJibHRlbXBsZVwiXSAubmwtYnV0dG9uJyxcbiAgaWNvbjogXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L21pbmlnYW1lcy9pY29uX2J1YmJsZXRlbXBsZS5wbmdcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi9taW5pZ2FtZVwiXG5cbmV4cG9ydCBjb25zdCBoYXRjaGxpbmdzOiBNaW5pZ2FtZSA9IHtcbiAgbmFtZTogXCJIYXRjaGxpbmdzXCIsXG4gIHNjb3JlTWluOiAxOCxcbiAgc2NvcmVNYXg6IDIwLFxuICBkZWxheU1pbjogMzBfMDAwLFxuICBkZWxheU1heDogMzBfMDAwLFxuICBidXR0b25TZWxlY3RvcjogJy5taW5pZ2FtZS1zdGFydCBbaHJlZj1cIi9taW5pZ2FtZXMvY29jb29uaW5waWNrXCJdIC5ubC1idXR0b24nLFxuICBpY29uOiBcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvbWluaWdhbWVzL2ljb25fY29jb25pbnBpY2sucG5nXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxuXG5leHBvcnQgY29uc3QgcGVnZ2xlOiBNaW5pZ2FtZSA9IHtcbiAgbmFtZTogXCJQZWdnbGVcIixcbiAgc2NvcmVNaW46IDksXG4gIHNjb3JlTWF4OiAxMCxcbiAgZGVsYXlNaW46IDEwXzAwMCxcbiAgZGVsYXlNYXg6IDIwXzAwMCxcbiAgYnV0dG9uU2VsZWN0b3I6ICcubWluaWdhbWUtc3RhcnQgW2hyZWY9XCIvbWluaWdhbWVzL2dlbWJvbWJcIl0gLm5sLWJ1dHRvbicsXG4gIGljb246IFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC9taW5pZ2FtZXMvaWNvbl9nZW1ib21iLnBuZ1wiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBQYXJzYWJsZUl0ZW0gfSBmcm9tIFwiLi9hcHBlYXJhbmNlL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IEF2YXRhciB9IGZyb20gXCIuL2VsZGFyeWEvYXZhdGFyXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydE91dGZpdChzZWxlY3Rvcjogc3RyaW5nLCBuYW1lID0gXCJvdXRmaXRcIik6IHZvaWQge1xuICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tzZWxlY3Rvcl1cbiAgaWYgKCFhdmF0YXIpIHJldHVyblxuXG4gIGNvbnN0IG91dGZpdCA9IHBhcnNlQXZhdGFyKGF2YXRhcilcblxuICBjb25zdCBocmVmID1cbiAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsXCIgK1xuICAgIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShvdXRmaXQsIHVuZGVmaW5lZCwgMikpXG5cbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBocmVmKVxuICBhLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGAke25hbWV9Lmpzb25gKVxuICBhLmNsaWNrKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXZhdGFyKGF2YXRhcjogQXZhdGFyKTogUGFyc2FibGVJdGVtW10ge1xuICByZXR1cm4gYXZhdGFyLmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgY29uc3QgaXRlbSA9IGNoaWxkLmdldEl0ZW0oKVxuICAgIHJldHVybiB7XG4gICAgICBpZDogaXRlbS5faWQsXG4gICAgICBncm91cDogaXRlbS5fZ3JvdXAsXG4gICAgICBuYW1lOiBpdGVtLl9uYW1lLFxuICAgICAgaW1hZ2U6IGl0ZW0uX2ltYWdlLFxuICAgICAgdHlwZTogaXRlbS5fdHlwZSxcbiAgICAgIGNhdGVnb3J5SWQ6IGl0ZW0uX2NhdGVnb3J5SWQsXG4gICAgICBoaWRkZW5DYXRlZ29yaWVzOiBPYmplY3QudmFsdWVzKGl0ZW0uX2hpZGRlbkNhdGVnb3JpZXMpLFxuICAgICAgYW5pbWF0aW9uRGF0YTogaXRlbS5fYW5pbWF0aW9uRGF0YSxcbiAgICAgIGxvY2tlZDogaXRlbS5fbG9ja2VkLFxuICAgIH1cbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IGxpc3RlblRyZWFzdXJlSHVudCB9IGZyb20gXCIuL2V4cGxvcmF0aW9uLXdhdGNoZXJcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEV4cGxvcmF0aW9uSGlzdG9yeSgpOiB2b2lkIHtcbiAgbG9hZEhpc3RvcnlCdXR0b24oKVxuICBsaXN0ZW5UcmVhc3VyZUh1bnQoKVxufVxuXG5mdW5jdGlvbiBsb2FkSGlzdG9yeUJ1dHRvbigpOiB2b2lkIHtcbiAgY29uc3QgY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KFxuICAgIFwiI2Nsb3NlLXRyZWFzdXJlLWh1bnQtaW50ZXJmYWNlXCJcbiAgKVxuICBpZiAoIWNsb3NlRXhwbG9yYXRpb25CdXR0b24pXG4gICAgcmV0dXJuIHZvaWQgQ29uc29sZS5lcnJvcihcIkNvdWxkbid0IGZpbmQgI2Nsb3NlLXRyZWFzdXJlLWh1bnQtaW50ZXJmYWNlLlwiKVxuXG4gIGNsb3NlRXhwbG9yYXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCJcbiAgY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIlxuICBjbG9zZUV4cGxvcmF0aW9uQnV0dG9uLnN0eWxlLnJpZ2h0ID0gXCIwXCJcbiAgY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbi5zdHlsZS50b3AgPSBcIjBcIlxuICBjbG9zZUV4cGxvcmF0aW9uQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrUGV0KVxuXG4gIGNvbnN0IGhpc3RvcnlCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKVxuICBoaXN0b3J5QnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJubC1idXR0b25cIiwgXCJubC1idXR0b24tYmFja1wiKVxuICBoaXN0b3J5QnV0dG9uLnN0eWxlLm1hcmdpblJpZ2h0ID0gXCIwLjZlbVwiXG4gIGhpc3RvcnlCdXR0b24udGV4dENvbnRlbnQgPSB0cmFuc2xhdGUucGV0Lmhpc3RvcnlcbiAgaGlzdG9yeUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGlja0hpc3RvcnkpXG5cbiAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICByb3cuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlZW5kXCIsIGhpc3RvcnlCdXR0b24pXG4gIHJvdy5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJiZWZvcmVlbmRcIiwgY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbilcblxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIiNyaWdodC1jb250YWluZXItaW5uZXJcIilcbiAgICA/Lmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgcm93KVxufVxuXG5mdW5jdGlvbiBvbkNsaWNrSGlzdG9yeSgpOiB2b2lkIHtcbiAgaGlkZVBldCgpXG4gIGhpZGVFeHBsb3JhdGlvbigpXG4gIG1ha2VIaXN0b3J5KClcbiAgc2hvd0hpc3RvcnkoKVxufVxuXG5mdW5jdGlvbiBvbkNsaWNrUGV0KCk6IHZvaWQge1xuICBoaWRlSGlzdG9yeSgpXG4gIHNob3dQZXQoKVxufVxuXG5mdW5jdGlvbiBoaWRlUGV0KCk6IHZvaWQge1xuICBjb25zdCBuYW1lQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuYW1lLWNvbnRhaW5lclwiKVxuICBjb25zdCBpbmZvQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbmZvcy1jb250YWluZXJcIilcbiAgY29uc3QgcGV0SW1hZ2VDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBldC1pbWFnZS1jb250YWluZXJcIilcblxuICBpZiAoIW5hbWVDb250YWluZXIgfHwgIWluZm9Db250YWluZXIgfHwgIXBldEltYWdlQ29udGFpbmVyKVxuICAgIHJldHVybiB2b2lkIENvbnNvbGUuZXJyb3IoXCJUaGUgcGV0IGRpc3BsYXkgd2FzIGRhbWFnZWQuXCIsIHtcbiAgICAgIG5hbWVDb250YWluZXIsXG4gICAgICBpbmZvQ29udGFpbmVyLFxuICAgICAgcGV0SW1hZ2VDb250YWluZXIsXG4gICAgfSlcblxuICBuYW1lQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuICBpbmZvQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuICBwZXRJbWFnZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcbn1cblxuZnVuY3Rpb24gc2hvd1BldCgpOiB2b2lkIHtcbiAgY29uc3QgbmFtZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmFtZS1jb250YWluZXJcIilcbiAgY29uc3QgaW5mb0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5mb3MtY29udGFpbmVyXCIpXG4gIGNvbnN0IHBldEltYWdlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwZXQtaW1hZ2UtY29udGFpbmVyXCIpXG5cbiAgaWYgKCFuYW1lQ29udGFpbmVyIHx8ICFpbmZvQ29udGFpbmVyIHx8ICFwZXRJbWFnZUNvbnRhaW5lcilcbiAgICByZXR1cm4gdm9pZCBDb25zb2xlLmVycm9yKFwiVGhlIHBldCBkaXNwbGF5IHdhcyBkYW1hZ2VkLlwiLCB7XG4gICAgICBuYW1lQ29udGFpbmVyLFxuICAgICAgaW5mb0NvbnRhaW5lcixcbiAgICAgIHBldEltYWdlQ29udGFpbmVyLFxuICAgIH0pXG5cbiAgbmFtZUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJcIlxuICBpbmZvQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiXG4gIHBldEltYWdlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiXG59XG5cbmZ1bmN0aW9uIHNob3dIaXN0b3J5KCk6IHZvaWQge1xuICBjb25zdCBoaXN0b3J5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoaXN0b3J5LWNvbnRhaW5lclwiKVxuICBpZiAoIWhpc3RvcnkpIHJldHVyblxuICBoaXN0b3J5LnN0eWxlLmRpc3BsYXkgPSBcIlwiXG59XG5cbmZ1bmN0aW9uIGhpZGVIaXN0b3J5KCk6IHZvaWQge1xuICBjb25zdCBoaXN0b3J5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoaXN0b3J5LWNvbnRhaW5lclwiKVxuICBpZiAoIWhpc3RvcnkpIHJldHVyblxuICBoaXN0b3J5LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxufVxuXG5mdW5jdGlvbiBoaWRlRXhwbG9yYXRpb24oKTogdm9pZCB7XG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwibWFpbi1zZWN0aW9uXCIpXG4gICAgPy5jbGFzc0xpc3QucmVtb3ZlKFwidHJlYXN1cmUtaHVudC1pbnRlcmZhY2Utb3BlblwiKVxufVxuXG5mdW5jdGlvbiBtYWtlSGlzdG9yeSgpOiB2b2lkIHtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoaXN0b3J5LWNvbnRhaW5lclwiKT8ucmVtb3ZlKClcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2V4cGxvcmF0aW9uX2hpc3RvcnkuaHRtbFwiKVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibGVmdC1jb250YWluZXJcIik/Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICB0cmFuc2xhdGUsXG4gICAgICBoaXN0b3J5OiBMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25IaXN0b3J5Lm1hcChoaXN0b3J5ID0+ICh7XG4gICAgICAgIC4uLmhpc3RvcnksXG4gICAgICAgIGRhdGU6IHRyYW5zbGF0ZS5wZXQuZGF0ZV90aW1lX2Zvcm1hdC5mb3JtYXQobmV3IERhdGUoaGlzdG9yeS5kYXRlKSksXG4gICAgICB9KSksXG4gICAgfSlcbiAgKVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsZXRlLWhpc3RvcnlcIik/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uSGlzdG9yeSA9IFtdXG4gICAgbWFrZUhpc3RvcnkoKVxuICB9KVxufVxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyaW1JY29uIH0gZnJvbSBcIi4uL2VsZGFyeWFfdXRpbFwiXG5pbXBvcnQgdHlwZSB7IEV4cGxvcmF0aW9uUmVzdWx0IH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvZXhwbG9yYXRpb25fcmVzdWx0XCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuVHJlYXN1cmVIdW50KCk6IHZvaWQge1xuICBjb25zdCByZXN1bHRPdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN0cmVhc3VyZS1odW50LXJlc3VsdC1vdmVybGF5XCIpXG4gIGlmICghcmVzdWx0T3ZlcmxheSlcbiAgICByZXR1cm4gdm9pZCBDb25zb2xlLmVycm9yKFwiVGhlcmUgaXMgbm8gcmVzdWx0IG92ZXJsYXkuXCIsIHJlc3VsdE92ZXJsYXkpXG5cbiAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgIENvbnNvbGUubG9nKFwiTXV0YXRpb24gaW5cIiwgcmVzdWx0T3ZlcmxheSlcbiAgICBpZiAoIXJlc3VsdE92ZXJsYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSByZXR1cm5cblxuICAgIGNvbnN0IHJlc3VsdHMgPSBnZXRSZXN1bHRzKClcbiAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIENvbnNvbGUubG9nKFwiUmVzdWx0czpcIiwgcmVzdWx0cylcblxuICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbkhpc3RvcnkgPSBbXG4gICAgICAuLi5yZXN1bHRzLFxuICAgICAgLi4uTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uSGlzdG9yeSxcbiAgICBdXG4gIH0pLm9ic2VydmUocmVzdWx0T3ZlcmxheSwge1xuICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldFJlc3VsdHMoKTogRXhwbG9yYXRpb25SZXN1bHRbXSB7XG4gIGNvbnN0IGxvY2F0aW9uTmFtZSA9IGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjdGgtYWdhaW4gc3Ryb25nXCIpXG4gICAgPy50ZXh0Q29udGVudD8udHJpbSgpXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcblxuICByZXR1cm4gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRoLXJlc3VsdFwiKSkubWFwKHJlc3VsdCA9PiB7XG4gICAgY29uc3QgaW1nID0gcmVzdWx0LnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCJpbWcudGgtcmVzdWx0LWltZ1wiKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvdW50OiByZXN1bHQucXVlcnlTZWxlY3RvcihcIi5yZXNvdXJjZS1jb3VudFwiKT8udGV4dENvbnRlbnQ/LnRyaW0oKSxcbiAgICAgIGRhdGU6IG5vdyxcbiAgICAgIGljb246IGltZyA/IHRyaW1JY29uKGltZy5zcmMpIDogdW5kZWZpbmVkLFxuICAgICAgbG9jYXRpb25OYW1lLFxuICAgICAgbmFtZTogcmVzdWx0LnF1ZXJ5U2VsZWN0b3IoXCIudG9vbHRpcC1jb250ZW50IGgzXCIpPy50ZXh0Q29udGVudD8udHJpbSgpLFxuICAgICAgdHJhZGFibGU6IEJvb2xlYW4ocmVzdWx0LnF1ZXJ5U2VsZWN0b3IoXCIudHJhZGFibGVcIikpLFxuICAgIH1cbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgY2hhbmdlUmVnaW9uIH0gZnJvbSBcIi4uL2FqYXgvY2hhbmdlX3JlZ2lvblwiXG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi4vYXBpL3Jlc3VsdC5lbnVtXCJcbmltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vY29uc29sZVwiXG5pbXBvcnQgdHlwZSB7IE1hcFJlZ2lvbiB9IGZyb20gXCIuLi9lbGRhcnlhL2N1cnJlbnRfcmVnaW9uXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlQnV0dG9uIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2F1dG9fZXhwbG9yZV9idXR0b25cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1hcmtlcnMoKTogdm9pZCB7XG4gIGNvbnN0IGF1dG9FeHBsb3JlTG9jYXRpb25zID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zXG5cbiAgZm9yIChjb25zdCBkaXYgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRGl2RWxlbWVudD4oXG4gICAgXCIubWFwLWxvY2F0aW9uW2RhdGEtaWRdXCJcbiAgKSkge1xuICAgIGNvbnN0IGxvY2F0aW9uSWQgPSBOdW1iZXIoZGl2LmdldEF0dHJpYnV0ZShcImRhdGEtaWRcIikpXG4gICAgaWYgKCFsb2NhdGlvbklkKSBjb250aW51ZVxuXG4gICAgbG9hZFBpY3RvTWFwKGF1dG9FeHBsb3JlTG9jYXRpb25zLCBkaXYpXG5cbiAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgICAgKF86IE11dGF0aW9uUmVjb3JkW10sIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgYWRkQXV0b0V4cGxvcmVCdXR0b24obG9jYXRpb25JZCwgb2JzZXJ2ZXIpXG4gICAgICAgIH1cbiAgICAgICkub2JzZXJ2ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcC1sb2NhdGlvbi1wcmV2aWV3XCIpIGFzIE5vZGUsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIH0pXG4gICAgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEF1dG9FeHBsb3JlQnV0dG9uKFxuICBsb2NhdGlvbklkOiBudW1iZXIsXG4gIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlclxuKTogdm9pZCB7XG4gIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPVxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2J1dHRvbnMtY29udGFpbmVyXCIpXG4gIGlmICghYnV0dG9uc0NvbnRhaW5lcikgcmV0dXJuXG4gIG9ic2VydmVyPy5kaXNjb25uZWN0KClcblxuICAvLyBQYXJhbWV0ZXJzIHRvIGJlIGluamVjdGVkIGludG8gdGhlIHRlbXBsYXRlXG4gIGNvbnN0IGNvbnRleHQ6IEF1dG9FeHBsb3JlQnV0dG9uID0ge1xuICAgIGxvY2F0aW9uSWQsXG4gICAgYWN0aXZlOiBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuc29tZShcbiAgICAgIHNhdmVkID0+IHNhdmVkLmxvY2F0aW9uLmlkID09PSBsb2NhdGlvbklkXG4gICAgKSxcbiAgICByZWdpb25JZDogTnVtYmVyKFxuICAgICAgZG9jdW1lbnRcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXCIubWluaW1hcC5jdXJyZW50W2RhdGEtbWFwaWRdXCIpXG4gICAgICAgID8uZ2V0QXR0cmlidXRlKFwiZGF0YS1tYXBpZFwiKVxuICAgICksXG4gIH1cblxuICAvLyBBZGQgdGhlIGF1dG8gZXhwbG9yZSBidXR0b25cbiAgYnV0dG9uc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2F1dG8tZXhwbG9yZS1idXR0b25cIik/LnJlbW92ZSgpXG4gIGNvbnN0IGF1dG9FeHBsb3JlVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2F1dG9fZXhwbG9yZV9idXR0b24uaHRtbFwiKVxuICBidXR0b25zQ29udGFpbmVyLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIGF1dG9FeHBsb3JlVGVtcGxhdGUucmVuZGVyKHsgLi4uY29udGV4dCwgdHJhbnNsYXRlIH0pXG4gIClcblxuICAvLyBCaW5kIGBhdXRvRXhwbG9yZWAgYW5kIGBsb2FkUGljdG9NYXBzYFxuICBidXR0b25zQ29udGFpbmVyXG4gICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiI2F1dG8tZXhwbG9yZS1idXR0b25cIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBDb25zb2xlLmRlYnVnKFwiQ2xpY2tlZCBvbiAjYXV0by1leHBsb3JlLWJ1dHRvbi5cIiwgY29udGV4dClcbiAgICAgIHZvaWQgbWFya0xvY2F0aW9uKGNvbnRleHQpLnRoZW4obG9hZFBpY3RvTWFwcylcbiAgICB9KVxuXG4gIHZvaWQgZGlzYWJsZUV4cGxvcmUoY29udGV4dClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGlzYWJsZUV4cGxvcmUoY29udGV4dDogQXV0b0V4cGxvcmVCdXR0b24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZW50cnkgPSBhd2FpdCBnZXRBdXRvRXhwbG9yZUVudHJ5KGNvbnRleHQucmVnaW9uSWQsIGNvbnRleHQubG9jYXRpb25JZClcbiAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgaWYgKHBldEVuZXJneSA8IE51bWJlcihlbnRyeS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkpXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleHBsb3JlLWJ1dHRvblwiKT8uY2xhc3NMaXN0LmFkZChcImRpc2FibGVkXCIpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1hcmtMb2NhdGlvbihjb250ZXh0OiBBdXRvRXhwbG9yZUJ1dHRvbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoY29udGV4dC5hY3RpdmUpIHtcbiAgICBjb25zdCBmaWx0ZXJlZExvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCAhPT0gY29udGV4dC5sb2NhdGlvbklkXG4gICAgKVxuICAgIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IGZpbHRlcmVkTG9jYXRpb25zXG4gICAgYWRkQXV0b0V4cGxvcmVCdXR0b24oY29udGV4dC5sb2NhdGlvbklkKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgbmV3QXV0b0V4cGxvcmUgPSBhd2FpdCBnZXRBdXRvRXhwbG9yZUVudHJ5KFxuICAgIGNvbnRleHQucmVnaW9uSWQsXG4gICAgY29udGV4dC5sb2NhdGlvbklkXG4gIClcbiAgaWYgKCFuZXdBdXRvRXhwbG9yZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgQ291bGQgbm90IGdlbmVyYXRlIGFuIGF1dG8gZXhwbG9yZSBlbnRyeSBmb3IgbG9jYXRpb24gIyR7Y29udGV4dC5sb2NhdGlvbklkfS5gLFxuICAgICAgY29udGV4dFxuICAgIClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IG5ld0xvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuICBuZXdMb2NhdGlvbnMucHVzaChuZXdBdXRvRXhwbG9yZSlcbiAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zID0gbmV3TG9jYXRpb25zXG4gIGFkZEF1dG9FeHBsb3JlQnV0dG9uKGNvbnRleHQubG9jYXRpb25JZClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b0V4cGxvcmVFbnRyeShcbiAgcmVnaW9uSWQ6IG51bWJlcixcbiAgbG9jYXRpb25JZDogbnVtYmVyXG4pOiBQcm9taXNlPEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsPiB7XG4gIGNvbnN0IHJlZ2lvbiA9IGF3YWl0IGdldFJlZ2lvbihyZWdpb25JZClcbiAgaWYgKCFyZWdpb24pIHtcbiAgICBDb25zb2xlLmVycm9yKGBDb3VsZCBub3QgZ2V0IHJlZ2lvbiAjJHtyZWdpb25JZH0uYClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbG9jYXRpb24gPSByZWdpb24ubG9jYXRpb25zLmZpbmQobG9jYXRpb24gPT4gbG9jYXRpb24uaWQgPT09IGxvY2F0aW9uSWQpXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICBDb25zb2xlLmVycm9yKFxuICAgICAgYENvdWxkIG5vdCBnZXQgbG9jYXRpb24gIyR7bG9jYXRpb25JZH0gaW4gJHtyZWdpb24ubmFtZX0uYCxcbiAgICAgIHJlZ2lvblxuICAgIClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbixcbiAgICByZWdpb24sXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVnaW9uKGlkOiBudW1iZXIpOiBQcm9taXNlPE1hcFJlZ2lvbiB8IG51bGw+IHtcbiAgaWYgKGlkLnRvU3RyaW5nKCkgPT09IGN1cnJlbnRSZWdpb24uaWQpIHJldHVybiBjdXJyZW50UmVnaW9uXG5cbiAgY29uc3QganNvbiA9IGF3YWl0IGNoYW5nZVJlZ2lvbihpZClcbiAgaWYgKGpzb24ucmVzdWx0ID09PSBSZXN1bHQuc3VjY2VzcykgcmV0dXJuIGpzb24uZGF0YS5jdXJyZW50UmVnaW9uXG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLy8gUGljdG8gbWFwXG5cbmZ1bmN0aW9uIGxvYWRQaWN0b01hcHMoKTogdm9pZCB7XG4gIGNvbnN0IGF1dG9FeHBsb3JlTG9jYXRpb25zID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zXG4gIGZvciAoY29uc3QgZGl2IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLm1hcC1sb2NhdGlvbltkYXRhLWlkXVwiXG4gICkpIHtcbiAgICBsb2FkUGljdG9NYXAoYXV0b0V4cGxvcmVMb2NhdGlvbnMsIGRpdilcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2FkUGljdG9NYXAoXG4gIGF1dG9FeHBsb3JlTG9jYXRpb25zOiBBdXRvRXhwbG9yZUxvY2F0aW9uW10sXG4gIGRpdjogSFRNTERpdkVsZW1lbnRcbik6IHZvaWQge1xuICBjb25zdCBtYXBMb2NhdGlvbiA9IGRpdi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpXG4gIGlmICghbWFwTG9jYXRpb24pIHJldHVyblxuXG4gIGRpdi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBhdXRvRXhwbG9yZUxvY2F0aW9ucy5zb21lKFxuICAgIHNhdmVkID0+IHNhdmVkLmxvY2F0aW9uLmlkID09PSBOdW1iZXIobWFwTG9jYXRpb24pXG4gIClcbiAgICA/IFwidXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvcGV0L2ljb25zL3BpY3RvX21hcF9leHBsby5wbmcpXCJcbiAgICA6IFwidXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvcGV0L2ljb25zL3BpY3RvX21hcC5wbmcpXCJcbn1cbiIsImV4cG9ydCBlbnVtIFNlc3Npb25TdG9yYWdlS2V5IHtcbiAgYWN0aW9uID0gXCJhY3Rpb25cIixcbiAgZXhwbG9yYXRpb25zRG9uZSA9IFwiZXhwbG9yYXRpb25zRG9uZVwiLFxuICBtaW5pZ2FtZXNEb25lID0gXCJtaW5pZ2FtZXNEb25lXCIsXG4gIHNlbGVjdGVkTG9jYXRpb24gPSBcInNlbGVjdGVkTG9jYXRpb25cIixcbiAgdGFrZW92ZXIgPSBcInRha2VvdmVyXCIsXG4gIHdpc2hsaXN0ID0gXCJ3aXNobGlzdFwiLFxuICBzdW1tZXJHYW1lRG9uZSA9IFwic3VtbWVyR2FtZURvbmVcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVMb2NhdGlvbiB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2F1dG9fZXhwbG9yZV9sb2NhdGlvblwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS93aXNoZWRfaXRlbVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZUtleSB9IGZyb20gXCIuL3Nlc3Npb25fc3RvcmFnZS5lbnVtXCJcbmltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uU3RvcmFnZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2VcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBzdGF0aWMgZ2V0IGFjdGlvbigpOiBUYWtlb3ZlckFjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuYWN0aW9uLCBudWxsKVxuICB9XG5cbiAgc3RhdGljIHNldCBhY3Rpb24oYWN0aW9uOiBUYWtlb3ZlckFjdGlvbiB8IG51bGwpIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuYWN0aW9uLCBhY3Rpb24pXG4gIH1cblxuICBzdGF0aWMgZ2V0IGV4cGxvcmF0aW9uc0RvbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5leHBsb3JhdGlvbnNEb25lLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgZXhwbG9yYXRpb25zRG9uZShkb25lOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmV4cGxvcmF0aW9uc0RvbmUsIGRvbmUpXG4gIH1cblxuICBzdGF0aWMgZ2V0IG1pbmlnYW1lc0RvbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5taW5pZ2FtZXNEb25lLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWluaWdhbWVzRG9uZShkb25lOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1pbmlnYW1lc0RvbmUsIGRvbmUpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHN1bW1lckdhbWVEb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuc3VtbWVyR2FtZURvbmUsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBzdW1tZXJHYW1lRG9uZShkb25lOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnN1bW1lckdhbWVEb25lLCBkb25lKVxuICB9XG5cbiAgc3RhdGljIGdldCBzZWxlY3RlZExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnNlbGVjdGVkTG9jYXRpb24sIG51bGwpXG4gIH1cblxuICBzdGF0aWMgc2V0IHNlbGVjdGVkTG9jYXRpb24oc2VsZWN0ZWQ6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnNlbGVjdGVkTG9jYXRpb24sIHNlbGVjdGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCB0YWtlb3ZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnRha2VvdmVyLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgdGFrZW92ZXIoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS50YWtlb3ZlciwgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2lzaGxpc3QoKTogV2lzaGVkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lndpc2hsaXN0LCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgd2lzaGxpc3Qod2lzaGxpc3Q6IFdpc2hlZEl0ZW1bXSkge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS53aXNobGlzdCwgd2lzaGxpc3QpXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRJdGVtPFQ+KGtleTogU2Vzc2lvblN0b3JhZ2VLZXksIGZhbGxiYWNrOiBUKTogVCB7XG4gICAgcmV0dXJuIChKU09OLnBhcnNlKFxuICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gSlNPTi5zdHJpbmdpZnkoZmFsbGJhY2spXG4gICAgKSA/PyBmYWxsYmFjaykgYXMgVFxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2V0SXRlbTxUPihrZXk6IFNlc3Npb25TdG9yYWdlS2V5LCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSlcbiAgfVxufVxuIiwiZXhwb3J0IGVudW0gVGFrZW92ZXJBY3Rpb24ge1xuICBkYWlseSA9IFwiZGFpbHlcIixcbiAgbWluaWdhbWVzID0gXCJtaW5pZ2FtZXNcIixcbiAgZXhwbG9yYXRpb25zID0gXCJleHBsb3JhdGlvbnNcIixcbiAgYXVjdGlvbnMgPSBcImF1Y3Rpb25zXCIsXG4gIGJ1eSA9IFwiYnV5XCIsXG4gIC8vIHNlbGwsXG4gIHN1bW1lckdhbWUgPSBcInN1bW1lckdhbWVcIixcbiAgd2FpdCA9IFwid2FpdFwiLFxufVxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IGxvYWRUb3BCYXIgfSBmcm9tIFwiLi4vdWkvdG9wX2JhclwiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2NsYXNzZXMvYWN0aW9uXCJcbmltcG9ydCBidXlBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9idXlfYWN0aW9uXCJcbmltcG9ydCBkYWlseUFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL2RhaWx5X2FjdGlvblwiXG5pbXBvcnQgZXhwbG9yYXRpb25BY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9leHBsb3JhdGlvbl9hY3Rpb25cIlxuaW1wb3J0IG1pbmlnYW1lQWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvbWluaWdhbWVfYWN0aW9uXCJcbmltcG9ydCB7IHN1bW1lckdhbWVBY3Rpb24gfSBmcm9tIFwiLi9jbGFzc2VzL3N1bW1lcl9nYW1lX2FjdGlvblwiXG5pbXBvcnQgd2FpdEFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL3dhaXRfYWN0aW9uXCJcblxuLyoqIEF1dG9tYXRlZCBlbnRyeSBwb2ludCBvZiB0aGUgdGFrZW92ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFRha2VvdmVyKCk6IHZvaWQge1xuICBpZiAoU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIpIHZvaWQgdGFrZW92ZXIoKVxufVxuXG4vKiogTWFudWFsIGVudHJ5IHBvaW50IG9mIHRoZSB0YWtlb3Zlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVUYWtlb3ZlcigpOiB2b2lkIHtcbiAgcmVzZXRUYWtlb3ZlcigpXG4gIFNlc3Npb25TdG9yYWdlLnRha2VvdmVyID0gIVNlc3Npb25TdG9yYWdlLnRha2VvdmVyXG5cbiAgbG9hZFRvcEJhcigpXG4gIGlmIChTZXNzaW9uU3RvcmFnZS50YWtlb3ZlcikgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS50YWtlb3Zlci5lbmFibGVkKVxuICBlbHNlICQuZmxhdnJOb3RpZih0cmFuc2xhdGUudGFrZW92ZXIuZGlzYWJsZWQpXG5cbiAgdm9pZCB0YWtlb3ZlcigpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldFRha2VvdmVyKCk6IHZvaWQge1xuICBTZXNzaW9uU3RvcmFnZS5hY3Rpb24gPSBudWxsXG4gIFNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgPSBmYWxzZVxuICBTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lID0gZmFsc2VcbiAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcbiAgU2Vzc2lvblN0b3JhZ2Uuc3VtbWVyR2FtZURvbmUgPSBmYWxzZVxuICBTZXNzaW9uU3RvcmFnZS53aXNobGlzdCA9IFtdXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRha2VvdmVyKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIVNlc3Npb25TdG9yYWdlLnRha2VvdmVyKSByZXR1cm5cbiAgaWYgKGRhaWx5QWN0aW9uLmNvbmRpdGlvbigpKSBhd2FpdCBkYWlseUFjdGlvbi5wZXJmb3JtKClcblxuICBjb25zdCBhY3Rpb24gPSBhY3Rpb25zLmZpbmQoYWN0aW9uID0+IGFjdGlvbi5rZXkgPT09IFNlc3Npb25TdG9yYWdlLmFjdGlvbilcbiAgaWYgKGFjdGlvbj8uY29uZGl0aW9uKCkpIHtcbiAgICBDb25zb2xlLmluZm8oXCJBY3Rpb246XCIsIGFjdGlvbi5rZXkpXG5cbiAgICBpZiAoYXdhaXQgYWN0aW9uLnBlcmZvcm0oKSkgcmV0dXJuXG4gIH1cblxuICBjaGFuZ2VBY3Rpb24oKVxuICB2b2lkIHRha2VvdmVyKClcbn1cblxuY29uc3QgYWN0aW9uczogQWN0aW9uW10gPSBbXG4gIGV4cGxvcmF0aW9uQWN0aW9uLFxuICBidXlBY3Rpb24sXG4gIG1pbmlnYW1lQWN0aW9uLFxuICBzdW1tZXJHYW1lQWN0aW9uLFxuICB3YWl0QWN0aW9uLFxuXVxuXG5mdW5jdGlvbiBjaGFuZ2VBY3Rpb24oKTogVGFrZW92ZXJBY3Rpb24ge1xuICBjb25zdCBuZXh0ID1cbiAgICBhY3Rpb25zLmZpbmRJbmRleChhY3Rpb24gPT4gYWN0aW9uLmtleSA9PT0gU2Vzc2lvblN0b3JhZ2UuYWN0aW9uKSArIDFcblxuICByZXR1cm4gKFNlc3Npb25TdG9yYWdlLmFjdGlvbiA9XG4gICAgYWN0aW9uc1tuZXh0ID49IGFjdGlvbnMubGVuZ3RoID8gMCA6IG5leHRdIS5rZXkpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY3Rpb24ge1xuICAvKiogS2V5IGJ5IHdoaWNoIHRoZSBgU2Vzc2lvblN0b3JhZ2VgIGNhbiByZWZlcmVuY2UgdGhpcyBhY3Rpb24uICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGtleTogVGFrZW92ZXJBY3Rpb25cblxuICAvKiogRGV0ZXJtaW5lcyBpZiB0aGlzIGFjdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGR1cmluZyBhIHRha2VvdmVyLiAqL1xuICBhYnN0cmFjdCBjb25kaXRpb24oKTogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyB0aGUgYWN0aW9uIGFuZCByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgc29tZXRoaW5nIGVsc2UgdG8gZG8gb3JcbiAgICogYGZhbHNlYCBpZiB0aGlzIGFjdGlvbiBpcyBmaW5pc2hlZCBleGVjdXRpbmcuXG4gICAqL1xuICBhYnN0cmFjdCBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj5cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgYWpheFNlYXJjaCB9IGZyb20gXCIuLi8uLi9hamF4L2FqYXhfc2VhcmNoXCJcbmltcG9ydCB7IGJ1eSB9IGZyb20gXCIuLi8uLi9hamF4L2J1eVwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2Uvd2lzaGVkX2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuLi8uLi9tYXJrZXRwbGFjZS9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXG5pbXBvcnQgeyBnZXRJdGVtRGV0YWlscyB9IGZyb20gXCIuLi8uLi9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZV9oYW5kbGVyc1wiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgQnV5QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24uYnV5XG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudE1hYW5hKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KFwiI2N1cnJlbmN5LW1hYW5hXCIpPy5kYXRhc2V0XG4gICAgICAgIC5tYWFuYVxuICAgIClcbiAgfVxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTG9jYWxTdG9yYWdlLm1hcmtldCAmJiBCb29sZWFuKExvY2FsU3RvcmFnZS53aXNobGlzdC5sZW5ndGgpXG4gIH1cblxuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvbWFya2V0cGxhY2VcIikge1xuICAgICAgcGFnZUxvYWQoXCIvbWFya2V0cGxhY2VcIilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgaWNvbk1lc3NhZ2U6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICAgZm9yIChjb25zdCB3aXNoZWQgb2YgTG9jYWxTdG9yYWdlLndpc2hsaXN0KSB7XG4gICAgICAvLyBDbG90aGVzIG1pZ2h0IGJlIGEgc3BlY2lhbCBleGNlcHRpb24uIElmIHRoZXkgYXJlLCB0aGVuIGNoZWNrIGZvclxuICAgICAgLy8gYHdpc2hlZC50eXBlID09PSBUeXBlLlBsYXllcldlYXJhYmxlSXRlbWAuXG4gICAgICBpZiAod2lzaGVkLmVycm9yKSB7XG4gICAgICAgIENvbnNvbGUud2FybihgU2tpcHBlZCBcIiR7d2lzaGVkLm5hbWV9XCJgLCB3aXNoZWQpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBDb25zb2xlLmluZm8oYFNlYXJjaGluZyBmb3IgXCIke3dpc2hlZC5uYW1lfVwiYCwgd2lzaGVkKVxuXG4gICAgICAvKiogU2VhcmNoIGluIGVhY2ggcGFnZXMgdW50aWwgdGhlIGFtb3VudCBvZiBpdGVtcyBpcyBsZXNzIHRoYW4gOCAqL1xuICAgICAgbGV0IGFtb3VudCA9IDhcbiAgICAgIGZvcnBhZ2U6IGZvciAobGV0IHBhZ2UgPSAxOyBhbW91bnQgPT09IDg7IHBhZ2UrKykge1xuICAgICAgICBsZXQgcmVzdWx0czogTWFya2V0RW50cnlbXSA9IFtdXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0cyA9IGF3YWl0IHRoaXMuc2VhcmNoKHdpc2hlZCwgcGFnZSlcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZSBhcyBKUXVlcnlYSFJcbiAgICAgICAgICBDb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gc2VhcmNoIGZvciBcIiR7d2lzaGVkLm5hbWV9XCJgLCBlcnJvcilcbiAgICAgICAgICB0aGlzLnNldEVycm9yKHdpc2hlZC5pY29uLCBgJHtlcnJvci5zdGF0dXNUZXh0fWApXG4gICAgICAgICAgYnJlYWsgZm9ycGFnZVxuICAgICAgICB9XG5cbiAgICAgICAgYW1vdW50ID0gcmVzdWx0cy5sZW5ndGhcbiAgICAgICAgQ29uc29sZS5sb2coYEZvdW5kICR7YW1vdW50fSByZXN1bHRzYCwgcmVzdWx0cylcblxuICAgICAgICBjb25zdCB3YW50ZWQgPSByZXN1bHRzLmZpbHRlcihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIHJlc3VsdC5pY29uID09PSB3aXNoZWQuaWNvbiAmJlxuICAgICAgICAgICAgcmVzdWx0LmJ1eU5vd1ByaWNlICYmXG4gICAgICAgICAgICBOdW1iZXIocmVzdWx0LmJ1eU5vd1ByaWNlLnByaWNlKSA8PSB3aXNoZWQucHJpY2UgJiZcbiAgICAgICAgICAgIE51bWJlcihyZXN1bHQuYnV5Tm93UHJpY2UucHJpY2UpIDw9IHRoaXMuY3VycmVudE1hYW5hXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2Ygd2FudGVkKSB7XG4gICAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5idXkocmVzdWx0KSkpIGJyZWFrIGZvcnBhZ2VcblxuICAgICAgICAgIExvY2FsU3RvcmFnZS5wdXJjaGFzZXMgPSBbXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAuLi5Mb2NhbFN0b3JhZ2UucHVyY2hhc2VzLmZpbHRlcihcbiAgICAgICAgICAgICAgcHVyY2hhc2UgPT4gcHVyY2hhc2UuaXRlbWlkICE9PSByZXN1bHQuaXRlbWlkXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF1cblxuICAgICAgICAgIENvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgIGBCb3VnaHQgXCIke3Jlc3VsdC5uYW1lfVwiIGZvciAke051bWJlcihcbiAgICAgICAgICAgICAgcmVzdWx0LmJ1eU5vd1ByaWNlPy5wcmljZVxuICAgICAgICAgICAgKX0gbWFhbmFzLmAsXG4gICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICApXG5cbiAgICAgICAgICAkLmZsYXZyTm90aWYoXG4gICAgICAgICAgICBpY29uTWVzc2FnZS5yZW5kZXIoe1xuICAgICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS50YWtlb3Zlci5ib3VnaHQoXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgICAgICAgTnVtYmVyKHJlc3VsdC5idXlOb3dQcmljZT8ucHJpY2UpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFB1cmNoYXNlIGFuIGl0ZW0gZnJvbSB0aGUgbWFya2V0LlxuICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSBpdGVtIHdhcyBzdWNjZXNzZnVsbHkgcHVyY2hhc2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBidXkocmVzdWx0OiBNYXJrZXRFbnRyeSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCBidXkoTnVtYmVyKHJlc3VsdC5pdGVtaWQpKVxuICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHRoaXMuc2V0RXJyb3IocmVzdWx0Lmljb24sIGpzb24uZGF0YSlcbiAgICByZXR1cm4ganNvbi5yZXN1bHQgPT09IFwic3VjY2Vzc1wiXG4gIH1cblxuICAvKiogU2VhcmNoIGZvciBhIHdpc2hlZCBpdGVtIG9uIGEgc3BlY2lmaWMgcGFnZSB1c2luZyB0aGUgaXRlbSdzIG5hbWUuICovXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoKHdpc2hlZDogV2lzaGVkSXRlbSwgcGFnZSA9IDEpOiBQcm9taXNlPE1hcmtldEVudHJ5W10+IHtcbiAgICAvLyBQdXQgdGhlIG5hbWUgb2YgdGhlIGl0ZW0gaW4gdGhlIGZpbHRlclxuICAgIGNvbnN0IGZpbHRlckl0ZW1OYW1lID1cbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIjZmlsdGVyLWl0ZW1OYW1lXCIpXG4gICAgaWYgKGZpbHRlckl0ZW1OYW1lKSBmaWx0ZXJJdGVtTmFtZS52YWx1ZSA9IHdpc2hlZC5uYW1lXG5cbiAgICAvLyBTaG93IHRoZSByZXN1bHRzIG9mIHRoZSBzZWFyY2hcbiAgICBjb25zdCBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIFwiLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtc1wiXG4gICAgKVxuICAgIGlmICghbWFya2V0cGxhY2VTZWFyY2hJdGVtcykgcmV0dXJuIFtdXG4gICAgbWFya2V0cGxhY2VTZWFyY2hJdGVtcy5pbm5lckhUTUwgPSBhd2FpdCBhamF4U2VhcmNoKHtcbiAgICAgIG5hbWU6IHdpc2hlZC5uYW1lLFxuICAgICAgcGFnZSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgICAgIFwiLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtXCJcbiAgICAgIClcbiAgICApXG4gICAgICAubWFwKGdldEl0ZW1EZXRhaWxzKVxuICAgICAgLmZpbHRlcjxNYXJrZXRFbnRyeT4oKGl0ZW0pOiBpdGVtIGlzIE1hcmtldEVudHJ5ID0+IGl0ZW0gIT09IG51bGwpXG4gIH1cblxuICAvKiogU2V0IHRoZSBgV2lzaGVkSXRlbS5lcnJvcmAgcHJvcGVydHkgd2l0aG91dCByZW9yZGVyaW5nIHRoZSB3aXNobGlzdC4gKi9cbiAgcHJpdmF0ZSBzZXRFcnJvcihpY29uOiBzdHJpbmcsIGVycm9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICAgIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pY29uID09PSBpY29uKVxuICAgIGNvbnN0IGVudHJ5ID0gd2lzaGxpc3RbaW5kZXhdXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgICBlbnRyeS5lcnJvciA9IGVycm9yXG4gICAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXG4gICAgICBlbnRyeSxcbiAgICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgICBdXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEJ1eUFjdGlvbigpXG4iLCJpbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgcmVzZXRUYWtlb3ZlciB9IGZyb20gXCIuLi9icmFpblwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIERhaWx5QWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24uZGFpbHlcblxuICAvKiogQ2hlY2tzIGlmIHRoZSBkYWlseSBtYWFuYSBnaWZ0IGlmIHRoZXJlLiAqL1xuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGFpbHlHaWZ0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYWlseS1naWZ0LWNvbnRhaW5lclwiKVxuICAgIHJldHVybiAoXG4gICAgICAhIWRhaWx5R2lmdENvbnRhaW5lciAmJlxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkYWlseUdpZnRDb250YWluZXIpLmRpc3BsYXkgIT09IFwibm9uZVwiXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrIG9uIHRoZSBkYWlseSBtYWFuYSBnaWZ0LlxuICAgKiBAcmV0dXJucyBgZmFsc2VgLiBUaGlzIGFjdGlvbiBkb2VzIG5vdCBwZXJmb3JtIG1lYW5pbmdmdWwgYWN0aW9ucyBvbiB0aGVcbiAgICogcGFnZS5cbiAgICovXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGFpbHlHaWZ0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYWlseS1naWZ0LWNvbnRhaW5lclwiKVxuICAgIGlmIChcbiAgICAgICFkYWlseUdpZnRDb250YWluZXIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZGFpbHlHaWZ0Q29udGFpbmVyKS5kaXNwbGF5ID09PSBcIm5vbmVcIlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZGFpbHlHaWZ0Q29udGFpbmVyLmNsaWNrKClcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIuZmlyc3QtY29ubmV4aW9uIC5mbGF2ci1idXR0b24uZGVmYXVsdFwiKVxuXG4gICAgcmVzZXRUYWtlb3ZlcigpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IERhaWx5QWN0aW9uKClcbiIsImltcG9ydCB7IGNhcHR1cmVFbmQgfSBmcm9tIFwiLi4vLi4vYWpheC9jYXB0dXJlX2VuZFwiXG5pbXBvcnQgeyBjaGFuZ2VSZWdpb24gfSBmcm9tIFwiLi4vLi4vYWpheC9jaGFuZ2VfcmVnaW9uXCJcbmltcG9ydCB7IGV4cGxvcmF0aW9uUmVzdWx0cyB9IGZyb20gXCIuLi8uLi9hamF4L2V4cGxvcmF0aW9uX3Jlc3VsdHNcIlxuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4uLy4uL2FwaS9yZXN1bHQuZW51bVwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgRHVyYXRpb25Vbml0IH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCJcbmltcG9ydCB0eXBlIHsgTWFwUmVnaW9uLCBTZWFzb24gfSBmcm9tIFwiLi4vLi4vZWxkYXJ5YS9jdXJyZW50X3JlZ2lvblwiXG5pbXBvcnQgdHlwZSB7IFBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiB9IGZyb20gXCIuLi8uLi9lbGRhcnlhL3RyZWFzdXJlXCJcbmltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVMb2NhdGlvbiB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2F1dG9fZXhwbG9yZV9sb2NhdGlvblwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IGNsaWNrIH0gZnJvbSBcIi4uL2NsaWNrXCJcbmltcG9ydCB7IEV4cGxvcmF0aW9uU3RhdHVzIH0gZnJvbSBcIi4uL2V4cGxvcmF0aW9uX3N0YXR1cy5lbnVtXCJcbmltcG9ydCB0eXBlIHsgU3RhcnRFeHBsb3JhdGlvbiB9IGZyb20gXCIuLi9zdGFydF9leHBsb3JhdGlvblwiXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBFeHBsb3JhdGlvbkFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLmV4cGxvcmF0aW9uc1xuXG4gIHByaXZhdGUgZ2V0IGdsb2JhbHMoKToge1xuICAgIGN1cnJlbnRSZWdpb246IE1hcFJlZ2lvblxuICAgIHBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbjogUGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uIHwgbnVsbFxuICAgIHRpbWVMZWZ0RXhwbG9yYXRpb246IG51bWJlciB8IG51bGxcbiAgfSB7XG4gICAgcmV0dXJuIHsgY3VycmVudFJlZ2lvbiwgcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uLCB0aW1lTGVmdEV4cGxvcmF0aW9uIH1cbiAgfVxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9ucyAmJlxuICAgICAgIVNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgJiZcbiAgICAgICEhTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmxlbmd0aFxuICAgIClcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9wZXRcIikge1xuICAgICAgcGFnZUxvYWQoXCIvcGV0XCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZ2V0RXhwbG9yYXRpb25TdGF0dXMoKVxuICAgIENvbnNvbGUubG9nKFwiRXhwbG9yYXRpb24gc3RhdHVzOlwiLCBFeHBsb3JhdGlvblN0YXR1c1tzdGF0dXNdKVxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLmlkbGU6XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuc3RhcnRFeHBsb3JhdGlvbigpKS5zZWxlY3RlZClcbiAgICAgICAgICBTZXNzaW9uU3RvcmFnZS5leHBsb3JhdGlvbnNEb25lID0gdHJ1ZVxuICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nOlxuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMud2FpdEV4cGxvcmF0aW9uKCkpICYmIHRoaXMucGVyZm9ybSgpXG5cbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMucmVzdWx0OlxuICAgICAgICBhd2FpdCB0aGlzLmVuZEV4cGxvcmF0aW9uKClcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybSgpXG5cbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMuY2FwdHVyZTpcbiAgICAgICAgYXdhaXQgdGhpcy5lbmRDYXB0dXJlKClcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybSgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tFeHBsb3JlKCk6IFByb21pc2U8SFRNTEJ1dHRvbkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2soXCIjZXhwbG9yZS1idXR0b25cIilcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tMb2NhdGlvbihcbiAgICBzZWxlY3RlZDogQXV0b0V4cGxvcmVMb2NhdGlvblxuICApOiBQcm9taXNlPEhUTUxEaXZFbGVtZW50PiB7XG4gICAgcmV0dXJuIGNsaWNrPEhUTUxEaXZFbGVtZW50PihcbiAgICAgIGAubWFwLWxvY2F0aW9uW2RhdGEtaWQ9XCIke3NlbGVjdGVkLmxvY2F0aW9uLmlkfVwiXWBcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGNsaWNrUmVnaW9uKHNlbGVjdGVkOiBBdXRvRXhwbG9yZUxvY2F0aW9uKTogSFRNTERpdkVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgIGAubWluaW1hcFtkYXRhLW1hcGlkPVwiJHtzZWxlY3RlZC5yZWdpb24uaWR9XCJdYFxuICAgIClcblxuICAgIGlmICghZGl2KSB7XG4gICAgICAvLyBDbGVhcmluZyBpbnZhbGlkIHJlZ2lvbnMgaXMgdXNlZnVsIHRvIHJlbW92ZSBmaW5pc2hlZCBldmVudHMuXG4gICAgICBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMgPVxuICAgICAgICBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIHNhdmVkID0+IHNhdmVkLnJlZ2lvbi5pZCAhPT0gc2VsZWN0ZWQucmVnaW9uLmlkXG4gICAgICAgIClcblxuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcbiAgICAgIHBhZ2VMb2FkKFwiL3BldFwiKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBkaXYuY2xpY2soKVxuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tTZWFzb24oKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XG4gICAgcmV0dXJuIGNsaWNrPEhUTUxJbWFnZUVsZW1lbnQ+KFwiI2NyeXN0YWwtaW1hZ2VzLWNvbnRhaW5lclwiKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbmRDYXB0dXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB2b2lkIG5ldyBBdWRpbyhcbiAgICAgICAgXCIvc3RhdGljL2V2ZW50LzIwMjEvbXVzaWMvc291bmRzL21pc3Npb24tY29tcGxldGUubXAzXCJcbiAgICAgICkucGxheSgpXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuXG4gICAgYXdhaXQgY2xpY2s8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiI29wZW4tY2FwdHVyZS1pbnRlcmZhY2VcIilcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjY2FwdHVyZS1idXR0b25cIilcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjY2xvc2UtcmVzdWx0XCIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuZEV4cGxvcmF0aW9uKCk6IFByb21pc2U8SFRNTERpdkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2soXCIjY2xvc2UtcmVzdWx0XCIpXG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRTZWFzb24oKTogU2Vhc29uIHtcbiAgICByZXR1cm4gKEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik/LmNsYXNzTGlzdCA/PyBbXSlcbiAgICAgIC5maW5kKGMgPT4gYy5zdGFydHNXaXRoKFwic2Vhc29uLVwiKSlcbiAgICAgID8ucmVwbGFjZShcInNlYXNvbi1cIiwgXCJcIikgPz8gbnVsbCkgYXMgU2Vhc29uXG4gIH1cblxuICBwcml2YXRlIGdldEV4cGxvcmF0aW9uU3RhdHVzKCk6IEV4cGxvcmF0aW9uU3RhdHVzIHtcbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBcIiN0cmVhc3VyZS1odW50LXJlc3VsdC1vdmVybGF5LmFjdGl2ZSAjb3Blbi1jYXB0dXJlLWludGVyZmFjZVwiXG4gICAgICApIHx8XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2NhcHR1cmUtaW50ZXJmYWNlLW91dGVyLmFjdGl2ZVwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLmNhcHR1cmVcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNwZW5kaW5nLW1hcC1sb2NhdGlvbi1kYXRhLW91dGVyLmFjdGl2ZVwiKSB8fFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNtYXAtY29udGFpbmVyLnBlbmRpbmdcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nXG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RyZWFzdXJlLWh1bnQtcmVzdWx0LW92ZXJsYXkuYWN0aXZlXCIpKVxuICAgICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLnJlc3VsdFxuICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5pZGxlXG4gIH1cblxuICBwcml2YXRlIGdldExvd2VzdEVuZXJneUxvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMucmVkdWNlKChsb3dlc3QsIHBsYWNlKSA9PlxuICAgICAgTnVtYmVyKHBsYWNlLmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSA8XG4gICAgICBOdW1iZXIobG93ZXN0LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKVxuICAgICAgICA/IHBsYWNlXG4gICAgICAgIDogbG93ZXN0XG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcbiAgICBsZXQgc2VsZWN0ZWQgPSBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdExvY2F0aW9uKClcbiAgICAgIFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb24gPSBzZWxlY3RlZFxuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RMb2NhdGlvbigpOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgYWZmb3JkYWJsZSA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICBzYXZlZCA9PiBOdW1iZXIoc2F2ZWQubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpIDw9IHBldEVuZXJneVxuICAgIClcblxuICAgIGNvbnN0IG1pbmltdW1FbmVyZ3kgPSB0aGlzLmdldExvd2VzdEVuZXJneUxvY2F0aW9uKClcbiAgICBjb25zdCBub3REZWFkRW5kID0gYWZmb3JkYWJsZS5maWx0ZXIoXG4gICAgICBwbGFjZSA9PlxuICAgICAgICBwZXRFbmVyZ3kgLSBOdW1iZXIocGxhY2UubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpID49XG4gICAgICAgIE51bWJlcihtaW5pbXVtRW5lcmd5LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKVxuICAgIClcbiAgICBpZiAobm90RGVhZEVuZC5sZW5ndGgpXG4gICAgICByZXR1cm4gbm90RGVhZEVuZFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBub3REZWFkRW5kLmxlbmd0aCldID8/IG51bGxcblxuICAgIGNvbnN0IHNhbWVFbmVyZ3kgPSBhZmZvcmRhYmxlLmZpbHRlcihcbiAgICAgIHBsYWNlID0+IE51bWJlcihwbGFjZS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPT09IHBldEVuZXJneVxuICAgIClcbiAgICBpZiAoc2FtZUVuZXJneS5sZW5ndGgpXG4gICAgICByZXR1cm4gc2FtZUVuZXJneVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzYW1lRW5lcmd5Lmxlbmd0aCldID8/IG51bGxcblxuICAgIHJldHVybiBhZmZvcmRhYmxlW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFmZm9yZGFibGUubGVuZ3RoKV0gPz8gbnVsbFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEV4cGxvcmF0aW9uKCk6IFByb21pc2U8U3RhcnRFeHBsb3JhdGlvbj4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uKClcbiAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm4geyBleHBsb3Jpbmc6IGZhbHNlLCBzZWxlY3RlZCB9XG4gICAgQ29uc29sZS5pbmZvKFwiRXhwbG9yaW5nXCIsIHNlbGVjdGVkKVxuXG4gICAgLy8gR28gdG8gc2Vhc29uXG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWQucmVnaW9uLnNlYXNvbiAmJlxuICAgICAgdGhpcy5nZXRDdXJyZW50U2Vhc29uKCkgIT09IHNlbGVjdGVkLnJlZ2lvbi5zZWFzb25cbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpY2tTZWFzb24oKVxuICAgICAgcmV0dXJuIHsgZXhwbG9yaW5nOiBmYWxzZSwgc2VsZWN0ZWQgfVxuICAgIH1cblxuICAgIC8vIEdvIHRvIHJlZ2lvblxuICAgIHRoaXMuY2xpY2tSZWdpb24oc2VsZWN0ZWQpXG5cbiAgICAvLyBHbyB0byBsb2NhdGlvblxuICAgIGF3YWl0IHRoaXMuY2xpY2tMb2NhdGlvbihzZWxlY3RlZClcbiAgICBhd2FpdCB0aGlzLmNsaWNrRXhwbG9yZSgpXG5cbiAgICBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uID0gbnVsbFxuICAgIHJldHVybiB7IGV4cGxvcmluZzogdHJ1ZSwgc2VsZWN0ZWQgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgZm9yIHVwIHRvIDEwIG1pbnV0ZXMuXG4gICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGV4cGxvcmF0aW9uIGlzIGZpbmlzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0RXhwbG9yYXRpb24oXG4gICAgc2VsZWN0ZWQ/OiBBdXRvRXhwbG9yZUxvY2F0aW9uXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGRvY3VtZW50XG4gICAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICAgIGAubWluaW1hcFtkYXRhLW1hcGlkPVwiJHtzZWxlY3RlZD8ucmVnaW9uLmlkID8/IGN1cnJlbnRSZWdpb24uaWR9XCJdYFxuICAgICAgKVxuICAgICAgPy5jbGljaygpXG5cbiAgICBsZXQgbXMgPSAzICogRHVyYXRpb25Vbml0LnNlY29uZFxuICAgIGlmIChzZWxlY3RlZCkgbXMgKz0gc2VsZWN0ZWQubG9jYXRpb24udGltZVRvRXhwbG9yZSAqIER1cmF0aW9uVW5pdC5taW51dGVcbiAgICBlbHNlIGlmICh0aW1lTGVmdEV4cGxvcmF0aW9uICYmIHRpbWVMZWZ0RXhwbG9yYXRpb24gPiAwKVxuICAgICAgbXMgKz0gdGltZUxlZnRFeHBsb3JhdGlvbiAqIER1cmF0aW9uVW5pdC5zZWNvbmRcbiAgICBlbHNlIGlmIChcbiAgICAgICFwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gJiZcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbWFwLWNvbnRhaW5lci5wZW5kaW5nXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgZXhwbG9yYXRpb25SZXN1bHRzKClcbiAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gUmVzdWx0LnN1Y2Nlc3MpIHJldHVybiBmYWxzZVxuXG4gICAgICBjb25zdCBjYXB0dXJlID0ganNvbi5kYXRhLnJlc3VsdHMuZmluZChcbiAgICAgICAgcmVzdWx0ID0+IHJlc3VsdC50eXBlID09PSBcImNhcHR1cmVcIlxuICAgICAgKVxuICAgICAgaWYgKCFjYXB0dXJlKSByZXR1cm4gZmFsc2VcbiAgICAgIGF3YWl0IGNhcHR1cmVFbmQoKVxuXG4gICAgICAvLyBSZWxvYWRpbmcgaXMgdGhlIG9ubHkgcG9zc2libGUgYWN0aW9uIGlmIHRoZSBleHBsb3JhdGlvbiBmaW5pc2hlZCBpbiBhXG4gICAgICAvLyBkaWZmZXJlbnQgcmVnaW9uLlxuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgXCJSZWxvYWRpbmcgYmVjYXVzZSB0aGUgZXhwbG9yYXRpb24gaXMgaW4gYW5vdGhlciByZWdpb24uXCIsXG4gICAgICAgIHRoaXMuZ2xvYmFsc1xuICAgICAgKVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIER1cmF0aW9uVW5pdC5taW51dGUpKVxuICAgICAgcGFnZUxvYWQoXCIvcGV0XCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChtcyA+IDEwICogRHVyYXRpb25Vbml0Lm1pbnV0ZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBDb25zb2xlLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciB0aGUgZXhwbG9yYXRpb24gdG8gZW5kIGluICR7TWF0aC5jZWlsKFxuICAgICAgICBtcyAvIER1cmF0aW9uVW5pdC5zZWNvbmRcbiAgICAgICl9IHNlY29uZHMuLi5gLFxuICAgICAgdGhpcy5nbG9iYWxzXG4gICAgKVxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXG4gICAgYXdhaXQgY2hhbmdlUmVnaW9uKE51bWJlcihzZWxlY3RlZD8ucmVnaW9uLmlkID8/IGN1cnJlbnRSZWdpb24uaWQpKVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5nZXRFeHBsb3JhdGlvblN0YXR1cygpID09PSBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nICYmXG4gICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uICYmXG4gICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uIDwgMFxuICAgICkge1xuICAgICAgQ29uc29sZS5pbmZvKFxuICAgICAgICBcIlJlbG9hZGluZyBiZWNhdXNlIHRoZSB0aW1lciBpcyBkZXN5bmNocm9uaXNlZC5cIixcbiAgICAgICAgdGhpcy5nbG9iYWxzXG4gICAgICApXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgRHVyYXRpb25Vbml0LnNlY29uZCkpXG4gICAgICBwYWdlTG9hZChcIi9wZXRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBFeHBsb3JhdGlvbkFjdGlvbigpXG4iLCJpbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IHBsYXlGbGFwcHksIHBsYXlIYXRjaGxpbmdzLCBwbGF5UGVnZ2xlIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9lbWlsZVwiXG5pbXBvcnQgeyBmbGFwcHkgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL2ZsYXBweVwiXG5pbXBvcnQgeyBoYXRjaGxpbmdzIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9oYXRjaGxpbmdzXCJcbmltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL21pbmlnYW1lXCJcbmltcG9ydCB7IHBlZ2dsZSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvcGVnZ2xlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgTWluaWdhbWVBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5taW5pZ2FtZXNcblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgJiYgIVNlc3Npb25TdG9yYWdlLm1pbmlnYW1lc0RvbmVcbiAgfVxuXG4gIC8qKiBEZXRlcm1pbmVzIGlmIHRoZSBtaW5pZ2FtZXMgc2hvdWxkIGJlIHBsYXllZCByaWdodCBub3cuXG4gICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIG1pbmlnYW1lcyBhcmUgY3VycmVudGx5IGJlaW5nIHBsYXllZC5cbiAgICovXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgc3dpdGNoIChsb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgY2FzZSBcIi9taW5pZ2FtZXNcIjoge1xuICAgICAgICBjb25zdCBwbGF5aW5nID1cbiAgICAgICAgICB0aGlzLm9wZW5NaW5pZ2FtZShwZWdnbGUpIHx8XG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUoZmxhcHB5KSB8fFxuICAgICAgICAgIHRoaXMub3Blbk1pbmlnYW1lKGhhdGNobGluZ3MpXG5cbiAgICAgICAgaWYgKCFwbGF5aW5nKSB7XG4gICAgICAgICAgU2Vzc2lvblN0b3JhZ2UubWluaWdhbWVzRG9uZSA9IHRydWVcbiAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFxuICAgICAgICAgICAgICAnLm1pbmlnYW1lcy1ydWxlcyBbcmVsPVwiYnRuLWNhbmNlbFwiXSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgID8uY2xpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBsYXlpbmdcbiAgICAgIH1cblxuICAgICAgY2FzZSBcIi9taW5pZ2FtZXMvZ2VtYm9tYlwiOlxuICAgICAgICBhd2FpdCBwbGF5UGVnZ2xlKClcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIi9taW5pZ2FtZXMvYnViYmx0ZW1wbGVcIjpcbiAgICAgICAgYXdhaXQgcGxheUZsYXBweSgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzL2NvY29vbmlucGlja1wiOlxuICAgICAgICBhd2FpdCBwbGF5SGF0Y2hsaW5ncygpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHBhZ2VMb2FkKFwiL21pbmlnYW1lc1wiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHBhZ2VMb2FkKFwiL21pbmlnYW1lc1wiKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKiogQ2xpY2sgb24gYSBtaW5pZ2FtZSdzIGxpbmsuIEByZXR1cm5zIHdoZXRoZXIgdGhlIG1pbmlnYW1lIHdhcyBvcGVuZWQuICovXG4gIHByaXZhdGUgb3Blbk1pbmlnYW1lKG1pbmlnYW1lOiBNaW5pZ2FtZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MU3BhbkVsZW1lbnQ+KFxuICAgICAgbWluaWdhbWUuYnV0dG9uU2VsZWN0b3JcbiAgICApXG4gICAgaWYgKCFzdGFydCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgc3RhcnQuY2xpY2soKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE1pbmlnYW1lQWN0aW9uKClcbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHsgTWF0aFV0aWwgfSBmcm9tIFwiLi4vLi4vbWF0aF91dGlsXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIFN1bW1lckdhbWVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICByZWFkb25seSBrZXk6IFRha2VvdmVyQWN0aW9uID0gVGFrZW92ZXJBY3Rpb24uc3VtbWVyR2FtZVxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgTG9jYWxTdG9yYWdlLm1pbmlnYW1lcyAmJlxuICAgICAgIVNlc3Npb25TdG9yYWdlLnN1bW1lckdhbWVEb25lICYmXG4gICAgICAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2FbaHJlZj1cIi9ldmVudC9zdW1tZXJcIl0nKVxuICAgIClcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9ldmVudC9zdW1tZXIvZ2FtZVwiKSB7XG4gICAgICBwYWdlTG9hZChcIi9ldmVudC9zdW1tZXIvZ2FtZVwiKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwMCkpXG5cbiAgICBjb25zdCBwbGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oXG4gICAgICAnYnV0dG9uLnN1bW1lcjIwMjEtYnV0dG9uLmV2ZW50LWNvaW4tYnV0dG9uLmFjdGl2ZVtkYXRhLWN1cnJlbmN5PVwidG9rZW5cIl0nXG4gICAgKVxuICAgIENvbnNvbGUubG9nKFwiTG9va2luZyBmb3IgcGxheSBidXR0b246XCIsIHBsYXkpXG4gICAgaWYgKCFwbGF5KSB7XG4gICAgICBTZXNzaW9uU3RvcmFnZS5zdW1tZXJHYW1lRG9uZSA9IHRydWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ZWQgPSBhd2FpdCBzdW1tZXJHYW1lU3RhcnQoKVxuICAgIGlmIChzdGFydGVkLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgIFNlc3Npb25TdG9yYWdlLnN1bW1lckdhbWVEb25lID0gdHJ1ZVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcGxheS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpXG4gICAgcGxheS5jbGFzc0xpc3QuYWRkKFwiaW5hY3RpdmVcIilcblxuICAgIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9pY29uX21lc3NhZ2UuaHRtbFwiKVxuICAgICQuZmxhdnJOb3RpZihcbiAgICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAgIGljb246IFwiL3N0YXRpYy9ldmVudC9taW5pZ2FtZXMvc25ha2UvaW1nL2hlYWQucG5nXCIsXG4gICAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5taW5pZ2FtZXMucGxheWluZyhcIlNuYWtlXCIpLFxuICAgICAgfSlcbiAgICApXG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPihyZXNvbHZlID0+XG4gICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiByZXNvbHZlKHRydWUpLFxuICAgICAgICBNYXRoVXRpbC5yYW5kb21CZXR3ZWVuKDYwXzAwMCAqIDAuOCwgNjBfMDAwKVxuICAgICAgKVxuICAgIClcblxuICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgc3VtbWVyR2FtZVNhdmUoKVxuICAgIGlmIChzYXZlZC5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICBTZXNzaW9uU3RvcmFnZS5zdW1tZXJHYW1lRG9uZSA9IHRydWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgICQuZmxhdnJOb3RpZihcbiAgICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAgIGljb246IFwiL3N0YXRpYy9ldmVudC9taW5pZ2FtZXMvc25ha2UvaW1nL2hlYWQucG5nXCIsXG4gICAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5taW5pZ2FtZXMucGxheWVkKFwiU25ha2VcIiksXG4gICAgICB9KVxuICAgIClcblxuICAgIHBhZ2VMb2FkKFwiL2V2ZW50L3N1bW1lci9nYW1lXCIpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdW1tZXJHYW1lU3RhcnQoKTogUHJvbWlzZTxQYWNrZXQ8XCJcIj4+IHtcbiAgY29uc3QgY3VycmVuY3kgPSBcInRva2VuXCJcblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9ldmVudC9zdW1tZXIvZ2FtZS9zdGFydFwiLFxuICAgICAgeyBjdXJyZW5jeTogY3VycmVuY3kgfSxcbiAgICAgIGZ1bmN0aW9uIChqc29uOiBQYWNrZXQ8XCJcIj4pIHtcbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcblxuICAgICAgICByZXNvbHZlKGpzb24pXG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdW1tZXJHYW1lU2F2ZSgpOiBQcm9taXNlPFBhY2tldDxTdW1tZXJHYW1lU2F2ZURhdGE+PiB7XG4gIGNvbnN0IHdpbiA9IHRydWVcblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9ldmVudC9zdW1tZXIvZ2FtZS9zYXZlXCIsXG4gICAgICB7IHdpbjogd2luIH0sXG4gICAgICBmdW5jdGlvbiAoanNvbjogUGFja2V0PFN1bW1lckdhbWVTYXZlRGF0YT4pIHtcbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcblxuICAgICAgICByZXNvbHZlKGpzb24pXG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1bW1lckdhbWVTYXZlRGF0YSB7XG4gIGZyYWdtZW50OiBib29sZWFuIHwgbnVtYmVyXG4gIGxhc3RGcmFnbWVudDogYm9vbGVhblxuICB2aWV3OiBWaWV3XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlldyB7XG4gIGFjdGl2ZUdhbWU6IGJvb2xlYW5cbiAgZW5kRXZlbnQ6IGJvb2xlYW5cbiAgZnJhZ21lbnRzT3duZWQ6IG51bWJlclxuICBmcmFnbWVudHNUb3RhbDogbnVtYmVyXG4gIHBldFVubG9ja2VkOiBib29sZWFuXG4gIHJlbWFpbmluZ1RpbWU6IG51bWJlclxuICBzZXJ2ZXJSZXdhcmRDdXJyZW50OiBudW1iZXJcbiAgc2VydmVyUmV3YXJkUGVyY2VudGFnZTogbnVtYmVyXG4gIHNlcnZlclJld2FyZFRvdGFsOiBudW1iZXJcbiAgc2hvdWxkQ2hvb3NlQmFua091dGZpdDogYm9vbGVhblxuICB0b2tlbnM6IG51bWJlclxuICB0cmFpbmluZ0F2YWlsYWJsZTogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3Qgc3VtbWVyR2FtZUFjdGlvbiA9IG5ldyBTdW1tZXJHYW1lQWN0aW9uKClcbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vLi4vY29uc29sZVwiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgV2FpdEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLndhaXRcblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgQ29uc29sZS5sb2coYFdhaXRpbmcgZm9yIDEwIG1pbnV0ZXMuLi5gKVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZShmYWxzZSksIDEwICogNjAgKiAxMDAwKVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgV2FpdEFjdGlvbigpXG4iLCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xpY2s8VCBleHRlbmRzIEhUTUxFbGVtZW50PihcbiAgc2VsZWN0b3I6IHN0cmluZ1xuKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPihyZXNvbHZlID0+IHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPFQ+KHNlbGVjdG9yKVxuICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm5cbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG5cbiAgICAgIC8vIFNvbWUgZWxlbWVudHMgZG9uJ3QgaGF2ZSB0aGVpciBjbGljayBoYW5kbGVycyByZWFkeSB1bnRpbCB0aGV5J3JlXG4gICAgICAvLyBob3ZlcmVkLlxuICAgICAgY29uc3QgbW91c2VFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudFwiKVxuICAgICAgbW91c2VFdmVudC5pbml0RXZlbnQoXCJtb3VzZW92ZXJcIilcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChtb3VzZUV2ZW50KVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudC5jbGljaygpXG4gICAgICAgIHJlc29sdmUoZWxlbWVudClcbiAgICAgIH0sIDgwMClcbiAgICB9LCA4MDApXG4gIH0pXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0PFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oXG4gIHNlbGVjdG9yOiBzdHJpbmdcbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8VD4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxUPihzZWxlY3RvcilcbiAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuXG5cbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG4gICAgICByZXNvbHZlKGVsZW1lbnQpXG4gICAgfSwgODAwKVxuICB9KVxufVxuIiwiZXhwb3J0IGVudW0gRXhwbG9yYXRpb25TdGF0dXMge1xuICBpZGxlLFxuICByZXN1bHQsXG4gIGNhcHR1cmUsXG4gIHBlbmRpbmcsXG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaXNFbnVtPFQ+KHZhbHVlOiB1bmtub3duLCBlbnVtZXJhdGlvbjogVCk6IHZhbHVlIGlzIFRba2V5b2YgVF0ge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhlbnVtZXJhdGlvbikuaW5jbHVkZXModmFsdWUpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgTWFya2V0SGlzdG9yeSB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9tYXJrZXRfaGlzdG9yeVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXVjdGlvbnMoKTogdm9pZCB7XG4gIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvbWFya2V0cGxhY2UvYXVjdGlvbnNcIikgcmV0dXJuXG5cbiAgY29uc3QgbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiI21hcmtldHBsYWNlLWFjdGl2ZS1hdWN0aW9uc1wiXG4gIClcbiAgaWYgKCFtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zKSByZXR1cm5cblxuICBjb25zdCBsYXlvdXQyY29sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgXCIubWFya2V0cGxhY2UtbWFpbi1jb250YWluZXIgI2xheW91dC0yY29sXCJcbiAgKVxuICBpZiAobGF5b3V0MmNvbCkgbGF5b3V0MmNvbC5zdHlsZS5vdmVyZmxvd1ggPSBcInZpc2libGVcIlxuXG4gIGxvYWRIaXN0b3J5KG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGxvYWRIaXN0b3J5KG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnM6IEhUTUxEaXZFbGVtZW50KTogdm9pZCB7XG4gIG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMucXVlcnlTZWxlY3RvcihcInN0eWxlXCIpPy5yZW1vdmUoKVxuICBtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zLnF1ZXJ5U2VsZWN0b3IoXCIjcHVyY2hhc2UtaGlzdG9yeVwiKT8ucmVtb3ZlKClcbiAgbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucy5xdWVyeVNlbGVjdG9yKFwiI3NhbGUtaGlzdG9yeVwiKT8ucmVtb3ZlKClcblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvbWFya2V0X2hpc3RvcnkuaHRtbFwiKVxuICBjb25zdCBoaXN0b3J5OiBNYXJrZXRIaXN0b3J5ID0ge1xuICAgIHB1cmNoYXNlczogTG9jYWxTdG9yYWdlLnB1cmNoYXNlcy5tYXAocHVyY2hhc2UgPT4gKHtcbiAgICAgIC4uLnB1cmNoYXNlLFxuICAgICAgZGF0ZTogdHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kYXRlX3RpbWVfZm9ybWF0LmZvcm1hdChcbiAgICAgICAgbmV3IERhdGUocHVyY2hhc2UuZGF0ZSlcbiAgICAgICksXG4gICAgfSkpLFxuICAgIHNhbGVzOiBMb2NhbFN0b3JhZ2Uuc2FsZXMubWFwKHNhbGUgPT4gKHtcbiAgICAgIC4uLnNhbGUsXG4gICAgICBkYXRlOiB0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRhdGVfdGltZV9mb3JtYXQuZm9ybWF0KFxuICAgICAgICBuZXcgRGF0ZShzYWxlLmRhdGUpXG4gICAgICApLFxuICAgIH0pKSxcbiAgfVxuXG4gIG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHsgLi4uaGlzdG9yeSwgdHJhbnNsYXRlIH0pXG4gIClcblxuICBmb3IgKGNvbnN0IHB1cmNoYXNlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgXCIjcHVyY2hhc2UtaGlzdG9yeSAubWFya2V0cGxhY2UtYXVjdGlvbnMtaXRlbVwiXG4gICkpIHtcbiAgICBjb25zdCBpdGVtaWQgPSBwdXJjaGFzZS5kYXRhc2V0Lml0ZW1pZFxuICAgIHB1cmNoYXNlLnF1ZXJ5U2VsZWN0b3IoXCIuZGVsZXRlLWJ1dHRvblwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5wdXJjaGFzZXMgPSBMb2NhbFN0b3JhZ2UucHVyY2hhc2VzLmZpbHRlcihcbiAgICAgICAgcHVyY2hhc2UgPT4gcHVyY2hhc2UuaXRlbWlkICE9PSBpdGVtaWRcbiAgICAgIClcblxuICAgICAgbG9hZEhpc3RvcnkobWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucylcbiAgICB9KVxuICB9XG5cbiAgZm9yIChjb25zdCBzYWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgXCIjc2FsZS1oaXN0b3J5IC5tYXJrZXRwbGFjZS1zYWxlcy1pdGVtXCJcbiAgKSkge1xuICAgIGNvbnN0IGljb24gPSBzYWxlLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIuYWJzdHJhY3QtaWNvbiBpbWdcIik/LnNyY1xuICAgIHNhbGUucXVlcnlTZWxlY3RvcihcIi5kZWxldGUtYnV0dG9uXCIpPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgTG9jYWxTdG9yYWdlLnNhbGVzID0gTG9jYWxTdG9yYWdlLnNhbGVzLmZpbHRlcihzYWxlID0+IHNhbGUuaWNvbiAhPT0gaWNvbilcblxuICAgICAgbG9hZEhpc3RvcnkobWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucylcbiAgICB9KVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXMgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfYmVlbW9vdl9hbm5veWFuY2VzXCJcbmltcG9ydCB7IGNhcm91c2VsRG93bmxvYWRGYWNlIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2ZhY2VcIlxuaW1wb3J0IHsgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2d1YXJkaWFuXCJcbmltcG9ydCB7IGNhcm91c2VsRUUgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfZWxkYXJ5YV9lbmhhbmNlbWVudHNcIlxuaW1wb3J0IHsgY2Fyb3VzZWxUYWtlb3ZlciB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF90YWtlb3ZlclwiXG5pbXBvcnQgeyBkb3dubG9hZEZhY2UsIGRvd25sb2FkR3VhcmRpYW4gfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgdG9nZ2xlVGFrZW92ZXIgfSBmcm9tIFwiLi4vdGFrZW92ZXIvYnJhaW5cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZENhcm91c2VsKCk6IHZvaWQge1xuICBjb25zdCBjYXJvdXNlbElubmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNjYXJvdXNlbC1pbm5lclwiKVxuICBpZiAoIWNhcm91c2VsSW5uZXIgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jYXJvdXNlbC1lZVwiKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gSW1wb3J0IGNhcm91c2VsIHRlbXBsYXRlXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9jYXJvdXNlbF9uZXdzLmh0bWxcIilcblxuICBjb25zdCBjb250ZXh0cyA9IFtcbiAgICAvLyBJbnRyb1xuICAgIGNhcm91c2VsRUUsXG5cbiAgICAvLyBGZWF0dXJlc1xuICAgIC4uLihMb2NhbFN0b3JhZ2UubWluaWdhbWVzIHx8XG4gICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9ucyB8fFxuICAgIExvY2FsU3RvcmFnZS5tYXJrZXRcbiAgICAgID8gW2Nhcm91c2VsVGFrZW92ZXJdXG4gICAgICA6IFtdKSxcbiAgICBjYXJvdXNlbERvd25sb2FkR3VhcmRpYW4sXG4gICAgY2Fyb3VzZWxEb3dubG9hZEZhY2UsXG5cbiAgICAvLyBBZHNcbiAgICBjYXJvdXNlbEJlZW1vb3ZBbm5veWFuY2VzLFxuICBdXG5cbiAgLy8gQWRkIGVudHJpZXMgdG8gdGhlIGNhcm91c2VsXG4gIGNhcm91c2VsSW5uZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgY29udGV4dHMubWFwKGJhbm5lciA9PiB0ZW1wbGF0ZS5yZW5kZXIoYmFubmVyKSkuam9pbihcIlxcblwiKVxuICApXG5cbiAgLy8gQWRkIGxpbmtzXG4gIGZvciAoY29uc3QgY2Fyb3VzZWwgb2YgY29udGV4dHMpIHtcbiAgICBpZiAoIWNhcm91c2VsLmhyZWYpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBlbGVtZW50ID0gY2Fyb3VzZWxJbm5lci5xdWVyeVNlbGVjdG9yKGAjJHtjYXJvdXNlbC5pZH1gKVxuICAgIGlmICghZWxlbWVudCkgY29udGludWVcblxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkgb3BlbihjYXJvdXNlbC5ocmVmLCBcIl9ibGFua1wiKVxuICAgIH0pXG4gIH1cblxuICAvLyBBZGQgY2xpY2sgZXZlbnRzXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoY2Fyb3VzZWxEb3dubG9hZEZhY2UuaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZG93bmxvYWRGYWNlKVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGNhcm91c2VsRG93bmxvYWRHdWFyZGlhbi5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkb3dubG9hZEd1YXJkaWFuKVxuXG4gIGNvbnN0IHRha2VvdmVyQW5jaG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2Fyb3VzZWxUYWtlb3Zlci5pZClcbiAgdGFrZW92ZXJBbmNob3I/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgdG9nZ2xlVGFrZW92ZXIoKVxuICAgIHRha2VvdmVyVGl0bGUodGFrZW92ZXJBbmNob3IpXG4gIH0pXG5cbiAgaWYgKHRha2VvdmVyQW5jaG9yKSB0YWtlb3ZlclRpdGxlKHRha2VvdmVyQW5jaG9yKVxufVxuXG5mdW5jdGlvbiB0YWtlb3ZlclRpdGxlKHRha2VvdmVyQW5jaG9yOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICBjb25zdCB0YWtlb3Zlckg0ID0gdGFrZW92ZXJBbmNob3IucXVlcnlTZWxlY3RvcihcImg0XCIpXG4gIGlmICh0YWtlb3Zlckg0KSB7XG4gICAgdGFrZW92ZXJINC5pbm5lclRleHQgPSBTZXNzaW9uU3RvcmFnZS50YWtlb3ZlclxuICAgICAgPyB0cmFuc2xhdGUuY2Fyb3VzZWwudGFrZW92ZXIuZGlzYWJsZV90YWtlb3ZlclxuICAgICAgOiB0cmFuc2xhdGUuY2Fyb3VzZWwudGFrZW92ZXIuZW5hYmxlX3Rha2VvdmVyXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgc2F2ZUZhdm91cml0ZSwgc2hvd0Zhdm91cml0ZSB9IGZyb20gXCIuLi9hcHBlYXJhbmNlL2Zha2VfZmF2b3VyaXRlc1wiXG5pbXBvcnQgeyBleHBvcnRQcmV2aWV3LCBpbXBvcnRPdXRmaXQgfSBmcm9tIFwiLi4vYXBwZWFyYW5jZS9mYXZvdXJpdGVzX2FjdGlvbnNcIlxuaW1wb3J0IHsgZG93bmxvYWRBcHBlYXJhbmNlIH0gZnJvbSBcIi4uL2Rvd25sb2FkLWNhbnZhc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IGluZGV4ZWRfZGIgZnJvbSBcIi4uL2luZGV4ZWRfZGIvaW5kZXhlZF9kYlwiXG5pbXBvcnQgdHlwZSB7IEZhdm91cml0ZXNBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvZmF2b3VyaXRlc19hY3Rpb25cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZhdm91cml0ZXMoKTogdm9pZCB7XG4gIGxvYWRGYXZvdXJpdGVzQWN0aW9ucygpXG4gIHZvaWQgbG9hZEZha2VGYXZvdXJpdGVzKClcbn1cblxuZnVuY3Rpb24gbG9hZEZhdm91cml0ZXNBY3Rpb25zKCk6IHZvaWQge1xuICBjb25zdCBhY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmYXZvcml0ZXMtYWN0aW9uc1wiKVxuICBpZiAoIWFjdGlvbnMgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mYXZvcml0ZXMtYWN0aW9uLWVlXCIpKSByZXR1cm5cblxuICBjb25zdCBhY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmF2b3VyaXRlc19hY3Rpb24uaHRtbFwiKVxuXG4gIGNvbnN0IGltcG9ydEFjdGlvbjogRmF2b3VyaXRlc0FjdGlvbiA9IHtcbiAgICBpZDogXCJpbXBvcnQtb3V0Zml0XCIsXG4gICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5idXR0b25zLmltcG9ydCxcbiAgfVxuICBjb25zdCBleHBvcnRBY3Rpb246IEZhdm91cml0ZXNBY3Rpb24gPSB7XG4gICAgaWQ6IFwiZXhwb3J0LW91dGZpdFwiLFxuICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuYnV0dG9ucy5leHBvcnQsXG4gIH1cbiAgY29uc3QgZG93bmxvYWRBY3Rpb246IEZhdm91cml0ZXNBY3Rpb24gPSB7XG4gICAgaWQ6IFwiZG93bmxvYWQtb3V0Zml0XCIsXG4gICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5idXR0b25zLmRvd25sb2FkLFxuICB9XG5cbiAgYWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoaW1wb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZXhwb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZG93bmxvYWRBY3Rpb24pXG4gIClcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChpbXBvcnRBY3Rpb24uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaW1wb3J0T3V0Zml0KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGV4cG9ydEFjdGlvbi5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBleHBvcnRQcmV2aWV3KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGRvd25sb2FkQWN0aW9uLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkQXBwZWFyYW5jZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRGYWtlRmF2b3VyaXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdGh1bWJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhbGwtb3V0Zml0LXRodW1icyAubUNTQl9jb250YWluZXJcIilcbiAgaWYgKCF0aHVtYnMpIHJldHVyblxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9vdXRmaXRfdGh1bWJzLmh0bWxcIilcblxuICBjb25zdCBmYXZvdXJpdGVzID0gYXdhaXQgaW5kZXhlZF9kYi5nZXRGYXZvdXJpdGVPdXRmaXRzKClcblxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2VlLW91dGZpdC10aHVtYnNcIik/LnJlbW92ZSgpXG4gIHRodW1icy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgb3V0Zml0czogZmF2b3VyaXRlcyxcbiAgICB9KVxuICApXG5cbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIi5lZS1hdmFpbGFibGUtc2xvdFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpOiB2b2lkID0+IHZvaWQgc2F2ZUZhdm91cml0ZSgpKVxuXG4gIGZvciAoY29uc3QgZGl2IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLmVlLW91dGZpdC10aHVtYlwiXG4gICkpIHtcbiAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IGZhdm91cml0ZXMuZmluZChcbiAgICAgICAgZmF2b3VyaXRlID0+IGZhdm91cml0ZS5pZCA9PT0gTnVtYmVyKGRpdi5kYXRhc2V0LmFycmF5SW5kZXgpXG4gICAgICApXG4gICAgICBpZiAoIWZhdm91cml0ZSkgcmV0dXJuXG5cbiAgICAgIHNob3dGYXZvdXJpdGUoZmF2b3VyaXRlKVxuICAgIH0pXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgSG9tZUNvbnRlbnRTbWFsbCB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9ob21lX2NvbnRlbnRfc21hbGxcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEhvbWVDb250ZW50KCk6IHZvaWQge1xuICBjb25zdCBob21lQ29udGVudFNtYWxscyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaG9tZS1jb250ZW50LXNtYWxsc1wiKVxuICBpZiAoXG4gICAgIWhvbWVDb250ZW50U21hbGxzIHx8XG4gICAgaG9tZUNvbnRlbnRTbWFsbHMucXVlcnlTZWxlY3RvcihcIi5ob21lLWNvbnRlbnQtc21hbGwtZWVcIilcbiAgKVxuICAgIHJldHVyblxuXG4gIC8vIFJlbW92ZSBiYW5rXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaG9tZS1iYW5rXCIpPy5yZW1vdmUoKVxuXG4gIC8vIEFkZCBmb3J1bVxuICBjb25zdCBzbWFsbFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9ob21lX2NvbnRlbnRfc21hbGwuaHRtbFwiKVxuICBjb25zdCBzbWFsbENvbnRlbnQ6IEhvbWVDb250ZW50U21hbGwgPSB7XG4gICAgYmFja2dyb3VuZEltYWdlOlxuICAgICAgXCIvYXNzZXRzL2ltZy9taW5pZ2FtZXMvdHJlYXN1cmVodW50L2E0OGJiYzRlNDg0OTc0NWViZTZkYmNmNTMxM2ViM2YwLmpwZ1wiLFxuICAgIGg0OiB0cmFuc2xhdGUuaG9tZS5mb3J1bSxcbiAgICBocmVmOiBcIi9mb3J1bVwiLFxuICAgIGlkOiBcImZvcnVtXCIsXG4gIH1cblxuICBob21lQ29udGVudFNtYWxscy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBzbWFsbFRlbXBsYXRlLnJlbmRlcihzbWFsbENvbnRlbnQpXG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJpbUljb24gfSBmcm9tIFwiLi4vZWxkYXJ5YV91dGlsXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL3dpc2hlZF9pdGVtXCJcbmltcG9ydCB0eXBlIHsgRGF0YVByb2R1Y3QgfSBmcm9tIFwiLi4vbWFsbC9kYXRhX3Byb2R1Y3RcIlxuaW1wb3J0IHR5cGUgeyBNYWxsRW50cnkgfSBmcm9tIFwiLi4vbWFsbC9tYWxsX2VudHJ5XCJcbmltcG9ydCB7IFJhcml0eSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9yYXJpdHkuZW51bVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTWFsbCgpOiB2b2lkIHtcbiAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL21hbGxcIikpIHJldHVyblxuXG4gIGZvciAoY29uc3QgbGkgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcIltkYXRhLXByb2R1Y3RdXCIpKVxuICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBhZGRXaXNobGlzdEJ1dHRvbihsaSkpXG59XG5cbmZ1bmN0aW9uIGFkZFdpc2hsaXN0QnV0dG9uKGxpOiBIVE1MTElFbGVtZW50KTogdm9pZCB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYWRkLXRvLXdpc2hsaXN0XCIpPy5yZW1vdmUoKVxuXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjbWFsbC1wcm9kdWN0RGV0YWlsLWluZm9cIilcbiAgICA/Lmluc2VydEFkamFjZW50SFRNTChcbiAgICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgICBcIjxidXR0b24gaWQ9J2FkZC10by13aXNobGlzdCcgY2xhc3M9J25sLWJ1dHRvbicgc3R5bGU9J21hcmdpbjogMjBweCBhdXRvIDA7IG1pbi13aWR0aDogMjAwcHg7Jz5BZGQgdG8gbWFya2V0IHdpc2hsaXN0PC9idXR0b24+XCJcbiAgICApXG5cbiAgY29uc3QgbWF4UXVhbnRpdHkgPSBsaS5xdWVyeVNlbGVjdG9yPEhUTUxTcGFuRWxlbWVudD4oXCIuaXRlbS1tYXhRdWFudGl0eVwiKVxuXG4gIGNvbnN0IG1hbGxFbnRyeTogTWFsbEVudHJ5ID0ge1xuICAgIHByb2R1Y3Q6IEpTT04ucGFyc2UobGkuZGF0YXNldC5wcm9kdWN0ISkgYXMgRGF0YVByb2R1Y3QsXG4gICAgaWNvbjogdHJpbUljb24oXG4gICAgICBsaS5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFwiaW1nLm1hbGwtcHJvZHVjdC1pY29uXCIpIS5zcmNcbiAgICApLFxuICAgIHJhcml0eTpcbiAgICAgIFJhcml0eVtcbiAgICAgICAgKGxpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICBcIi5yYXJpdHktbWFya2VyLWNvbW1vbiwgLnJhcml0eS1tYXJrZXItcmFyZSwgLnJhcml0eS1tYXJrZXItZXBpYywgLnJhcml0eS1tYXJrZXItbGVnZW5kYXJ5LCAucmFyaXR5LW1hcmtlci1ldmVudFwiXG4gICAgICAgICAgKVxuICAgICAgICAgID8uY2xhc3NOYW1lLnNwbGl0KFwicmFyaXR5LW1hcmtlci1cIilbMV0gPz8gXCJcIikgYXMga2V5b2YgdHlwZW9mIFJhcml0eVxuICAgICAgXSxcbiAgICBtYXhRdWFudGl0eTogbWF4UXVhbnRpdHkgPyBOdW1iZXIobWF4UXVhbnRpdHkuaW5uZXJUZXh0KSA6IHVuZGVmaW5lZCxcbiAgICBhYnN0cmFjdFR5cGU6XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgICAgXCIjbWFsbC1tZW51IC50b29sdGlwLmFjdGl2ZSAudG9vbHRpcC1jb250ZW50XCJcbiAgICAgICk/LmlubmVyVGV4dCA/PyBcIlwiLFxuICB9XG5cbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIiNhZGQtdG8td2lzaGxpc3RcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBhZGRUb1dpc2hsaXN0RmxhdnIobWFsbEVudHJ5KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvV2lzaGxpc3RGbGF2cihtYWxsRW50cnk6IE1hbGxFbnRyeSk6IHZvaWQge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfZmxhdnJfbWFsbC5odG1sXCIpXG5cbiAgJC5mbGF2cih7XG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsb3NlOiB7IHN0eWxlOiBcImNsb3NlXCIgfSxcbiAgICAgIHNhdmU6IHtcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBzYXZlKG1hbGxFbnRyeSksXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGlhbG9nOiBcInByb21wdFwiLFxuICAgIHByb21wdDoge1xuICAgICAgdmFsdWU6IFwiXCIsXG4gICAgfSxcbiAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJuZXctbGF5b3V0LXBvcHVwXCIpXG5cbiAgICAgIGRvY3VtZW50XG4gICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKVxuICAgICAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCAoeyBrZXkgfSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuXG4gICAgICAgICAgc2F2ZShtYWxsRW50cnkpXG4gICAgICAgIH0pXG4gICAgfSxcbiAgfSlcbn1cblxuZnVuY3Rpb24gc2F2ZShtYWxsRW50cnk6IE1hbGxFbnRyeSk6IGJvb2xlYW4ge1xuICBjb25zdCBwcmljZSA9IE51bWJlcihcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKT8udmFsdWUudHJpbSgpXG4gIClcbiAgaWYgKCFwcmljZSB8fCBwcmljZSA8PSAwKSB7XG4gICAgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LmludmFsaWRfcHJpY2UpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdC5maWx0ZXIoXG4gICAgd2lzaGxpc3RFbnRyeSA9PiB3aXNobGlzdEVudHJ5Lmljb24gIT09IG1hbGxFbnRyeS5pY29uXG4gIClcbiAgY29uc3Qgd2lzaGVkOiBXaXNoZWRJdGVtID0ge1xuICAgIC4uLm1hbGxFbnRyeSxcbiAgICAuLi5tYWxsRW50cnkucHJvZHVjdCxcbiAgICBwcmljZSxcbiAgfVxuICB3aXNobGlzdC5wdXNoKHdpc2hlZClcblxuICB3aXNobGlzdC5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgdHlwZUNvbXBhcmUgPSBhLnR5cGUubG9jYWxlQ29tcGFyZShiLnR5cGUpXG4gICAgaWYgKHR5cGVDb21wYXJlICE9PSAwKSByZXR1cm4gdHlwZUNvbXBhcmVcblxuICAgIGNvbnN0IGFic3RyYWN0VHlwZUNvbXBhcmUgPSAoYS5hYnN0cmFjdFR5cGUgPz8gXCJcIikubG9jYWxlQ29tcGFyZShcbiAgICAgIGIuYWJzdHJhY3RUeXBlID8/IFwiXCJcbiAgICApXG4gICAgaWYgKGFic3RyYWN0VHlwZUNvbXBhcmUgIT09IDApIHJldHVybiBhYnN0cmFjdFR5cGVDb21wYXJlXG5cbiAgICBjb25zdCByYXJpdHlDb21wYXJlID1cbiAgICAgIE9iamVjdC5rZXlzKFJhcml0eSkuaW5kZXhPZihhLnJhcml0eSA/PyBcIlwiKSAtXG4gICAgICBPYmplY3Qua2V5cyhSYXJpdHkpLmluZGV4T2YoYi5yYXJpdHkgPz8gXCJcIilcbiAgICBpZiAocmFyaXR5Q29tcGFyZSAhPT0gMCkgcmV0dXJuIHJhcml0eUNvbXBhcmVcblxuICAgIHJldHVybiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpXG4gIH0pXG5cbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gd2lzaGxpc3RcblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcbiAgJC5mbGF2ck5vdGlmKFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAuLi53aXNoZWQsXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC5hZGRlZF90b193aXNobGlzdChcbiAgICAgICAgd2lzaGVkLm5hbWUsXG4gICAgICAgIHdpc2hlZC5wcmljZVxuICAgICAgKSxcbiAgICB9KVxuICApXG4gIHJldHVybiB0cnVlXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL3dpc2hlZF9pdGVtXCJcbmltcG9ydCB7IFJhcml0eSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9yYXJpdHkuZW51bVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB7IGdldEl0ZW1EZXRhaWxzIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzXCJcblxubGV0IG1hcmtldE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbFxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1hcmtldCgpOiB2b2lkIHtcbiAgbWFya2V0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuICBtYXJrZXRPYnNlcnZlciA9IG51bGxcblxuICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL21hcmtldHBsYWNlXCIpIHJldHVyblxuXG4gIC8vIGAubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zYCBpcyB0aGUgY29udGFpbmVyIHdob3NlIEhUTUwgY29udGVudCBpcyBiZWluZ1xuICAvLyByZXBsYWNlZCBvbiBldmVyeSBhY3Rpb24uXG4gIGNvbnN0IHNlYXJjaEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MVUxpc3RFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbXNcIlxuICApXG4gIGlmICghc2VhcmNoSXRlbXMpIHJldHVyblxuXG4gIG1hcmtldE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZFdpc2hsaXN0KVxuICBtYXJrZXRPYnNlcnZlci5vYnNlcnZlKHNlYXJjaEl0ZW1zLCB7XG4gICAgY2hpbGRMaXN0OiB0cnVlLFxuICB9KVxuXG4gIGxvYWRXaXNobGlzdCgpXG59XG5cbmZ1bmN0aW9uIGxvYWRXaXNobGlzdCgpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBsaSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiLm1hcmtldHBsYWNlLWFic3RyYWN0XCJcbiAgKSkge1xuICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PlxuICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChfOiBNdXRhdGlvblJlY29yZFtdLCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcik6IHZvaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hcmtldEVudHJ5ID0gZ2V0SXRlbURldGFpbHMobGkpXG4gICAgICAgICAgaWYgKCFtYXJrZXRFbnRyeSkgcmV0dXJuXG5cbiAgICAgICAgICBhZGRXaXNoaXN0QnV0dG9uKG1hcmtldEVudHJ5LCBvYnNlcnZlcilcbiAgICAgICAgfVxuICAgICAgKS5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2Utem9vbVwiKSBhcyBOb2RlLCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFdpc2hpc3RCdXR0b24oXG4gIG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSxcbiAgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiI21hcmtldHBsYWNlLWl0ZW1EZXRhaWxcIlxuICApXG4gIGlmICghYnV0dG9uc0NvbnRhaW5lcikgcmV0dXJuXG4gIG9ic2VydmVyPy5kaXNjb25uZWN0KClcbiAgaGlqYWNrQnV5QnV0dG9ucyhtYXJrZXRFbnRyeSlcblxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtaW5mby1hdXRvYnV5XCIpPy5yZW1vdmUoKVxuICBjb25zdCBidXR0b25UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfYnV0dG9uLmh0bWxcIilcbiAgYnV0dG9uc0NvbnRhaW5lci5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBidXR0b25UZW1wbGF0ZS5yZW5kZXIoeyB0cmFuc2xhdGUgfSlcbiAgKVxuXG4gIGJ1dHRvbnNDb250YWluZXJcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjbWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBhZGRUb1dpc2hsaXN0RmxhdnIobWFya2V0RW50cnkpKVxufVxuXG5mdW5jdGlvbiBhZGRUb1dpc2hsaXN0RmxhdnIobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogdm9pZCB7XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sXCIpXG5cbiAgJC5mbGF2cih7XG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsb3NlOiB7IHN0eWxlOiBcImNsb3NlXCIgfSxcbiAgICAgIHNhdmU6IHtcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBzYXZlKG1hcmtldEVudHJ5KSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkaWFsb2c6IFwicHJvbXB0XCIsXG4gICAgcHJvbXB0OiB7XG4gICAgICB2YWx1ZTogXCJcIixcbiAgICB9LFxuICAgIG9uQnVpbGQ6ICRjb250YWluZXIgPT4ge1xuICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcblxuICAgICAgZG9jdW1lbnRcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpXG4gICAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsICh7IGtleSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGtleSAhPT0gXCJFbnRlclwiKSByZXR1cm5cbiAgICAgICAgICBzYXZlKG1hcmtldEVudHJ5KVxuICAgICAgICB9KVxuICAgIH0sXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNhdmUobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogYm9vbGVhbiB7XG4gIGNvbnN0IHByaWNlID0gTnVtYmVyKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpPy52YWx1ZS50cmltKClcbiAgKVxuICBpZiAoIXByaWNlIHx8IHByaWNlIDw9IDApIHtcbiAgICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QuaW52YWxpZF9wcmljZSlcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0LmZpbHRlcihcbiAgICB3aXNobGlzdEVudHJ5ID0+IHdpc2hsaXN0RW50cnkuaWNvbiAhPT0gbWFya2V0RW50cnkuaWNvblxuICApXG4gIGNvbnN0IHdpc2hlZDogV2lzaGVkSXRlbSA9IHsgLi4ubWFya2V0RW50cnksIHByaWNlIH1cbiAgd2lzaGxpc3QucHVzaCh3aXNoZWQpXG5cbiAgd2lzaGxpc3Quc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IHR5cGVDb21wYXJlID0gYS50eXBlLmxvY2FsZUNvbXBhcmUoYi50eXBlKVxuICAgIGlmICh0eXBlQ29tcGFyZSAhPT0gMCkgcmV0dXJuIHR5cGVDb21wYXJlXG5cbiAgICBjb25zdCBhYnN0cmFjdFR5cGVDb21wYXJlID0gKGEuYWJzdHJhY3RUeXBlID8/IFwiXCIpLmxvY2FsZUNvbXBhcmUoXG4gICAgICBiLmFic3RyYWN0VHlwZSA/PyBcIlwiXG4gICAgKVxuICAgIGlmIChhYnN0cmFjdFR5cGVDb21wYXJlICE9PSAwKSByZXR1cm4gYWJzdHJhY3RUeXBlQ29tcGFyZVxuXG4gICAgY29uc3QgcmFyaXR5Q29tcGFyZSA9XG4gICAgICBPYmplY3Qua2V5cyhSYXJpdHkpLmluZGV4T2YoYS5yYXJpdHkgPz8gXCJcIikgLVxuICAgICAgT2JqZWN0LmtleXMoUmFyaXR5KS5pbmRleE9mKGIucmFyaXR5ID8/IFwiXCIpXG4gICAgaWYgKHJhcml0eUNvbXBhcmUgIT09IDApIHJldHVybiByYXJpdHlDb21wYXJlXG5cbiAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKVxuICB9KVxuXG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IHdpc2hsaXN0XG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4ud2lzaGVkLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QuYWRkZWRfdG9fd2lzaGxpc3QoXG4gICAgICAgIHdpc2hlZC5uYW1lLFxuICAgICAgICB3aXNoZWQucHJpY2VcbiAgICAgICksXG4gICAgfSlcbiAgKVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBoaWphY2tCdXlCdXR0b25zKG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSk6IHZvaWQge1xuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiLm1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtYnV5XCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgYWRkUHVyY2hhc2UobWFya2V0RW50cnkpXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gYWRkUHVyY2hhc2UobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogdm9pZCB7XG4gIExvY2FsU3RvcmFnZS5wdXJjaGFzZXMgPSBbXG4gICAgbWFya2V0RW50cnksXG4gICAgLi4uTG9jYWxTdG9yYWdlLnB1cmNoYXNlcy5maWx0ZXIoXG4gICAgICBwdXJjaGFzZSA9PiBwdXJjaGFzZS5pdGVtaWQgIT09IG1hcmtldEVudHJ5Lml0ZW1pZFxuICAgICksXG4gIF1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgTWFpbk1lbnUgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvbWFpbl9tZW51XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNZW51KCk6IHZvaWQge1xuICBjb25zdCBtZW51SW5uZXJSaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWVudS1pbm5lci1yaWdodFwiKVxuICBpZiAoIW1lbnVJbm5lclJpZ2h0IHx8IG1lbnVJbm5lclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIubWFpbi1tZW51LWVlXCIpKSByZXR1cm5cblxuICAvLyBSZW1vdmUgYmFua1xuICBtZW51SW5uZXJSaWdodC5xdWVyeVNlbGVjdG9yKFwiLm1haW4tbWVudS1iYW5rXCIpPy5yZW1vdmUoKVxuXG4gIC8vIEFkZCBGb3J1bVxuICBjb25zdCBtZW51VGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sXCIpXG4gIGNvbnN0IG1haW5NZW51Rm9ydW06IE1haW5NZW51ID0ge1xuICAgIGNsYXNzOiBcImZvcnVtXCIsXG4gICAgaHJlZjogXCIvZm9ydW1cIixcbiAgICB0ZXh0OiB0cmFuc2xhdGUuaG9tZS5mb3J1bSxcbiAgfVxuXG4gIG1lbnVJbm5lclJpZ2h0Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIG1lbnVUZW1wbGF0ZS5yZW5kZXIobWFpbk1lbnVGb3J1bSlcbiAgKVxufVxuIiwiaW1wb3J0IHsgbG9hZE1hcmtlcnMgfSBmcm9tIFwiLi4vcGV0L2V4cGxvcmF0aW9uXCJcbmltcG9ydCB7IGxvYWRFeHBsb3JhdGlvbkhpc3RvcnkgfSBmcm9tIFwiLi4vcGV0L2V4cGxvcmF0aW9uLWhpc3RvcnlcIlxuXG5sZXQgcGV0T2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsXG5cbmZ1bmN0aW9uIGxvYWRFeHBsb3JhdGlvbnMoKTogdm9pZCB7XG4gIHBldE9ic2VydmVyPy5kaXNjb25uZWN0KClcbiAgcGV0T2JzZXJ2ZXIgPSBudWxsXG5cbiAgLyoqIGAucGFnZS1tYWluLWNvbnRhaW5lcmAgY2hhbmdlcyBiYWNrZ3JvdW5kIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJlZ2lvbi4gKi9cbiAgY29uc3QgbWFpbkNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLnBhZ2UtbWFpbi1jb250YWluZXJcIlxuICApXG4gIGlmICghbWFpbkNvbnRhaW5lcikgcmV0dXJuXG5cbiAgcGV0T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkRXhwbG9yYXRpb25zKVxuICBwZXRPYnNlcnZlci5vYnNlcnZlKG1haW5Db250YWluZXIsIHtcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICB9KVxuXG4gIGxvYWRNYXJrZXJzKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQZXQoKTogdm9pZCB7XG4gIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvcGV0XCIpIHJldHVyblxuICBsb2FkRXhwbG9yYXRpb25zKClcbiAgbG9hZEV4cGxvcmF0aW9uSGlzdG9yeSgpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGRvd25sb2FkUHJvZmlsZSB9IGZyb20gXCIuLi9kb3dubG9hZC1jYW52YXNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IGV4cG9ydE91dGZpdCB9IGZyb20gXCIuLi9vdXRmaXRcIlxuaW1wb3J0IHR5cGUgeyBQcm9maWxlQ29udGFjdEFjdGlvbiB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9wcm9maWxlX2NvbnRhY3RfYWN0aW9uXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQcm9maWxlKCk6IHZvaWQge1xuICBjb25zdCBwcm9maWxlQ29udGFjdEFjdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICBcInByb2ZpbGUtY29udGFjdC1hY3Rpb25zXCJcbiAgKVxuICBpZiAoXG4gICAgIXByb2ZpbGVDb250YWN0QWN0aW9ucyB8fFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucHJvZmlsZS1jb250YWN0LWFjdGlvbi1lZVwiKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9wcm9maWxlX2NvbnRhY3RfYWN0aW9uLmh0bWxcIilcblxuICBjb25zdCBwcm9maWxlQWN0aW9uRXhwb3J0OiBQcm9maWxlQ29udGFjdEFjdGlvbiA9IHtcbiAgICBpZDogXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uLWV4cG9ydFwiLFxuICAgIGFjdGlvbkRlc2NyaXB0aW9uOiB0cmFuc2xhdGUucHJvZmlsZS5leHBvcnRfb3V0Zml0LFxuICB9XG4gIGNvbnN0IHByb2ZpbGVBY3Rpb25Eb3dubG9hZDogUHJvZmlsZUNvbnRhY3RBY3Rpb24gPSB7XG4gICAgaWQ6IFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1kb3dubG9hZFwiLFxuICAgIGFjdGlvbkRlc2NyaXB0aW9uOiB0cmFuc2xhdGUucHJvZmlsZS5kb3dubG9hZF9vdXRmaXQsXG4gIH1cblxuICAvLyBBZGQgZW50cmllc1xuICBwcm9maWxlQ29udGFjdEFjdGlvbnMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHByb2ZpbGVBY3Rpb25FeHBvcnQpXG4gIClcbiAgcHJvZmlsZUNvbnRhY3RBY3Rpb25zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcihwcm9maWxlQWN0aW9uRG93bmxvYWQpXG4gIClcblxuICAvLyBBZGQgY2xpY2sgZXZlbnRzXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKHByb2ZpbGVBY3Rpb25FeHBvcnQuaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZXhwb3J0UHJvZmlsZSlcbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQocHJvZmlsZUFjdGlvbkRvd25sb2FkLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkUHJvZmlsZSlcbn1cblxuZnVuY3Rpb24gZXhwb3J0UHJvZmlsZSgpOiB2b2lkIHtcbiAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxIZWFkaW5nRWxlbWVudD4oXG4gICAgXCIjbWFpbi1zZWN0aW9uIC5zZWN0aW9uLXRpdGxlXCJcbiAgKVxuXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhTYWNoYS5BdmF0YXIuYXZhdGFycykuZmlsdGVyKGtleSA9PlxuICAgIGtleS5zdGFydHNXaXRoKFwiI3BsYXllclByb2ZpbGVBdmF0YXJcIilcbiAgKVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBleHBvcnRPdXRmaXQoa2V5LCB0aXRsZT8udGV4dENvbnRlbnQ/LnRyaW0oKSlcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBQdXJyb3Nob3BTdGF0dXMgfSBmcm9tIFwiLi4vYXBpL21ldGFcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbi8qKiBTaG93cyBhIFB1cnJvJ1Nob3AgYnV0dG9uIGluIHRoZSBtYWluIG1lbnUgd2hlbiBpdCdzIGF2YWlsYWJsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHVycm9TaG9wKCk6IHZvaWQge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1haW4tbWVudS1wdXJyb3Nob3BcIik/LnJlbW92ZSgpXG5cbiAgLy8gQSBidWcgaW4gV2ViUGFjayBwcmV2ZW50cyB1c2luZyBgTG9jYWxTdG9yYWdlLm1ldGE/LnB1cnJvc2hvcC5zdGF0dXNgLlxuICBpZiAoXG4gICAgTG9jYWxTdG9yYWdlLm1ldGEgPT09IG51bGwgfHxcbiAgICBMb2NhbFN0b3JhZ2UubWV0YS5wdXJyb3Nob3Auc3RhdHVzICE9PSBQdXJyb3Nob3BTdGF0dXMuZW5hYmxlZFxuICApXG4gICAgcmV0dXJuXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL21haW5fbWVudV9wdXJyb3Nob3AuaHRtbFwiKVxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcIm1lbnUtaW5uZXItbGVmdFwiKVxuICAgID8uaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLCB0ZW1wbGF0ZS5yZW5kZXIoe30pKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBnZXROYW1lIH0gZnJvbSBcIi4uL2Rvd25sb2FkLWNhbnZhc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFNldHRpbmdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL3NldHRpbmdzXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYWNjb3VudFJpZ2h0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhY2NvdW50LXJpZ2h0IGRpdlwiKVxuICBpZiAoIWFjY291bnRSaWdodCB8fCBhY2NvdW50UmlnaHQucXVlcnlTZWxlY3RvcihcIi5hY2NvdW50LWVlLWJsb2NcIikpIHJldHVyblxuXG4gIGNvbnN0IHNldHRpbmdzVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3NldHRpbmdzLmh0bWxcIilcblxuICBhY2NvdW50UmlnaHQuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgc2V0dGluZ3NUZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4uKGF3YWl0IExvY2FsU3RvcmFnZS5nZXRTZXR0aW5ncygpKSxcbiAgICAgIHRyYW5zbGF0ZSxcbiAgICB9KVxuICApXG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1kZWJ1Zy1lbmFibGVkXCIpPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIExvY2FsU3RvcmFnZS5kZWJ1ZyA9ICFMb2NhbFN0b3JhZ2UuZGVidWdcbiAgICByZWxvYWRTZXR0aW5ncygpXG4gIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1taW5pZ2FtZXMtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgPSAhTG9jYWxTdG9yYWdlLm1pbmlnYW1lc1xuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1leHBsb3JhdGlvbnMtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgPSAhTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uc1xuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1tYXJrZXQtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5tYXJrZXQgPSAhTG9jYWxTdG9yYWdlLm1hcmtldFxuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1pbXBvcnRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBpbXBvcnRTZXR0aW5ncylcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcImVlLWV4cG9ydFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHZvaWQgZXhwb3J0U2V0dGluZ3MoKSlcbn1cblxuZnVuY3Rpb24gcmVsb2FkU2V0dGluZ3MoKTogdm9pZCB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiLmFjY291bnQtZWUtYmxvY1wiKT8ucmVtb3ZlKClcbiAgdm9pZCBsb2FkU2V0dGluZ3MoKVxufVxuXG5mdW5jdGlvbiBpbXBvcnRTZXR0aW5ncygpOiB2b2lkIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImZpbGVcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwiYWNjZXB0XCIsIFwiYXBwbGljYXRpb24vanNvblwiKVxuICBpbnB1dC5jbGljaygpXG5cbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICBpZiAoIWV2ZW50LnRhcmdldCkgcmV0dXJuXG4gICAgY29uc3QgZmlsZXMgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cbiAgICB2b2lkIGZpbGUudGV4dCgpLnRoZW4oYXN5bmMgdmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHBhcnNlZDogU2V0dGluZ3MgPSBKU09OLnBhcnNlKHZhbHVlKVxuICAgICAgYXdhaXQgTG9jYWxTdG9yYWdlLnNldFNldHRpbmdzKHBhcnNlZClcblxuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgICAgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS5hY2NvdW50LmltcG9ydGVkKVxuICAgIH0pXG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4cG9ydFNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBocmVmID1cbiAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsXCIgK1xuICAgIGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIEpTT04uc3RyaW5naWZ5KGF3YWl0IExvY2FsU3RvcmFnZS5nZXRTZXR0aW5ncygpLCBudWxsLCAyKVxuICAgIClcblxuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgYS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGhyZWYpXG4gIGEuc2V0QXR0cmlidXRlKFxuICAgIFwiZG93bmxvYWRcIixcbiAgICBgJHtnZXROYW1lKCkgPz8gXCJlbGRhcnlhLWVuaGFuY2VtZW50c1wifS1zZXR0aW5ncy5qc29uYFxuICApXG4gIGEuY2xpY2soKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5pbXBvcnQgeyB0b2dnbGVUYWtlb3ZlciB9IGZyb20gXCIuLi90YWtlb3Zlci9icmFpblwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkVG9wQmFyKCk6IHZvaWQge1xuICBjb25zdCBoZWFkZXJSaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaGVhZGVyLXJpZ2h0XCIpXG4gIGlmICghaGVhZGVyUmlnaHQpIHJldHVyblxuXG4gIGNvbnN0IGhlYWRlclRha2VvdmVyID0gaGVhZGVyUmlnaHQucXVlcnlTZWxlY3RvcihcIiNoZWFkZXItdGFrZW92ZXJcIilcbiAgaWYgKGhlYWRlclRha2VvdmVyKSBoZWFkZXJUYWtlb3Zlci5yZW1vdmUoKVxuICBlbHNlIGxvYWRMaW5rcygpXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2hlYWRlcl90YWtlb3Zlci5odG1sXCIpXG4gIGhlYWRlclJpZ2h0Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImFmdGVyYmVnaW5cIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoeyB0YWtlb3ZlcjogU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIsIHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgaGVhZGVyUmlnaHRcbiAgICAucXVlcnlTZWxlY3RvcihcIiNoZWFkZXItdGFrZW92ZXJcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0b2dnbGVUYWtlb3Zlcilcbn1cblxuZnVuY3Rpb24gbG9hZExpbmtzKCk6IHZvaWQge1xuICBjb25zdCBoZWFkZXJQcm9maWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoZWFkZXItcHJvZmlsZVwiKT8uZmlyc3RDaGlsZFxuICBpZiAoaGVhZGVyUHJvZmlsZT8udGV4dENvbnRlbnQpIHtcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgICBhLmhyZWYgPSBcIi9wbGF5ZXIvcHJvZmlsZVwiXG4gICAgYS5zdHlsZS5jb2xvciA9IFwidmFyKC0tdGV4dC1jb2xvcilcIlxuICAgIGEuc3R5bGUuZm9udEZhbWlseSA9ICdcIkFsZWdyZXlhIFNhbnNcIiwgc2Fucy1zZXJpZidcbiAgICBhLnN0eWxlLmZvbnRXZWlnaHQgPSBcInVuc2V0XCJcbiAgICBhLnRleHRDb250ZW50ID0gaGVhZGVyUHJvZmlsZS50ZXh0Q29udGVudC50cmltKClcblxuICAgIGNvbnN0IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKVxuICAgIHAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlZW5kXCIsIGEpXG5cbiAgICBoZWFkZXJQcm9maWxlLnJlcGxhY2VXaXRoKHApXG4gIH1cblxuICBjb25zdCBhdmF0YXJUaXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyLW91dGVyPnBcIilcbiAgaWYgKGF2YXRhclRpdGxlPy50ZXh0Q29udGVudClcbiAgICBhdmF0YXJUaXRsZS5pbm5lckhUTUwgPSBgPGEgaHJlZj1cIi9wbGF5ZXIvcHJvZmlsZVwiIHN0eWxlPVwiY29sb3I6ICNGRkZGRkY7IGZvbnQtc2l6ZTogMjNweDsgZm9udC13ZWlnaHQ6IDkwMDsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcIj4ke2F2YXRhclRpdGxlLnRleHRDb250ZW50LnRyaW0oKX08L2E+YFxuXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyPmNhbnZhc1wiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHBhZ2VMb2FkKFwiL3BsYXllci9hcHBlYXJhbmNlXCIpKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hsaXN0U2V0dGluZ3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvd2lzaGxpc3Rfc2V0dGluZ3NcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFdpc2hsaXN0KCk6IHZvaWQge1xuICBjb25zdCBtYXJrZXRwbGFjZU1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLW1lbnVcIilcbiAgaWYgKCFtYXJrZXRwbGFjZU1lbnUpIHJldHVyblxuXG4gIGlmICghbWFya2V0cGxhY2VNZW51LnF1ZXJ5U2VsZWN0b3IoXCIjd2lzaGxpc3QtYnV0dG9uXCIpKSB7XG4gICAgZm9yIChjb25zdCBhIG9mIG1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yQWxsKFwiYVwiKSkge1xuICAgICAgYS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT5cbiAgICAgICAgcGFnZUxvYWQoYS5ocmVmLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIG1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yKFwiI3dpc2hsaXN0LWJ1dHRvblwiKT8ucmVtb3ZlKClcbiAgY29uc3Qgd2lzaGxpc3RCdXR0b25UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvd2lzaGxpc3RfYnV0dG9uLmh0bWxcIilcbiAgbWFya2V0cGxhY2VNZW51Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHdpc2hsaXN0QnV0dG9uVGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pXG4gIClcblxuICBjb25zdCB3aXNobGlzdEJ1dHRvbiA9XG4gICAgbWFya2V0cGxhY2VNZW51LnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KFwiI3dpc2hsaXN0LWJ1dHRvblwiKVxuICB3aXNobGlzdEJ1dHRvbj8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG4gICAgaW5zZXJ0V2lzaGxpc3Qod2lzaGxpc3RCdXR0b24pXG4gIClcbn1cblxuZnVuY3Rpb24gaW5zZXJ0V2lzaGxpc3QoYnV0dG9uOiBIVE1MQW5jaG9yRWxlbWVudCk6IHZvaWQge1xuICAvLyBBc3Npc3RhbmNlXG4gIGNvbnN0IGFzc2lzdGFuY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1hcmtldHBsYWNlLWFzc2lzdGFuY2VcIilcbiAgaWYgKGFzc2lzdGFuY2UpIGFzc2lzdGFuY2UuaW5uZXJIVE1MID0gdHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5hc3Npc3RhbmNlXG5cbiAgLy8gTWVudVxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiI21hcmtldHBsYWNlLW1lbnUgLmFjdGl2ZVwiKVxuICAgID8uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICBidXR0b24uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKVxuXG4gIC8vIEZpbHRlcnNcbiAgY29uc3QgZmlsdGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtZmlsdGVyc1wiKVxuICBpZiAoZmlsdGVycykgZmlsdGVycy5pbm5lckhUTUwgPSBcIlwiXG5cbiAgLy8gQ29udGVudFxuICBjb25zdCB3aXNobGlzdFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9zZXR0aW5ncy5odG1sXCIpXG4gIGNvbnN0IGNvbnRhaW5lciA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1jb250YWluZXJcIikgPz9cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLWFjdGl2ZS1hdWN0aW9uc1wiKSA/P1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtaXRlbXNGb3JTYWxlXCIpXG4gIGlmICghY29udGFpbmVyKSByZXR1cm5cblxuICBjb25zdCB3aXNobGlzdENvbnRleHQ6IFdpc2hsaXN0U2V0dGluZ3MgPSB7XG4gICAgd2lzaGxpc3Q6IExvY2FsU3RvcmFnZS53aXNobGlzdCxcbiAgfVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gd2lzaGxpc3RUZW1wbGF0ZS5yZW5kZXIoe1xuICAgIC4uLndpc2hsaXN0Q29udGV4dCxcbiAgICB0cmFuc2xhdGUsXG4gIH0pXG5cbiAgLy8gQnV0dG9uc1xuICBmb3IgKGNvbnN0IHRyIG9mIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwidHJcIikpIHtcbiAgICBjb25zdCBpY29uID0gdHIuZGF0YXNldC5pY29uXG4gICAgaWYgKCFpY29uKSBjb250aW51ZVxuXG4gICAgLy8gUmVzZXQgc3RhdHVzXG4gICAgY29uc3QgcmVzZXQgPSB0ci5xdWVyeVNlbGVjdG9yKFwiLnJlc2V0LWl0ZW0tc3RhdHVzXCIpXG4gICAgaWYgKHJlc2V0KVxuICAgICAgcmVzZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgcmVzZXRTdGF0dXMoaWNvbilcbiAgICAgICAgaW5zZXJ0V2lzaGxpc3QoYnV0dG9uKVxuICAgICAgfSlcblxuICAgIC8vIERlbGV0ZSBpdGVtIGZyb20gd2lzaGxpc3RcbiAgICBjb25zdCBkZWxldGVCdXR0b24gPSB0ci5xdWVyeVNlbGVjdG9yKFwiLmRlbGV0ZS13aXNobGlzdC1pdGVtXCIpXG4gICAgaWYgKGRlbGV0ZUJ1dHRvbilcbiAgICAgIGRlbGV0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBkZWxldGVJdGVtKGljb24pXG4gICAgICAgIGluc2VydFdpc2hsaXN0KGJ1dHRvbilcbiAgICAgIH0pXG5cbiAgICAvLyBDaGFuZ2UgcHJpY2VcbiAgICBjb25zdCBlZGl0UHJpY2UgPSB0ci5xdWVyeVNlbGVjdG9yKFwiLmVkaXQtcHJpY2VcIilcbiAgICBpZiAoZWRpdFByaWNlKVxuICAgICAgZWRpdFByaWNlLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwiY2xpY2tcIixcbiAgICAgICAgKCkgPT4gdm9pZCBjaGFuZ2VQcmljZShpY29uKS50aGVuKCgpID0+IGluc2VydFdpc2hsaXN0KGJ1dHRvbikpXG4gICAgICApXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRTdGF0dXMoaWNvbjogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pY29uID09PSBpY29uKVxuICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICBkZWxldGUgZW50cnkuZXJyb3JcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgIC4uLndpc2hsaXN0LnNsaWNlKHVuZGVmaW5lZCwgaW5kZXgpLFxuICAgIGVudHJ5LFxuICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgXVxufVxuXG5mdW5jdGlvbiBkZWxldGVJdGVtKGljb246IHN0cmluZyk6IHZvaWQge1xuICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QuZmlsdGVyKFxuICAgIGl0ZW0gPT4gaXRlbS5pY29uICE9PSBpY29uXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hhbmdlUHJpY2UoaWNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9jaGFuZ2VfcHJpY2VfZmxhdnIuaHRtbFwiKVxuXG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pY29uID09PSBpY29uKVxuICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgJC5mbGF2cih7XG4gICAgICBjb250ZW50OiB0ZW1wbGF0ZS5yZW5kZXIoeyB0cmFuc2xhdGUgfSksXG4gICAgICBkaWFsb2c6IFwicHJvbXB0XCIsXG4gICAgICBwcm9tcHQ6IHtcbiAgICAgICAgdmFsdWU6IGVudHJ5LnByaWNlLnRvU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBjbG9zZToge1xuICAgICAgICAgIHN0eWxlOiBcImNsb3NlXCIsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2F2ZToge1xuICAgICAgICAgIGFjdGlvbjogKCkgPT4gc2F2ZShpY29uLCByZXNvbHZlKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcblxuICAgICAgICBkb2N1bWVudFxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKVxuICAgICAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsICh7IGtleSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuICAgICAgICAgICAgc2F2ZShpY29uLCByZXNvbHZlKVxuICAgICAgICAgIH0pXG4gICAgICB9LFxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNhdmUoaWNvbjogc3RyaW5nLCByZXNvbHZlOiAoKSA9PiB2b2lkKTogYm9vbGVhbiB7XG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pY29uID09PSBpY29uKVxuICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICBpZiAoIWVudHJ5KSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBwcmljZSA9IE51bWJlcihcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKT8udmFsdWUudHJpbSgpXG4gIClcbiAgaWYgKCFwcmljZSB8fCBwcmljZSA8PSAwKSB7XG4gICAgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLmludmFsaWRfcHJpY2UpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBlbnRyeS5wcmljZSA9IHByaWNlXG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IFtcbiAgICAuLi53aXNobGlzdC5zbGljZSh1bmRlZmluZWQsIGluZGV4KSxcbiAgICBlbnRyeSxcbiAgICAuLi53aXNobGlzdC5zbGljZShpbmRleCArIDEsIHVuZGVmaW5lZCksXG4gIF1cblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcbiAgJC5mbGF2ck5vdGlmKFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLmNoYW5nZWRfcHJpY2UoXG4gICAgICAgIGVudHJ5Lm5hbWUsXG4gICAgICAgIGVudHJ5LnByaWNlXG4gICAgICApLFxuICAgIH0pXG4gIClcblxuICByZXNvbHZlKClcbiAgcmV0dXJuIHRydWVcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgeyBsb2FkRHJlc3NpbmdFeHBlcmllbmNlIH0gZnJvbSBcIi4vYXBwZWFyYW5jZS9kcmVzc2luZ19leHBlcmllbmNlXCJcbmltcG9ydCB7IG1pZ3JhdGUgfSBmcm9tIFwiLi9taWdyYXRlXCJcbmltcG9ydCB7IGxvYWRUYWtlb3ZlciB9IGZyb20gXCIuL3Rha2VvdmVyL2JyYWluXCJcbmltcG9ydCB7IGxvYWRBdWN0aW9ucyB9IGZyb20gXCIuL3VpL2F1Y3Rpb25zXCJcbmltcG9ydCB7IGxvYWRDYXJvdXNlbCB9IGZyb20gXCIuL3VpL2Nhcm91c2VsXCJcbmltcG9ydCB7IGxvYWRGYXZvdXJpdGVzIH0gZnJvbSBcIi4vdWkvZmF2b3VyaXRlc1wiXG5pbXBvcnQgeyBsb2FkSG9tZUNvbnRlbnQgfSBmcm9tIFwiLi91aS9ob21lX2NvbnRlbnRcIlxuaW1wb3J0IHsgbG9hZE1hbGwgfSBmcm9tIFwiLi91aS9tYWxsXCJcbmltcG9ydCB7IGxvYWRNYXJrZXQgfSBmcm9tIFwiLi91aS9tYXJrZXRcIlxuaW1wb3J0IHsgbG9hZE1lbnUgfSBmcm9tIFwiLi91aS9tZW51XCJcbmltcG9ydCB7IGxvYWRQZXQgfSBmcm9tIFwiLi91aS9wZXRcIlxuaW1wb3J0IHsgbG9hZFByb2ZpbGUgfSBmcm9tIFwiLi91aS9wcm9maWxlXCJcbmltcG9ydCB7IGxvYWRQdXJyb1Nob3AgfSBmcm9tIFwiLi91aS9wdXJyb19zaG9wXCJcbmltcG9ydCB7IGxvYWRTZXR0aW5ncyB9IGZyb20gXCIuL3VpL3NldHRpbmdzXCJcbmltcG9ydCB7IGxvYWRUb3BCYXIgfSBmcm9tIFwiLi91aS90b3BfYmFyXCJcbmltcG9ydCB7IGxvYWRXaXNobGlzdCB9IGZyb20gXCIuL3VpL3dpc2hsaXN0XCJcblxuLy8gbG9hZEpTKFwiaHR0cHM6Ly91bnBrZy5jb20vaG9nYW4uanMvZGlzdC90ZW1wbGF0ZS0zLjAuMi5taW4uanNcIiwgdHJ1ZSk7XG5cbmZ1bmN0aW9uIGxvYWQoKTogdm9pZCB7XG4gIGxvYWRVSSgpXG4gIGxvYWRUYWtlb3ZlcigpXG59XG5cbmZ1bmN0aW9uIGxvYWRVSSgpOiB2b2lkIHtcbiAgbG9hZE1lbnUoKVxuICBsb2FkQ2Fyb3VzZWwoKVxuICBsb2FkSG9tZUNvbnRlbnQoKVxuICBsb2FkRmF2b3VyaXRlcygpXG4gIGxvYWRQcm9maWxlKClcbiAgbG9hZFBldCgpXG4gIGxvYWRNYXJrZXQoKVxuICBsb2FkV2lzaGxpc3QoKVxuICBsb2FkVG9wQmFyKClcbiAgbG9hZEF1Y3Rpb25zKClcbiAgbG9hZFB1cnJvU2hvcCgpXG4gIGxvYWRNYWxsKClcblxuICAvLyBFbGRhcnlhIGlzIGNyYXNoaW5nIHdoZW4gb3BlbmluZyBncm91cHMuXG4gIC8vIFRPRE86IEhhbmRsZSBlcnJvcnMgYW5kIHN0b3AgdGhlIGxvYWRpbmcgcHJvY2Vzcy5cbiAgdm9pZCBsb2FkRHJlc3NpbmdFeHBlcmllbmNlKClcblxuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB2b2lkIGxvYWRJbmRleGVkRGIoKVxuICBlbHNlIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiBsb2FkSW5kZXhlZERiKCkpXG59XG5cbmZ1bmN0aW9uIGxvYWRJbmRleGVkRGIoKTogdm9pZCB7XG4gIHZvaWQgbG9hZFNldHRpbmdzKClcbn1cblxubmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZCkub2JzZXJ2ZShcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb250YWluZXJcIikgYXMgTm9kZSxcbiAge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgfVxuKVxuXG5taWdyYXRlKClcblxubG9hZFVJKClcbmNvbnNvbGUubG9nKGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259IGxvYWRlZC5gKVxubG9hZFRha2VvdmVyKClcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==