mayurankv_Obsidian-Code-Styler/main.js
2023-08-11 12:06:04 +01:00

11105 lines
2.4 MiB
Raw Blame History

This file contains ambiguous Unicode characters

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

/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all2) => {
for (var name in all2)
__defProp(target, name, { get: all2[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// node_modules/@simonwep/pickr/dist/pickr.min.js
var require_pickr_min = __commonJS({
"node_modules/@simonwep/pickr/dist/pickr.min.js"(exports, module2) {
!function(t2, e2) {
"object" == typeof exports && "object" == typeof module2 ? module2.exports = e2() : "function" == typeof define && define.amd ? define([], e2) : "object" == typeof exports ? exports.Pickr = e2() : t2.Pickr = e2();
}(self, function() {
return (() => {
"use strict";
var t2 = { d: (e3, o3) => {
for (var n3 in o3)
t2.o(o3, n3) && !t2.o(e3, n3) && Object.defineProperty(e3, n3, { enumerable: true, get: o3[n3] });
}, o: (t3, e3) => Object.prototype.hasOwnProperty.call(t3, e3), r: (t3) => {
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t3, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t3, "__esModule", { value: true });
} }, e2 = {};
t2.d(e2, { default: () => L2 });
var o2 = {};
function n2(t3, e3, o3, n3, i3 = {}) {
e3 instanceof HTMLCollection || e3 instanceof NodeList ? e3 = Array.from(e3) : Array.isArray(e3) || (e3 = [e3]), Array.isArray(o3) || (o3 = [o3]);
for (const s3 of e3)
for (const e4 of o3)
s3[t3](e4, n3, { capture: false, ...i3 });
return Array.prototype.slice.call(arguments, 1);
}
t2.r(o2), t2.d(o2, { adjustableInputNumbers: () => p2, createElementFromString: () => r2, createFromTemplate: () => a2, eventPath: () => l2, off: () => s2, on: () => i2, resolveElement: () => c2 });
const i2 = n2.bind(null, "addEventListener"), s2 = n2.bind(null, "removeEventListener");
function r2(t3) {
const e3 = document.createElement("div");
return e3.innerHTML = t3.trim(), e3.firstElementChild;
}
function a2(t3) {
const e3 = (t4, e4) => {
const o4 = t4.getAttribute(e4);
return t4.removeAttribute(e4), o4;
}, o3 = (t4, n3 = {}) => {
const i3 = e3(t4, ":obj"), s3 = e3(t4, ":ref"), r3 = i3 ? n3[i3] = {} : n3;
s3 && (n3[s3] = t4);
for (const n4 of Array.from(t4.children)) {
const t5 = e3(n4, ":arr"), i4 = o3(n4, t5 ? {} : r3);
t5 && (r3[t5] || (r3[t5] = [])).push(Object.keys(i4).length ? i4 : n4);
}
return n3;
};
return o3(r2(t3));
}
function l2(t3) {
let e3 = t3.path || t3.composedPath && t3.composedPath();
if (e3)
return e3;
let o3 = t3.target.parentElement;
for (e3 = [t3.target, o3]; o3 = o3.parentElement; )
e3.push(o3);
return e3.push(document, window), e3;
}
function c2(t3) {
return t3 instanceof Element ? t3 : "string" == typeof t3 ? t3.split(/>>/g).reduce((t4, e3, o3, n3) => (t4 = t4.querySelector(e3), o3 < n3.length - 1 ? t4.shadowRoot : t4), document) : null;
}
function p2(t3, e3 = (t4) => t4) {
function o3(o4) {
const n3 = [1e-3, 0.01, 0.1][Number(o4.shiftKey || 2 * o4.ctrlKey)] * (o4.deltaY < 0 ? 1 : -1);
let i3 = 0, s3 = t3.selectionStart;
t3.value = t3.value.replace(/[\d.]+/g, (t4, o5) => o5 <= s3 && o5 + t4.length >= s3 ? (s3 = o5, e3(Number(t4), n3, i3)) : (i3++, t4)), t3.focus(), t3.setSelectionRange(s3, s3), o4.preventDefault(), t3.dispatchEvent(new Event("input"));
}
i2(t3, "focus", () => i2(window, "wheel", o3, { passive: false })), i2(t3, "blur", () => s2(window, "wheel", o3));
}
const { min: u2, max: h2, floor: d2, round: m2 } = Math;
function f2(t3, e3, o3) {
e3 /= 100, o3 /= 100;
const n3 = d2(t3 = t3 / 360 * 6), i3 = t3 - n3, s3 = o3 * (1 - e3), r3 = o3 * (1 - i3 * e3), a3 = o3 * (1 - (1 - i3) * e3), l3 = n3 % 6;
return [255 * [o3, r3, s3, s3, a3, o3][l3], 255 * [a3, o3, o3, r3, s3, s3][l3], 255 * [s3, s3, a3, o3, o3, r3][l3]];
}
function v2(t3, e3, o3) {
const n3 = (2 - (e3 /= 100)) * (o3 /= 100) / 2;
return 0 !== n3 && (e3 = 1 === n3 ? 0 : n3 < 0.5 ? e3 * o3 / (2 * n3) : e3 * o3 / (2 - 2 * n3)), [t3, 100 * e3, 100 * n3];
}
function b2(t3, e3, o3) {
const n3 = u2(t3 /= 255, e3 /= 255, o3 /= 255), i3 = h2(t3, e3, o3), s3 = i3 - n3;
let r3, a3;
if (0 === s3)
r3 = a3 = 0;
else {
a3 = s3 / i3;
const n4 = ((i3 - t3) / 6 + s3 / 2) / s3, l3 = ((i3 - e3) / 6 + s3 / 2) / s3, c3 = ((i3 - o3) / 6 + s3 / 2) / s3;
t3 === i3 ? r3 = c3 - l3 : e3 === i3 ? r3 = 1 / 3 + n4 - c3 : o3 === i3 && (r3 = 2 / 3 + l3 - n4), r3 < 0 ? r3 += 1 : r3 > 1 && (r3 -= 1);
}
return [360 * r3, 100 * a3, 100 * i3];
}
function y2(t3, e3, o3, n3) {
e3 /= 100, o3 /= 100;
return [...b2(255 * (1 - u2(1, (t3 /= 100) * (1 - (n3 /= 100)) + n3)), 255 * (1 - u2(1, e3 * (1 - n3) + n3)), 255 * (1 - u2(1, o3 * (1 - n3) + n3)))];
}
function g2(t3, e3, o3) {
e3 /= 100;
const n3 = 2 * (e3 *= (o3 /= 100) < 0.5 ? o3 : 1 - o3) / (o3 + e3) * 100, i3 = 100 * (o3 + e3);
return [t3, isNaN(n3) ? 0 : n3, i3];
}
function _2(t3) {
return b2(...t3.match(/.{2}/g).map((t4) => parseInt(t4, 16)));
}
function w2(t3) {
t3 = t3.match(/^[a-zA-Z]+$/) ? function(t4) {
if ("black" === t4.toLowerCase())
return "#000";
const e4 = document.createElement("canvas").getContext("2d");
return e4.fillStyle = t4, "#000" === e4.fillStyle ? null : e4.fillStyle;
}(t3) : t3;
const e3 = { cmyk: /^cmyk[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)/i, rgba: /^((rgba)|rgb)[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)[\D]*?([\d.]+|$)/i, hsla: /^((hsla)|hsl)[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)[\D]*?([\d.]+|$)/i, hsva: /^((hsva)|hsv)[\D]+([\d.]+)[\D]+([\d.]+)[\D]+([\d.]+)[\D]*?([\d.]+|$)/i, hexa: /^#?(([\dA-Fa-f]{3,4})|([\dA-Fa-f]{6})|([\dA-Fa-f]{8}))$/i }, o3 = (t4) => t4.map((t5) => /^(|\d+)\.\d+|\d+$/.test(t5) ? Number(t5) : void 0);
let n3;
t:
for (const i3 in e3) {
if (!(n3 = e3[i3].exec(t3)))
continue;
const s3 = (t4) => !!n3[2] == ("number" == typeof t4);
switch (i3) {
case "cmyk": {
const [, t4, e4, s4, r3] = o3(n3);
if (t4 > 100 || e4 > 100 || s4 > 100 || r3 > 100)
break t;
return { values: y2(t4, e4, s4, r3), type: i3 };
}
case "rgba": {
const [, , , t4, e4, r3, a3] = o3(n3);
if (t4 > 255 || e4 > 255 || r3 > 255 || a3 < 0 || a3 > 1 || !s3(a3))
break t;
return { values: [...b2(t4, e4, r3), a3], a: a3, type: i3 };
}
case "hexa": {
let [, t4] = n3;
4 !== t4.length && 3 !== t4.length || (t4 = t4.split("").map((t5) => t5 + t5).join(""));
const e4 = t4.substring(0, 6);
let o4 = t4.substring(6);
return o4 = o4 ? parseInt(o4, 16) / 255 : void 0, { values: [..._2(e4), o4], a: o4, type: i3 };
}
case "hsla": {
const [, , , t4, e4, r3, a3] = o3(n3);
if (t4 > 360 || e4 > 100 || r3 > 100 || a3 < 0 || a3 > 1 || !s3(a3))
break t;
return { values: [...g2(t4, e4, r3), a3], a: a3, type: i3 };
}
case "hsva": {
const [, , , t4, e4, r3, a3] = o3(n3);
if (t4 > 360 || e4 > 100 || r3 > 100 || a3 < 0 || a3 > 1 || !s3(a3))
break t;
return { values: [t4, e4, r3, a3], a: a3, type: i3 };
}
}
}
return { values: null, type: null };
}
function A2(t3 = 0, e3 = 0, o3 = 0, n3 = 1) {
const i3 = (t4, e4) => (o4 = -1) => e4(~o4 ? t4.map((t5) => Number(t5.toFixed(o4))) : t4), s3 = { h: t3, s: e3, v: o3, a: n3, toHSVA() {
const t4 = [s3.h, s3.s, s3.v, s3.a];
return t4.toString = i3(t4, (t5) => `hsva(${t5[0]}, ${t5[1]}%, ${t5[2]}%, ${s3.a})`), t4;
}, toHSLA() {
const t4 = [...v2(s3.h, s3.s, s3.v), s3.a];
return t4.toString = i3(t4, (t5) => `hsla(${t5[0]}, ${t5[1]}%, ${t5[2]}%, ${s3.a})`), t4;
}, toRGBA() {
const t4 = [...f2(s3.h, s3.s, s3.v), s3.a];
return t4.toString = i3(t4, (t5) => `rgba(${t5[0]}, ${t5[1]}, ${t5[2]}, ${s3.a})`), t4;
}, toCMYK() {
const t4 = function(t5, e4, o4) {
const n4 = f2(t5, e4, o4), i4 = n4[0] / 255, s4 = n4[1] / 255, r3 = n4[2] / 255, a3 = u2(1 - i4, 1 - s4, 1 - r3);
return [100 * (1 === a3 ? 0 : (1 - i4 - a3) / (1 - a3)), 100 * (1 === a3 ? 0 : (1 - s4 - a3) / (1 - a3)), 100 * (1 === a3 ? 0 : (1 - r3 - a3) / (1 - a3)), 100 * a3];
}(s3.h, s3.s, s3.v);
return t4.toString = i3(t4, (t5) => `cmyk(${t5[0]}%, ${t5[1]}%, ${t5[2]}%, ${t5[3]}%)`), t4;
}, toHEXA() {
const t4 = function(t5, e5, o4) {
return f2(t5, e5, o4).map((t6) => m2(t6).toString(16).padStart(2, "0"));
}(s3.h, s3.s, s3.v), e4 = s3.a >= 1 ? "" : Number((255 * s3.a).toFixed(0)).toString(16).toUpperCase().padStart(2, "0");
return e4 && t4.push(e4), t4.toString = () => `#${t4.join("").toUpperCase()}`, t4;
}, clone: () => A2(s3.h, s3.s, s3.v, s3.a) };
return s3;
}
const C2 = (t3) => Math.max(Math.min(t3, 1), 0);
function $2(t3) {
const e3 = { options: Object.assign({ lock: null, onchange: () => 0, onstop: () => 0 }, t3), _keyboard(t4) {
const { options: o4 } = e3, { type: n4, key: i3 } = t4;
if (document.activeElement === o4.wrapper) {
const { lock: o5 } = e3.options, s3 = "ArrowUp" === i3, r4 = "ArrowRight" === i3, a3 = "ArrowDown" === i3, l3 = "ArrowLeft" === i3;
if ("keydown" === n4 && (s3 || r4 || a3 || l3)) {
let n5 = 0, i4 = 0;
"v" === o5 ? n5 = s3 || r4 ? 1 : -1 : "h" === o5 ? n5 = s3 || r4 ? -1 : 1 : (i4 = s3 ? -1 : a3 ? 1 : 0, n5 = l3 ? -1 : r4 ? 1 : 0), e3.update(C2(e3.cache.x + 0.01 * n5), C2(e3.cache.y + 0.01 * i4)), t4.preventDefault();
} else
i3.startsWith("Arrow") && (e3.options.onstop(), t4.preventDefault());
}
}, _tapstart(t4) {
i2(document, ["mouseup", "touchend", "touchcancel"], e3._tapstop), i2(document, ["mousemove", "touchmove"], e3._tapmove), t4.cancelable && t4.preventDefault(), e3._tapmove(t4);
}, _tapmove(t4) {
const { options: o4, cache: n4 } = e3, { lock: i3, element: s3, wrapper: r4 } = o4, a3 = r4.getBoundingClientRect();
let l3 = 0, c3 = 0;
if (t4) {
const e4 = t4 && t4.touches && t4.touches[0];
l3 = t4 ? (e4 || t4).clientX : 0, c3 = t4 ? (e4 || t4).clientY : 0, l3 < a3.left ? l3 = a3.left : l3 > a3.left + a3.width && (l3 = a3.left + a3.width), c3 < a3.top ? c3 = a3.top : c3 > a3.top + a3.height && (c3 = a3.top + a3.height), l3 -= a3.left, c3 -= a3.top;
} else
n4 && (l3 = n4.x * a3.width, c3 = n4.y * a3.height);
"h" !== i3 && (s3.style.left = `calc(${l3 / a3.width * 100}% - ${s3.offsetWidth / 2}px)`), "v" !== i3 && (s3.style.top = `calc(${c3 / a3.height * 100}% - ${s3.offsetHeight / 2}px)`), e3.cache = { x: l3 / a3.width, y: c3 / a3.height };
const p3 = C2(l3 / a3.width), u3 = C2(c3 / a3.height);
switch (i3) {
case "v":
return o4.onchange(p3);
case "h":
return o4.onchange(u3);
default:
return o4.onchange(p3, u3);
}
}, _tapstop() {
e3.options.onstop(), s2(document, ["mouseup", "touchend", "touchcancel"], e3._tapstop), s2(document, ["mousemove", "touchmove"], e3._tapmove);
}, trigger() {
e3._tapmove();
}, update(t4 = 0, o4 = 0) {
const { left: n4, top: i3, width: s3, height: r4 } = e3.options.wrapper.getBoundingClientRect();
"h" === e3.options.lock && (o4 = t4), e3._tapmove({ clientX: n4 + s3 * t4, clientY: i3 + r4 * o4 });
}, destroy() {
const { options: t4, _tapstart: o4, _keyboard: n4 } = e3;
s2(document, ["keydown", "keyup"], n4), s2([t4.wrapper, t4.element], "mousedown", o4), s2([t4.wrapper, t4.element], "touchstart", o4, { passive: false });
} }, { options: o3, _tapstart: n3, _keyboard: r3 } = e3;
return i2([o3.wrapper, o3.element], "mousedown", n3), i2([o3.wrapper, o3.element], "touchstart", n3, { passive: false }), i2(document, ["keydown", "keyup"], r3), e3;
}
function k2(t3 = {}) {
t3 = Object.assign({ onchange: () => 0, className: "", elements: [] }, t3);
const e3 = i2(t3.elements, "click", (e4) => {
t3.elements.forEach((o3) => o3.classList[e4.target === o3 ? "add" : "remove"](t3.className)), t3.onchange(e4), e4.stopPropagation();
});
return { destroy: () => s2(...e3) };
}
const S2 = { variantFlipOrder: { start: "sme", middle: "mse", end: "ems" }, positionFlipOrder: { top: "tbrl", right: "rltb", bottom: "btrl", left: "lrbt" }, position: "bottom", margin: 8 }, O2 = (t3, e3, o3) => {
const { container: n3, margin: i3, position: s3, variantFlipOrder: r3, positionFlipOrder: a3 } = { container: document.documentElement.getBoundingClientRect(), ...S2, ...o3 }, { left: l3, top: c3 } = e3.style;
e3.style.left = "0", e3.style.top = "0";
const p3 = t3.getBoundingClientRect(), u3 = e3.getBoundingClientRect(), h3 = { t: p3.top - u3.height - i3, b: p3.bottom + i3, r: p3.right + i3, l: p3.left - u3.width - i3 }, d3 = { vs: p3.left, vm: p3.left + p3.width / 2 + -u3.width / 2, ve: p3.left + p3.width - u3.width, hs: p3.top, hm: p3.bottom - p3.height / 2 - u3.height / 2, he: p3.bottom - u3.height }, [m3, f3 = "middle"] = s3.split("-"), v3 = a3[m3], b3 = r3[f3], { top: y3, left: g3, bottom: _3, right: w3 } = n3;
for (const t4 of v3) {
const o4 = "t" === t4 || "b" === t4, n4 = h3[t4], [i4, s4] = o4 ? ["top", "left"] : ["left", "top"], [r4, a4] = o4 ? [u3.height, u3.width] : [u3.width, u3.height], [l4, c4] = o4 ? [_3, w3] : [w3, _3], [p4, m4] = o4 ? [y3, g3] : [g3, y3];
if (!(n4 < p4 || n4 + r4 > l4))
for (const r5 of b3) {
const l5 = d3[(o4 ? "v" : "h") + r5];
if (!(l5 < m4 || l5 + a4 > c4))
return e3.style[s4] = l5 - u3[s4] + "px", e3.style[i4] = n4 - u3[i4] + "px", t4 + r5;
}
}
return e3.style.left = l3, e3.style.top = c3, null;
};
function E2(t3, e3, o3) {
return e3 in t3 ? Object.defineProperty(t3, e3, { value: o3, enumerable: true, configurable: true, writable: true }) : t3[e3] = o3, t3;
}
class L2 {
constructor(t3) {
E2(this, "_initializingActive", true), E2(this, "_recalc", true), E2(this, "_nanopop", null), E2(this, "_root", null), E2(this, "_color", A2()), E2(this, "_lastColor", A2()), E2(this, "_swatchColors", []), E2(this, "_setupAnimationFrame", null), E2(this, "_eventListener", { init: [], save: [], hide: [], show: [], clear: [], change: [], changestop: [], cancel: [], swatchselect: [] }), this.options = t3 = Object.assign({ ...L2.DEFAULT_OPTIONS }, t3);
const { swatches: e3, components: o3, theme: n3, sliders: i3, lockOpacity: s3, padding: r3 } = t3;
["nano", "monolith"].includes(n3) && !i3 && (t3.sliders = "h"), o3.interaction || (o3.interaction = {});
const { preview: a3, opacity: l3, hue: c3, palette: p3 } = o3;
o3.opacity = !s3 && l3, o3.palette = p3 || a3 || l3 || c3, this._preBuild(), this._buildComponents(), this._bindEvents(), this._finalBuild(), e3 && e3.length && e3.forEach((t4) => this.addSwatch(t4));
const { button: u3, app: h3 } = this._root;
this._nanopop = ((t4, e4, o4) => {
const n4 = "object" != typeof t4 || t4 instanceof HTMLElement ? { reference: t4, popper: e4, ...o4 } : t4;
return { update(t5 = n4) {
const { reference: e5, popper: o5 } = Object.assign(n4, t5);
if (!o5 || !e5)
throw new Error("Popper- or reference-element missing.");
return O2(e5, o5, n4);
} };
})(u3, h3, { margin: r3 }), u3.setAttribute("role", "button"), u3.setAttribute("aria-label", this._t("btn:toggle"));
const d3 = this;
this._setupAnimationFrame = requestAnimationFrame(function e4() {
if (!h3.offsetWidth)
return requestAnimationFrame(e4);
d3.setColor(t3.default), d3._rePositioningPicker(), t3.defaultRepresentation && (d3._representation = t3.defaultRepresentation, d3.setColorRepresentation(d3._representation)), t3.showAlways && d3.show(), d3._initializingActive = false, d3._emit("init");
});
}
_preBuild() {
const { options: t3 } = this;
for (const e3 of ["el", "container"])
t3[e3] = c2(t3[e3]);
this._root = ((t4) => {
const { components: e3, useAsButton: o3, inline: n3, appClass: i3, theme: s3, lockOpacity: r3 } = t4.options, l3 = (t5) => t5 ? "" : 'style="display:none" hidden', c3 = (e4) => t4._t(e4), p3 = a2(`
<div :ref="root" class="pickr">
${o3 ? "" : '<button type="button" :ref="button" class="pcr-button"></button>'}
<div :ref="app" class="pcr-app ${i3 || ""}" data-theme="${s3}" ${n3 ? 'style="position: unset"' : ""} aria-label="${c3("ui:dialog")}" role="window">
<div class="pcr-selection" ${l3(e3.palette)}>
<div :obj="preview" class="pcr-color-preview" ${l3(e3.preview)}>
<button type="button" :ref="lastColor" class="pcr-last-color" aria-label="${c3("btn:last-color")}"></button>
<div :ref="currentColor" class="pcr-current-color"></div>
</div>
<div :obj="palette" class="pcr-color-palette">
<div :ref="picker" class="pcr-picker"></div>
<div :ref="palette" class="pcr-palette" tabindex="0" aria-label="${c3("aria:palette")}" role="listbox"></div>
</div>
<div :obj="hue" class="pcr-color-chooser" ${l3(e3.hue)}>
<div :ref="picker" class="pcr-picker"></div>
<div :ref="slider" class="pcr-hue pcr-slider" tabindex="0" aria-label="${c3("aria:hue")}" role="slider"></div>
</div>
<div :obj="opacity" class="pcr-color-opacity" ${l3(e3.opacity)}>
<div :ref="picker" class="pcr-picker"></div>
<div :ref="slider" class="pcr-opacity pcr-slider" tabindex="0" aria-label="${c3("aria:opacity")}" role="slider"></div>
</div>
</div>
<div class="pcr-swatches ${e3.palette ? "" : "pcr-last"}" :ref="swatches"></div>
<div :obj="interaction" class="pcr-interaction" ${l3(Object.keys(e3.interaction).length)}>
<input :ref="result" class="pcr-result" type="text" spellcheck="false" ${l3(e3.interaction.input)} aria-label="${c3("aria:input")}">
<input :arr="options" class="pcr-type" data-type="HEXA" value="${r3 ? "HEX" : "HEXA"}" type="button" ${l3(e3.interaction.hex)}>
<input :arr="options" class="pcr-type" data-type="RGBA" value="${r3 ? "RGB" : "RGBA"}" type="button" ${l3(e3.interaction.rgba)}>
<input :arr="options" class="pcr-type" data-type="HSLA" value="${r3 ? "HSL" : "HSLA"}" type="button" ${l3(e3.interaction.hsla)}>
<input :arr="options" class="pcr-type" data-type="HSVA" value="${r3 ? "HSV" : "HSVA"}" type="button" ${l3(e3.interaction.hsva)}>
<input :arr="options" class="pcr-type" data-type="CMYK" value="CMYK" type="button" ${l3(e3.interaction.cmyk)}>
<input :ref="save" class="pcr-save" value="${c3("btn:save")}" type="button" ${l3(e3.interaction.save)} aria-label="${c3("aria:btn:save")}">
<input :ref="cancel" class="pcr-cancel" value="${c3("btn:cancel")}" type="button" ${l3(e3.interaction.cancel)} aria-label="${c3("aria:btn:cancel")}">
<input :ref="clear" class="pcr-clear" value="${c3("btn:clear")}" type="button" ${l3(e3.interaction.clear)} aria-label="${c3("aria:btn:clear")}">
</div>
</div>
</div>
`), u3 = p3.interaction;
return u3.options.find((t5) => !t5.hidden && !t5.classList.add("active")), u3.type = () => u3.options.find((t5) => t5.classList.contains("active")), p3;
})(this), t3.useAsButton && (this._root.button = t3.el), t3.container.appendChild(this._root.root);
}
_finalBuild() {
const t3 = this.options, e3 = this._root;
if (t3.container.removeChild(e3.root), t3.inline) {
const o3 = t3.el.parentElement;
t3.el.nextSibling ? o3.insertBefore(e3.app, t3.el.nextSibling) : o3.appendChild(e3.app);
} else
t3.container.appendChild(e3.app);
t3.useAsButton ? t3.inline && t3.el.remove() : t3.el.parentNode.replaceChild(e3.root, t3.el), t3.disabled && this.disable(), t3.comparison || (e3.button.style.transition = "none", t3.useAsButton || (e3.preview.lastColor.style.transition = "none")), this.hide();
}
_buildComponents() {
const t3 = this, e3 = this.options.components, o3 = (t3.options.sliders || "v").repeat(2), [n3, i3] = o3.match(/^[vh]+$/g) ? o3 : [], s3 = () => this._color || (this._color = this._lastColor.clone()), r3 = { palette: $2({ element: t3._root.palette.picker, wrapper: t3._root.palette.palette, onstop: () => t3._emit("changestop", "slider", t3), onchange(o4, n4) {
if (!e3.palette)
return;
const i4 = s3(), { _root: r4, options: a3 } = t3, { lastColor: l3, currentColor: c3 } = r4.preview;
t3._recalc && (i4.s = 100 * o4, i4.v = 100 - 100 * n4, i4.v < 0 && (i4.v = 0), t3._updateOutput("slider"));
const p3 = i4.toRGBA().toString(0);
this.element.style.background = p3, this.wrapper.style.background = `
linear-gradient(to top, rgba(0, 0, 0, ${i4.a}), transparent),
linear-gradient(to left, hsla(${i4.h}, 100%, 50%, ${i4.a}), rgba(255, 255, 255, ${i4.a}))
`, a3.comparison ? a3.useAsButton || t3._lastColor || l3.style.setProperty("--pcr-color", p3) : (r4.button.style.setProperty("--pcr-color", p3), r4.button.classList.remove("clear"));
const u3 = i4.toHEXA().toString();
for (const { el: e4, color: o5 } of t3._swatchColors)
e4.classList[u3 === o5.toHEXA().toString() ? "add" : "remove"]("pcr-active");
c3.style.setProperty("--pcr-color", p3);
} }), hue: $2({ lock: "v" === i3 ? "h" : "v", element: t3._root.hue.picker, wrapper: t3._root.hue.slider, onstop: () => t3._emit("changestop", "slider", t3), onchange(o4) {
if (!e3.hue || !e3.palette)
return;
const n4 = s3();
t3._recalc && (n4.h = 360 * o4), this.element.style.backgroundColor = `hsl(${n4.h}, 100%, 50%)`, r3.palette.trigger();
} }), opacity: $2({ lock: "v" === n3 ? "h" : "v", element: t3._root.opacity.picker, wrapper: t3._root.opacity.slider, onstop: () => t3._emit("changestop", "slider", t3), onchange(o4) {
if (!e3.opacity || !e3.palette)
return;
const n4 = s3();
t3._recalc && (n4.a = Math.round(100 * o4) / 100), this.element.style.background = `rgba(0, 0, 0, ${n4.a})`, r3.palette.trigger();
} }), selectable: k2({ elements: t3._root.interaction.options, className: "active", onchange(e4) {
t3._representation = e4.target.getAttribute("data-type").toUpperCase(), t3._recalc && t3._updateOutput("swatch");
} }) };
this._components = r3;
}
_bindEvents() {
const { _root: t3, options: e3 } = this, o3 = [i2(t3.interaction.clear, "click", () => this._clearColor()), i2([t3.interaction.cancel, t3.preview.lastColor], "click", () => {
this.setHSVA(...(this._lastColor || this._color).toHSVA(), true), this._emit("cancel");
}), i2(t3.interaction.save, "click", () => {
!this.applyColor() && !e3.showAlways && this.hide();
}), i2(t3.interaction.result, ["keyup", "input"], (t4) => {
this.setColor(t4.target.value, true) && !this._initializingActive && (this._emit("change", this._color, "input", this), this._emit("changestop", "input", this)), t4.stopImmediatePropagation();
}), i2(t3.interaction.result, ["focus", "blur"], (t4) => {
this._recalc = "blur" === t4.type, this._recalc && this._updateOutput(null);
}), i2([t3.palette.palette, t3.palette.picker, t3.hue.slider, t3.hue.picker, t3.opacity.slider, t3.opacity.picker], ["mousedown", "touchstart"], () => this._recalc = true, { passive: true })];
if (!e3.showAlways) {
const n3 = e3.closeWithKey;
o3.push(i2(t3.button, "click", () => this.isOpen() ? this.hide() : this.show()), i2(document, "keyup", (t4) => this.isOpen() && (t4.key === n3 || t4.code === n3) && this.hide()), i2(document, ["touchstart", "mousedown"], (e4) => {
this.isOpen() && !l2(e4).some((e5) => e5 === t3.app || e5 === t3.button) && this.hide();
}, { capture: true }));
}
if (e3.adjustableNumbers) {
const e4 = { rgba: [255, 255, 255, 1], hsva: [360, 100, 100, 1], hsla: [360, 100, 100, 1], cmyk: [100, 100, 100, 100] };
p2(t3.interaction.result, (t4, o4, n3) => {
const i3 = e4[this.getColorRepresentation().toLowerCase()];
if (i3) {
const e5 = i3[n3], s3 = t4 + (e5 >= 100 ? 1e3 * o4 : o4);
return s3 <= 0 ? 0 : Number((s3 < e5 ? s3 : e5).toPrecision(3));
}
return t4;
});
}
if (e3.autoReposition && !e3.inline) {
let t4 = null;
const n3 = this;
o3.push(i2(window, ["scroll", "resize"], () => {
n3.isOpen() && (e3.closeOnScroll && n3.hide(), null === t4 ? (t4 = setTimeout(() => t4 = null, 100), requestAnimationFrame(function e4() {
n3._rePositioningPicker(), null !== t4 && requestAnimationFrame(e4);
})) : (clearTimeout(t4), t4 = setTimeout(() => t4 = null, 100)));
}, { capture: true }));
}
this._eventBindings = o3;
}
_rePositioningPicker() {
const { options: t3 } = this;
if (!t3.inline) {
if (!this._nanopop.update({ container: document.body.getBoundingClientRect(), position: t3.position })) {
const t4 = this._root.app, e3 = t4.getBoundingClientRect();
t4.style.top = (window.innerHeight - e3.height) / 2 + "px", t4.style.left = (window.innerWidth - e3.width) / 2 + "px";
}
}
}
_updateOutput(t3) {
const { _root: e3, _color: o3, options: n3 } = this;
if (e3.interaction.type()) {
const t4 = `to${e3.interaction.type().getAttribute("data-type")}`;
e3.interaction.result.value = "function" == typeof o3[t4] ? o3[t4]().toString(n3.outputPrecision) : "";
}
!this._initializingActive && this._recalc && this._emit("change", o3, t3, this);
}
_clearColor(t3 = false) {
const { _root: e3, options: o3 } = this;
o3.useAsButton || e3.button.style.setProperty("--pcr-color", "rgba(0, 0, 0, 0.15)"), e3.button.classList.add("clear"), o3.showAlways || this.hide(), this._lastColor = null, this._initializingActive || t3 || (this._emit("save", null), this._emit("clear"));
}
_parseLocalColor(t3) {
const { values: e3, type: o3, a: n3 } = w2(t3), { lockOpacity: i3 } = this.options, s3 = void 0 !== n3 && 1 !== n3;
return e3 && 3 === e3.length && (e3[3] = void 0), { values: !e3 || i3 && s3 ? null : e3, type: o3 };
}
_t(t3) {
return this.options.i18n[t3] || L2.I18N_DEFAULTS[t3];
}
_emit(t3, ...e3) {
this._eventListener[t3].forEach((t4) => t4(...e3, this));
}
on(t3, e3) {
return this._eventListener[t3].push(e3), this;
}
off(t3, e3) {
const o3 = this._eventListener[t3] || [], n3 = o3.indexOf(e3);
return ~n3 && o3.splice(n3, 1), this;
}
addSwatch(t3) {
const { values: e3 } = this._parseLocalColor(t3);
if (e3) {
const { _swatchColors: t4, _root: o3 } = this, n3 = A2(...e3), s3 = r2(`<button type="button" style="--pcr-color: ${n3.toRGBA().toString(0)}" aria-label="${this._t("btn:swatch")}"/>`);
return o3.swatches.appendChild(s3), t4.push({ el: s3, color: n3 }), this._eventBindings.push(i2(s3, "click", () => {
this.setHSVA(...n3.toHSVA(), true), this._emit("swatchselect", n3), this._emit("change", n3, "swatch", this);
})), true;
}
return false;
}
removeSwatch(t3) {
const e3 = this._swatchColors[t3];
if (e3) {
const { el: o3 } = e3;
return this._root.swatches.removeChild(o3), this._swatchColors.splice(t3, 1), true;
}
return false;
}
applyColor(t3 = false) {
const { preview: e3, button: o3 } = this._root, n3 = this._color.toRGBA().toString(0);
return e3.lastColor.style.setProperty("--pcr-color", n3), this.options.useAsButton || o3.style.setProperty("--pcr-color", n3), o3.classList.remove("clear"), this._lastColor = this._color.clone(), this._initializingActive || t3 || this._emit("save", this._color), this;
}
destroy() {
cancelAnimationFrame(this._setupAnimationFrame), this._eventBindings.forEach((t3) => s2(...t3)), Object.keys(this._components).forEach((t3) => this._components[t3].destroy());
}
destroyAndRemove() {
this.destroy();
const { root: t3, app: e3 } = this._root;
t3.parentElement && t3.parentElement.removeChild(t3), e3.parentElement.removeChild(e3), Object.keys(this).forEach((t4) => this[t4] = null);
}
hide() {
return !!this.isOpen() && (this._root.app.classList.remove("visible"), this._emit("hide"), true);
}
show() {
return !this.options.disabled && !this.isOpen() && (this._root.app.classList.add("visible"), this._rePositioningPicker(), this._emit("show", this._color), this);
}
isOpen() {
return this._root.app.classList.contains("visible");
}
setHSVA(t3 = 360, e3 = 0, o3 = 0, n3 = 1, i3 = false) {
const s3 = this._recalc;
if (this._recalc = false, t3 < 0 || t3 > 360 || e3 < 0 || e3 > 100 || o3 < 0 || o3 > 100 || n3 < 0 || n3 > 1)
return false;
this._color = A2(t3, e3, o3, n3);
const { hue: r3, opacity: a3, palette: l3 } = this._components;
return r3.update(t3 / 360), a3.update(n3), l3.update(e3 / 100, 1 - o3 / 100), i3 || this.applyColor(), s3 && this._updateOutput(), this._recalc = s3, true;
}
setColor(t3, e3 = false) {
if (null === t3)
return this._clearColor(e3), true;
const { values: o3, type: n3 } = this._parseLocalColor(t3);
if (o3) {
const t4 = n3.toUpperCase(), { options: i3 } = this._root.interaction, s3 = i3.find((e4) => e4.getAttribute("data-type") === t4);
if (s3 && !s3.hidden)
for (const t5 of i3)
t5.classList[t5 === s3 ? "add" : "remove"]("active");
return !!this.setHSVA(...o3, e3) && this.setColorRepresentation(t4);
}
return false;
}
setColorRepresentation(t3) {
return t3 = t3.toUpperCase(), !!this._root.interaction.options.find((e3) => e3.getAttribute("data-type").startsWith(t3) && !e3.click());
}
getColorRepresentation() {
return this._representation;
}
getColor() {
return this._color;
}
getSelectedColor() {
return this._lastColor;
}
getRoot() {
return this._root;
}
disable() {
return this.hide(), this.options.disabled = true, this._root.button.classList.add("disabled"), this;
}
enable() {
return this.options.disabled = false, this._root.button.classList.remove("disabled"), this;
}
}
return E2(L2, "utils", o2), E2(L2, "version", "1.8.2"), E2(L2, "I18N_DEFAULTS", { "ui:dialog": "color picker dialog", "btn:toggle": "toggle color picker dialog", "btn:swatch": "color swatch", "btn:last-color": "use previous color", "btn:save": "Save", "btn:cancel": "Cancel", "btn:clear": "Clear", "aria:btn:save": "save and close", "aria:btn:cancel": "cancel and close", "aria:btn:clear": "clear and close", "aria:input": "color input field", "aria:palette": "color selection area", "aria:hue": "hue selection slider", "aria:opacity": "selection slider" }), E2(L2, "DEFAULT_OPTIONS", { appClass: null, theme: "classic", useAsButton: false, padding: 8, disabled: false, comparison: true, closeOnScroll: false, outputPrecision: 0, lockOpacity: false, autoReposition: true, container: "body", components: { interaction: {} }, i18n: {}, swatches: null, inline: false, sliders: null, default: "#42445a", defaultRepresentation: null, position: "bottom-middle", adjustableNumbers: true, showAlways: false, closeWithKey: "Escape" }), E2(L2, "create", (t3) => new L2(t3)), e2 = e2.default;
})();
});
}
});
// node_modules/is-buffer/index.js
var require_is_buffer = __commonJS({
"node_modules/is-buffer/index.js"(exports, module2) {
module2.exports = function isBuffer2(obj) {
return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj);
};
}
});
// node_modules/extend/index.js
var require_extend = __commonJS({
"node_modules/extend/index.js"(exports, module2) {
"use strict";
var hasOwn = Object.prototype.hasOwnProperty;
var toStr = Object.prototype.toString;
var defineProperty = Object.defineProperty;
var gOPD = Object.getOwnPropertyDescriptor;
var isArray = function isArray2(arr) {
if (typeof Array.isArray === "function") {
return Array.isArray(arr);
}
return toStr.call(arr) === "[object Array]";
};
var isPlainObject2 = function isPlainObject3(obj) {
if (!obj || toStr.call(obj) !== "[object Object]") {
return false;
}
var hasOwnConstructor = hasOwn.call(obj, "constructor");
var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, "isPrototypeOf");
if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
return false;
}
var key;
for (key in obj) {
}
return typeof key === "undefined" || hasOwn.call(obj, key);
};
var setProperty = function setProperty2(target, options) {
if (defineProperty && options.name === "__proto__") {
defineProperty(target, options.name, {
enumerable: true,
configurable: true,
value: options.newValue,
writable: true
});
} else {
target[options.name] = options.newValue;
}
};
var getProperty = function getProperty2(obj, name) {
if (name === "__proto__") {
if (!hasOwn.call(obj, name)) {
return void 0;
} else if (gOPD) {
return gOPD(obj, name).value;
}
}
return obj[name];
};
module2.exports = function extend2() {
var options, name, src, copy, copyIsArray, clone;
var target = arguments[0];
var i2 = 1;
var length = arguments.length;
var deep = false;
if (typeof target === "boolean") {
deep = target;
target = arguments[1] || {};
i2 = 2;
}
if (target == null || typeof target !== "object" && typeof target !== "function") {
target = {};
}
for (; i2 < length; ++i2) {
options = arguments[i2];
if (options != null) {
for (name in options) {
src = getProperty(target, name);
copy = getProperty(options, name);
if (target !== copy) {
if (deep && copy && (isPlainObject2(copy) || (copyIsArray = isArray(copy)))) {
if (copyIsArray) {
copyIsArray = false;
clone = src && isArray(src) ? src : [];
} else {
clone = src && isPlainObject2(src) ? src : {};
}
setProperty(target, { name, newValue: extend2(deep, clone, copy) });
} else if (typeof copy !== "undefined") {
setProperty(target, { name, newValue: copy });
}
}
}
}
}
return target;
};
}
});
// src/main.ts
var main_exports = {};
__export(main_exports, {
default: () => CodeStylerPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian4 = require("obsidian");
// src/Settings.ts
var THEME_DEFAULT_SETTINGS = {
codeblock: {
lineNumbers: true,
unwrapLines: true,
wrapLinesActive: false,
curvature: 4
},
gutter: {
highlight: true,
activeLine: false
},
header: {
title: {
textFont: "",
textBold: false,
textItalic: true
},
languageTag: {
display: "none",
textFont: "",
textBold: true,
textItalic: false
},
languageIcon: {
display: "none",
displayColour: true
},
fontSize: 14,
collapsePlaceholder: ""
},
highlights: {
activeCodeblockLine: false,
activeEditorLine: false
},
inline: {
syntaxHighlight: true,
fontWeight: 4,
curvature: 6,
paddingVertical: 5,
paddingHorizontal: 5,
marginHorizontal: 0,
titleFontWeight: 8
},
advanced: {
gradientHighlights: false,
gradientHighlightsColourStop: "70%",
languageBorderColour: false,
languageBorderWidth: 5,
iconSize: 28
}
};
var THEME_FALLBACK_COLOURS = {
codeblock: {
backgroundColour: "--code-background",
textColour: "--code-normal"
},
gutter: {
backgroundColour: "--code-background",
textColour: "--text-faint",
activeTextColour: "--text-muted"
},
header: {
backgroundColour: "--code-background",
title: {
textColour: "--code-comment"
},
languageTag: {
backgroundColour: "--code-background",
textColour: "--code-comment"
},
lineColour: "--color-base-30"
},
highlights: {
activeCodeblockLineColour: "--color-base-30",
activeEditorLineColour: "--color-base-20",
defaultColour: "--text-highlight-bg",
alternativeHighlights: {}
},
inline: {
backgroundColour: "--code-background",
textColour: "--code-normal",
activeTextColour: "--code-normal",
titleTextColour: "--code-comment"
},
advanced: {
buttonColour: "--text-muted",
buttonActiveColour: "--text-normal"
}
};
var DEFAULT_THEME = {
settings: THEME_DEFAULT_SETTINGS,
colours: {
light: THEME_FALLBACK_COLOURS,
dark: THEME_FALLBACK_COLOURS
}
};
var SOLARIZED_THEME = {
settings: THEME_DEFAULT_SETTINGS,
colours: {
light: {
codeblock: {
backgroundColour: "#FCF6E4",
textColour: "#bababa"
},
gutter: {
backgroundColour: "#EDE8D6",
textColour: "#6c6c6c",
activeTextColour: "#8c8c8c"
},
header: {
backgroundColour: "#D5CCB4",
title: {
textColour: "#866704"
},
languageTag: {
backgroundColour: "#B8B5AA",
textColour: "#C25F30"
},
lineColour: "#EDD489"
},
highlights: {
activeCodeblockLineColour: "#EDE8D6",
activeEditorLineColour: "#60460633",
defaultColour: "#E9DFBA",
alternativeHighlights: {}
},
inline: {
backgroundColour: "#FCF6E4",
textColour: "#bababa",
activeTextColour: "#bababa",
titleTextColour: "#C25F30"
},
advanced: {
buttonColour: "--text-muted",
buttonActiveColour: "--text-normal"
}
},
dark: {
codeblock: {
backgroundColour: "#002b36",
textColour: "#bababa"
},
gutter: {
backgroundColour: "#073642",
textColour: "#6c6c6c",
activeTextColour: "#4c4c4c"
},
header: {
backgroundColour: "#0a4554",
title: {
textColour: "#dadada"
},
languageTag: {
backgroundColour: "#008080",
textColour: "#000000"
},
lineColour: "#46cced"
},
highlights: {
activeCodeblockLineColour: "#073642",
activeEditorLineColour: "#468eeb33",
defaultColour: "#054b5c",
alternativeHighlights: {}
},
inline: {
backgroundColour: "#002b36",
textColour: "#bababa",
activeTextColour: "#bababa",
titleTextColour: "#000000"
},
advanced: {
buttonColour: "--text-muted",
buttonActiveColour: "--text-normal"
}
}
}
};
var DEFAULT_SETTINGS = {
themes: {
"Default": DEFAULT_THEME,
"Solarized": SOLARIZED_THEME
},
selectedTheme: "Default",
currentTheme: structuredClone(DEFAULT_THEME),
newTheme: "",
newHighlight: "",
decoratePrint: true,
excludedLanguages: "ad-*",
excludedCodeblocks: "dataview, dataviewjs, math",
specialLanguages: ["^preview$", "^include$", "^output$", "^run-.+$"],
redirectLanguages: {}
};
var PARAMETERS = ["title", "fold", "ln", "unwrap", "ignore"];
var TRANSITION_LENGTH = 240;
var PRISM_LANGUAGES = {
// Prism Languages: https://prismjs.com/plugins/show-language/
// "none": "Plain text", // NOTE: Obsidian uses this for codeblocks without language names
"plain": "Plain text",
"plaintext": "Plain text",
"text": "Plain text",
"txt": "Plain text",
"html": "HTML",
"xml": "XML",
"svg": "SVG",
"mathml": "MathML",
"ssml": "SSML",
"rss": "RSS",
"css": "CSS",
"clike": "C-like",
"js": "JavaScript",
"abap": "ABAP",
"abnf": "ABNF",
"al": "AL",
"antlr4": "ANTLR4",
"g4": "ANTLR4",
"apacheconf": "Apache Configuration",
"apl": "APL",
"aql": "AQL",
"ino": "Arduino",
"arff": "ARFF",
"armasm": "ARM Assembly",
"arm-asm": "ARM Assembly",
"art": "Arturo",
"asciidoc": "AsciiDoc",
"adoc": "AsciiDoc",
"aspnet": "ASP.NET (C#)",
"asm6502": "6502 Assembly",
"asmatmel": "Atmel AVR Assembly",
"autohotkey": "AutoHotkey",
"autoit": "AutoIt",
"avisynth": "AviSynth",
"avs": "AviSynth",
"avro-idl": "Avro IDL",
"avdl": "Avro IDL",
"awk": "AWK",
"gawk": "GAWK",
"sh": "Shell",
"basic": "BASIC",
"bbcode": "BBcode",
"bbj": "BBj",
"bnf": "BNF",
"rbnf": "RBNF",
"bqn": "BQN",
"bsl": "BSL (1C:Enterprise)",
"oscript": "OneScript",
"csharp": "C#",
"cs": "C#",
"dotnet": "C#",
"cpp": "C++",
"cfscript": "CFScript",
"cfc": "CFScript",
"cil": "CIL",
"cilkc": "Cilk/C",
"cilk-c": "Cilk/C",
"cilkcpp": "Cilk/C++",
"cilk-cpp": "Cilk/C++",
"cilk": "Cilk/C++",
"cmake": "CMake",
"cobol": "COBOL",
"coffee": "CoffeeScript",
"conc": "Concurnas",
"csp": "Content-Security-Policy",
"css-extras": "CSS Extras",
"csv": "CSV",
"cue": "CUE",
"dataweave": "DataWeave",
"dax": "DAX",
"django": "Django/Jinja2",
"jinja2": "Django/Jinja2",
"dns-zone-file": "DNS zone file",
"dns-zone": "DNS zone file",
"dockerfile": "Docker",
"dot": "DOT (Graphviz)",
"gv": "DOT (Graphviz)",
"ebnf": "EBNF",
"editorconfig": "EditorConfig",
"ejs": "EJS",
"etlua": "Embedded Lua templating",
"erb": "ERB",
"excel-formula": "Excel Formula",
"xlsx": "Excel Formula",
"xls": "Excel Formula",
"fsharp": "F#",
"firestore-security-rules": "Firestore security rules",
"ftl": "FreeMarker Template Language",
"gml": "GameMaker Language",
"gamemakerlanguage": "GameMaker Language",
"gap": "GAP (CAS)",
"gcode": "G-code",
"gdscript": "GDScript",
"gedcom": "GEDCOM",
"gettext": "gettext",
"po": "gettext",
"glsl": "GLSL",
"gn": "GN",
"gni": "GN",
"linker-script": "GNU Linker Script",
"ld": "GNU Linker Script",
"go-module": "Go module",
"go-mod": "Go module",
"graphql": "GraphQL",
"hbs": "Handlebars",
"hs": "Haskell",
"hcl": "HCL",
"hlsl": "HLSL",
"http": "HTTP",
"hpkp": "HTTP Public-Key-Pins",
"hsts": "HTTP Strict-Transport-Security",
"ichigojam": "IchigoJam",
"icu-message-format": "ICU Message Format",
"idr": "Idris",
"ignore": ".ignore",
"gitignore": ".gitignore",
"hgignore": ".hgignore",
"npmignore": ".npmignore",
"inform7": "Inform 7",
"javadoc": "JavaDoc",
"javadoclike": "JavaDoc-like",
"javastacktrace": "Java stack trace",
"jq": "JQ",
"jsdoc": "JSDoc",
"js-extras": "JS Extras",
"json": "JSON",
"webmanifest": "Web App Manifest",
"json5": "JSON5",
"jsonp": "JSONP",
"jsstacktrace": "JS stack trace",
"js-templates": "JS Templates",
"keepalived": "Keepalived Configure",
"kts": "Kotlin Script",
"kt": "Kotlin",
"kumir": "KuMir (\u041A\u0443\u041C\u0438\u0440)",
"kum": "KuMir (\u041A\u0443\u041C\u0438\u0440)",
"latex": "LaTeX",
"tex": "TeX",
"context": "ConTeXt",
"lilypond": "LilyPond",
"ly": "LilyPond",
"emacs": "Lisp",
"elisp": "Lisp",
"emacs-lisp": "Lisp",
"llvm": "LLVM IR",
"log": "Log file",
"lolcode": "LOLCODE",
"magma": "Magma (CAS)",
"md": "Markdown",
"markup-templating": "Markup templating",
"matlab": "MATLAB",
"maxscript": "MAXScript",
"mel": "MEL",
"metafont": "METAFONT",
"mongodb": "MongoDB",
"moon": "MoonScript",
"n1ql": "N1QL",
"n4js": "N4JS",
"n4jsd": "N4JS",
"nand2tetris-hdl": "Nand To Tetris HDL",
"naniscript": "Naninovel Script",
"nani": "Naninovel Script",
"nasm": "NASM",
"neon": "NEON",
"nginx": "nginx",
"nsis": "NSIS",
"objectivec": "Objective-C",
"objc": "Objective-C",
"ocaml": "OCaml",
"opencl": "OpenCL",
"openqasm": "OpenQasm",
"qasm": "OpenQasm",
"parigp": "PARI/GP",
"objectpascal": "Object Pascal",
"psl": "PATROL Scripting Language",
"pcaxis": "PC-Axis",
"px": "PC-Axis",
"peoplecode": "PeopleCode",
"pcode": "PeopleCode",
"php": "PHP",
"phpdoc": "PHPDoc",
"php-extras": "PHP Extras",
"plant-uml": "PlantUML",
"plantuml": "PlantUML",
"plsql": "PL/SQL",
"powerquery": "PowerQuery",
"pq": "PowerQuery",
"mscript": "PowerQuery",
"powershell": "PowerShell",
"promql": "PromQL",
"properties": ".properties",
"protobuf": "Protocol Buffers",
"purebasic": "PureBasic",
"pbfasm": "PureBasic",
"purs": "PureScript",
"py": "Python",
"qsharp": "Q#",
"qs": "Q#",
"q": "Q (kdb+ database)",
"qml": "QML",
"rkt": "Racket",
"cshtml": "Razor C#",
"razor": "Razor C#",
"jsx": "React JSX",
"tsx": "React TSX",
"renpy": "Ren'py",
"rpy": "Ren'py",
"res": "ReScript",
"rest": "reST (reStructuredText)",
"robotframework": "Robot Framework",
"robot": "Robot Framework",
"rb": "Ruby",
"sas": "SAS",
"sass": "Sass (Sass)",
"scss": "Sass (SCSS)",
"shell-session": "Shell session",
"sh-session": "Shell session",
"shellsession": "Shell session",
"sml": "SML",
"smlnj": "SML/NJ",
"solidity": "Solidity (Ethereum)",
"sol": "Solidity (Ethereum)",
"solution-file": "Solution file",
"sln": "Solution file",
"soy": "Soy (Closure Template)",
"sparql": "SPARQL",
"rq": "SPARQL",
"splunk-spl": "Splunk SPL",
"sqf": "SQF: Status Quo Function (Arma 3)",
"sql": "SQL",
"stata": "Stata Ado",
"iecst": "Structured Text (IEC 61131-3)",
"supercollider": "SuperCollider",
"sclang": "SuperCollider",
"systemd": "Systemd configuration file",
"t4-templating": "T4 templating",
"t4-cs": "T4 Text Templates (C#)",
"t4": "T4 Text Templates (C#)",
"t4-vb": "T4 Text Templates (VB)",
"tap": "TAP",
"tt2": "Template Toolkit 2",
"toml": "TOML",
"trickle": "trickle",
"troy": "troy",
"trig": "TriG",
"ts": "TypeScript",
"tsconfig": "TSConfig",
"uscript": "UnrealScript",
"uc": "UnrealScript",
"uorazor": "UO Razor Script",
"uri": "URI",
"url": "URL",
"vbnet": "VB.Net",
"vhdl": "VHDL",
"vim": "vim",
"visual-basic": "Visual Basic",
"vba": "VBA",
"vb": "Visual Basic",
"wasm": "WebAssembly",
"web-idl": "Web IDL",
"webidl": "Web IDL",
"wgsl": "WGSL",
"wiki": "Wiki markup",
"wolfram": "Wolfram language",
"nb": "Mathematica Notebook",
"wl": "Wolfram language",
"xeoracube": "XeoraCube",
"xml-doc": "XML doc (.net)",
"xojo": "Xojo (REALbasic)",
"xquery": "XQuery",
"yaml": "YAML",
"yml": "YAML",
"yang": "YANG"
};
var MANUAL_PRISM_LANGUAGES = {
// Manually generated list from https://prismjs.com/ - 297 languages
"css": "CSS",
"clike": "C-like",
"javascript": "JavaScript",
"js": "JavaScript",
"abap": "ABAP",
"abnf": "ABNF",
"actionscript": "ActionScript",
"ada": "Ada",
"agda": "Agda",
"al": "AL",
"antlr4": "ANTLR4",
"g4": "ANTLR4",
"apacheconf": "Apache Configuration",
"apex": "Apex",
"apl": "APL",
"applescript": "AppleScript",
"aql": "AQL",
"arduino": "Arduino",
"ino": "Arduino",
"arff": "ARFF",
"armasm": "ARM Assembly",
"arm-asm": "ARM Assembly",
"arturo": "Arturo",
"art": "Arturo",
"asciidoc": "AsciiDoc",
"adoc": "AsciiDoc",
"aspnet": "ASP.NET (C#)",
"asm6502": "6502 Assembly",
"asmatmel": "Atmel AVR Assembly",
"autohotkey": "AutoHotkey",
"autoit": "AutoIt",
"avisynth": "AviSynth",
"avs": "AviSynth",
"avro-idl": "Avro IDL",
"avdl": "Avro IDL",
"awk": "AWK",
"gawk": "GAWK",
"bash": "Bash",
"sh": "Shell",
"shell": "Shell",
"basic": "BASIC",
"batch": "Batch",
"bbcode": "BBcode",
"shortcode": "BBcode",
"bbj": "BBj",
"birb": "Birb",
"bison": "Bison",
"bnf": "BNF",
"rbnf": "BNF",
"bqn": "BQN",
"brainfuck": "Brainfuck",
"brightscript": "BrightScript",
"bro": "Bro",
"bsl": "BSL (1C)",
"oscript": "BSL (1C)",
"c": "C",
"csharp": "C#",
"cs": "C#",
"dotnet": "C#",
"cpp": "C++",
"cfscript": "CFScript",
"cfc": "CFScript",
"chaiscript": "ChaiScript",
"cil": "CIL",
"cilkc": "Cilk/C",
"cilk-c": "Cilk/C",
"cilkcpp": "Cilk/C++",
"cilk-cpp": "Cilk/C++",
"cilk": "Cilk/C++",
"clojure": "Clojure",
"cmake": "CMake",
"cobol": "COBOL",
"coffeescript": "CoffeeScript",
"coffee": "CoffeeScript",
"concurnas": "Concurnas",
"conc": "Concurnas",
"csp": "Content-Security-Policy",
"cooklang": "Cooklang",
"coq": "Coq",
"crystal": "Crystal",
"css-extras": "CSS Extras",
"csv": "CSV",
"cue": "CUE",
"cypher": "Cypher",
"d": "D",
"dart": "Dart",
"dataweave": "DataWeave",
"dax": "DAX",
"dhall": "Dhall",
"diff": "Diff",
"django": "Django/Jinja2",
"jinja2": "Django/Jinja2",
"dns-zone-file": "DNS zone file",
"dns-zone": "DNS zone file",
"docker": "Docker",
"dockerfile": "Docker",
"dot": "DOT (Graphviz)",
"gv": "DOT (Graphviz)",
"ebnf": "EBNF",
"editorconfig": "EditorConfig",
"eiffel": "Eiffel",
"ejs": "EJS",
"eta": "EJS",
"elixir": "Elixir",
"elm": "Elm",
"etlua": "Embedded Lua templating",
"erb": "ERB",
"erlang": "Erlang",
"excel-formula": "Excel Formula",
"xlsx": "Excel Formula",
"xls": "Excel Formula",
"fsharp": "F#",
"factor": "Factor",
"false": "False",
"firestore-security-rules": "Firestore security rules",
"flow": "Flow",
"fortran": "Fortran",
"ftl": "FreeMarker Template Language",
"gml": "GameMaker Language",
"gamemakerlanguage": "GameMaker Language",
"gap": "GAP (CAS)",
"gcode": "G-code",
"gdscript": "GDScript",
"gedcom": "GEDCOM",
"gettext": "gettext",
"po": "gettext",
"gherkin": "Gherkin",
"git": "Git",
"glsl": "GLSL",
"gn": "GN",
"gni": "GN",
"linker-script": "GNU Linker Script",
"ld": "GNU Linker Script",
"go": "Go",
"go-module": "Go module",
"go-mod": "Go module",
"gradle": "Gradle",
"graphql": "GraphQL",
"groovy": "Groovy",
"haml": "Haml",
"handlebars": "Handlebars",
"hbs": "Handlebars",
"mustache": "Handlebars",
"haskell": "Haskell",
"hs": "Haskell",
"haxe": "Haxe",
"hcl": "HCL",
"hlsl": "HLSL",
"hoon": "Hoon",
"http": "HTTP",
"hpkp": "HTTP Public-Key-Pins",
"hsts": "HTTP Strict-Transport-Security",
"ichigojam": "IchigoJam",
"icon": "Icon",
"icu-message-format": "ICU Message Format",
"idris": "Idris",
"idr": "Idris",
"inform7": "Inform 7",
"ini": "Ini",
"io": "Io",
"j": "J",
"java": "Java",
"javadoc": "JavaDoc",
"javadoclike": "JavaDoc-like",
"javastacktrace": "Java stack trace",
"jexl": "Jexl",
"jolie": "Jolie",
"jq": "JQ",
"jsdoc": "JSDoc",
"js-extras": "JS Extras",
"json": "JSON",
"webmanifest": "JSON",
"json5": "JSON5",
"jsonp": "JSONP",
"jsstacktrace": "JS stack trace",
"js-templates": "JS Templates",
"julia": "Julia",
"keepalived": "Keepalived Configure",
"keyman": "Keyman",
"kotlin": "Kotlin",
"kt": "Kotlin",
"kts": "Kotlin",
"kumir": "KuMir (\u041A\u0443\u041C\u0438\u0440)",
"kum": "KuMir (\u041A\u0443\u041C\u0438\u0440)",
"kusto": "Kusto",
"latex": "LaTeX",
"tex": "LaTeX",
"context": "LaTeX",
"latte": "Latte",
"less": "Less",
"lilypond": "LilyPond",
"ly": "LilyPond",
"liquid": "Liquid",
"lisp": "Lisp",
"emacs": "Lisp",
"elisp": "Lisp",
"emacs-lisp": "Lisp",
"livescript": "LiveScript",
"llvm": "LLVM IR",
"log": "Log file",
"lolcode": "LOLCODE",
"lua": "Lua",
"magma": "Magma (CAS)",
"makefile": "Makefile",
"markdown": "Markdown",
"md": "Markdown",
"markup-templating": "Markup templating",
"mata": "Mata",
"matlab": "MATLAB",
"maxscript": "MAXScript",
"mel": "MEL",
"mermaid": "Mermaid",
"metafont": "METAFONT",
"mizar": "Mizar",
"mongodb": "MongoDB",
"monkey": "Monkey",
"moonscript": "MoonScript",
"moon": "MoonScript",
"n1ql": "N1QL",
"n4js": "N4JS",
"n4jsd": "N4JS",
"nand2tetris-hdl": "Nand To Tetris HDL",
"naniscript": "Naninovel Script",
"nani": "Naninovel Script",
"nasm": "NASM",
"neon": "NEON",
"nevod": "Nevod",
"nginx": "nginx",
"nim": "Nim",
"nix": "Nix",
"nsis": "NSIS",
"objectivec": "Objective-C",
"objc": "Objective-C",
"ocaml": "OCaml",
"odin": "Odin",
"opencl": "OpenCL",
"openqasm": "OpenQasm",
"qasm": "OpenQasm",
"oz": "Oz",
"parigp": "PARI/GP",
"parser": "Parser",
"pascal": "Pascal",
"pascaligo": "Pascaligo",
"psl": "PATROL Scripting Language",
"pcaxis": "PC-Axis",
"px": "PC-Axis",
"peoplecode": "PeopleCode",
"pcode": "PeopleCode",
"perl": "Perl",
"php": "PHP",
"phpdoc": "PHPDoc",
"php-extras": "PHP Extras",
"plant-uml": "PlantUML",
"plantuml": "PlantUML",
"plsql": "PL/SQL",
"powerquery": "PowerQuery",
"pq": "PowerQuery",
"mscript": "PowerQuery",
"powershell": "PowerShell",
"processing": "Processing",
"prolog": "Prolog",
"promql": "PromQL",
"properties": ".properties",
"protobuf": "Protocol Buffers",
"pug": "Pug",
"puppet": "Puppet",
"pure": "Pure",
"purebasic": "PureBasic",
"pbfasm": "PureBasic",
"purescript": "PureScript",
"purs": "PureScript",
"python": "Python",
"py": "Python",
"qsharp": "Q#",
"qs": "Q#",
"q": "Q (kdb+ database)",
"qml": "QML",
"qore": "Qore",
"r": "R",
"racket": "Racket",
"rkt": "Racket",
"cshtml": "Razor C#",
"jsx": "React JSX",
"tsx": "React TSX",
"reason": "Reason",
"regex": "Regex",
"rego": "Rego",
"renpy": "Ren'py",
"rpy": "Ren'py",
"rescript": "ReScript",
"res": "ReScript",
"rest": "reST (reStructuredText)",
"rip": "Rip",
"roboconf": "Roboconf",
"robotframework": "Robot Framework",
"robot": "Robot Framework",
"ruby": "Ruby",
"rb": "Ruby",
"rust": "Rust",
"sas": "SAS",
"sass": "Sass (Sass)",
"scss": "Sass (SCSS)",
"scala": "Scala",
"scheme": "Scheme",
"shell-session": "Shell session",
"sh-session": "Shell session",
"shellsession": "Shell session",
"smali": "Smali",
"smalltalk": "Smalltalk",
"smarty": "Smarty",
"sml": "SML",
"smlnj": "SML",
"solidity": "Solidity (Ethereum)",
"sol": "Solidity (Ethereum)",
"solution-file": "Solution file",
"sln": "Solution file",
"soy": "Soy (Closure Template)",
"sparql": "SPARQL",
"rq": "SPARQL",
"splunk-spl": "Splunk SPL",
"sqf": "SQF",
"sql": "SQL",
"squirrel": "Squirrel",
"stan": "Stan",
"stata": "Stata Ado",
"iecst": "Structured Text (IEC 61131-3)",
"stylus": "Stylus",
"supercollider": "SuperCollider",
"sclang": "SuperCollider",
"swift": "Swift",
"systemd": "Systemd configuration file",
"t4-templating": "T4 templating",
"t4-cs": "T4 Text Templates (C#)",
"t4": "T4 Text Templates (C#)",
"t4-vb": "T4 Text Templates (VB)",
"tap": "TAP",
"tcl": "Tcl",
"tt2": "Template Toolkit 2",
"textile": "Textile",
"toml": "TOML",
"tremor": "Tremor",
"trickle": "Tremor",
"troy": "Tremor",
"turtle": "Turtle",
"trig": "Turtle",
"twig": "Twig",
"typescript": "TypeScript",
"ts": "TypeScript",
"typoscript": "TypoScript",
"tsconfig": "TSConfig",
"unrealscript": "UnrealScript",
"uscript": "UnrealScript",
"uc": "UnrealScript",
"uorazor": "UO Razor Script",
"uri": "URI",
"url": "URI",
"v": "V",
"vala": "Vala",
"vbnet": "VB.Net",
"velocity": "Velocity",
"verilog": "Verilog",
"vhdl": "VHDL",
"vim": "vim",
"visual-basic": "Visual Basic",
"vb": "Visual Basic",
"warpscript": "WarpScript",
"wasm": "WebAssembly",
"web-idl": "Web IDL",
"webidl": "Web IDL",
"wgsl": "WGSL",
"wiki": "Wiki markup",
"wolfram": "Wolfram language",
"mathematica": "Wolfram language",
"nb": "Wolfram language",
"wl": "Wolfram language",
"wren": "Wren",
"xeora": "Xeora",
"xeoracube": "Xeora",
"xml-doc": "XML doc (.net)",
"xojo": "Xojo (REALbasic)",
"xquery": "XQuery",
"yaml": "YAML",
"yml": "YAML",
"yang": "YANG",
"zig": "Zig"
};
var MANUAL_LANGUAGES = {
// Manually created list
"fish": "Fish",
"octave": "Octave",
"maxima": "Maxima",
"mysql": "SQL",
"postgresql": "SQL",
"rscript": "R",
"shellscript": "Shell",
"sqlite": "SQL",
"zsh": "Zsh"
};
var LANGUAGE_NAMES = { ...PRISM_LANGUAGES, ...MANUAL_PRISM_LANGUAGES, ...MANUAL_LANGUAGES };
var LANGUAGE_ICONS_DATA = {
// Icons from https://github.com/vscode-icons/vscode-icons/wiki/ListOfFiles and https://devicon.dev/
".gitignore": '<path d="M29.472,14.753,17.247,2.528a1.8,1.8,0,0,0-2.55,0L12.158,5.067l3.22,3.22a2.141,2.141,0,0,1,2.712,2.73l3.1,3.1a2.143,2.143,0,1,1-1.285,1.21l-2.895-2.895v7.617a2.141,2.141,0,1,1-1.764-.062V12.3a2.146,2.146,0,0,1-1.165-2.814L10.911,6.314,2.528,14.7a1.8,1.8,0,0,0,0,2.551L14.753,29.472a1.8,1.8,0,0,0,2.55,0L29.472,17.3a1.8,1.8,0,0,0,0-2.551" style="fill:#dd4c35"/><path d="M12.158,5.067l3.22,3.22a2.141,2.141,0,0,1,2.712,2.73l3.1,3.1a2.143,2.143,0,1,1-1.285,1.21l-2.895-2.895v7.617a2.141,2.141,0,1,1-1.764-.062V12.3a2.146,2.146,0,0,1-1.165-2.814L10.911,6.314" style="fill:#fff"/>',
".hgignore": '<path d="M28.042,23.172c4.989-8.3-1.054-21.751-12.1-20.384C5.955,4.022,5.794,14.53,14.593,17.026c7.614,2.162,1.573,6.992,1.749,10.208s6.62,4.382,11.7-4.063" style="fill:#1b1b1b"/><circle cx="9.784" cy="24.257" r="4.332" style="fill:#1b1b1b"/><circle cx="4.835" cy="15.099" r="2.835" style="fill:#1b1b1b"/><path d="M28.231,22.835c4.989-8.3-1.054-21.751-12.1-20.384C6.144,3.686,5.983,14.194,14.781,16.69c7.614,2.162,1.573,6.992,1.749,10.208s6.62,4.382,11.7-4.063" style="fill:#bfbfbf"/><circle cx="9.972" cy="23.921" r="4.332" style="fill:#bfbfbf"/><circle cx="5.023" cy="14.762" r="2.835" style="fill:#bfbfbf"/><path d="M17.811,28.168a.669.669,0,0,1,.635-.994,7,7,0,0,0,3.7-.746c3.247-1.841,8.244-10.7,5.731-16.285A12.77,12.77,0,0,0,25.049,5.7c-.236-.249-.1-.236.059-.152a10.08,10.08,0,0,1,2.857,3.676,14.578,14.578,0,0,1,1.1,10.279c-.494,1.817-2.2,5.928-4.691,7.706s-5.424,2.8-6.563.955M15.548,16.673c-1.7-.5-3.894-1.208-5.163-2.867A8.088,8.088,0,0,1,8.854,10.49c-.043-.27-.08-.5,0-.558a21.882,21.882,0,0,0,1.688,2.723,6.487,6.487,0,0,0,3.526,2.256,12.383,12.383,0,0,1,3.867,1.37c.739.629.8,1.989.552,2.142s-.759-1.1-2.938-1.749m-8.155,10.4c3.369,3.121,8.439-1.166,6.207-4.954-.251-.425-.576-.749-.469-.423.714,2.178.054,3.9-1.176,4.788a4.063,4.063,0,0,1-4.192.328c-.39-.2-.551.092-.37.261m-3.93-10.16c.018.2.292.458.722.576a2.969,2.969,0,0,0,2.55-.413,2.759,2.759,0,0,0,.81-3.452c-.172-.308-.4-.533-.218-.041A2.68,2.68,0,0,1,6.148,16.53a2.439,2.439,0,0,1-2.1.164c-.391-.119-.6.016-.58.223"/><path d="M19.056,28.407c-.033.389.414.466,1.016.376a6.755,6.755,0,0,0,2.313-.648,9.54,9.54,0,0,0,3.314-2.63c2.662-3.473,3.6-7.582,3.46-8.173A16.172,16.172,0,0,1,27,22.692c-1.888,2.968-3.256,4.548-6.413,5.314-.879.213-1.485-.112-1.529.4m-7-13.5A7.967,7.967,0,0,0,14.6,16.089a12.2,12.2,0,0,1,2.96,1.31c.378.253.618.819.642.317s-.285-.934-.976-1.164a15.274,15.274,0,0,0-2.009-.674c-.485-.1-1.273-.285-1.949-.493-.371-.114-.748-.313-1.214-.483M10.037,27.718c.429-.09,2.924-.736,3.51-2.788.183-.64.215-.511.164-.165a3.8,3.8,0,0,1-3.358,3.123c-.289.03-.668-.1-.315-.17M5.046,17.2a7.991,7.991,0,0,0,1.195-.336,2.383,2.383,0,0,0,1.232-1.741c.064-.505.083-.378.109-.1a2.627,2.627,0,0,1-2.147,2.324c-.2.028-.56.011-.389-.143" style="fill:#fff"/><path d="M27.54,17.446c2.124-6.123-2.321-15.37-11.315-14.258-8.126,1-8.257,9.557-1.1,11.59,8.112,1.228,3.227,7.347,2.535,10.433-.621,2.766,6.555,3.221,9.876-7.765M7.219,26.2a2.028,2.028,0,0,1,1.332.442,3.525,3.525,0,0,0,3.755-.983A4.154,4.154,0,0,0,12.869,22c-.806-2.319-4.229-2.278-5.758-.353-1.654,2.15-.4,4.539.108,4.548M2.676,15.451a1.166,1.166,0,0,0,.908.863c.731.1.88.434,1.743.263A2.464,2.464,0,0,0,7.1,14.916a1.771,1.771,0,0,0-.824-2.14,2.689,2.689,0,0,0-3.047.363,2.263,2.263,0,0,0-.558,2.312" style="fill:#999"/><path d="M21.981,22.228c-2.2-.272-5.36,4.69-2.378,4.109h0a5.645,5.645,0,0,0,3.683-1.932,23.136,23.136,0,0,0,4.055-7.2c.5-1.861.251-4.745-.269-2.036-.533,2.781-2.893,7.336-5.091,7.064M10.523,26.362A2.778,2.778,0,0,0,12.5,22.99c-.165-1.276-.861,1.584-2.15,2.012-1.953.648-1.733,1.861.176,1.361m-4.978-10.2c.663-.173,1.54-1.077,1.1-1.767-.537-.85-2.033-.122-2.084.824s.277,1.127.979.943" style="fill:#f3f3f3"/>',
".npmignore": '<path d="M2,10.555H30v9.335H16v1.556H9.778V19.889H2Zm1.556,7.779H6.667V13.666H8.222v4.667H9.778V12.111H3.556Zm7.778-6.223v7.779h3.111V18.334h3.111V12.111Zm3.111,1.556H16v3.112H14.444Zm4.667-1.556v6.223h3.111V13.666h1.556v4.667h1.556V13.666h1.556v4.667h1.556V12.111Z" style="fill:#cb3837"/>',
".properties": '<path d="M23.265,24.381l.9-.894c4.164.136,4.228-.01,4.411-.438l1.144-2.785L29.805,20l-.093-.231c-.049-.122-.2-.486-2.8-2.965V15.5c3-2.89,2.936-3.038,2.765-3.461L28.538,9.225c-.171-.422-.236-.587-4.37-.474l-.9-.93a20.166,20.166,0,0,0-.141-4.106l-.116-.263-2.974-1.3c-.438-.2-.592-.272-3.4,2.786l-1.262-.019c-2.891-3.086-3.028-3.03-3.461-2.855L9.149,3.182c-.433.175-.586.237-.418,4.437l-.893.89c-4.162-.136-4.226.012-4.407.438L2.285,11.733,2.195,12l.094.232c.049.12.194.48,2.8,2.962l0,1.3c-3,2.89-2.935,3.038-2.763,3.462l1.138,2.817c.174.431.236.584,4.369.476l.9.935a20.243,20.243,0,0,0,.137,4.1l.116.265,2.993,1.308c.435.182.586.247,3.386-2.8l1.262.016c2.895,3.09,3.043,3.03,3.466,2.859l2.759-1.115C23.288,28.644,23.44,28.583,23.265,24.381ZM11.407,17.857a4.957,4.957,0,1,1,6.488,2.824A5.014,5.014,0,0,1,11.407,17.857Z" style="fill:#99b8c4"/>',
"6502 Assembly": '<defs><linearGradient id="a" x1="836.63" y1="36.205" x2="843.802" y2="14.48" gradientTransform="translate(525.922 30.249) rotate(180) scale(0.607 0.607)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#fff" stop-opacity="0.275"/></linearGradient></defs><title>file_type_assembly</title><path d="M16,2c-1.246,3.056-2,5.057-3.391,8.022A21.884,21.884,0,0,0,16.2,13.156a14.858,14.858,0,0,1-4-2.283C10.43,14.579,7.646,19.855,2,30c5.186-2.994,9.012-4.648,12.691-4.966V24.2h-.834v-.837h.834V24.2h1.675V22.521H14.691v-.834h-.834V20.013h.834v-.834h1.675v.834H17.2v.837h-.837v-.837H14.691v1.675h1.675v.834H17.2V24.2h-.837v.783c3.98.1,8.006,1.772,13.634,5.021-.863-1.589-1.636-3.021-2.372-4.385a25.526,25.526,0,0,0-4.833-3.333A14.436,14.436,0,0,1,26.65,23.8C19.17,9.872,18.565,8.02,16,2ZM10.511,19.179h1.671v.834h.837v5.021h-.837V22.521H10.511v2.512H9.673V20.013h.837Zm0,.834v1.675h1.671V20.013Zm7.526-.834h.837v.834h.837v.837h.834v-.837h.837v-.834h.837v5.855h-.837V20.85h-.837v.837h-.834V20.85h-.837v4.184h-.837Z" style="fill:#0000bf"/><path d="M23.881,18.642c-6.069-8.237-7.476-14.876-7.832-16.461A175.217,175.217,0,0,0,23.881,18.642Z" style="fill:#fff;fill-opacity:0.165680468082428"/><path d="M16.051,2.12,15.6,3.227c-.159.391-.311.765-.461,1.131s-.3.724-.448,1.077-.3.7-.448,1.053-.3.706-.465,1.066-.329.729-.506,1.111-.362.778-.561,1.193c-.028.057-.061.123-.089.181A21.872,21.872,0,0,0,16.2,13.156a14.879,14.879,0,0,1-3.989-2.276l-.14.287c-.065.133-.144.283-.212.42l-.106.219c-.878,1.793-2.006,3.984-3.524,6.822,3.551-2,7.381-4.887,14.338-2.4-.349-.661-.67-1.28-.971-1.863s-.581-1.128-.841-1.644-.5-1-.725-1.463-.433-.9-.629-1.313-.38-.818-.554-1.2-.339-.754-.5-1.118S18.047,6.9,17.9,6.546s-.291-.709-.434-1.066c-.036-.091-.073-.186-.109-.277C16.949,4.247,16.536,3.258,16.051,2.12Z" style="fill:url(#a)"/>',
"ActionScript": '<path d="M2,15.281c1.918,0,2.11-1.055,2.11-1.918a17.119,17.119,0,0,0-.192-2.205,18.723,18.723,0,0,1-.192-2.205c0-2.4,1.63-3.452,3.836-3.452h.575V6.938H7.658c-1.534,0-2.11.767-2.11,2.205a14.412,14.412,0,0,0,.192,1.918,14.306,14.306,0,0,1,.192,2.014c0,1.726-.671,2.493-1.918,2.877v.1c1.151.288,1.918,1.151,1.918,2.877a14.306,14.306,0,0,1-.192,2.014,13,13,0,0,0-.192,1.918c0,1.438.575,2.3,2.11,2.3h.479V26.6H7.562c-2.205,0-3.836-.959-3.836-3.644a18.723,18.723,0,0,1,.192-2.205,15.68,15.68,0,0,0,.192-2.11c0-.863-.288-1.918-2.11-1.918Z" style="fill:#c41718"/><path d="M9.479,18.062,8.233,21.8H6.6L10.63,9.911h1.822L16.479,21.8H14.945L13.7,18.062Zm3.932-1.151L12.26,13.459a9.364,9.364,0,0,1-.575-2.205h0c-.192.671-.384,1.438-.575,2.11L9.959,16.815h3.452Z" style="fill:#c41718"/><path d="M17.918,19.979a5.941,5.941,0,0,0,2.781.767c1.534,0,2.493-.863,2.493-2.014s-.671-1.726-2.205-2.4c-1.918-.671-3.164-1.726-3.164-3.356,0-1.822,1.534-3.26,3.836-3.26a5.135,5.135,0,0,1,2.589.575l-.384,1.247a5.519,5.519,0,0,0-2.3-.479c-1.63,0-2.205.959-2.205,1.822,0,1.151.767,1.63,2.4,2.3,2.014.767,3.068,1.726,3.068,3.452,0,1.822-1.342,3.452-4.123,3.452a5.807,5.807,0,0,1-3.068-.767Z" style="fill:#c41718"/><path d="M30,16.623c-1.918,0-2.11,1.151-2.11,1.918a15.68,15.68,0,0,0,.192,2.11,15.738,15.738,0,0,1,.192,2.205c0,2.685-1.63,3.644-3.836,3.644h-.575V25.062h.479c1.438,0,2.11-.863,2.11-2.3a13,13,0,0,0-.192-1.918,14.306,14.306,0,0,1-.192-2.014c0-1.726.767-2.589,1.918-2.877v-.1c-1.151-.288-1.918-1.151-1.918-2.877a14.306,14.306,0,0,1,.192-2.014,13,13,0,0,0,.192-1.918c0-1.438-.575-2.205-2.11-2.3h-.479V5.4h.575c2.205,0,3.836,1.055,3.836,3.452a17.119,17.119,0,0,1-.192,2.205,17.119,17.119,0,0,0-.192,2.205c0,.959.288,1.918,2.11,1.918Z" style="fill:#c41718"/>',
"Ada": '<path d="M24.554,20.075c.209.27,1.356.961,1.37,1.246a6.921,6.921,0,0,0-1.4-.324c-.468-.142-.951-.293-1.412-.48a9.2,9.2,0,0,1-2.375-1.3A3.146,3.146,0,0,1,19.3,16.75a1.722,1.722,0,0,1,1.767-1.822,3.584,3.584,0,0,1,1.593.321c.146.066,1.31.606,1.256.809a5.5,5.5,0,0,0-1.41-.112c-.649.244-.4.828-.168,1.311a7.877,7.877,0,0,0,1.078,1.554C23.58,19.005,24.3,20.082,24.554,20.075Z" style="fill:#0f23c3"/><path d="M24.141,16.276c.128-.59.819-1.384,1.344-.773a4.2,4.2,0,0,1,.578,1.918c.12.656.2,1.327.261,1.982.038.379.34,1.794.123,2.075a23.24,23.24,0,0,1-2.922-2.838,3.763,3.763,0,0,1-.925-1.7C22.5,15.867,23.479,16.21,24.141,16.276Z" style="fill:#1a1978"/><path d="M26.3,17.781c.141-.732-.406-2.592-1.067-2.949a.06.06,0,0,0,.044-.007c-.156-.444-1.359,1.116-1.228,1.174-.316-.138.774-1.984.988-2.16.7-.578,1.372-.086,1.845.543a6.036,6.036,0,0,1,.733,4.434,4.5,4.5,0,0,1-.421,1.312c-.1.22-.45,1.1-.682,1.174A14.754,14.754,0,0,0,26.3,17.781Z" style="fill:#0f23c3"/><path d="M3.687,8.4c.179-.188-.041-1.527.324-1.548.262-.015.553,1.741.627,1.968a9.2,9.2,0,0,0,1.127,2.329,7.529,7.529,0,0,0,4.016,2.978,4.55,4.55,0,0,0,2.366.2c.931-.208,1.82-.577,2.757-.765,1.35-.27,3.342-.352,4.438.647.7.641.376.76.043,1.421a2.445,2.445,0,0,0,.178,2.562c.235.342,1.033.827.675,1.094-.567.424-1.277-.452-1.636-.776-1.4-1.264-2.711-1.313-4.492-1.074a8.987,8.987,0,0,1-4.883-.708A9.469,9.469,0,0,1,3.687,8.4Z" style="fill:#d2d2d2"/><path d="M19.941,30a3.615,3.615,0,0,1-2.325-.817c.469-.092,1.021.025,1.508-.044a9.7,9.7,0,0,0,1.754-.43A10.537,10.537,0,0,0,23.9,27.155a6.55,6.55,0,0,0,2.757-5.214c.149-.088.316,1.034.319,1.091a5.789,5.789,0,0,1-.19,1.727,6.867,6.867,0,0,1-1.423,2.774A7.286,7.286,0,0,1,19.941,30Z" style="fill:#d2d2d2"/><path d="M18.962,19.109a5.76,5.76,0,0,1-2.05.859,13.38,13.38,0,0,1-2.224.549,8.861,8.861,0,0,1-4.435-.51,9.939,9.939,0,0,1-3.849-2.4C6.052,17.24,4.3,15.19,4.856,14.557c.248-.282.875.846,1,.992a5,5,0,0,0,1.357,1.11,10.917,10.917,0,0,0,4.035,1.456,6.693,6.693,0,0,0,2.34-.094,12.743,12.743,0,0,1,1.694-.485,4,4,0,0,1,2.113.457C17.739,18.163,18.918,18.736,18.962,19.109Z" style="fill:#d2d2d2"/><path d="M28.313,15.078a19.277,19.277,0,0,1-.453,3.774c-.176-.242.016-1.47,0-1.792a6.032,6.032,0,0,0-.384-2.087A4.925,4.925,0,0,0,26.1,13.312a14.728,14.728,0,0,1-1.27-1.536c-1.837-2.382-3.245-5.211-2.9-8.3.034-.308.069-1.448.411-1.445.152,0,.266,1.561.29,1.718a12.527,12.527,0,0,0,1.224,4.116c.67,1.222,1.947,2.023,2.825,3.1A6.579,6.579,0,0,1,28.313,15.078Z" style="fill:#d2d2d2"/><path d="M15.7,26.935a10.845,10.845,0,0,0,6.436-.687,6.941,6.941,0,0,0,4.278-4.418c.319.2-.048,1.529-.128,1.781a5.726,5.726,0,0,1-1.01,1.813,8.933,8.933,0,0,1-3.257,2.514C20.316,28.71,16.357,29.59,15.7,26.935Z" style="fill:#d2d2d2"/><path d="M19.151,19.376c.367,2.107-2.957,3.124-4.478,3.213-1.859.11-4.929-.292-6.06-2.031-.673-1.035.781-.09,1.188.058a8.663,8.663,0,0,0,3.06.5,11.6,11.6,0,0,0,3.305-.5,13.725,13.725,0,0,0,1.533-.576C18,19.908,18.823,19.349,19.151,19.376Z" style="fill:#d2d2d2"/><path d="M24.142,23.46c.4-.945-1.883-1.578-2.445-1.858a4.857,4.857,0,0,1-1.315-.867c-.181-.181-.872-.92-.807-1.219a4.912,4.912,0,0,1,1.087-.175,5.93,5.93,0,0,1,.855.588,10.323,10.323,0,0,0,.964.5A15.615,15.615,0,0,0,24.6,21.2c.308.09,1.549.208,1.727.428C26.287,21.924,24.357,23.649,24.142,23.46Z" style="fill:#d2d2d2"/><path d="M26.1,22.172c.265.43-1.08,1.831-1.363,2.105a9.34,9.34,0,0,1-2.566,1.728,7.748,7.748,0,0,1-2.56.753c-.679.058-1.966-.124-2.141-.979a6.951,6.951,0,0,1,1.177-.086c.462-.059.921-.149,1.376-.246a13.065,13.065,0,0,0,2.184-.645,11.506,11.506,0,0,0,2.084-1.11,10.872,10.872,0,0,0,1.078-.822C25.474,22.781,25.986,22.168,26.1,22.172Z" style="fill:#d2d2d2"/><path d="M18.758,11.965c-.1-1.308,2.612-1.3,3.271-1.092a5.976,5.976,0,0,1,2.982,2.475c-1.082.8-2.449.094-3.3-.654a4.324,4.324,0,0,0-1.481-1.029C19.421,11.4,19.412,11.759,18.758,11.965Z" style="fill:#d2d2d2"/><path d="M25.783,13.341c-.444-.029-.316.071-.647-.212-.358-.307-.614-.795-.945-1.141-.534-.558-1.242-.895-1.723-1.485a7.269,7.269,0,0,1-1.624-4.848c.018-1.489.407.187.551.675a12.276,12.276,0,0,0,1.126,2.708,46.055,46.055,0,0,0,3.4,4.321C25.882,13.361,25.824,13.338,25.783,13.341Z" style="fill:#d2d2d2"/><path d="M20.068,14.756c.033-.625-.911-.792-1.211-1.42-.164-.343-.211-.569.029-.7.082-.045.383.012.5-.02.271-.076.335-.273.581-.4A1.193,1.193,0,0,1,21.6,13.237,1.821,1.821,0,0,1,20.068,14.756Z" style="fill:#d2d2d2"/><path d="M20.5,14.745a1.931,1.931,0,0,0,1.323-1.7c.524.139.928.658,1.521.771a2.584,2.584,0,0,0,1.029-.017c.207-.045.54-.274.721-.259-.033.163-.464.546-.565.717a4.242,4.242,0,0,0-.388.9c-.229.741-.061.739-.709.311a4.284,4.284,0,0,0-1.957-.72C21.209,14.722,20.594,14.767,20.5,14.745Z" style="fill:#d2d2d2"/><path d="M19.905,20.734a2.008,2.008,0,0,1-1.4,1.712c-.205.091-2.018.733-2.032.348-.007-.2,1.624-.954,1.809-1.11a3.355,3.355,0,0,0,.867-1.071c.055-.112.232-.925.271-.943C19.644,19.564,19.908,20.6,19.905,20.734Z" style="fill:#d2d2d2"/><path d="M11.373,12.532a10.625,10.625,0,0,1,3.71-.914,10.282,10.282,0,0,1,1.865.024c.366.039,1.469.054,1.74.343a.255.255,0,0,1-.273.173c-.037.077.251.371.3.425-.034.034-1.445-.4-1.572-.424a10.632,10.632,0,0,0-2.282-.134,16,16,0,0,0-1.841.194A6.224,6.224,0,0,1,11.373,12.532Z" style="fill:#d2d2d2"/><path d="M22.512,10.731a1.888,1.888,0,0,1-1.517-.6c-.247-.349-.737-1.692-.385-2.021.209-.2.384.662.484.846A10.822,10.822,0,0,0,22.512,10.731Z" style="fill:#d2d2d2"/><path d="M27.788,19.2a19.212,19.212,0,0,1-.749,3.313c-.173-.077-.275-.778-.562-.95a4.07,4.07,0,0,0,.76-1.154C27.389,20.107,27.54,19.363,27.788,19.2Z" style="fill:#d2d2d2"/><path d="M19.981,11.843c-.132.268-.932,1.1-1.118.481C18.756,11.968,19.739,11.483,19.981,11.843Zm-.747.45c.228.006.012-.248.012-.266C19.245,11.984,18.878,12.293,19.234,12.293Z" style="fill:#d2d2d2"/>',
"AL": '<path d="M11.616,7.986A1.559,1.559,0,0,0,10.16,7H10.1a1.558,1.558,0,0,0-1.456.986L2,25H5.806l1.015-2.834h6.621L14.457,25h3.8ZM7.944,18.956l2.188-6.111,2.188,6.116Z" style="fill:#2ea98e"/><path d="M23.829,21.671V7.129H20.3V22.747A2.346,2.346,0,0,0,22.57,25H30V21.672Z" style="fill:#2ea98e"/>',
"ANTLR4": '<path d="M14.177,7.278a2.08,2.08,0,0,1,3.041-.8A3.571,3.571,0,0,1,18.2,8.022c1.356,3.122,2.9,6.165,4.119,9.345.645,1.5,1.429,2.938,1.994,4.468a1.455,1.455,0,0,1-2.258,1.376c-2.8-1.572-5.628-3.094-8.385-4.731,2.009.008,4.018-.008,6.025.013a19.707,19.707,0,0,0-1.288-2.918c-.781-1.858-1.6-3.7-2.358-5.565a9.783,9.783,0,0,0-1.032,2.125c-1.3,3.182-2.87,6.241-4.136,9.435-.281.59-.424,1.344-1.035,1.69a1.447,1.447,0,0,1-2.094-.738c-.241-.61.151-1.2.382-1.743.779-1.725,1.645-3.413,2.283-5.2C11.65,12.8,12.916,10.041,14.177,7.278Z" style="fill:#fefefe"/><path d="M13.817,2.2A13.923,13.923,0,0,1,29.526,12.549a13.733,13.733,0,0,1-2.082,11.519A14.074,14.074,0,0,1,7.738,27.293a13.852,13.852,0,0,1-5.615-9.483A14.152,14.152,0,0,1,3.451,9.85,13.961,13.961,0,0,1,13.817,2.2m.359,5.08c-1.261,2.762-2.526,5.525-3.762,8.3-.638,1.786-1.5,3.473-2.283,5.2-.231.542-.623,1.133-.382,1.743a1.447,1.447,0,0,0,2.094.738c.61-.347.753-1.1,1.035-1.69,1.266-3.194,2.833-6.253,4.136-9.435a9.783,9.783,0,0,1,1.032-2.125c.756,1.868,1.577,3.707,2.358,5.565a19.707,19.707,0,0,1,1.288,2.918c-2.007-.02-4.016-.005-6.025-.013,2.757,1.637,5.588,3.159,8.385,4.731a1.455,1.455,0,0,0,2.258-1.376c-.565-1.529-1.349-2.971-1.994-4.468-1.22-3.179-2.762-6.223-4.119-9.345a3.571,3.571,0,0,0-.982-1.544A2.08,2.08,0,0,0,14.177,7.278Z" style="fill:#e44a32"/>',
"Apache Configuration": '<defs><linearGradient id="a" x1="-5602.682" y1="768.541" x2="-5598.727" y2="763.917" gradientTransform="matrix(0.423, -0.906, -0.906, -0.423, 3082.853, -4748.551)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f69923"/><stop offset="0.312" stop-color="#f79a23"/><stop offset="0.838" stop-color="#e97826"/></linearGradient><linearGradient id="b" x1="-5631.952" y1="769.052" x2="-5603.737" y2="769.052" gradientTransform="matrix(0.423, -0.906, -0.906, -0.423, 3082.853, -4748.551)" gradientUnits="userSpaceOnUse"><stop offset="0.323" stop-color="#9e2064"/><stop offset="0.63" stop-color="#c92037"/><stop offset="0.751" stop-color="#cd2335"/><stop offset="1" stop-color="#e97826"/></linearGradient><linearGradient id="c" x1="-5628.546" y1="766.221" x2="-5611.733" y2="766.221" gradientTransform="matrix(0.423, -0.906, -0.906, -0.423, 3082.853, -4748.551)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#282662"/><stop offset="0.095" stop-color="#662e8d"/><stop offset="0.788" stop-color="#9f2064"/><stop offset="0.949" stop-color="#cd2032"/></linearGradient><linearGradient id="d" x1="-5630.367" y1="769.316" x2="-5602.152" y2="769.316" xlink:href="#b"/><linearGradient id="e" x1="-5628.31" y1="768.933" x2="-5613.482" y2="768.933" xlink:href="#c"/><linearGradient id="f" x1="-5630.367" y1="766.394" x2="-5602.152" y2="766.394" xlink:href="#b"/><linearGradient id="g" x1="-5632.118" y1="766.539" x2="-5603.902" y2="766.539" xlink:href="#b"/><linearGradient id="h" x1="-5630.367" y1="765.526" x2="-5602.152" y2="765.526" xlink:href="#b"/><linearGradient id="i" x1="-5630.367" y1="765.625" x2="-5602.152" y2="765.625" xlink:href="#b"/><linearGradient id="j" x1="-5614.516" y1="765.645" x2="-5608.28" y2="765.645" xlink:href="#b"/></defs><title>file_type_apache</title><path d="M19.993,2.133a10.267,10.267,0,0,0-2.04,2.056l.8,1.51a19.733,19.733,0,0,1,1.708-2.144c.044-.049.068-.072.068-.072l-.068.072a17.865,17.865,0,0,0-1.6,2.174,30.1,30.1,0,0,0,3.111-.385,3.288,3.288,0,0,0-.3-2.5S20.9,1.6,19.993,2.133Z" style="fill:url(#a)"/><path d="M18.638,10.749l.018,0-.115.013-.021.009Z" style="fill:none"/><path d="M17.821,13.455c-.066.015-.132.026-.2.036C17.689,13.481,17.756,13.469,17.821,13.455Z" style="fill:none"/><path d="M12.27,19.524c.009-.023.017-.045.025-.068q.264-.7.523-1.357.291-.741.575-1.436.3-.733.59-1.418.305-.718.6-1.384.24-.542.474-1.049.078-.169.155-.335.153-.329.3-.645.138-.291.274-.57c.03-.062.06-.123.09-.185l.015-.03-.1.011-.078-.154c-.007.015-.015.03-.023.045q-.211.418-.417.845-.119.246-.238.495-.328.689-.645,1.389T13.766,15.1q-.3.7-.594,1.4t-.567,1.387q-.289.72-.562,1.426-.062.159-.123.318-.219.569-.426,1.124l.123.243.11-.012.012-.033Q12.008,20.216,12.27,19.524Z" style="fill:none"/><path d="M17.57,13.5Z" style="fill:none"/><path d="M17.305,14.818l-.315.055h0l.161-.025C17.2,14.839,17.253,14.829,17.305,14.818Z" style="fill:#be202e"/><path d="M17.305,14.818l-.315.055h0l.161-.025C17.2,14.839,17.253,14.829,17.305,14.818Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M17.573,13.5h0l.05-.007c.068-.01.135-.022.2-.036l-.248.042Z" style="fill:#be202e"/><path d="M17.573,13.5h0l.05-.007c.068-.01.135-.022.2-.036l-.248.042Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M16.394,9.6q.365-.682.739-1.332.388-.674.784-1.305l.046-.075q.392-.62.79-1.191l-.8-1.51-.182.225c-.231.288-.47.6-.716.925-.277.37-.562.764-.851,1.179-.267.383-.538.784-.809,1.2-.231.353-.462.717-.692,1.09l-.026.042L15.718,10.9Q16.052,10.244,16.394,9.6Z" style="fill:url(#b)"/><path d="M11.651,21.192q-.207.568-.415,1.159l-.006.017-.059.167c-.093.266-.175.5-.361,1.049a2.107,2.107,0,0,1,.786.926,1.68,1.68,0,0,0-.544-1.154,3.621,3.621,0,0,0,3.489-1.42,2.791,2.791,0,0,0,.165-.313,1.451,1.451,0,0,1-1.4.513l0,0,0,0a4.059,4.059,0,0,0,2.046-1.672c.111-.178.218-.372.328-.587a3.3,3.3,0,0,1-3.109,1.01l-.842.092C11.7,21.05,11.677,21.121,11.651,21.192Z" style="fill:url(#c)"/><path d="M12.044,19.306q.273-.706.562-1.426.276-.69.567-1.387t.594-1.4q.308-.711.629-1.419t.645-1.389q.118-.248.238-.495.207-.426.417-.845c.007-.015.015-.03.023-.045L14.677,8.847l-.051.083c-.242.4-.484.8-.721,1.216s-.475.844-.7,1.276q-.291.547-.568,1.1l-.11.225c-.227.467-.432.918-.617,1.352q-.315.737-.556,1.406c-.107.293-.2.576-.292.847-.073.232-.142.464-.208.7q-.234.818-.4,1.631L11.5,20.748q.208-.554.426-1.124Z" style="fill:url(#d)"/><path d="M10.435,18.755a16.07,16.07,0,0,0-.272,1.974c0,.023,0,.046-.005.069a4.15,4.15,0,0,0-1.2-1.029,5.825,5.825,0,0,1,1.172,2.693,2.642,2.642,0,0,1-1.325-.226,2.662,2.662,0,0,0,1.13.686,3.247,3.247,0,0,0-1.571.783,3.359,3.359,0,0,1,1.861-.342C9.51,25.389,8.793,27.626,8.076,30a.625.625,0,0,0,.425-.413c.128-.43.976-3.251,2.306-6.959l.115-.318.032-.089q.211-.583.437-1.19l.1-.277,0-.005L10.45,18.684C10.445,18.707,10.439,18.731,10.435,18.755Z" style="fill:url(#e)"/><path d="M15.88,11.078l-.09.185q-.135.279-.274.57-.15.315-.3.645c-.052.111-.1.222-.155.335q-.234.508-.474,1.049-.3.666-.6,1.384-.291.685-.59,1.418-.284.7-.575,1.436-.259.661-.523,1.357c-.009.023-.017.045-.025.068q-.262.693-.529,1.422l-.012.033.842-.092-.05-.009a6,6,0,0,0,3.21-1.807,7.984,7.984,0,0,0,1.1-1.524,13.139,13.139,0,0,0,.706-1.467c.195-.472.382-.982.562-1.536a3.053,3.053,0,0,1-.788.274c-.051.011-.1.021-.156.03s-.107.018-.161.025h0a3.668,3.668,0,0,0,1.962-1.913,3.344,3.344,0,0,1-1.13.495c-.066.015-.132.026-.2.036l-.05.007h0a3.821,3.821,0,0,0,.839-.469c.051-.038.1-.078.148-.12.073-.063.142-.129.208-.2.042-.044.083-.09.123-.138a3.27,3.27,0,0,0,.263-.362c.025-.04.05-.08.074-.122.031-.06.061-.119.09-.178.131-.264.236-.5.319-.706.042-.1.078-.2.109-.288.013-.035.025-.07.036-.1.033-.1.06-.187.081-.265a2.605,2.605,0,0,0,.062-.275h0a1.01,1.01,0,0,1-.109.075,3.965,3.965,0,0,1-1.162.4l.773-.085-.773.085-.018,0-.119.019.021-.009-2.645.29Z" style="fill:url(#f)"/><path d="M18.858,5.73c-.235.361-.492.771-.768,1.236l-.044.074q-.358.6-.759,1.327-.346.626-.719,1.347-.326.629-.672,1.336l2.645-.29A3.216,3.216,0,0,0,19.99,9.62c.089-.128.178-.262.267-.4.272-.424.538-.891.776-1.355a14.074,14.074,0,0,0,.588-1.294,6.8,6.8,0,0,0,.233-.7c.048-.184.086-.358.115-.524A30.152,30.152,0,0,1,18.858,5.73Z" style="fill:url(#g)"/><path d="M17.149,14.848c-.053.009-.107.018-.161.025h0C17.042,14.866,17.1,14.857,17.149,14.848Z" style="fill:#be202e"/><path d="M17.149,14.848c-.053.009-.107.018-.161.025h0C17.042,14.866,17.1,14.857,17.149,14.848Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M17.149,14.848c-.053.009-.107.018-.161.025h0C17.042,14.866,17.1,14.857,17.149,14.848Z" style="fill:url(#h)"/><path d="M17.57,13.5l.05-.007-.05.007Z" style="fill:#be202e"/><path d="M17.57,13.5l.05-.007-.05.007Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M17.57,13.5l.05-.007-.05.007Z" style="fill:url(#i)"/><path d="M17.572,13.5h0Z" style="fill:#be202e"/><path d="M17.572,13.5h0Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M17.572,13.5h0Z" style="fill:url(#j)"/>',
"Apex": '<path d="M13.652,8.338A4.906,4.906,0,0,1,17.2,6.814a4.957,4.957,0,0,1,4.32,2.56,5.972,5.972,0,0,1,2.442-.519,6.089,6.089,0,1,1-1.189,12.06,4.412,4.412,0,0,1-5.782,1.816A5.034,5.034,0,0,1,7.634,22.5a4.646,4.646,0,0,1-.96.1,4.732,4.732,0,0,1-2.337-8.812,5.438,5.438,0,0,1,9.315-5.453" style="fill:#0f9bd7"/><path d="M25.376,30.966h-.561a4.658,4.658,0,0,1-1.284-.137,1.9,1.9,0,0,1-.818-.482,1.726,1.726,0,0,1-.455-.843,6.77,6.77,0,0,1-.106-1.413,5.889,5.889,0,0,0-.084-1.33,1,1,0,0,0-.3-.544,1.223,1.223,0,0,0-.66-.179l-.236-.014V24.145l.236-.014a1.482,1.482,0,0,0,.549-.1.706.706,0,0,0,.273-.264,1.394,1.394,0,0,0,.181-.529,6.683,6.683,0,0,0,.044-.939,8.132,8.132,0,0,1,.112-1.643,1.7,1.7,0,0,1,.448-.841,2.144,2.144,0,0,1,.906-.492,4.514,4.514,0,0,1,1.2-.116h.561v1.9h-.25a2.589,2.589,0,0,0-.743.056.284.284,0,0,0-.148.117.839.839,0,0,0-.054.386q0,.372-.053,1.413a3.74,3.74,0,0,1-.166,1.009,1.945,1.945,0,0,1-.693,1,2.01,2.01,0,0,1,.7,1.044,4.627,4.627,0,0,1,.163,1.079c.027.657.041,1.074.041,1.256a.871.871,0,0,0,.057.408A.343.343,0,0,0,24.4,29a2.382,2.382,0,0,0,.728.06h.25Z" style="fill:#fff"/><path d="M21.118,25.788V24.382a1.752,1.752,0,0,0,.645-.129.936.936,0,0,0,.375-.354,1.621,1.621,0,0,0,.217-.624A6.88,6.88,0,0,0,22.4,22.3a8,8,0,0,1,.105-1.585,1.456,1.456,0,0,1,.381-.721,1.9,1.9,0,0,1,.8-.431,4.336,4.336,0,0,1,1.125-.105h.311v1.4a2.876,2.876,0,0,0-.835.073.53.53,0,0,0-.272.223,1.079,1.079,0,0,0-.088.513q0,.369-.053,1.4a3.531,3.531,0,0,1-.152.94,1.918,1.918,0,0,1-.313.595,2.47,2.47,0,0,1-.583.486,2.045,2.045,0,0,1,.565.466,1.869,1.869,0,0,1,.337.647,4.41,4.41,0,0,1,.152,1.02q.041.973.041,1.242a1.1,1.1,0,0,0,.094.539.584.584,0,0,0,.284.231,2.649,2.649,0,0,0,.823.079v1.406h-.311A4.474,4.474,0,0,1,23.6,30.59a1.644,1.644,0,0,1-.712-.419,1.478,1.478,0,0,1-.39-.724,6.621,6.621,0,0,1-.1-1.356,6.374,6.374,0,0,0-.094-1.4,1.232,1.232,0,0,0-.39-.671A1.431,1.431,0,0,0,21.118,25.788Z" style="fill:#0072a0"/><path d="M27.011,30.966H26.45V29.059h.25A2.329,2.329,0,0,0,27.426,29a.323.323,0,0,0,.165-.127.812.812,0,0,0,.058-.379q0-.36.05-1.375a3.725,3.725,0,0,1,.173-1.047,2.223,2.223,0,0,1,.387-.7,2.145,2.145,0,0,1,.3-.292,2.141,2.141,0,0,1-.4-.4,2.612,2.612,0,0,1-.421-1.092,17.525,17.525,0,0,1-.1-1.841,1.357,1.357,0,0,0-.053-.479c-.008-.016-.031-.062-.136-.106a2.524,2.524,0,0,0-.757-.06h-.25V19.2h.561a4.793,4.793,0,0,1,1.283.133,1.841,1.841,0,0,1,.818.485,1.781,1.781,0,0,1,.453.843,6.6,6.6,0,0,1,.109,1.414,6.359,6.359,0,0,0,.079,1.336.992.992,0,0,0,.3.537,1.226,1.226,0,0,0,.664.18l.236.014v1.879l-.236.014a1.482,1.482,0,0,0-.549.1.686.686,0,0,0-.27.262,1.484,1.484,0,0,0-.186.534,6.743,6.743,0,0,0-.043.931,8.383,8.383,0,0,1-.108,1.644,1.694,1.694,0,0,1-.446.846,2.143,2.143,0,0,1-.913.492A4.5,4.5,0,0,1,27.011,30.966Z" style="fill:#fff"/><path d="M30.708,25.788a1.752,1.752,0,0,0-.645.129.918.918,0,0,0-.372.354,1.725,1.725,0,0,0-.22.624,6.82,6.82,0,0,0-.047.973,8.27,8.27,0,0,1-.1,1.588,1.439,1.439,0,0,1-.378.724,1.9,1.9,0,0,1-.809.431,4.336,4.336,0,0,1-1.125.105H26.7V29.31a2.652,2.652,0,0,0,.82-.079A.572.572,0,0,0,27.8,29,1.05,1.05,0,0,0,27.9,28.5q0-.357.05-1.365a3.53,3.53,0,0,1,.158-.976,1.976,1.976,0,0,1,.343-.621A2.038,2.038,0,0,1,29,25.085a2.416,2.416,0,0,1-.633-.551,2.339,2.339,0,0,1-.375-.984,17.564,17.564,0,0,1-.094-1.8,1.571,1.571,0,0,0-.079-.586.487.487,0,0,0-.264-.226,2.8,2.8,0,0,0-.853-.079v-1.4h.311a4.576,4.576,0,0,1,1.213.123,1.587,1.587,0,0,1,.709.419,1.529,1.529,0,0,1,.39.727,6.436,6.436,0,0,1,.1,1.356,6.842,6.842,0,0,0,.088,1.4,1.223,1.223,0,0,0,.393.671,1.447,1.447,0,0,0,.8.231Z" style="fill:#0072a0"/>',
"APL": '<path d="M30,28.275,16,2,2,28.275H14.162V30h3.676V28.275ZM17.838,24.826V13.161l6.215,11.665Zm-9.891,0,6.215-11.665V24.826Z" style="fill:#d2d2d2"/>',
"AppleScript": '<path d="M17.181,4.437A5.993,5.993,0,0,1,21.579,2a5.979,5.979,0,0,1-1.447,4.476,4.729,4.729,0,0,1-4.17,1.961A5.2,5.2,0,0,1,17.181,4.437Z" style="fill:#a8c2ab"/><path d="M16.2,10.034c.946,0,2.7-1.3,4.989-1.3a6.249,6.249,0,0,1,5.484,2.8,6.08,6.08,0,0,0-3.028,5.3,6.235,6.235,0,0,0,3.772,5.7s-2.637,7.422-6.2,7.422c-1.636,0-2.908-1.1-4.631-1.1-1.757,0-3.5,1.144-4.635,1.144C8.7,30,4.587,22.959,4.587,17.3c0-5.568,3.478-8.489,6.74-8.489C13.448,8.811,15.093,10.034,16.2,10.034Z" style="fill:#a8c2ab"/>',
"Arduino": '<defs><radialGradient id="a" cx="767.179" cy="5169.543" r="14.989" gradientTransform="translate(-718.112 -4953.917) scale(0.955 0.962)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#36bac0"/><stop offset="1" stop-color="#2d9094"/></radialGradient></defs><title>file_type_arduino</title><path d="M29.645,15.925A13.77,13.77,0,1,1,15.876,2.056,13.819,13.819,0,0,1,29.645,15.925Z" style="stroke:#02797e;stroke-linejoin:round;stroke-width:1.1367228454969267px;fill:url(#a)"/><path d="M10.581,11.648c2.41-.076,3.359.834,4.605,2.069.285.282.579.59.9.921l.922-.991a6.223,6.223,0,0,1,3.256-1.93c1.939-.211,3.119-.122,4.311.814a5.023,5.023,0,0,1,2.245,3.9,5.653,5.653,0,0,1-3.25,5.156,5.975,5.975,0,0,1-3.913.135,7.656,7.656,0,0,1-3.541-2.987c-1.678,2.142-3.187,3.253-5.235,3.155-7.452-.354-6.842-10.075-.3-10.247Zm1.657,7.994a9.193,9.193,0,0,0,2.856-2.9c-.74-1.243-2.209-2.824-3.455-3.134a4.328,4.328,0,0,0-3.224.777,3.384,3.384,0,0,0-.762,3.686,3.674,3.674,0,0,0,4.585,1.57Zm-2.98-3.487,3.278.005v1.21l-3.283.005Zm13.448,3.6A3.843,3.843,0,0,0,24.937,17a3.458,3.458,0,0,0-1.863-3.109,3.648,3.648,0,0,0-4.2.728,7.364,7.364,0,0,0-1.649,2.151A8.936,8.936,0,0,0,19.2,19.252,4.022,4.022,0,0,0,22.706,19.754Zm-1.955-2.376-1.088-.008,0-1.217,1.091,0V15.075l1.107-.008-.007,1.093,1.085,0v1.165l-1.021-.008v1.12H20.753Z" style="stroke:#000;stroke-width:0.12103096480927482px;opacity:0.1680999994277954;isolation:isolate"/><path d="M4.917,16.337c0,5.348,7.354,7.34,10.987,1.894,3.765,5.647,10.824,3.28,10.824-1.9S19.7,8.656,15.9,14.441c-3.6-5.719-10.987-3.453-10.987,1.9Zm1.931,0c0-3.86,5.455-5.078,7.992,0-2.588,4.889-7.992,3.859-7.992,0Zm10.119,0c2.286-5.178,7.889-3.751,7.872.008S19.186,21.277,16.967,16.337Z" style="fill:#fff;stroke:#000;stroke-width:0.24206192961854964px"/><rect x="8.898" y="15.795" width="3.237" height="1.067" style="fill:#fff"/><polygon points="20.644 16.846 19.576 16.846 19.576 15.712 20.644 15.712 20.644 14.644 21.779 14.644 21.779 15.712 22.847 15.712 22.847 16.846 21.779 16.846 21.779 17.914 20.644 17.914 20.644 16.846" style="fill:#fff"/>',
"ARM Assembly": '<defs><linearGradient id="a" x1="836.63" y1="36.205" x2="843.802" y2="14.48" gradientTransform="translate(525.922 30.249) rotate(180) scale(0.607 0.607)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#fff" stop-opacity="0.275"/></linearGradient></defs><title>file_type_assembly</title><path d="M16,2c-1.246,3.056-2,5.057-3.391,8.022A21.884,21.884,0,0,0,16.2,13.156a14.858,14.858,0,0,1-4-2.283C10.43,14.579,7.646,19.855,2,30c5.186-2.994,9.012-4.648,12.691-4.966V24.2h-.834v-.837h.834V24.2h1.675V22.521H14.691v-.834h-.834V20.013h.834v-.834h1.675v.834H17.2v.837h-.837v-.837H14.691v1.675h1.675v.834H17.2V24.2h-.837v.783c3.98.1,8.006,1.772,13.634,5.021-.863-1.589-1.636-3.021-2.372-4.385a25.526,25.526,0,0,0-4.833-3.333A14.436,14.436,0,0,1,26.65,23.8C19.17,9.872,18.565,8.02,16,2ZM10.511,19.179h1.671v.834h.837v5.021h-.837V22.521H10.511v2.512H9.673V20.013h.837Zm0,.834v1.675h1.671V20.013Zm7.526-.834h.837v.834h.837v.837h.834v-.837h.837v-.834h.837v5.855h-.837V20.85h-.837v.837h-.834V20.85h-.837v4.184h-.837Z" style="fill:#0000bf"/><path d="M23.881,18.642c-6.069-8.237-7.476-14.876-7.832-16.461A175.217,175.217,0,0,0,23.881,18.642Z" style="fill:#fff;fill-opacity:0.165680468082428"/><path d="M16.051,2.12,15.6,3.227c-.159.391-.311.765-.461,1.131s-.3.724-.448,1.077-.3.7-.448,1.053-.3.706-.465,1.066-.329.729-.506,1.111-.362.778-.561,1.193c-.028.057-.061.123-.089.181A21.872,21.872,0,0,0,16.2,13.156a14.879,14.879,0,0,1-3.989-2.276l-.14.287c-.065.133-.144.283-.212.42l-.106.219c-.878,1.793-2.006,3.984-3.524,6.822,3.551-2,7.381-4.887,14.338-2.4-.349-.661-.67-1.28-.971-1.863s-.581-1.128-.841-1.644-.5-1-.725-1.463-.433-.9-.629-1.313-.38-.818-.554-1.2-.339-.754-.5-1.118S18.047,6.9,17.9,6.546s-.291-.709-.434-1.066c-.036-.091-.073-.186-.109-.277C16.949,4.247,16.536,3.258,16.051,2.12Z" style="fill:url(#a)"/>',
"AsciiDoc": '<path d="M30,30H2V2H30Z" style="fill:#e40046"/><path d="M23.731,24.83a.589.589,0,0,1-.763-.337L16.724,9.269,13.93,15.99h1.833a.59.59,0,0,1-.024,1.18H8.9a.59.59,0,0,1,.024-1.18h3.727l0-.013L16.184,7.5a.591.591,0,0,1,.533-.363h0a.592.592,0,0,1,.557.366l6.785,16.546.009.021A.59.59,0,0,1,23.731,24.83Z" style="fill:#fff"/><path d="M14.516,18.791H7.679a.59.59,0,0,0-.024,1.18H11L9.309,24.043a.59.59,0,0,0,1.085.464l0-.011,1.875-4.509.005-.016h2.215a.59.59,0,0,0,.023-1.18Z" style="fill:#fff"/>',
"ASP.NET (C#)": '<title>file_type_aspx</title><polygon points="22.75 2 6.35 2 6.35 30 29.65 30 29.65 9 22.75 2" style="fill:#c5c5c5"/><polygon points="27.35 27.7 8.75 27.7 8.75 4.3 20.45 4.3 20.45 11.3 27.45 11.3 27.45 27.7 27.35 27.7" style="fill:#f5f5f5"/><path d="M12.1,30.994A11.094,11.094,0,1,1,23.194,19.9,11.106,11.106,0,0,1,12.1,30.994Zm0-20.3A9.2,9.2,0,1,0,21.3,19.9,9.216,9.216,0,0,0,12.1,10.7Z" style="fill:#33a9dc"/><rect x="2.099" y="19.455" width="20.003" height="0.89" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><path d="M12.325,15.763a31.93,31.93,0,0,1-8.484-1.11l.242-.807a31.374,31.374,0,0,0,15.992,0l.239.807A28.076,28.076,0,0,1,12.325,15.763Z" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><path d="M4.1,25.724l-.239-.807a31.652,31.652,0,0,1,16.472,0l-.242.807A31.38,31.38,0,0,0,4.1,25.724Z" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><path d="M8.536,29.055A25.438,25.438,0,0,1,8,10.608l.776.331a24.558,24.558,0,0,0,.533,17.783Z" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><path d="M15.6,29.055l-.776-.333a24.559,24.559,0,0,0,.531-17.783l.776-.331A25.443,25.443,0,0,1,15.6,29.055Z" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><rect x="11.655" y="9.898" width="0.889" height="20.371" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/>',
"AutoHotkey": '<defs><linearGradient id="a" x1="54.604" y1="168.388" x2="54.604" y2="194.885" gradientTransform="translate(-38.604 -165.636)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#d8d8d8"/><stop offset="1" stop-color="#a3a3a3"/></linearGradient><linearGradient id="b" x1="68.756" y1="209.152" x2="91.638" y2="209.152" gradientTransform="translate(-50.601 -159.449) scale(0.832 0.837)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#d7d7d7"/><stop offset="0.5" stop-color="#e7e7e7"/><stop offset="1" stop-color="#d7d7d7"/></linearGradient></defs><title>file_type_autohotkey</title><rect x="2" y="2.824" width="28" height="26.353" rx="3.088" ry="3.088" style="fill:url(#a)"/><path d="M26.856,29.181H5.144A3.148,3.148,0,0,1,2,26.037V5.963A3.148,3.148,0,0,1,5.144,2.819H26.856A3.148,3.148,0,0,1,30,5.963V26.037A3.148,3.148,0,0,1,26.856,29.181ZM5.144,2.963a3,3,0,0,0-3,3h0V26.037a3,3,0,0,0,3,3H26.856a3,3,0,0,0,3-3V5.963a3,3,0,0,0-3-3Z" style="fill:#8d8d8d"/><rect x="4.313" y="4.641" width="23.169" height="21.94" rx="2.571" ry="2.571" style="fill:url(#b)"/><path d="M24.911,26.641H6.884A2.634,2.634,0,0,1,4.253,24.01V7.212A2.634,2.634,0,0,1,6.884,4.581H24.911a2.634,2.634,0,0,1,2.631,2.631v16.8A2.634,2.634,0,0,1,24.911,26.641ZM6.884,4.7A2.514,2.514,0,0,0,4.373,7.212v16.8a2.514,2.514,0,0,0,2.511,2.511H24.911a2.514,2.514,0,0,0,2.511-2.511V7.212A2.514,2.514,0,0,0,24.911,4.7Z" style="fill:#f8f8f8"/><path d="M6.145,23.9l2.343-6.1h.87l2.5,6.1h-.92l-.712-1.848H7.673L7,23.9ZM7.9,21.4H9.974l-.637-1.7q-.291-.77-.433-1.265A7.776,7.776,0,0,1,8.576,19.6Z"/><path d="M13.607,23.9V17.8h.807v2.5h3.171V17.8h.807v6.1h-.807V21.021h-3.17V23.9Z"/><path d="M20.478,23.9V17.8h.807v3.025l3.03-3.025h1.094L22.85,20.267,25.522,23.9H24.456l-2.172-3.088-1,.974V23.9Z"/>',
"AutoIt": '<circle cx="16" cy="16" r="12.551" style="fill:#5d83ac"/><path d="M2,16A14,14,0,1,1,16,30,14,14,0,0,1,2,16ZM16,4.789A11.211,11.211,0,1,0,27.211,16,11.211,11.211,0,0,0,16,4.789Z" style="fill:#f0f0f0"/><path d="M24.576,20.156l-6.4-9.264a3.131,3.131,0,0,0-.819-.819,2.36,2.36,0,0,0-2.442.023,3.543,3.543,0,0,0-.812.8L7.533,20.156h3.752l4.808-6.8,1.838,2.71q.26.368.544.789t.5.7q-.368-.031-.865-.031h-3.53l-1.914,2.634Z" style="fill:#f0f0f0"/>',
"Avro IDL": '<path d="M2,11.649h.025a4.785,4.785,0,0,0,2.911,1.336c2.308.221,4.59-.485,6.9-.326a7.03,7.03,0,0,1,2.68.664c.5-.319.989-.662,1.486-.989.5.327.984.674,1.488.989a6.834,6.834,0,0,1,2.487-.65c1.995-.167,3.967.308,5.957.359a5.2,5.2,0,0,0,4.026-1.383H30v.236c-.178.747-.882,1.176-1.284,1.79a4.948,4.948,0,0,1-.731.791,3.8,3.8,0,0,1-.565.748,2.551,2.551,0,0,0-.594.541,2.181,2.181,0,0,1-.96.749,1.149,1.149,0,0,1-.565.56,6.69,6.69,0,0,1-1.94.184c.723.548,1.5,1.02,2.246,1.535.782.513,1.54,1.061,2.326,1.568H4.089c1.5-1.058,3.057-2.035,4.55-3.1A6.8,6.8,0,0,1,6.7,17.065a1.155,1.155,0,0,1-.569-.562,2.28,2.28,0,0,1-1.043-.86c-.268-.3-.67-.466-.853-.843-.2-.436-.658-.664-.909-1.067-.4-.642-1.137-1.076-1.327-1.846v-.239m2.939,8.528q11.059.009,22.12,0c-3.668-2.51-7.376-4.961-11.059-7.448-3.684,2.487-7.392,4.941-11.061,7.449M4.167,13.2a7.842,7.842,0,0,0,2.84.731c1.163.123,2.341.046,3.5.236a2.7,2.7,0,0,1,1.607.781c.659-.452,1.332-.885,1.987-1.342l.012-.064a5.294,5.294,0,0,0-1.877-.5c-2.693-.316-5.387.712-8.067.16m13.652.356c.688.466,1.382.925,2.07,1.392a2.488,2.488,0,0,1,1.3-.719,19.859,19.859,0,0,1,3.137-.248,9.105,9.105,0,0,0,3.5-.768c-2.582.5-5.168-.409-7.761-.2a6.256,6.256,0,0,0-2.245.545M3.339,13.166a7.264,7.264,0,0,0,2.723,1.3c-.219-.153-.376-.416-.657-.457a7.955,7.955,0,0,1-2.066-.844m23.333.825c-.317.023-.5.3-.733.473a7.232,7.232,0,0,0,2.724-1.3,8.106,8.106,0,0,1-1.991.824m-22.5.126a5.121,5.121,0,0,0,2.589,1.1c-.115-.128-.209-.312-.4-.334a10.459,10.459,0,0,1-2.19-.771m21.467.768c-.189.022-.284.2-.394.336a5.187,5.187,0,0,0,2.6-1.109,10.477,10.477,0,0,1-2.2.773M6.3,14.206a3.243,3.243,0,0,0,2.445.352c-.1-.08-.181-.215-.325-.206q-1.063-.04-2.12-.146m17.351.139c-.171-.019-.291.1-.406.211a3.108,3.108,0,0,0,2.42-.352q-1,.112-2.014.141m-16.741.538a3.669,3.669,0,0,0,2.482.319,1.107,1.107,0,0,0-.281-.376,5.158,5.158,0,0,1-2.2.057m15.7.318a3.678,3.678,0,0,0,2.487-.319,5.127,5.127,0,0,1-2.2-.057,1.1,1.1,0,0,0-.283.376M4.838,14.977a4.11,4.11,0,0,0,2.133.841c-.057-.084-.114-.168-.171-.254a6.948,6.948,0,0,1-1.962-.587m20.361.589-.169.253a4.141,4.141,0,0,0,2.136-.843,7.015,7.015,0,0,1-1.967.59m-18.1-.13a.8.8,0,0,0,.534.31,7.579,7.579,0,0,0,2.037-.073c-.009-.03-.027-.09-.036-.12-.457-.051-.923.074-1.385.047A7.054,7.054,0,0,1,7.1,15.437m16.191.151a6.28,6.28,0,0,0-.913-.041l-.042.126a7.416,7.416,0,0,0,2.045.072.7.7,0,0,0,.522-.331,4.349,4.349,0,0,1-1.613.174m-17.52.327a3.12,3.12,0,0,0,1.754.481c-.065-.24-.334-.2-.523-.236-.419-.041-.816-.186-1.231-.246M25,16.163c-.188.041-.452-.006-.521.232a2.874,2.874,0,0,0,1.732-.482c-.4.079-.8.207-1.211.251M7.735,16.119a1,1,0,0,0,.789.275,9.331,9.331,0,0,0,1.325-.158c-.021-.093-.009-.278-.163-.228a9.983,9.983,0,0,1-1.951.111m14.415.118a8.157,8.157,0,0,0,1.412.154.9.9,0,0,0,.7-.274,9.387,9.387,0,0,1-1.934-.11c-.16-.06-.155.132-.176.23m-15.438.44a1.962,1.962,0,0,0,1.3.181l-.091-.126c-.4.006-.807-.022-1.209-.055m1.615.043a1.03,1.03,0,0,0,.716.294c.179-.125.358-.252.531-.386a5.747,5.747,0,0,1-1.247.092m14.1-.093c.237.144.467.477.782.345.166-.05.369-.089.461-.257a5.271,5.271,0,0,1-1.243-.088m1.713.263a2.007,2.007,0,0,0,1.145-.213,10.269,10.269,0,0,1-1.144.049C23.993,16.667,23.984,16.961,24.138,16.89Z" style="fill:#0040ff"/><path d="M7.435,18.886Q11.719,16.013,16,13.137l9.3,6.244c.221.147.439.3.648.464q-9.947-.01-19.894,0c.443-.344.92-.64,1.383-.958m8.255-5.066c-.457,1.859-.907,3.719-1.375,5.576.52.015,1.041.012,1.562,0q-.013-2.841,0-5.68l-.184.1m-2.5,1.684c.255.859.48,1.728.763,2.579.289-1.238.6-2.471.9-3.707-.55.386-1.114.75-1.668,1.129m3.357-.873c-.006.682,0,1.364,0,2.046a2.1,2.1,0,0,0,1.014-.254c.193-.145.1-.409.011-.586a4.276,4.276,0,0,0-1.024-1.207M18.327,16.4c-.1.544-.666.792-1.151.9.474.7.96,1.389,1.416,2.1.469.024.94.011,1.411.009a1.631,1.631,0,0,1,.16-2.976c-.834-.6-1.7-1.14-2.544-1.727.349.5.831,1.037.708,1.7m-6.822.242c.267.921.529,1.845.794,2.767.44,0,.88.008,1.321-.007-.339-1.161-.685-2.319-1.009-3.484-.385.215-.737.482-1.1.724m8.8.452a.946.946,0,0,0,.057,1.7c.533.09.855-.533.779-.99-.026-.4-.4-.861-.836-.714M7.4,19.4q1.324.018,2.65,0c.256-.7.413-1.468.629-2.2-1.1.715-2.187,1.461-3.279,2.194m14.377-1.9a1.616,1.616,0,0,1-.876,1.9c1.233.018,2.465.015,3.7,0-.934-.644-1.883-1.266-2.822-1.9m-5.223.115c-.01.6,0,1.2,0,1.8.415,0,.831,0,1.248,0-.419-.6-.8-1.219-1.243-1.794m-5.546.941h.346c-.055-.187-.108-.376-.166-.562a3.751,3.751,0,0,0-.181.563m-.18.693c-.015.04-.045.119-.061.159.275-.026.59.071.842-.05C11.453,19.112,11.074,19.275,10.826,19.244Z" style="fill:#0040ff"/>',
"AWK": '<path d="M26.925,27.737C23.431,26.1,24.606,14.588,13.81,8.319,14.089,5.792,14.758-.5,7.961,3,6.845,3.128,4.907,2.331,4,4.831v.114C16.918,3.9.088,10.53,16.75,25.844c-.373.176-.674-.325-1.97.1l-.014.016c-1.722,1.135,1.933.768,4.154,1.274-1.611.417-5.594-1.137-6.3,1.645.877-.37,1,.329,1.076,1.077A26.277,26.277,0,0,1,22.379,27.5c1.1.285,4.118,2.049,5.122.551C27.519,27.93,27.221,27.876,26.925,27.737Z"/><path d="M10.446,2.97l-.121.088a.266.266,0,0,0-.011.377.211.211,0,0,0,.045.039.416.416,0,0,0,.521-.063.263.263,0,0,0,.078-.364l-.01-.014c-.076-.143-.163-.177-.34-.127C10.553,2.925,10.5,2.946,10.446,2.97Z" style="fill:#d2d2d2"/><path d="M18,26.368c.151-.041.318-.828.174-.949A6.29,6.29,0,0,0,19.4,26.485c1.023,1.007,2.665-.032,3.482.759a10.736,10.736,0,0,0,1.957,1.027c-.139-.151-.029-.144.179-.011-.13-.338-4.421-5.156-5.226-7.18.095.293-1.608-.824-2.076-1.419-.028.056-.092-.251-.228-.434-.041.05-.2-.433-.3-.728.037.187-.462-.5-.65-.818-.056.09-.719.372-.809.286-.729-.4,2.529,4.066.122,2.559.676.683.614.4-1.095-.852.364.452-.317.312-1.553-1.523.186.2-.218-.576-.218-.576a2.692,2.692,0,0,0-.133-.483c-.056-.32-.241-.723-.12-.65-1.444-1.556,1.314-3.3.719-3.671-.111,0-.027.017-.151-.106-.09,0-.468.285-.587-.234.006.132-.034.406-.153-.1-.023.052.015.1-.03.145-.225-.576-.772-1.6-1.217-2.539-.158.155-.138-.076-.193-1.092.053.144-.225,1.921-.2.13-.128.007.108,1.258-.343.21-.141.05-.305-.363-.341-1.178-.048.623-.29.187-.5-.923-.269.508-1.6,1.743-.333,7.622-.053-.313.186.341.755,2.427.021-.039-.022-.083.038-.131a6.324,6.324,0,0,0,.677,1.365c.544.658.995,2.074.8,1.277a11.867,11.867,0,0,0,2.554,3.249A34.423,34.423,0,0,0,18,26.368Z" style="fill:#d2d2d2"/><path d="M10.823,2.557a.291.291,0,0,0-.051-.022c-.221-.04-.429.153-.654.032-.145.085-.257-.036-.375-.073a.224.224,0,0,0-.2.014,5.823,5.823,0,0,0-.814.582,1.037,1.037,0,0,0-.273.449c-.021.048-.037.126.05.137a2.3,2.3,0,0,0,.682.045c.177-.028.277-.152.418-.221a1.2,1.2,0,0,0,.592-.68c.064-.175.161-.167.28-.2S10.7,2.62,10.823,2.557Z" style="fill:#d2d2d2"/><path d="M10.325,3.058l.121-.088a.117.117,0,0,1,.12.064c.044.1.106.112.193.047.033-.025.071-.058.118-.027a.119.119,0,0,1,.041.128.276.276,0,0,1-.187.248.266.266,0,0,1-.3-.03C10.341,3.308,10.26,3.2,10.325,3.058Z"/>',
"Batch": '<path d="M29.4,27.6H2.5V4.5H29.4Zm-25.9-1H28.4V5.5H3.5Z" style="fill:#d9b400"/><polygon points="6.077 19.316 5.522 18.484 10.366 15.255 5.479 11.184 6.12 10.416 12.035 15.344 6.077 19.316" style="fill:#d9b400"/><rect x="12.7" y="18.2" width="7.8" height="1" style="fill:#d9b400"/><rect x="2.5" y="5.5" width="26.9" height="1.9" style="fill:#d9b400"/>',
"C#": '<title>file_type_csharp</title><path d="M19.792,7.071h2.553V9.624H24.9V7.071h2.552V9.624H30v2.552h-2.55v2.551H30V17.28H27.449v2.552H24.9v-2.55l-2.55,0,0,2.552H19.793v-2.55l-2.553,0V14.725h2.553V12.179H17.24V9.622h2.554Zm2.553,7.658H24.9V12.176H22.345Z" style="fill:#368832"/><path d="M14.689,24.013a10.2,10.2,0,0,1-4.653.915,7.6,7.6,0,0,1-5.89-2.336A8.839,8.839,0,0,1,2,16.367,9.436,9.436,0,0,1,4.412,9.648a8.181,8.181,0,0,1,6.259-2.577,11.1,11.1,0,0,1,4.018.638v3.745a6.81,6.81,0,0,0-3.723-1.036,4.793,4.793,0,0,0-3.7,1.529,5.879,5.879,0,0,0-1.407,4.142,5.774,5.774,0,0,0,1.328,3.992,4.551,4.551,0,0,0,3.575,1.487,7.288,7.288,0,0,0,3.927-1.108Z" style="fill:#368832"/>',
"C": '<title>file_type_c</title><path d="M10.676,15.973a10.052,10.052,0,0,0,1.175,5.151,5.446,5.446,0,0,0,6.306,2.408,4.284,4.284,0,0,0,3.09-3.6c.107-.6.109-.61.109-.61,1.737.251,4.537.658,6.274.906l-.11.44a11.256,11.256,0,0,1-2.7,5.39,9.439,9.439,0,0,1-5.366,2.688,14.61,14.61,0,0,1-8.277-.819A10.151,10.151,0,0,1,5.4,21.687a16.225,16.225,0,0,1,.019-11.45,10.538,10.538,0,0,1,8.963-7.054,13.353,13.353,0,0,1,6.666.555,9.571,9.571,0,0,1,6.167,6.9c.094.352.114.417.114.417-1.932.351-4.319.8-6.238,1.215-.362-1.915-1.265-3.428-3.2-3.9a5.263,5.263,0,0,0-6.616,3.57,10.49,10.49,0,0,0-.385,1.439A12.31,12.31,0,0,0,10.676,15.973Z" style="fill:#005f91"/>',
"C++": '<title>file_type_cpp</title><path d="M14.742,24.047a10.242,10.242,0,0,1-4.673.919A7.628,7.628,0,0,1,4.155,22.62,8.876,8.876,0,0,1,2,16.369,9.476,9.476,0,0,1,4.422,9.621a8.216,8.216,0,0,1,6.285-2.588,11.151,11.151,0,0,1,4.035.641v3.761A6.839,6.839,0,0,0,11,10.395,4.813,4.813,0,0,0,7.288,11.93a5.9,5.9,0,0,0-1.413,4.159A5.8,5.8,0,0,0,7.209,20.1a4.57,4.57,0,0,0,3.59,1.493,7.319,7.319,0,0,0,3.943-1.113Z" style="fill:#984c93"/><polygon points="17.112 14.829 17.112 12.485 19.456 12.485 19.456 14.829 21.8 14.829 21.8 17.172 19.456 17.172 19.456 19.515 17.112 19.515 17.112 17.172 14.77 17.172 14.77 14.828 17.112 14.829" style="fill:#984c93"/><polygon points="25.313 14.829 25.313 12.485 27.657 12.485 27.657 14.829 30 14.829 30 17.172 27.657 17.172 27.657 19.515 25.313 19.515 25.313 17.172 22.971 17.172 22.971 14.828 25.313 14.829" style="fill:#984c93"/>',
"Clojure": '<path d="M16,2A14,14,0,1,0,30,16,14.016,14.016,0,0,0,16,2" style="fill:#fff"/><path d="M15.488,16.252c-.126.273-.265.579-.408.9A22.963,22.963,0,0,0,13.8,20.605a5.181,5.181,0,0,0-.119,1.155c0,.174.009.356.024.542a6.658,6.658,0,0,0,4.413.067,3.966,3.966,0,0,1-.44-.466c-.9-1.146-1.4-2.827-2.194-5.652" style="fill:#91dc47"/><path d="M12.169,10.556a6.677,6.677,0,0,0-.077,10.881c.411-1.71,1.44-3.276,2.983-6.415-.092-.252-.2-.527-.313-.817a10.207,10.207,0,0,0-1.6-2.882,4.439,4.439,0,0,0-1-.767" style="fill:#91dc47"/><path d="M21.84,23.7a10.877,10.877,0,0,1-2.257-.471A8.036,8.036,0,0,1,10.716,9.982a5.9,5.9,0,0,0-1.4-.171c-2.358.022-4.848,1.327-5.884,4.852a6.606,6.606,0,0,0-.074,1.361,12.649,12.649,0,0,0,23,7.274,14.737,14.737,0,0,1-3.448.459A8.881,8.881,0,0,1,21.84,23.7" style="fill:#63b132"/><path d="M19.463,21.244a3.53,3.53,0,0,0,.5.172A6.69,6.69,0,0,0,22.7,16.023h0a6.681,6.681,0,0,0-8.79-6.348c1.358,1.548,2.011,3.761,2.643,6.181v0s.2.673.547,1.562a15.434,15.434,0,0,0,1.363,2.788,2.924,2.924,0,0,0,1,1.036" style="fill:#90b4fe"/><path d="M16.013,3.372A12.632,12.632,0,0,0,5.731,8.656a6.425,6.425,0,0,1,3.48-1.009,6.8,6.8,0,0,1,3.182.772c.134.077.261.16.386.246a8.038,8.038,0,0,1,11.273,7.358h0a8.013,8.013,0,0,1-2.391,5.719,9.871,9.871,0,0,0,1.143.064,6.24,6.24,0,0,0,4.051-1.263,5.348,5.348,0,0,0,1.7-2.906A12.632,12.632,0,0,0,16.013,3.372" style="fill:#5881d8"/>',
"CMake": '<defs><linearGradient id="a" x1="9.955" y1="9.096" x2="16.68" y2="23.324" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1011a1"/><stop offset="1" stop-color="#6969e1"/></linearGradient><linearGradient id="b" x1="16.231" y1="19.655" x2="25.618" y2="3.782" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b40e0e"/><stop offset="1" stop-color="#ff5959"/></linearGradient><linearGradient id="c" x1="21.663" y1="4.823" x2="8.381" y2="5.938" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#01a300"/><stop offset="1" stop-color="#01df00"/></linearGradient><linearGradient id="d" x1="14.643" y1="8.368" x2="14.472" y2="14.145" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#848484"/><stop offset="1" stop-color="#d2d2d2"/></linearGradient></defs><title>file_type_cmake</title><path d="M17.257,16.919,2.246,29.749,15.994,2.283Z" style="fill:url(#a)"/><path d="M2.262,29.768l-.038-.03L16.012,2.193l.008.088L17.283,16.93l-.01.008ZM15.977,2.374,2.324,29.649,17.23,16.908Z"/><path d="M17.952,24.931,16,2.28,29.767,29.751Z" style="fill:url(#b)"/><path d="M29.818,29.8l-.061-.025L17.929,24.948l0-.015L15.975,2.282l.047-.013ZM17.976,24.913,29.715,29.7,16.036,2.408Z"/><path d="M11.16,22.094l18.621,7.654H2.25Z" style="fill:url(#c)"/><path d="M29.781,29.773H2.183l.051-.044,8.921-7.665.014.006,18.622,7.655Zm-27.464-.05H29.654l-18.489-7.6Z"/><path d="M11.189,22.112l6.059-5.168.843,7.98Z" style="fill:url(#d)"/><path d="M18.149,25l-.077-.032-6.978-2.842,6.194-5.283.01.094Zm-6.865-2.9,6.748,2.749-.824-7.8Z"/><path d="M29.7,29.911H2.285a.221.221,0,0,1-.182-.088.222.222,0,0,1,.022-.2L15.864,2.187a.169.169,0,0,1,.14-.1h0a.154.154,0,0,1,.13.085L29.867,29.607a.238.238,0,0,1,.02.226A.211.211,0,0,1,29.7,29.911Zm-27.468-.16a.484.484,0,0,0,.057.011h27.4l.073-.009a.221.221,0,0,0-.028-.077L16,2.248,16,2.26,2.261,29.684a.279.279,0,0,0-.025.067Z"/>',
"COBOL": '<path d="M22.24,6.546a4.449,4.449,0,0,0,1.765-2.522,4.636,4.636,0,0,1-.018,2.157c-.223.582-.567,1.107-.834,1.669a21.772,21.772,0,0,1,4.559-2.938C27.23,6.4,25.891,7.3,24.907,8.442c.19.409.28.989.8,1.109a5.036,5.036,0,0,0,2.5.155c.912-.313,1.345-1.258,1.8-2.035V9.14a15.738,15.738,0,0,1-.582,1.748c.2.547.409,1.092.582,1.647v.952c-.214.368-.442.726-.663,1.089a5.293,5.293,0,0,0-1.068-1.162,4.03,4.03,0,0,0-1.851-.125,3.212,3.212,0,0,0,2.413,1.47c-.359.37-.663.912-1.23.969-1.641.247-3.207-.505-4.839-.5-.282.02-.707.024-.785.372,0,.735.217,1.453.19,2.188-.059,1.258-.512,2.466-.529,3.726a13.785,13.785,0,0,0,.838,3.448c-.523-.077-1.044-.166-1.562-.26-.1.208-.184.42-.26.634A4.514,4.514,0,0,0,21.8,26.531c-.061.127-.182.381-.241.508l-.573.138c-.131.247-.263.492-.4.739a4.421,4.421,0,0,0-2.2.061c-.466-.186-.928-.376-1.389-.567a5.939,5.939,0,0,0,.407-2.315c-.282-.982-1.6-.984-2-1.877a6.233,6.233,0,0,1-1.022-2.851c-.823-.433-1.455-1.221-2.4-1.4-.048.409-.083.82-.153,1.227A6.015,6.015,0,0,1,10.481,22.6c.039.422.079.842.12,1.265.346.324.691.648,1.033.974a9.752,9.752,0,0,1-1.426.713,11.114,11.114,0,0,1-1.687.077c-.258-.254-.518-.508-.777-.764a4.871,4.871,0,0,0,.114-2.608c.171-.4.326-.812.475-1.221a5.565,5.565,0,0,1-3.01.206,5.12,5.12,0,0,1-3.29-4.33,3.859,3.859,0,0,1,1.407-3.268A6.41,6.41,0,0,0,3.2,16.259a3.038,3.038,0,0,0,2.5,2.466,3.462,3.462,0,0,0,1.96-.643,7.48,7.48,0,0,1,.363-4.133,5.524,5.524,0,0,1,3.586-2.66,4.235,4.235,0,0,0,2.011-1.566,10.67,10.67,0,0,1,1.529-1.33c-.228-.219-.453-.44-.68-.659A2.154,2.154,0,0,0,15.9,6.023c1.284-.3,2.551-.661,3.82-1.011a3.793,3.793,0,0,0,1.415.606c.317.346.494,1.157,1.1.928M18.458,19.908c.042.768-.048,1.665.674,2.155,0-.755-.046-1.507-.1-2.26Z" style="fill:#005ca5"/>',
"CoffeeScript": '<path d="M13.114,5.728c.025.153-.051.28-.306.408a3.457,3.457,0,0,0-1.63-.229c-.637.051-1.172.255-1.1.688.1.433.713.688,1.808.586,2.674-.229,2.649-2.038,6.571-2.394,3.056-.28,4.763.662,4.992,1.808.178.891-.56,1.757-2.776,1.936-1.961.178-3.107-.357-3.209-.891-.051-.28.1-.688,1.044-.79.1.433.637.891,1.91.764C21.341,7.536,22.1,7.2,22,6.7c-.1-.535-1.07-.84-2.6-.713-3.107.28-3.871,1.987-6.52,2.216C11,8.376,9.472,7.689,9.268,6.67c-.076-.382-.076-1.273,1.91-1.452,1.019-.076,1.834.1,1.936.509ZM3.181,16.374A5.279,5.279,0,0,0,2.01,19.99a4.206,4.206,0,0,0,1.655,3.056,4,4,0,0,0,3.362.79,11.434,11.434,0,0,0,1.5-.484,4.238,4.238,0,0,1-2.751-1.019,4.13,4.13,0,0,1-1.732-2.827A3.79,3.79,0,0,1,4.658,16.5,3.977,3.977,0,0,1,7.409,15a4.806,4.806,0,0,1,3.209.942,6.95,6.95,0,0,0-.866-.866,4.1,4.1,0,0,0-3.464-.688,5.2,5.2,0,0,0-3.107,1.987ZM16.833,10.49A40.837,40.837,0,0,1,8.5,9.7C6.237,9.14,5.04,8.529,5.04,7.74c0-.331.153-.611.611-.942-1.426.56-2.19,1.019-2.19,1.732.076.79,1.35,1.579,3.948,2.19a39.443,39.443,0,0,0,9.347.942A38.993,38.993,0,0,0,26.1,10.72c2.6-.611,3.846-1.426,3.846-2.19,0-.56-.56-1.1-1.579-1.5a.862.862,0,0,1,.408.688c0,.79-1.172,1.426-3.54,1.961A39.324,39.324,0,0,1,16.833,10.49Zm9.373,2.19a42.315,42.315,0,0,1-9.347.942,44.144,44.144,0,0,1-9.424-.942c-2.19-.56-3.362-1.172-3.769-1.808a23.186,23.186,0,0,0,2.6,7.641c.942,1.426,1.885,2.674,2.827,4.024a9.883,9.883,0,0,1,.866,2.369,4.559,4.559,0,0,0,2.6,1.732,10.611,10.611,0,0,0,4.177.611h.153a11.839,11.839,0,0,0,4.3-.611,4.869,4.869,0,0,0,2.521-1.732h.076a9.592,9.592,0,0,1,.79-2.369c.942-1.35,1.885-2.6,2.827-4.024A24.62,24.62,0,0,0,30,10.872C29.491,11.585,28.319,12.2,26.205,12.681Z" style="fill:#6f4e37"/>',
"Crystal": '<path d="M29.941,19.816,19.8,29.928c-.028.028-.085.028-.169.028L5.8,26.267c-.028,0-.084-.028-.113-.113L2,12.352a.419.419,0,0,1,.028-.169L12.168,2.072c.028-.028.084-.028.169-.028l13.83,3.718c.028,0,.084.028.113.113l3.69,13.8C30.026,19.732,30,19.788,29.941,19.816ZM16.393,8.832,2.817,12.493q-.042,0,0,.084L12.76,22.52c.028.028.028,0,.084,0L16.506,8.972C16.449,8.832,16.393,8.832,16.393,8.832Z" style="fill:#c8c8c8"/>',
"CSS": '<polygon points="5.902 27.201 3.656 2 28.344 2 26.095 27.197 15.985 30 5.902 27.201" style="fill:#1572b6"/><polygon points="16 27.858 24.17 25.593 26.092 4.061 16 4.061 16 27.858" style="fill:#33a9dc"/><polygon points="16 13.191 20.09 13.191 20.372 10.026 16 10.026 16 6.935 16.011 6.935 23.75 6.935 23.676 7.764 22.917 16.282 16 16.282 16 13.191" style="fill:#fff"/><polygon points="16.019 21.218 16.005 21.222 12.563 20.292 12.343 17.827 10.67 17.827 9.24 17.827 9.673 22.68 16.004 24.438 16.019 24.434 16.019 21.218" style="fill:#ebebeb"/><polygon points="19.827 16.151 19.455 20.29 16.008 21.22 16.008 24.436 22.344 22.68 22.391 22.158 22.928 16.151 19.827 16.151" style="fill:#fff"/><polygon points="16.011 6.935 16.011 8.855 16.011 10.018 16.011 10.026 8.555 10.026 8.555 10.026 8.545 10.026 8.483 9.331 8.342 7.764 8.268 6.935 16.011 6.935" style="fill:#ebebeb"/><polygon points="16 13.191 16 15.111 16 16.274 16 16.282 12.611 16.282 12.611 16.282 12.601 16.282 12.539 15.587 12.399 14.02 12.325 13.191 16 13.191" style="fill:#ebebeb"/>',
"CSV": '<path d="M22.038,2H6.375a1.755,1.755,0,0,0-1.75,1.75v24.5A1.755,1.755,0,0,0,6.375,30h19.25a1.755,1.755,0,0,0,1.75-1.75V6.856Zm.525,2.844,1.663,1.531H22.563ZM6.375,28.25V3.75H20.813V8.125h4.813V28.25Z" style="fill:#c2c2c2"/><rect x="8.125" y="15.097" width="13.076" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="24.439" width="9.762" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="19.763" width="15.75" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="10.23" width="15.75" height="1.75" style="fill:#829ec2"/>',
"D": '<defs><linearGradient id="a" x1="185.455" y1="1601.641" x2="181.955" y2="1630.224" gradientTransform="translate(-62.523 -666.646) scale(0.427)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="b" x1="176.136" y1="1600.5" x2="172.636" y2="1629.083" xlink:href="#a"/></defs><title>file_type_dlang</title><path d="M3.978,15.462,3.969,8.509A.588.588,0,0,1,4.5,7.947a.658.658,0,0,1,.076,0l6.074-.009a15.7,15.7,0,0,1,6.067.95,8.9,8.9,0,0,1,2.244,1.359,4.469,4.469,0,0,1,2.946-1.083,4.11,4.11,0,0,1,4.276,3.92A4.11,4.11,0,0,1,21.907,17c-.089,0-.177-.008-.265-.012a6.617,6.617,0,0,1-.232.953,85.383,85.383,0,0,1,8.59,2.6V2H2V15.4Q2.992,15.42,3.978,15.462Zm22.8-7.944a1.32,1.32,0,0,1,1.374,1.259,1.379,1.379,0,0,1-2.747,0A1.32,1.32,0,0,1,26.78,7.517Z" style="fill:#b03931"/><path d="M17.861,15.787a4.114,4.114,0,0,0-1.748-3.458,5.814,5.814,0,0,0-1.508-.822,7.354,7.354,0,0,0-1.629-.438,21.629,21.629,0,0,0-2.588-.1l-2.619,0,.006,4.737a88.827,88.827,0,0,1,9.91,1.408A4.919,4.919,0,0,0,17.861,15.787Z" style="fill:#b03931"/><path d="M20.993,18.979a7.906,7.906,0,0,1-2.128,2.582,9.739,9.739,0,0,1-3.256,1.71,11.558,11.558,0,0,1-1.971.472h-.015a31.857,31.857,0,0,1-3.326.111l-5.625.022a.616.616,0,0,1-.686-.681l-.01-7.734Q2.992,15.42,2,15.4V30H30V20.544a85.383,85.383,0,0,0-8.59-2.6A6.985,6.985,0,0,1,20.993,18.979Z" style="fill:#b03931"/><path d="M20.993,18.979a7.906,7.906,0,0,1-2.128,2.582,9.739,9.739,0,0,1-3.256,1.71,11.558,11.558,0,0,1-1.971.472h-.015a31.857,31.857,0,0,1-3.326.111l-5.625.022a.616.616,0,0,1-.686-.681l-.01-7.734Q2.992,15.42,2,15.4V30H30V20.544a85.383,85.383,0,0,0-8.59-2.6A6.985,6.985,0,0,1,20.993,18.979Z" style="opacity:0.300000011920929;isolation:isolate;fill:url(#a)"/><path d="M10.477,20.835a16.014,16.014,0,0,0,2.877-.2,7.633,7.633,0,0,0,1.628-.5,5.628,5.628,0,0,0,1.187-.748,4.457,4.457,0,0,0,1.518-2.271,88.691,88.691,0,0,0-9.91-1.408l.006,5.133Z" style="fill:#b03931"/><path d="M10.477,20.835a16.014,16.014,0,0,0,2.877-.2,7.633,7.633,0,0,0,1.628-.5,5.628,5.628,0,0,0,1.187-.748,4.457,4.457,0,0,0,1.518-2.271,88.691,88.691,0,0,0-9.91-1.408l.006,5.133Z" style="opacity:0.300000011920929;isolation:isolate;fill:url(#b)"/><path d="M20.383,11.746a6.993,6.993,0,0,1,1.36,4.148,6.618,6.618,0,0,1-.1,1.1c.088,0,.176.012.265.012a4.11,4.11,0,0,0,4.276-3.92,4.11,4.11,0,0,0-4.276-3.92,4.47,4.47,0,0,0-2.946,1.083A8.123,8.123,0,0,1,20.383,11.746Z" style="fill:#fff"/><ellipse cx="26.78" cy="8.777" rx="1.374" ry="1.259" style="fill:#fff"/><path d="M4.673,23.877l5.625-.022a31.871,31.871,0,0,0,3.326-.111h.015a11.49,11.49,0,0,0,1.971-.472,9.739,9.739,0,0,0,3.256-1.71,7.906,7.906,0,0,0,2.128-2.582,6.985,6.985,0,0,0,.417-1.034,7.056,7.056,0,0,0,.332-2.051,6.992,6.992,0,0,0-1.36-4.148,8.1,8.1,0,0,0-1.421-1.5,8.878,8.878,0,0,0-2.244-1.359,15.686,15.686,0,0,0-6.067-.95l-6.074.009a.658.658,0,0,0-.076,0,.588.588,0,0,0-.532.562l.009,6.952.01,7.734A.616.616,0,0,0,4.673,23.877Zm3.1-12.908,2.619,0a21.623,21.623,0,0,1,2.588.1,7.354,7.354,0,0,1,1.629.438,5.814,5.814,0,0,1,1.508.822,4.116,4.116,0,0,1,1.748,3.458,4.905,4.905,0,0,1-.175,1.327,4.457,4.457,0,0,1-1.518,2.271,5.613,5.613,0,0,1-1.187.748,7.666,7.666,0,0,1-1.628.5,16.009,16.009,0,0,1-2.877.2l-2.694,0-.006-5.133Z" style="fill:#fff"/>',
"Dart": '<path d="M16.739,2.037a1.314,1.314,0,0,0-.916.377l-.013.01L7.22,7.389l8.566,8.566v.006l10.3,10.3,1.963-3.536L20.968,5.728l-3.3-3.3a1.307,1.307,0,0,0-.927-.388Z" style="fill:#66c3fa"/><path d="M7.25,7.35,2.288,15.931l-.01.013a1.322,1.322,0,0,0-.378.919,1.3,1.3,0,0,0,.387.924L6.4,21.9l16.084,6.327,3.636-2.02-.1-.1-.025,0-10.083-10.1H15.9L7.25,7.35Z" style="fill:#215896"/><path d="M7.192,7.362l8.764,8.773h.013l10.087,10.1,3.839-.732L29.9,14.14l-4.054-3.973a6.521,6.521,0,0,0-3.624-1.616l0-.044L7.192,7.362Z" style="fill:#235997"/><path d="M7.256,7.411l8.768,8.768v.013L26.116,26.284l-.734,3.839H14.022l-3.971-4.056a6.522,6.522,0,0,1-1.614-3.625l-.044,0L7.256,7.411Z" style="fill:#58b6f0"/>',
"Dhall": '<path d="M16,2.07A13.93,13.93,0,1,1,2,16,13.93,13.93,0,0,1,16,2.07ZM13.28,22.32a1.49,1.49,0,1,1-1,1.83A1.49,1.49,0,0,1,13.28,22.32Zm8-15.68a.53.53,0,0,1,.38.66.52.52,0,0,1-.65.38l-.5-.13a42.67,42.67,0,0,0-.37,7.07C18.06,16.45,14.39,22,14.39,22l1.93-7.18a1,1,0,0,0,.89-.65.91.91,0,0,0-1.75-.47,1,1,0,0,0,.45,1L14,21.85a68.38,68.38,0,0,0-1.34-9.25,34.28,34.28,0,0,0,3.21-6.31l-.5-.13A.55.55,0,0,1,15,5.5a.53.53,0,0,1,.66-.38l5.68,1.52Z" style="fill:#b7b7b7;fill-rule:evenodd"/>',
"Diff": '<rect x="6.975" y="3" width="18.05" height="6.017" style="fill:#c00000"/><path d="M12.992,10.95v6.017H6.975v6.017h6.017V29h6.017V22.983h6.017V16.967H19.008V10.95Z" style="fill:green"/>',
"Django/Jinja2": '<defs><radialGradient id="a" cx="16" cy="-119.283" r="13.5" gradientTransform="matrix(1, 0, 0, -0.945, 0, -96.735)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#575757"/><stop offset="1" stop-color="#2f2f2f"/></radialGradient></defs><title>file_type_jinja</title><path d="M29.34,3.241a38.271,38.271,0,0,1-9.451,3.04c-4.241.55-12.329,1.1-13.935.712A23.3,23.3,0,0,1,3.2,6.151l.334,1.132L2.5,8.188l.183.323.424.032,1.3.162.183.582.727.066.364,1.228s1.544.13,2,.13,1.363-.064,1.363-.064l.03.485.334.064v.55l-.728.648.183.032v.225a15.816,15.816,0,0,1-2.3.034c-.666-.1-.788-.1-.788-.1l-.06.064-.03.291h.151l.06,1.262,3.363-.13-.243,4.365-.03.549-2.848-.162-.03-1.164h.635l.061-.453.575-.13.091-.128-2.151-.518-1.636.485.273.227h.273l.03.389.575.032V18.7l-.635.162.121.257.151.1v.873h.394v4.041l-.637.1.091,1.164.393.066-.06,2.651,1.727.032-.364-2.619,2.605-.064-.181,1.422-.243,1,2.635.032.03-2.586,1.817-.162-.09,1.649-.061.969h1.546l-.061-2.651.213.034.06-1.262h-.243l-.09-.518L13.8,21.9l.06-1.713h.333V19.149l-.424.032.061-1.22.493-.049.023-.4.28-.041.287-.218L13.187,16.9l-1.712.379.167.274.181-.015.211-.008.039.5.477-.023.009,1.082-2.053-.047.069-1.156.067-1.051V15.455L10.7,14l4.111-.21,4.892-.282.046.929-.174,2.231L19.5,18.744l-1.8-.032-.009-1.455.667-.024.03-.411.273-.041-.014-.081.273-.015.151-.2L17.034,16,15,16.44l.144.251.227-.017v.114h.28v.46l.6.008-.007,1.277h-.605l-.009.291.213.024-.023,1.108.447.024-.053,4.39-.591.12.007.21h.206v1.124h.34l-.09,1.536L15.974,28.7l2.151.056-.069-1.164-.158-.969-.031-.841,1.826-.032-.053,1.3-.009,1.374,1.031.081,1.4-.056.44-.13-.243-.736-.06-1.156-.114-.824,1.742-.064-.076,1.01-.007,1.585.7.064.69-.015.333-.105-.2-1.5L25.2,25.445l.3-.032L25.5,24.4l.083-.017-.014-.218h-.341l-.069-.744L25.13,20.2l.257-.008V19.133l.107.017v-.21l-.38-.034.009-1.228.635-.056-.037-.413.28-.024-.016-.081.371-.186-1.886-.379-1.916.389.121.226.3-.024.016.1h.25l.014.485.621-.008.053,1.188-2.2-.017-.257-1.786-.206-.946-.166-1.7.1-.993,4.377-.332.014-1.479.22-.056-.014-.225-.167-.1s-2.393.355-3.151.436l-.371.04-.023-.274-.905-.474.011-.552.311-.009.023-.759a24.807,24.807,0,0,0,2.544-.283c.689-.162,1.666-.323,1.666-.323L26.2,7.809l.917-.267.076-.21,2.074-.574.236-.194-.788-1.722.076-.389.4-.21.288-.881ZM19.374,9.8l-.011.626.47.02-.03.594-.921.6-.057.174.371,0,0,.146-2.814.137.019-.416.128-.207.009-.133,0-.286.08-.19.03-.154v-.11l.121-.485Zm-5.885.533-.069.421.22.259-.014.453.2.315-.053.372.151.218-2.871.113-.007-.1.333-.041.016-.122-.727-.395-.039-.631.348-.017.03-.68Zm4.249,9.7,1.742.113L19.42,22.5l.227,1.923L17.8,24.354Zm-11.663.1,2.788.145L8.62,21.9v1.359l.2.759-2.727.13Zm17.843.015v4.01l-1.772.13-.061-2.118-.2-1.973ZM10.5,20.24l2.06.008.021,3.718L10.657,24l-.1-1.205-.007-1.2Z" style="stroke:red;stroke-width:0.5px;fill:url(#a)"/>',
"Docker": '<path d="M16.54,12.663H19.4v2.924h1.446a6.272,6.272,0,0,0,1.988-.333,5.091,5.091,0,0,0,.966-.436,3.584,3.584,0,0,1-.67-1.849,3.907,3.907,0,0,1,.7-2.753l.3-.348.358.288a4.558,4.558,0,0,1,1.795,2.892,4.375,4.375,0,0,1,3.319.309l.393.226-.207.4a4.141,4.141,0,0,1-4.157,1.983c-2.48,6.168-7.871,9.088-14.409,9.088-3.378,0-6.476-1.263-8.241-4.259l-.029-.049L2.7,20.227a8.316,8.316,0,0,1-.659-4.208l.04-.433H4.526V12.663H7.387V9.8h5.721V6.942H16.54v5.721Z" style="fill:#0096e6"/><path d="M12.006,24.567a6.022,6.022,0,0,1-3.14-3.089,10.329,10.329,0,0,1-2.264.343q-.5.028-1.045.028-.632,0-1.331-.037a9.051,9.051,0,0,0,7,2.769Q11.618,24.581,12.006,24.567Z" style="fill:#fff"/><path d="M7.08,13.346h.2v2.067h-.2Zm-.376,0h.2v2.067H6.7V13.346Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.368,0h.2v2.067h-.2V13.346ZM5,13.14H7.482v2.479H5Zm2.859-2.861h2.48v2.479H7.863Zm2.077.207h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2V10.486Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.368,0h.2v2.066h-.2Zm-.207,2.653h2.48v2.48H7.863V13.14Zm2.077.207h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2V13.346Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.368,0h.2v2.067h-.2Zm2.654-.207H13.2v2.48h-2.48V13.14Zm2.076.207H13v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.368,0h.2v2.067h-.2Zm-.206-3.067H13.2v2.479h-2.48V10.279Zm2.076.207H13v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.368,0h.2v2.066h-.2Zm2.654,2.653h2.479v2.48h-2.48V13.14Zm2.076.207h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.368,0h.192v2.067h-.2V13.346Zm-.206-3.067h2.479v2.479h-2.48V10.279Zm2.076.207h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.368,0h.192v2.066h-.2V10.486Zm-.206-3.067h2.479V9.9h-2.48V7.419Zm2.076.206h.2V9.691h-.2Zm-.376,0h.2V9.691h-.2Zm-.376,0h.2V9.691h-.2Zm-.376,0h.2V9.691h-.2Zm-.376,0h.2V9.691h-.2Zm-.368,0h.192V9.691h-.2V7.625Zm2.654,5.514h2.479v2.48h-2.48V13.14Zm2.076.207h.195v2.067h-.2V13.346Zm-.376,0h.206v2.067h-.206Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.205V13.346Zm-.368,0h.2v2.067h-.194V13.346Z" style="fill:#fff"/><path d="M10.188,19.638a.684.684,0,1,1-.684.684A.684.684,0,0,1,10.188,19.638Zm0,.194a.489.489,0,0,1,.177.033.2.2,0,1,0,.275.269.49.49,0,1,1-.453-.3Z" style="fill:#fff"/>',
"DOT (Graphviz)": '<polygon points="23.942 30 12.679 30 1.417 30 1.417 16 1.417 2 12.679 2 23.942 2 23.942 16 23.942 30" style="fill:#e6e6e6"/><rect x="2.132" y="3.202" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="7.42" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="11.638" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="15.856" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="20.074" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="24.293" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="28.511" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2" y="3.202" width="0.264" height="25.573" style="fill:#4ed1f8"/><rect x="6.218" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="10.436" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="14.655" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="18.873" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="23.091" y="3.202" width="0.264" height="25.573" style="fill:#4ed1f8"/><g style="opacity:0.5"><rect x="2.132" y="27.456" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="26.402" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="25.347" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="23.238" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="22.184" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="21.129" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="19.02" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="17.965" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="16.911" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="14.802" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="13.747" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="12.693" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="10.583" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="9.529" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="8.474" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="6.365" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="5.311" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="4.256" width="21.135" height="0.264" style="fill:#4ed1f8"/></g><g style="opacity:0.5"><rect x="22.036" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="20.982" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="19.927" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="17.818" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="16.764" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="15.709" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="13.6" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="12.545" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="11.491" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="9.382" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="8.327" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="7.273" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="5.164" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="4.109" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="3.055" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/></g><path d="M13,8.976c-2.308,0-4.131-1.274-4.193-2.969h0a2.775,2.775,0,0,1,1.253-2.32,5.3,5.3,0,0,1,2.943-.963,5.294,5.294,0,0,1,3.006.743,2.775,2.775,0,0,1,1.421,2.221c.065,1.752-1.779,3.194-4.2,3.283C13.158,8.974,13.08,8.976,13,8.976Zm.232-5.2q-.095,0-.19,0a4.238,4.238,0,0,0-2.354.756,1.761,1.761,0,0,0-.828,1.435C9.9,7.09,11.428,7.978,13.2,7.917s3.223-1.069,3.181-2.191a1.761,1.761,0,0,0-.932-1.369A4.165,4.165,0,0,0,13.234,3.773Z" style="fill:#656565"/><path d="M6.4,29.281A5.238,5.238,0,0,1,3.6,28.519a2.775,2.775,0,0,1-1.41-2.229c-.056-1.752,1.8-3.185,4.213-3.262s4.356,1.236,4.412,2.988A2.775,2.775,0,0,1,9.548,28.33a5.3,5.3,0,0,1-2.948.948Q6.5,29.281,6.4,29.281Zm.186-5.2-.156,0c-1.766.056-3.229,1.052-3.193,2.174a1.761,1.761,0,0,0,.924,1.374,4.235,4.235,0,0,0,2.4.593,4.235,4.235,0,0,0,2.357-.744,1.761,1.761,0,0,0,.835-1.43C9.724,24.961,8.29,24.08,6.591,24.08Z" style="fill:#656565"/><path d="M19.261,29.26a5.238,5.238,0,0,1-2.807-.762,2.775,2.775,0,0,1-1.41-2.229h0c-.055-1.752,1.8-3.185,4.213-3.262a5.3,5.3,0,0,1,3,.759A2.6,2.6,0,0,1,22.4,28.31a5.3,5.3,0,0,1-2.948.948Q19.358,29.26,19.261,29.26ZM16.1,26.236a1.761,1.761,0,0,0,.924,1.374,4.57,4.57,0,0,0,4.757-.151,1.558,1.558,0,0,0-.089-2.8,4.226,4.226,0,0,0-2.4-.593c-1.766.056-3.228,1.052-3.193,2.174Z" style="fill:#656565"/><path d="M6.2,23.477A27.4,27.4,0,0,1,9.769,8.986l.687.391A26.609,26.609,0,0,0,6.986,23.45Z" style="fill:#656565"/><path d="M10.853,7.957a7.171,7.171,0,0,0-.075,2.32l-.758-.93-1.178-.23A7.165,7.165,0,0,0,10.853,7.957Z" style="fill:#656565"/><path d="M19.854,23.477l-.79-.027a26.59,26.59,0,0,0-.915-7.884,26.624,26.624,0,0,0-2.554-6.189l.687-.391a27.423,27.423,0,0,1,2.63,6.373A27.372,27.372,0,0,1,19.854,23.477Z" style="fill:#656565"/><path d="M15.2,7.957a7.171,7.171,0,0,0,2.011,1.159l-1.178.23-.758.93A7.165,7.165,0,0,0,15.2,7.957Z" style="fill:#656565"/><rect x="11.348" y="9.945" width="3.515" height="0.791" transform="matrix(0.016, -1, 1, 0.016, 2.557, 23.279)" style="fill:#656565"/><path d="M13.054,13.529a7.171,7.171,0,0,0-1.1-2.046l1.122.426,1.135-.39A7.165,7.165,0,0,0,13.054,13.529Z" style="fill:#656565"/><rect x="7.809" y="20.081" width="4.757" height="0.791" transform="translate(-12.56 18.108) rotate(-57.603)" style="fill:#656565"/><path d="M8.147,23.694a7.171,7.171,0,0,0,.133-2.317l.734.949,1.171.26A7.165,7.165,0,0,0,8.147,23.694Z" style="fill:#656565"/><rect x="15.418" y="18.051" width="0.791" height="4.919" transform="translate(-8.257 10.951) rotate(-30.708)" style="fill:#656565"/><path d="M17.8,23.856a7.171,7.171,0,0,0-2.006-1.168l1.179-.225.762-.927A7.165,7.165,0,0,0,17.8,23.856Z" style="fill:#656565"/><path d="M13.024,19.125a5.238,5.238,0,0,1-2.807-.762,2.775,2.775,0,0,1-1.41-2.229,2.775,2.775,0,0,1,1.266-2.314,5.3,5.3,0,0,1,2.948-.948,6.712,6.712,0,0,1,2.134.313l-.331,1a5.668,5.668,0,0,0-1.769-.261,4.238,4.238,0,0,0-2.358.744,1.761,1.761,0,0,0-.835,1.43,1.761,1.761,0,0,0,.924,1.374,4.242,4.242,0,0,0,2.4.593,5.7,5.7,0,0,0,1.678-.378l.378.985a6.844,6.844,0,0,1-2.022.448Q13.121,19.125,13.024,19.125Z" style="fill:#656565"/><path d="M15.435,12.876a4.338,4.338,0,0,0-.984,1.622,2.064,2.064,0,0,1-.016,2.806,4.4,4.4,0,0,0,.982,1.6,3.932,3.932,0,0,0,.078-5.986C15.476,12.9,15.454,12.893,15.435,12.876Z" style="fill:#656565"/><path d="M19.525,15.278a27.931,27.931,0,0,0-1.263-3.742,4.376,4.376,0,0,0-1.777.517,26.063,26.063,0,0,1,1.253,3.685,26.038,26.038,0,0,1,.734,4.534,4.347,4.347,0,0,0,1.825-.351A27.9,27.9,0,0,0,19.525,15.278Z" style="fill:#656565"/><path d="M16.153,12.229A4.437,4.437,0,1,0,22.3,13.5,4.437,4.437,0,0,0,16.153,12.229Zm4.812,7.332a4.346,4.346,0,1,1,1.249-6.018A4.346,4.346,0,0,1,20.965,19.561Z" style="fill:#2c2928"/><path d="M22.015,19.186a.822.822,0,0,0-.192-.209,4.347,4.347,0,0,1-.333.319,4.522,4.522,0,0,1-.446.337,4.73,4.73,0,0,1-.94.477.669.669,0,0,0,.031.1.64.64,0,0,0,.047.094l.487.8L22.5,19.984Z" style="fill:#282828"/><rect x="20.793" y="20.784" width="2.147" height="0.44" transform="translate(-7.74 14.465) rotate(-31.394)" style="fill:#282828"/><rect x="22.868" y="20.96" width="2.147" height="6.887" transform="translate(-9.207 16.044) rotate(-31.394)" style="fill:#282828"/><path d="M27.054,27.443l-.236-.387-1.833,1.119.236.387a.924.924,0,0,0,1.279.159l.11-.067A.924.924,0,0,0,27.054,27.443Z" style="fill:#282828"/><path d="M20.68,14.845a.315.315,0,0,1,.338.027,1.078,1.078,0,0,1,.294.578,1.1,1.1,0,0,1,.029.654.327.327,0,0,1-.278.2.468.468,0,0,1-.37-.1.922.922,0,0,1-.262-.5.955.955,0,0,1-.01-.585A.466.466,0,0,1,20.68,14.845Zm.06.227a.149.149,0,0,0-.074.063.247.247,0,0,0-.027.132,1.626,1.626,0,0,0,.064.355,1.592,1.592,0,0,0,.112.329.268.268,0,0,0,.094.11.142.142,0,0,0,.094.015.121.121,0,0,0,.078-.048.211.211,0,0,0,.028-.128,2.643,2.643,0,0,0-.186-.722.235.235,0,0,0-.093-.107A.116.116,0,0,0,20.739,15.072Z" style="fill:#00ff80"/><path d="M21.694,14.4a.3.3,0,0,1,.346.057,1.493,1.493,0,0,1,.325.7,1.521,1.521,0,0,1,.06.771.31.31,0,0,1-.27.228.446.446,0,0,1-.379-.137,1.31,1.31,0,0,1-.292-.617,1.341,1.341,0,0,1-.041-.7A.441.441,0,0,1,21.694,14.4Zm.072.273a.136.136,0,0,0-.072.069.315.315,0,0,0-.021.155,2.351,2.351,0,0,0,.084.427,2.31,2.31,0,0,0,.131.4.347.347,0,0,0,.1.135.13.13,0,0,0,.1.021.11.11,0,0,0,.076-.054.275.275,0,0,0,.022-.15,3.773,3.773,0,0,0-.224-.862.311.311,0,0,0-.1-.132A.1.1,0,0,0,21.766,14.674Z" style="fill:#00ff80"/><path d="M23.472,15.934l-.269.038-.379-1.439a.955.955,0,0,1-.257.392l-.087-.331a.841.841,0,0,0,.169-.26.874.874,0,0,0,.075-.383l.2-.089Z" style="fill:#00ff80"/><path d="M24.455,15.794l-.269.038-.429-1.625a1,1,0,0,1-.247.429l-.1-.376a.874.874,0,0,0,.162-.284,1.028,1.028,0,0,0,.064-.424l.2-.089Z" style="fill:#00ff80"/><path d="M24.636,13.117c.127-.055.249-.008.369.144a3.11,3.11,0,0,1,.416,1.034,3.143,3.143,0,0,1,.151,1.11c-.029.19-.111.294-.247.312s-.272-.059-.4-.231a2.855,2.855,0,0,1-.381-.95,2.871,2.871,0,0,1-.132-1.039A.437.437,0,0,1,24.636,13.117Zm.107.4a.124.124,0,0,0-.067.088.584.584,0,0,0,0,.221,5.218,5.218,0,0,0,.139.635,5.153,5.153,0,0,0,.184.6.66.66,0,0,0,.12.208.118.118,0,0,0,.1.04.1.1,0,0,0,.071-.072.528.528,0,0,0,0-.216,5.442,5.442,0,0,0-.144-.653,5.447,5.447,0,0,0-.189-.619.612.612,0,0,0-.119-.205A.093.093,0,0,0,24.743,13.522Z" style="fill:#00ff80"/><path d="M26.638,15.488l-.269.038-.54-2.039A1.151,1.151,0,0,1,25.6,14l-.126-.475a.99.99,0,0,0,.148-.337,1.436,1.436,0,0,0,.039-.515l.2-.088Z" style="fill:#00ff80"/><path d="M26.666,12.236c.127-.055.255.012.385.2a4.584,4.584,0,0,1,.478,1.268,4.62,4.62,0,0,1,.213,1.343c-.018.229-.1.352-.232.37s-.278-.081-.421-.3a4.284,4.284,0,0,1-.443-1.179,4.283,4.283,0,0,1-.194-1.272C26.468,12.438,26.539,12.291,26.666,12.236Zm.131.5q-.046.018-.064.1a.829.829,0,0,0,.009.266,7.856,7.856,0,0,0,.178.779q.143.541.221.738a.947.947,0,0,0,.134.258.119.119,0,0,0,.1.052q.048-.009.068-.085a.762.762,0,0,0-.008-.262,8.117,8.117,0,0,0-.182-.8q-.148-.557-.227-.757a.892.892,0,0,0-.133-.256Q26.843,12.714,26.8,12.732Z" style="fill:#00ff80"/><path d="M27.681,11.8c.127-.055.257.023.393.234a5.431,5.431,0,0,1,.509,1.385,5.467,5.467,0,0,1,.244,1.46c-.013.249-.088.381-.224.4s-.281-.092-.43-.328a5.11,5.11,0,0,1-.473-1.294,5.1,5.1,0,0,1-.225-1.388C27.486,12.008,27.555,11.851,27.681,11.8Zm.144.542q-.046.018-.062.106a.97.97,0,0,0,.015.289q.04.259.2.851t.24.807a1.112,1.112,0,0,0,.14.284q.057.067.106.059t.066-.091a.9.9,0,0,0-.014-.284q-.04-.26-.2-.867t-.245-.827a1.053,1.053,0,0,0-.14-.281Q27.871,12.32,27.825,12.338Z" style="fill:#00ff80"/><path d="M29.915,15.034l-.27.037-.706-2.661a1.478,1.478,0,0,1-.192.636l-.166-.625A1.248,1.248,0,0,0,28.708,12a2.214,2.214,0,0,0,0-.653l.2-.088Z" style="fill:#00ff80"/><path d="M29.712,10.921c.127-.054.263.043.409.294a7.345,7.345,0,0,1,.572,1.619A7.382,7.382,0,0,1,31,14.527c0,.288-.072.44-.209.458s-.286-.114-.447-.393a6.984,6.984,0,0,1-.535-1.524,6.944,6.944,0,0,1-.287-1.621C29.523,11.151,29.586,10.975,29.712,10.921Zm.168.633q-.046.018-.059.119a1.287,1.287,0,0,0,.027.334q.051.3.235.994t.277.946a1.484,1.484,0,0,0,.154.334q.06.08.109.071t.063-.1a1.2,1.2,0,0,0-.026-.33q-.051-.3-.239-1.011t-.282-.965a1.42,1.42,0,0,0-.153-.332Q29.926,11.536,29.88,11.553Z" style="fill:#00ff80"/><path d="M21.167,16.362a.422.422,0,0,1,.318.185,1.005,1.005,0,0,1-.277,1.03.42.42,0,0,1-.366,0,.59.59,0,0,1-.311-.261.808.808,0,0,1,.254-.893A.561.561,0,0,1,21.167,16.362Zm-.051.189a.175.175,0,0,0-.192.087,1.487,1.487,0,0,0-.155.567.216.216,0,0,0,.039.124.191.191,0,0,0,.084.058.145.145,0,0,0,.188-.069,1.666,1.666,0,0,0,.164-.6.189.189,0,0,0-.04-.121A.163.163,0,0,0,21.117,16.551Z" style="fill:#00ff80"/><path d="M22.376,16.548a.382.382,0,0,1,.311.212,1.024,1.024,0,0,1-.019.66,1.022,1.022,0,0,1-.315.581.38.38,0,0,1-.373.025.533.533,0,0,1-.3-.29,1.189,1.189,0,0,1,.309-1.1A.5.5,0,0,1,22.376,16.548Zm-.062.23a.167.167,0,0,0-.1.013.235.235,0,0,0-.1.1,2.219,2.219,0,0,0-.189.694.269.269,0,0,0,.033.147.167.167,0,0,0,.083.064.143.143,0,0,0,.1,0,.206.206,0,0,0,.094-.1,2.436,2.436,0,0,0,.2-.727.24.24,0,0,0-.034-.144A.141.141,0,0,0,22.314,16.778Z" style="fill:#00ff80"/><path d="M23.37,18.541l-.281-.11.328-1.225a1,1,0,0,1-.442.152l.075-.281a.881.881,0,0,0,.292-.1.68.68,0,0,0,.259-.238l.242.037Z" style="fill:#00ff80"/><path d="M24.793,16.919a.348.348,0,0,1,.3.266,1.751,1.751,0,0,1-.075.87,1.749,1.749,0,0,1-.371.791.345.345,0,0,1-.388.078.488.488,0,0,1-.288-.348,1.587,1.587,0,0,1,.067-.79,1.577,1.577,0,0,1,.354-.727A.457.457,0,0,1,24.793,16.919Zm-.084.312a.143.143,0,0,0-.107.025.353.353,0,0,0-.106.141,4.126,4.126,0,0,0-.257.948.408.408,0,0,0,.021.192.143.143,0,0,0,.08.075.12.12,0,0,0,.1-.011.318.318,0,0,0,.105-.137,4.418,4.418,0,0,0,.266-.981.374.374,0,0,0-.022-.189A.119.119,0,0,0,24.71,17.231Z" style="fill:#00ff80"/><path d="M25.649,19.43l-.281-.11.428-1.6a1.033,1.033,0,0,1-.462.227l.1-.371a.9.9,0,0,0,.3-.151.93.93,0,0,0,.281-.321l.242.037Z" style="fill:#00ff80"/><path d="M27.211,17.291a.344.344,0,0,1,.282.319,2.692,2.692,0,0,1-.131,1.08,2.69,2.69,0,0,1-.427,1,.34.34,0,0,1-.4.13.487.487,0,0,1-.273-.405,2.494,2.494,0,0,1,.122-1,2.47,2.47,0,0,1,.41-.937A.451.451,0,0,1,27.211,17.291Zm-.106.394a.133.133,0,0,0-.11.036.509.509,0,0,0-.117.182,6.622,6.622,0,0,0-.325,1.2.591.591,0,0,0,.009.237.133.133,0,0,0,.077.086.11.11,0,0,0,.107-.023.465.465,0,0,0,.116-.178,4.639,4.639,0,0,0,.2-.619,4.658,4.658,0,0,0,.136-.615.552.552,0,0,0-.01-.235A.11.11,0,0,0,27.105,17.685Z" style="fill:#00ff80"/><path d="M27.927,20.32l-.281-.11.528-1.971a1.134,1.134,0,0,1-.482.3l.123-.46a.972.972,0,0,0,.317-.2,1.248,1.248,0,0,0,.3-.4l.242.037Z" style="fill:#00ff80"/><path d="M28.953,20.721l-.281-.11.573-2.139a1.2,1.2,0,0,1-.491.336l.134-.5a1.02,1.02,0,0,0,.323-.22,1.413,1.413,0,0,0,.314-.44l.242.037Z" style="fill:#00ff80"/><path d="M30.717,17.83c.151.023.238.155.262.4a4.436,4.436,0,0,1-.213,1.385,4.434,4.434,0,0,1-.509,1.307c-.14.195-.28.263-.422.207s-.226-.22-.25-.489a4.194,4.194,0,0,1,.2-1.3,4.143,4.143,0,0,1,.492-1.241C30.42,17.9,30.566,17.807,30.717,17.83Zm-.137.513a.132.132,0,0,0-.115.053.8.8,0,0,0-.133.241,7.587,7.587,0,0,0-.244.791,7.539,7.539,0,0,0-.18.779.93.93,0,0,0-.009.3.131.131,0,0,0,.073.1.108.108,0,0,0,.111-.039.742.742,0,0,0,.132-.237,7.8,7.8,0,0,0,.248-.806,7.835,7.835,0,0,0,.185-.8.884.884,0,0,0,.008-.3Q30.633,18.353,30.58,18.343Z" style="fill:#00ff80"/>',
"EditorConfig": '<path d="M8.709,18.351a1.267,1.267,0,0,0,.532-1.379C8.692,17.207,8.718,17.749,8.709,18.351Z" style="fill:#e3e3f8"/><path d="M14.924,19.852a.871.871,0,0,0,.62-1.135A1.43,1.43,0,0,0,14.924,19.852Z" style="fill:#e3e3f8"/><path d="M2.713,27.079a1.538,1.538,0,0,0,.524,1.353c1.414.794,6.372.175,8.056-.2a14.994,14.994,0,0,0,2.426-1.213,22.643,22.643,0,0,0,4.713-2.557c1.082-.794,2.8-3.029,2.985-4.364l-1.475-.332c-.035,1.5-.375,1.842-1.711,2.191a10.662,10.662,0,0,1-3.57.14,3.362,3.362,0,0,1-2.313-1.562c-1.065-1.414.236-2.4-1.449-2.5-1.772,2.173-4.9.611-6.267.393a30.066,30.066,0,0,0-1.938,7.6,2.748,2.748,0,0,1,2.138.323c2.688,1.039.34,1.955-.733,1.685C3.368,27.864,3.141,27.384,2.713,27.079Z" style="fill:#fdfdfd"/><path d="M6.231,14.537a11.539,11.539,0,0,1,2.985,1.126c1.51.751,1.781.646,1.92,1.693.017.192-.017.3.532.471.925.288-.532-.227,1.946-.218A16.64,16.64,0,0,1,19.559,18.9c.454.288.367.655,1.9.611a18.767,18.767,0,0,0-1.2-6.162c-.864-2.007-2.007-2.313-4.338-3.064-1.362-.436-5.359-.916-6.6-.148-1.161.724-1.379,1.589-2.461,3.107A5.366,5.366,0,0,0,6.231,14.537Z" style="fill:#fdfdfd"/><path d="M15.84,18.246c.873.358-.044,2.671-1.257,2.112-.393-1.108.541-1.737.794-2.234a8.51,8.51,0,0,0-2.461-.148c-.576.218-.707,1.449-.41,2.025,1.4,2.741,7.567,2.156,6.913.026-.262-.864-.506-1-1.388-1.3A6.885,6.885,0,0,0,15.84,18.246Z" style="fill:#fdfdfd"/><path d="M4.869,17.941c.7.672,2.278.777,3.3.829C8.3,17.417,8.413,16.4,9.5,16.483a1.6,1.6,0,0,1-.305,2.13,1.386,1.386,0,0,0,1.362-1.763,14.542,14.542,0,0,0-4.46-1.894A9.506,9.506,0,0,0,4.869,17.941Z" style="fill:#fdfdfd"/><path d="M3.228,26.581c.576-.052,2.077.384,2.2.873C4.494,27.568,3.307,27.48,3.228,26.581Zm-.515.5c.428.305.655.786,1.388.96,1.074.271,3.421-.646.733-1.685A2.748,2.748,0,0,0,2.7,26.032a30.066,30.066,0,0,1,1.938-7.6c1.37.218,4.495,1.781,6.267-.393,1.685.1.384,1.082,1.449,2.5A3.362,3.362,0,0,0,14.662,22.1a10.662,10.662,0,0,0,3.57-.14c1.335-.349,1.676-.69,1.711-2.191l1.475.332c-.183,1.335-1.9,3.57-2.985,4.364a22.643,22.643,0,0,1-4.713,2.557,14.994,14.994,0,0,1-2.426,1.213c-1.685.375-6.642,1-8.056.2A1.538,1.538,0,0,1,2.713,27.079Zm12.211-7.227a1.43,1.43,0,0,1,.62-1.135A.871.871,0,0,1,14.924,19.852Zm.916-1.606a6.885,6.885,0,0,1,2.191.48c.882.3,1.126.436,1.388,1.3.655,2.13-5.516,2.714-6.913-.026-.3-.576-.166-1.807.41-2.025a8.51,8.51,0,0,1,2.461.148c-.253.5-1.187,1.126-.794,2.234C15.8,20.917,16.713,18.6,15.84,18.246Zm-7.131.1c.009-.6-.017-1.143.532-1.379A1.267,1.267,0,0,1,8.709,18.351Zm-3.84-.41a9.506,9.506,0,0,1,1.222-2.985,14.542,14.542,0,0,1,4.46,1.894A1.386,1.386,0,0,1,9.19,18.613a1.6,1.6,0,0,0,.305-2.13c-1.082-.079-1.2.934-1.327,2.287C7.147,18.717,5.567,18.613,4.869,17.941ZM4,17.242c-.323-.89-.323-2.278,1.047-2.392l-.7,1.946C4.162,17.216,4.162,17.12,4,17.242Zm2.234-2.706a5.366,5.366,0,0,1,.628-1.292c1.082-1.519,1.3-2.383,2.461-3.107,1.239-.768,5.237-.288,6.6.148,2.33.751,3.474,1.056,4.338,3.064a18.767,18.767,0,0,1,1.2,6.162c-1.536.044-1.449-.323-1.9-.611a16.64,16.64,0,0,0-5.944-1.292c-2.479-.009-1.021.506-1.946.218-.55-.175-.515-.279-.532-.471-.14-1.047-.41-.943-1.92-1.693A11.539,11.539,0,0,0,6.231,14.537Zm15.449-.428c-.166-.55.14-.515.672-.89a9.021,9.021,0,0,1,.925-.655c1.405-.786,4.024-.916,5.141.017A2.479,2.479,0,0,1,29.5,14.65a5.838,5.838,0,0,1-2.618,3.832,5.213,5.213,0,0,1-4.783,1.2c-.157-.384-.035-2.819-.218-3.718-.166-.8-.079-.89.384-1.37,1.362-1.414,4.312-2.444,5.988-1.231.707.524.506.724.873,1.126.454-.489-.393-2.13-3.517-2.025C23.486,12.529,22.57,14.187,21.68,14.109ZM8.971,9.143a8.094,8.094,0,0,1,2.278-4.6C12.6,3.5,14.016,2.509,16.094,3.687c.515.288.489.436.541,1.152a3.312,3.312,0,0,1-.192,1.5c-1.379,4.451-2.531,1.894-6.948,2.95a6.374,6.374,0,0,1,2.121-3.413c1.2-1.161,2.06-1.911,3.858-1.667a1.842,1.842,0,0,1-.052,2.322c-.8,1.292-1,1.213-.882,2.095.628-.157.82-.768,1.108-1.379,1.754-3.666-.794-4.111-2.357-3.439A10.372,10.372,0,0,0,9.766,7.554c-.122.244-.253.559-.367.829Zm6.913.183C16.067,8.235,17.15,7.964,17.15,4.6c0-1.449-1.781-2.749-4.111-1.781-2,.82-2.3,1.449-3.369,3.055-1,1.519-.969,3.186-1.833,4.591-.253.4-.48.541-.759.943-.2.3-.349.672-.55,1.021A12.94,12.94,0,0,0,5.367,14.4c-1.047.026-1.929.044-2.034,1.126-.14,1.484.559,1.85.559,2.409-.009.6-2.453,6.677-1.772,10.3.192,1,.847,1,1.894,1.126a17.93,17.93,0,0,0,8.056-.707l4.1-1.964a18.85,18.85,0,0,0,3.561-2.5,12.383,12.383,0,0,0,1.309-1.719,3.213,3.213,0,0,0,.8-2.208,8.473,8.473,0,0,1,2.985,1c-.061.6-.358.314-.358.855a1.355,1.355,0,0,0,1.047-.89c-.358-.524-.733-.436-1.248-.855a8.212,8.212,0,0,1,1.719-.707c1.222-.506,3.308-2.042,3.823-3.439a4.449,4.449,0,0,0-.559-3.736,5.444,5.444,0,0,0-3.648-1.161c-1.58,0-3.212,1.135-4.486,1.623-.489-.428-.524-.916-.882-1.388A12.281,12.281,0,0,0,15.884,9.326Z" style="fill:#020202"/><path d="M21.68,14.109c.89.079,1.807-1.58,3.928-1.65,3.125-.1,3.971,1.536,3.517,2.025-.367-.4-.166-.6-.873-1.126-1.676-1.213-4.626-.183-5.988,1.231-.463.48-.55.567-.384,1.37.183.9.061,3.334.218,3.718a5.213,5.213,0,0,0,4.783-1.2A5.838,5.838,0,0,0,29.5,14.65a2.479,2.479,0,0,0-1.082-2.069c-1.117-.934-3.736-.8-5.141-.017a9.021,9.021,0,0,0-.925.655C21.819,13.594,21.514,13.559,21.68,14.109Z" style="fill:#fdf2f2"/><path d="M8.971,9.143,9.4,8.383c.113-.271.244-.585.367-.829A10.372,10.372,0,0,1,13.292,3.81c1.562-.672,4.111-.227,2.357,3.439-.288.611-.48,1.222-1.108,1.379-.122-.882.079-.8.882-2.095a1.842,1.842,0,0,0,.052-2.322c-1.8-.244-2.662.506-3.858,1.667A6.374,6.374,0,0,0,9.5,9.291c4.416-1.056,5.569,1.5,6.948-2.95a3.312,3.312,0,0,0,.192-1.5c-.052-.716-.026-.864-.541-1.152-2.077-1.178-3.491-.192-4.844.855A8.094,8.094,0,0,0,8.971,9.143Z" style="fill:#fef3f3"/><path d="M4,17.242c.166-.122.166-.026.349-.445l.7-1.946C3.673,14.964,3.673,16.352,4,17.242Z" style="fill:#efefef"/><path d="M5.428,27.454c-.122-.489-1.623-.925-2.2-.873C3.307,27.48,4.494,27.568,5.428,27.454Z" style="fill:#faf1f1"/>',
"EJS": '<path d="M2,17.672V14.328l11.86-6.2V11.2L5.1,15.939l8.762,4.835v3.1Zm27.814-8.88L19.465,23.229H15.912L26.281,8.791ZM26.947,21.5a.794.794,0,0,0,.619-.278,1.061,1.061,0,0,0,.248-.732,1.141,1.141,0,0,0-.248-.753.768.768,0,0,0-1.217,0,1.141,1.141,0,0,0-.248.753,1.09,1.09,0,0,0,.237.732A.763.763,0,0,0,26.947,21.5Zm2.186,1.042a3.237,3.237,0,0,1-4.352-.01,2.864,2.864,0,0,1,0-4.1,3.223,3.223,0,0,1,4.352,0A2.773,2.773,0,0,1,30,20.486,2.74,2.74,0,0,1,29.134,22.538ZM18.821,13.061a.794.794,0,0,0,.619-.278,1.061,1.061,0,0,0,.248-.732,1.141,1.141,0,0,0-.248-.753.769.769,0,0,0-1.217,0,1.141,1.141,0,0,0-.248.753,1.09,1.09,0,0,0,.237.732A.763.763,0,0,0,18.821,13.061ZM21.007,14.1a3.237,3.237,0,0,1-4.352-.01,2.864,2.864,0,0,1,0-4.1,3.223,3.223,0,0,1,4.352,0,2.773,2.773,0,0,1,.866,2.063A2.74,2.74,0,0,1,21.007,14.1Z" style="fill:#90a93a"/>',
"Elixir": '<defs><linearGradient id="a" x1="17.249" y1="-335.597" x2="14.973" y2="-309.994" gradientTransform="matrix(1, 0, 0, -1, 0, -306)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset="0.01" stop-color="#f7f6f8" stop-opacity="0.04"/><stop offset="0.09" stop-color="#aa9cb3" stop-opacity="0.39"/><stop offset="0.2" stop-color="#6f567e" stop-opacity="0.66"/><stop offset="0.32" stop-color="#452459" stop-opacity="0.86"/><stop offset="0.5" stop-color="#2d0843" stop-opacity="0.97"/><stop offset="1" stop-color="#26003d"/></linearGradient></defs><title>file_type_elixir</title><path d="M17.8,8.591c2.079,4.584,7.64,6.5,7.141,12.474-.582,7.017-5.551,8.784-8.316,8.909a8.815,8.815,0,0,1-9.4-7.485C5.618,15.046,12.655,3.632,16.709,2A15.083,15.083,0,0,0,17.8,8.591Zm-.166,18.857a.423.423,0,0,0-.057-.327c-.593-1.1-5.81-1.645-6.907-1.752a8.272,8.272,0,0,0,1.635,1.3,7.766,7.766,0,0,0,2.814,1.041C15.922,27.831,17.467,27.933,17.635,27.447Z" style="fill:#7c648f"/><g style="opacity:0.25"><path d="M18.248,10.618c4.47,4.823,6.445,4.979,6.237,10.478-.249,6.476-4.543,8.191-7.058,8.42-4.2.551-7.495-1.528-8.358-5.686C7.312,17.063,12.978,6.023,16.637,4.36A15.323,15.323,0,0,0,18.258,10.6Z" style="fill:#26003d"/></g><g style="opacity:0.75"><path d="M17.385,9.921C20.369,14,24.319,13.7,25,19.641c.094,6.923-3.6,9.283-6.237,9.948-4.5,1.279-8.514-.645-10.094-5-3.035-7,2.651-18.514,6.31-20.915a15.083,15.083,0,0,0,2.37,6.237Z" style="fill:url(#a)"/></g>',
"Elm": '<path d="M16,16.768,2.768,30H29.232Z" style="fill:#5fb4cb"/><path d="M24.13,23.362,30,29.232V17.492Z" style="fill:#eea400"/><path d="M15.232,16,2,2.768V29.232Z" style="fill:#596277"/><path d="M30,14.448V2H17.552Z" style="fill:#5fb4cb"/><path d="M23.392,9.376l6.594,6.594-6.624,6.624L16.768,16ZM2.768,2,8.863,8.1H22.111L16.016,2Z" style="fill:#8cd636"/><path d="M16,15.232l6.051-6.051H9.949Z" style="fill:#eea400"/>',
"ERB": '<path d="M7.25,24.75h17.5L12.5,12.5,7.25,17.75ZM2,30H30V2H16L2,16Zm25.375-2.625H4.625v-10.5l12.25-12.25h10.5Z" style="fill:#921a1e"/>',
"Erlang": '<path d="M6.388,23.867a11.012,11.012,0,0,1-3.441-8.234,10.765,10.765,0,0,1,2.864-7.5H2v15.73Zm20.066,0a16.44,16.44,0,0,0,2.537-3.136l-4.218-1.873a8.306,8.306,0,0,1-6.641,4.12c-4.359-.014-6.072-3.329-6.063-7.584H28.36a6.465,6.465,0,0,0,0-.935,9.057,9.057,0,0,0-2.029-6.326H30v15.73H26.456ZM12.332,11.742a3.723,3.723,0,0,1,3.9-3.23,3.29,3.29,0,0,1,3.532,3.23Z" style="fill:#a2003e"/>',
"F#": '<path d="M2,16,15.288,2.712V9.356L8.644,16l6.644,6.644v6.644Z" style="fill:#378bba"/><path d="M10.542,16l4.746-4.746v9.492Z" style="fill:#378bba"/><path d="M30,16,16.237,2.712V9.356L22.881,16l-6.644,6.644v6.644Z" style="fill:#30b9db"/>',
"Firestore security rules": '<path d="M5.8,24.6l.17-.237L13.99,9.149l.017-.161-3.535-6.64a.656.656,0,0,0-1.227.207Z" style="fill:#ffc24a"/><path d="M5.9,24.42l.128-.25L13.965,9.114,10.439,2.448a.6.6,0,0,0-1.133.206Z" style="fill:#ffa712"/><path d="M16.584,14.01l2.632-2.7L16.583,6.289a.678.678,0,0,0-1.195,0L13.981,8.971V9.2Z" style="fill:#f4bd62"/><path d="M16.537,13.9,19.1,11.28,16.537,6.4a.589.589,0,0,0-1.074-.047L14.049,9.082l-.042.139Z" style="fill:#ffa50e"/><polygon points="5.802 24.601 5.879 24.523 6.158 24.41 16.418 14.188 16.548 13.834 13.989 8.956 5.802 24.601" style="fill:#f6820c"/><path d="M16.912,29.756,26.2,24.577,23.546,8.246A.635.635,0,0,0,22.471,7.9L5.8,24.6l9.233,5.155a1.927,1.927,0,0,0,1.878,0" style="fill:#fde068"/><path d="M26.115,24.534,23.483,8.326a.557.557,0,0,0-.967-.353L5.9,24.569l9.131,5.1a1.912,1.912,0,0,0,1.863,0Z" style="fill:#fcca3f"/><path d="M16.912,29.6a1.927,1.927,0,0,1-1.878,0L5.876,24.522,5.8,24.6l9.233,5.155a1.927,1.927,0,0,0,1.878,0L26.2,24.577l-.023-.14Z" style="fill:#eeab37"/><polygon points="23.201 13 15.405 16.534 15.405 27.603 21.625 24.785 21.625 31 31 26.743 31 16.534 23.201 13" style="fill:#252525"/><polygon points="23.201 14.73 16.985 17.549 16.985 20.327 23.201 17.507 29.421 20.327 29.421 17.549 23.201 14.73" style="fill:#fff"/><polygon points="23.201 19.564 16.985 22.381 16.985 25.158 23.201 22.337 29.421 25.158 29.421 22.381 23.201 19.564" style="fill:#fff"/><polygon points="28.606 26.098 25.551 24.712 23.201 25.778 23.201 28.548 28.606 26.098" style="fill:#fff"/>',
"Flow": '<defs><linearGradient id="a" x1="-67.907" y1="-308.551" x2="-67.857" y2="-308.564" gradientTransform="matrix(87.822, 0, 0, -88.533, 5984.532, -27290.617)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd441"/><stop offset="1" stop-color="#ffb047"/></linearGradient><linearGradient id="b" x1="-67.674" y1="-310.121" x2="-67.647" y2="-310.063" gradientTransform="matrix(87.822, 0, 0, -88.533, 5964.667, -27443)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd754"/><stop offset="1" stop-color="#ffb532"/></linearGradient><linearGradient id="c" x1="-67.029" y1="-310.91" x2="-67.029" y2="-310.86" gradientTransform="matrix(87.822, 0, 0, -88.533, 5902.8, -27518.733)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd642"/><stop offset="0" stop-color="#ffd441"/><stop offset="1" stop-color="#ffb532"/></linearGradient><linearGradient id="d" x1="-66.252" y1="-310.377" x2="-66.32" y2="-310.362" gradientTransform="matrix(106.198, 0, 0, -88.551, 7048.428, -27474.167)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd441"/><stop offset="1" stop-color="#ffa829"/></linearGradient></defs><title>file_type_flow</title><path d="M23.426,29.41V22.172h-7.18l7.18,7.238" style="fill:#ffdf51;fill-opacity:0.699999988079071"/><path d="M24.231,25.306V17.477H16.466l7.766,7.829" style="fill:#ff8900;fill-opacity:0.699999988079071"/><path d="M19.515,22.171V30h7.766l-7.766-7.829" style="fill-opacity:0.699999988079071;fill:url(#a)"/><path d="M22.608,18V11.809H16.466L22.608,18" style="fill:#ffdf4f;fill-opacity:0.699999988079071"/><path d="M25.524,16.525V8.7H17.759l7.766,7.829" style="fill-opacity:0.799999952316284;fill:url(#b)"/><path d="M12.288,2V9.829h7.766L12.288,2" style="fill-opacity:0.800000011920929;fill:url(#c)"/><path d="M14.11,14.262V6.433H4.719l7.732,7.83,1.659,0" style="fill-opacity:0.879999995231628;fill:url(#d)"/><path d="M14.11,29.958V20.487H4.719l9.391,9.471" style="fill:#ffb700;fill-opacity:0.699999988079071"/><path d="M14.112,22.114V14.285H6.346l7.766,7.829" style="fill:#ffb700;fill-opacity:0.5"/><path d="M16.465,11.809v7.829h7.766l-7.766-7.829" style="fill:#ffcd25;fill-opacity:0.699999988079071"/><path d="M14.092,12.691V4.862H6.326l7.766,7.829" style="fill:#ff8900;fill-opacity:0.700000047683716"/><path d="M16.246,22.171V30h7.766l-7.766-7.829" style="fill:#ff8900;fill-opacity:0.699999988079071"/><polygon points="21.122 22.172 18.609 19.638 16.465 19.638 16.466 11.809 20.847 11.809 18.882 9.829 14.092 9.829 14.11 14.262 14.11 20.487 14.11 30 16.246 30 16.246 22.172 21.122 22.172" style="fill:#fff"/>',
"Fortran": '<g id="g3768"><rect id="rect881" x="2.34" y="2.34" width="27.33" height="27.33" rx="5.08" style="fill:#734f96"/><path id="path1412" d="M6.06,25.5c0-1.09,0-1.19.1-1.19l1.25-.06c1,0,1.18-.06,1.42-.19a.74.74,0,0,0,.39-.37c.12-.23.12-.29.12-7.72,0-7,0-7.5-.1-7.67a1.06,1.06,0,0,0-.63-.5,10.23,10.23,0,0,0-1.38-.1l-1.17,0V5.32H25.94v8.82H24.89a8.56,8.56,0,0,1-1.2-.05c-.14,0-.15-.05-.22-.95a12.73,12.73,0,0,0-.35-2.43,3.22,3.22,0,0,0-2.63-2.81c-.57-.1-3.1-.2-5.19-.2H13.87v6.63l.75,0A6.33,6.33,0,0,0,16.49,14a1.88,1.88,0,0,0,.89-.91,5.86,5.86,0,0,0,.39-1.75c0-.33.08-.66.1-.73s0-.13,1.18-.13H20.2V21.06H17.85l0-.61a7.85,7.85,0,0,0-.54-2.66c-.36-.68-1.05-1-2.45-1.08l-.76-.07-.2,0,0,3.34c0,3.51,0,3.65.3,3.94s.43.32,3.22.42c.05,0,.07.28.07,1.19v1.18H6.06Z" style="fill:#fff"/></g>',
"FreeMarker Template Language": '<path d="M24.023,20.9,25.408,23l4.615-7L25.408,9l-1.385,2.1L27.255,16Z" style="fill:#0050b2"/><path d="M7.977,11.1,6.592,9,1.977,16l4.615,7,1.385-2.1L4.745,16Z" style="fill:#0050b2"/><path d="M13.035,9h2.8l-.494,2.8h2.8L18.635,9h2.8l-.494,2.8h2.8l-.495,2.8h-2.8l-.493,2.8h2.8l-.494,2.8h-2.8L18.967,23h-2.8l.493-2.8-2.8,0L13.375,23H10.567l.493-2.8-2.8,0,.494-2.8h2.8l.493-2.793h-2.8L9.741,11.8h2.8Zm1.319,8.4h2.8l.494-2.8h-2.8Z" style="fill:#0050b2"/>',
"GameMaker Language": '<path d="M14.216,24.167h-.989a3.24,3.24,0,0,1-2.811-1.649L6.667,16l4.681-8.167H16.2l-4.34,8.176.057.032L13.936,19.5H16.82ZM8.455,10.535l-1.27-2.21a1,1,0,0,0-.859-.492H2l4,6.992ZM21.54,9.482a3.239,3.239,0,0,0-2.812-1.649H17.523L15.045,12.5H18.02L20.083,16l-4.531,8.167h5.056L25.333,16ZM26,17.172l-2.47,4.27,1.283,2.233a1,1,0,0,0,.859.492H30Z" style="fill:#8bc34a"/>',
"G-code": '<path d="M17.333,16.356h0L17.309,20.8l-2.1-1.018.023-4.437h0l10.558-3.038,2.106,1.013Z" style="fill:#8e0000"/><path d="M24.492,18.576a14.909,14.909,0,0,1-1.343,3.074,7.86,7.86,0,0,1-1.39,1.829,6.8,6.8,0,0,1-1.7,1.324,7.405,7.405,0,0,1-2.006.855,6,6,0,0,1-3.072.23A4.668,4.668,0,0,1,12.44,24.64a5.322,5.322,0,0,1-.636-.629l-.508-.244a4.717,4.717,0,0,0,.457.181,5.52,5.52,0,0,1-1.015-1.758,8.135,8.135,0,0,1-.43-1.533c-.023-.131-.043-.239-.061-.34a7.292,7.292,0,0,0,.377,1.354,5.836,5.836,0,0,0,1.614,2.319c.06.054.127.1.19.148.04.008.078.022.119.029a6.454,6.454,0,0,0,2.928-.219,8.4,8.4,0,0,0,1.91-.807,7.658,7.658,0,0,0,1.589-1.227,8.662,8.662,0,0,0,1.29-1.69,12.667,12.667,0,0,0,1.019-2.194L23.3,19c.056-.153.091-.254.091-.254Z" style="fill:#8e0000"/><path d="M24.524,4.013a11.6,11.6,0,0,0-6.588-1.994,13.8,13.8,0,0,0-9.373,4.84A18.243,18.243,0,0,0,4,18.8c.021,3.851,1.481,7.806,5.112,9.575a13.563,13.563,0,0,0,4.159,1.564,12.114,12.114,0,0,0,6.869-1.529c-2.734,1.333-6.12,1.993-8.894.4-2.689-1.543-3.983-4.724-4.221-7.7-.512-6.4,3.1-13.64,9.132-16.281,3.512-1.537,7.307-1.585,10.239,1.1C26.727,5.244,25,4.305,24.524,4.013Zm-14.359,24.8-.138-.093Z" style="fill:#8e0000"/><path d="M22.529,26.788c-3.044,2.582-7.92,4.149-11.554,1.857C7.24,26.289,6.53,21.089,7.212,17.083a17.218,17.218,0,0,1,6.7-10.97c3.771-2.636,8.88-3.49,12.489-.182l-2.27,3.291c-2.51-2.355-6.3-1.956-8.945-.052A12.434,12.434,0,0,0,10.5,16.2c-.662,2.623-.5,6.011,1.5,8.047,2.088,2.129,5.112,2.116,7.656.8A10.334,10.334,0,0,0,24.5,18.636L17.307,20.8l.022-4.438L27.89,13.319l.1.806h0A16.625,16.625,0,0,1,22.529,26.788Z" style="fill:#ba0000"/>',
"GDScript": '<path d="M28.166,21.029v1.652a.374.374,0,0,1-.26.357l-2.6.841a.367.367,0,0,1-.335-.054.374.374,0,0,1-.155-.3v-1.8l-2.438.464V24.02a.375.375,0,0,1-.325.371l-3.525.483c-.016,0-.034,0-.051,0A.374.374,0,0,1,18.1,24.5V22.557l-1.819.008h-.267l-1.819-.008V24.5a.375.375,0,0,1-.375.376c-.017,0-.034,0-.052,0l-3.525-.483a.375.375,0,0,1-.324-.371V22.184l-2.439-.464v1.8a.374.374,0,0,1-.154.3.37.37,0,0,1-.336.054l-2.6-.841a.374.374,0,0,1-.259-.357V21.029l-1.608-.541a4.558,4.558,0,0,0-.124,1.04c0,4.317,6.082,7.65,13.6,7.674h.019c7.517-.024,13.6-3.356,13.6-7.674a4.54,4.54,0,0,0-.1-.95Z" fill="#478cbf"/><path d="M3.711,13.373V20.1l.907.306a.374.374,0,0,1,.256.355v1.65l1.855.6V21.267a.376.376,0,0,1,.445-.369l3.189.609a.374.374,0,0,1,.305.368v1.818l2.775.379v-1.89a.374.374,0,0,1,.376-.375h0l2.327.009,2.326-.009a.374.374,0,0,1,.377.375v1.89l2.775-.379V21.874a.373.373,0,0,1,.3-.368l3.189-.609a.377.377,0,0,1,.446.369v1.741l1.855-.6V20.76a.374.374,0,0,1,.255-.355l.618-.208V13.373h.017A26.792,26.792,0,0,0,30,10.931a19.02,19.02,0,0,0-2.509-3.288A24.507,24.507,0,0,0,25,9.091a13.01,13.01,0,0,0-1.279-1.052,15.365,15.365,0,0,0-1.375-.894,28.353,28.353,0,0,0,.232-3.071A15.968,15.968,0,0,0,18.847,2.8a26.44,26.44,0,0,0-1.385,2.7,9.46,9.46,0,0,0-1.453-.116h-.018a9.457,9.457,0,0,0-1.454.116,26.275,26.275,0,0,0-1.385-2.7A15.961,15.961,0,0,0,9.422,4.075a28.142,28.142,0,0,0,.232,3.071,15.312,15.312,0,0,0-1.376.894A13.06,13.06,0,0,0,7,9.091a24.553,24.553,0,0,0-2.49-1.448A19.02,19.02,0,0,0,2,10.931a26.792,26.792,0,0,0,1.694,2.443Z" fill="#478cbf"/><path d="m12.462 16.6a2.739 2.739 0 1 1-2.74-2.738 2.739 2.739 0 0 1 2.74 2.738" fill="#fff"/><path d="m11.8 16.764a1.819 1.819 0 1 1-1.819-1.819 1.817 1.817 0 0 1 1.819 1.819" fill="#414042"/><path d="M16.166,19.59a.844.844,0,0,1-.882-.8V16.267a.886.886,0,0,1,1.764,0v2.522a.845.845,0,0,1-.883.8" fill="#fff"/><path d="m19.871 16.6a2.739 2.739 0 1 0 2.74-2.738 2.739 2.739 0 0 0-2.74 2.738" fill="#fff"/><path d="m20.531 16.764a1.818 1.818 0 1 0 1.817-1.819 1.817 1.817 0 0 0-1.817 1.819" fill="#414042"/>',
"Git": '<path d="M29.472,14.753,17.247,2.528a1.8,1.8,0,0,0-2.55,0L12.158,5.067l3.22,3.22a2.141,2.141,0,0,1,2.712,2.73l3.1,3.1a2.143,2.143,0,1,1-1.285,1.21l-2.895-2.895v7.617a2.141,2.141,0,1,1-1.764-.062V12.3a2.146,2.146,0,0,1-1.165-2.814L10.911,6.314,2.528,14.7a1.8,1.8,0,0,0,0,2.551L14.753,29.472a1.8,1.8,0,0,0,2.55,0L29.472,17.3a1.8,1.8,0,0,0,0-2.551" style="fill:#dd4c35"/><path d="M12.158,5.067l3.22,3.22a2.141,2.141,0,0,1,2.712,2.73l3.1,3.1a2.143,2.143,0,1,1-1.285,1.21l-2.895-2.895v7.617a2.141,2.141,0,1,1-1.764-.062V12.3a2.146,2.146,0,0,1-1.165-2.814L10.911,6.314" style="fill:#fff"/>',
"GLSL": '<path d="M7.779,18.923A2.333,2.333,0,0,1,5.4,17.16c.306,1.462,1.961,2.892,7.183,3.529a14.228,14.228,0,0,0,9.232-1.612s.733-.322.293.176c0,0-3.107,2.873-9.2,2.9S1.97,19.107,2,16c-.029-3.107,4.806-6.185,10.9-6.155s9.2,2.9,9.2,2.9c.44.5-.293.176-.293.176-1.084-.7-4.286-2.089-9.232-1.612-4.866.469-6.453,2.122-6.981,3.235a3.254,3.254,0,0,0-.318,1.24,2.424,2.424,0,0,1,2.5-2.316A2.507,2.507,0,0,1,10.3,16.195,2.506,2.506,0,0,1,7.779,18.92Zm19.647-1.074H30v.937H26.344V13.609h1.082v4.24ZM23.454,16h2.163v2.791H24.9l-.108-.649a1.9,1.9,0,0,1-1.614.786,2.414,2.414,0,0,1-2.379-2.711,2.485,2.485,0,0,1,2.531-2.74A2.053,2.053,0,0,1,25.6,15.217H24.515a1.136,1.136,0,0,0-1.132-.851c-.771,0-1.485.534-1.485,1.86,0,1.413.771,1.781,1.506,1.781a1.28,1.28,0,0,0,1.254-1.139h-1.2V16ZM7.781,14.1a1.86,1.86,0,0,0-1.8,2.105,1.86,1.86,0,0,0,1.8,2.105,1.86,1.86,0,0,0,1.8-2.105A1.86,1.86,0,0,0,7.781,14.1Zm2.911,1.383h.525v.468h.013a1.12,1.12,0,0,1,.987-.563,1.565,1.565,0,0,1,1.506,1.677,1.675,1.675,0,0,1-1.583,1.824,1,1,0,0,1-.88-.443h-.013V20.1h-.557V15.479ZM12.1,18.4c.608,0,1.019-.527,1.019-1.254,0-.424-.171-1.264-1.032-1.264-.8,0-.893.867-.893,1.406,0,.88.551,1.114.905,1.114Zm5-.652a1.378,1.378,0,0,1-1.488,1.133,1.487,1.487,0,0,1-1.482-1.658c0-1.025.494-1.842,1.588-1.842.956,0,1.424.76,1.424,1.931H14.721c0,.69.323,1.089.962,1.089a.841.841,0,0,0,.854-.652H17.1Zm-.59-.88c-.032-.513-.247-.987-.924-.987a.972.972,0,0,0-.918.987h1.842Zm3.713,1.917h-.557V16.751c0-.576-.165-.867-.709-.867-.317,0-.874.2-.874,1.1v1.8h-.557V15.479h.525v.468h.013a1.2,1.2,0,0,1,1-.563,1.046,1.046,0,0,1,1.158,1.152v2.253" style="fill:#4386b5"/>',
"Go module": '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 254.5 225"><title>file_type_go_package</title><path d="M61.949,13.068c16.06-.147,32.143,0,48.211-.062-3.81,16.408-7.466,32.862-11.261,49.277H25.548c-2.319,0-4.637.077-6.956-.093C33,45.775,47.566,29.5,61.949,13.068Z" style="fill:#f2e6c9"/><path d="M143.509,13.014h48.072c14.437,16.431,29.013,32.723,43.411,49.177-9.274.193-18.549,0-27.823.085H154.654C151.006,45.837,147.111,29.46,143.509,13.014Z" style="fill:#f2e6c9"/><path d="M110.16,13.014h33.349c3.6,16.446,7.489,32.823,11.16,49.254H98.9C102.694,45.868,106.35,29.422,110.16,13.014Z" style="fill:#efc75e"/><path d="M18.592,62.183c2.319.17,4.637.085,6.956.093H98.9q0,26.026.054,52.052a18.857,18.857,0,0,0,1.979.139h52.114a14.693,14.693,0,0,0,1.546-.108c.147-17.366,0-34.732.07-52.1h52.516c9.274-.046,18.549.108,27.823-.085V212.62H18.6Q18.592,137.405,18.592,62.183Z" style="fill:#e7bf55"/><path d="M98.9,62.291h55.769c-.062,17.366.085,34.732-.07,52.1-.518.054-1.036.093-1.546.108H100.94a18.857,18.857,0,0,1-1.971-.131C98.861,96.993,98.969,79.634,98.9,62.291Z" style="fill:#dbb551"/><rect x="34.389" y="163.682" width="72.417" height="27.885" style="fill:#f2f2f2"/><path d="M61.422,137.085c-.388,0-.487-.194-.291-.487l2.041-2.625a1.393,1.393,0,0,1,1.069-.487h34.7c.388,0,.487.291.291.584L97.582,136.6a1.481,1.481,0,0,1-.972.584Z" style="fill:#ce3262"/><path d="M46.74,146.028c-.388,0-.487-.194-.291-.487l2.041-2.625a1.393,1.393,0,0,1,1.069-.487H93.89a.447.447,0,0,1,.487.584l-.778,2.333a.85.85,0,0,1-.875.584Z" style="fill:#ce3262"/><path d="M70.264,154.971c-.388,0-.487-.291-.291-.584l1.357-2.43a1.289,1.289,0,0,1,.972-.584H91.747c.388,0,.584.291.584.681l-.194,2.333a.731.731,0,0,1-.681.681Z" style="fill:#ce3262"/><path d="M171.163,135.335c-6.124,1.556-10.3,2.722-16.33,4.28-1.462.388-1.556.487-2.819-.972a13.011,13.011,0,0,0-4.569-3.694c-6.124-3.013-12.054-2.138-17.594,1.462a20.671,20.671,0,0,0-9.918,18.469,15.242,15.242,0,0,0,13.123,15.261c6.61.875,12.151-1.462,16.525-6.415.875-1.069,1.653-2.236,2.625-3.6H133.446c-2.041,0-2.528-1.263-1.847-2.916,1.263-3.013,3.6-8.068,4.958-10.6a2.625,2.625,0,0,1,2.43-1.556h35.384c-.194,2.625-.194,5.249-.584,7.874a41.456,41.456,0,0,1-7.967,19.042c-6.995,9.234-16.136,14.97-27.7,16.525-9.526,1.263-18.374-.584-26.148-6.415A30.533,30.533,0,0,1,99.625,160.51c-1.263-10.6,1.847-20.122,8.262-28.481A43.137,43.137,0,0,1,135.1,115.212c9.137-1.653,17.886-.584,25.76,4.763A30.471,30.471,0,0,1,172.14,133.68C172.719,134.558,172.33,135.044,171.163,135.335Z" style="fill:#ce3262"/><path d="M203.338,189.09c-8.846-.194-16.913-2.722-23.719-8.554a30.485,30.485,0,0,1-10.5-18.761c-1.75-10.984,1.263-20.7,7.874-29.356,7.1-9.331,15.651-14.192,27.218-16.233,9.918-1.75,19.247-.778,27.7,4.958,7.68,5.249,12.442,12.345,13.706,21.676,1.653,13.123-2.138,23.816-11.179,32.953a44.542,44.542,0,0,1-23.329,12.442C208.49,188.7,205.866,188.8,203.338,189.09Zm23.135-39.271a27.978,27.978,0,0,0-.291-3.208,16.013,16.013,0,0,0-18.375-13.235q-.734.119-1.454.306c-9.04,2.041-14.873,7.777-17.011,16.913a16.009,16.009,0,0,0,8.943,18.374,17.82,17.82,0,0,0,15.845-.584c7.679-3.985,11.859-10.206,12.348-18.566Z" style="fill:#ce3262"/></svg>',
"Go": '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 254.5 225"><title>file_type_go</title><path d="M-46.926,89c-.621,0-.777-.311-.466-.777l3.262-4.194a2.225,2.225,0,0,1,1.708-.777H13.026c.621,0,.777.466.466.932l-2.64,4.038a2.367,2.367,0,0,1-1.553.932Z" style="fill:#00acd7"/><path d="M-70.379,103.285c-.621,0-.777-.311-.466-.777l3.262-4.194a2.225,2.225,0,0,1,1.708-.777H4.95a.714.714,0,0,1,.777.932L4.484,102.2a1.358,1.358,0,0,1-1.4.932Z" style="fill:#00acd7"/><path d="M-32.792,117.574c-.621,0-.777-.466-.466-.932l2.174-3.883a2.06,2.06,0,0,1,1.553-.932H1.533c.621,0,.932.466.932,1.087l-.311,3.728a1.167,1.167,0,0,1-1.087,1.087Z" style="fill:#00acd7"/><path d="M128.426,86.2c-9.785,2.485-16.464,4.349-26.093,6.834-2.33.621-2.485.777-4.5-1.553-2.33-2.64-4.038-4.349-7.3-5.9-9.785-4.815-19.259-3.417-28.112,2.33-10.561,6.834-16,16.929-15.842,29.51.155,12.425,8.7,22.676,20.968,24.385,10.561,1.4,19.414-2.33,26.4-10.251,1.4-1.708,2.64-3.572,4.194-5.747H68.163c-3.262,0-4.038-2.019-2.951-4.659,2.019-4.815,5.747-12.891,7.921-16.929a4.194,4.194,0,0,1,3.883-2.485h56.535c-.311,4.194-.311,8.387-.932,12.581a66.239,66.239,0,0,1-12.736,30.442C108.7,159.51,94.1,168.673,75.618,171.158c-15.221,2.019-29.355-.932-41.78-10.251a48.785,48.785,0,0,1-19.725-34.48c-2.019-16.929,2.951-32.15,13.2-45.508C38.342,66.475,52.942,57.312,70.8,54.05c14.6-2.64,28.578-.932,41.159,7.61a48.686,48.686,0,0,1,18.017,21.9C130.911,84.958,130.289,85.735,128.426,86.2Z" style="fill:#00acd7"/><path d="M179.835,172.09c-14.134-.311-27.025-4.349-37.9-13.668a48.711,48.711,0,0,1-16.774-29.976c-2.8-17.551,2.019-33.082,12.581-46.905,11.338-14.91,25.006-22.676,43.488-25.938,15.842-2.8,30.753-1.243,44.265,7.921,12.27,8.387,19.88,19.725,21.9,34.635,2.64,20.968-3.417,38.052-17.861,52.652a71.17,71.17,0,0,1-37.276,19.88C188.067,171.469,183.874,171.624,179.835,172.09ZM216.8,109.343a44.7,44.7,0,0,0-.466-5.125c-2.8-15.376-16.929-24.074-31.684-20.657-14.444,3.262-23.763,12.425-27.18,27.025a25.579,25.579,0,0,0,14.289,29.355c8.542,3.728,17.085,3.262,25.317-.932C209.345,132.64,216.024,122.7,216.8,109.343Z" style="fill:#00acd7"/></svg>',
"Gradle": '<path d="M13.5,6.965h7.923l4,6.887H29.98A14.1,14.1,0,0,0,11.024,2.932L13.5,6.965" style="fill:#006533"/><path d="M25.628,18l-4.209,7.252H10.806L5.5,16.108,9.739,8.8,7.4,4.981A14.03,14.03,0,1,0,30,18H25.628" style="fill:#82b816"/><path d="M21.061,15.963a5.026,5.026,0,1,1-5.026-5,5.013,5.013,0,0,1,5.026,5" style="fill:#006532"/>',
"GraphQL": '<rect x="-0.43" y="12.534" width="22.901" height="1.187" transform="translate(-5.858 16.107) rotate(-59.999)" style="fill:#e10098"/><rect x="4.545" y="21.162" width="22.902" height="1.187" style="fill:#e10098"/><rect x="10.43" y="18.008" width="1.187" height="13.227" transform="translate(-15.812 21.857) rotate(-59.999)" style="fill:#e10098"/><rect x="20.381" y="0.771" width="1.187" height="13.227" transform="translate(4.092 21.856) rotate(-59.999)" style="fill:#e10098"/><rect x="4.412" y="6.787" width="13.227" height="1.187" transform="translate(-2.213 6.502) rotate(-30.001)" style="fill:#e10098"/><rect x="20.389" y="1.677" width="1.187" height="22.901" transform="translate(-3.753 12.25) rotate(-30.001)" style="fill:#e10098"/><rect x="5.454" y="9.386" width="1.187" height="13.228" style="fill:#e10098"/><rect x="25.36" y="9.386" width="1.187" height="13.228" style="fill:#e10098"/><rect x="15.222" y="24.097" width="11.504" height="1.037" transform="translate(-9.498 13.785) rotate(-30.001)" style="fill:#e10098"/><path d="M28.12,23a2.5,2.5,0,1,1-.915-3.411A2.5,2.5,0,0,1,28.12,23" style="fill:#e10098"/><path d="M8.2,11.5a2.5,2.5,0,1,1-.915-3.411A2.5,2.5,0,0,1,8.2,11.5" style="fill:#e10098"/><path d="M3.88,23a2.5,2.5,0,1,1,3.411.915A2.5,2.5,0,0,1,3.88,23" style="fill:#e10098"/><path d="M23.8,11.5a2.5,2.5,0,1,1,3.411.915A2.5,2.5,0,0,1,23.8,11.5" style="fill:#e10098"/><path d="M16,30a2.5,2.5,0,1,1,2.5-2.5A2.493,2.493,0,0,1,16,30" style="fill:#e10098"/><path d="M16,6.991a2.5,2.5,0,1,1,2.5-2.5,2.493,2.493,0,0,1-2.5,2.5" style="fill:#e10098"/>',
"Groovy": '<path d="M7.453,29.865c0-.074.494-1.717,1.1-3.651A21.808,21.808,0,0,0,9.5,22.6c-.079-.056-.35.045-.6.224-.764.538-.92.4-1.491-1.356-.617-1.9-.639-2.091-.317-2.81.21-.47.2-.579-.147-1.277a3.75,3.75,0,0,1-.377-1.044c0-.26-1.413-1.438-3.647-3.04A3.845,3.845,0,0,1,2,12.5a10.477,10.477,0,0,1,2.378-.039l2.378.1.232-.741c.981-3.13,2.463-5.957,3.122-5.957.137,0,.416.265.619.588.331.527.376.853.435,3.126a23.013,23.013,0,0,0,.165,2.739c.055.11.228-.035.385-.322.2-.367.412-.467.71-.335s.485.043.646-.345c.242-.582,1.455-4.513,1.455-4.717,0-.069.24-.9.534-1.846s.631-2.036.751-2.424c.213-.688.246-.607,1.524,3.726,1.32,4.474,2.03,6.124,2.385,5.544.248-.4,1.55-.428,1.914-.034.207.224.338.221.453-.01.237-.48.8-.4.953.14.117.423.147.423.32,0a.812.812,0,0,1,.692-.466c.389,0,.538.164.666.735l.165.735,2.558-.183A11.521,11.521,0,0,1,30,12.468a20.79,20.79,0,0,1-2.321,1.889c-1.277.96-2.342,1.775-2.368,1.81a17.607,17.607,0,0,0,.128,1.867,11.075,11.075,0,0,1-.544,5.713,4.308,4.308,0,0,1-1.021,1.49c-.278.186-.506.4-.506.486s.3,1.077.66,2.212A9.682,9.682,0,0,1,24.568,30c-.109,0-2.757-2.07-6.876-5.373a11.143,11.143,0,0,0-1.643-1.184c-.171,0-1.649,1.133-5.984,4.588-2.514,2-2.612,2.073-2.612,1.835Zm5.158-4.727c1.337-1.051,2.664-2.078,2.947-2.282.488-.351.651-.263,3.021,1.631,1.378,1.1,2.737,2.174,3.021,2.384s.868.666,1.3,1.013c.491.4.742.492.674.256-.77-2.634-.793-2.678-1.327-2.476-.644.244-1.043-.006-1.249-.783a1.739,1.739,0,0,1,.24-1.451,2.377,2.377,0,0,0-.221-2.731,4.289,4.289,0,0,1-.686-1.53l-.241-1.023-.517.71c-.636.873-1.411.918-2.059.119l-.477-.588-.554.762c-.555.763-1.194.862-1.844.284-.179-.159-.258-.1-.258.2a1.24,1.24,0,0,1-.375.777c-.619.57-1.223.419-1.633-.409L12,19.249l-.3.775a7.032,7.032,0,0,1-.853,1.479,13.891,13.891,0,0,0-1.455,3.663c-.5,1.627-.9,3.042-.9,3.143s.381-.141.847-.538,1.942-1.582,3.279-2.633Zm11.343-1.131c1.015-1.154,1.25-3.288.8-7.271-.375-3.329-.562-4.419-.784-4.565-.154-.1-.177.01-.091.426.562,2.7.593,4.053.1,4.434-.337.262-.695-.719-.976-2.675-.218-1.515-.445-2.2-.617-1.85a3.359,3.359,0,0,0,.16,1.07,26.718,26.718,0,0,1,.394,3.381,21.757,21.757,0,0,0,.375,3.151c.309.985.8.747,1.118-.54s.35-.425.044,1.055c-.317,1.536-1.26,2-2.352,1.15-.175-.136-.234,0-.234.555a4.988,4.988,0,0,1-.3,1.5l-.3.765.408.139A2.247,2.247,0,0,0,23.954,24.007ZM9.346,21.468c2.118-1.232,2.5-2.668,1.793-6.805a21.941,21.941,0,0,1-.3-2.3c0-1.029-.256-.554-.448.832-.254,1.832-1.016,3.389-1.657,3.383-.557-.005-.738-.21-.968-1.094-.413-1.585.037-4.018,1.184-6.406.84-1.749,1.3-1.908,1.3-.448,0,2.276-.776,5.625-1.184,5.115a3.814,3.814,0,0,1,.065-2.2c.2-.72.157-1.818-.066-1.818-.259,0-.773,1.91-.841,3.127-.06,1.076-.022,1.338.231,1.612.888.962,2.052-1.973,2.111-5.323.031-1.759-.138-2.254-.674-1.982-.781.4-2.883,5.883-2.883,7.523,0,1.283.319,2.186.88,2.491.954.519,1.876-.4,2.529-2.531l.275-.894V14.97c0,1.759-.567,2.686-2.357,3.852a8.893,8.893,0,0,0-.852.6,9.758,9.758,0,0,0,.892,2.534,5.283,5.283,0,0,0,.969-.484Zm12.764-2.184c.213-.475.25-.992.2-2.817-.05-1.986-.1-2.337-.486-3.144-.691-1.458-1.544-1.086-1.045.455.265.82.589.68.475-.205-.091-.7.079-.723.375-.041.556,1.281.416,3.055-.242,3.055-.45,0-.59-.39-.883-2.459a6.752,6.752,0,0,0-.362-1.714c-.217,0-.314.388-.179.718a28.23,28.23,0,0,1,.452,2.859c.441,3.507,1.057,4.707,1.69,3.293Zm-8.38.056a3.385,3.385,0,0,0,.095-1.33c-.06-1.008-.094-1.081-.364-.79-.387.419-.8-.375-.944-1.8-.107-1.082-.14-1.061.64-.415.1.081.346-.194.553-.611.377-.763.5-1.68.228-1.68-.081,0-.147.134-.147.3,0,.429-.4.368-.494-.075-.053-.258-.166-.167-.367.3-.16.369-.356.671-.434.671s-.185-.3-.237-.671c-.09-.646-.1-.65-.3-.113a.951.951,0,0,0-.01.964,18.818,18.818,0,0,1,.521,3.791c0,1.174.8,2.1,1.267,1.463Zm2.688-1.556a7.055,7.055,0,0,0,.416-4.259c-.236-1.141-.645-1.568-1.222-1.275-.429.218-1.082,2.746-1.084,4.2,0,2.262,1.06,3.015,1.89,1.337Zm-1.007-1.792a3.77,3.77,0,0,1-.29-1.416c0-.745.022-.772.2-.3.22.586.611.688.761.2a1.035,1.035,0,0,0-.065-.656c-.232-.469-.2-1.107.049-1.107.28,0,.672,1.154.672,1.982,0,.609-.613,1.893-.9,1.893-.07,0-.26-.268-.422-.6ZM19.348,17.7a6.447,6.447,0,0,0-.141-4.918c-.358-.773-1.153-.906-1.479-.248a11.607,11.607,0,0,0-.489,3.895C17.477,18.348,18.716,19.1,19.348,17.7ZM18.1,15.527a2.492,2.492,0,0,1-.318-1.565c.008-.909.031-.991.135-.472.153.764.473,1.052.753.679.174-.231.166-.341-.05-.676-.288-.447-.344-1.079-.1-1.079a5.037,5.037,0,0,1,1.017,2.25c0,.48-.564,1.327-.884,1.327C18.527,15.991,18.276,15.782,18.1,15.527Zm8.662-1.318,1.547-1.175-1.658-.012c-1.484-.011-1.658.043-1.656.51a11.532,11.532,0,0,0,.2,1.857c.011,0,.716-.534,1.567-1.18ZM6.535,14l.158-.949L5.3,12.956c-.764-.052-1.389-.012-1.389.088a14.1,14.1,0,0,0,2.447,1.934C6.371,14.961,6.448,14.521,6.535,14Zm9.526-2.941a1.624,1.624,0,0,1,.819.6c.192.349.276.326.573-.163.191-.315.44-.572.553-.572s.2-.066.2-.146c0-.278-2.122-7.306-2.2-7.3s-2.27,7.386-2.337,7.925c-.028.226.06.309.231.219.152-.081.363.063.468.319.17.415.24.382.644-.306.384-.654.544-.742,1.048-.579Z" style="fill:#333"/><path d="M14.5,12.175a.85.85,0,0,1-.115-.2.737.737,0,0,0-.194-.29.281.281,0,0,0-.3-.061c-.087.035-.111.039-.15.024-.065-.026-.089-.106-.07-.242.023-.169.2-.825.548-2.054.711-2.5,1.666-5.646,1.772-5.839.012-.021.012-.021.024,0,.063.114.432,1.266.937,2.922.682,2.24,1.25,4.21,1.25,4.339,0,.079-.06.127-.186.147-.157.026-.339.212-.587.6a1.674,1.674,0,0,1-.226.31c-.048.046-.052.048-.1.048s-.056,0-.1-.043a.958.958,0,0,1-.1-.144,1.268,1.268,0,0,0-.414-.422,1.525,1.525,0,0,0-.738-.281.434.434,0,0,0-.4.156,2.718,2.718,0,0,0-.416.6c-.257.425-.348.513-.441.426Z" style="fill:#6398aa"/><path d="M6.252,14.928a19.055,19.055,0,0,1-2.3-1.838c-.031-.038-.034-.044-.025-.057a2.7,2.7,0,0,1,1.14-.085c.23.012,1.619.1,1.621.108s-.3,1.779-.321,1.881C6.357,14.981,6.337,14.979,6.252,14.928Z" style="fill:#6398aa"/><path d="M25.177,15.35A14.239,14.239,0,0,1,25,13.56a.553.553,0,0,1,.044-.29c.081-.151.245-.205.7-.23.228-.013,1.281-.015,2.025,0l.521.008L27.029,14c-1.144.867-1.81,1.369-1.834,1.382-.006,0-.012-.006-.018-.027h0Z" style="fill:#6398aa"/><path d="M8.506,28.281c0-.071.149-.6.527-1.878.905-3.057,1.319-4.165,1.827-4.892a7.664,7.664,0,0,0,.969-1.792L12,19.292l.225.448c.394.784.632,1.011,1.062,1.016a1.239,1.239,0,0,0,1.1-1.137c0-.124.044-.251.086-.251a1.119,1.119,0,0,1,.226.14,1.271,1.271,0,0,0,.666.3.879.879,0,0,0,.609-.148,2.47,2.47,0,0,0,.711-.764c.187-.252.347-.459.354-.459s.143.159.3.352a5.091,5.091,0,0,0,.422.467,1.049,1.049,0,0,0,1.549-.08,6.111,6.111,0,0,0,.467-.572c.168-.228.307-.41.31-.4s.066.269.141.584.169.67.209.789a3.826,3.826,0,0,0,.642,1.234,2.17,2.17,0,0,1,.466,1.246,3.051,3.051,0,0,1-.352,1.447,2.07,2.07,0,0,0-.267.934,2.017,2.017,0,0,0,.213.851.773.773,0,0,0,1.069.413,1.351,1.351,0,0,1,.316-.068c.2,0,.315.193.542.881.157.474.5,1.637.5,1.695,0,.03-.016.051-.039.051a1.486,1.486,0,0,1-.407-.224c-.2-.144-2.612-2.029-3.408-2.663-2.128-1.693-2.828-2.233-3.171-2.446-.37-.23-.622-.285-.827-.177-.254.133-3.726,2.847-5.751,4.5A10.846,10.846,0,0,1,8.65,28.251c-.149.083-.143.081-.143.03Z" style="fill:#6398aa"/>',
"Haml": '<path d="M15.311,16.043,13.4,29.726a6.322,6.322,0,0,1-5.956-1.25l3.1-13.266L4.69,3.34a8.031,8.031,0,0,1,3.79-.646l5.144,9.7,8.914-7.581s3,1.041,3.27,2.041l-10.5,9.184Z" style="fill:#ecdfa7"/><path d="M27.016,17.411a4.244,4.244,0,0,0-.541-.812,5.7,5.7,0,0,0-1.458-1.187,7.331,7.331,0,0,0-1.687-.791l-.229-.062-.187-.062c-.125-.042-.229-.1-.333-.146a1.282,1.282,0,0,1-.458-.417A1.754,1.754,0,0,1,22,12.642a2.518,2.518,0,0,1,.1-.375c.042-.125.083-.25.125-.4a2.691,2.691,0,0,0,.062-.6l.1-.083,1.25-1.041c.229-.187.458-.4.687-.583a2.2,2.2,0,0,1,.229.146s.646.062,1-.916l-.187-.125.125-.1.312-.271a.613.613,0,0,0,.229-.375.529.529,0,0,0-.417.125l-.333.25-.229.167L22.184,6.478c.146-.125.271-.229.417-.354l.6-.541.062-.062c.062.042.1.083.167.125.146.1.312.208.458.292l.916.5c.292.167.6.333.916.479a3.323,3.323,0,0,0,.479.208c.083.021.167.062.25.083.042,0,.1.021.146.021h.1a.151.151,0,0,0,.125-.083V7.123a.077.077,0,0,1,.021-.062V6.977a.108.108,0,0,0-.042-.083c-.021-.042-.062-.083-.083-.125a1.59,1.59,0,0,0-.187-.187c-.125-.125-.271-.229-.4-.333-.271-.208-.562-.4-.854-.583a7.545,7.545,0,0,0-.9-.5,3.323,3.323,0,0,0-.479-.208c-.083-.021-.167-.062-.271-.083-.042,0-.1-.021-.167-.021a.31.31,0,0,0-.125.021.522.522,0,0,0-.167.1,1.6,1.6,0,0,0-.375.208l-.625.354c-.187.146-.4.312-.583.458l-.208-.146s-.875.083-.583.646l.083.083c-.833.687-1.645,1.4-2.457,2.083-.833.708-1.645,1.416-2.478,2.145l-1.229,1.083a1.878,1.878,0,0,1-.208.187c-.042-.125-.1-.229-.146-.333l-.292-.625-.562-1.25c-.375-.833-.75-1.666-1.145-2.5L11.209,4.895l-.187-.375h.25s.083-.687-.417-.812a1.4,1.4,0,0,0-.208.021c-.187-.375-.354-.75-.541-1.125h0l-.083-.312A.33.33,0,0,0,9.9,2.1a.352.352,0,0,0-.1-.042c-.062-.021-.1-.021-.167-.042A1.281,1.281,0,0,0,9.355,2a4.057,4.057,0,0,0-.521.042,8.767,8.767,0,0,0-1.02.187c-.333.083-.666.167-1,.271a3.272,3.272,0,0,0-.479.187l-.25.125c-.042.021-.083.062-.125.083L5.9,2.958c-.021.021-.021.042-.042.062v.062h0V3.1a.164.164,0,0,0,.1.125c.042.021.062.042.083.042a1.327,1.327,0,0,1,.146.042,1.188,1.188,0,0,0,.271.021,4.384,4.384,0,0,0,.521-.042c.333-.042.687-.083,1.02-.146l1.02-.167c.167-.021.333-.062.521-.1.146.292.292.6.437.9-.958.083-2.457.208-3.395.312-.1-.187-.187-.354-.292-.541a.127.127,0,0,0-.146-.062.108.108,0,0,0-.062.146c.062.167.125.312.187.479a1.167,1.167,0,0,0-.5.125A1.828,1.828,0,0,0,6.4,5.645a3.567,3.567,0,0,1,.458-.125l.437,1,1.25,2.832,1.27,2.832c.417.937.854,1.874,1.291,2.832h0a.02.02,0,0,0,.021.021l-.187.625-.5,1.749c-.312,1.166-.6,2.353-.9,3.52L9.105,22.7l-.417,1.77c-.292,1.187-.562,2.353-.9,3.52a.125.125,0,0,0,.021.083,3.076,3.076,0,0,0,.6.562,6.048,6.048,0,0,0,.687.417,9.4,9.4,0,0,0,1.5.6,6.972,6.972,0,0,0,1.624.271,3.728,3.728,0,0,0,.833-.042,6.547,6.547,0,0,0,.833-.167.254.254,0,0,0,.167-.187v-.021c.229-1.145.417-2.312.625-3.457l.583-3.478c.187-1.166.4-2.312.583-3.478.021-.125.042-.271.062-.4.042.042.062.1.1.146a4.137,4.137,0,0,0,.708.646,7.212,7.212,0,0,0,1.583.833,11.774,11.774,0,0,0,1.666.5,10.182,10.182,0,0,0,1.1.187,2.621,2.621,0,0,0-.25,1.208.115.115,0,0,0,.062.1h.021a5.164,5.164,0,0,0,1.27.479,4.333,4.333,0,0,0,1.375.062,2.627,2.627,0,0,0,1.333-.562,2.824,2.824,0,0,0,.812-1.166l.021-.021V21.1l.062-.562v-.021a5.427,5.427,0,0,0,.625-.417,2.71,2.71,0,0,0,.646-.729,1.833,1.833,0,0,0,.25-1,2.563,2.563,0,0,0-.292-.958Zm-.4-10.5Zm-1.479-1.1a7.12,7.12,0,0,1,.833.541c.125.1.271.187.4.312a1.257,1.257,0,0,1,.167.167l.042.042h-.042c-.083-.021-.146-.042-.229-.062-.146-.062-.312-.125-.458-.187a7.132,7.132,0,0,1-.875-.479A5.61,5.61,0,0,1,24.2,5.52a2.5,2.5,0,0,1-.229-.25l.312.125a6.4,6.4,0,0,1,.854.417Zm-1.416-.916.021.021v.042a.02.02,0,0,0-.021-.021V4.895ZM8.876,2.562a5.021,5.021,0,0,1-.937.333,5.347,5.347,0,0,1-.979.167,4.013,4.013,0,0,1-.5.021.781.781,0,0,1-.229-.021H6.169c.021,0,.021-.021.042-.021.062-.042.146-.062.208-.1.146-.062.312-.1.458-.167.312-.083.646-.167.979-.229a8.4,8.4,0,0,1,.979-.125A1.576,1.576,0,0,0,9.147,2.4a1.536,1.536,0,0,1-.271.167Zm14.453,7.1-1.291,1-1.291,1.02c-.354.292-.708.583-1.062.854.021-.021.042-.062.062-.083.167-.229.333-.437.5-.646.354-.417.687-.854,1.062-1.25s.771-.791,1.166-1.145a4.872,4.872,0,0,1,.646-.5l.187-.125c.187.146.4.292.583.437-.167.146-.375.292-.562.437ZM8.064,7.1l.1.1a5.63,5.63,0,0,1,.583.646,2.21,2.21,0,0,1,.375.729.921.921,0,0,1-.062.625l-.021-.062L8.064,7.1Zm1.02,2.166a.72.72,0,0,0,.146-.25.866.866,0,0,0,.042-.458A1.7,1.7,0,0,0,8.9,7.727a4.015,4.015,0,0,0-.979-.9l-.229-.479c-.146-.312-.292-.625-.458-.916.312-.083.687-.208,1.1-.312A20.313,20.313,0,0,1,9.355,7a7.963,7.963,0,0,1,.771,2.541c.021.208,0,.437,0,.666s0,.458.021.687a7.609,7.609,0,0,0,.146.958L9.084,9.268ZM14,26.242a.9.9,0,0,1-.187.208.4.4,0,0,1-.333.1.358.358,0,0,1-.229-.229.981.981,0,0,1-.083-.354,2.275,2.275,0,0,1,.042-.75,2.816,2.816,0,0,1,.229-.708,1.478,1.478,0,0,1,.208-.292.341.341,0,0,1,.292-.125c.1,0,.208.1.271.208a.74.74,0,0,1,.083.187l-.25,1.479c-.021.1-.021.187-.042.271Zm1.229-7.185-.375,2.187a3.329,3.329,0,0,0-.1-.437c-.1-.4-.229-.771-.354-1.145a15.537,15.537,0,0,0-.958-2.166c.229.771.5,1.5.771,2.249.146.375.271.75.4,1.1l.187.562c0,.021.021.062.021.083-.062.333-.125.666-.167,1.02l-.312,1.9c-.021-.042-.021-.083-.042-.125a.486.486,0,0,0-.312-.292.525.525,0,0,0-.417.125,1.944,1.944,0,0,0-.271.312,2.036,2.036,0,0,0-.271.75,2.131,2.131,0,0,0,0,.812,1.021,1.021,0,0,0,.146.4.486.486,0,0,0,.333.271.428.428,0,0,0,.375-.167c.042-.042.083-.1.125-.146-.146.979-.312,1.958-.458,2.957a2.727,2.727,0,0,1-.562.125c-.25.042-.5.062-.75.083a5.531,5.531,0,0,1-1.541-.146,7.846,7.846,0,0,1-1.5-.479,3.625,3.625,0,0,1-1.229-.854c.312-1.145.666-2.291,1.02-3.436l.541-1.729.521-1.749c.354-1.166.708-2.333,1.041-3.5.167-.583.312-1.166.479-1.749a3.626,3.626,0,0,0,.187-1.833v-.021c-.021-.021-.042-.021-.042,0a3.109,3.109,0,0,0-.25.292c-.229-.521-.479-1.02-.708-1.541a4.765,4.765,0,0,1-.167-.583,7.165,7.165,0,0,1-.208-1.312c-.021-.229-.021-.437-.021-.666s.021-.458,0-.687a7.625,7.625,0,0,0-.833-2.6,12.587,12.587,0,0,0-1.1-1.833c.687-.187,1.416-.375,2-.479.083.187.187.354.271.541L11.938,7.6l1.25,2.437.625,1.208.312.6c.083.125.125.271.208.375l-.812.75a.069.069,0,0,0,0,.1.073.073,0,0,0,.1.021c.437-.312.875-.646,1.312-.979l1.312-1c.875-.666,1.729-1.333,2.582-2s1.708-1.354,2.562-2.041l.021-.021a24.316,24.316,0,0,0,1.874,1.645,6.162,6.162,0,0,0-.875.541,8.943,8.943,0,0,0-1.229,1.125,12.279,12.279,0,0,0-1.041,1.291,11.778,11.778,0,0,0-.646,1c-1.27,1.041-2.52,2.1-3.728,3.207a.128.128,0,0,0-.021.146.138.138,0,0,0,.146.042,9.134,9.134,0,0,0-.312,1.25c-.125.583-.25,1.166-.354,1.749Zm9.205,2.791a2.527,2.527,0,0,1-1.02.458,3.767,3.767,0,0,1-1.187.042,7.361,7.361,0,0,1-1.145-.208,2.037,2.037,0,0,1,.167-1.041c.146.021.271.021.417.042a.114.114,0,0,0,.125-.083.124.124,0,0,0-.083-.167h0c-.1-.042-.187-.062-.292-.1a2.771,2.771,0,0,1,.292-.4c.125-.125.25-.25.375-.354a3.992,3.992,0,0,0,.854.4,2.881,2.881,0,0,0,1.125.1,1.55,1.55,0,0,0,1.02-.541,1.524,1.524,0,0,0,.354-.916.85.85,0,0,1,.021.4,4.511,4.511,0,0,1-.083.521l-.062.312L25,20.494a.919.919,0,0,0-.333.354.751.751,0,0,0,.479,0c.021,0,.021-.021.042-.021-.021.062-.021.1-.042.167a2.552,2.552,0,0,1-.708.854ZM26.5,19.119a2.2,2.2,0,0,1-.458.625,2.638,2.638,0,0,1-.271.229,2.585,2.585,0,0,0-.062-.562,1.534,1.534,0,0,0-.083-.292.531.531,0,0,0-.187-.25h0c-.021,0-.042,0-.042.021h0a1.95,1.95,0,0,1-.562.771,1.429,1.429,0,0,1-.812.292,2.857,2.857,0,0,1-.916-.125c-.312-.083-.625-.187-.937-.292l-.042-.021a.2.2,0,0,0-.187.042c-.167.208-.292.4-.437.6-.1.167-.187.312-.271.479-.375-.146-.729-.271-1.1-.417-.521-.208-1.041-.417-1.52-.666a7.648,7.648,0,0,1-1.4-.812,2.949,2.949,0,0,1-.979-1.062v-.021a.409.409,0,0,0-.187-.187c0-.042.021-.1.021-.146a7.37,7.37,0,0,0,.1-1.52c1.687-1.187,3.332-2.437,4.957-3.728l-.062.187a3.27,3.27,0,0,0-.146,1.02A2.089,2.089,0,0,0,22.122,15.1a2.825,2.825,0,0,0,.479.187l.25.062.208.042a6.645,6.645,0,0,1,1.541.625,6.156,6.156,0,0,1,1.312.979,2.275,2.275,0,0,1,.708,1.333,1.51,1.51,0,0,1-.125.791Z" style="fill:#3f3e29"/><path d="M12.667,23.909a2.161,2.161,0,0,0-.354.771,1.556,1.556,0,0,0-.062.417l-.021.417a4.533,4.533,0,0,0,.146,1.666,7.647,7.647,0,0,0,.666,1.52c-.083-.271-.187-.521-.271-.771s-.167-.521-.229-.791a5.89,5.89,0,0,1-.1-1.6l.021-.417a2.552,2.552,0,0,1,.042-.4,3.137,3.137,0,0,1,.292-.729,2.967,2.967,0,0,1,.521-.625,2.591,2.591,0,0,1,.666-.479,2.76,2.76,0,0,0-1.312,1.02Z" style="fill:#3f3e29"/>',
"Handlebars": '<path d="M12.3,13.1a4.238,4.238,0,0,1,2.728.9A4.592,4.592,0,0,1,16,15.127a4.144,4.144,0,0,1,2.039-1.747,4.757,4.757,0,0,1,3.286.019,7.833,7.833,0,0,1,2.443,1.558c.568.5,1.094,1.05,1.679,1.533a3.4,3.4,0,0,0,1.019.614,1.42,1.42,0,0,0,1.46-.379.965.965,0,0,0-.055-1.323.545.545,0,0,0-.8.108.659.659,0,0,0,.05.686,1.222,1.222,0,0,1-.6-.926,1.022,1.022,0,0,1,.691-1.032,2.005,2.005,0,0,1,2.312.661,3.258,3.258,0,0,1,.44,2.308,2.762,2.762,0,0,1-1.137,1.872,5.051,5.051,0,0,1-3.013.8,8.488,8.488,0,0,1-2.932-.63c-1.558-.626-3.016-1.492-4.625-1.992a13.977,13.977,0,0,0-1.7-.363c-.43.007-.861-.015-1.29.015a5.692,5.692,0,0,0-1.534.349c-1.636.509-3.116,1.4-4.7,2.024a7.625,7.625,0,0,1-4.249.474,3.74,3.74,0,0,1-2.125-1.14A2.856,2.856,0,0,1,2,16.668a2.722,2.722,0,0,1,.555-1.874,1.994,1.994,0,0,1,1.687-.68,1.425,1.425,0,0,1,1.063.52,1.04,1.04,0,0,1,.122.911,1.457,1.457,0,0,1-.556.644.643.643,0,0,0,.051-.681.547.547,0,0,0-.831-.079.975.975,0,0,0-.151,1.11,1.331,1.331,0,0,0,1.032.623,2.332,2.332,0,0,0,1.6-.7A28.526,28.526,0,0,1,9.4,14.053,5.251,5.251,0,0,1,12.3,13.1Z" style="fill:#c19770"/>',
"Haskell": '<defs><linearGradient id="a" x1="0.996" y1="-206.057" x2="0.951" y2="-206.057" gradientTransform="matrix(259.941, 0, 0, -183.487, -237.941, -37792.788)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#faba09"/><stop offset="1" stop-color="#b42c01"/></linearGradient></defs><title>file_type_haskell2</title><path d="M2,25.882,8.588,16,2,6.118H6.941L13.529,16,6.941,25.882Zm6.588,0L15.177,16,8.588,6.118h4.941L26.706,25.882H21.765l-4.117-6.176-4.118,6.176ZM24.51,20.118l-2.2-3.294H30v3.294Zm-3.294-4.941-2.2-3.294H30v3.294Z" style="fill:url(#a)"/>',
"Haxe": '<path d="M16,5.5,5.5,16,16,26.5,26.5,16,16,5.5" style="fill:#f68712"/><path d="M2,2,16,5.5,5.5,16,2,2" style="fill:#fab20b"/><path d="M30,2,26.5,16,16,5.5,30,2" style="fill:#f47216"/><path d="M30,30,16,26.5,26.5,16,30,30" style="fill:#f25c19"/><path d="M2,30,5.5,16,16,26.5,2,30" style="fill:#f89c0e"/><path d="M16,5.5,2,2H9l7,3.5" style="fill:#fbc707"/><path d="M16,5.5,30,2H23L16,5.5" style="fill:#fbc707"/><path d="M16,26.5,30,30H23l-7-3.5" style="fill:#f68712"/><path d="M16,26.5,2,30H9l7-3.5" style="fill:#f25c19"/><path d="M5.5,16,2,30V23l3.5-7" style="fill:#fff200"/><path d="M5.5,16,2,2V9l3.5,7" style="fill:#fff200"/><path d="M26.5,16,30,2V9l-3.5,7" style="fill:#f1471d"/><path d="M26.5,16,30,30V23l-3.5-7" style="fill:#f1471d"/>',
"HLSL": '<polygon points="9.525 21.947 7.56 21.947 7.56 17.1 3.958 17.1 3.958 21.947 2 21.947 2 10.044 3.958 10.044 3.958 14.792 7.56 14.792 7.56 10.044 9.525 10.044 9.525 21.947" style="fill:blue"/><polygon points="16.692 21.947 11.513 21.947 11.513 10.044 13.472 10.044 13.472 19.773 16.692 19.773 16.692 21.947" style="fill:blue"/><path d="M17.462,21.491V18.834a3.676,3.676,0,0,0,1.146.909,2.809,2.809,0,0,0,1.249.3,2.05,2.05,0,0,0,.646-.092,1.309,1.309,0,0,0,.461-.252,1.029,1.029,0,0,0,.276-.382,1.231,1.231,0,0,0,.091-.478,1.3,1.3,0,0,0-.145-.623,1.907,1.907,0,0,0-.4-.506,4.077,4.077,0,0,0-.6-.448q-.346-.215-.746-.439a4.045,4.045,0,0,1-1.519-1.419,3.884,3.884,0,0,1-.5-2.026,4.232,4.232,0,0,1,.273-1.6,3.02,3.02,0,0,1,.744-1.1,2.938,2.938,0,0,1,1.088-.634,4.167,4.167,0,0,1,1.31-.2,5.816,5.816,0,0,1,1.2.111,3.8,3.8,0,0,1,.967.345v2.482a2.859,2.859,0,0,0-.476-.365,3.212,3.212,0,0,0-.53-.262A3.1,3.1,0,0,0,21.46,12a2.794,2.794,0,0,0-.512-.05,1.994,1.994,0,0,0-.606.087,1.347,1.347,0,0,0-.461.245,1.092,1.092,0,0,0-.291.377,1.144,1.144,0,0,0-.1.494,1.2,1.2,0,0,0,.115.536,1.657,1.657,0,0,0,.328.448,3.461,3.461,0,0,0,.515.415c.2.136.43.275.686.419a7.094,7.094,0,0,1,.936.635,3.712,3.712,0,0,1,.713.759,3.269,3.269,0,0,1,.455.967,4.573,4.573,0,0,1,.158,1.266,4.439,4.439,0,0,1-.277,1.672,2.888,2.888,0,0,1-.749,1.1,2.823,2.823,0,0,1-1.1.6,4.742,4.742,0,0,1-1.325.182,5.476,5.476,0,0,1-1.361-.166A3.41,3.41,0,0,1,17.462,21.491Z" style="fill:blue"/><polygon points="30 21.947 24.822 21.947 24.822 10.044 26.78 10.044 26.78 19.773 30 19.773 30 21.947" style="fill:blue"/>',
"HTML": '<polygon points="5.902 27.201 3.655 2 28.345 2 26.095 27.197 15.985 30 5.902 27.201" style="fill:#e44f26"/><polygon points="16 27.858 24.17 25.593 26.092 4.061 16 4.061 16 27.858" style="fill:#f1662a"/><polygon points="16 13.407 11.91 13.407 11.628 10.242 16 10.242 16 7.151 15.989 7.151 8.25 7.151 8.324 7.981 9.083 16.498 16 16.498 16 13.407" style="fill:#ebebeb"/><polygon points="16 21.434 15.986 21.438 12.544 20.509 12.324 18.044 10.651 18.044 9.221 18.044 9.654 22.896 15.986 24.654 16 24.65 16 21.434" style="fill:#ebebeb"/><polygon points="15.989 13.407 15.989 16.498 19.795 16.498 19.437 20.507 15.989 21.437 15.989 24.653 22.326 22.896 22.372 22.374 23.098 14.237 23.174 13.407 22.341 13.407 15.989 13.407" style="fill:#fff"/><polygon points="15.989 7.151 15.989 9.071 15.989 10.235 15.989 10.242 23.445 10.242 23.445 10.242 23.455 10.242 23.517 9.548 23.658 7.981 23.732 7.151 15.989 7.151" style="fill:#fff"/>',
"HTTP": '<defs><radialGradient id="a" cx="12.278" cy="24.557" r="18.371" gradientTransform="matrix(1, 0, 0, -1, -0.001, 34.001)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#d3e9ff"/><stop offset="0.155" stop-color="#d3e9ff"/><stop offset="0.75" stop-color="#4074ae"/><stop offset="1" stop-color="#36486c"/></radialGradient><radialGradient id="b" cx="10.657" cy="26.746" r="26.66" gradientTransform="matrix(1, 0, 0, -1, -0.001, 34.001)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0.165"/></radialGradient><radialGradient id="c" cx="-45.05" cy="9.285" r="4.115" gradientTransform="translate(-21.971 41.942) rotate(143.734)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></radialGradient><radialGradient id="d" cx="-41.456" cy="32.154" r="4.115" gradientTransform="translate(3.571 87.075) rotate(143.734) scale(1.297)" xlink:href="#c"/><radialGradient id="e" cx="-48.485" cy="13.239" r="4.115" gradientTransform="translate(-23.084 55.413) rotate(143.734)" xlink:href="#c"/><radialGradient id="f" cx="-40.883" cy="16.036" r="4.115" gradientTransform="matrix(-0.87, 0.639, -0.638, -0.87, -9.351, 47.706)" xlink:href="#c"/><linearGradient id="g" x1="-66.502" y1="2.219" x2="-64.626" y2="6.749" gradientTransform="matrix(0.939, -0.879, -0.683, -0.73, 84.81, -33.628)" xlink:href="#c"/><linearGradient id="h" x1="-26.791" y1="39.159" x2="-24.999" y2="44.683" gradientTransform="matrix(1.131, 0.613, 0.477, -0.879, 21.648, 69.071)" xlink:href="#c"/><linearGradient id="i" x1="-63.384" y1="8.177" x2="-63.57" y2="4.69" gradientTransform="matrix(0.918, -0.859, -0.668, -0.713, 77.857, -36.493)" xlink:href="#c"/><linearGradient id="j" x1="-99.259" y1="89.545" x2="-98.825" y2="93.023" gradientTransform="matrix(-1.28, -0.126, -0.098, 0.995, -101.637, -93.015)" xlink:href="#c"/><radialGradient id="k" cx="-20.712" cy="57.61" r="2.836" gradientTransform="matrix(0, -0.843, -0.721, 0, 26.625, -21.696)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#729fcf"/><stop offset="1" stop-color="#3b61a6"/></radialGradient><radialGradient id="l" cx="-20.712" cy="39.858" r="2.836" gradientTransform="translate(26.625 63.096) rotate(90) scale(0.843 0.721)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#729fcf"/><stop offset="1" stop-color="#509e2f"/></radialGradient></defs><title>file_type_http</title><path d="M28.026,14.2A11.877,11.877,0,1,1,16.149,2.325,11.878,11.878,0,0,1,28.026,14.2Z" style="fill:url(#a)"/><path d="M16.149,26.386A12.183,12.183,0,1,1,28.333,14.2,12.2,12.2,0,0,1,16.149,26.386Zm0-23.754A11.571,11.571,0,1,0,27.72,14.2,11.584,11.584,0,0,0,16.149,2.632Z" style="fill:#39396c"/><path d="M27.693,12.424h0l-.328.371a7,7,0,0,0-.656-.644l-.5.074-.46-.519v.643l.394.3.262.3.35-.4c.088.165.175.33.263.5v.495l-.394.445-.722.5-.546.545-.35-.4.175-.445-.35-.4-.591-1.262-.5-.569L23.6,12.1l.2.718.371.421a17.069,17.069,0,0,0,.7,1.783,9.979,9.979,0,0,0,1.268-.1v.347l-.525,1.287-.481.544-.394.843V19.33l.132.545-.219.247-.482.3-.5.421.416.47-.569.5.109.321-.853.966H22.2l-.481.3h-.307v-.4l-.13-.793c-.169-.5-.346-.991-.525-1.484,0-.364.022-.725.044-1.089l.219-.495-.307-.595.022-.817-.416-.47.208-.68-.338-.384H19.6l-.2-.223-.591.372-.24-.273-.547.47L16.911,15.27l-.437-1.04.394-.593-.219-.247.481-1.139c.395-.491.807-.963,1.225-1.436l.744-.2.831-.1.569.149.809.816.284-.321.393-.049.744.247H23.3l.394-.347.175-.247-.394-.247-.656-.049a6.6,6.6,0,0,0-.568-.743l-.219.1-.088.644-.394-.445-.087-.5-.437-.346h-.176l.438.495-.175.445-.35.1.219-.445-.394-.2-.349-.4-.657.148-.087.2-.394.248-.219.545-.546.272-.241-.272H17.83V9.428l.569-.3h.437l-.088-.346L18.4,8.438l.59-.124.328-.371.262-.446h.482l-.132-.346.307-.2v.4l.656.148.656-.544.044-.248.568-.4a4.353,4.353,0,0,0-.612.1V5.963l.219-.5h-.219l-.48.445-.132.248.132.347-.219.593-.35-.2-.306-.346-.482.346-.175-.792.831-.544v-.3l.525-.346.831-.2.569.2,1.049.2-.262.3H22.51l.569.594.437-.495.133-.218a15.53,15.53,0,0,1,2.635,3.147A11.452,11.452,0,0,1,27.693,12.424Z" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M16.861,5.517l-.044.3.307.2.524-.346-.262-.3-.35.2-.174-.05" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M17.343,3.488l-1.138-.446-1.312.148-1.619.445-.306.3,1.006.693v.4l-.394.4.525,1.04.349-.2.438-.693a15.053,15.053,0,0,0,1.924-.743l.525-1.337" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M18.524,7.647,18.349,7.2l-.307.1.088.544.394-.2" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M18.7,7.547l-.088.595.481-.1.35-.346-.306-.3c-.1-.274-.221-.529-.35-.792h-.262v.3l.174.2v.445" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M12.225,16.953l-.35-.693-.656-.148-.35-.94-.875.1-.743-.544-.788.693v.109a3,3,0,0,1-.743-.209l-.175-.495V14.28l-.525.049q.066-.52.131-1.039H6.845l-.306.4-.306.148L5.8,13.587l-.044-.545.088-.594.656-.495H7.02l.087-.3.656.148.481.595.088-.991.831-.693.306-.743.612-.247.35-.495.787-.149.394-.593H10.432l.744-.347H11.7l.744-.248.088-.3-.263-.248-.306-.1.088-.3-.219-.445-.525.2.088-.4-.612-.347L10.3,6.8l.044.3-.481.2-.306.643-.131-.594L8.594,7l-.131-.445,1.094-.644.481-.445.044-.544-.262-.149-.35-.05-.219.545s-.366.072-.46.095A12.5,12.5,0,0,0,4.6,13.371a6.789,6.789,0,0,0,.409.711l.918.544.918.248.394.5.612.445.35-.049.262.118v.08l-.35.94-.263.4.088.2-.219.742.787,1.436.787.693.35.495L9.6,21.9l.263.593L9.6,23.637s-.021-.007.013.107a5.278,5.278,0,0,0,1.488.809l.161-.123-.087-.247.35-.347.131-.347.569-.2.437-1.089-.131-.3.306-.445.656-.149.35-.792-.088-.99.525-.743.088-.743c-.718-.356-1.43-.723-2.143-1.089" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M11.263,5.715l.437.3h.35V5.666l-.437-.2-.35.247" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M10.126,5.319l-.219.544h.438l.219-.5c.189-.133.376-.268.568-.4l.438.149.875.594.438-.4-.482-.2-.219-.446-.831-.1-.044-.248-.394.1-.175.346-.219-.446-.087.2.044.5-.35.3" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M11.7,4.081l.219-.2.438-.1a6.9,6.9,0,0,1,.918-.347l-.174-.3-.565.081-.267.266-.44.064-.391.184-.19.092-.116.155.568.1" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M12.444,8.785l.263-.4-.394-.3.131.693" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M16.149,25.783A11.58,11.58,0,1,1,27.729,14.2,11.593,11.593,0,0,1,16.149,25.783Zm0-22.548A10.968,10.968,0,1,0,27.117,14.2,10.98,10.98,0,0,0,16.149,3.235Z" style="opacity:0.3956044018268585;isolation:isolate;fill:url(#b)"/><path d="M5.541,10.241a4.115,4.115,0,1,0,6.636-4.866h0A4.115,4.115,0,0,0,5.54,10.24Z" style="fill:url(#c)"/><path d="M7.836,8.558a1.268,1.268,0,1,0,2.046-1.5h0a1.268,1.268,0,0,0-2.046,1.5Z" style="fill:#fff"/><path d="M17.952,24.8a5.337,5.337,0,1,0,8.607-6.312v0A5.337,5.337,0,0,0,17.95,24.8Z" style="fill:url(#d)"/><path d="M20.928,22.616a1.645,1.645,0,1,0,2.653-1.946h0a1.645,1.645,0,0,0-2.653,1.946Z" style="fill:#fff"/><path d="M4.859,18.493A4.115,4.115,0,1,0,11.5,13.626h0a4.115,4.115,0,0,0-6.636,4.866Z" style="fill:url(#e)"/><path d="M7.154,16.809a1.268,1.268,0,1,0,2.046-1.5h0a1.268,1.268,0,0,0-2.046,1.5Z" style="fill:#fff"/><path d="M12.408,10.269A4.441,4.441,0,1,0,19.57,5.016h0a4.441,4.441,0,1,0-7.162,5.253Z" style="fill:url(#f)"/><path d="M14.885,8.452a1.369,1.369,0,1,0,2.208-1.619h0a1.369,1.369,0,1,0-2.208,1.619Z" style="fill:#fff"/><path d="M12.68,26.238a3.83,3.83,0,0,1-2.909-1.087c-1.133-1.21-1.2-3.255-.2-5.757a21.542,21.542,0,0,1,5.307-7.326C20.064,7.215,25.945,5.356,28.27,7.839c1.133,1.211,1.2,3.255.2,5.757a21.553,21.553,0,0,1-5.308,7.326A21.551,21.551,0,0,1,15.5,25.733,9.229,9.229,0,0,1,12.68,26.238ZM25.342,7.28c-2.7,0-6.6,1.908-10.1,5.183A21,21,0,0,0,10.071,19.6c-.921,2.3-.887,4.138.094,5.187s2.817,1.2,5.169.437a21,21,0,0,0,7.46-4.692,21,21,0,0,0,5.175-7.132c.921-2.3.888-4.138-.095-5.187A3.34,3.34,0,0,0,25.342,7.28Z" style="fill:url(#g)"/><path d="M21.681,22.094a20.633,20.633,0,0,1-9.339-2.759C6.1,15.95,2.473,10.957,4.094,7.968c.79-1.458,2.7-2.175,5.4-2.012A21.542,21.542,0,0,1,18.12,8.674a21.545,21.545,0,0,1,6.987,5.746c1.6,2.167,2.051,4.163,1.261,5.621C25.622,21.416,23.915,22.094,21.681,22.094ZM8.759,6.474c-2.1,0-3.572.612-4.19,1.751C3.117,10.9,6.72,15.674,12.6,18.86s11.843,3.6,13.294.924c.685-1.263.251-3.054-1.22-5.042a21,21,0,0,0-6.81-5.593A21,21,0,0,0,9.459,6.5Q9.1,6.474,8.759,6.474Z" style="fill:url(#h)"/><path d="M10,24.078a3.757,3.757,0,0,1-2.851-1.065c-1.11-1.187-1.181-3.189-.2-5.639a21.062,21.062,0,0,1,5.189-7.163c5.073-4.747,10.83-6.563,13.1-4.132h0c2.275,2.431.083,8.053-4.99,12.8a21.059,21.059,0,0,1-7.491,4.7A9.024,9.024,0,0,1,10,24.078ZM22.373,5.553c-2.63,0-6.439,1.864-9.856,5.062A20.5,20.5,0,0,0,7.463,17.58c-.9,2.239-.866,4.034.09,5.055s2.745,1.172,5.038.424a20.513,20.513,0,0,0,7.284-4.582c4.766-4.46,6.994-9.853,4.965-12.02h0A3.256,3.256,0,0,0,22.373,5.553Z" style="fill:url(#i)"/><path d="M17.512,19.413c-.86,0-1.748-.043-2.659-.133C7.784,18.584,2.507,15.388,2.84,12h0c.333-3.383,6.133-5.49,13.2-4.791s12.345,3.892,12.012,7.275C27.763,17.436,23.324,19.413,17.512,19.413ZM3.378,12.057c-.3,3.031,4.873,6.03,11.528,6.686s12.312-1.277,12.611-4.308S22.644,8.406,15.988,7.75,3.677,9.027,3.378,12.057Z" style="fill:url(#j)"/><path d="M6.251,29.966h6.674V20.809h2.981L9.548,11.434,3.295,20.782l2.958.031Z" style="fill:url(#k)"/><path d="M12.924,30.045H6.251a.049.049,0,0,1-.039-.023c-.01-.015-.016-3.135-.016-3.156l0-5.975-2.9-.03a.06.06,0,0,1-.051-.048.1.1,0,0,1,.011-.085L9.508,11.38a.056.056,0,0,1,.041-.025.05.05,0,0,1,.04.024l6.357,9.375a.1.1,0,0,1,.011.086.059.059,0,0,1-.051.048H12.98v9.078C12.98,30.01,12.955,30.045,12.924,30.045Zm-6.618-.158h6.562V20.809c0-.044.025-.079.056-.079h2.85L9.549,11.549,3.424,20.7l2.83.03c.031,0,.055.036.055.079Z" style="fill:#183868"/><path d="M19.053,20.587l-2.958.031,6.254,9.348,6.357-9.375H25.724V11.434H19.051Z" style="fill:url(#l)"/><path d="M25.78,11.434v9.078h2.925a.059.059,0,0,1,.051.048.1.1,0,0,1-.011.086l-6.357,9.375a.05.05,0,0,1-.04.024.056.056,0,0,1-.041-.025l-6.254-9.348a.1.1,0,0,1-.011-.085.06.06,0,0,1,.051-.048l2.9-.03,0-5.975c0-.021.006-3.141.016-3.156a.049.049,0,0,1,.039-.023h6.674C25.755,11.355,25.78,11.39,25.78,11.434Zm-6.672,9.153c0,.043-.025.079-.055.079l-2.83.03,6.125,9.156,6.226-9.181h-2.85c-.031,0-.056-.035-.056-.079V11.513H19.107Z" style="fill:#183868"/>',
"Idris": '<path d="M13.376,6.2c3.6,1.1,4.5,2,5.8,5.2-.3-4-1.9-5.6-5.8-5.2Z" style="fill:#8a0819"/><path d="M8.376,12.4c2.3.7,5,1.3,6,5.7.4-5.5-2.2-5.8-6-5.7Z" style="fill:#8a0819"/><path d="M9.976,8.8c3.5.7,5.7,1.7,7,6.2.3-5.8-2.9-6.4-7-6.2Z" style="fill:#8a0819"/><path d="M14.576,2c19.1,12.4-4.2,12.7.8,27.1l3,.9c-8.3-11.2,18.4-17-3.8-28Z" style="fill:#8a0819"/>',
"Ini": '<path d="M23.265,24.381l.9-.894c4.164.136,4.228-.01,4.411-.438l1.144-2.785L29.805,20l-.093-.231c-.049-.122-.2-.486-2.8-2.965V15.5c3-2.89,2.936-3.038,2.765-3.461L28.538,9.225c-.171-.422-.236-.587-4.37-.474l-.9-.93a20.166,20.166,0,0,0-.141-4.106l-.116-.263-2.974-1.3c-.438-.2-.592-.272-3.4,2.786l-1.262-.019c-2.891-3.086-3.028-3.03-3.461-2.855L9.149,3.182c-.433.175-.586.237-.418,4.437l-.893.89c-4.162-.136-4.226.012-4.407.438L2.285,11.733,2.195,12l.094.232c.049.12.194.48,2.8,2.962l0,1.3c-3,2.89-2.935,3.038-2.763,3.462l1.138,2.817c.174.431.236.584,4.369.476l.9.935a20.243,20.243,0,0,0,.137,4.1l.116.265,2.993,1.308c.435.182.586.247,3.386-2.8l1.262.016c2.895,3.09,3.043,3.03,3.466,2.859l2.759-1.115C23.288,28.644,23.44,28.583,23.265,24.381ZM11.407,17.857a4.957,4.957,0,1,1,6.488,2.824A5.014,5.014,0,0,1,11.407,17.857Z" style="fill:#99b8c4"/>',
"Io": '<path d="M2,2.887H7.075V7.51H2Zm.052,6.83H7.04V28.626H2.052Z" style="fill:#c2c2c2"/><path d="M13.271,26.454a9.791,9.791,0,0,1-2.616-7.178,10.148,10.148,0,0,1,2.616-7.343,9.321,9.321,0,0,1,7.047-2.72,9.34,9.34,0,0,1,7.075,2.72A10.168,10.168,0,0,1,30,19.276a9.809,9.809,0,0,1-2.607,7.178,9.456,9.456,0,0,1-7.075,2.659A9.436,9.436,0,0,1,13.271,26.454Zm10.436-2.972a6.7,6.7,0,0,0,1.166-4.258,6.943,6.943,0,0,0-1.166-4.354,4.047,4.047,0,0,0-3.389-1.486,4.022,4.022,0,0,0-3.38,1.486,6.991,6.991,0,0,0-1.156,4.354,6.744,6.744,0,0,0,1.156,4.258,4.053,4.053,0,0,0,3.38,1.46A4.078,4.078,0,0,0,23.707,23.482Z" style="fill:#c2c2c2"/>',
"Java": '<path d="M12.325,23.654s-1.07.622.761.833a16.023,16.023,0,0,0,5.8-.246,10.088,10.088,0,0,0,1.541.752c-5.481,2.349-12.405-.136-8.1-1.339" style="fill:#5382a1"/><path d="M11.656,20.588s-1.2.888.633,1.078a22.618,22.618,0,0,0,7.481-.359,3.32,3.32,0,0,0,1.152.7c-6.627,1.938-14.009.153-9.266-1.421" style="fill:#5382a1"/><path d="M17.3,15.388a2.051,2.051,0,0,1-.355,2.954s3.429-1.77,1.854-3.987c-1.471-2.067-2.6-3.095,3.508-6.636,0,0-9.586,2.394-5.007,7.669" style="fill:#5382a1"/><path d="M24.552,25.921s.792.652-.872,1.157c-3.164.958-13.168,1.248-15.948.038-1-.435.874-1.038,1.464-1.164a3.8,3.8,0,0,1,.966-.108c-1.111-.783-7.181,1.537-3.083,2.2,11.176,1.812,20.372-.816,17.473-2.124" style="fill:#5382a1"/><path d="M12.84,17.412s-5.089,1.209-1.8,1.648a38.225,38.225,0,0,0,6.731-.072c2.106-.178,4.221-.555,4.221-.555a8.934,8.934,0,0,0-1.28.685c-5.168,1.359-15.151.727-12.277-.663a9.629,9.629,0,0,1,4.407-1.042" style="fill:#5382a1"/><path d="M21.969,22.515c5.253-2.73,2.824-5.353,1.129-5a3.932,3.932,0,0,0-.6.161.957.957,0,0,1,.449-.346c3.354-1.179,5.933,3.478-1.083,5.322a.458.458,0,0,0,.106-.138" style="fill:#5382a1"/><path d="M18.8,2s2.909,2.91-2.759,7.386c-4.546,3.59-1.037,5.637,0,7.975-2.653-2.394-4.6-4.5-3.294-6.463C14.664,8.019,19.976,6.623,18.8,2" style="fill:#5382a1"/><path d="M13.356,29.912c5.042.323,12.786-.179,12.969-2.565,0,0-.353.9-4.167,1.623a41.458,41.458,0,0,1-12.76.2s.645.533,3.959.746" style="fill:#5382a1"/>',
"JavaScript": '<rect x="2" y="2" width="28" height="28" style="fill:#f5de19"/><path d="M20.809,23.875a2.866,2.866,0,0,0,2.6,1.6c1.09,0,1.787-.545,1.787-1.3,0-.9-.716-1.222-1.916-1.747l-.658-.282c-1.9-.809-3.16-1.822-3.16-3.964,0-1.973,1.5-3.476,3.853-3.476a3.889,3.889,0,0,1,3.742,2.107L25,18.128A1.789,1.789,0,0,0,23.311,17a1.145,1.145,0,0,0-1.259,1.128c0,.789.489,1.109,1.618,1.6l.658.282c2.236.959,3.5,1.936,3.5,4.133,0,2.369-1.861,3.667-4.36,3.667a5.055,5.055,0,0,1-4.795-2.691Zm-9.295.228c.413.733.789,1.353,1.693,1.353.864,0,1.41-.338,1.41-1.653V14.856h2.631v8.982c0,2.724-1.6,3.964-3.929,3.964a4.085,4.085,0,0,1-3.947-2.4Z"/>',
"JSON": '<path d="M4.014,14.976a2.51,2.51,0,0,0,1.567-.518A2.377,2.377,0,0,0,6.386,13.1,15.261,15.261,0,0,0,6.6,10.156q.012-2.085.075-2.747a5.236,5.236,0,0,1,.418-1.686,3.025,3.025,0,0,1,.755-1.018A3.046,3.046,0,0,1,9,4.125,6.762,6.762,0,0,1,10.544,4h.7V5.96h-.387a2.338,2.338,0,0,0-1.723.468A3.4,3.4,0,0,0,8.709,8.52a36.054,36.054,0,0,1-.137,4.133,4.734,4.734,0,0,1-.768,2.06A4.567,4.567,0,0,1,6.1,16a3.809,3.809,0,0,1,1.992,1.754,8.861,8.861,0,0,1,.618,3.865q0,2.435.05,2.9A1.755,1.755,0,0,0,9.264,25.7a2.639,2.639,0,0,0,1.592.337h.387V28h-.7a5.655,5.655,0,0,1-1.773-.2,2.97,2.97,0,0,1-1.324-.93,3.353,3.353,0,0,1-.681-1.63A24.175,24.175,0,0,1,6.6,22.006,16.469,16.469,0,0,0,6.386,18.9a2.408,2.408,0,0,0-.805-1.361,2.489,2.489,0,0,0-1.567-.524Z" style="fill:#f5de19"/><path d="M27.986,17.011a2.489,2.489,0,0,0-1.567.524,2.408,2.408,0,0,0-.805,1.361,16.469,16.469,0,0,0-.212,3.109,24.175,24.175,0,0,1-.169,3.234,3.353,3.353,0,0,1-.681,1.63,2.97,2.97,0,0,1-1.324.93,5.655,5.655,0,0,1-1.773.2h-.7V26.04h.387a2.639,2.639,0,0,0,1.592-.337,1.755,1.755,0,0,0,.506-1.186q.05-.462.05-2.9a8.861,8.861,0,0,1,.618-3.865A3.809,3.809,0,0,1,25.9,16a4.567,4.567,0,0,1-1.7-1.286,4.734,4.734,0,0,1-.768-2.06,36.054,36.054,0,0,1-.137-4.133,3.4,3.4,0,0,0-.425-2.092,2.338,2.338,0,0,0-1.723-.468h-.387V4h.7A6.762,6.762,0,0,1,23,4.125a3.046,3.046,0,0,1,1.149.581,3.025,3.025,0,0,1,.755,1.018,5.236,5.236,0,0,1,.418,1.686q.062.662.075,2.747a15.261,15.261,0,0,0,.212,2.947,2.377,2.377,0,0,0,.805,1.355,2.51,2.51,0,0,0,1.567.518Z" style="fill:#f5de19"/>',
"JSON5": '<path d="M12.815,15.167l.68-5.676h6.489v2h-4.4L15.329,13.7a2.4,2.4,0,0,1,.252-.122,2.962,2.962,0,0,1,.374-.13,2.9,2.9,0,0,1,.458-.106,2.834,2.834,0,0,1,.512-.046,3.983,3.983,0,0,1,1.466.252,2.736,2.736,0,0,1,1.076.723,3.167,3.167,0,0,1,.664,1.168,5,5,0,0,1,.228,1.588,4.157,4.157,0,0,1-.236,1.387,3.307,3.307,0,0,1-1.9,2.029,4.3,4.3,0,0,1-1.715.312,4.75,4.75,0,0,1-1.458-.228,4.054,4.054,0,0,1-1.252-.656,3.359,3.359,0,0,1-.878-1.046,2.787,2.787,0,0,1-.32-1.382H15.18a1.458,1.458,0,0,0,.39.97,1.383,1.383,0,0,0,1.558.206,1.089,1.089,0,0,0,.4-.412,1.749,1.749,0,0,0,.206-.618,4.3,4.3,0,0,0,.062-.74,2.709,2.709,0,0,0-.092-.74,1.506,1.506,0,0,0-.282-.558,1.229,1.229,0,0,0-.5-.349,1.78,1.78,0,0,0-.718-.13,2.121,2.121,0,0,0-.5.054,1.805,1.805,0,0,0-.382.138,1.318,1.318,0,0,0-.274.19,1.28,1.28,0,0,0-.19.2l-2.048-.482" style="fill:#fff"/><path d="M5.985,23.343a4.45,4.45,0,0,1-1.311-.58,3.2,3.2,0,0,1-.848-.824,3.012,3.012,0,0,1-.458-1.008,4.879,4.879,0,0,1-.13-1.143v-1.55a2.3,2.3,0,0,0-.076-.618,1.184,1.184,0,0,0-.222-.466.969.969,0,0,0-.382-.306A1.324,1.324,0,0,0,2,16.744V15.012a1.074,1.074,0,0,0,.937-.4,1.841,1.841,0,0,0,.3-1.1v-1.55a4.879,4.879,0,0,1,.13-1.143,3.037,3.037,0,0,1,.458-1.008A3.17,3.17,0,0,1,4.671,9a4.482,4.482,0,0,1,1.311-.58l.48,1.344a1.222,1.222,0,0,0-.488.328,1.742,1.742,0,0,0-.306.5,2.524,2.524,0,0,0-.16.634,5.827,5.827,0,0,0-.046.74v1.55A2.844,2.844,0,0,1,5.126,14.9a2.37,2.37,0,0,1-1.076.983,2.356,2.356,0,0,1,1.076.992,2.808,2.808,0,0,1,.336,1.374v1.55a5.827,5.827,0,0,0,.046.74,2.586,2.586,0,0,0,.16.634,1.684,1.684,0,0,0,.306.5A1.222,1.222,0,0,0,6.462,22c0-.005-.477,1.344-.477,1.344" style="fill:#999"/><path d="M8.215,19.393a1.289,1.289,0,0,1,.1-.512,1.212,1.212,0,0,1,.29-.4,1.373,1.373,0,0,1,.45-.274,1.637,1.637,0,0,1,.58-.1,1.555,1.555,0,0,1,.572.1,1.269,1.269,0,0,1,.45.274,1.077,1.077,0,0,1,.29.4,1.294,1.294,0,0,1,0,1.024,1.151,1.151,0,0,1-.29.412,1.388,1.388,0,0,1-.45.268,1.613,1.613,0,0,1-.572.1,1.578,1.578,0,0,1-.58-.1,1.409,1.409,0,0,1-.45-.268,1.229,1.229,0,0,1-.39-.924m0-6.088a1.289,1.289,0,0,1,.1-.512,1.212,1.212,0,0,1,.29-.4,1.373,1.373,0,0,1,.45-.274,1.637,1.637,0,0,1,.58-.1,1.555,1.555,0,0,1,.572.1,1.269,1.269,0,0,1,.45.274,1.077,1.077,0,0,1,.29.4,1.294,1.294,0,0,1,0,1.024,1.151,1.151,0,0,1-.29.412,1.388,1.388,0,0,1-.45.268,1.613,1.613,0,0,1-.572.1,1.578,1.578,0,0,1-.58-.1,1.409,1.409,0,0,1-.45-.268,1.229,1.229,0,0,1-.39-.924" style="fill:#999"/><path d="M24.24,20.293a3.648,3.648,0,0,1-.122.929,4.534,4.534,0,0,1-.336.891,4.706,4.706,0,0,1-.5.807,4.005,4.005,0,0,1-.61.664l-1.3-.61c.081-.173.168-.349.26-.526a4.846,4.846,0,0,0,.268-.558,4.443,4.443,0,0,0,.206-.656,3.406,3.406,0,0,0,.084-.8V18.656h2.059l-.008,1.636" style="fill:#999"/><path d="M25.538,21.994a1.251,1.251,0,0,0,.488-.328,1.707,1.707,0,0,0,.306-.5,2.525,2.525,0,0,0,.16-.634,5.826,5.826,0,0,0,.046-.74v-1.55a2.844,2.844,0,0,1,.336-1.382,2.364,2.364,0,0,1,1.084-.983,2.364,2.364,0,0,1-1.084-.983,2.844,2.844,0,0,1-.336-1.382v-1.55a5.827,5.827,0,0,0-.046-.74,2.586,2.586,0,0,0-.16-.634,1.684,1.684,0,0,0-.306-.5,1.222,1.222,0,0,0-.488-.328l.48-1.338A4.45,4.45,0,0,1,27.329,9a3.092,3.092,0,0,1,.848.815,2.892,2.892,0,0,1,.45,1.008,4.606,4.606,0,0,1,.138,1.143v1.55a2.655,2.655,0,0,0,.068.626,1.448,1.448,0,0,0,.222.474,1.037,1.037,0,0,0,.382.3,1.376,1.376,0,0,0,.564.106v1.731a1.077,1.077,0,0,0-.946.412,1.828,1.828,0,0,0-.29,1.084v1.55a4.606,4.606,0,0,1-.138,1.143,2.915,2.915,0,0,1-.45,1.008,3.157,3.157,0,0,1-.848.824,4.482,4.482,0,0,1-1.311.58l-.48-1.352" style="fill:#999"/>',
"Julia": '<path d="M7.448,21.983V13.775l-2.432.669v8.729a2.66,2.66,0,0,1-.106.929.336.336,0,0,1-.308.239.405.405,0,0,1-.212-.074,1.282,1.282,0,0,1-.287-.3,2.813,2.813,0,0,0-.377-.409.874.874,0,0,0-.611-.207,1.22,1.22,0,0,0-.812.255.789.789,0,0,0-.3.627A.907.907,0,0,0,2.542,25a3.115,3.115,0,0,0,1.561.319,7.065,7.065,0,0,0,1.37-.122,2.361,2.361,0,0,0,1.057-.483,2.292,2.292,0,0,0,.68-1.014,5.094,5.094,0,0,0,.239-1.715Z" style="fill:#252525"/><path d="M10.825,14.008H8.4v5.618a2.241,2.241,0,0,0,.218.977,2.489,2.489,0,0,0,.6.8,2.9,2.9,0,0,0,.892.536,3.045,3.045,0,0,0,1.1.2,2.55,2.55,0,0,0,1.051-.244,4.347,4.347,0,0,0,1.019-.648v.743H15.71V14.008H13.289v5.756a2.764,2.764,0,0,1-.648.706,1.139,1.139,0,0,1-.648.281,1.155,1.155,0,0,1-.457-.09,1.263,1.263,0,0,1-.372-.239,1.06,1.06,0,0,1-.25-.356,1.091,1.091,0,0,1-.09-.441Z" style="fill:#252525"/><path d="M19.074,21.983V10.132l-2.411.669V21.983Z" style="fill:#252525"/><path d="M20.038,14.444v7.54h2.421V13.775Z" style="fill:#252525"/><path d="M27.568,17.863v2.3q-.372.276-.674.457a1.165,1.165,0,0,1-.6.181.468.468,0,0,1-.276-.09,1,1,0,0,1-.234-.239,1.138,1.138,0,0,1-.165-.356,1.576,1.576,0,0,1-.058-.43.968.968,0,0,1,.181-.552,2.306,2.306,0,0,1,.473-.5,4.572,4.572,0,0,1,.648-.43,7.612,7.612,0,0,1,.706-.345ZM30,21.983V16a2.083,2.083,0,0,0-.191-.9,1.779,1.779,0,0,0-.595-.69,3.006,3.006,0,0,0-1.025-.441,6.225,6.225,0,0,0-1.481-.154,5.735,5.735,0,0,0-1.327.149,4.6,4.6,0,0,0-1.1.4,2.373,2.373,0,0,0-.759.611,1.216,1.216,0,0,0-.281.77.958.958,0,0,0,.319.738,1.178,1.178,0,0,0,.828.292,1.364,1.364,0,0,0,.547-.1.8.8,0,0,0,.335-.255.986.986,0,0,0,.165-.372,1.978,1.978,0,0,0,.048-.435,1.031,1.031,0,0,1,.223-.669.975.975,0,0,1,.8-.276,1.008,1.008,0,0,1,.781.319,1.594,1.594,0,0,1,.292,1.083v.786l-.265.064q-.488.149-.988.313t-.961.361a7.884,7.884,0,0,0-.865.43,3.511,3.511,0,0,0-.706.531,2.319,2.319,0,0,0-.478.669,1.918,1.918,0,0,0-.175.828,2.034,2.034,0,0,0,.165.823,1.876,1.876,0,0,0,.473.653,2.255,2.255,0,0,0,.749.435,2.907,2.907,0,0,0,.993.159,3.679,3.679,0,0,0,.7-.058,2.509,2.509,0,0,0,.536-.165,2.209,2.209,0,0,0,.43-.25q.191-.143.393-.313v.637Z" style="fill:#252525"/><circle cx="6.204" cy="11.672" r="1.5" style="fill:#6682df"/><path d="M6.2,13.287a1.615,1.615,0,1,1,1.615-1.615A1.617,1.617,0,0,1,6.2,13.287Zm0-3a1.385,1.385,0,1,0,1.385,1.385A1.386,1.386,0,0,0,6.2,10.287Z" style="fill:#4063d8"/><circle cx="21.417" cy="11.672" r="1.5" style="fill:#d5635c"/><path d="M21.417,13.287a1.615,1.615,0,1,1,1.615-1.615A1.617,1.617,0,0,1,21.417,13.287Zm0-3A1.385,1.385,0,1,0,22.8,11.672,1.386,1.386,0,0,0,21.417,10.287Z" style="fill:#cb3c33"/><circle cx="23.385" cy="8.297" r="1.5" style="fill:#60ad51"/><path d="M23.385,9.912A1.615,1.615,0,1,1,25,8.3,1.617,1.617,0,0,1,23.385,9.912Zm0-3A1.385,1.385,0,1,0,24.77,8.3,1.386,1.386,0,0,0,23.385,6.912Z" style="fill:#389826"/><circle cx="25.354" cy="11.672" r="1.5" style="fill:#aa79c1"/><path d="M25.354,13.287a1.615,1.615,0,1,1,1.615-1.615A1.617,1.617,0,0,1,25.354,13.287Zm0-3a1.385,1.385,0,1,0,1.385,1.385A1.386,1.386,0,0,0,25.354,10.287Z" style="fill:#9558b2"/>',
"Kotlin": '<defs><linearGradient id="a" x1="311.336" y1="1452.064" x2="283.342" y2="1480.058" gradientTransform="translate(-281.4 -1450)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e44857"/><stop offset="0.47" stop-color="#9d4b9d"/><stop offset="1" stop-color="#6d5faa"/></linearGradient></defs><title>file_type_kotlin</title><path d="M30,30H2V2H30L16,16Z" style="fill:url(#a)"/>',
"Kusto": '<rect x="0.55" y="22.339" width="15.433" height="2.796" rx="0.439" transform="translate(-14.363 12.797) rotate(-44.999)" style="fill:#b8d432"/><rect x="1.372" y="16.382" width="9.859" height="2.796" rx="0.439" transform="translate(-10.727 9.663) rotate(-44.999)" style="fill:#b8d432"/><rect x="9.232" y="24.301" width="9.859" height="2.796" rx="0.439" transform="translate(-14.024 17.541) rotate(-44.999)" style="fill:#b8d432"/><polygon points="30 2 2 2 30 29.999 30 2" style="fill:#0078d4"/><polygon points="10.282 10.282 21.718 21.718 30 13.436 30 2 18.564 2 10.282 10.282" style="fill:#59b4d9"/><polygon points="30 29.999 30 2 16 16 30 29.999" style="fill:#fff;opacity:0.20000000298023224;isolation:isolate"/><rect x="16.226" y="9.001" width="2.796" height="2.796" rx="0.622" transform="translate(-2.192 15.507) rotate(-44.999)" style="fill:#fff"/><rect x="20.18" y="5.048" width="2.796" height="2.796" rx="0.622" transform="translate(1.762 17.146) rotate(-44.999)" style="fill:#fff"/><rect x="20.18" y="12.955" width="2.796" height="2.796" rx="0.622" transform="translate(-3.829 19.461) rotate(-44.999)" style="fill:#fff"/><rect x="24.133" y="9.002" width="2.796" height="2.796" rx="0.622" transform="translate(0.124 21.099) rotate(-44.999)" style="fill:#fff"/>',
"LaTeX": '<path d="M11.333,13.122c-.128-1.562-.241-2.756-2.287-2.756H7.91v8.4h2.145v.611l-3.083-.029-3.082.029v-.611H6.034v-8.4H4.884c-2.046,0-2.159,1.208-2.287,2.756H2l.284-3.367h9.362l.284,3.367h-.6Z" style="fill:#cfcfcf"/><path d="M19.289,22.53H10.41V21.92h1.506V13.467H10.41v-.611h8.637l.412,3.367h-.6c-.213-1.833-.682-2.756-2.855-2.756H13.791V17.2h.838c1.364,0,1.505-.6,1.505-1.662h.6v3.935h-.6c0-1.08-.142-1.662-1.505-1.662h-.838v4.106h2.216c2.472,0,3-1.108,3.3-3.225h.6Z" style="fill:#cfcfcf"/><path d="M27.727,19.186c-.54,0-1.96,0-2.415.029V18.6h1.179l-2.557-3.552-2.529,3.381A4.1,4.1,0,0,0,22.7,18.6v.611c-.355-.029-1.576-.029-2.017-.029-.4,0-1.548,0-1.875.029V18.6h.383a7.459,7.459,0,0,0,.824-.043c.5-.043.54-.085.667-.256L23.536,14.5l-3.153-4.418H19V9.47c.384.028,1.79.028,2.273.028.582,0,1.918,0,2.429-.028v.611H22.528l2.117,2.955,2.074-2.784a4.1,4.1,0,0,0-1.293-.17V9.47c.356.028,1.591.028,2.032.028.4,0,1.534,0,1.861-.028v.611h-.369a5.264,5.264,0,0,0-.838.043c-.469.043-.526.071-.667.256l-2.4,3.21L28.636,18.6H30v.611C29.645,19.186,28.182,19.186,27.727,19.186Z" style="fill:#cfcfcf"/>',
"Less": '<defs><linearGradient id="a" x1="-3.609" y1="-492.685" x2="-3.609" y2="-480.271" gradientTransform="translate(19.712 502.891)" gradientUnits="userSpaceOnUse"><stop offset="0.15" stop-color="#2a4f84"/><stop offset="0.388" stop-color="#294e82"/><stop offset="1" stop-color="#172e4e"/></linearGradient></defs><title>file_type_less</title><path d="M28.559,20.226a2.4,2.4,0,0,1-2.394,2.394H6.04a2.4,2.4,0,0,1-2.394-2.394V12.6A2.4,2.4,0,0,1,6.04,10.206H26.165A2.4,2.4,0,0,1,28.559,12.6Z" style="fill:url(#a)"/><path d="M24.349,16.25a1.972,1.972,0,0,1,1.578,1.891,1.69,1.69,0,0,1-.653,1.4,2.934,2.934,0,0,1-1.862.559,4.558,4.558,0,0,1-2.241-.618,1.986,1.986,0,0,1,.16-.669,1.83,1.83,0,0,1,.35-.576,3.7,3.7,0,0,0,1.649.493.965.965,0,0,0,.51-.112.339.339,0,0,0,.178-.3q0-.353-.546-.529l-.653-.247q-1.482-.54-1.482-1.762a1.753,1.753,0,0,1,.623-1.416,2.587,2.587,0,0,1,1.678-.648,5.094,5.094,0,0,1,1.15.147,4.555,4.555,0,0,1,1.032.472,1.668,1.668,0,0,1-.13.722,1.22,1.22,0,0,1-.38.558,4.261,4.261,0,0,0-1.66-.446.544.544,0,0,0-.362.106.338.338,0,0,0-.124.27q0,.282.451.446l.736.259Z" style="fill:#f6f6f6"/><path d="M19.1,16.25a1.972,1.972,0,0,1,1.577,1.891,1.691,1.691,0,0,1-.652,1.4,2.937,2.937,0,0,1-1.862.559,4.56,4.56,0,0,1-2.241-.618,1.981,1.981,0,0,1,.16-.669,1.821,1.821,0,0,1,.35-.576,3.7,3.7,0,0,0,1.649.493.963.963,0,0,0,.51-.112.34.34,0,0,0,.178-.3q0-.353-.546-.529l-.653-.247q-1.482-.54-1.482-1.762a1.752,1.752,0,0,1,.623-1.416,2.585,2.585,0,0,1,1.677-.648,5.088,5.088,0,0,1,1.15.147,4.552,4.552,0,0,1,1.032.472,1.668,1.668,0,0,1-.13.722,1.22,1.22,0,0,1-.38.558,4.263,4.263,0,0,0-1.661-.446.543.543,0,0,0-.362.106.339.339,0,0,0-.124.27q0,.282.451.446l.736.259Z" style="fill:#f6f6f6"/><path d="M15.264,16.333a2.822,2.822,0,0,0-.172-1,2.239,2.239,0,0,0-.492-.787,2.28,2.28,0,0,0-.777-.517,2.737,2.737,0,0,0-1.026-.314,2.8,2.8,0,0,0-1.18.361,2.256,2.256,0,0,0-.83.646,2.765,2.765,0,0,0-.487.969,4.4,4.4,0,0,0-.16,1.216,5.681,5.681,0,0,0,.13,1.257,2.628,2.628,0,0,0,.445,1,2.107,2.107,0,0,0,.818.657,2.935,2.935,0,0,0,1.251.277,3.952,3.952,0,0,0,2.324-.712,1.865,1.865,0,0,0-.484-1.081,6.188,6.188,0,0,1-.857.262,3.208,3.208,0,0,1-.656.079,1.017,1.017,0,0,1-.815-.29,1.187,1.187,0,0,1-.271-.77h3.083A4.447,4.447,0,0,0,15.264,16.333Zm-3.248.081a2.433,2.433,0,0,1,.218-1,.632.632,0,0,1,.559-.264.66.66,0,0,1,.582.282,1.749,1.749,0,0,1,.194.856v.13H12.016Z" style="fill:#f6f6f6"/><path d="M29.18,17.2a1.605,1.605,0,0,0-.53,1.265v2.051a1.81,1.81,0,0,1-.683,1.557,2.8,2.8,0,0,1-1.654.549l-.373,0V21.594a1.241,1.241,0,0,0,.595-.334,1.369,1.369,0,0,0,.419-1.047V18.556a2.545,2.545,0,0,1,.257-1.323,2.5,2.5,0,0,1,1.2-.838,2.528,2.528,0,0,1-1.324-1.179,2.956,2.956,0,0,1-.135-1.165V12.533a1.458,1.458,0,0,0-.366-1.054,1.152,1.152,0,0,0-.648-.314v-.96c.445,0,.669,0,.928,0a1.676,1.676,0,0,1,1.023.442,2,2,0,0,1,.673,1.009,2.33,2.33,0,0,1,.086.7v1.757a1.846,1.846,0,0,0,.5,1.383,2.113,2.113,0,0,0,.854.479v.794a1.943,1.943,0,0,0-.82.426Z" style="fill:#f6f6f6;stroke:#404040;stroke-miterlimit:10;stroke-width:0.25px"/><path d="M5.594,10.206H5.26a1.673,1.673,0,0,0-1.023.442,1.71,1.71,0,0,0-.673,1.009,3.531,3.531,0,0,0-.038.7v1.757A1.867,1.867,0,0,1,2.981,15.5,2.847,2.847,0,0,1,2,15.977v.793a2.552,2.552,0,0,1,.947.426,1.638,1.638,0,0,1,.577,1.265v2.051A1.781,1.781,0,0,0,4.16,22.07a2.8,2.8,0,0,0,1.654.55l.421,0V21.594a1.47,1.47,0,0,1-.643-.334,1.355,1.355,0,0,1-.371-1.047V18.557a2.516,2.516,0,0,0-.305-1.323,2.5,2.5,0,0,0-1.2-.838,2.529,2.529,0,0,0,1.324-1.178,2.857,2.857,0,0,0,.183-1.165V12.534A1.462,1.462,0,0,1,5.54,11.48a1.313,1.313,0,0,1,.575-.271l.428,0V10.206H5.594Z" style="fill:#f6f6f6;stroke:#404040;stroke-miterlimit:10;stroke-width:0.25px"/><path d="M9.537,18.529h-.32c-.348,0-.479-.183-.479-.551V11.219a1.256,1.256,0,0,0-.268-.856c-.15-.164-.411-.162-.783-.162H6.964l-.085,0v8.106a1.875,1.875,0,0,0,.352,1.24,1.441,1.441,0,0,0,1.145.393,7.859,7.859,0,0,0,1.269-.118,2.23,2.23,0,0,0,.036-.509,2.278,2.278,0,0,0-.142-.782Z" style="fill:#f6f6f6"/>',
"Liquid": '<path d="M29.988,22.372l-.748.048a5.209,5.209,0,0,1-2.99-.671,7.8,7.8,0,0,0-7.8,0,5.275,5.275,0,0,1-5.3.01A7.262,7.262,0,0,0,9.263,20.7a7.229,7.229,0,0,0-3.94,1.06,4.751,4.751,0,0,1-2.47.7l-.838,0c0,.889-.009,1.739-.015,2.515l.861,0a7.237,7.237,0,0,0,3.75-1.052,4.763,4.763,0,0,1,2.659-.7,4.835,4.835,0,0,1,2.634.718,7.794,7.794,0,0,0,7.8,0,5.287,5.287,0,0,1,5.319,0,7.709,7.709,0,0,0,4.4.989L30,24.888C29.995,24.1,29.991,23.249,29.988,22.372Z" style="fill:#004999"/><path d="M29.983,15.581l-.743.047a5.226,5.226,0,0,1-2.99-.671,7.8,7.8,0,0,0-7.8,0,5.278,5.278,0,0,1-5.3.01A7.312,7.312,0,0,0,9.263,13.91a7.3,7.3,0,0,0-3.941,1.06,4.742,4.742,0,0,1-2.469.7l-.828,0c0,.849,0,1.693,0,2.515l.84,0a7.237,7.237,0,0,0,3.75-1.052,4.7,4.7,0,0,1,2.659-.7,4.8,4.8,0,0,1,2.634.718,7.794,7.794,0,0,0,7.8,0,5.287,5.287,0,0,1,5.319,0,7.709,7.709,0,0,0,4.4.989l.568-.037C29.983,17.269,29.983,16.424,29.983,15.581Z" style="fill:#004999"/><path d="M29.24,9.137a5.254,5.254,0,0,1-2.99-.671,7.8,7.8,0,0,0-7.8,0,5.275,5.275,0,0,1-5.3.009A7.16,7.16,0,0,0,9.263,7.42a7.159,7.159,0,0,0-3.94,1.059,4.738,4.738,0,0,1-2.469.7l-.834,0c0,.82,0,1.664,0,2.517l.836,0a7.237,7.237,0,0,0,3.75-1.052,4.738,4.738,0,0,1,2.659-.706,4.814,4.814,0,0,1,2.634.719,7.791,7.791,0,0,0,7.8,0,5.293,5.293,0,0,1,5.319,0,7.732,7.732,0,0,0,4.4.988l.568-.037c0-.859,0-1.7.007-2.516Z" style="fill:#004999"/>',
"Lisp": '<defs><linearGradient id="a" x1="1925.785" y1="-1383.075" x2="2302.351" y2="-1868.557" gradientTransform="matrix(0.048, 0, 0, -0.045, -82.539, -54.65)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8381c5"/><stop offset="0.566" stop-color="#7e55b3" stop-opacity="0.996"/><stop offset="1" stop-color="#a52ecb" stop-opacity="0.992"/></linearGradient><linearGradient id="b" x1="2214.187" y1="-1750.225" x2="1930.974" y2="-1408.342" gradientTransform="matrix(0.054, 0, 0, -0.054, -95.188, -68.487)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#411f5d"/><stop offset="1" stop-color="#5b2a85"/></linearGradient></defs><title>file_type_emacs</title><path d="M29.363,16A13.364,13.364,0,1,1,16,2.5,13.432,13.432,0,0,1,29.363,16Z" style="stroke-width:0.75px;fill:url(#a);stroke:url(#b)"/><path d="M11.406,25.483a18.157,18.157,0,0,0,2.587-.048,41.728,41.728,0,0,0,4.5-.639,30.671,30.671,0,0,0,3.132-.839c1.142-.421,1.764-.778,2.043-1.284a.62.62,0,0,0-.441-.692c-1.347-.565-2.908-.463-6-.528-3.427-.118-4.567-.691-5.174-1.153-.582-.469-.29-1.765,2.206-2.907a54.266,54.266,0,0,1,6.184-1.73c-1.659-.82-4.753-2.262-5.389-2.573-.558-.273-1.451-.684-1.644-1.182-.219-.478.518-.889.93-1.007a20.3,20.3,0,0,1,4.9-.647,4.308,4.308,0,0,0,1-.069A1.767,1.767,0,0,0,21.879,7.9a2.775,2.775,0,0,0-3.286-1.81C17.22,6.338,13.908,7.3,13.908,7.3c4.093-.035,4.779.033,5.085.461.181.253-.082.6-1.174.777-1.189.194-3.659.428-3.659.428-2.37.141-4.04.15-4.54,1.21-.327.693.349,1.3.645,1.688a12.728,12.728,0,0,0,4.225,2.7c.438.208,1.723.6,1.723.6a11.52,11.52,0,0,0-8.1,2.287c-1.807,1.672-1.008,3.665,2.695,4.891a12.755,12.755,0,0,0,6.534.772c1.922-.1,2.224-.042,2.244.116.027.222-2.134.773-2.724.944-1.5.433-5.436,1.307-5.456,1.312Z" style="fill:#fff"/>',
"LiveScript": '<polygon points="5.504 2.007 8.986 2 8.986 21.746 10.759 19.987 10.759 3.755 12.497 3.755 12.497 18.24 14.253 16.487 14.253 3.755 15.997 3.755 15.997 14.729 17.735 12.962 17.735 3.755 19.461 3.755 19.461 11.225 21.245 9.461 21.245 3.755 22.972 3.755 22.972 7.723 24.738 5.975 24.739 3.755 26.483 3.755 26.483 5.482 28.209 5.482 28.209 7.267 25.911 7.268 24.184 8.993 28.209 8.993 28.209 10.719 22.438 10.719 20.698 12.504 28.209 12.504 28.209 14.23 18.961 14.23 17.205 16.014 28.209 16.014 28.209 17.741 15.455 17.741 13.715 19.496 28.209 19.496 28.209 21.252 11.98 21.252 10.242 22.978 29.982 22.978 29.989 26.489 8.986 26.489 8.986 30 5.504 30 5.504 26.489 2.011 26.489 2.011 22.978 5.504 22.978 5.503 2 5.504 2.007" style="fill:#317eac"/>',
"Log file": '<path d="M29.4,27.6H2.5V4.5H29.4Zm-25.9-1H28.4V5.5H3.5Z" style="fill:#00bd02"/><rect x="2.5" y="5.5" width="26.9" height="1.9" style="fill:#00bd02"/><rect x="11.333" y="9.5" width="8.167" height="1" style="fill:#00bd02"/><rect x="11.333" y="12.083" width="12.5" height="1" style="fill:#00bd02"/><rect x="11.333" y="14.75" width="10.617" height="1" style="fill:#00bd02"/><rect x="11.333" y="17.583" width="14.167" height="1" style="fill:#00bd02"/><rect x="11.333" y="20.5" width="9.834" height="1" style="fill:#00bd02"/><rect x="11.5" y="23.083" width="12.167" height="1" style="fill:#00bd02"/><rect x="5.5" y="9.5" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="12.083" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="12.083" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="14.667" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="17.25" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="20.5" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="23.083" width="4.333" height="1" style="fill:#00bd02"/>',
"LOLCODE": '<path d="M21.3,3.73a3.94,3.94,0,0,1,1.041-.62,8.435,8.435,0,0,1,.556,3.385,24.865,24.865,0,0,1-.643,5.019c-.368-.18-.736-.364-1.1-.554a11.754,11.754,0,0,0,.273-3.747,3.08,3.08,0,0,0-.255-.865,5.142,5.142,0,0,0-2.016,2.07c-.319-.24-.652-.459-.985-.676A15.716,15.716,0,0,1,21.3,3.73Z" style="fill:#ededed"/><path d="M19.451,8.6a4.574,4.574,0,0,1,1.509-1.563,6.685,6.685,0,0,1,.09,2.671C20.517,9.343,19.975,8.987,19.451,8.6Z" style="fill:#ededed"/><path d="M16.461,10.076c-.038-1.134-.031-2.269-.026-3.4-.9.493-1.758,1.071-2.648,1.589-.453.27-.908.536-1.36.808.224-.163.457-.312.69-.462-.861-1.224-1.971-2.5-3.53-2.748a10.964,10.964,0,0,0-.365,5.147c.318-.195.633-.4.962-.572-.474.319-.964.615-1.446.92-.957.6-1.922,1.192-2.892,1.777a1.232,1.232,0,0,0-.391.32c-.1,1.395-.34,4.392-.34,4.392-.254,3.668-.522,7.336-.826,11,4.062.343,8.118.742,12.179,1.076C16.458,23.3,16.472,16.69,16.461,10.076Z" style="fill:#ededed"/><path d="M21.1,2.977A5.884,5.884,0,0,1,22.706,2a10.064,10.064,0,0,1,.772,4.606,24.591,24.591,0,0,1-.508,4.459c1.2.846,2.433,1.645,3.618,2.509q.44,6.38.907,12.758c.066.839.094,1.68.216,2.513-3.029.279-6.057.591-9.085.886a19.137,19.137,0,0,0-2.158.27v-.083c-.01-6.614,0-13.227-.007-19.841-.038-1.134-.031-2.269-.026-3.4v-.1c.406.292.826.562,1.243.839A16.274,16.274,0,0,1,21.1,2.977Zm.2.752a15.716,15.716,0,0,0-3.128,4.011c.334.217.666.437.985.676a5.142,5.142,0,0,1,2.016-2.07,3.08,3.08,0,0,1,.255.865,11.754,11.754,0,0,1-.273,3.747c.364.19.731.374,1.1.554a24.865,24.865,0,0,0,.643-5.019,8.435,8.435,0,0,0-.556-3.385A3.94,3.94,0,0,0,21.3,3.73ZM19.451,8.6c.524.383,1.066.739,1.6,1.108a6.685,6.685,0,0,0-.09-2.671A4.574,4.574,0,0,0,19.451,8.6Z" style="fill:#8d2701"/><path d="M9.219,5.062a3.581,3.581,0,0,1,2.205.748A12.9,12.9,0,0,1,13.788,8.26c-.453.27-.908.536-1.36.808.224-.163.457-.312.69-.462-.861-1.224-1.971-2.5-3.53-2.748a10.964,10.964,0,0,0-.365,5.147c.318-.195.633-.4.962-.572-.474.319-.964.615-1.446.92A14.1,14.1,0,0,1,9.219,5.062Z" style="fill:#8d2701"/><path d="M10.507,8.476a2.455,2.455,0,0,1,1.517.88l-.36.2A2.69,2.69,0,0,0,10.739,9a3.318,3.318,0,0,0-.165,1.281l-.344.11A7.021,7.021,0,0,1,10.507,8.476Z" style="fill:#8d2701"/><path d="M12.139,10.693a.487.487,0,0,1,.542.01,1.552,1.552,0,0,1,.062.6c-.039.784.024,1.573-.076,2.354a1.013,1.013,0,0,1-1.012.886c-.233-.05-.278-.341-.278-.541,0-.675.1-1.347.066-2.024A1.3,1.3,0,0,1,12.139,10.693Zm.15,1.084a.891.891,0,0,0,.251-.866C12.218,11.061,11.9,11.507,12.289,11.777Z" style="fill:#8d2701"/><path d="M14.5,13.728a17.671,17.671,0,0,1,1.928-.822c-.024.064-.069.191-.092.255-.649.358-1.36.6-2.021.938a12.118,12.118,0,0,0-3.238,2.248A7.2,7.2,0,0,1,10,17.381a4.166,4.166,0,0,1,.98-1.246A12.727,12.727,0,0,1,14.5,13.728Z" style="fill:#8d2701"/><path d="M7.628,13.231a.989.989,0,0,1,.594-.152,18.114,18.114,0,0,1-.1,2.654.713.713,0,0,1-.892.658,21.1,21.1,0,0,1,.082-2.226A1.383,1.383,0,0,1,7.628,13.231Zm.179.831c.268-.112.319-.413.412-.654C7.82,13.312,7.775,13.783,7.807,14.062Z" style="fill:#8d2701"/><path d="M10.823,17.094a13.934,13.934,0,0,1,4.612-1.968c-.01.068-.029.206-.039.274a14.273,14.273,0,0,0-4.475,1.914,2.626,2.626,0,0,1-.681.343C10.3,17.356,10.6,17.249,10.823,17.094Z" style="fill:#8d2701"/><path d="M5.264,17.59A5.144,5.144,0,0,1,8,17.1a1.5,1.5,0,0,1,1.142.665A6.854,6.854,0,0,0,7.6,17.278a6.967,6.967,0,0,0-2.484.564Z" style="fill:#8d2701"/><path d="M10.578,17.725a9.59,9.59,0,0,1,3.61-.566c.24.021.321.2.313.424a3.238,3.238,0,0,0-1.956-.09,21.688,21.688,0,0,0-2.557.658C9.995,17.829,10.345,17.809,10.578,17.725Z" style="fill:#8d2701"/><path d="M9.268,17.676c.149-.176.533-.332.664-.062a1.3,1.3,0,0,1-.516.993C9.268,18.337,8.973,17.952,9.268,17.676Z" style="fill:#8d2701"/><path d="M5.744,18.629a5.9,5.9,0,0,1,3.182-.618c-.182.235-.493.178-.751.208a5.663,5.663,0,0,0-1.72.33c-.344.128-.665.31-1.02.409A.6.6,0,0,1,5.744,18.629Z" style="fill:#8d2701"/><path d="M6.9,19.114a9.676,9.676,0,0,1,2.2-.854c-.1.3-.441.338-.7.444a7.839,7.839,0,0,0-2.564,1.415C5.938,19.584,6.488,19.369,6.9,19.114Z" style="fill:#8d2701"/><path d="M11.635,19.7a3.11,3.11,0,0,0,1.91-1.383c.347-.1.273.275.26.494a2.056,2.056,0,0,1-.95,1.036,12.365,12.365,0,0,1-1.827,6.419A2.342,2.342,0,0,1,8.879,27.5a2.251,2.251,0,0,1-1.535-1.49,10.894,10.894,0,0,1-.69-4.665c-.157-.112-.369-.179-.46-.362-.13-.2.011-.425.047-.631.19.151.345.392.606.42a3.617,3.617,0,0,0,1.863-.4,1.588,1.588,0,0,0,.709-.662,3.881,3.881,0,0,0,.431.266A4.28,4.28,0,0,0,11.635,19.7Zm-2.2.835a4.132,4.132,0,0,1-2.462.809,11.049,11.049,0,0,0,.358,3.526,3.226,3.226,0,0,1,.9-1.282,2.055,2.055,0,0,1,2.3-.2,2.3,2.3,0,0,1,.884,1.172,14.659,14.659,0,0,0,1.005-4.489A5.167,5.167,0,0,1,9.435,20.532Zm-.329,3.26a2.273,2.273,0,0,0-1.5,1.434c-.123.269.1.517.225.738.331.462.795,1,1.431.893a2.868,2.868,0,0,0,1.769-1.6A1.6,1.6,0,0,0,9.106,23.792Z" style="fill:#8d2701"/>',
"Lua": '<path d="M16.5,30l-.011-.321c.4-.014.8-.045,1.19-.094l.039.319C17.312,29.952,16.9,29.984,16.5,30Zm-1.222-.011c-.4-.021-.814-.061-1.216-.118l.045-.318c.393.055.793.094,1.188.115ZM18.92,29.7l-.067-.314c.387-.083.776-.184,1.155-.3l.094.307C19.714,29.511,19.316,29.615,18.92,29.7Zm-6.063-.053c-.4-.091-.791-.2-1.177-.326l.1-.306c.377.122.764.23,1.15.319Zm8.4-.665-.121-.3c.364-.148.728-.314,1.08-.493l.006,0,.145.286,0,0C22,28.661,21.626,28.831,21.253,28.982Zm-10.718-.088c-.374-.158-.745-.335-1.1-.524l.15-.284c.35.186.713.358,1.078.512Zm12.893-1.021-.17-.273c.337-.21.668-.437.984-.675l.193.257C24.111,27.425,23.772,27.658,23.428,27.873ZM8.379,27.751c-.341-.22-.676-.459-1-.708l.2-.253c.312.243.64.476.972.691Zm17-1.346-.215-.239c.294-.265.58-.546.851-.836l.235.219C25.972,25.846,25.679,26.134,25.378,26.4ZM6.454,26.252c-.3-.276-.585-.569-.856-.87l.239-.215c.265.294.547.58.836.85ZM27.041,24.62l-.253-.2c.244-.312.476-.639.692-.972l.27.175C27.529,23.966,27.29,24.3,27.041,24.62ZM4.82,24.439c-.244-.324-.476-.662-.692-1.007l.272-.17c.21.337.438.668.676.984Zm23.547-1.867-.284-.151c.186-.35.358-.713.513-1.078l.3.125C28.735,21.843,28.558,22.214,28.368,22.572Zm-24.841-.2-.006-.012c-.183-.359-.352-.728-.5-1.1l.3-.121c.147.362.312.724.491,1.074l.006.012ZM29.32,20.325l-.306-.1c.122-.377.23-.764.319-1.15l.313.072C29.555,19.543,29.446,19.939,29.32,20.325ZM2.608,20.107c-.12-.388-.223-.786-.308-1.182l.314-.067c.083.387.184.776.3,1.155ZM29.87,17.946l-.318-.045c.056-.393.094-.793.115-1.188l.321.017C29.967,17.135,29.927,17.544,29.87,17.946ZM2.1,17.72c-.05-.4-.082-.812-.1-1.218l.321-.011c.014.4.046.8.094,1.19Zm27.582-2.2c-.014-.4-.045-.8-.093-1.19l.319-.039c.049.4.082.813.1,1.218ZM2.331,15.3,2.01,15.28c.021-.405.061-.814.117-1.216l.318.045C2.39,14.5,2.352,14.9,2.331,15.3Zm27.057-2.144c-.083-.387-.184-.776-.3-1.155L29.4,11.9c.119.388.223.786.307,1.183ZM2.663,12.934l-.313-.072c.091-.4.2-.791.326-1.177l.306.1C2.859,12.161,2.752,12.548,2.663,12.934Zm26.026-2.062c-.149-.366-.315-.732-.5-1.086l.286-.146c.185.363.355.736.507,1.111ZM3.4,10.665l-.3-.125c.158-.374.334-.745.524-1.1l.284.15C3.724,9.937,3.552,10.3,3.4,10.665ZM4.513,8.557l-.27-.174c.22-.341.458-.676.707-1l.254.2C4.961,7.9,4.728,8.224,4.513,8.557ZM5.977,6.676l-.235-.219c.276-.3.569-.585.87-.857l.215.239C6.533,6.1,6.247,6.386,5.977,6.676Zm1.77-1.6-.193-.257c.323-.244.662-.477,1.007-.692l.17.272C8.394,4.614,8.063,4.841,7.747,5.079Zm15.705-.558-.018-.012.175-.27.018.011Zm-1.047-.616c-.35-.186-.713-.358-1.078-.512l.125-.3c.374.158.745.334,1.1.524ZM9.769,3.815l-.146-.286.018-.009c.356-.181.724-.349,1.093-.5l.121.3c-.361.147-.72.311-1.068.488Zm10.44-.838c-.377-.122-.764-.229-1.151-.317l.072-.313c.4.091.792.2,1.178.325Zm-8.229-.06-.094-.307c.388-.119.786-.223,1.182-.308l.067.314C12.747,2.7,12.359,2.8,11.98,2.917Zm5.9-.473c-.393-.055-.793-.092-1.188-.113l.016-.321c.405.021.814.059,1.216.115Zm-3.572-.026-.04-.319c.4-.05.812-.083,1.218-.1l.012.321C15.106,2.337,14.705,2.369,14.312,2.418Z" style="fill:gray"/><circle cx="16" cy="15.998" r="10.708" style="fill:navy"/><circle cx="20.435" cy="11.562" r="3.136" style="fill:#fff"/><circle cx="26.708" cy="5.29" r="3.137" style="fill:navy"/><path d="M13.1,21.352v-.79H9.629V14.326h-.9v7.026H13.1" style="fill:#fff"/><path d="M17.916,21.352V16.3h-.8v2.785c0,1.031-.54,1.706-1.378,1.706A.95.95,0,0,1,14.7,19.8V16.3h-.8v3.817c0,.838.626,1.378,1.609,1.378a1.863,1.863,0,0,0,1.687-.925v.781h.723" style="fill:#fff"/><path d="M23.791,21.333v-.607a.664.664,0,0,1-.173.019c-.279,0-.434-.145-.434-.4V17.536c0-.9-.655-1.378-1.9-1.378-1.224,0-1.976.472-2.024,1.638h.81c.067-.617.434-.9,1.185-.9.723,0,1.128.27,1.128.752v.212c0,.337-.2.482-.838.559a5.763,5.763,0,0,0-1.619.308,1.327,1.327,0,0,0-.887,1.311c0,.916.636,1.455,1.658,1.455a2.363,2.363,0,0,0,1.715-.742.855.855,0,0,0,.829.665,1.967,1.967,0,0,0,.549-.087m-1.407-1.725a1.366,1.366,0,0,1-1.513,1.185c-.626,0-.993-.222-.993-.771,0-.53.357-.761,1.214-.887a4,4,0,0,0,1.291-.279v.752" style="fill:#fff"/>',
"Markdown": '<rect x="2.5" y="7.955" width="27" height="16.091" style="fill:none;stroke:#755838"/><polygon points="5.909 20.636 5.909 11.364 8.636 11.364 11.364 14.773 14.091 11.364 16.818 11.364 16.818 20.636 14.091 20.636 14.091 15.318 11.364 18.727 8.636 15.318 8.636 20.636 5.909 20.636" style="fill:#755838"/><polygon points="22.955 20.636 18.864 16.136 21.591 16.136 21.591 11.364 24.318 11.364 24.318 16.136 27.045 16.136 22.955 20.636" style="fill:#755838"/>',
"MATLAB": '<defs><linearGradient id="a" x1="16.803" y1="16.631" x2="15.013" y2="22.411" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#512"/><stop offset="0.23" stop-color="#523"/><stop offset="0.36" stop-color="#534"/><stop offset="0.51" stop-color="#645"/><stop offset="0.66" stop-color="#568"/><stop offset="0.84" stop-color="#29d"/></linearGradient><linearGradient id="b" x1="29.71" y1="18.983" x2="11.71" y2="14.563" gradientUnits="userSpaceOnUse"><stop offset="0.081" stop-color="#c33"/><stop offset="0.189" stop-color="#de5239"/><stop offset="0.313" stop-color="#f06e3e"/><stop offset="0.421" stop-color="#fa8042"/><stop offset="0.5" stop-color="#fe8643"/><stop offset="0.58" stop-color="#fa7f42"/><stop offset="0.696" stop-color="#ef6c3e"/><stop offset="0.833" stop-color="#dc4c37"/><stop offset="0.916" stop-color="#cf3633"/></linearGradient></defs><title>file_type_matlab</title><path d="M2,17.55l7.97-3.22a20.7,20.7,0,0,1,2.72-2.95c.66-.35,1.9-.16,4.17-2.98,2.2-2.75,2.9-5.1,3.93-5.1,1.63,0,2.83,3.52,4.65,8.85A115.629,115.629,0,0,0,30,24.12c-1.9-1.77-3.52-3.68-5.37-3.63-1.72.04-3.63,2.08-5.72,4.7-1.66,2.1-3.86,3.54-4.72,3.51,0,0-2.22-6.28-4.08-7.3a2.641,2.641,0,0,0-2.39.2L2,17.54Z" style="fill:#49d"/><path d="M19.8,4.02c-.67.9-1.48,2.55-2.94,4.38-2.27,2.82-3.5,2.63-4.17,2.98a19.674,19.674,0,0,0-2.72,2.95l3.3,2.41c2.8-3.82,4.3-7.96,5.47-10.64A13.579,13.579,0,0,1,19.8,4.02Z" style="fill:url(#a)"/><path d="M20.8,3.3c-2.18,0-3.67,11.48-11.72,17.89,2.26-.37,4.22,5.24,5.12,7.51,4-.68,7.2-8.33,10.43-8.21,1.85.07,3.47,1.86,5.37,3.63C25.66,15,23.63,3.3,20.8,3.3Z" style="fill:url(#b)"/>',
"MAXScript": '<path d="M14.4,7.568,20.212,2H7.273L4.848,7.536l9.557.032ZM4.848,7.536l6.844,2.6L14.4,7.568m-.013,3.622-2.7-1.053L5.263,16.1l6.286,5.823,2.808-1.1L14.4,7.568m0,0,12.8,8.376L20.212,2M27.2,15.944,14.391,11.19m-.035,9.636-.032,3.685M20.228,30l-8.679-8.073L4.8,24.464,7.257,30Zm0,0L27.2,15.944,14.325,24.512M27.2,15.944,14.357,20.826" style="fill:none;stroke:#1d1d1b;stroke-miterlimit:22.92558479309082;stroke-width:0.028349999338388443px"/><polygon points="14.391 11.19 27.2 15.944 14.405 7.568 14.391 11.19 14.391 11.19" style="fill:#181b17;fill-rule:evenodd"/><polygon points="27.2 15.944 14.357 20.826 14.325 24.509 14.326 24.511 27.2 15.944 27.2 15.944" style="fill:#1a1d1a;fill-rule:evenodd"/><polygon points="14.405 7.568 27.2 15.944 20.212 2 14.405 7.568 14.405 7.568" style="fill:#005f5e;fill-rule:evenodd"/><polygon points="27.2 15.944 14.326 24.511 20.228 30 27.2 15.944 27.2 15.944" style="fill:#004242;fill-rule:evenodd"/><polygon points="14.357 20.826 27.2 15.944 14.391 11.19 14.357 20.826 14.357 20.826" style="fill:#005152;fill-rule:evenodd"/><polygon points="14.357 20.826 14.391 11.19 11.692 10.137 5.263 16.104 11.549 21.927 14.357 20.826 14.357 20.826" style="fill:#00696b;fill-rule:evenodd"/><polygon points="11.692 10.137 14.391 11.19 14.405 7.568 11.692 10.137 11.692 10.137" style="fill:#1b2725;fill-rule:evenodd"/><polygon points="14.357 20.826 11.549 21.927 14.325 24.509 14.357 20.826 14.357 20.826" style="fill:#1c2624;fill-rule:evenodd"/><polygon points="14.325 24.512 4.8 24.464 7.257 30 20.228 30 14.326 24.511 14.325 24.512 14.325 24.512" style="fill:#006466;fill-rule:evenodd"/><polygon points="4.848 7.536 14.405 7.568 20.212 2 7.273 2 4.848 7.536 4.848 7.536" style="fill:#00767a;fill-rule:evenodd"/><polygon points="14.405 7.568 4.848 7.536 11.692 10.137 14.405 7.568 14.405 7.568" style="fill:#1e3938;fill-rule:evenodd"/><polygon points="11.549 21.927 4.8 24.464 14.325 24.512 14.325 24.509 11.549 21.927 11.549 21.927" style="fill:#20302e;fill-rule:evenodd"/>',
"MEL": '<defs><linearGradient id="a" x1="-611.348" y1="-67.488" x2="-600.272" y2="-65.335" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0f6067"/><stop offset="0.5" stop-color="#05abac"/><stop offset="1" stop-color="#58bec4"/></linearGradient><linearGradient id="b" x1="-603.594" y1="-77.699" x2="-602.011" y2="-59.604" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#117c83"/><stop offset="0.5" stop-color="#21b5b5"/><stop offset="1" stop-color="#7ed4d4"/></linearGradient><linearGradient id="c" x1="-612.757" y1="-59.906" x2="-616.934" y2="-72.76" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9accd3"/><stop offset="0.5" stop-color="#72aeb3"/><stop offset="1" stop-color="#317d7f"/></linearGradient><linearGradient id="d" x1="-621.851" y1="-74.579" x2="-614.84" y2="-72.301" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#21626e"/><stop offset="0.5" stop-color="#157c84"/><stop offset="1" stop-color="#03a3a5"/></linearGradient><linearGradient id="e" x1="-616.369" y1="-64.469" x2="-625.34" y2="-72.835" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0b7c81"/><stop offset="0.5" stop-color="#068d90"/><stop offset="1" stop-color="#16b1b1"/></linearGradient><linearGradient id="f" x1="-608.072" y1="-74.678" x2="-603.488" y2="-70.966" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0a8a8f"/><stop offset="0.5" stop-color="#0f7c82"/><stop offset="1" stop-color="#1a5964"/></linearGradient><linearGradient id="g" x1="-601.134" y1="-70.113" x2="-606.008" y2="-67.067" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#256a77"/><stop offset="0.5" stop-color="#0d9499"/><stop offset="1" stop-color="#06a0a2"/></linearGradient></defs><title>file_type_maya</title><path d="M21.6,3.462H30L18.767,24.211s-1.893-5.5-2.706-7.459" style="fill:url(#a)"/><path d="M23.669,29.118H30V3.462C29.995,16.869,24.36,29.118,23.669,29.118Z" style="fill:url(#b)"/><path d="M18.767,24.211H13.541L2,3.462c2.047-.26,6.135-.611,8.16-.776Z" style="fill:url(#c)"/><path d="M8.693,16.019C6.96,22.866,1.995,29.32,2,29.314c5.752,0,6.991-.835,6.991-1.276V16.54C8.89,16.37,8.794,16.194,8.693,16.019Z" style="fill:url(#d)"/><path d="M2,3.462V29.314c3.147-5.2,4.981-8.6,6.6-13.45C4.6,8.794,2,3.462,2,3.462Z" style="fill:url(#e)"/><polyline points="23.233 28.102 23.669 29.118 23.669 15.647 23.233 16.375" style="fill:url(#f)"/><path d="M23.647,15.673v13.4l.016.043c.452,0,6.332-14.5,6.332-25.656C29.995,3.462,26.406,10.947,23.647,15.673Z" style="fill:url(#g)"/>',
"MongoDB": '<defs><linearGradient id="a" x1="-645.732" y1="839.188" x2="-654.59" y2="839.25" gradientTransform="matrix(-0.977, -0.323, -0.29, 0.877, -375.944, -928.287)" gradientUnits="userSpaceOnUse"><stop offset="0.231" stop-color="#999875"/><stop offset="0.563" stop-color="#9b9977"/><stop offset="0.683" stop-color="#a09f7e"/><stop offset="0.768" stop-color="#a9a889"/><stop offset="0.837" stop-color="#b7b69a"/><stop offset="0.896" stop-color="#c9c7b0"/><stop offset="0.948" stop-color="#deddcb"/><stop offset="0.994" stop-color="#f8f6eb"/><stop offset="1" stop-color="#fbf9ef"/></linearGradient><linearGradient id="b" x1="-644.287" y1="823.405" x2="-657.028" y2="845.476" gradientTransform="matrix(-0.977, -0.323, -0.29, 0.877, -375.944, -928.287)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#48a547"/><stop offset="1" stop-color="#3f9143"/></linearGradient><linearGradient id="c" x1="-643.386" y1="839.485" x2="-652.418" y2="833.417" gradientTransform="matrix(-0.977, -0.323, -0.29, 0.877, -375.944, -928.287)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#41a247"/><stop offset="0.352" stop-color="#4ba74b"/><stop offset="0.956" stop-color="#67b554"/><stop offset="1" stop-color="#69b655"/></linearGradient></defs><title>file_type_mongo</title><path d="M16.62,30l-.751-.249s.1-3.8-1.275-4.067c-.9-1.048.133-44.741,3.423-.149a2.712,2.712,0,0,0-1.333,1.523A14.1,14.1,0,0,0,16.62,30Z" style="fill:url(#a)"/><path d="M17.026,26.329a13.223,13.223,0,0,0,5-13.225C20.556,6.619,17.075,4.487,16.7,3.673a9.792,9.792,0,0,1-.825-1.6l.277,18.069S15.578,25.664,17.026,26.329Z" style="fill:url(#b)"/><path d="M15.487,26.569S9.366,22.4,9.72,15.025A15.54,15.54,0,0,1,15.239,3.377,1.725,1.725,0,0,0,15.846,2c.381.82.319,12.243.359,13.579C16.36,20.776,15.916,25.588,15.487,26.569Z" style="fill:url(#c)"/>',
"nginx": '<path d="M15.948,2h.065a10.418,10.418,0,0,1,.972.528Q22.414,5.65,27.843,8.774a.792.792,0,0,1,.414.788c-.008,4.389,0,8.777-.005,13.164a.813.813,0,0,1-.356.507q-5.773,3.324-11.547,6.644a.587.587,0,0,1-.657.037Q9.912,26.6,4.143,23.274a.7.7,0,0,1-.4-.666q0-6.582,0-13.163a.693.693,0,0,1,.387-.67Q9.552,5.657,14.974,2.535c.322-.184.638-.379.974-.535" style="fill:#019639"/><path d="M8.767,10.538q0,5.429,0,10.859a1.509,1.509,0,0,0,.427,1.087,1.647,1.647,0,0,0,2.06.206,1.564,1.564,0,0,0,.685-1.293c0-2.62-.005-5.24,0-7.86q3.583,4.29,7.181,8.568a2.833,2.833,0,0,0,2.6.782,1.561,1.561,0,0,0,1.251-1.371q.008-5.541,0-11.081a1.582,1.582,0,0,0-3.152,0c0,2.662-.016,5.321,0,7.982-2.346-2.766-4.663-5.556-7-8.332A2.817,2.817,0,0,0,10.17,9.033,1.579,1.579,0,0,0,8.767,10.538Z" style="fill:#fff"/>',
"Nim": '<path d="M16.111,6.405s-1.073.847-2.167,1.69a15.361,15.361,0,0,0-4.527.651c-1.1-.7-2.07-1.469-2.07-1.469S6.52,8.7,6,9.535a11.382,11.382,0,0,0-2.236,1.482C2.961,10.7,2.03,10.31,2,10.3c1.063,2.145,1.778,4.292,3.722,5.583,3.1-4.889,17.48-4.439,20.639-.028C28.4,14.787,29.2,12.5,30,10.38c-.088.029-1.181.395-1.889.665a11.489,11.489,0,0,0-1.986-1.51c-.537-.984-1.319-2.313-1.319-2.313s-.927.689-2,1.44a21.265,21.265,0,0,0-4.681-.512c-1-.826-2.014-1.746-2.014-1.746Z" style="fill:#f3d400"/><path d="M3.1,14.854l2.554,6.185c4.435,5.85,15.759,6.257,20.7.113,1.168-2.633,2.745-6.333,2.745-6.333a13.379,13.379,0,0,1-4.6,3.869,12.217,12.217,0,0,1-2.983.793l-5.465-2.832-5.5,2.775a15.679,15.679,0,0,1-2.983-.764A14.076,14.076,0,0,1,3.1,14.854Z" style="fill:#ffe953"/>',
"Nix": '<path d="M13,11.115,6.183,23.76,4.59,20.87l1.839-3.387-3.651-.01L2,16.029l.8-1.477,5.2.018,1.868-3.447Z" style="fill:#7ebae4;fill-rule:evenodd"/><path d="M13.527,21.223h13.64l-1.541,2.922-3.658-.011,1.817,3.389-.779,1.449-1.593,0-2.584-4.825-3.722-.008Z" style="fill:#7ebae4;fill-rule:evenodd"/><path d="M21.467,15.682,14.647,3.037l3.134-.032L19.6,6.4l1.834-3.379h1.557L23.786,4.5,21.174,9.307l1.854,3.455Z" style="fill:#7ebae4;fill-rule:evenodd"/><path d="M10.542,16.324l6.821,12.645L14.229,29l-1.821-3.4-1.834,3.38H9.016l-.8-1.476L10.831,22.7,8.976,19.243Z" style="fill:#5277c3;fill-rule:evenodd"/><path d="M18.464,10.751H4.823L6.365,7.829l3.658.011L8.207,4.451,8.986,3l1.592,0,2.584,4.825,3.722.008Z" style="fill:#5277c3;fill-rule:evenodd"/><path d="M19,20.888,25.817,8.244l1.593,2.89L25.571,14.52l3.651.01L30,15.979l-.8,1.477-5.2-.018-1.868,3.447Z" style="fill:#5277c3;fill-rule:evenodd"/>',
"NSIS": '<path d="M27.435,16.037,22.012,21.46l5.423,5.423" style="fill:#00577b"/><path d="M26.884,15.5H16.048l5.423,5.423" style="fill:#0079aa"/><path d="M26.884,14.712,21.461,9.289l-5.423,5.423" style="fill:#0096d3"/><path d="M20.528,9.131H9.683l5.423,5.423M27.435,3.325,22.012,8.748l5.423,5.423" style="fill:#01b0f0"/><path d="M20.528,8.356,15.105,2.933,9.683,8.356" style="fill:#27bcf3"/><path d="M14.172,2.775H3.327L8.749,8.2" style="fill:#4fc9f5"/><path d="M4.568,15.963,9.991,10.54,4.568,5.117" style="fill:#79201b"/><path d="M10.541,11.091,5.119,16.513H15.964" style="fill:#a42d26"/><path d="M5.119,17.288l5.423,5.423,5.423-5.423" style="fill:#cc382f"/><path d="M4.568,17.829V28.675l5.423-5.423L8.4,21.665m13.916,1.2L16.9,17.447l-5.423,5.423" style="fill:#f0453f"/><path d="M11.475,23.644,16.9,29.067l5.423-5.423" style="fill:#f2625d"/><path d="M17.84,29.225H28.685L23.263,23.8" style="fill:#f47f7d"/><path d="M29.889,29.337l-1.68-1.68V2.392a.374.374,0,0,0-.243-.355A.263.263,0,0,0,27.827,2a.359.359,0,0,0-.271.112L21.471,8.2,15.385,2.112,15.3,2.037h-.037A.307.307,0,0,0,15.105,2H2.4a.434.434,0,0,0-.289.112A.38.38,0,0,0,2,2.392a.359.359,0,0,0,.112.271l1.68,1.68V29.617a.374.374,0,0,0,.243.355A.387.387,0,0,0,4.185,30a.359.359,0,0,0,.271-.112L10.541,23.8l6.085,6.085.084.075h.037A.254.254,0,0,0,16.9,30H29.609a.395.395,0,0,0,.28-.663ZM27.435,3.325V14.171L22.012,8.748l5.423-5.423ZM9.991,10.54,4.568,15.963V5.117L9.991,10.54ZM9.683,9.131H20.528l-5.423,5.423L9.683,9.131Zm.859,1.96,5.423,5.423H5.119l5.423-5.423ZM16.9,17.447l5.423,5.423H11.475L16.9,17.447ZM16.048,15.5H26.893l-5.423,5.423L16.048,15.5Zm5.964,5.964,5.423-5.423V26.883L22.012,21.46Zm4.872-6.748H16.048l5.423-5.423,5.413,5.423ZM20.528,8.356H9.683l5.423-5.423,5.423,5.423ZM3.327,2.775H14.172L8.749,8.2Zm1.241,25.9V17.829L8.4,21.665l1.587,1.587L4.568,28.675Zm.551-11.387H15.964l-5.423,5.423L5.119,17.288ZM16.9,29.067l-5.423-5.423H22.32L16.9,29.067Zm.943.159L23.263,23.8l5.423,5.423Z" style="fill:#464049"/>',
"Object Pascal": '<defs><linearGradient id="a" x1="16" y1="-0.443" x2="16" y2="22.042" gradientUnits="userSpaceOnUse"><stop offset="0.021" stop-color="#ff0c15"/><stop offset="1" stop-color="#9a0c0f"/></linearGradient></defs><title>file_type_delphi</title><circle cx="16" cy="16" r="14" style="fill:url(#a)"/><path d="M27.545,16.243H4.924a.914.914,0,0,0-1.092.82q.033.429.1.849a12.4,12.4,0,0,0,24.532,0q.075-.5.108-1.021C28.478,16.523,28.211,16.207,27.545,16.243Z" style="fill:#ff6443"/><polyline points="18.48 11.64 23.707 7.266 19.787 5.88 16 11.053" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="15.68 11.026 18.64 5.88 14.853 5.88 13.307 11.293" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="13.04 11.373 13.6 6.706 10.587 7.96 11.013 12.76" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="10.747 13 9.787 8.76 7.707 10.84 9.653 14.68" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.387 15.053 7.493 12.376 6.64 14.466 9.04 16.517" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.04 16.757 6.64 15.213 6.48 17.4 9.2 18.333" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.227 18.846 6.64 18.04 7.227 19.8 9.547 19.8" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.707 20.093 7.707 20.386 8.627 21.746 10.267 21" style="fill:#fae7e3;fill-rule:evenodd"/><path d="M20.023,13.089a6.61,6.61,0,0,0-4.53-2A6.293,6.293,0,0,0,11.3,22.07l4.941.129-2.08-4.16Z" style="fill:#eee;fill-rule:evenodd"/><path d="M16.5,22.366l-5.267-.138-.044-.039a6.453,6.453,0,0,1,4.3-11.264,6.787,6.787,0,0,1,4.643,2.05l.123.123-5.9,4.982Zm-5.14-.455,4.616.121L13.961,18l5.825-4.919a6.43,6.43,0,0,0-4.292-1.835,6.133,6.133,0,0,0-4.131,10.667Z" style="fill:#ee4b2e"/><path d="M12.013,20.493c-4.173-5.813,2.109-8.172,2.478-8.453.451-.344-7.59,1.785-3.226,8.88Z" style="fill:#f04e31;fill-rule:evenodd"/><polygon points="20.72 12.6 13.52 17.567 13.733 18.573 21.467 17.026 20.72 12.6" style="fill:#eee;fill-rule:evenodd"/><path d="M13.61,18.761,13.341,17.5l7.495-5.17.814,4.828Zm.089-1.123.158.747L21.283,16.9,20.6,12.874Z" style="fill:#ee4b2e"/><path d="M15.723,21.319c-3.93-.668-4.283.428-4.283.428L10.267,24.44s1.12-.907,5.493,0l.76-1.388Z" style="fill:#dd0c13;fill-rule:evenodd"/><path d="M14.122,21.6c-.02-.2-1.1-.319-1.677-.123-.732.249-1.219,1.142-1.045,1.213a1.975,1.975,0,0,1,1.125-.986C13.447,21.493,14.142,21.8,14.122,21.6Z" style="fill:#ff6e4f;fill-rule:evenodd"/><path d="M15.52,18.606a11.1,11.1,0,0,0,1.547,1.487,6.9,6.9,0,0,1,2.72,4.107c-.107,1.067-1.973,1.76-1.973,1.76l-3.307-7.194Z" style="fill:#eee;fill-rule:evenodd"/><path d="M17.73,26.161l-3.457-7.521,1.32-.208.057.081a10.869,10.869,0,0,0,1.512,1.451,7,7,0,0,1,2.782,4.207l0,.022,0,.022c-.115,1.153-2,1.864-2.077,1.894Zm-2.99-7.27,3.155,6.863c.414-.178,1.63-.763,1.73-1.548a6.793,6.793,0,0,0-2.648-3.981l-.01-.007a11.94,11.94,0,0,1-1.517-1.439Z" style="fill:#ee4b2e"/><path d="M28,12.742c.025.394.034.792.025,1.194a13.946,13.946,0,0,1-19.9,12.3A12.86,12.86,0,0,0,28,12.742Z" style="fill:#eae0df;fill-rule:evenodd;opacity:0.2"/><path d="M2.383,13.893A13.941,13.941,0,0,1,25.7,5.83s-5.009,5.979-10.584,7.907S2.383,13.893,2.383,13.893Z" style="fill:#eae0df;opacity:0.2"/><path d="M3.618,18.694c-.044-.392-.072-.79-.083-1.191C3.329,9.807,10.012,4.2,17.708,3.991a14.2,14.2,0,0,1,5.719,1.458,13.128,13.128,0,0,0-7.188-2.369c-7.1.19-13.306,5.3-13.116,12.4A12.873,12.873,0,0,0,3.618,18.694Z" style="fill:#eae0df;fill-rule:evenodd;opacity:0.2"/>',
"Objective-C": '<path d="M11.29,15.976a8.892,8.892,0,0,0,1.039,4.557,4.818,4.818,0,0,0,5.579,2.13,3.789,3.789,0,0,0,2.734-3.181c.095-.535.1-.54.1-.54,1.537.222,4.014.582,5.55.8l-.1.389A9.958,9.958,0,0,1,23.8,24.9a8.35,8.35,0,0,1-4.747,2.378,12.925,12.925,0,0,1-7.322-.725,8.98,8.98,0,0,1-5.106-5.524A14.353,14.353,0,0,1,6.642,10.9a9.323,9.323,0,0,1,7.929-6.24,11.812,11.812,0,0,1,5.9.491,8.467,8.467,0,0,1,5.456,6.1c.083.311.1.369.1.369-1.709.311-3.821.705-5.518,1.075C20.186,11,19.387,9.666,17.678,9.25a4.656,4.656,0,0,0-5.853,3.158,9.28,9.28,0,0,0-.341,1.273A10.89,10.89,0,0,0,11.29,15.976Z" style="fill:#c2c2c2"/><polygon points="2.033 30 2.033 2 7.967 2 7.967 4.227 4.723 4.227 4.723 27.773 7.967 27.773 7.967 30 2.033 30" style="fill:#c2c2c2"/><polygon points="29.967 29.999 24.033 29.999 24.033 27.771 27.277 27.771 27.277 4.226 24.033 4.226 24.033 1.999 29.967 1.999 29.967 29.999" style="fill:#c2c2c2"/>',
"OCaml": '<defs><linearGradient id="a" x1="-745.623" y1="-92.76" x2="-745.623" y2="-85.108" gradientTransform="translate(758 113.28)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f29104"/><stop offset="1" stop-color="#ec6813"/></linearGradient><linearGradient id="b" x1="-741.99" y1="-109.477" x2="-741.99" y2="-85.099" xlink:href="#a"/><linearGradient id="c" x1="-752.111" y1="-93.918" x2="-752.111" y2="-85.284" xlink:href="#a"/></defs><title>file_type_ocaml</title><path d="M16.571,25.246a4.28,4.28,0,0,0-.039-.709c-.059-.2-.2-.217-.3-.374a3.507,3.507,0,0,1-.532-1.477c-.02-.453-.2-.886-.217-1.339-.02-.217.02-.453,0-.669a1.963,1.963,0,0,0-.039-.315,1.133,1.133,0,0,0-.039-.2l.059-.138a2.72,2.72,0,0,1,.65-.039c.256,0,.512.02.768.02a7.961,7.961,0,0,0,1.536-.059,3.722,3.722,0,0,0,1.949-.847,4.946,4.946,0,0,0,1.536-2.008c.177-.394.177-1.083.551-1.4.433-.374,1.181-.335,1.693-.571a1.187,1.187,0,0,1,.807-.138c.217.039.63.315.729-.059-.079-.039-.1-.138-.138-.177.414-.039,0-1-.158-1.2A2.225,2.225,0,0,0,24.25,13a3.509,3.509,0,0,0-1.536-.217c-.886.177-.827-.335-1.339-.335-.63,0-1.733.039-1.93.63a1.54,1.54,0,0,1-.335.512c-.138.177.02.354-.039.571-.079.217-.177.985-.276,1.26-.177.453-.394,1.024-.788,1.024a3.152,3.152,0,0,1-1.437-.079c-.276-.1-.729-.256-.945-.335-1.024-.433-1.2-.906-1.2-.906a3.026,3.026,0,0,1-.512-.866c-.118-.414-.315-.768-.394-1s-.3-.591-.453-.985a2.667,2.667,0,0,0-.709-1.063c-.315-.276-.61-.729-1.26-.591a1.641,1.641,0,0,0-.866.315c-.217.177-.3.571-.492.886-.118.177-.315.709-.512,1.162a1.929,1.929,0,0,1-.335.65c-.118.079-.256.2-.414.138a.924.924,0,0,1-.315-.2,5.334,5.334,0,0,1-.709-1.122,11.1,11.1,0,0,0-.788-1.241,1.016,1.016,0,0,0-.985-.551c-1.024,0-1.1.571-1.556,1.418a5.574,5.574,0,0,1-.669,1.4c-.236.256-.945,1.339-1.457,1.516H2v7.62c.039-.1.059-.2.1-.276.2-.414.65-.807.906-1.221a3.5,3.5,0,0,0,.374-.709,3.743,3.743,0,0,1,.236-.709.794.794,0,0,1,.571-.335c.354-.059.65.492,1.083.709.2.079,1.063.394,1.319.453.433.1.906.2,1.339.276.236.039.453.079.709.1a7.3,7.3,0,0,1,1.083.1,2.277,2.277,0,0,0-.807,1.221c-.158.433-.276.925-.473,1.339-.217.473-.669.669-.61,1.221a2.668,2.668,0,0,1,.02.689,4.009,4.009,0,0,1-.217.689c-.1.315-.217,1.359-.354,1.674l.906-.118h0A10.692,10.692,0,0,0,8.4,26.388a3.737,3.737,0,0,1,.729-1.28c.335-.374.315-.847.512-1.3a12.488,12.488,0,0,1,.768-1.3c.492-.807.807-1.812,1.851-2.028a3.3,3.3,0,0,1,1.024.709,4.452,4.452,0,0,1,.886,1.1,12.851,12.851,0,0,1,.886,2.678,1.227,1.227,0,0,0,.394.709,5.462,5.462,0,0,1,.433.729c.079.177.2.571.3.788a6.267,6.267,0,0,1,.315.827l.847-.02h.02v-.02A9.754,9.754,0,0,1,16.571,25.246Z" style="fill:#fff"/><path d="M16.217,27.235c-.1-.2-.217-.61-.3-.788a5.462,5.462,0,0,0-.433-.729,1.119,1.119,0,0,1-.394-.709,12.487,12.487,0,0,0-.886-2.678,4.452,4.452,0,0,0-.886-1.1,3.3,3.3,0,0,0-1.024-.709c-1.044.2-1.359,1.221-1.851,2.028a12.488,12.488,0,0,0-.768,1.3c-.2.433-.177.925-.512,1.3a3.443,3.443,0,0,0-.729,1.28c-.039.1-.118,1.083-.217,1.319h0l1.536-.1c1.437.1,1.024.65,3.249.532l3.525-.118h0A6.267,6.267,0,0,0,16.217,27.235Z" style="fill:url(#a)"/><path d="M26.456,3.8H5.544A3.521,3.521,0,0,0,2.02,7.328v7.679h0c.512-.177,1.221-1.26,1.457-1.516a5.913,5.913,0,0,0,.669-1.4c.453-.827.532-1.418,1.556-1.418a1.016,1.016,0,0,1,.985.551,9.547,9.547,0,0,1,.788,1.241,4.849,4.849,0,0,0,.709,1.122,2,2,0,0,0,.315.2c.158.059.3-.059.414-.138A1.929,1.929,0,0,0,9.246,13c.2-.453.394-.965.512-1.162.2-.315.276-.709.492-.886a1.59,1.59,0,0,1,.866-.315c.65-.138.945.315,1.26.591a3.285,3.285,0,0,1,.709,1.063c.158.394.354.768.453.985a8.946,8.946,0,0,1,.394,1,3.713,3.713,0,0,0,.512.866s.177.473,1.2.906a8.749,8.749,0,0,0,.945.335,3.152,3.152,0,0,0,1.437.079c.394,0,.61-.571.788-1.024.1-.276.217-1.044.276-1.26s-.1-.374.039-.571c.158-.217.256-.236.335-.512.2-.61,1.3-.63,1.93-.63.532,0,.453.512,1.339.335a3.243,3.243,0,0,1,1.536.217,2.225,2.225,0,0,1,1.142.551c.158.2.571,1.162.158,1.2.039.039.079.138.138.177-.1.374-.492.1-.729.059a1.187,1.187,0,0,0-.807.138c-.512.217-1.241.2-1.693.571-.374.315-.374,1-.551,1.4a5.167,5.167,0,0,1-1.536,2.008,3.9,3.9,0,0,1-1.949.847,7.961,7.961,0,0,1-1.536.059c-.256-.02-.512-.02-.768-.02-.158,0-.669-.02-.65.039l-.059.138a.7.7,0,0,0,.039.2c.02.118.02.217.039.315,0,.217-.02.453,0,.669.02.453.2.866.217,1.339a3.26,3.26,0,0,0,.532,1.477c.1.158.236.177.3.374a4.163,4.163,0,0,1,.039.709,9.685,9.685,0,0,0,.827,2.757v.02h0c.512-.079,1.044-.276,1.713-.374,1.241-.177,2.954-.1,4.056-.2,2.8-.256,4.312,1.142,6.813.571V7.328A3.551,3.551,0,0,0,26.456,3.8ZM16.02,20.343Z" style="fill:url(#b)"/><path d="M8.478,23.573c.2-.433.315-.906.473-1.339a2.277,2.277,0,0,1,.807-1.221,7.3,7.3,0,0,0-1.083-.1c-.236-.02-.473-.059-.709-.1-.433-.079-.925-.177-1.339-.276-.256-.059-1.142-.374-1.319-.453-.453-.2-.748-.768-1.083-.709a.794.794,0,0,0-.571.335,3.743,3.743,0,0,0-.236.709c-.1.236-.256.473-.374.709a12.289,12.289,0,0,0-.925,1.2c-.039.1-.059.2-.1.3v4.745a5.4,5.4,0,0,1,.729.158,8.77,8.77,0,0,0,4.371.354l.177-.02h0c.138-.315.256-1.359.354-1.674a5.494,5.494,0,0,0,.217-.689,2.668,2.668,0,0,0-.02-.689C7.809,24.242,8.262,24.045,8.478,23.573Z" style="fill:url(#c)"/>',
"Octave": '<defs id="defs2874"> <radialGradient cx="182.9837" cy="395.04871" r="148.95309" fx="182.9837" fy="395.04871" id="radialGradient3033" xlink:href="#linearGradient3755" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.22914334,-0.24901479,0.7643572,0.83064268,-272.85337,-159.69482)" /> <linearGradient id="linearGradient3755"> <stop id="stop3757" style="stop-color:#008cbe;stop-opacity:1" offset="0" /> <stop id="stop3759" style="stop-color:#b2ffff;stop-opacity:1" offset="1" /> </linearGradient> </defs> <g id="layer1" transform="scale(0.11296) translate(-233.35544,-390.71802)"> <g transform="matrix(8.4519723,0,0,8.4519723,-278.45012,-403.82975)" id="g3025"> <path d="m 66.432103,97.488679 c -5.19584,5.646431 -3.93661,16.169031 2.81107,23.501871 6.74768,7.33285 16.42898,8.69955 21.62483,3.05312 5.19585,-5.64643 3.9402,-16.16946 -2.80749,-23.5023 -6.74768,-7.332861 -16.43256,-8.699131 -21.62841,-3.052691 z m 4.71149,2.34553 c 4.08256,-4.43659 11.589,-3.47152 16.76741,2.155961 5.17842,5.6275 6.06647,13.78491 1.98391,18.2215 -4.08256,4.43658 -11.59097,3.47369 -16.76939,-2.15381 -5.17842,-5.6275 -6.06449,-13.78704 -1.98193,-18.223651 z" id="path5874" style="fill:url(#radialGradient3033);fill-opacity:1;stroke:none" /> <rect width="4.349854" height="4.349854" rx="0.76958966" ry="0.76958966" x="85.381561" y="99.493881" id="rect5876" style="fill:#ff7f2a;fill-opacity:1;fill-rule:nonzero;stroke:#d45500;stroke-width:0.74403799;stroke-miterlimit:4;stroke-dasharray:none" /> <rect width="10.245436" height="10.245436" rx="1.8126545" ry="1.8126545" x="60.92659" y="105.2245" id="rect5878" style="fill:#ff7f2a;fill-opacity:1;fill-rule:nonzero;stroke:#d45500;stroke-width:0.74403799;stroke-miterlimit:4;stroke-dasharray:none" /> <rect width="6.1897531" height="6.1897531" rx="1.0951102" ry="1.0951102" x="87.404739" y="118.63705" id="rect5880" style="fill:#ff7f2a;fill-opacity:1;fill-rule:nonzero;stroke:#d45500;stroke-width:0.74403799;stroke-miterlimit:4;stroke-dasharray:none" /> </g> </g>',
"OpenCL": '<defs><linearGradient id="a" x1="29.662" y1="18.026" x2="21.419" y2="20.234" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="red"/><stop offset="1" stop-color="#ff6a6a"/></linearGradient><linearGradient id="b" x1="24.588" y1="9.748" x2="18.776" y2="15.56" xlink:href="#a"/><linearGradient id="c" x1="18.466" y1="6.619" x2="15.924" y2="13.603" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#cfa40c"/><stop offset="1" stop-color="#edd480"/></linearGradient><linearGradient id="d" x1="13.17" y1="6.51" x2="13.17" y2="12.997" xlink:href="#c"/><linearGradient id="e" x1="8.808" y1="8.486" x2="10.988" y2="13.161" xlink:href="#c"/><linearGradient id="f" x1="5.505" y1="11.477" x2="8.546" y2="14.519" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#11a119"/><stop offset="1" stop-color="#37ae3d"/></linearGradient><linearGradient id="g" x1="3.639" y1="14.285" x2="6.883" y2="16.158" xlink:href="#f"/><linearGradient id="h" x1="2.265" y1="17.799" x2="5.379" y2="18.933" xlink:href="#f"/><linearGradient id="i" x1="2" y1="21.614" x2="4.833" y2="21.614" xlink:href="#f"/><linearGradient id="j" x1="20.662" y1="18.949" x2="18.026" y2="17.428" gradientUnits="userSpaceOnUse"><stop offset="0.5" stop-color="#646464"/><stop offset="1" stop-color="#cbcbcb"/></linearGradient><linearGradient id="k" x1="16.021" y1="25.264" x2="16.021" y2="22.691" xlink:href="#j"/></defs><title>file_type_opencl</title><path d="M27.828,13.574a14.676,14.676,0,0,1,.835,1.542A14.964,14.964,0,0,1,29.92,22.9H22.133a10.377,10.377,0,0,0-.967-4.424Z" style="fill:url(#a)"/><path d="M17.753,14.43a10.074,10.074,0,0,1,2.772,2.878l6.273-5.2a15.54,15.54,0,0,0-4.988-4.15Z" style="fill:url(#b)"/><path d="M14.781,13.086a8.827,8.827,0,0,1,2.376.966L20.666,7.43a12.7,12.7,0,0,0-4.645-.952Z" style="fill:url(#c)"/><path d="M14.364,13l.612-6.488a12.46,12.46,0,0,0-3.611.813l.507,5.638A7.219,7.219,0,0,1,14.364,13" style="fill:url(#d)"/><path d="M10.948,13.179l-.683-5.373A14.588,14.588,0,0,0,7.773,9.379l1.74,4.42a7.518,7.518,0,0,1,1.435-.619" style="fill:url(#e)"/><path d="M8.86,14.206,6.474,10.511c-.453.44-.79.82-1.006,1.074q-.227.267-.436.538L7.48,15.387a8.87,8.87,0,0,1,1.38-1.182" style="fill:url(#f)"/><path d="M7.046,15.875,4.335,13.112a14.259,14.259,0,0,0-1.25,2.429l3.007,1.71a9.826,9.826,0,0,1,.954-1.376" style="fill:url(#g)"/><path d="M5.527,18.393l-2.77-1.945a15.452,15.452,0,0,0-.63,2.83l2.906.607a10.343,10.343,0,0,1,.494-1.492" style="fill:url(#h)"/><path d="M4.833,20.9a10.684,10.684,0,0,0-.1,2H2.093a14.333,14.333,0,0,1-.064-2.573Z" style="fill:url(#i)"/><path d="M22.551,12.478,14.751,23.1A1.544,1.544,0,0,1,17.5,24.428Z" style="fill:url(#j)"/><path d="M16.021,25.522a1.544,1.544,0,1,1,1.092-.452A1.533,1.533,0,0,1,16.021,25.522Z" style="fill:#646464"/><path d="M17.308,23.978a1.287,1.287,0,1,1-.377-.91A1.283,1.283,0,0,1,17.308,23.978Z" style="fill:url(#k)"/>',
"Pascal": '<defs><linearGradient id="a" x1="16" y1="-0.443" x2="16" y2="22.042" gradientUnits="userSpaceOnUse"><stop offset="0.021" stop-color="#ff0c15"/><stop offset="1" stop-color="#9a0c0f"/></linearGradient></defs><title>file_type_delphi</title><circle cx="16" cy="16" r="14" style="fill:url(#a)"/><path d="M27.545,16.243H4.924a.914.914,0,0,0-1.092.82q.033.429.1.849a12.4,12.4,0,0,0,24.532,0q.075-.5.108-1.021C28.478,16.523,28.211,16.207,27.545,16.243Z" style="fill:#ff6443"/><polyline points="18.48 11.64 23.707 7.266 19.787 5.88 16 11.053" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="15.68 11.026 18.64 5.88 14.853 5.88 13.307 11.293" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="13.04 11.373 13.6 6.706 10.587 7.96 11.013 12.76" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="10.747 13 9.787 8.76 7.707 10.84 9.653 14.68" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.387 15.053 7.493 12.376 6.64 14.466 9.04 16.517" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.04 16.757 6.64 15.213 6.48 17.4 9.2 18.333" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.227 18.846 6.64 18.04 7.227 19.8 9.547 19.8" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.707 20.093 7.707 20.386 8.627 21.746 10.267 21" style="fill:#fae7e3;fill-rule:evenodd"/><path d="M20.023,13.089a6.61,6.61,0,0,0-4.53-2A6.293,6.293,0,0,0,11.3,22.07l4.941.129-2.08-4.16Z" style="fill:#eee;fill-rule:evenodd"/><path d="M16.5,22.366l-5.267-.138-.044-.039a6.453,6.453,0,0,1,4.3-11.264,6.787,6.787,0,0,1,4.643,2.05l.123.123-5.9,4.982Zm-5.14-.455,4.616.121L13.961,18l5.825-4.919a6.43,6.43,0,0,0-4.292-1.835,6.133,6.133,0,0,0-4.131,10.667Z" style="fill:#ee4b2e"/><path d="M12.013,20.493c-4.173-5.813,2.109-8.172,2.478-8.453.451-.344-7.59,1.785-3.226,8.88Z" style="fill:#f04e31;fill-rule:evenodd"/><polygon points="20.72 12.6 13.52 17.567 13.733 18.573 21.467 17.026 20.72 12.6" style="fill:#eee;fill-rule:evenodd"/><path d="M13.61,18.761,13.341,17.5l7.495-5.17.814,4.828Zm.089-1.123.158.747L21.283,16.9,20.6,12.874Z" style="fill:#ee4b2e"/><path d="M15.723,21.319c-3.93-.668-4.283.428-4.283.428L10.267,24.44s1.12-.907,5.493,0l.76-1.388Z" style="fill:#dd0c13;fill-rule:evenodd"/><path d="M14.122,21.6c-.02-.2-1.1-.319-1.677-.123-.732.249-1.219,1.142-1.045,1.213a1.975,1.975,0,0,1,1.125-.986C13.447,21.493,14.142,21.8,14.122,21.6Z" style="fill:#ff6e4f;fill-rule:evenodd"/><path d="M15.52,18.606a11.1,11.1,0,0,0,1.547,1.487,6.9,6.9,0,0,1,2.72,4.107c-.107,1.067-1.973,1.76-1.973,1.76l-3.307-7.194Z" style="fill:#eee;fill-rule:evenodd"/><path d="M17.73,26.161l-3.457-7.521,1.32-.208.057.081a10.869,10.869,0,0,0,1.512,1.451,7,7,0,0,1,2.782,4.207l0,.022,0,.022c-.115,1.153-2,1.864-2.077,1.894Zm-2.99-7.27,3.155,6.863c.414-.178,1.63-.763,1.73-1.548a6.793,6.793,0,0,0-2.648-3.981l-.01-.007a11.94,11.94,0,0,1-1.517-1.439Z" style="fill:#ee4b2e"/><path d="M28,12.742c.025.394.034.792.025,1.194a13.946,13.946,0,0,1-19.9,12.3A12.86,12.86,0,0,0,28,12.742Z" style="fill:#eae0df;fill-rule:evenodd;opacity:0.2"/><path d="M2.383,13.893A13.941,13.941,0,0,1,25.7,5.83s-5.009,5.979-10.584,7.907S2.383,13.893,2.383,13.893Z" style="fill:#eae0df;opacity:0.2"/><path d="M3.618,18.694c-.044-.392-.072-.79-.083-1.191C3.329,9.807,10.012,4.2,17.708,3.991a14.2,14.2,0,0,1,5.719,1.458,13.128,13.128,0,0,0-7.188-2.369c-7.1.19-13.306,5.3-13.116,12.4A12.873,12.873,0,0,0,3.618,18.694Z" style="fill:#eae0df;fill-rule:evenodd;opacity:0.2"/>',
"Perl": '<path d="M29.25,13.8a6.888,6.888,0,0,0-.742-2.268,1.011,1.011,0,0,0-.172-.233,9.471,9.471,0,0,1-1.725-2.4,8.632,8.632,0,0,0-1.395-2.382A6.906,6.906,0,0,1,24.1,4.644,4.572,4.572,0,0,0,21.99,1.727a1.009,1.009,0,0,0-.1-.054,8.886,8.886,0,0,0-1.3-.468,1.022,1.022,0,0,0-.263-.035,1.009,1.009,0,0,0-.2.021,5.607,5.607,0,0,1-.807.107c-.05,0-.1-.006-.149-.006a2.842,2.842,0,0,0-1.416.453c-.094.052-.188.106-.284.149q-.041.018-.078.039A1.637,1.637,0,0,1,17.066,2a3.109,3.109,0,0,0-.772.194,1,1,0,0,0-.508.483,2.184,2.184,0,0,1-.469.5A4.382,4.382,0,0,0,14.555,4a.964.964,0,0,0-.116.234,4.687,4.687,0,0,1-1.574,2.2,6.471,6.471,0,0,0-.8.613,2.734,2.734,0,0,0-.627-1.634c-.017-.019-.035-.038-.053-.056l0-.014a2.378,2.378,0,0,0-.135-.586,1,1,0,0,0-.132-.236A5.167,5.167,0,0,0,9.511,3.113a.988.988,0,0,0-.346-.119,1.5,1.5,0,0,1-.148-.077,2.06,2.06,0,0,0-1-.311,1.476,1.476,0,0,0-.681.166.987.987,0,0,0-.274.206,1.328,1.328,0,0,1-.125.063,1.9,1.9,0,0,0-.908.778,2.539,2.539,0,0,0-.541.106,1.656,1.656,0,0,1-.383.057,2.3,2.3,0,0,0-1.5.545l-.106.1a2.533,2.533,0,0,0-1,2.525,1.08,1.08,0,0,0,.068.165A2.294,2.294,0,0,0,4.446,8.478c-.1.238-.2.473-.314.7a1.009,1.009,0,0,0-.087.293A11.052,11.052,0,0,0,4,12.039c0,.02,0,.04.007.06a5.278,5.278,0,0,1,.041.547,2.926,2.926,0,0,0,.931,2.4c.017.014.034.026.052.039l.008.031a2.8,2.8,0,0,0,.151.447,1.185,1.185,0,0,0,.632.617,1.289,1.289,0,0,0,.248.571,1,1,0,0,0,.332.279,2.453,2.453,0,0,0,.465.176l.064.018a.976.976,0,0,0,.192.171A5.879,5.879,0,0,1,7.873,18a1.13,1.13,0,0,0,1.351.427,1.5,1.5,0,0,0,.765.215,1.421,1.421,0,0,0,.624-.145l.114-.026c.024.408.033.817.028,1.223a1.043,1.043,0,0,0,.026.242,10.744,10.744,0,0,1,.266,1.828.931.931,0,0,0,.031.2,8.492,8.492,0,0,1,.268,1.815c0,.031,0,.063.008.094a6.083,6.083,0,0,1-.61,3.575.994.994,0,0,0-.089.261,1.093,1.093,0,0,0-.234.079l-.05.022a2.013,2.013,0,0,0-1.2,1.065,1.322,1.322,0,0,0,.074,1.054,1,1,0,0,0,.324.371,3.547,3.547,0,0,0,3.509.3,1.546,1.546,0,0,0,.829-1.653l-.005-.067a.989.989,0,0,0,.056-.158,11.186,11.186,0,0,0,.288-2.068,8.939,8.939,0,0,1,.259-1.822,4.727,4.727,0,0,0,.389-1.588l.042.048a12.661,12.661,0,0,0,1.255,1.129,10.3,10.3,0,0,1,1.1.989l-.011.038a.532.532,0,0,1-.342.359l-.049.017a1.921,1.921,0,0,0-1.184,1.334,1.313,1.313,0,0,0,.452,1.234,1,1,0,0,0,.441.222,4.908,4.908,0,0,0,2.735-.181,1.556,1.556,0,0,0,.266-.124,1.411,1.411,0,0,0,.97.372,2.326,2.326,0,0,0,1-.274c.049-.023.1-.045.14-.062a1,1,0,0,0,.637-.864,4.553,4.553,0,0,0-.468-2.343,1.56,1.56,0,0,0-.51-.6,10.8,10.8,0,0,1,1.3-2.15,2.193,2.193,0,0,0,.451-2.026,2.519,2.519,0,0,1-.043-.394,1.046,1.046,0,0,0,0-.148,5.756,5.756,0,0,1,.012-1.279,7.161,7.161,0,0,0,.951,1.793,7.892,7.892,0,0,1,.133,1.1,10.733,10.733,0,0,0,.133,1.186,9.36,9.36,0,0,1-.224,3.9,1,1,0,0,0-.032.34h0a.98.98,0,0,0-.1.179,2.238,2.238,0,0,0-.312,1.235,1.007,1.007,0,0,0,.039.2,1.315,1.315,0,0,0,1.328.963c.086,0,.177-.006.268-.014l.019,0,.038.013a2.109,2.109,0,0,0,2.517-1.088,1,1,0,0,0,.058-.735,5.285,5.285,0,0,1-.208-1.027,1.011,1.011,0,0,0-.046-.217,6.47,6.47,0,0,1-.221-3.22,1.112,1.112,0,0,0,.015-.114,3.907,3.907,0,0,1,.074-.443,2.738,2.738,0,0,0-.193-2.1,4.339,4.339,0,0,1,.021-.476c.011-.147.023-.3.027-.463a1.59,1.59,0,0,0,.862-.851,12.83,12.83,0,0,0,.947-2.23,1.719,1.719,0,0,0,.172-1.185,1.234,1.234,0,0,0,.111-.251A1.467,1.467,0,0,0,29.25,13.8ZM18.863,22.768c-.026,0-.053-.008-.08-.01l-.024,0a2.748,2.748,0,0,1-.236-.323c-.059-.088-.118-.175-.178-.258a2.253,2.253,0,0,0,.208-.234,1.255,1.255,0,0,0,.629-.321A3.186,3.186,0,0,1,18.863,22.768Z" style="fill:#ededed"/><path d="M19.289,2.3c-.548-.065-.961.3-1.419.506-.368.206-.815.152-1.185.309-.282.579-.941.908-1.3,1.443a5.7,5.7,0,0,1-1.942,2.694,5.464,5.464,0,0,0-2.368,3.394c-.145.3-.122.746-.277,1-.511.143-.239-.516-.3-.825-.074-.47.341-.77.373-1.226a1.834,1.834,0,0,0,.209-1.053c-.056-.814.189-1.807-.393-2.477-.349-.2-.239-.623-.366-.947a4.214,4.214,0,0,0-1.3-1.139c-.419-.041-.806-.542-1.232-.323-.266.309-.763.305-.922.713-.1.516-.688.374-1.068.5-.488.185-1.118.006-1.518.382-.411.41-1.034.961-.835,1.606.457.882,1.645.438,2.317.974A17.99,17.99,0,0,1,5.036,9.61a10.051,10.051,0,0,0-.044,2.332c.123.773-.083,1.772.606,2.319.38.137.357.572.5.887.134.29.427-.113.543.193.338.184.037.561.22.8.263.137.639.128.822.426a6.844,6.844,0,0,1,.975.806c.23.467.531-.454.783-.109.17.285.506.522.819.285a2.993,2.993,0,0,0,1.324-.556,18.033,18.033,0,0,1,.171,2.718,11.733,11.733,0,0,1,.29,2,9.409,9.409,0,0,1,.3,2.03,7.111,7.111,0,0,1-.709,4.16,1.012,1.012,0,0,1-.807.8c-.291.13-.9.366-.692.776a2.549,2.549,0,0,0,2.52.214c.51-.243.073-.858.334-1.226.343-1.3.174-2.691.575-3.985a3.762,3.762,0,0,0,.3-2.1c.079-.44-.105-.969.187-1.329a1.813,1.813,0,0,1,.483-1.2,14.762,14.762,0,0,0,.144-2.026,3.214,3.214,0,0,1,1.267-.127c.018.375-.272.812-.19,1.234A1.948,1.948,0,0,1,15.5,20.3a2.849,2.849,0,0,0,.168,2.308c.782.839,1.8,1.432,2.536,2.327.314.205.2.517.038.784a1.528,1.528,0,0,1-.987,1.034c-.308.121-.806.566-.442.882a3.906,3.906,0,0,0,2.178-.144c.476-.171.3-.738.488-1.088.3.233.423.765.711,1.069.3.433.807.073,1.156-.062a3.549,3.549,0,0,0-.372-1.842c-.167-.378-.8-.385-.77-.852a11.761,11.761,0,0,1,1.712-3c.51-.479.13-1.191.158-1.8A6.765,6.765,0,0,1,23.158,15.5a15.889,15.889,0,0,0,.692,2.14,6.23,6.23,0,0,0,1.1,2.246c.237.811.176,1.71.331,2.551a10.44,10.44,0,0,1-.242,4.347c.04.518-.457.9-.415,1.408.14.469.7.093.99.29a1.11,1.11,0,0,0,1.324-.572,6.212,6.212,0,0,1-.247-1.223,7.454,7.454,0,0,1-.255-3.719c.046-.669.457-1.5-.073-2.072-.148-.619.1-1.285-.049-1.915a12.877,12.877,0,0,1-.122-4.933c.093-.227.013-.649.247-.775a1.851,1.851,0,0,1,.315,1.232,3.7,3.7,0,0,1,.079,2.081c-.424.531-.163,1.248-.109,1.85.068.422.516.118.589-.144a11.851,11.851,0,0,0,.944-2.241c.269-.356.014-.77,0-1.142.413-.049.256-.506.035-.7a5.93,5.93,0,0,0-.667-2.2,10.464,10.464,0,0,1-1.941-2.723c-.528-1.639-2.042-2.726-2.556-4.379a3.556,3.556,0,0,0-1.652-2.317A7.881,7.881,0,0,0,20.32,2.17,6.5,6.5,0,0,1,19.289,2.3Zm.4,14.66a38.907,38.907,0,0,1,.5,4.291,4.175,4.175,0,0,1-.76,2.517c-.12.425-.486.012-.751-.016-.643-.018-.882-.683-1.232-1.107-.36-.344-.1-.8.133-1.131.252-.179.35-.579.708-.548.4-.007.316-.487.26-.743.238-.362.092-.892.328-1.283.419-.182.294-.82.442-1.18.115-.256.017-.749.334-.854.037-.006.049.012.042.052Z" style="fill:#3a3c5b"/>',
"PHP": '<defs><radialGradient id="a" cx="-16.114" cy="20.532" r="18.384" gradientTransform="translate(26.52 -9.307)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.5" stop-color="#4c6b96"/><stop offset="1" stop-color="#231f20"/></radialGradient></defs><title>file_type_php</title><ellipse cx="16" cy="16" rx="14" ry="7.365" style="fill:url(#a)"/><ellipse cx="16" cy="16" rx="13.453" ry="6.818" style="fill:#6280b6"/><path d="M18.725,18.2l.667-3.434a1.752,1.752,0,0,0-.372-1.719,2.929,2.929,0,0,0-2-.525H15.867l.331-1.7a.219.219,0,0,0-.215-.26h-1.6a.219.219,0,0,0-.215.177l-.709,3.646a2.051,2.051,0,0,0-.477-1.054,2.783,2.783,0,0,0-2.2-.807H7.7a.219.219,0,0,0-.215.177l-1.434,7.38a.219.219,0,0,0,.215.26H7.869a.219.219,0,0,0,.215-.177l.347-1.785h1.2a5.167,5.167,0,0,0,1.568-.2,3.068,3.068,0,0,0,1.15-.689,3.538,3.538,0,0,0,.68-.844l-.287,1.475a.219.219,0,0,0,.215.26h1.6a.219.219,0,0,0,.215-.177l.787-4.051h1.094c.466,0,.6.093.64.133s.1.165.025.569l-.635,3.265a.219.219,0,0,0,.215.26h1.62A.219.219,0,0,0,18.725,18.2ZM11.33,15.366a1.749,1.749,0,0,1-.561,1.092,2.171,2.171,0,0,1-1.315.321H8.742l.515-2.651h.921c.677,0,.949.145,1.059.266A1.181,1.181,0,0,1,11.33,15.366Z" style="fill:#fff"/><path d="M25.546,13.332a2.783,2.783,0,0,0-2.2-.807H20.255a.219.219,0,0,0-.215.177l-1.434,7.38a.219.219,0,0,0,.215.26h1.608a.219.219,0,0,0,.215-.177l.347-1.785h1.2a5.167,5.167,0,0,0,1.568-.2,3.068,3.068,0,0,0,1.15-.689,3.425,3.425,0,0,0,1.076-1.927A2.512,2.512,0,0,0,25.546,13.332Zm-1.667,2.034a1.749,1.749,0,0,1-.561,1.092A2.171,2.171,0,0,1,22,16.778H21.29l.515-2.651h.921c.677,0,.949.145,1.059.266A1.181,1.181,0,0,1,23.879,15.366Z" style="fill:#fff"/><path d="M10.178,13.908a1.645,1.645,0,0,1,1.221.338,1.34,1.34,0,0,1,.145,1.161,1.945,1.945,0,0,1-.642,1.223A2.361,2.361,0,0,1,9.454,17H8.476l.6-3.089ZM6.261,20.124H7.869l.381-1.962H9.627a4.931,4.931,0,0,0,1.5-.191,2.84,2.84,0,0,0,1.07-.642,3.207,3.207,0,0,0,1.01-1.808,2.3,2.3,0,0,0-.385-2.044,2.568,2.568,0,0,0-2.035-.732H7.7Z" style="fill:#000004"/><path d="M14.387,10.782h1.6L15.6,12.744h1.421a2.767,2.767,0,0,1,1.85.468,1.548,1.548,0,0,1,.305,1.516l-.667,3.434H16.89l.635-3.265a.886.886,0,0,0-.08-.76,1.121,1.121,0,0,0-.8-.2H15.37l-.822,4.228h-1.6Z" style="fill:#000004"/><path d="M22.727,13.908a1.645,1.645,0,0,1,1.221.338,1.34,1.34,0,0,1,.145,1.161,1.945,1.945,0,0,1-.642,1.223A2.361,2.361,0,0,1,22,17h-.978l.6-3.089ZM18.81,20.124h1.608l.381-1.962h1.377a4.931,4.931,0,0,0,1.5-.191,2.84,2.84,0,0,0,1.07-.642,3.207,3.207,0,0,0,1.01-1.808,2.3,2.3,0,0,0-.385-2.044,2.568,2.568,0,0,0-2.035-.732H20.244Z" style="fill:#000004"/>',
"PL/SQL": '<path d="M8.562,15.256A21.159,21.159,0,0,0,16,16.449a21.159,21.159,0,0,0,7.438-1.194c1.864-.727,2.525-1.535,2.525-2V9.7a10.357,10.357,0,0,1-2.084,1.076A22.293,22.293,0,0,1,16,12.078a22.36,22.36,0,0,1-7.879-1.3A10.28,10.28,0,0,1,6.037,9.7v3.55C6.037,13.724,6.7,14.528,8.562,15.256Z" style="fill:red"/><path d="M8.562,21.961a15.611,15.611,0,0,0,2.6.741A24.9,24.9,0,0,0,16,23.155a24.9,24.9,0,0,0,4.838-.452,15.614,15.614,0,0,0,2.6-.741c1.864-.727,2.525-1.535,2.525-2v-3.39a10.706,10.706,0,0,1-1.692.825A23.49,23.49,0,0,1,16,18.74a23.49,23.49,0,0,1-8.271-1.348,10.829,10.829,0,0,1-1.692-.825V19.96C6.037,20.426,6.7,21.231,8.562,21.961Z" style="fill:red"/><path d="M16,30c5.5,0,9.963-1.744,9.963-3.894V23.269a10.5,10.5,0,0,1-1.535.762l-.157.063A23.487,23.487,0,0,1,16,25.445a23.422,23.422,0,0,1-8.271-1.351c-.054-.02-.106-.043-.157-.063a10.5,10.5,0,0,1-1.535-.762v2.837C6.037,28.256,10.5,30,16,30Z" style="fill:red"/><ellipse cx="16" cy="5.894" rx="9.963" ry="3.894" style="fill:red"/>',
"Plain text": '<path d="M22.038,2H6.375a1.755,1.755,0,0,0-1.75,1.75v24.5A1.755,1.755,0,0,0,6.375,30h19.25a1.755,1.755,0,0,0,1.75-1.75V6.856Zm.525,2.844,1.663,1.531H22.563ZM6.375,28.25V3.75H20.813V8.125h4.813V28.25Z" style="fill:#c2c2c2"/><rect x="8.125" y="15.097" width="13.076" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="24.439" width="9.762" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="19.763" width="15.75" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="10.23" width="15.75" height="1.75" style="fill:#829ec2"/>',
"PlantUML": '<defs><linearGradient id="a" x1="-33.423" y1="-250.911" x2="-33.353" y2="-250.858" gradientTransform="matrix(37.134, 26.001, 13.575, -19.387, 4673.473, -3982.019)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#767676"/><stop offset="1"/></linearGradient><linearGradient id="b" x1="-32.107" y1="-242.563" x2="-32.028" y2="-242.586" gradientTransform="matrix(81.081, 56.774, 17.306, -24.715, 6804.021, -4149.644)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0079b9"/><stop offset="1"/></linearGradient><linearGradient id="c" x1="-33.282" y1="-243.423" x2="-33.224" y2="-243.455" gradientTransform="matrix(60.003, 42.015, 34.184, -48.82, 10343.005, -10469.084)" xlink:href="#b"/><linearGradient id="d" x1="12.356" y1="26.268" x2="14.011" y2="26.268" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#595959"/><stop offset="0.087" stop-color="#6e6e6e"/><stop offset="0.242" stop-color="#8c8c8c"/><stop offset="0.405" stop-color="#a4a4a4"/><stop offset="0.577" stop-color="#b5b5b5"/><stop offset="0.765" stop-color="#bfbfbf"/><stop offset="1" stop-color="#c2c2c2"/></linearGradient><linearGradient id="e" x1="18.291" y1="26.171" x2="19.946" y2="26.171" xlink:href="#d"/><linearGradient id="f" x1="24.44" y1="26.171" x2="26.096" y2="26.171" xlink:href="#d"/></defs><title>file_type_plantuml</title><polygon points="20.305 17.872 27.16 22.418 21.72 25.493 14.861 20.999 20.305 17.872" style="fill:#1c0a42"/><path d="M21.716,25.619l-.055-.036-7.005-4.59,5.653-3.247,7.056,4.68Zm-6.65-4.613,6.658,4.362,5.231-2.957L20.3,18Z"/><polygon points="26.401 11.909 29.418 13.592 27.07 15.088 24.213 13.247 26.401 11.909" style="fill:url(#a)"/><path d="M27.069,15.215l-3.058-1.97,2.387-1.46,3.228,1.8Zm-2.654-1.966L27.07,14.96,29.208,13.6l-2.8-1.565Z"/><polygon points="14.498 17.807 21.354 22.354 15.914 25.429 9.055 20.935 14.498 17.807" style="fill:#ffbd3f"/><path d="M15.91,25.554l-.055-.036L8.85,20.929,14.5,17.681l7.056,4.68ZM9.26,20.941,15.918,25.3l5.231-2.957-6.654-4.413Z"/><polygon points="7.99 17.966 14.954 22.366 9.577 25.504 2.218 20.849 7.99 17.966" style="fill:#a11f40"/><path d="M9.575,25.629,2,20.838l6-3,7.164,4.527ZM2.436,20.86,9.58,25.378l5.168-3.016L7.984,18.089Z"/><polygon points="2.111 21.021 9.443 25.515 9.443 29.063 2.111 24.332 2.111 21.021" style="fill:url(#b)"/><path d="M9.55,29.26,2,24.391V20.829L9.55,25.455ZM2.218,24.274l7.118,4.592V25.575L2.218,21.213Z"/><polygon points="24.071 13.343 27.009 15.222 27.009 22.131 24.071 20.247 24.071 13.343" style="fill:url(#c)"/><path d="M27.063,22.229l-3.045-1.953V13.245l3.045,1.947Zm-2.938-2.012,2.831,1.815V15.251l-2.831-1.81Z"/><polygon points="27.149 22.526 27.149 15.194 29.514 13.775 29.514 29.149 28.331 29.149 9.646 29.149 9.646 25.601 15.086 22.526 15.785 25.601 15.796 25.601 21.472 22.526 21.891 25.601 21.945 25.601 27.149 22.526" style="fill:#fff"/><path d="M29.621,29.256H9.539V25.538l5.62-3.177.7,3.083,5.7-3.087.422,3.1,5.061-2.991V15.133l2.58-1.548ZM9.753,29.041H29.407V13.964l-2.151,1.29v7.332l-.053.031-5.229,3.09H21.8l-.411-3.014-5.564,3.014H15.7l-.686-3.018-5.26,2.973Z"/><rect x="12.356" y="25.44" width="1.656" height="1.656" rx="0.215" ry="0.215" style="fill:url(#d)"/><path d="M13.8,27.2H12.57a.322.322,0,0,1-.322-.322V25.655a.322.322,0,0,1,.322-.322H13.8a.322.322,0,0,1,.322.322v1.226A.322.322,0,0,1,13.8,27.2ZM12.57,25.547a.108.108,0,0,0-.107.107v1.226a.108.108,0,0,0,.107.107H13.8a.108.108,0,0,0,.107-.107V25.655a.108.108,0,0,0-.107-.107Z"/><rect x="18.291" y="25.343" width="1.656" height="1.656" rx="0.215" ry="0.215" style="fill:url(#e)"/><path d="M19.732,27.106H18.505a.322.322,0,0,1-.322-.322V25.558a.322.322,0,0,1,.322-.322h1.226a.322.322,0,0,1,.322.322v1.226A.322.322,0,0,1,19.732,27.106Zm-1.226-1.656a.108.108,0,0,0-.107.107v1.226a.108.108,0,0,0,.107.107h1.226a.108.108,0,0,0,.107-.107V25.558a.108.108,0,0,0-.107-.107Z"/><rect x="24.44" y="25.343" width="1.656" height="1.656" rx="0.215" ry="0.215" style="fill:url(#f)"/><path d="M25.881,27.106H24.655a.322.322,0,0,1-.322-.322V25.558a.322.322,0,0,1,.322-.322h1.226a.322.322,0,0,1,.322.322v1.226A.322.322,0,0,1,25.881,27.106Zm-1.226-1.656a.108.108,0,0,0-.107.107v1.226a.108.108,0,0,0,.107.107h1.226a.108.108,0,0,0,.107-.107V25.558a.108.108,0,0,0-.107-.107Z"/><path d="M27.215,11.23c-.052.069-.417-.262-.653-.526a4.408,4.408,0,0,1-.516-.73A2.6,2.6,0,0,1,25.7,9.2a2.358,2.358,0,0,1-.052-.682,2.959,2.959,0,0,1,.129-.749,3.142,3.142,0,0,1,.787-1.207,15.532,15.532,0,0,0,1.283-1.4,3.062,3.062,0,0,0,.479-.927,3.979,3.979,0,0,0,.151-.855c.019-.364-.025-.593.023-.613s.215.274.287.564a3.167,3.167,0,0,1-.458,2.1,6.9,6.9,0,0,1-1.094,1.448,2.8,2.8,0,0,0-.849,1.234A2.466,2.466,0,0,0,26.3,8.8a3.465,3.465,0,0,0,.476,1.542C27.064,10.914,27.256,11.175,27.215,11.23Z" style="fill:#ea2d2e"/><path d="M27.193,11.266c-.124,0-.492-.365-.651-.544a4.478,4.478,0,0,1-.52-.734,2.628,2.628,0,0,1-.346-.781,2.375,2.375,0,0,1-.053-.69,2.978,2.978,0,0,1,.13-.756,3.208,3.208,0,0,1,.793-1.216c.294-.331.5-.528.659-.686a4.393,4.393,0,0,0,.622-.711,3.052,3.052,0,0,0,.476-.919,3.951,3.951,0,0,0,.15-.849c.008-.159,0-.294,0-.393,0-.159-.006-.225.038-.243a.05.05,0,0,1,.043,0,1.226,1.226,0,0,1,.28.579,3.167,3.167,0,0,1-.46,2.121,6.928,6.928,0,0,1-1.1,1.453c-.055.06-.109.116-.162.171a2.3,2.3,0,0,0-.681,1.052,2.47,2.47,0,0,0-.082.673,3.458,3.458,0,0,0,.473,1.53c.114.231.215.415.289.549.129.235.178.323.142.369h0a.051.051,0,0,1-.04.02ZM28.512,2.8a.863.863,0,0,0,0,.19c0,.1.007.236,0,.4a4.021,4.021,0,0,1-.152.861,3.106,3.106,0,0,1-.483.934,4.437,4.437,0,0,1-.629.719c-.162.158-.364.354-.657.683a3.168,3.168,0,0,0-.782,1.2,2.933,2.933,0,0,0-.128.743,2.325,2.325,0,0,0,.052.675,2.59,2.59,0,0,0,.341.767,4.422,4.422,0,0,0,.513.725,2.035,2.035,0,0,0,.611.526,1.183,1.183,0,0,0-.147-.31c-.074-.134-.175-.318-.29-.551A3.5,3.5,0,0,1,26.278,8.8a2.53,2.53,0,0,1,.084-.688,2.375,2.375,0,0,1,.694-1.075c.052-.055.106-.111.161-.171a6.879,6.879,0,0,0,1.09-1.442,3.119,3.119,0,0,0,.456-2.083A1.281,1.281,0,0,0,28.512,2.8Z"/><path d="M29.972,6.087c-.019-.088-.432-.04-.766.073a2.6,2.6,0,0,0-1.059.722,2.8,2.8,0,0,0-.916,1.855,2.972,2.972,0,0,0,.258,1.06c.221.572.455.773.444,1.225-.007.3-.114.484-.048.549s.314-.1.462-.313a1.8,1.8,0,0,0,.259-1.022c-.046-.815-.6-1.015-.608-1.8a1.858,1.858,0,0,1,.129-.676C28.57,6.509,30.008,6.252,29.972,6.087Z" style="fill:#ea2d2e"/><path d="M27.934,11.617a.094.094,0,0,1-.069-.026c-.046-.046-.03-.122-.005-.237a1.718,1.718,0,0,0,.045-.331,1.374,1.374,0,0,0-.214-.72,5,5,0,0,1-.228-.495,2.98,2.98,0,0,1-.259-1.07,2.81,2.81,0,0,1,.923-1.874,2.64,2.64,0,0,1,1.07-.729,1.482,1.482,0,0,1,.766-.1A.065.065,0,0,1,30,6.081h0c.015.07-.092.121-.306.224a2.73,2.73,0,0,0-1.542,1.463,1.827,1.827,0,0,0-.127.667,1.645,1.645,0,0,0,.291.885,1.889,1.889,0,0,1,.317.914,1.814,1.814,0,0,1-.264,1.039.809.809,0,0,1-.421.342Zm1.889-5.549a2.117,2.117,0,0,0-.608.117,2.588,2.588,0,0,0-1.048.715,2.764,2.764,0,0,0-.909,1.837,2.935,2.935,0,0,0,.256,1.05,4.955,4.955,0,0,0,.225.49,1.433,1.433,0,0,1,.22.745,1.765,1.765,0,0,1-.047.341c-.019.091-.035.163-.009.188a.046.046,0,0,0,.038.01.769.769,0,0,0,.382-.32,1.793,1.793,0,0,0,.254-1.005,1.844,1.844,0,0,0-.31-.89,1.711,1.711,0,0,1-.3-.911,1.877,1.877,0,0,1,.13-.686A2.776,2.776,0,0,1,29.67,6.257c.126-.061.283-.136.277-.164l-.008-.007A.264.264,0,0,0,29.823,6.068Z"/>',
"PowerQuery": '<path d="M30,25.583H25.757V15.378a8.271,8.271,0,0,0-.832-4.261A3.061,3.061,0,0,0,22.118,9.8a3.383,3.383,0,0,0-2.826,1.664,6.791,6.791,0,0,0-1.161,3.987V25.583H13.869V15.031q0-5.231-3.694-5.231a3.332,3.332,0,0,0-2.826,1.573,6.935,6.935,0,0,0-1.106,4.078V25.583H2V6.856H6.243V9.818h.073a6.488,6.488,0,0,1,5.907-3.4,5.569,5.569,0,0,1,3.393,1.07A5.328,5.328,0,0,1,17.6,10.294a6.683,6.683,0,0,1,6.218-3.877Q30,6.417,30,14.043Z" style="fill:#cfcfcf"/>',
"PowerShell": '<defs><linearGradient id="a" x1="23.325" y1="-118.543" x2="7.26" y2="-104.193" gradientTransform="matrix(1, 0, 0, -1, 0, -96)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#5391fe"/><stop offset="1" stop-color="#3e6dbf"/></linearGradient><linearGradient id="b" x1="7.1" y1="-104.002" x2="23.001" y2="-118.292" xlink:href="#a"/></defs><title>file_type_powershell</title><path d="M3.174,26.589a1.154,1.154,0,0,1-.928-.423,1.234,1.234,0,0,1-.21-1.052L6.233,6.78A1.8,1.8,0,0,1,7.914,5.41H28.826a1.157,1.157,0,0,1,.928.423,1.235,1.235,0,0,1,.21,1.052l-4.2,18.335a1.8,1.8,0,0,1-1.681,1.37H3.174Z" style="fill-rule:evenodd;fill:url(#a)"/><path d="M7.914,5.646H28.826a.913.913,0,0,1,.908,1.187l-4.2,18.334a1.575,1.575,0,0,1-1.451,1.187H3.174a.913.913,0,0,1-.908-1.187l4.2-18.334A1.574,1.574,0,0,1,7.914,5.646Z" style="fill-rule:evenodd;fill:url(#b)"/><path d="M16.04,21.544h5.086a1.118,1.118,0,0,1,0,2.234H16.04a1.118,1.118,0,0,1,0-2.234Z" style="fill:#2c5591;fill-rule:evenodd"/><path d="M19.339,16.578a1.762,1.762,0,0,1-.591.6L9.309,23.953a1.224,1.224,0,0,1-1.438-1.977l8.512-6.164v-.126L11.035,10a1.224,1.224,0,0,1,1.782-1.672l6.418,6.827A1.166,1.166,0,0,1,19.339,16.578Z" style="fill:#2c5591;fill-rule:evenodd"/><path d="M19.1,16.342a1.749,1.749,0,0,1-.59.6L9.074,23.718a1.225,1.225,0,0,1-1.439-1.977l8.513-6.164V15.45L10.8,9.761a1.224,1.224,0,0,1,1.783-1.672L19,14.916A1.162,1.162,0,0,1,19.1,16.342Z" style="fill:#fff;fill-rule:evenodd"/><path d="M15.9,21.412h5.086a1.059,1.059,0,1,1,0,2.118H15.9a1.059,1.059,0,1,1,0-2.118Z" style="fill:#fff;fill-rule:evenodd"/>',
"Processing": '<defs><linearGradient id="a" x1="16" y1="3" x2="16" y2="29" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1c4c70"/><stop offset="1" stop-color="#0c2b42"/></linearGradient></defs><title>file_type_processinglang</title><path d="M15.922,19.962a13,13,0,0,1-1.647-.077v5.552a27.76,27.76,0,0,1,3.332.461V29H5.968V25.9A27.988,27.988,0,0,1,9.3,25.438V6.715a28.215,28.215,0,0,1-3.331-.46v-3.1H8.955C10.18,3.153,13.549,3,16.23,3c6.318,0,9.8,2.948,9.8,8C26.031,16.018,22.2,19.962,15.922,19.962ZM16,7.058c-.613,0-1.149,0-1.723.038v8.615a9.694,9.694,0,0,0,1.455.115c3.025-.038,5.13-1.723,5.13-4.519C20.862,8.7,19.407,7.058,16,7.058Z" style="fill:url(#a)"/>',
"Prolog": '<defs><radialGradient id="a" cx="1341.25" cy="-3396.866" r="18.299" gradientTransform="translate(-1327.077 3405.935)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.181" stop-color="#fbfbfb"/><stop offset="0.365" stop-color="#efeff0"/><stop offset="0.552" stop-color="#dadbdc"/><stop offset="0.738" stop-color="#bebfc2"/><stop offset="0.824" stop-color="#aeb0b3"/></radialGradient><radialGradient id="b" cx="6.678" cy="84.74" r="15.554" gradientTransform="translate(-1.884 -86.154) scale(1.072 1.166)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fafdff"/><stop offset="0.079" stop-color="#eef5fa"/><stop offset="0.22" stop-color="#cfdfec"/><stop offset="0.407" stop-color="#9dbbd5"/><stop offset="0.631" stop-color="#588ab5"/><stop offset="0.745" stop-color="#326fa4"/><stop offset="0.799" stop-color="#2b6698"/><stop offset="0.897" stop-color="#174e78"/><stop offset="0.994" stop-color="#003152"/></radialGradient><radialGradient id="c" cx="11.241" cy="-9.897" r="16.594" gradientTransform="translate(0 22.631) scale(1 1.062)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd540"/><stop offset="0.667" stop-color="#ec1c24"/><stop offset="0.994" stop-color="#760000"/></radialGradient><radialGradient id="d" cx="12.286" cy="26.127" r="2.083" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#dddfe0"/><stop offset="0.174" stop-color="#d9dbdc"/><stop offset="0.351" stop-color="#cdcfd0"/><stop offset="0.531" stop-color="#b8babb"/><stop offset="0.711" stop-color="#9c9e9f"/><stop offset="0.891" stop-color="#78797b"/><stop offset="1" stop-color="#5e5f61"/></radialGradient><radialGradient id="e" cx="19.064" cy="26.127" r="2.083" xlink:href="#d"/><radialGradient id="f" cx="15.434" cy="16.191" r="2.687" gradientTransform="translate(0 0.461)" xlink:href="#d"/></defs><title>file_type_prolog</title><g style="isolation:isolate"><circle cx="16" cy="16" r="14" transform="translate(-6.602 14.92) rotate(-42.265)" style="fill:url(#a)"/><path d="M19.938,6.309a9.785,9.785,0,0,0-6.5-2.339C8.564,3.97,3.774,7.7,3.405,14.961c-.4,7.8,4.75,12.862,12,12.862,10.733,0,16.672-9.78,10.027-20.388,4.671,10.6-.527,17.279-7.236,17.279-5.441,0-9.61-3.651-9.61-10.345C8.582,4.709,15.823,4.039,19.938,6.309Z" style="fill:url(#b)"/><path d="M22.7,10.415c-.293-.94-.645-2.788.634-3.86a3.729,3.729,0,0,0-3.844,1.534A9.165,9.165,0,0,0,12,8.1,3.729,3.729,0,0,0,8.152,6.555c1.309,1.1.91,3.005.614,3.923A10.517,10.517,0,0,0,6.1,17.524c0,2.174,1.4,4.645,1.675,7.955l1.768-1.532a11.743,11.743,0,0,0,6.212,1.433,11.741,11.741,0,0,0,6.212-1.433l1.769,1.532c.28-3.31,1.675-5.781,1.675-7.955A10.512,10.512,0,0,0,22.7,10.415Z" style="fill:url(#c)"/><path d="M10.722,27.867a1.621,1.621,0,1,1,3.24,0c0,.018,0,.035,0,.053a2.234,2.234,0,1,0-3.228.126C10.725,27.987,10.722,27.927,10.722,27.867Z" style="fill:url(#d)"/><path d="M20.629,27.867a1.621,1.621,0,1,0-3.24,0c0,.018,0,.035,0,.053a2.234,2.234,0,1,1,3.228.126A1.678,1.678,0,0,0,20.629,27.867Z" style="fill:url(#e)"/><g style="opacity:0.53;mix-blend-mode:multiply"><path d="M8.346,18.4c-.132.667-.971.877-.971.877A1.359,1.359,0,0,1,6.809,18.1a2.929,2.929,0,0,0,.443,1.793A2.927,2.927,0,0,0,8.346,18.4Z" style="fill:#231f20"/><path d="M10.008,18.737c-.132.667-.972.877-.972.877a1.36,1.36,0,0,1-.566-1.182,2.929,2.929,0,0,0,.444,1.793A2.926,2.926,0,0,0,10.008,18.737Z" style="fill:#231f20"/><path d="M8.833,20.249c-.132.667-.971.877-.971.877A1.359,1.359,0,0,1,7.3,19.944a2.929,2.929,0,0,0,.443,1.793A2.925,2.925,0,0,0,8.833,20.249Z" style="fill:#231f20"/><path d="M10.5,20.583c-.132.667-.971.877-.971.877a1.36,1.36,0,0,1-.566-1.182A2.929,2.929,0,0,0,9.4,22.072,2.927,2.927,0,0,0,10.5,20.583Z" style="fill:#231f20"/><path d="M9.328,22.121c-.132.667-.972.877-.972.877a1.36,1.36,0,0,1-.565-1.182,2.929,2.929,0,0,0,.443,1.793A2.926,2.926,0,0,0,9.328,22.121Z" style="fill:#231f20"/><path d="M11.664,19.07c-.132.667-.972.877-.972.877a1.359,1.359,0,0,1-.565-1.182,2.93,2.93,0,0,0,.443,1.793A2.927,2.927,0,0,0,11.664,19.07Z" style="fill:#231f20"/></g><g style="opacity:0.53;mix-blend-mode:multiply"><path d="M23.157,18.4c.132.667.971.877.971.877a1.359,1.359,0,0,0,.566-1.182,2.93,2.93,0,0,1-.443,1.793A2.927,2.927,0,0,1,23.157,18.4Z" style="fill:#231f20"/><path d="M21.495,18.737c.132.667.972.877.972.877a1.36,1.36,0,0,0,.565-1.182,2.931,2.931,0,0,1-.444,1.793A2.926,2.926,0,0,1,21.495,18.737Z" style="fill:#231f20"/><path d="M22.669,20.249c.132.667.971.877.971.877a1.36,1.36,0,0,0,.566-1.182,2.929,2.929,0,0,1-.443,1.793A2.926,2.926,0,0,1,22.669,20.249Z" style="fill:#231f20"/><path d="M21.008,20.583c.132.667.971.877.971.877a1.359,1.359,0,0,0,.565-1.182,2.928,2.928,0,0,1-.443,1.793A2.927,2.927,0,0,1,21.008,20.583Z" style="fill:#231f20"/><path d="M22.175,22.121c.132.667.972.877.972.877a1.36,1.36,0,0,0,.565-1.182,2.928,2.928,0,0,1-.444,1.793A2.927,2.927,0,0,1,22.175,22.121Z" style="fill:#231f20"/><path d="M19.838,19.07c.132.667.972.877.972.877a1.359,1.359,0,0,0,.565-1.182,2.928,2.928,0,0,1-.443,1.793A2.928,2.928,0,0,1,19.838,19.07Z" style="fill:#231f20"/></g><circle cx="11.339" cy="14.074" r="3.816" style="fill:#fff"/><circle cx="12.13" cy="14.446" r="1.861" style="fill:#bdbfc1"/><circle cx="12.13" cy="14.446" r="1.191" style="fill:#231f20"/><circle cx="11.603" cy="14.027" r="0.357" style="fill:#fff"/><circle cx="20.112" cy="14.074" r="3.816" style="fill:#fff"/><circle cx="20.903" cy="14.446" r="1.861" style="fill:#bdbfc1"/><circle cx="20.903" cy="14.446" r="1.191" style="fill:#231f20"/><circle cx="20.375" cy="14.027" r="0.357" style="fill:#fff"/><path d="M15.706,21.52c0-1.412,2.157-3.413,2.157-4.887a2.157,2.157,0,0,0-4.313,0C13.55,18.107,15.706,20.108,15.706,21.52Z" style="fill:url(#f)"/></g>',
"Protocol Buffers": '<polygon points="15.996 3.22 26.966 9.7 26.954 22.3 16 28.78 5.038 22.408 5.034 9.628 15.996 3.22" style="fill:#fff"/><path d="M16,2,3.987,9.02l0,14L16,30l12-7.1.013-13.8ZM26.954,22.3,16,28.78,5.038,22.408l0-12.78L16,3.22,26.966,9.7Z" style="fill:#171c1e"/><polygon points="25.569 13.654 19.946 16.964 19.943 24.89 25.59 21.565 25.569 13.654" style="fill:#1ea8ff"/><polygon points="23.282 12.303 25.569 13.654 19.946 16.964 19.943 24.89 17.327 23.37 17.348 15.875 23.282 12.303" style="fill:#50bfff"/><polygon points="22.512 10.35 22.514 11.816 16.411 15.498 16.418 23.597 14.998 24.431 14.994 14.856 22.512 10.35" style="fill:#97ff27"/><polygon points="20.008 8.871 22.512 10.35 14.994 14.856 14.998 24.431 12.194 22.801 12.189 13.413 20.008 8.871" style="fill:#c2ff72"/><polygon points="19.226 6.606 19.226 8.374 11.21 13.074 11.21 23.172 9.808 23.988 9.835 12.277 19.226 6.606" style="fill:#ff274b"/><polygon points="16.16 4.784 6.53 10.394 6.529 22.071 9.827 23.988 9.835 12.277 19.235 6.606 16.16 4.784" style="fill:#ff5c77"/>',
"Pug": '<path d="M25.514,12.846c-.052-.938.209-1.825-.209-2.554-1.043-1.825-3.649-2.867-8.863-2.867V7.372h0v.052c-5.735,0-8.185,1.043-9.227,2.867a5.6,5.6,0,0,0-.469,2.554,9.546,9.546,0,0,0-.261,2.45c.156,1.147.261,2.294.417,3.336.156.886,1.408,1.564,1.564,2.4.313,2.242,2.294,3.284,8.028,3.284v.261h-.1v-.261c5.213,0,7.4-1.043,7.716-3.284.1-.834,1.147-1.512,1.3-2.4.156-1.043.209-2.19.365-3.336A11.774,11.774,0,0,0,25.514,12.846Z" style="fill:#efcca3"/><path d="M16.182,13.68a3.241,3.241,0,0,1,2.19,1.147c.73.626,1.929,1.043,2.45,1.616a4.715,4.715,0,0,1,1.408,1.981,8.9,8.9,0,0,1,.313,2.242c0,.261.156.209.573,0a9.02,9.02,0,0,0,2.19-1.877c-.156.886-1.251,1.668-1.355,2.5-.313,2.242-2.5,3.336-7.872,3.336h.313" style="fill:#ccac8d"/><path d="M19.519,11.908c.209.678.886,3.024-.469,2.242a2.557,2.557,0,0,1,.938,1.564,1.831,1.831,0,0,0,1.3,1.408,3.479,3.479,0,0,0,2.554-.626,2.956,2.956,0,0,0,.678-3.284,2.43,2.43,0,0,0-2.137-1.616C21.4,11.334,19.31,11.126,19.519,11.908Z" style="fill:#ccac8d"/><circle cx="22.178" cy="14.41" r="1.929"/><circle cx="21.656" cy="13.524" r="0.521" style="fill:#fff"/><path d="M19.206,14.306a17.68,17.68,0,0,1,2.711,2.346c.938,1.2.938,1.408.938,1.408l-.678.313a7.1,7.1,0,0,0-2.137-2.5c-1.2-.678-1.355-1.251-1.355-1.251Z" style="fill:#efcca3"/><path d="M16.235,13.68a3.605,3.605,0,0,0-2.346,1.147c-.73.626-2.033,1.043-2.5,1.616a4.806,4.806,0,0,0-1.46,1.981,8.9,8.9,0,0,0-.313,2.242c0,.261.052.313-.626,0A7.972,7.972,0,0,1,6.8,18.789c.156.886,1.251,1.668,1.355,2.5.313,2.19,2.5,3.284,7.872,3.284h.365" style="fill:#ccac8d"/><path d="M21.239,17.277a6.552,6.552,0,0,0-5.109-2.607h0a6.638,6.638,0,0,0-5.109,2.607,3.861,3.861,0,0,0-1.043,3.18c0,4.64,1.616,3.232,2.711,3.806a7.466,7.466,0,0,0,3.389.313h0a7.4,7.4,0,0,0,3.389-.313c1.095-.573,2.711.834,2.711-3.806A3.386,3.386,0,0,0,21.239,17.277Z" style="fill:#56332b"/><path d="M16.026,15.974a9.549,9.549,0,0,1-.469,2.554l.573-.156Z" style="fill:#442823"/><path d="M16.182,15.974a9.549,9.549,0,0,0,.469,2.554l-.573-.156Z" style="fill:#442823"/><path d="M14.358,15.453c-.209-.521.573-1.355,1.825-1.355s2.033.834,1.825,1.355-1.043.678-1.825.678C15.348,16.13,14.566,15.974,14.358,15.453Z" style="fill:#56332b"/><path d="M16.182,15.974c0-.1.73-.1,1.147-.365,0,0-.834.261-.991.156a.656.656,0,0,1-.209-.365.656.656,0,0,1-.209.365c-.156.1-1.095-.156-1.095-.156a8.058,8.058,0,0,1,1.2.365v.417a10.492,10.492,0,0,0,.1,2.033c.156.209.1-1.46.1-2.033A1.3,1.3,0,0,1,16.182,15.974Z"/><path d="M16.182,18.945a3.35,3.35,0,0,1,1.616.678,3.121,3.121,0,0,0-1.616-1.095,3.036,3.036,0,0,0-1.825,1.2A3.312,3.312,0,0,1,16.182,18.945Z" style="fill:#7f4a41"/><path d="M16.078,22.8a8.9,8.9,0,0,1-2.4-.469c-.156-.052-.313.052-.469,0a6.172,6.172,0,0,1-3.18-2.137v.209c0,4.64,1.616,3.232,2.711,3.806a7.466,7.466,0,0,0,3.389.313h0a7.4,7.4,0,0,0,3.389-.313c1.095-.573,2.711.834,2.711-3.806v-.469A5.914,5.914,0,0,1,19,22.282c-.156.052-.417-.052-.573-.052A7.045,7.045,0,0,1,16.078,22.8Z" style="fill:#442823"/><path d="M13.941,20.3s-.573,1.668-.156,2.4l-.521-.209A15.433,15.433,0,0,1,13.941,20.3Z" style="fill:#442823"/><path d="M18.32,20.3s.573,1.668.156,2.4L19,22.491A10.629,10.629,0,0,0,18.32,20.3Z" style="fill:#442823"/><path d="M12.585,11.908c-.209.678-.886,3.024.469,2.242a2.557,2.557,0,0,0-.938,1.564,1.831,1.831,0,0,1-1.3,1.408A3.479,3.479,0,0,1,8.258,16.5a2.956,2.956,0,0,1-.678-3.284,2.43,2.43,0,0,1,2.137-1.616C10.709,11.334,12.794,11.126,12.585,11.908Z" style="fill:#ccac8d"/><path d="M16.13,18.528a3.393,3.393,0,0,1,2.45,2.867v-.1a3.051,3.051,0,0,0-2.45-2.919,3,3,0,0,0-2.45,2.919v.1A3.463,3.463,0,0,1,16.13,18.528Z"/><ellipse cx="16.546" cy="15.138" rx="0.156" ry="0.313" transform="translate(-3.256 4.611) rotate(-14.46)" style="fill:#331712"/><ellipse cx="15.609" cy="15.146" rx="0.313" ry="0.156" transform="translate(-3.482 25.567) rotate(-72.765)" style="fill:#331712"/><circle cx="10.031" cy="14.41" r="1.929"/><circle cx="10.552" cy="13.524" r="0.521" style="fill:#fff"/><path d="M16.7,14.41s-.521.209-.626.261a2.492,2.492,0,0,1-.626-.261H16.7Z" style="fill:#7f4a41"/><path d="M12.9,14.306a17.68,17.68,0,0,0-2.711,2.346c-.938,1.2-.938,1.408-.938,1.408l.678.313a7.1,7.1,0,0,1,2.137-2.5c1.2-.678,1.355-1.251,1.355-1.251Z" style="fill:#efcca3"/><path d="M9.092,10.813a4.519,4.519,0,0,1-1.929,2.294A2.19,2.19,0,0,0,9.092,10.813Z" style="fill:#ccac8d"/><path d="M22.908,10.813a4.519,4.519,0,0,0,1.929,2.294A2.19,2.19,0,0,1,22.908,10.813Z" style="fill:#ccac8d"/><path d="M19.31,13.836a5.16,5.16,0,0,0-3.076-1.408h.156a3.852,3.852,0,0,0-3.024,1.408,4.832,4.832,0,0,1,3.024-1.043h0A5.785,5.785,0,0,1,19.31,13.836Z" style="fill:#ccac8d"/><path d="M17.746,10.969a2.455,2.455,0,0,0-1.564-.938h.156a1.786,1.786,0,0,0-1.512.938,2.187,2.187,0,0,1,1.512-.678h0A1.894,1.894,0,0,1,17.746,10.969Z" style="fill:#ccac8d"/><path d="M10.031,17.746a2.545,2.545,0,0,1-1.773.209H8.05a3.68,3.68,0,0,1-.886-1.512A2.27,2.27,0,0,0,10.031,17.746Z" style="fill:#ccac8d"/><path d="M22.126,17.746a2.545,2.545,0,0,0,1.773.209H23.69a1.749,1.749,0,0,0,1.095-1.512A2.02,2.02,0,0,1,22.126,17.746Z" style="fill:#ccac8d"/><path d="M11.23,10.709a4.75,4.75,0,0,1,2.242.1c.938.313.209,1.564.365,1.616a2.865,2.865,0,0,1,2.242-.73c1.773.1,1.981.886,2.242.73.261-.1-.261-2.19,2.45-1.72,0,0-2.763-.73-2.659,1.251a3.675,3.675,0,0,0-3.858-.1S14.827,9.927,11.23,10.709Z" style="fill:#ccac8d"/><path d="M10.5,8s-2.4,2.972-2.711,4.118c-.365,1.147-.626,5.943-.938,6.621L5.756,14.045l2.033-4.9Z" style="fill:#ccac8d"/><path d="M21.656,8s2.4,2.972,2.711,4.118c.365,1.147.626,5.943.938,6.621L26.4,14.045l-2.033-4.9Z" style="fill:#ccac8d"/><path d="M21.5,8a11.617,11.617,0,0,1,3.284,4.588c.73,2.45.417,5.474.991,5.839.834.521,1.72-2.607,2.033-2.919.469-.521,2.085-1.877,2.19-2.137s-3.232-3.91-4.744-4.64C23.585,7.893,21.4,7.789,21.5,8Z" style="fill:#56332b"/><path d="M23.69,9.3a15.379,15.379,0,0,1,2.972,8.654l1.2-2.45A16.564,16.564,0,0,0,23.69,9.3Z" style="fill:#442823"/><path d="M10.5,8a11.617,11.617,0,0,0-3.284,4.588c-.73,2.45-.417,5.474-.991,5.839-.834.521-1.72-2.607-2.033-2.919-.469-.521-2.085-1.877-2.19-2.137s3.232-3.91,4.744-4.64C8.415,7.893,10.6,7.789,10.5,8Z" style="fill:#56332b"/><path d="M8.31,9.3a15.379,15.379,0,0,0-2.972,8.654L4.14,15.5A16.564,16.564,0,0,1,8.31,9.3Z" style="fill:#442823"/><path d="M6.642,18.007a4.118,4.118,0,0,0,.573,1.564c.365.365.1-.313.1-.313s-.365-.209-.313-1.72S6.642,18.007,6.642,18.007Z" style="fill:#ccac8d"/><path d="M25.41,18.007a4.118,4.118,0,0,1-.573,1.564c-.365.365-.1-.313-.1-.313s.365-.209.313-1.72C24.993,16.078,25.41,18.007,25.41,18.007Z" style="fill:#ccac8d"/><circle cx="13.889" cy="17.121" r="0.156" style="fill:#442823"/><circle cx="12.846" cy="18.216" r="0.156" style="fill:#442823"/><circle cx="12.533" cy="17.121" r="0.156" style="fill:#442823"/><circle cx="18.164" cy="17.121" r="0.156" style="fill:#442823"/><circle cx="19.154" cy="18.216" r="0.156" style="fill:#442823"/><circle cx="19.467" cy="17.121" r="0.156" style="fill:#442823"/>',
"Puppet": '<path d="M25.089,11.822H18.7L15.267,8.388V2H6.911v8.357H13.3l3.422,3.422h0v4.431h0l-3.434,3.434H6.911V30h8.357V23.612h0L18.7,20.178h6.388ZM9.7,4.786h2.786V7.571H9.7ZM12.482,27.2H9.7V24.417h2.786Z" style="fill:#ffae1a"/>',
"PureScript": '<rect width="32" height="32" style="fill:#16171b"/><polygon points="21.892 22.136 19.706 20.095 10.107 20.095 12.293 22.136 21.892 22.136" style="fill:#fff"/><polygon points="12.293 14.98 10.107 17.021 19.706 17.021 21.892 14.98 12.293 14.98" style="fill:#fff"/><polygon points="21.891 11.906 19.706 9.864 10.107 9.864 12.293 11.906 21.891 11.906" style="fill:#fff"/><path d="M9.1,13.926,7.652,12.482,2.3,17.836a1.023,1.023,0,0,0,0,1.443l5.354,5.354L9.1,23.19,4.464,18.558Z" style="fill:#fff"/><path d="M29.7,12.721,24.348,7.366,22.9,8.81l4.63,4.632L22.9,18.075l1.443,1.443L29.7,14.165a1.021,1.021,0,0,0,0-1.444Z" style="fill:#fff"/>',
"Python": '<defs><linearGradient id="a" x1="-133.268" y1="-202.91" x2="-133.198" y2="-202.84" gradientTransform="translate(25243.061 38519.17) scale(189.38 189.81)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#387eb8"/><stop offset="1" stop-color="#366994"/></linearGradient><linearGradient id="b" x1="-133.575" y1="-203.203" x2="-133.495" y2="-203.133" gradientTransform="translate(25309.061 38583.42) scale(189.38 189.81)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffe052"/><stop offset="1" stop-color="#ffc331"/></linearGradient></defs><title>file_type_python</title><path d="M15.885,2.1c-7.1,0-6.651,3.07-6.651,3.07V8.36h6.752v1H6.545S2,8.8,2,16.005s4.013,6.912,4.013,6.912H8.33V19.556s-.13-4.013,3.9-4.013h6.762s3.772.06,3.772-3.652V5.8s.572-3.712-6.842-3.712h0ZM12.153,4.237a1.214,1.214,0,1,1-1.183,1.244v-.02a1.214,1.214,0,0,1,1.214-1.214h0Z" style="fill:url(#a)"/><path d="M16.085,29.91c7.1,0,6.651-3.08,6.651-3.08V23.65H15.985v-1h9.47S30,23.158,30,15.995s-4.013-6.912-4.013-6.912H23.64V12.4s.13,4.013-3.9,4.013H12.975S9.2,16.356,9.2,20.068V26.2s-.572,3.712,6.842,3.712h.04Zm3.732-2.147A1.214,1.214,0,1,1,21,26.519v.03a1.214,1.214,0,0,1-1.214,1.214h.03Z" style="fill:url(#b)"/>',
"Q (kdb+ database)": '<path d="M20.092,29V19.682A6.953,6.953,0,0,1,17.7,21.645a6.743,6.743,0,0,1-3.089.724A6.557,6.557,0,0,1,9.413,20,11.081,11.081,0,0,1,7,12.475,10.033,10.033,0,0,1,9.264,5.5,7.251,7.251,0,0,1,14.874,3a6.266,6.266,0,0,1,3.2.785,7.329,7.329,0,0,1,2.4,2.373V3.419H25V29Zm.157-16.542a6.492,6.492,0,0,0-1.16-4.232,3.634,3.634,0,0,0-2.905-1.387,3.742,3.742,0,0,0-2.975,1.413,6.881,6.881,0,0,0-1.2,4.485,6.767,6.767,0,0,0,1.152,4.406A3.593,3.593,0,0,0,16.009,18.5a3.786,3.786,0,0,0,2.966-1.518A6.889,6.889,0,0,0,20.249,12.458Z" style="fill:#1e78b3"/>',
"Q#": '<path d="M19.451,6.218h2.638V8.856h2.637V6.218h2.637V8.856H30V11.5H27.364v2.636H30V16.77H27.364v2.637H24.727V16.769H22.091l0,2.637H19.453V16.768H16.815V14.127h2.638V11.5H16.815V8.853h2.639Zm2.638,7.914h2.637V11.5H22.089Z" style="fill:#33c"/><path d="M14.018,21.524a11.436,11.436,0,0,0,1.572-6.192,10.877,10.877,0,0,0-1.858-6.6A5.889,5.889,0,0,0,8.808,6.153a5.921,5.921,0,0,0-4.94,2.581A10.842,10.842,0,0,0,2,15.333a10.853,10.853,0,0,0,1.868,6.592,5.918,5.918,0,0,0,4.941,2.588,5.743,5.743,0,0,0,3.26-.987l2.306,2.321,1.577-2.4Zm-5.17-1.218,1.117,1.121a3.229,3.229,0,0,1-1.174.217,3.335,3.335,0,0,1-2.837-1.593,8.125,8.125,0,0,1-1.18-4.719,8.1,8.1,0,0,1,1.184-4.724,3.372,3.372,0,0,1,2.87-1.588,3.31,3.31,0,0,1,2.819,1.585,8.178,8.178,0,0,1,1.172,4.726,9.113,9.113,0,0,1-.833,4.15l-1.56-1.571Z" style="fill:#33c"/>',
"QML": '<path d="M27.3,5H5.886L2,8.958V26H26.114L30,22.042V5ZM16.9,23.07l-1.828.852L13.5,21.331a3.968,3.968,0,0,1-1.082.106c-1.845,0-3.123-.5-3.85-1.49a8.03,8.03,0,0,1-1.082-4.7,8.351,8.351,0,0,1,1.1-4.773,4.379,4.379,0,0,1,3.833-1.561c1.828,0,3.087.515,3.833,1.544a8.351,8.351,0,0,1,1.1,4.773,10.809,10.809,0,0,1-.452,3.44,3.9,3.9,0,0,1-1.473,2Zm5.848-1.67a2.735,2.735,0,0,1-2.168-.692A4.192,4.192,0,0,1,20,18.1V14H19V12h1V9h2v3h2v2H22v3.9a3.907,3.907,0,0,0,.168,1.437c.112.231.393.355.86.355l1.533-.053.093,1.544A12.519,12.519,0,0,1,22.748,21.4ZM12.416,10.614a2.4,2.4,0,0,0-2.289,1.1,7.657,7.657,0,0,0-.6,3.513,7.131,7.131,0,0,0,.6,3.442A2.44,2.44,0,0,0,12.433,19.7a2.417,2.417,0,0,0,2.289-1.011,7.343,7.343,0,0,0,.586-3.442,7.692,7.692,0,0,0-.6-3.531A2.4,2.4,0,0,0,12.416,10.614Z" style="fill:#41cd52"/>',
"R": '<defs><linearGradient id="a" x1="-134.811" y1="-103.284" x2="-134.772" y2="-103.323" gradientTransform="matrix(721.094, 0, 0, -482.937, 97213.595, -49874.512)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#cbced0"/><stop offset="1" stop-color="#84838b"/></linearGradient><linearGradient id="b" x1="-135.378" y1="-102.985" x2="-135.339" y2="-103.024" gradientTransform="matrix(398, 0, 0, -406.124, 53893, -41812.836)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#276dc3"/><stop offset="1" stop-color="#165caa"/></linearGradient></defs><title>file_type_r</title><path d="M16,23.956c-7.732,0-14-4.2-14-9.376S8.268,5.2,16,5.2,30,9.4,30,14.58,23.732,23.956,16,23.956ZM18.143,8.87C12.266,8.87,7.5,11.74,7.5,15.28s4.764,6.41,10.641,6.41,10.214-1.962,10.214-6.41S24.02,8.87,18.143,8.87Z" style="fill:url(#a)"/><path d="M23.321,19.726a10.545,10.545,0,0,1,1.34.5,2.591,2.591,0,0,1,.68.485,1.835,1.835,0,0,1,.311.447l3.339,5.63-5.4,0-2.524-4.74a6.1,6.1,0,0,0-.835-1.145.879.879,0,0,0-.641-.291H18.311v6.173l-4.776,0V11.026h9.591S27.5,11.1,27.5,15.261,23.321,19.726,23.321,19.726Zm-2.077-5.28-2.891,0v2.681h2.893a1.323,1.323,0,0,0,1.34-1.364A1.247,1.247,0,0,0,21.244,14.447Z" style="fill:url(#b)"/>',
"Racket": '<circle cx="16" cy="16" r="14" style="fill:#fff"/><path d="M27.016,24.641a14,14,0,0,0-15.8-21.8C16.9,5.822,24.413,15.549,27.016,24.641Z" style="fill:#3e5ba9"/><path d="M13.995,10.93a24.3,24.3,0,0,0-7.22-5.46A14,14,0,0,0,5.463,25.217,39.56,39.56,0,0,1,13.995,10.93Z" style="fill:#9f1d20"/><path d="M16.575,14.1A32.645,32.645,0,0,0,9.43,28.365a14.016,14.016,0,0,0,13.3-.089A38.642,38.642,0,0,0,16.575,14.1Z" style="fill:#9f1d20"/>',
"Razor C#": '<path d="M23.844,27.692a16.332,16.332,0,0,1-6.645,1.3q-6.364,0-10.013-3.243a11.3,11.3,0,0,1-3.649-8.9A13.716,13.716,0,0,1,7.322,6.951,12.716,12.716,0,0,1,16.9,3.008a11.676,11.676,0,0,1,8.425,3.006,9.994,9.994,0,0,1,3.142,7.533,10.187,10.187,0,0,1-2.318,7.114,7.532,7.532,0,0,1-5.817,2.547,2.613,2.613,0,0,1-1.845-.642,2.323,2.323,0,0,1-.764-1.6,4.9,4.9,0,0,1-4.148,2.243,4.6,4.6,0,0,1-3.507-1.479,5.706,5.706,0,0,1-1.384-4.063,9.913,9.913,0,0,1,2.2-6.357q2.2-2.763,4.8-2.763a5.063,5.063,0,0,1,4.256,1.716l.311-1.338h2.405l-2.081,9.08a10.716,10.716,0,0,0-.352,2.243q0,.972.744.972a4.819,4.819,0,0,0,3.877-2.047,8.93,8.93,0,0,0,1.621-5.681,7.98,7.98,0,0,0-2.675-6.175,9.887,9.887,0,0,0-6.919-2.432A10.6,10.6,0,0,0,8.713,8.352a12.066,12.066,0,0,0-3.2,8.495,9.561,9.561,0,0,0,3.06,7.573q3.06,2.7,8.586,2.7a13.757,13.757,0,0,0,5.675-1.054ZM19.466,12.25a3.977,3.977,0,0,0-3.6-1.716q-1.824,0-3.263,2.23a8.726,8.726,0,0,0-1.439,4.824q0,3.635,2.905,3.635A3.771,3.771,0,0,0,16.72,20.04a6.309,6.309,0,0,0,1.7-3.2Z" style="fill:#368832"/>',
"React JSX": '<circle cx="16" cy="15.974" r="2.5" style="fill:#00d8ff"/><path d="M16,21.706a28.385,28.385,0,0,1-8.88-1.2,11.3,11.3,0,0,1-3.657-1.958A3.543,3.543,0,0,1,2,15.974c0-1.653,1.816-3.273,4.858-4.333A28.755,28.755,0,0,1,16,10.293a28.674,28.674,0,0,1,9.022,1.324,11.376,11.376,0,0,1,3.538,1.866A3.391,3.391,0,0,1,30,15.974c0,1.718-2.03,3.459-5.3,4.541A28.8,28.8,0,0,1,16,21.706Zm0-10.217a27.948,27.948,0,0,0-8.749,1.282c-2.8.977-4.055,2.313-4.055,3.2,0,.928,1.349,2.387,4.311,3.4A27.21,27.21,0,0,0,16,20.51a27.6,27.6,0,0,0,8.325-1.13C27.4,18.361,28.8,16.9,28.8,15.974a2.327,2.327,0,0,0-1.01-1.573,10.194,10.194,0,0,0-3.161-1.654A27.462,27.462,0,0,0,16,11.489Z" style="fill:#00d8ff"/><path d="M10.32,28.443a2.639,2.639,0,0,1-1.336-.328c-1.432-.826-1.928-3.208-1.327-6.373a28.755,28.755,0,0,1,3.4-8.593h0A28.676,28.676,0,0,1,16.71,5.995a11.376,11.376,0,0,1,3.384-2.133,3.391,3.391,0,0,1,2.878,0c1.489.858,1.982,3.486,1.287,6.859a28.806,28.806,0,0,1-3.316,8.133,28.385,28.385,0,0,1-5.476,7.093,11.3,11.3,0,0,1-3.523,2.189A4.926,4.926,0,0,1,10.32,28.443Zm1.773-14.7a27.948,27.948,0,0,0-3.26,8.219c-.553,2.915-.022,4.668.75,5.114.8.463,2.742.024,5.1-2.036a27.209,27.209,0,0,0,5.227-6.79,27.6,27.6,0,0,0,3.181-7.776c.654-3.175.089-5.119-.713-5.581a2.327,2.327,0,0,0-1.868.089A10.194,10.194,0,0,0,17.5,6.9a27.464,27.464,0,0,0-5.4,6.849Z" style="fill:#00d8ff"/><path d="M21.677,28.456c-1.355,0-3.076-.82-4.868-2.361a28.756,28.756,0,0,1-5.747-7.237h0a28.676,28.676,0,0,1-3.374-8.471,11.376,11.376,0,0,1-.158-4A3.391,3.391,0,0,1,8.964,3.9c1.487-.861,4.01.024,6.585,2.31a28.8,28.8,0,0,1,5.39,6.934,28.384,28.384,0,0,1,3.41,8.287,11.3,11.3,0,0,1,.137,4.146,3.543,3.543,0,0,1-1.494,2.555A2.59,2.59,0,0,1,21.677,28.456Zm-9.58-10.2a27.949,27.949,0,0,0,5.492,6.929c2.249,1.935,4.033,2.351,4.8,1.9.8-.465,1.39-2.363.782-5.434A27.212,27.212,0,0,0,19.9,13.74,27.6,27.6,0,0,0,14.755,7.1c-2.424-2.152-4.39-2.633-5.191-2.169a2.327,2.327,0,0,0-.855,1.662,10.194,10.194,0,0,0,.153,3.565,27.465,27.465,0,0,0,3.236,8.1Z" style="fill:#00d8ff"/>',
"React TSX": '<circle cx="16" cy="15.974" r="2.5" style="fill:#007acc"/><path d="M16,21.706a28.385,28.385,0,0,1-8.88-1.2,11.3,11.3,0,0,1-3.657-1.958A3.543,3.543,0,0,1,2,15.974c0-1.653,1.816-3.273,4.858-4.333A28.755,28.755,0,0,1,16,10.293a28.674,28.674,0,0,1,9.022,1.324,11.376,11.376,0,0,1,3.538,1.866A3.391,3.391,0,0,1,30,15.974c0,1.718-2.03,3.459-5.3,4.541A28.8,28.8,0,0,1,16,21.706Zm0-10.217a27.948,27.948,0,0,0-8.749,1.282c-2.8.977-4.055,2.313-4.055,3.2,0,.928,1.349,2.387,4.311,3.4A27.21,27.21,0,0,0,16,20.51a27.6,27.6,0,0,0,8.325-1.13C27.4,18.361,28.8,16.9,28.8,15.974a2.327,2.327,0,0,0-1.01-1.573,10.194,10.194,0,0,0-3.161-1.654A27.462,27.462,0,0,0,16,11.489Z" style="fill:#007acc"/><path d="M10.32,28.443a2.639,2.639,0,0,1-1.336-.328c-1.432-.826-1.928-3.208-1.327-6.373a28.755,28.755,0,0,1,3.4-8.593h0A28.676,28.676,0,0,1,16.71,5.995a11.376,11.376,0,0,1,3.384-2.133,3.391,3.391,0,0,1,2.878,0c1.489.858,1.982,3.486,1.287,6.859a28.806,28.806,0,0,1-3.316,8.133,28.385,28.385,0,0,1-5.476,7.093,11.3,11.3,0,0,1-3.523,2.189A4.926,4.926,0,0,1,10.32,28.443Zm1.773-14.7a27.948,27.948,0,0,0-3.26,8.219c-.553,2.915-.022,4.668.75,5.114.8.463,2.742.024,5.1-2.036a27.209,27.209,0,0,0,5.227-6.79,27.6,27.6,0,0,0,3.181-7.776c.654-3.175.089-5.119-.713-5.581a2.327,2.327,0,0,0-1.868.089A10.194,10.194,0,0,0,17.5,6.9a27.464,27.464,0,0,0-5.4,6.849Z" style="fill:#007acc"/><path d="M21.677,28.456c-1.355,0-3.076-.82-4.868-2.361a28.756,28.756,0,0,1-5.747-7.237h0a28.676,28.676,0,0,1-3.374-8.471,11.376,11.376,0,0,1-.158-4A3.391,3.391,0,0,1,8.964,3.9c1.487-.861,4.01.024,6.585,2.31a28.8,28.8,0,0,1,5.39,6.934,28.384,28.384,0,0,1,3.41,8.287,11.3,11.3,0,0,1,.137,4.146,3.543,3.543,0,0,1-1.494,2.555A2.59,2.59,0,0,1,21.677,28.456Zm-9.58-10.2a27.949,27.949,0,0,0,5.492,6.929c2.249,1.935,4.033,2.351,4.8,1.9.8-.465,1.39-2.363.782-5.434A27.212,27.212,0,0,0,19.9,13.74,27.6,27.6,0,0,0,14.755,7.1c-2.424-2.152-4.39-2.633-5.191-2.169a2.327,2.327,0,0,0-.855,1.662,10.194,10.194,0,0,0,.153,3.565,27.465,27.465,0,0,0,3.236,8.1Z" style="fill:#007acc"/>',
"Reason": '<polyline points="2 2 30 2 30 30 2 30 2 2" style="fill:#dd4b39"/><path d="M9.051,17.527q2.537,0,5.072,0A4.947,4.947,0,0,1,17.1,18.5a3.29,3.29,0,0,1,1.128,2.267,4.117,4.117,0,0,1-.778,3.022,3.6,3.6,0,0,1-1.137.905l2.247,3.549-3.061,0-1.6-3.043-2.154,0,0,3.032H9.051V17.527m2.69,2.128,0,3.438,1.989,0a2.184,2.184,0,0,0,1.468-.452,1.814,1.814,0,0,0,.482-1.544,1.469,1.469,0,0,0-.705-1.18,2.768,2.768,0,0,0-1.437-.269C12.94,19.654,11.741,19.655,11.741,19.655Zm8.384-2.13h8.35v2.13h-5.66V21.8l5.11,0v2.119H22.82V26.1h5.824v2.142H20.125V17.525Z" style="fill:#fff"/>',
"Rego": '<defs><clipPath id="a"><path d="M7.055,16.241c3.415-10.22,14.759-9.473,17.924,0l.1,5.893a15.562,15.562,0,0,0-9.036,7.246A17.641,17.641,0,0,0,7.03,22.346Z" style="fill:none"/></clipPath></defs><title>file_type_rego</title><path d="M7.03,16.241l2.6-4.559c-2.418-.312-2.606-3.431-.8-9.062C3.809,8.853,2.42,10.228,7.03,16.241Z" style="fill:#bfbfbf;fill-rule:evenodd"/><path d="M24.97,16.241l-2.595-4.559c2.418-.312,2.606-3.431.8-9.062C28.191,8.853,29.58,10.228,24.97,16.241Z" style="fill:#bfbfbf;fill-rule:evenodd"/><path d="M7.055,16.241c3.415-10.22,14.759-9.473,17.924,0l.1,5.893a15.562,15.562,0,0,0-9.036,7.246A17.641,17.641,0,0,0,7.03,22.346Z" style="fill:none"/><g style="clip-path:url(#a)"><rect x="16.053" y="7.962" width="9.549" height="21.899" style="fill:#536367"/><rect x="5.322" y="7.962" width="10.732" height="21.899" style="fill:#78929a"/></g><circle cx="16.04" cy="16.241" r="1.166" style="fill:#fff"/>',
"ReScript": '<defs><linearGradient id="a" x1="11.421" y1="-221.705" x2="21.509" y2="-248.792" gradientTransform="matrix(1, 0, 0, -1, 0, -218)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e84f4f"/><stop offset="0.409" stop-color="#db4646"/><stop offset="0.999" stop-color="#cb3939"/></linearGradient></defs><title>file_type_rescript</title><path d="M2,10.97c0-3.738,0-5.6.952-6.916a4.992,4.992,0,0,1,1.1-1.1C5.364,2,7.233,2,10.969,2H21.03c3.738,0,5.605,0,6.916.951a4.992,4.992,0,0,1,1.1,1.1C30,5.364,30,7.232,30,10.97V21.03c0,3.737,0,5.605-.952,6.916a4.966,4.966,0,0,1-1.1,1.1C26.636,30,24.768,30,21.03,30H10.969c-3.736,0-5.6,0-6.915-.952a4.966,4.966,0,0,1-1.1-1.1C2,26.636,2,24.767,2,21.03Z" style="fill:url(#a)"/><path d="M20.974,15.554a3.325,3.325,0,1,0-3.324-3.325A3.325,3.325,0,0,0,20.974,15.554Z" style="fill:#fff"/><path d="M9.316,11.809a4.676,4.676,0,0,1,.206-1.987A1.886,1.886,0,0,1,10.345,9a4.7,4.7,0,0,1,1.987-.205h2.64V21.045a4.686,4.686,0,0,1-.144,1.664,1.892,1.892,0,0,1-1.02,1.02,4.72,4.72,0,0,1-1.664.143,4.717,4.717,0,0,1-1.664-.143,1.892,1.892,0,0,1-1.02-1.02,4.72,4.72,0,0,1-.143-1.664Z" style="fill:#fff"/>',
"reST (reStructuredText)": '<path d="M16,30A13.859,13.859,0,0,1,2.286,16,14.149,14.149,0,0,1,6.3,6.1,13.517,13.517,0,0,1,25.7,6.1,14.149,14.149,0,0,1,29.714,16,13.859,13.859,0,0,1,16,30Z" style="fill:#ce3f31"/><path d="M11.869,23.015h-.4a4.263,4.263,0,0,1-1.048-.113,1.387,1.387,0,0,1-.767-.548,2.2,2.2,0,0,1-.409-1.026A13.28,13.28,0,0,1,9.159,19.6a12.78,12.78,0,0,0-.08-1.687,1.773,1.773,0,0,0-.405-.924,1.325,1.325,0,0,0-1.026-.391V15.4a1.325,1.325,0,0,0,1.026-.391,1.773,1.773,0,0,0,.405-.924,12.78,12.78,0,0,0,.08-1.687,13.28,13.28,0,0,1,.084-1.731,2.2,2.2,0,0,1,.409-1.026,1.387,1.387,0,0,1,.767-.548,4.263,4.263,0,0,1,1.048-.113h.4v1.14h-.226q-.76,0-.931.4a7.72,7.72,0,0,0-.172,2.17,4.876,4.876,0,0,1-.416,2.316A2.117,2.117,0,0,1,8.859,16a2.089,2.089,0,0,1,1.264.986A4.876,4.876,0,0,1,10.54,19.3a7.72,7.72,0,0,0,.172,2.17q.172.4.931.4h.226Zm1.6-3.141h1.035V16.42h1.459l1.97,3.454h1.184L17.04,16.308a2.243,2.243,0,0,0,1.833-2.319c0-1.7-1.2-2.294-2.855-2.294H13.474Zm1.035-4.3V12.53h1.359c1.272,0,1.97.386,1.97,1.459s-.7,1.583-1.97,1.583Zm5.557-6.591h.4a4.263,4.263,0,0,1,1.048.113,1.387,1.387,0,0,1,.767.548,2.2,2.2,0,0,1,.409,1.026,13.28,13.28,0,0,1,.084,1.731,12.78,12.78,0,0,0,.08,1.687,1.773,1.773,0,0,0,.405.924,1.325,1.325,0,0,0,1.026.391v1.191a1.325,1.325,0,0,0-1.026.391,1.773,1.773,0,0,0-.405.924,12.78,12.78,0,0,0-.08,1.687,13.28,13.28,0,0,1-.084,1.731,2.2,2.2,0,0,1-.409,1.026,1.387,1.387,0,0,1-.767.548,4.263,4.263,0,0,1-1.048.113h-.4v-1.14h.226q.76,0,.931-.4A7.72,7.72,0,0,0,21.4,19.3a4.876,4.876,0,0,1,.416-2.316A2.089,2.089,0,0,1,23.075,16a2.117,2.117,0,0,1-1.264-.994,4.876,4.876,0,0,1-.416-2.316,7.72,7.72,0,0,0-.172-2.17q-.172-.4-.931-.4h-.226Z" style="fill:#fff"/>',
"Robot Framework": '<circle cx="16" cy="16" r="14" style="fill:#fff"/><path d="M10.387,14.6a2.727,2.727,0,0,1,5.453,0,.99.99,0,1,1-1.98,0,.746.746,0,0,0-1.492,0,.99.99,0,1,1-1.98,0m11.3,4.586a.991.991,0,0,1-.992.992H11.508a.992.992,0,0,1,0-1.984h9.184a.994.994,0,0,1,.992.992M17.391,15.16a.992.992,0,0,1,.27-1.375l2.293-1.551a.989.989,0,1,1,1.109,1.637l-2.3,1.551a.965.965,0,0,1-.551.172.994.994,0,0,1-.824-.434m6.289,6.094a.707.707,0,0,1-.207.5l-1.707,1.707a.707.707,0,0,1-.5.207H10.8a.707.707,0,0,1-.5-.207L8.6,21.754a.707.707,0,0,1-.207-.5V10.8a.707.707,0,0,1,.207-.5L10.3,8.594a.707.707,0,0,1,.5-.207H21.266a.707.707,0,0,1,.5.207L23.473,10.3a.707.707,0,0,1,.207.5ZM25.129,9.16,22.9,6.93A1.807,1.807,0,0,0,21.629,6.4H10.438a1.807,1.807,0,0,0-1.273.527L6.938,9.16a1.8,1.8,0,0,0-.527,1.27V21.621a1.8,1.8,0,0,0,.527,1.273l2.227,2.23a1.81,1.81,0,0,0,1.273.523H21.629a1.8,1.8,0,0,0,1.273-.523l2.227-2.23a1.784,1.784,0,0,0,.527-1.273V10.434a1.784,1.784,0,0,0-.527-1.273"/>',
"Ruby": '<defs><linearGradient id="a" x1="-235.957" y1="-308.579" x2="-235.986" y2="-308.527" gradientTransform="matrix(202.935, 0, 0, -202.78, 47910.461, -62541.16)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fb7655"/><stop offset="0.41" stop-color="#e42b1e"/><stop offset="0.99" stop-color="#900"/><stop offset="1" stop-color="#900"/></linearGradient><linearGradient id="b" x1="-235.571" y1="-309.087" x2="-235.697" y2="-309.041" gradientTransform="matrix(60.308, 0, 0, -111.778, 14236.351, -34525.395)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#871101"/><stop offset="0.99" stop-color="#911209"/><stop offset="1" stop-color="#911209"/></linearGradient><linearGradient id="c" x1="-235.896" y1="-313.362" x2="-235.937" y2="-313.129" gradientTransform="matrix(188.32, 0, 0, -21.986, 44447.302, -6856.882)" xlink:href="#b"/><linearGradient id="d" x1="-233.515" y1="-309.082" x2="-233.497" y2="-309.161" gradientTransform="matrix(65.222, 0, 0, -97.1, 15237.802, -29991.814)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.23" stop-color="#e57252"/><stop offset="0.46" stop-color="#de3b20"/><stop offset="0.99" stop-color="#a60003"/><stop offset="1" stop-color="#a60003"/></linearGradient><linearGradient id="e" x1="-235.314" y1="-309.534" x2="-235.31" y2="-309.607" gradientTransform="matrix(105.32, 0, 0, -106.825, 24798.925, -33053.152)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.23" stop-color="#e4714e"/><stop offset="0.56" stop-color="#be1a0d"/><stop offset="0.99" stop-color="#a80d00"/><stop offset="1" stop-color="#a80d00"/></linearGradient><linearGradient id="f" x1="-235.882" y1="-311.851" x2="-235.869" y2="-311.935" gradientTransform="matrix(94.321, 0, 0, -66.418, 22271.499, -20707.004)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.18" stop-color="#e46342"/><stop offset="0.4" stop-color="#c82410"/><stop offset="0.99" stop-color="#a80d00"/><stop offset="1" stop-color="#a80d00"/></linearGradient><linearGradient id="g" x1="-235.412" y1="-321.074" x2="-235.333" y2="-320.958" gradientTransform="matrix(70.767, 0, 0, -24.301, 16678.116, -7798.647)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.54" stop-color="#c81f11"/><stop offset="0.99" stop-color="#bf0905"/><stop offset="1" stop-color="#bf0905"/></linearGradient><linearGradient id="h" x1="-223.821" y1="-310.116" x2="-223.796" y2="-310.18" gradientTransform="matrix(18.177, 0, 0, -72.645, 4071.017, -22510.233)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.31" stop-color="#de4024"/><stop offset="0.99" stop-color="#bf190b"/><stop offset="1" stop-color="#bf190b"/></linearGradient><linearGradient id="i" x1="-235.561" y1="-309.258" x2="-235.424" y2="-309.116" gradientTransform="matrix(158.162, 0, 0, -157.937, 37256.313, -48819.382)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#bd0012"/><stop offset="0.07" stop-color="#fff"/><stop offset="0.17" stop-color="#fff"/><stop offset="0.27" stop-color="#c82f1c"/><stop offset="0.33" stop-color="#820c01"/><stop offset="0.46" stop-color="#a31601"/><stop offset="0.72" stop-color="#b31301"/><stop offset="0.99" stop-color="#e82609"/><stop offset="1" stop-color="#e82609"/></linearGradient><linearGradient id="j" x1="-235.424" y1="-309.143" x2="-235.476" y2="-309.126" gradientTransform="matrix(127.074, 0, 0, -97.409, 29932.229, -30086.947)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8c0c01"/><stop offset="0.54" stop-color="#990c00"/><stop offset="0.99" stop-color="#a80d0e"/><stop offset="1" stop-color="#a80d0e"/></linearGradient><linearGradient id="k" x1="-235.839" y1="-309.604" x2="-235.901" y2="-309.555" gradientTransform="matrix(94.011, 0, 0, -105.603, 22198.743, -32676.856)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#7e110b"/><stop offset="0.99" stop-color="#9e0c00"/><stop offset="1" stop-color="#9e0c00"/></linearGradient><linearGradient id="l" x1="-235.854" y1="-311.24" x2="-235.891" y2="-311.202" gradientTransform="matrix(79.702, 0, 0, -81.791, 18827.397, -25447.905)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#79130d"/><stop offset="0.99" stop-color="#9e120b"/><stop offset="1" stop-color="#9e120b"/></linearGradient><radialGradient id="m" cx="-235.882" cy="-312.543" r="0.076" gradientTransform="matrix(93.113, 0, 0, -48.655, 21986.073, -15193.61)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#a80d00"/><stop offset="0.99" stop-color="#7e0e08"/><stop offset="1" stop-color="#7e0e08"/></radialGradient><radialGradient id="n" cx="-235.282" cy="-309.704" r="0.097" gradientTransform="matrix(97.434, 0, 0, -75.848, 22937.057, -23467.84)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#a30c00"/><stop offset="0.99" stop-color="#800e08"/><stop offset="1" stop-color="#800e08"/></radialGradient><linearGradient id="o" x1="-231.241" y1="-309.435" x2="-231.299" y2="-309.337" gradientTransform="matrix(40.137, 0, 0, -81.143, 9286.998, -25078.589)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8b2114"/><stop offset="0.43" stop-color="#9e100a"/><stop offset="0.99" stop-color="#b3100c"/><stop offset="1" stop-color="#b3100c"/></linearGradient><linearGradient id="p" x1="-235.898" y1="-317.466" x2="-235.831" y2="-317.537" gradientTransform="matrix(78.099, 0, 0, -32.624, 18447.361, -10353.553)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b31000"/><stop offset="0.44" stop-color="#910f08"/><stop offset="0.99" stop-color="#791c12"/><stop offset="1" stop-color="#791c12"/></linearGradient></defs><title>file_type_ruby</title><path d="M23.693,20.469,7.707,29.961l20.7-1.4L30,7.685Z" style="fill:url(#a)"/><path d="M28.44,28.542,26.661,16.263l-4.846,6.4Z" style="fill:url(#b)"/><path d="M28.464,28.542,15.43,27.519,7.776,29.934Z" style="fill:url(#c)"/><path d="M7.794,29.937,11.05,19.27,3.885,20.8Z" style="fill:url(#d)"/><path d="M21.813,22.7l-3-11.735L10.243,19Z" style="fill:url(#e)"/><path d="M29.32,11.127l-8.1-6.619-2.257,7.3Z" style="fill:url(#f)"/><path d="M25.53,2.148,20.763,4.782l-3.007-2.67Z" style="fill:url(#g)"/><path d="M2,24.38l2-3.642L2.382,16.4Z" style="fill:url(#h)"/><path d="M2.274,16.263,3.9,20.873l7.062-1.584L19.024,11.8,21.3,4.569l-3.583-2.53-6.091,2.28C9.706,6.1,5.982,9.635,5.848,9.7s-2.459,4.464-3.574,6.562Z" style="fill:#fff"/><path d="M7.981,7.981C12.14,3.858,17.5,1.421,19.559,3.5s-.124,7.121-4.283,11.244S5.821,21.434,3.765,19.358,3.822,12.1,7.981,7.981Z" style="fill:url(#i)"/><path d="M7.794,29.933l3.231-10.7,10.729,3.447c-3.879,3.638-8.194,6.713-13.96,7.254Z" style="fill:url(#j)"/><path d="M19.038,11.774l2.754,10.91c3.24-3.407,6.149-7.07,7.573-11.6l-10.328.691Z" style="fill:url(#k)"/><path d="M29.337,11.139c1.1-3.327,1.357-8.1-3.841-8.985L21.231,4.509l8.106,6.629Z" style="fill:url(#l)"/><path d="M2,24.332c.153,5.49,4.114,5.572,5.8,5.62l-3.9-9.1L2,24.332Z" style="fill:#9e1209"/><path d="M19.053,11.791c2.49,1.531,7.509,4.6,7.61,4.661a17.552,17.552,0,0,0,2.619-5.343l-10.229.683Z" style="fill:url(#m)"/><path d="M11.021,19.232l4.319,8.332a27.924,27.924,0,0,0,6.385-4.88l-10.7-3.452Z" style="fill:url(#n)"/><path d="M3.887,20.861l-.612,7.287c1.155,1.577,2.743,1.714,4.409,1.591-1.205-3-3.614-9-3.8-8.878Z" style="fill:url(#o)"/><path d="M21.206,4.528l8.58,1.2c-.458-1.94-1.864-3.192-4.261-3.584l-4.319,2.38Z" style="fill:url(#p)"/>',
"Rust": '<defs><radialGradient id="a" cx="-492.035" cy="-883.37" r="13.998" gradientTransform="matrix(0.866, -0.5, -0.3, -0.52, 177.106, -689.033)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#7d7d7d"/><stop offset="0.267" stop-color="#7e7c7a"/><stop offset="0.45" stop-color="#817871"/><stop offset="0.608" stop-color="#867162"/><stop offset="0.753" stop-color="#8d684c"/><stop offset="0.886" stop-color="#965c30"/><stop offset="1" stop-color="#a04f12"/></radialGradient></defs><title>file_type_rust</title><path d="M15.124,5.3a.832.832,0,1,1,.832.832h0a.831.831,0,0,1-.832-.832M5.2,12.834a.832.832,0,1,1,.832.832h0a.832.832,0,0,1-.832-.832m19.856.039a.832.832,0,1,1,.832.832.831.831,0,0,1-.832-.832h0M7.605,14.013a.76.76,0,0,0,.386-1l-.369-.835H9.074v6.545H6.144a10.247,10.247,0,0,1-.332-3.911Zm6.074.161V12.245h3.458c.179,0,1.261.206,1.261,1.016,0,.672-.83.913-1.513.913ZM8.958,24.561a.832.832,0,1,1,.832.832.831.831,0,0,1-.832-.832h0m12.331.039a.832.832,0,1,1,.832.832.832.832,0,0,1-.832-.832h0m.257-1.887a.758.758,0,0,0-.9.584l-.418,1.949a10.249,10.249,0,0,1-8.545-.041l-.417-1.949a.759.759,0,0,0-.9-.583h0l-1.721.37a10.233,10.233,0,0,1-.89-1.049h8.374c.095,0,.158-.017.158-.1V18.928c0-.086-.063-.1-.158-.1h-2.45V16.947h2.649a1.665,1.665,0,0,1,1.629,1.412c.105.413.336,1.757.494,2.187.157.483.8,1.447,1.482,1.447h4.323a10.243,10.243,0,0,1-.949,1.1Zm4.65-7.821a10.261,10.261,0,0,1,.022,1.779H25.167c-.105,0-.148.069-.148.172v.483c0,1.136-.641,1.384-1.2,1.447-.535.06-1.128-.224-1.2-.551a3.616,3.616,0,0,0-1.671-2.808c1.03-.654,2.1-1.619,2.1-2.911A3.292,3.292,0,0,0,21.44,9.8a4.559,4.559,0,0,0-2.2-.724H8.367A10.246,10.246,0,0,1,14.1,5.84l1.282,1.344a.758.758,0,0,0,1.072.026h0l1.434-1.372a10.248,10.248,0,0,1,7.015,5l-.982,2.217a.761.761,0,0,0,.386,1Zm2.448.036-.033-.343,1.011-.943a.42.42,0,0,0-.013-.595.428.428,0,0,0-.121-.081L28.2,12.483l-.1-.334.806-1.12a.422.422,0,0,0-.13-.581.43.43,0,0,0-.133-.055l-1.363-.222-.164-.306.573-1.257a.419.419,0,0,0-.236-.544.426.426,0,0,0-.146-.029l-1.383.048L25.7,7.819l.318-1.347a.421.421,0,0,0-.343-.487.435.435,0,0,0-.144,0L24.183,6.3l-.266-.219L23.966,4.7a.421.421,0,0,0-.431-.411.426.426,0,0,0-.141.028l-1.257.573-.306-.164-.222-1.363a.421.421,0,0,0-.5-.318.43.43,0,0,0-.133.055l-1.121.806-.333-.1-.483-1.293a.421.421,0,0,0-.555-.215.442.442,0,0,0-.12.08L17.418,3.39l-.343-.033L16.347,2.18a.421.421,0,0,0-.688,0l-.728,1.177-.343.033-.943-1.012a.421.421,0,0,0-.595.015.442.442,0,0,0-.08.12L12.483,3.8l-.333.1-1.12-.8a.422.422,0,0,0-.581.13.43.43,0,0,0-.055.133l-.222,1.363-.306.164L8.608,4.317a.421.421,0,0,0-.544.239.444.444,0,0,0-.028.144l.048,1.383L7.818,6.3,6.471,5.984a.421.421,0,0,0-.487.343.435.435,0,0,0,0,.144L6.3,7.819l-.218.265L4.7,8.036a.422.422,0,0,0-.383.573L4.89,9.866l-.164.306-1.363.222a.42.42,0,0,0-.318.5.43.43,0,0,0,.055.133l.806,1.12-.1.334-1.293.483a.421.421,0,0,0-.215.555.414.414,0,0,0,.081.121l1.011.943-.033.343-1.177.728a.421.421,0,0,0,0,.688l1.177.728.033.343-1.011.943a.421.421,0,0,0,.015.595.436.436,0,0,0,.119.08l1.293.483.1.334L3.1,20.972a.421.421,0,0,0,.131.581.43.43,0,0,0,.133.055l1.363.222.164.307-.573,1.257a.422.422,0,0,0,.24.545.438.438,0,0,0,.143.028l1.383-.048.219.266-.317,1.348a.42.42,0,0,0,.341.486.4.4,0,0,0,.146,0L7.818,25.7l.266.218L8.035,27.3a.419.419,0,0,0,.429.41.413.413,0,0,0,.143-.028l1.257-.573.306.164.222,1.362a.421.421,0,0,0,.5.319.407.407,0,0,0,.133-.055l1.12-.807.334.1.483,1.292a.422.422,0,0,0,.556.214.436.436,0,0,0,.119-.08l.943-1.011.343.034.728,1.177a.422.422,0,0,0,.588.1.413.413,0,0,0,.1-.1l.728-1.177.343-.034.943,1.011a.421.421,0,0,0,.595-.015.436.436,0,0,0,.08-.119l.483-1.292.334-.1,1.12.807a.421.421,0,0,0,.581-.131.43.43,0,0,0,.055-.133l.222-1.362.306-.164,1.257.573a.421.421,0,0,0,.544-.239.438.438,0,0,0,.028-.143l-.048-1.384.265-.218,1.347.317a.421.421,0,0,0,.487-.34.447.447,0,0,0,0-.146L25.7,24.183l.218-.266,1.383.048a.421.421,0,0,0,.41-.431.4.4,0,0,0-.028-.142l-.573-1.257.164-.307,1.363-.222a.421.421,0,0,0,.319-.5.434.434,0,0,0-.056-.135l-.806-1.12.1-.334,1.293-.483a.42.42,0,0,0,.215-.554.414.414,0,0,0-.081-.121l-1.011-.943.033-.343,1.177-.728a.421.421,0,0,0,0-.688Z" style="fill:url(#a)"/>',
"SAS": '<path d="M16.018,30A14,14,0,1,1,30,16.2,14,14,0,0,1,16.018,30Z" style="fill:#002bb5"/><path d="M9.17,22.63c.026.061.046.124.077.183,2.215,4.206,7.738,4.616,10.756,2.454a6.017,6.017,0,0,0,1.731-8.583,15.7,15.7,0,0,0-1.318-1.731c-.881-1.067-1.755-2.14-2.636-3.207-.366-.443-.767-.835-1.416-.683a1.393,1.393,0,0,0-.816,2.311c.888,1.106,1.819,2.177,2.7,3.286a3.874,3.874,0,0,1,.589,4.4,5.423,5.423,0,0,1-5,3.134A6.6,6.6,0,0,1,9.17,22.63Z" style="fill:#fff"/><path d="M22.494,9.609c.08-.248-.066-.37-.141-.509A7.477,7.477,0,0,0,12.6,6.237c-3.3,1.63-5.1,5.352-2.637,9.147a56.53,56.53,0,0,0,4.135,5.12,1.012,1.012,0,0,0,.709.345,1.384,1.384,0,0,0,1.428-.765,1.247,1.247,0,0,0-.173-1.507c-.876-1.051-1.769-2.088-2.615-3.162a4.13,4.13,0,0,1,.323-5.771A6.054,6.054,0,0,1,19.984,8.13,5.19,5.19,0,0,1,22.494,9.609Z" style="fill:#fff"/>',
"Sass (Sass)": '<path d="M26.11,17.572a5.8,5.8,0,0,0-2.537.588,5.345,5.345,0,0,1-.568-1.314,3.53,3.53,0,0,1-.051-1.1,9.811,9.811,0,0,1,.332-1.192c-.005-.051-.061-.292-.624-.3s-1.048.107-1.1.256a6.171,6.171,0,0,0-.235.834,19.686,19.686,0,0,1-1.713,3.294,3.186,3.186,0,0,1-.44-2.066,9.811,9.811,0,0,1,.332-1.192c-.005-.051-.061-.292-.624-.3s-1.048.107-1.1.256-.118.5-.235.834-1.483,3.386-1.841,4.173c-.184.4-.343.726-.455.946h0a.233.233,0,0,1-.02.041c-.1.189-.153.292-.153.292v.005c-.077.138-.159.266-.2.266a1.711,1.711,0,0,1,.01-.869c.2-1.059.69-2.705.685-2.762,0-.031.092-.317-.317-.465a.508.508,0,0,0-.578.1c-.036,0-.061.087-.061.087s.445-1.851-.849-1.851a3.855,3.855,0,0,0-2.475,1.683c-.348.189-1.089.593-1.882,1.028-.3.169-.614.338-.905.5-.02-.02-.041-.046-.061-.066C6.87,17.6,3.975,16.416,4.1,14.171c.046-.818.327-2.966,5.559-5.575,4.306-2.122,7.733-1.534,8.326-.23.849,1.862-1.836,5.319-6.285,5.82a3.351,3.351,0,0,1-2.813-.711c-.235-.256-.271-.271-.358-.22-.143.077-.051.307,0,.44a2.626,2.626,0,0,0,1.606,1.263,8.55,8.55,0,0,0,5.217-.517c2.7-1.043,4.8-3.943,4.184-6.372-.619-2.465-4.71-3.278-8.582-1.9A19.5,19.5,0,0,0,4.359,9.952c-2.133,1.995-2.47,3.728-2.332,4.455.5,2.578,4.051,4.255,5.472,5.5-.072.041-.138.077-.194.107-.711.353-3.421,1.77-4.1,3.268-.767,1.7.123,2.915.711,3.079a4.374,4.374,0,0,0,4.71-1.908A4.725,4.725,0,0,0,9.049,20.1a.107.107,0,0,0-.02-.031l.557-.327c.363-.215.721-.414,1.028-.578a6.74,6.74,0,0,0-.363,1.862,3.886,3.886,0,0,0,.834,2.7.921.921,0,0,0,.675.22c.6,0,.875-.5,1.176-1.094.368-.726.7-1.57.7-1.57s-.414,2.281.711,2.281c.409,0,.823-.532,1.008-.8v.005s.01-.015.031-.051l.066-.107v-.01c.164-.286.532-.936,1.079-2.015.706-1.391,1.386-3.13,1.386-3.13a8.888,8.888,0,0,0,.271,1.13,10.643,10.643,0,0,0,.583,1.309c-.164.23-.266.358-.266.358l.005.005c-.133.174-.276.363-.435.547a16.3,16.3,0,0,0-1.314,1.647.447.447,0,0,0,.123.6,1.116,1.116,0,0,0,.685.113,3.147,3.147,0,0,0,1.028-.235,3.45,3.45,0,0,0,.885-.465,1.98,1.98,0,0,0,.849-1.744,3.521,3.521,0,0,0-.322-1.233c.051-.072.1-.143.148-.215a23.428,23.428,0,0,0,1.534-2.649,8.888,8.888,0,0,0,.271,1.13,7.57,7.57,0,0,0,.5,1.125A4.861,4.861,0,0,0,20.965,20.8c-.322.931-.072,1.35.4,1.447a1.425,1.425,0,0,0,.747-.153,3.4,3.4,0,0,0,.946-.486,2.126,2.126,0,0,0,1.043-1.729,3.268,3.268,0,0,0-.235-1.023,5.356,5.356,0,0,1,2.716-.312c2.434.286,2.915,1.805,2.823,2.445a1.618,1.618,0,0,1-.772,1.094c-.169.107-.225.143-.21.22.02.113.1.107.245.087A1.9,1.9,0,0,0,30,20.7c.077-1.5-1.355-3.145-3.887-3.13ZM7.33,23.9c-.808.88-1.933,1.212-2.419.931-.522-.3-.317-1.6.675-2.532a12.884,12.884,0,0,1,1.9-1.417c.118-.072.292-.174.5-.3l.056-.031h0l.123-.077A3.493,3.493,0,0,1,7.33,23.9Zm5.881-4c-.281.685-.869,2.44-1.227,2.342-.307-.082-.5-1.412-.061-2.726a6.193,6.193,0,0,1,.956-1.754c.44-.491.926-.655,1.043-.455a9.062,9.062,0,0,1-.711,2.593Zm4.853,2.322c-.118.061-.23.1-.281.072-.036-.02.051-.1.051-.1s.609-.655.849-.951c.138-.174.3-.378.476-.609V20.7c0,.782-.757,1.309-1.094,1.524Zm3.744-.854c-.087-.061-.072-.266.22-.905a3.408,3.408,0,0,1,.834-1.074,1.448,1.448,0,0,1,.082.471,1.547,1.547,0,0,1-1.135,1.509Z" style="fill:#cd6799"/>',
"Sass (SCSS)": '<path d="M16.171,18.7c-.481.221-1.008.509-2.063,1.088-.4.225-.818.45-1.207.662-.027-.027-.055-.061-.082-.089-2.087-2.23-5.947-3.805-5.783-6.8.061-1.091.436-3.955,7.413-7.433,5.742-2.83,10.311-2.046,11.1-.307C26.683,8.3,23.1,12.913,17.17,13.582a4.469,4.469,0,0,1-3.751-.948c-.314-.341-.361-.361-.477-.293-.191.1-.068.409,0,.586a3.5,3.5,0,0,0,2.141,1.684,11.4,11.4,0,0,0,6.956-.689c3.594-1.391,6.4-5.258,5.578-8.5-.825-3.287-6.281-4.371-11.443-2.537a26,26,0,0,0-8.79,5.047c-2.844,2.66-3.294,4.972-3.11,5.94.662,3.437,5.4,5.674,7.3,7.331-.1.055-.184.1-.259.143-.948.471-4.562,2.36-5.463,4.358-1.023,2.264.164,3.887.948,4.105a5.832,5.832,0,0,0,6.281-2.544,6.3,6.3,0,0,0,.559-5.8,5.03,5.03,0,0,1,.716-.477c.484-.286.945-.568,1.354-.786l0,0a10.475,10.475,0,0,1,4.475-.989c3.246.382,3.887,2.407,3.764,3.26a2.157,2.157,0,0,1-1.03,1.459c-.225.143-.3.191-.28.293.027.15.136.143.327.116a2.535,2.535,0,0,0,1.766-2.257c.1-2-1.807-4.194-5.183-4.174a7.753,7.753,0,0,0-2.946.587q-.225.093-.437.2Zm-4.825,7.839c-1.078,1.173-2.578,1.616-3.226,1.241-.7-.4-.423-2.135.9-3.376a17.18,17.18,0,0,1,2.53-1.889c.157-.1.389-.232.668-.4.048-.027.075-.041.075-.041l.164-.1A4.658,4.658,0,0,1,11.346,26.539Z" style="fill:#cd6799"/>',
"Scala": '<defs><linearGradient id="a" x1="-134.907" y1="204.572" x2="-134.896" y2="204.572" gradientTransform="matrix(1538, 0, 0, -961.25, 207495, 196661)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e62d2a"/><stop offset="0.6" stop-color="#df3f3d"/><stop offset="0.8" stop-color="#df3f3d"/><stop offset="1" stop-color="#e62d2a"/></linearGradient><linearGradient id="b" x1="-134.907" y1="203.781" x2="-134.896" y2="203.781" gradientTransform="matrix(1538, 0, 0, -961.25, 207495, 195892)" xlink:href="#a"/><linearGradient id="c" x1="-134.907" y1="205.363" x2="-134.896" y2="205.363" gradientTransform="matrix(1538, 0, 0, -961.25, 207495, 197430)" xlink:href="#a"/></defs><title>file_type_scala</title><path d="M7.384,19.231v2.154c0,.363,7.833.971,12.937,2.154,2.465-.571,4.295-1.277,4.295-2.154V19.231c0-.877-1.83-1.582-4.295-2.154-5.1,1.183-12.937,1.791-12.937,2.154" style="fill:#7f0c1d"/><path d="M7.384,10.615v2.154c0,.363,7.833.971,12.937,2.154,2.465-.571,4.295-1.277,4.295-2.154V10.615c0-.877-1.83-1.582-4.295-2.154-5.1,1.183-12.937,1.791-12.937,2.154" style="fill:#7f0c1d"/><path d="M7.384,14.923v6.462c0-.538,17.232-1.615,17.232-4.308V10.615c0,2.692-17.232,3.769-17.232,4.308" style="fill:url(#a)"/><path d="M7.384,6.308V12.77c0-.538,17.232-1.615,17.232-4.308V2c0,2.692-17.232,3.769-17.232,4.308" style="fill:url(#b)"/><path d="M7.384,23.538V30c0-.538,17.232-1.615,17.232-4.308V19.231c0,2.692-17.232,3.769-17.232,4.308" style="fill:url(#c)"/>',
"Shell session": '<path d="M29.4,27.6H2.5V4.5H29.4Zm-25.9-1H28.4V5.5H3.5Z" style="fill:#d9b400"/><polygon points="6.077 19.316 5.522 18.484 10.366 15.255 5.479 11.184 6.12 10.416 12.035 15.344 6.077 19.316" style="fill:#d9b400"/><rect x="12.7" y="18.2" width="7.8" height="1" style="fill:#d9b400"/><rect x="2.5" y="5.5" width="26.9" height="1.9" style="fill:#d9b400"/>',
"Shell": '<path d="M29.4,27.6H2.5V4.5H29.4Zm-25.9-1H28.4V5.5H3.5Z" style="fill:#d9b400"/><polygon points="6.077 19.316 5.522 18.484 10.366 15.255 5.479 11.184 6.12 10.416 12.035 15.344 6.077 19.316" style="fill:#d9b400"/><rect x="12.7" y="18.2" width="7.8" height="1" style="fill:#d9b400"/><rect x="2.5" y="5.5" width="26.9" height="1.9" style="fill:#d9b400"/>',
"Smarty": '<defs><linearGradient id="a" x1="13.859" y1="29.219" x2="18.106" y2="29.219" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#636361"/><stop offset="0.178" stop-color="#6c6d70"/><stop offset="0.219" stop-color="#6f7175"/><stop offset="0.309" stop-color="#616366"/><stop offset="0.481" stop-color="#3c3d3f"/><stop offset="0.716" stop-color="#010101"/><stop offset="0.719"/><stop offset="1" stop-color="#636a6e"/></linearGradient><linearGradient id="b" x1="15.178" y1="29.734" x2="16.787" y2="29.734" xlink:href="#a"/><linearGradient id="c" x1="15.277" y1="29.881" x2="16.688" y2="29.881" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#9b9b98"/><stop offset="0.131" stop-color="#a4a5a7"/><stop offset="0.219" stop-color="#aeb1b8"/><stop offset="0.352" stop-color="#9fa4ab"/><stop offset="0.605" stop-color="#788188"/><stop offset="0.719" stop-color="#657076"/><stop offset="1" stop-color="#8b949a"/></linearGradient><radialGradient id="d" cx="-8.456" cy="-16.616" r="19.383" gradientTransform="translate(34.042 37.063) scale(1.054)" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#70706e"/><stop offset="0.112" stop-color="#616261"/><stop offset="0.219" stop-color="#46474a"/><stop offset="0.408" stop-color="#48494c"/><stop offset="0.487" stop-color="#4e5053"/><stop offset="0.544" stop-color="#5a5c5f"/><stop offset="0.592" stop-color="#6a6e71"/><stop offset="0.633" stop-color="#7f8588"/><stop offset="0.667" stop-color="#979ea1"/><stop offset="0.719" stop-color="#3d4447"/><stop offset="1" stop-color="#656c70"/></radialGradient><linearGradient id="e" x1="16.126" y1="28.108" x2="16.05" y2="26.893" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#9b9b98"/><stop offset="0.109" stop-color="#a5a6a7"/><stop offset="0.219" stop-color="#babcc4"/><stop offset="0.311" stop-color="#abaeb5"/><stop offset="0.487" stop-color="#84898f"/><stop offset="0.719" stop-color="#485054"/><stop offset="1" stop-color="#8b949a"/></linearGradient><linearGradient id="f" x1="16.013" y1="26.542" x2="15.895" y2="24.635" xlink:href="#e"/><linearGradient id="g" x1="16.023" y1="25.546" x2="15.887" y2="23.355" xlink:href="#e"/><linearGradient id="h" x1="16.013" y1="27.627" x2="15.895" y2="25.72" xlink:href="#e"/><linearGradient id="j" x1="13.68" y1="28.805" x2="18.284" y2="28.805" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#545453"/><stop offset="0.071" stop-color="#616262"/><stop offset="0.143" stop-color="#848589"/><stop offset="0.219" stop-color="#aeb1b8"/><stop offset="0.352" stop-color="#9fa4ab"/><stop offset="0.605" stop-color="#788188"/><stop offset="0.719" stop-color="#657076"/><stop offset="1" stop-color="#505659"/></linearGradient><linearGradient id="k" x1="12.159" y1="25.813" x2="19.475" y2="25.813" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e5e1df"/><stop offset="0" stop-color="#dddad6"/><stop offset="0.038" stop-color="#ceccc9"/><stop offset="0.112" stop-color="#a7a9a8"/><stop offset="0.212" stop-color="#697072"/><stop offset="0.264" stop-color="#465054"/><stop offset="0.303" stop-color="#636c6f"/><stop offset="0.398" stop-color="#a5aaac"/><stop offset="0.478" stop-color="#d5d7d9"/><stop offset="0.539" stop-color="#f3f4f5"/><stop offset="0.573" stop-color="#fefeff"/><stop offset="0.62" stop-color="#f4f5f6"/><stop offset="0.699" stop-color="#dadcdf"/><stop offset="0.8" stop-color="#b0b4b9"/><stop offset="0.876" stop-color="#8b9298"/><stop offset="1" stop-color="#d1d3d4"/><stop offset="1" stop-color="#a7a9ac"/></linearGradient><linearGradient id="l" x1="12.159" y1="24.728" x2="19.475" y2="24.728" xlink:href="#k"/><linearGradient id="m" x1="12.159" y1="23.548" x2="19.475" y2="23.548" xlink:href="#k"/><linearGradient id="n" x1="12.159" y1="26.898" x2="19.475" y2="26.898" xlink:href="#k"/><linearGradient id="o" x1="12.159" y1="25.967" x2="19.475" y2="25.967" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e5e1df"/><stop offset="0" stop-color="#dde8d0"/><stop offset="0" stop-color="#d2f3ba"/><stop offset="0.036" stop-color="#c5e4b1"/><stop offset="0.105" stop-color="#a4bd98"/><stop offset="0.199" stop-color="#6e7f71"/><stop offset="0.264" stop-color="#465054"/><stop offset="0.303" stop-color="#636c6f"/><stop offset="0.398" stop-color="#a5aaac"/><stop offset="0.478" stop-color="#d5d7d9"/><stop offset="0.539" stop-color="#f3f4f5"/><stop offset="0.573" stop-color="#fefeff"/><stop offset="0.62" stop-color="#f4f5f6"/><stop offset="0.699" stop-color="#dadcdf"/><stop offset="0.8" stop-color="#b0b4b9"/><stop offset="0.876" stop-color="#8b9298"/><stop offset="1" stop-color="#d1d3d4"/><stop offset="1" stop-color="#a7a9ac"/></linearGradient><linearGradient id="p" x1="12.159" y1="24.883" x2="19.475" y2="24.883" xlink:href="#o"/><linearGradient id="q" x1="12.159" y1="27.05" x2="19.475" y2="27.05" xlink:href="#o"/><linearGradient id="r" x1="11.902" y1="23.201" x2="19.884" y2="23.201" xlink:href="#e"/><radialGradient id="s" cx="-16.983" cy="-22.948" r="10.718" gradientTransform="translate(34.042 37.063) scale(1.054)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffffd1"/><stop offset="0.505" stop-color="#ff0"/><stop offset="0.568" stop-color="#fdf700"/><stop offset="0.664" stop-color="#f6e200"/><stop offset="0.782" stop-color="#ebbf00"/><stop offset="0.906" stop-color="#de9200"/><stop offset="1" stop-color="#da9819"/></radialGradient></defs><title>file_type_smarty</title><path d="M13.859,28.776a.242.242,0,0,0,.128.191,12,12,0,0,0,1.392.622,4.3,4.3,0,0,0,.578.072h.052a4.3,4.3,0,0,0,.578-.072,12.014,12.014,0,0,0,1.392-.622.243.243,0,0,0,.128-.191l-2.137.192Z" style="fill:url(#a)"/><path d="M16.014,30a1.123,1.123,0,0,0,.688-.247.175.175,0,0,0,.085-.126v-.105a3.235,3.235,0,0,0-.773-.053h-.063a3.237,3.237,0,0,0-.773.053v.105a.175.175,0,0,0,.085.126,1.122,1.122,0,0,0,.688.247Z" style="fill:url(#b)"/><path d="M15.951,29.807a4.732,4.732,0,0,1-.674-.044,1.105,1.105,0,0,0,.674.237h.063a1.106,1.106,0,0,0,.675-.237,4.733,4.733,0,0,1-.675.044Z" style="fill:url(#c)"/><path d="M19.809,26.838a1,1,0,0,0-.234.389c-.036.181-.1.585-1.326,1.406l-.025.017a.435.435,0,0,1-.086.037,9.968,9.968,0,0,1-2.155.209,9.968,9.968,0,0,1-2.156-.209.436.436,0,0,1-.085-.036l-.025-.017a4.579,4.579,0,0,1-1.12-.957c-.164-.219-.373-.257-.39-.345a21.055,21.055,0,0,0,3.855.057,13.049,13.049,0,0,0,3.761-.654A.692.692,0,0,1,19.809,26.838Z" style="fill:url(#d)"/><path d="M19.772,26.88a.985.985,0,0,1-.246.129c-.076.028-.245.078-.245.078a25.15,25.15,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028a1.062,1.062,0,0,1-.14-.028,1.016,1.016,0,0,1,.14.107c.16.013.319.019.319.019a26.864,26.864,0,0,0,6.743-.323l.009-.042A.885.885,0,0,1,19.772,26.88Z" style="fill:url(#e)"/><path d="M19.439,25.382s.245-.07.245-.162a.114.114,0,0,0-.013-.065.214.214,0,0,1-.061-.144.437.437,0,0,1,.119-.27,1.069,1.069,0,0,1-.2.1c-.076.028-.245.078-.245.078a25.151,25.151,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028a1.055,1.055,0,0,1-.181-.041.377.377,0,0,1,.078.217.716.716,0,0,1-.254.432.673.673,0,0,1,.368-.079A26.2,26.2,0,0,0,19.439,25.382Z" style="fill:url(#f)"/><path d="M19.439,24.229s.245-.078.245-.182a.143.143,0,0,0-.013-.073.254.254,0,0,1-.061-.162.514.514,0,0,1,.119-.3,1.026,1.026,0,0,1-.2.111c-.076.032-.245.088-.245.088a22.507,22.507,0,0,1-6.458.489c-.136-.01-.32-.032-.32-.032a.953.953,0,0,1-.181-.046.455.455,0,0,1,.078.243.825.825,0,0,1-.254.484.614.614,0,0,1,.368-.089C13.014,24.758,16.935,25.041,19.439,24.229Z" style="fill:url(#g)"/><path d="M19.439,26.467s.245-.07.245-.163a.115.115,0,0,0-.013-.065.214.214,0,0,1-.061-.144.435.435,0,0,1,.119-.27,1.07,1.07,0,0,1-.2.1c-.076.028-.245.078-.245.078a25.162,25.162,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028a1.042,1.042,0,0,1-.181-.041.377.377,0,0,1,.078.217.717.717,0,0,1-.254.432.67.67,0,0,1,.368-.079A26.207,26.207,0,0,0,19.439,26.467Z" style="fill:url(#h)"/><path d="M19.439,26.467s.245-.07.245-.163a.115.115,0,0,0-.013-.065.214.214,0,0,1-.061-.144.435.435,0,0,1,.119-.27,1.07,1.07,0,0,1-.2.1c-.076.028-.245.078-.245.078a25.168,25.168,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028a1.042,1.042,0,0,1-.181-.041.376.376,0,0,1,.078.217.717.717,0,0,1-.254.432.67.67,0,0,1,.368-.079A26.207,26.207,0,0,0,19.439,26.467Z" style="fill:url(#h)"/><path d="M18.224,28.65a.435.435,0,0,1-.086.037,9.968,9.968,0,0,1-2.155.209,9.968,9.968,0,0,1-2.156-.209.436.436,0,0,1-.085-.036l-.025-.017-.029-.019a.112.112,0,0,0,0,.073c.024.073.147.1.147.1a9.943,9.943,0,0,0,2.15.209,9.942,9.942,0,0,0,2.15-.209s.126-.029.147-.1a.118.118,0,0,0,0-.073l-.029.019Z" style="fill:url(#j)"/><path d="M19.944,25.5s.041.252-.418.423c-.076.028-.245.078-.245.078a25.162,25.162,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028-.276-.038-.467-.16-.455-.308,0,0-.033-.249.466-.249a26.2,26.2,0,0,0,6.925-.472s.245-.07.245-.162a.111.111,0,0,0-.013-.066S19.944,25.312,19.944,25.5Z" style="fill:url(#k)"/><path d="M19.944,24.416s.041.252-.418.423c-.076.028-.245.078-.245.078a25.151,25.151,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028-.276-.038-.467-.16-.455-.308,0,0-.033-.248.466-.248a26.193,26.193,0,0,0,6.925-.472s.245-.07.245-.162a.11.11,0,0,0-.013-.065S19.944,24.227,19.944,24.416Z" style="fill:url(#l)"/><path d="M19.893,24.406v-.021c-.012.076-.078.236-.417.355-.076.026-.245.073-.245.073a22.372,22.372,0,0,1-5.1.5h0a22.155,22.155,0,0,0,5.1-.441s.169-.047.245-.073C19.933,24.643,19.893,24.406,19.893,24.406Z" style="fill:#fff"/><path d="M19.893,25.491V25.47c-.012.076-.078.236-.417.355-.076.027-.245.073-.245.073a22.38,22.38,0,0,1-5.1.5h0a22.171,22.171,0,0,0,5.1-.441s.169-.047.245-.073C19.933,25.728,19.893,25.491,19.893,25.491Z" style="fill:#fff"/><path d="M19.944,23.034s.041.329-.418.552c-.076.037-.245.1-.245.1a19.409,19.409,0,0,1-6.458.569c-.136-.012-.32-.037-.32-.037-.276-.05-.467-.209-.455-.4,0,0-.033-.324.466-.324a18.283,18.283,0,0,0,6.925-.461,1.014,1.014,0,0,0,.444-.238A.53.53,0,0,1,19.944,23.034Z" style="fill:url(#m)"/><path d="M19.944,26.586s.041.252-.418.423c-.076.028-.245.078-.245.078a25.15,25.15,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028-.276-.038-.467-.16-.455-.308,0,0-.033-.248.466-.248a26.207,26.207,0,0,0,6.925-.472s.245-.07.245-.163a.111.111,0,0,0-.013-.065S19.944,26.4,19.944,26.586Z" style="fill:url(#n)"/><path d="M19.893,26.576v-.021c-.012.076-.078.236-.417.355-.076.026-.245.073-.245.073a22.372,22.372,0,0,1-5.1.5h0a22.163,22.163,0,0,0,5.1-.441s.169-.047.245-.073C19.933,26.813,19.893,26.576,19.893,26.576Z" style="fill:#fff"/><path d="M19.893,23.321V23.3c-.012.076-.078.236-.417.355-.076.027-.245.073-.245.073a22.372,22.372,0,0,1-5.1.5h0a22.156,22.156,0,0,0,5.1-.441s.169-.047.245-.073C19.933,23.558,19.893,23.321,19.893,23.321Z" style="fill:#fff"/><path d="M12.417,25.881s-.236,0-.241.08.246.085.246.085.175,0,.3.005c.619-.013,1.993-.038,3.437-.166C14.384,25.958,12.723,25.883,12.417,25.881Z" style="fill:url(#o)"/><path d="M12.417,24.8s-.236,0-.241.08.246.085.246.085.175,0,.3.005c.619-.012,1.993-.038,3.437-.166C14.384,24.874,12.723,24.8,12.417,24.8Z" style="fill:url(#p)"/><path d="M12.417,26.965s-.236,0-.241.08.246.085.246.085.175,0,.3.005c.619-.012,1.993-.038,3.437-.166C14.384,27.042,12.723,26.966,12.417,26.965Z" style="fill:url(#q)"/><path d="M11.965,22.779s-.274.315.319.711c0,0,5.775.587,7.6-.695C19.884,22.795,13.623,23.32,11.965,22.779Z" style="fill:url(#r)"/><path d="M20.035,22.779a4.449,4.449,0,0,0,.81-1.155,3.386,3.386,0,0,0,.2-1.115,6.733,6.733,0,0,1,.632-2.91c.534-1.014,2.81-4.447,2.81-7.462A8.012,8.012,0,0,0,16,2a8.012,8.012,0,0,0-8.483,8.136c0,3.015,2.276,6.448,2.81,7.462a6.731,6.731,0,0,1,.632,2.91,3.384,3.384,0,0,0,.2,1.115,4.453,4.453,0,0,0,.81,1.155,13.866,13.866,0,0,0,3.987.37A15.151,15.151,0,0,0,20.035,22.779Z" style="fill:url(#s)"/>',
"Solidity (Ethereum)": '<path d="M20.477,2l-4.5,8h-9l4.5-8h9" style="fill:#c1c1c1;opacity:0.45;isolation:isolate"/><path d="M11.52,30l4.5-8h9l-4.5,8h-9" style="fill:#c1c1c1;opacity:0.45;isolation:isolate"/><path d="M15.975,10h9l-4.5-8h-9Z" style="fill:#c1c1c1;opacity:0.6;isolation:isolate"/><path d="M16.022,22h-9l4.5,8h9Z" style="fill:#c1c1c1;opacity:0.6;isolation:isolate"/><path d="M11.477,18l4.5-8-4.5-8-4.5,8Z" style="fill:#c1c1c1;opacity:0.8;isolation:isolate"/><path d="M20.52,14l-4.5,8,4.5,8,4.5-8Z" style="fill:#c1c1c1;opacity:0.8;isolation:isolate"/>',
"Solution file": '<defs><linearGradient id="a" x1="16" y1="-182.072" x2="16" y2="-209.928" gradientTransform="matrix(1, 0, 0, -1, 0, -180)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient></defs><title>file_type_sln</title><path d="M6.045,23.991a1.166,1.166,0,0,1-1.208.191L2.718,23.3A1.168,1.168,0,0,1,2,22.222V9.778A1.165,1.165,0,0,1,2.718,8.7l2.119-.883a1.169,1.169,0,0,1,1.208.191l.476.408A.646.646,0,0,0,5.5,8.942V23.058a.646.646,0,0,0,1.021.525Z" style="fill:#52218a"/><path d="M2.718,23.3A1.169,1.169,0,0,1,2,22.222v-.1a.674.674,0,0,0,1.174.452L21.25,2.583a1.743,1.743,0,0,1,1.99-.338l5.769,2.778A1.749,1.749,0,0,1,30,6.6v.067a1.1,1.1,0,0,0-1.8-.854L6.521,23.583l-.476.408a1.166,1.166,0,0,1-1.208.191Z" style="fill:#6c33af"/><path d="M2.718,8.7A1.168,1.168,0,0,0,2,9.778v.1a.674.674,0,0,1,1.174-.452L21.25,29.416a1.743,1.743,0,0,0,1.99.338l5.769-2.778A1.747,1.747,0,0,0,30,25.4v-.068a1.1,1.1,0,0,1-1.8.855L6.521,8.417l-.476-.408a1.166,1.166,0,0,0-1.208-.191Z" style="fill:#854cc7"/><path d="M23.24,29.755a1.743,1.743,0,0,1-1.99-.338A1.025,1.025,0,0,0,23,28.692V3.308a1.025,1.025,0,0,0-1.75-.725,1.743,1.743,0,0,1,1.99-.338l5.768,2.774A1.749,1.749,0,0,1,30,6.6V25.405a1.751,1.751,0,0,1-.991,1.577Z" style="fill:#b179f1"/><g style="opacity:0.25"><path d="M22.093,29.883a1.74,1.74,0,0,0,1.147-.128l5.768-2.774A1.749,1.749,0,0,0,30,25.4V6.6a1.75,1.75,0,0,0-.992-1.577L23.24,2.245a1.742,1.742,0,0,0-1.99.339l-9.3,10.284L6.521,8.416l-.476-.408a1.168,1.168,0,0,0-1.207-.191L2.719,8.7A1.167,1.167,0,0,0,2,9.689c0,.029,0,.059,0,.088V22.221c0,.03,0,.059,0,.088a1.167,1.167,0,0,0,.715.989l2.119.883a1.226,1.226,0,0,0,.155.052,1.165,1.165,0,0,0,1.052-.243l.476-.408,5.43-4.452,9.3,10.285A1.733,1.733,0,0,0,22.093,29.883ZM23,10.072,15.77,16,23,21.927ZM5.5,12l3.619,4L5.5,20Z" style="fill-rule:evenodd;fill:url(#a)"/></g>',
"SPARQL": '<path d="M26.284,20.361c-.165-.084-.359-.164-.523-.248H25.9s-1.158-.5-1.24-4.176c-.111-3.655,1.1-4.289,1.1-4.289a4.96,4.96,0,0,0,2.176-2.143,5.122,5.122,0,0,0-2.122-6.927,5.342,5.342,0,0,0-7.138,2.146,5.067,5.067,0,0,0-.523,3.214L18.1,7.855s.3,1.319-2.839,3.272c-3.115,1.95-4.549.962-4.549.962l.082.138a2.131,2.131,0,0,0-.273-.167,5.117,5.117,0,1,0,.825,8.52l-.025.055s1.129-.933,4.407.827c2.592,1.374,2.979,2.748,3.033,3.24a5.1,5.1,0,0,0,2.7,4.7,5.124,5.124,0,1,0,4.825-9.041Zm-5.79.685c-.412.138-1.6.3-4.077-1.017-2.7-1.454-3.115-2.664-3.169-3.021a5.406,5.406,0,0,0-.057-1.319l.029.026S13,14.534,16.084,12.639c2.757-1.705,4.026-1.374,4.245-1.293a2.83,2.83,0,0,0,.47.277,4.082,4.082,0,0,0,.964.383c.387.357,1.076,1.374,1.158,4.1s-.717,3.764-1.158,4.121A5.04,5.04,0,0,0,20.494,21.047Z" style="fill:#0c479c"/><path d="M20.135,4.229a3.861,3.861,0,0,0-.082,5.386c-.717-.685-.688-2.117.029-3.462a.673.673,0,0,1,.746-.277c.025,0,.054.029.082.029a.993.993,0,0,0,.276.026A1.056,1.056,0,0,0,22.2,4.805a.934.934,0,0,0-.3-.685c1.38-.907,2.95-1.017,3.61-.412h.029A3.826,3.826,0,0,0,20.135,4.229ZM5.145,13.846a3.859,3.859,0,0,0-.082,5.389c-.717-.689-.692-2.117.025-3.465a.668.668,0,0,1,.746-.273c.025,0,.054.029.082.029a1,1,0,0,0,.276.026A1.056,1.056,0,0,0,7.21,14.425a.945.945,0,0,0-.3-.689c1.377-.907,2.947-1.017,3.61-.412h.025A3.852,3.852,0,0,0,5.145,13.846Zm15.872,8.163a3.865,3.865,0,0,0-.082,5.389c-.717-.689-.688-2.117.029-3.465a.668.668,0,0,1,.746-.273c.025,0,.054.026.082.026a.887.887,0,0,0,.276.029,1.057,1.057,0,0,0,1.018-1.126.936.936,0,0,0-.3-.689c1.38-.907,2.95-1.017,3.61-.412h.029A3.829,3.829,0,0,0,21.017,22.009Z" style="fill:#fff"/>',
"SQF": '<path d="M25,23.5H7a5.015,5.015,0,0,1-5-5v-6a5.015,5.015,0,0,1,5-5H25a5.015,5.015,0,0,1,5,5v6a5.015,5.015,0,0,1-5,5Z"/><path d="M7,19.461a4.81,4.81,0,0,1-1.414-.2,5.052,5.052,0,0,1-1.111-.472l-.4.432h-.5L3.5,16.052H4a8.462,8.462,0,0,0,.431.953,4.638,4.638,0,0,0,.606.9,3.177,3.177,0,0,0,.8.675,1.985,1.985,0,0,0,1.029.26,1.672,1.672,0,0,0,1.216-.411A1.382,1.382,0,0,0,8.5,17.391a1.156,1.156,0,0,0-.359-.862,2.945,2.945,0,0,0-1.111-.6q-.49-.167-.9-.31t-.773-.292a2.58,2.58,0,0,1-1.239-1.007,2.73,2.73,0,0,1-.405-1.465,2.406,2.406,0,0,1,.21-.986,2.608,2.608,0,0,1,.612-.85,2.967,2.967,0,0,1,.985-.575,3.722,3.722,0,0,1,1.306-.223,3.984,3.984,0,0,1,1.288.2,5.151,5.151,0,0,1,.944.408l.356-.37h.507l.047,2.988h-.5q-.175-.483-.411-.987a4.332,4.332,0,0,0-.5-.839,2.3,2.3,0,0,0-.659-.573,1.729,1.729,0,0,0-.875-.214A1.437,1.437,0,0,0,6,11.212a1.233,1.233,0,0,0-.4.934,1.141,1.141,0,0,0,.347.86,2.951,2.951,0,0,0,1.082.588q.431.154.88.309t.8.3a2.885,2.885,0,0,1,1.286.955,2.512,2.512,0,0,1,.44,1.512,2.632,2.632,0,0,1-.927,1.985,3.367,3.367,0,0,1-1.079.6A4.391,4.391,0,0,1,7,19.461Z" style="fill:#c2c2c2"/><path d="M18.921,11.434a4.338,4.338,0,0,1,.971,1.432,4.834,4.834,0,0,1,.359,1.914,4.958,4.958,0,0,1-.72,2.68,4.036,4.036,0,0,1-2.038,1.661,2.151,2.151,0,0,0,.42,1.272,1.168,1.168,0,0,0,.95.537,3.563,3.563,0,0,0,.592-.043q.254-.043.458-.1v.543a5.753,5.753,0,0,1-.985.3,6.054,6.054,0,0,1-1.37.151,2.206,2.206,0,0,1-1.612-.621,2.574,2.574,0,0,1-.708-1.732A4.579,4.579,0,0,1,13.7,19a4.186,4.186,0,0,1-1.253-.932,4.388,4.388,0,0,1-.842-1.377,4.769,4.769,0,0,1-.312-1.753,5.237,5.237,0,0,1,.347-1.948,4.5,4.5,0,0,1,.953-1.5,4.119,4.119,0,0,1,1.425-.942,4.86,4.86,0,0,1,3.5-.009A4.247,4.247,0,0,1,18.921,11.434Zm-1.5,6.266a4.857,4.857,0,0,0,.379-1.273,9.981,9.981,0,0,0,.117-1.606,10.534,10.534,0,0,0-.1-1.48,4.936,4.936,0,0,0-.347-1.282,2.41,2.41,0,0,0-.665-.9,1.571,1.571,0,0,0-1.032-.34,1.73,1.73,0,0,0-1.6,1.06,6.634,6.634,0,0,0-.548,2.993,9.583,9.583,0,0,0,.12,1.551,4.8,4.8,0,0,0,.376,1.273,2.286,2.286,0,0,0,.665.856,1.591,1.591,0,0,0,.991.306,1.611,1.611,0,0,0,.991-.309A2.135,2.135,0,0,0,17.423,17.7Z" style="fill:#c2c2c2"/><path d="M28.5,12.8h-.455a3.93,3.93,0,0,0-.6-1.086,1.385,1.385,0,0,0-.812-.63c-.116-.016-.272-.031-.465-.043s-.373-.019-.535-.019H24.349v3.433h.822a1.969,1.969,0,0,0,.606-.083,1.054,1.054,0,0,0,.455-.3,1.591,1.591,0,0,0,.283-.516,2.635,2.635,0,0,0,.166-.621h.443v3.686h-.443a2.471,2.471,0,0,0-.181-.676,2.094,2.094,0,0,0-.268-.528,1.012,1.012,0,0,0-.431-.293,1.842,1.842,0,0,0-.63-.1h-.822v2.9a.842.842,0,0,0,.079.38.58.58,0,0,0,.3.256,1.87,1.87,0,0,0,.353.1q.224.046.446.071v.482h-4.46v-.482l.449-.052a1.525,1.525,0,0,0,.391-.083.547.547,0,0,0,.292-.241.842.842,0,0,0,.082-.4v-6.18a.867.867,0,0,0-.073-.367.575.575,0,0,0-.3-.262,2.341,2.341,0,0,0-.431-.136q-.268-.062-.408-.08v-.482H28.5Z" style="fill:#c2c2c2"/>',
"SQF: Status Quo Function (Arma 3)": '<path d="M25,23.5H7a5.015,5.015,0,0,1-5-5v-6a5.015,5.015,0,0,1,5-5H25a5.015,5.015,0,0,1,5,5v6a5.015,5.015,0,0,1-5,5Z"/><path d="M7,19.461a4.81,4.81,0,0,1-1.414-.2,5.052,5.052,0,0,1-1.111-.472l-.4.432h-.5L3.5,16.052H4a8.462,8.462,0,0,0,.431.953,4.638,4.638,0,0,0,.606.9,3.177,3.177,0,0,0,.8.675,1.985,1.985,0,0,0,1.029.26,1.672,1.672,0,0,0,1.216-.411A1.382,1.382,0,0,0,8.5,17.391a1.156,1.156,0,0,0-.359-.862,2.945,2.945,0,0,0-1.111-.6q-.49-.167-.9-.31t-.773-.292a2.58,2.58,0,0,1-1.239-1.007,2.73,2.73,0,0,1-.405-1.465,2.406,2.406,0,0,1,.21-.986,2.608,2.608,0,0,1,.612-.85,2.967,2.967,0,0,1,.985-.575,3.722,3.722,0,0,1,1.306-.223,3.984,3.984,0,0,1,1.288.2,5.151,5.151,0,0,1,.944.408l.356-.37h.507l.047,2.988h-.5q-.175-.483-.411-.987a4.332,4.332,0,0,0-.5-.839,2.3,2.3,0,0,0-.659-.573,1.729,1.729,0,0,0-.875-.214A1.437,1.437,0,0,0,6,11.212a1.233,1.233,0,0,0-.4.934,1.141,1.141,0,0,0,.347.86,2.951,2.951,0,0,0,1.082.588q.431.154.88.309t.8.3a2.885,2.885,0,0,1,1.286.955,2.512,2.512,0,0,1,.44,1.512,2.632,2.632,0,0,1-.927,1.985,3.367,3.367,0,0,1-1.079.6A4.391,4.391,0,0,1,7,19.461Z" style="fill:#c2c2c2"/><path d="M18.921,11.434a4.338,4.338,0,0,1,.971,1.432,4.834,4.834,0,0,1,.359,1.914,4.958,4.958,0,0,1-.72,2.68,4.036,4.036,0,0,1-2.038,1.661,2.151,2.151,0,0,0,.42,1.272,1.168,1.168,0,0,0,.95.537,3.563,3.563,0,0,0,.592-.043q.254-.043.458-.1v.543a5.753,5.753,0,0,1-.985.3,6.054,6.054,0,0,1-1.37.151,2.206,2.206,0,0,1-1.612-.621,2.574,2.574,0,0,1-.708-1.732A4.579,4.579,0,0,1,13.7,19a4.186,4.186,0,0,1-1.253-.932,4.388,4.388,0,0,1-.842-1.377,4.769,4.769,0,0,1-.312-1.753,5.237,5.237,0,0,1,.347-1.948,4.5,4.5,0,0,1,.953-1.5,4.119,4.119,0,0,1,1.425-.942,4.86,4.86,0,0,1,3.5-.009A4.247,4.247,0,0,1,18.921,11.434Zm-1.5,6.266a4.857,4.857,0,0,0,.379-1.273,9.981,9.981,0,0,0,.117-1.606,10.534,10.534,0,0,0-.1-1.48,4.936,4.936,0,0,0-.347-1.282,2.41,2.41,0,0,0-.665-.9,1.571,1.571,0,0,0-1.032-.34,1.73,1.73,0,0,0-1.6,1.06,6.634,6.634,0,0,0-.548,2.993,9.583,9.583,0,0,0,.12,1.551,4.8,4.8,0,0,0,.376,1.273,2.286,2.286,0,0,0,.665.856,1.591,1.591,0,0,0,.991.306,1.611,1.611,0,0,0,.991-.309A2.135,2.135,0,0,0,17.423,17.7Z" style="fill:#c2c2c2"/><path d="M28.5,12.8h-.455a3.93,3.93,0,0,0-.6-1.086,1.385,1.385,0,0,0-.812-.63c-.116-.016-.272-.031-.465-.043s-.373-.019-.535-.019H24.349v3.433h.822a1.969,1.969,0,0,0,.606-.083,1.054,1.054,0,0,0,.455-.3,1.591,1.591,0,0,0,.283-.516,2.635,2.635,0,0,0,.166-.621h.443v3.686h-.443a2.471,2.471,0,0,0-.181-.676,2.094,2.094,0,0,0-.268-.528,1.012,1.012,0,0,0-.431-.293,1.842,1.842,0,0,0-.63-.1h-.822v2.9a.842.842,0,0,0,.079.38.58.58,0,0,0,.3.256,1.87,1.87,0,0,0,.353.1q.224.046.446.071v.482h-4.46v-.482l.449-.052a1.525,1.525,0,0,0,.391-.083.547.547,0,0,0,.292-.241.842.842,0,0,0,.082-.4v-6.18a.867.867,0,0,0-.073-.367.575.575,0,0,0-.3-.262,2.341,2.341,0,0,0-.431-.136q-.268-.062-.408-.08v-.482H28.5Z" style="fill:#c2c2c2"/>',
"SQL": '<path d="M8.562,15.256A21.159,21.159,0,0,0,16,16.449a21.159,21.159,0,0,0,7.438-1.194c1.864-.727,2.525-1.535,2.525-2V9.7a10.357,10.357,0,0,1-2.084,1.076A22.293,22.293,0,0,1,16,12.078a22.36,22.36,0,0,1-7.879-1.3A10.28,10.28,0,0,1,6.037,9.7v3.55C6.037,13.724,6.7,14.528,8.562,15.256Z" style="fill:#ffda44"/><path d="M8.562,21.961a15.611,15.611,0,0,0,2.6.741A24.9,24.9,0,0,0,16,23.155a24.9,24.9,0,0,0,4.838-.452,15.614,15.614,0,0,0,2.6-.741c1.864-.727,2.525-1.535,2.525-2v-3.39a10.706,10.706,0,0,1-1.692.825A23.49,23.49,0,0,1,16,18.74a23.49,23.49,0,0,1-8.271-1.348,10.829,10.829,0,0,1-1.692-.825V19.96C6.037,20.426,6.7,21.231,8.562,21.961Z" style="fill:#ffda44"/><path d="M16,30c5.5,0,9.963-1.744,9.963-3.894V23.269a10.5,10.5,0,0,1-1.535.762l-.157.063A23.487,23.487,0,0,1,16,25.445a23.422,23.422,0,0,1-8.271-1.351c-.054-.02-.106-.043-.157-.063a10.5,10.5,0,0,1-1.535-.762v2.837C6.037,28.256,10.5,30,16,30Z" style="fill:#ffda44"/><ellipse cx="16" cy="5.894" rx="9.963" ry="3.894" style="fill:#ffda44"/>',
"Squirrel": '<path d="M12.966,27.3a18.926,18.926,0,0,1-5.707-.915c-1.832-.592-4.044-1.54-4.931-3.645a.557.557,0,0,1-.025-.073,12.214,12.214,0,0,1,.763-7.531c1.522-4.008,3.71-6.739,6.5-8.116a10.422,10.422,0,0,1,7.6-.55,10.426,10.426,0,0,1,6.04,4.639,11.057,11.057,0,0,1,1.058,2.326,10.66,10.66,0,0,1-5.378,12.689l-.02.009A14.832,14.832,0,0,1,12.966,27.3Z"/><path d="M22.72,11.393a10.144,10.144,0,0,0-12.9-3.869C6.7,9.061,4.784,12.2,3.593,15.334a11.9,11.9,0,0,0-.746,7.187c.783,1.86,2.779,2.744,4.582,3.327a16.206,16.206,0,0,0,11.213-.232A10.11,10.11,0,0,0,23.727,13.6,10.488,10.488,0,0,0,22.72,11.393Z" style="fill:#a05a2c"/><path d="M15.782,6.72A8.263,8.263,0,0,1,17.64,8.084,9.65,9.65,0,0,1,19.08,9.8a9.317,9.317,0,0,1-1.531,11.921A14.933,14.933,0,0,1,7.656,24.7a7.581,7.581,0,0,1-4.135-1.1,8.454,8.454,0,0,0,3.907,2.241,16.208,16.208,0,0,0,11.214-.233A10.112,10.112,0,0,0,23.727,13.6a10.487,10.487,0,0,0-1.007-2.211A9.973,9.973,0,0,0,15.782,6.72Z" style="fill-opacity:0.3137255012989044"/><path d="M23.476,13.389l-1.062-2.895.152-.236A6.875,6.875,0,0,1,27.509,7.7a2.177,2.177,0,0,1,1.879.588,3.376,3.376,0,0,1,.1,3.729c-.343.292-.751.124-1.222-.07a2.821,2.821,0,0,0-2.133-.27,10.2,10.2,0,0,0-2.047,1.209Z"/><path d="M23.039,10.563c1.223-1.9,5.107-2.915,5.912-1.923a2.97,2.97,0,0,1,.177,2.945c-.245.207-1.837-1.059-3.225-.423A10.574,10.574,0,0,0,23.73,12.45Z" style="fill:#502d16"/><path d="M29.4,9.727a.8.8,0,0,1-.2.469c-.229.162-1.9-.506-3.238.056a12.439,12.439,0,0,0-2.071,1.07L23.2,10.34c-.057.074-.116.147-.165.223l.692,1.886A10.577,10.577,0,0,1,25.9,11.162c1.388-.636,2.98.631,3.225.423A2.846,2.846,0,0,0,29.4,9.727Z" style="fill-opacity:0.3137255012989044"/><path d="M21.382,25.18a2.236,2.236,0,0,1-1.147-.323.563.563,0,0,1-.082-.888c.737-.684.607-2.173-.41-4.689a36.526,36.526,0,0,0-5.123-8.825l-.35-.43c-1.512-1.865-2.358-2.815-3.554-2.3a.562.562,0,0,1-.413.016.571.571,0,0,1-.377-.592,2.119,2.119,0,0,1,1.461-2c4.716-1.481,10.26.814,12.905,5.344a11.2,11.2,0,0,1-1.431,13.991A1.919,1.919,0,0,1,21.382,25.18Z"/><path d="M23.812,10.783c-2.444-4.192-7.73-6.528-12.27-5.093-1.007.248-1.065,1.535-1.052,1.517,1.776-.767,2.953.919,4.566,2.89a36.9,36.9,0,0,1,5.209,8.971c.89,2.2,1.4,4.267.27,5.312a1.5,1.5,0,0,0,1.909-.274A10.646,10.646,0,0,0,23.812,10.783Z" style="fill:#502d16"/><path d="M23.649,10.346a9.314,9.314,0,0,1-2.518,7.725c-.455.486-.873.177-1.263.063.138.313.271.626.4.936.89,2.2,1.4,4.266.271,5.312a1.5,1.5,0,0,0,1.909-.274C26.089,20.183,26.357,14.919,23.649,10.346Z" style="fill-opacity:0.3137255012989044"/>',
"Stan": '<title>file_type_stan</title><path d="M16,2A14,14,0,0,0,5.688,25.469c1.7-.514,3.411-.992,4.806-1.357,4.037-1.054,10.948-2.836,11.946-5.082-.28.78-1.218,2.87-1.218,2.87-1.279,1.247-7.09,2.631-10.917,3.367-1.22.235-2.614.507-4.026.806A14,14,0,0,0,28.467,9.628c-2.526.408-10.5,1.854-12.539,2.315-2.255.509-6.789,1.433-7.694,2.993C8.8,13.5,10.492,9.744,10.492,9.744c1.216-2,6.6-3.425,10.358-4.463.876-.242,1.922-.539,3.023-.858A13.934,13.934,0,0,0,16,2Z" style="fill:#b2001d"/><path d="M8.223,14.987c-.252,1.175,3.52,2.313,6.921,3.389a26.362,26.362,0,0,1,5.667,2.192,3.085,3.085,0,0,0,1.662-1.614c.377-1.489-3.013-3.393-5.274-4.229a33.337,33.337,0,0,1-4.407-2.042c-4.316,1.143-4.569,2.3-4.569,2.3Z" style="fill:#590815"/>',
"Stata Ado": '<defs><linearGradient id="a" x1="16" y1="2" x2="16" y2="30" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8aa7c0"/><stop offset="1" stop-color="#3c6e8f"/></linearGradient></defs><title>file_type_stata</title><rect x="2" y="2" width="28" height="28" rx="1.556" ry="1.556" style="fill:url(#a)"/><rect x="13.171" y="6.015" width="5.756" height="5.756" style="fill:#fff"/><rect x="20.326" y="6.015" width="5.756" height="5.756" style="fill:#fff"/><rect x="20.326" y="13.171" width="5.756" height="5.756" style="fill:#fff"/><rect x="13.171" y="13.171" width="5.756" height="5.756" style="fill:#fff"/><rect x="6.015" y="13.171" width="5.756" height="5.756" style="fill:#fff"/><rect x="6.015" y="20.326" width="5.756" height="5.756" style="fill:#fff"/><rect x="13.171" y="20.326" width="5.756" height="5.756" style="fill:#fff"/>',
"Stylus": '<title>file_type_stylus</title><path d="M6.315,20.776c.726-.869.812-1.766.249-3.432-.356-1.054-.947-1.865-.513-2.521.463-.7,1.445-.021.627.911l.164.114c.983.114,1.467-1.232.733-1.616-1.937-1.011-3.631.933-2.884,3.183.32.954.769,1.965.406,2.77A1.794,1.794,0,0,1,3.773,21.3c-.847.043-.285-1.9.691-2.385.085-.043.206-.1.093-.242a2.134,2.134,0,0,0-2.314,1.2C1.061,22.121,4.485,22.954,6.315,20.776Z" style="fill:#c2c2c2"/><path d="M27.462,14.14c.278.684.7,1.36.449,1.958-.206.513-.477.726-.776.776-.42.071-.306-1.246.413-1.638.064-.036.157-.206.071-.306a1.636,1.636,0,0,0-1.7.961c-.8,1.687,1.823,2.15,3.112.491.513-.662.534-1.317.043-2.506-.313-.755-.79-1.317-.491-1.816.32-.527,1.089-.071.513.634l.128.071c.748.043,1.054-.954.484-1.2A1.834,1.834,0,0,0,27.462,14.14Z" style="fill:#c2c2c2"/><path d="M17.95,12.338c-.52-.413-1.979.278-2.392,1.3a16.213,16.213,0,0,1-2.043,4.037c-.8.876-.876.2-.8-.306A15.327,15.327,0,0,1,14.7,12.652c-.235-.349-1.773-.3-2.841,1.36-.4.627-1.31,2.713-2.321,4.358-.221.356-.5.107-.285-.726a39.8,39.8,0,0,1,1.873-5.682,39.072,39.072,0,0,1,6.921-.819c.263-.071.441-.306,0-.32a46.778,46.778,0,0,0-6.593.441,4.923,4.923,0,0,1,1.445-1.944,1.787,1.787,0,0,0-2.264.719,12.287,12.287,0,0,0-.819,1.453,24.194,24.194,0,0,0-3.98.862c-.783.3-.7,1.246-.221,1.068a31.631,31.631,0,0,1,3.816-1.1,30.292,30.292,0,0,0-1.865,5.682c-.441,2.492,1.1,2.478,1.858,1.5.819-1.075,2.528-4.856,2.791-5.255.078-.135.185-.064.128.057-1.908,3.809-1.744,5.283-.2,4.956a4.929,4.929,0,0,0,2.214-1.965c.064-.15.2-.135.171-.071-1.21,3.14-2.748,5.682-3.781,6.479-.94.719-1.638-.84,1.687-3.076.491-.335.263-.79-.292-.634h0a29.793,29.793,0,0,0-8.786,3.325c-.164.114-.313.206-.306.441.007.135.242.085.356.014A22.771,22.771,0,0,1,11.1,20.9a.158.158,0,0,0,.114.007c.121-.028.114.036.036.085-.178.1-.356.192-.4.206-1.766.691-2.834,2.214-2.456,2.99.32.669,2.051.427,2.869-.014,2.008-1.089,3.468-3.225,4.464-6.173C16.6,15.386,17.693,12.424,17.95,12.338Z" style="fill:#c2c2c2"/><path d="M29.62,18.369a48.145,48.145,0,0,0-13.429.968c-.926.242-.669.733-.2.641.007,0,.206-.05.214-.05a42.279,42.279,0,0,1,12.375-.242C29.014,19.765,30.317,18.462,29.62,18.369Z" style="fill:#c2c2c2"/><path d="M18.861,17.985c.911-.456,2.264-3.275,3.154-4.82.064-.114.178-.021.114.057-2.25,3.873-1.3,4.322-.406,4.265,1.189-.071,2.286-1.78,2.528-2.165.1-.15.157-.028.1.078-.057.178-.263.491-.456.919-.271.605.014.84.249.947.37.178,1.381.064,1.538-.555-1.011-.021,1.41-4.792,1.659-5.084a1.718,1.718,0,0,0-2.2.975c-1.018,2.015-1.873,3.638-2.407,3.667-1.04.057,1.2-4.493,1.559-4.635-.221-.32-1.638-.185-2.428,1.04-.285.441-2.022,3.517-2.449,4.023-.755.9-.812.128-.6-.769a10.569,10.569,0,0,1,.349-1.132,5.324,5.324,0,0,1,1.36-1.844c2.2-2.442,3.46-4.422,2.962-5.2-.441-.691-1.915-.384-2.862,1.04-1.744,2.613-3.354,6.195-3.56,7.832S18.056,18.383,18.861,17.985Zm.926-4.792c.078-.178.128-.228.263-.527h0A24.934,24.934,0,0,1,22.492,8.28c.42-.441,1.011.157-.057,1.794a16.462,16.462,0,0,1-2.115,2.642v.007c-.2.221-.377.406-.456.513C19.808,13.307,19.744,13.292,19.787,13.193Z" style="fill:#c2c2c2"/>',
"SVG": '<path d="M7.674,14.488a2.218,2.218,0,1,0,0,3.137H24.326a2.218,2.218,0,1,0,0-3.137Z" style="fill:#ffb13b;stroke:#000;stroke-width:3.73000001907349px"/><path d="M11.222,9.06A2.218,2.218,0,1,0,9,11.278L20.778,23.052A2.218,2.218,0,1,0,23,20.834Z" style="fill:#ffb13b;stroke:#000;stroke-width:3.73000001907349px"/><path d="M17.568,7.73a2.218,2.218,0,1,0-3.137,0V24.382a2.218,2.218,0,1,0,3.137,0Z" style="fill:#ffb13b;stroke:#000;stroke-width:3.73000001907349px"/><path d="M23,11.278A2.218,2.218,0,1,0,20.778,9.06L9,20.834a2.218,2.218,0,1,0,2.218,2.218Z" style="fill:#ffb13b;stroke:#000;stroke-width:3.73000001907349px"/><path d="M7.674,14.488a2.218,2.218,0,1,0,0,3.137H24.326a2.218,2.218,0,1,0,0-3.137Z" style="fill:#ffb13b"/><path d="M11.222,9.06A2.218,2.218,0,1,0,9,11.278L20.778,23.052A2.218,2.218,0,1,0,23,20.834Z" style="fill:#ffb13b"/><path d="M17.568,7.73a2.218,2.218,0,1,0-3.137,0V24.382a2.218,2.218,0,1,0,3.137,0Z" style="fill:#ffb13b"/><path d="M23,11.278A2.218,2.218,0,1,0,20.778,9.06L9,20.834a2.218,2.218,0,1,0,2.218,2.218Z" style="fill:#ffb13b"/><path d="M2,16.056H30V25.95a4.035,4.035,0,0,1-4.106,4.106H6.106A4.035,4.035,0,0,1,2,25.95Z"/><path d="M6.2,23.045A3.628,3.628,0,1,1,12.4,20.48H10.27A1.5,1.5,0,1,0,7.7,21.541h0a1.6,1.6,0,0,0,1.062.441h0a4.118,4.118,0,0,1,2.566,1.063h0a3.628,3.628,0,1,1-6.194,2.565H7.264A1.5,1.5,0,1,0,9.83,24.55h0a1.948,1.948,0,0,0-1.063-.44h0A4.465,4.465,0,0,1,6.2,23.045Z" style="fill:#fff"/><path d="M19.651,16.852,17.085,29.24H14.96L12.4,16.852H14.52l1.5,7.255,1.5-7.255Z" style="fill:#fff"/><path d="M23.28,21.983h3.628v3.628h0a3.628,3.628,0,1,1-7.257,0h0V20.48h0a3.628,3.628,0,0,1,7.257,0H24.783a1.5,1.5,0,1,0-3.005,0v5.13h0a1.5,1.5,0,0,0,3.005,0h0v-1.5h-1.5V21.983Z" style="fill:#fff"/>',
"Swift": '<defs><linearGradient id="a" x1="-134.494" y1="-171.82" x2="-134.497" y2="-171.89" gradientTransform="matrix(240, 0, 0, -205.6, 32295, -35312.585)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f88535"/><stop offset="1" stop-color="#fd2221"/></linearGradient></defs><title>file_type_swift</title><path d="M19.422,4.007s6.217,3.554,7.844,9.2c1.466,5.1.292,7.534.292,7.534a8.915,8.915,0,0,1,1.742,2.8,4.825,4.825,0,0,1,.29,4.453s-.1-2.08-3.2-2.511c-2.841-.4-3.874,2.366-9.3,2.232A18.435,18.435,0,0,1,2,19.354C4.651,20.8,8.124,23.045,12.449,22.7s5.228-1.674,5.228-1.674A66.9,66.9,0,0,1,4.891,7.643c3.4,2.845,11.822,8.507,11.626,8.363A75.826,75.826,0,0,1,8.092,6.24S20.728,16.629,21.745,16.563c.418-.861,2.579-5.318-2.324-12.557Z" style="fill:url(#a)"/>',
"Systemd configuration file": '<path d="M2,12v8H5.256V18.769H3.3V13.231H5.256V12Z" style="fill:#d2d2d2"/><path d="M26.744,12v1.231H28.7v5.538H26.744V20H30V12Z" style="fill:#d2d2d2"/><path d="M17.628,16l5.21-2.769v5.538Z" style="fill:#30d475"/><ellipse cx="12.093" cy="16" rx="2.93" ry="2.769" style="fill:#30d475"/>',
"T4 templating": '<path d="M19.545,6.035H13.27V24H8.3V6.035H2.055V2h17.49Z" style="fill:#1e88e5"/><path d="M27.567,10V22.608h2.4V25.9h-2.4V30H23.551V25.9H14.834V22.455q1.158-1.3,2.4-2.838t2.4-3.173q1.158-1.632,2.155-3.285A32.925,32.925,0,0,0,23.481,10ZM18.781,22.608h4.77V15.621q-.488.907-1.06,1.834t-1.2,1.827q-.628.9-1.269,1.743T18.781,22.608Z" style="fill:#1e88e5"/>',
"T4 Text Templates (C#)": '<path d="M19.545,6.035H13.27V24H8.3V6.035H2.055V2h17.49Z" style="fill:#1e88e5"/><path d="M27.567,10V22.608h2.4V25.9h-2.4V30H23.551V25.9H14.834V22.455q1.158-1.3,2.4-2.838t2.4-3.173q1.158-1.632,2.155-3.285A32.925,32.925,0,0,0,23.481,10ZM18.781,22.608h4.77V15.621q-.488.907-1.06,1.834t-1.2,1.827q-.628.9-1.269,1.743T18.781,22.608Z" style="fill:#1e88e5"/>',
"T4 Text Templates (VB)": '<path d="M19.545,6.035H13.27V24H8.3V6.035H2.055V2h17.49Z" style="fill:#1e88e5"/><path d="M27.567,10V22.608h2.4V25.9h-2.4V30H23.551V25.9H14.834V22.455q1.158-1.3,2.4-2.838t2.4-3.173q1.158-1.632,2.155-3.285A32.925,32.925,0,0,0,23.481,10ZM18.781,22.608h4.77V15.621q-.488.907-1.06,1.834t-1.2,1.827q-.628.9-1.269,1.743T18.781,22.608Z" style="fill:#1e88e5"/>',
"Tcl": '<path d="M21.942,2.876c.04,2.468-.033,4.91-2.169,7.23l-.079.089h.119l.873.013c-1.418,2.95-2.341,5.892-4.38,8.83l-.073.106.126-.023,1.078-.2a5.851,5.851,0,0,1-3.484,3.65c-.39-5.455,2.333-10.27,4.645-15.071l.007-.013-.086-.06c-3.786,4.233-5.491,10.2-6.136,15.127a4.582,4.582,0,0,1-2.145-2.988l.9.377.093.04-.02-.1c-.681-3.028.376-5.2,1.4-8.056l.737.493.086.06,0-.1c-.058-2.32,1.5-4.649,3.577-6.727l.288.77.04.1.056-.1.631-1.051,0-.007A6.1,6.1,0,0,1,21.942,2.876Z" style="fill:#c3b15f"/><path d="M21.948,2.875a6.131,6.131,0,0,0-3.926,2.388l0,.007-.631,1.051-.056.1-.04-.1L17,5.544c-2.072,2.078-3.635,4.407-3.577,6.727l0,.1-.086-.06-.737-.493c-1.025,2.856-2.083,5.029-1.4,8.056l.02.1-.093-.04-.886-.374c0,.018.007.035.01.053a4.533,4.533,0,0,0,2.126,2.932c.05-.381.105-.771.169-1.164-1.543-3.614-.2-6.271.407-8.661l.939.542c-.13-2.238,1.184-4.651,2.893-6.757l.5.873C18.555,4.769,19.56,3.72,21.948,2.875Z" style="fill:#eff1cb;stroke:#eff1cb"/><path d="M22.518,2l-.056.01c-2.082.363-4.121,1.128-5.015,2.959l-.377-.658-.033-.06-.05.05a20.85,20.85,0,0,0-2.939,3.5A5.939,5.939,0,0,0,12.835,11l-.532-.664-.053-.066-.036.076a27.535,27.535,0,0,0-1.693,4.7,6.73,6.73,0,0,0-.159,3.719l-.876-.509-.073-.043-.007.086a5.529,5.529,0,0,0,2.017,4.843l-.972.241-.2.05.2.053a4.258,4.258,0,0,1,1.455.6,1.325,1.325,0,0,1,.516,1.3V28.1l.01.013,1.217,1.745.1.139V25.719a3.466,3.466,0,0,1,.621-1.484A1.639,1.639,0,0,1,15.5,23.7l.182-.023-.165-.076-.641-.3a9.112,9.112,0,0,0,3.693-5.322l.02-.086-.083.023-.793.215a11.669,11.669,0,0,0,2.089-3.5C20.512,13,21.18,11.166,21.728,9.7l.03-.079-.083.007-.612.043a6.655,6.655,0,0,0,1.382-3.527,17.039,17.039,0,0,0,.079-4.086Zm-.575.876c.04,2.468-.033,4.91-2.169,7.23l-.079.089h.119l.873.013c-1.418,2.95-2.341,5.892-4.38,8.83l-.073.106.126-.023,1.078-.2a5.851,5.851,0,0,1-3.484,3.65c-.39-5.455,2.333-10.27,4.645-15.071l.007-.013-.086-.06c-3.786,4.233-5.491,10.2-6.136,15.127a4.582,4.582,0,0,1-2.145-2.988l.9.377.093.04-.02-.1c-.681-3.028.376-5.2,1.4-8.056l.737.493.086.06,0-.1c-.058-2.32,1.5-4.649,3.577-6.727l.288.77.04.1.056-.1.631-1.051,0-.007A6.1,6.1,0,0,1,21.942,2.876Z"/>',
"Template Toolkit 2": '<path d="M8.907,23.021H8.878a3.305,3.305,0,0,1-2.011-.661A2.561,2.561,0,0,1,5.83,20.334V16.1H4.288a3.05,3.05,0,0,1-2.738-1.69,3.3,3.3,0,0,1,.441-3.53,2.265,2.265,0,0,1,1.815-.9h9.65a3.05,3.05,0,0,1,2.738,1.69,3.3,3.3,0,0,1-.441,3.53,2.265,2.265,0,0,1-1.815.9H11.955v4.231a2.561,2.561,0,0,1-1.037,2.026A3.305,3.305,0,0,1,8.907,23.021ZM4.264,11.636a1.39,1.39,0,0,0-1.388,1.388v.033a1.39,1.39,0,0,0,1.388,1.388H7.487v5.881c0,.572.624,1.037,1.39,1.037h.029c.767,0,1.39-.465,1.39-1.037V14.446h3.223a1.39,1.39,0,0,0,1.388-1.388v-.033a1.39,1.39,0,0,0-1.388-1.388Z" style="fill:#015d9a"/><path d="M14.981,12.953v.033a1.533,1.533,0,0,1-1.533,1.533H10.37v5.737a1.393,1.393,0,0,1-1.535,1.181H8.806a1.393,1.393,0,0,1-1.535-1.181V14.518H4.192A1.533,1.533,0,0,1,2.66,12.986v-.033A1.533,1.533,0,0,1,4.192,11.42h9.257A1.533,1.533,0,0,1,14.981,12.953Zm-4.223,9.222a2.418,2.418,0,0,0,.98-1.912V15.888h2.127a2.114,2.114,0,0,0,1.7-.846,2.992,2.992,0,0,0-2.18-4.99H3.735a2.114,2.114,0,0,0-1.7.846,2.992,2.992,0,0,0,2.18,4.99H5.9v4.375a2.418,2.418,0,0,0,.98,1.912,3.16,3.16,0,0,0,1.923.631h.029A3.16,3.16,0,0,0,10.758,22.174Z" style="fill:#3bcefc"/><path d="M23.607,23.021h-.029a3.305,3.305,0,0,1-2.011-.661,2.561,2.561,0,0,1-1.037-2.026V16.1H18.988a3.05,3.05,0,0,1-2.738-1.69,3.3,3.3,0,0,1,.441-3.53,2.265,2.265,0,0,1,1.815-.9h9.65a3.05,3.05,0,0,1,2.738,1.69,3.3,3.3,0,0,1-.441,3.53,2.265,2.265,0,0,1-1.815.9H26.655v4.231a2.561,2.561,0,0,1-1.037,2.026A3.305,3.305,0,0,1,23.607,23.021ZM18.964,11.636a1.39,1.39,0,0,0-1.388,1.388v.033a1.39,1.39,0,0,0,1.388,1.388h3.223v5.881c0,.572.624,1.037,1.39,1.037h.029c.767,0,1.39-.465,1.39-1.037V14.446h3.223a1.39,1.39,0,0,0,1.388-1.388v-.033a1.39,1.39,0,0,0-1.388-1.388Z" style="fill:#015d9a"/><path d="M29.681,12.953v.033a1.533,1.533,0,0,1-1.533,1.533H25.07v5.737a1.393,1.393,0,0,1-1.535,1.181h-.029a1.393,1.393,0,0,1-1.535-1.181V14.518H18.892a1.533,1.533,0,0,1-1.533-1.533v-.033a1.533,1.533,0,0,1,1.533-1.533h9.257A1.533,1.533,0,0,1,29.681,12.953Zm-4.223,9.222a2.418,2.418,0,0,0,.98-1.912V15.888h2.127a2.114,2.114,0,0,0,1.7-.846,2.992,2.992,0,0,0-2.18-4.99h-9.65a2.114,2.114,0,0,0-1.7.846,2.992,2.992,0,0,0,2.18,4.99H20.6v4.375a2.418,2.418,0,0,0,.98,1.912,3.16,3.16,0,0,0,1.923.631h.029A3.16,3.16,0,0,0,25.458,22.174Z" style="fill:#3bcefc"/>',
"TeX": '<path d="M11.333,13.122c-.128-1.562-.241-2.756-2.287-2.756H7.91v8.4h2.145v.611l-3.083-.029-3.082.029v-.611H6.034v-8.4H4.884c-2.046,0-2.159,1.208-2.287,2.756H2l.284-3.367h9.362l.284,3.367h-.6Z" style="fill:#cfcfcf"/><path d="M19.289,22.53H10.41V21.92h1.506V13.467H10.41v-.611h8.637l.412,3.367h-.6c-.213-1.833-.682-2.756-2.855-2.756H13.791V17.2h.838c1.364,0,1.505-.6,1.505-1.662h.6v3.935h-.6c0-1.08-.142-1.662-1.505-1.662h-.838v4.106h2.216c2.472,0,3-1.108,3.3-3.225h.6Z" style="fill:#cfcfcf"/><path d="M27.727,19.186c-.54,0-1.96,0-2.415.029V18.6h1.179l-2.557-3.552-2.529,3.381A4.1,4.1,0,0,0,22.7,18.6v.611c-.355-.029-1.576-.029-2.017-.029-.4,0-1.548,0-1.875.029V18.6h.383a7.459,7.459,0,0,0,.824-.043c.5-.043.54-.085.667-.256L23.536,14.5l-3.153-4.418H19V9.47c.384.028,1.79.028,2.273.028.582,0,1.918,0,2.429-.028v.611H22.528l2.117,2.955,2.074-2.784a4.1,4.1,0,0,0-1.293-.17V9.47c.356.028,1.591.028,2.032.028.4,0,1.534,0,1.861-.028v.611h-.369a5.264,5.264,0,0,0-.838.043c-.469.043-.526.071-.667.256l-2.4,3.21L28.636,18.6H30v.611C29.645,19.186,28.182,19.186,27.727,19.186Z" style="fill:#cfcfcf"/>',
"Textile": '<path d="M28.681,26.075H3.319A1.317,1.317,0,0,1,2,24.756V7.244A1.317,1.317,0,0,1,3.319,5.925H28.681A1.317,1.317,0,0,1,30,7.244V24.76A1.316,1.316,0,0,1,28.681,26.075Z" style="fill:#ffe7ac"/><path d="M6.066,12.848a4.987,4.987,0,0,1,1.508-.659V10.664a3.7,3.7,0,0,1,.743-.33,7.869,7.869,0,0,1,1.327-.347h.642v2.391h2.484V13.6H10.286v4.848a3.172,3.172,0,0,0,.29,1.609,1.07,1.07,0,0,0,.971.448,7.127,7.127,0,0,0,.76-.048,3.338,3.338,0,0,0,.782-.18l.132.62a2.388,2.388,0,0,1-.5.356,5.457,5.457,0,0,1-.752.356,5.837,5.837,0,0,1-.923.281A4.769,4.769,0,0,1,10,22a2.385,2.385,0,0,1-1.824-.637,2.947,2.947,0,0,1-.6-2.062V13.591H6.066Z"/><path d="M14.607,20.453a1.447,1.447,0,0,1,.431-1.09,1.591,1.591,0,0,1,1.147-.413,1.649,1.649,0,0,1,1.165.413,1.422,1.422,0,0,1,.453,1.09,1.369,1.369,0,0,1-.453,1.081,1.692,1.692,0,0,1-1.165.4,1.61,1.61,0,0,1-1.147-.4A1.427,1.427,0,0,1,14.607,20.453Z"/>',
"TOML": '<path d="M22.76,6.83v3.25h-5V25.17H14.26V10.08h-5V6.83Z" style="fill:#7f7f7f"/><path d="M2,2H8.2V5.09H5.34v21.8H8.2V30H2Z" style="fill:#bfbfbf"/><path d="M30,30H23.8V26.91h2.86V5.11H23.8V2H30Z" style="fill:#bfbfbf"/>',
"TSConfig": '<path d="M23.827,8.243A4.424,4.424,0,0,1,26.05,9.524a5.853,5.853,0,0,1,.852,1.143c.011.045-1.534,1.083-2.471,1.662-.034.023-.169-.124-.322-.35a2.014,2.014,0,0,0-1.67-1c-1.077-.074-1.771.49-1.766,1.433a1.3,1.3,0,0,0,.153.666c.237.49.677.784,2.059,1.383,2.544,1.1,3.636,1.817,4.31,2.843a5.158,5.158,0,0,1,.416,4.333,4.764,4.764,0,0,1-3.932,2.815,10.9,10.9,0,0,1-2.708-.028,6.531,6.531,0,0,1-3.616-1.884,6.278,6.278,0,0,1-.926-1.371,2.655,2.655,0,0,1,.327-.208c.158-.09.756-.434,1.32-.761l1.024-.6.214.312a4.771,4.771,0,0,0,1.35,1.292,3.3,3.3,0,0,0,3.458-.175,1.545,1.545,0,0,0,.2-1.974c-.276-.4-.84-.727-2.443-1.422a8.8,8.8,0,0,1-3.349-2.055,4.687,4.687,0,0,1-.976-1.777,7.116,7.116,0,0,1-.062-2.268,4.332,4.332,0,0,1,3.644-3.374A9,9,0,0,1,23.827,8.243ZM15.484,9.726l.011,1.454h-4.63V24.328H7.6V11.183H2.97V9.755a13.986,13.986,0,0,1,.04-1.466c.017-.023,2.832-.034,6.245-.028l6.211.017Z" style="fill:#007acc"/><path d="M27.075,25.107l.363-.361c1.68.055,1.706,0,1.78-.177l.462-1.124.034-.107-.038-.093c-.02-.049-.081-.2-1.13-1.2v-.526c1.211-1.166,1.185-1.226,1.116-1.4l-.46-1.136c-.069-.17-.1-.237-1.763-.191l-.364-.367a8.138,8.138,0,0,0-.057-1.657l-.047-.106-1.2-.525c-.177-.081-.239-.11-1.372,1.124l-.509-.008c-1.167-1.245-1.222-1.223-1.4-1.152l-1.115.452c-.175.071-.236.1-.169,1.79l-.36.359c-1.68-.055-1.7,0-1.778.177L18.606,20l-.036.108.038.094c.02.048.078.194,1.13,1.2v.525c-1.211,1.166-1.184,1.226-1.115,1.4l.459,1.137c.07.174.1.236,1.763.192l.363.377a8.169,8.169,0,0,0,.055,1.654l.047.107,1.208.528c.176.073.236.1,1.366-1.13l.509.006c1.168,1.247,1.228,1.223,1.4,1.154l1.113-.45C27.082,26.827,27.143,26.8,27.075,25.107Zm-4.788-2.632a2,2,0,1,1,2.618,1.14A2.023,2.023,0,0,1,22.287,22.475Z" style="fill:#99b8c4"/>',
"Twig": '<path d="M4.574,5.463c.262.4,2.5-1.608,4.454-1.161,2.061.472,4.014,3.724,4.848,13.7a40.18,40.18,0,0,1,3.541,3.61q.53.614,1.013,1.22a11.847,11.847,0,0,1,.229-1.4,12.3,12.3,0,0,1,1.981-4.4A19.151,19.151,0,0,0,17.272,7.9c-1.03-1.445-4.6-6.478-8.546-5.843C6.182,2.465,4.3,5.054,4.574,5.463Z" style="fill:#63bf6a"/><path d="M24.4,30c-.32-2.567-.448-4.76-.5-6.449-.094-3.232.1-4.541.9-5.756.193-.295,1.288-1.975,2.58-1.863,1.466.128,2.213,2.414,2.362,2.337.175-.09-.36-3.543-2.532-4.431-2.6-1.063-6.312,2.07-7.8,5.154a12.223,12.223,0,0,0-.857,2.81,32.555,32.555,0,0,0-.71,8.2Z" style="fill:#74d74d"/><path d="M2.238,13.935c.145-.447,2.468-.259,4.54.293,2.5.666,7,2.344,11.651,8.606A12.544,12.544,0,0,1,20.279,30H10.386a21.875,21.875,0,0,0-.175-4.62,14.9,14.9,0,0,0-2.459-7.158C5.441,15.159,2.055,14.5,2.238,13.935Z" style="fill:#78dc50"/><path d="M17.3,21.323a1.753,1.753,0,1,1-.513-1.24A1.748,1.748,0,0,1,17.3,21.323Z" style="fill:#fff"/><path d="M21.975,21.323a1.753,1.753,0,1,1-.513-1.24A1.748,1.748,0,0,1,21.975,21.323Z" style="fill:#fff"/>',
"TypeScript": '<rect x="2" y="2" width="28" height="28" rx="1.312" style="fill:#3178c6"/><path d="M18.245,23.759v3.068a6.492,6.492,0,0,0,1.764.575,11.56,11.56,0,0,0,2.146.192,9.968,9.968,0,0,0,2.088-.211,5.11,5.11,0,0,0,1.735-.7,3.542,3.542,0,0,0,1.181-1.266,4.469,4.469,0,0,0,.186-3.394,3.409,3.409,0,0,0-.717-1.117,5.236,5.236,0,0,0-1.123-.877,12.027,12.027,0,0,0-1.477-.734q-.6-.249-1.08-.484a5.5,5.5,0,0,1-.813-.479,2.089,2.089,0,0,1-.516-.518,1.091,1.091,0,0,1-.181-.618,1.039,1.039,0,0,1,.162-.571,1.4,1.4,0,0,1,.459-.436,2.439,2.439,0,0,1,.726-.283,4.211,4.211,0,0,1,.956-.1,5.942,5.942,0,0,1,.808.058,6.292,6.292,0,0,1,.856.177,5.994,5.994,0,0,1,.836.3,4.657,4.657,0,0,1,.751.422V13.9a7.509,7.509,0,0,0-1.525-.4,12.426,12.426,0,0,0-1.9-.129,8.767,8.767,0,0,0-2.064.235,5.239,5.239,0,0,0-1.716.733,3.655,3.655,0,0,0-1.171,1.271,3.731,3.731,0,0,0-.431,1.845,3.588,3.588,0,0,0,.789,2.34,6,6,0,0,0,2.395,1.639q.63.26,1.175.509a6.458,6.458,0,0,1,.942.517,2.463,2.463,0,0,1,.626.585,1.2,1.2,0,0,1,.23.719,1.1,1.1,0,0,1-.144.552,1.269,1.269,0,0,1-.435.441,2.381,2.381,0,0,1-.726.292,4.377,4.377,0,0,1-1.018.105,5.773,5.773,0,0,1-1.969-.35A5.874,5.874,0,0,1,18.245,23.759Zm-5.154-7.638h4V13.594H5.938v2.527H9.92V27.375h3.171Z" style="fill:#fff;fill-rule:evenodd"/>',
"TypoScript": '<path d="M23.093,21.3a3.847,3.847,0,0,1-1.18.165c-3.555,0-8.778-12.424-8.778-16.559,0-1.523.362-2.031.87-2.466C9.653,2.943,4.43,4.539,2.761,6.57a4.048,4.048,0,0,0-.58,2.321C2.181,15.348,9.072,30,13.933,30c2.248,0,6.041-3.7,9.16-8.7" style="fill:#ff8700"/><path d="M20.823,2c4.5,0,9,.725,9,3.264,0,5.151-3.264,11.389-4.933,11.389-2.974,0-6.673-8.269-6.673-12.4,0-1.886.725-2.249,2.611-2.249" style="fill:#ff8700"/>',
"V": '<path d="M20.467,29.288,29.952,2.913a.5.5,0,0,0-.566-.728L21.927,2.9a1.464,1.464,0,0,0-1.141.9L12.007,29.006a.573.573,0,0,0,.578.813h7.26a.657.657,0,0,0,.577-.4Z" style="fill:#536b8a"/><path d="M2.614,2.185l7.459.719a1.466,1.466,0,0,1,1.142.9L20.18,29.413a.286.286,0,0,1-.289.406H12.585a1.311,1.311,0,0,1-1.152-.81L2.048,2.913A.5.5,0,0,1,2.614,2.185Z" style="fill:#5d87bf"/>',
"Vala": '<path d="M12.509,17.193c-.165-6.836-.325-12.455-.357-12.487A7.916,7.916,0,0,0,9.879,5.874,7.606,7.606,0,0,0,7.324,9.188a8.422,8.422,0,0,0-.587,3.543,4.665,4.665,0,0,0,.2,1.962,3.417,3.417,0,0,1,.182.56c-.012.009-.338-.018-.724-.061-1.868-.207-2.786-1.05-3-2.757A6.312,6.312,0,0,1,4.85,7.719a15.134,15.134,0,0,1,8.414-5.163,12.891,12.891,0,0,1,2.542-.235l1.748-.05.059,2.506c.032,1.378.1,6.358.161,11.067s-.252,8.29-.219,8.4C19.5,17.879,22,13.073,24.367,6.253l1.427-3.983H28.54c-.022.063-2.751,6.5-5.514,13.916l-5.473,13.55H12.976C12.976,27.906,12.535,18.486,12.509,17.193Z" style="fill:#403757"/><path d="M17.732,30H12.713v-.263c0-1.137-.17-5.192-.307-8.452-.081-1.929-.15-3.6-.161-4.087-.156-6.479-.286-11-.336-12.163a11.674,11.674,0,0,0-1.874,1.049,7.348,7.348,0,0,0-2.466,3.2A8.146,8.146,0,0,0,7,12.731,4.37,4.37,0,0,0,7.185,14.6c.215.569.273.723.1.859-.093.073-.107.084-.916-.007-1.976-.219-3-1.167-3.234-2.986A6.568,6.568,0,0,1,4.64,7.561,15.439,15.439,0,0,1,13.2,2.3,13.176,13.176,0,0,1,15.8,2.058L17.811,2l.065,2.77c.032,1.392.106,6.461.161,11.07.031,2.616-.052,4.915-.124,6.43.931-2.763,1.958-5.27,3.033-7.9,1.043-2.547,2.122-5.18,3.173-8.207l1.491-4.16h3.3l-.125.351c0,.007-.031.076-.084.2-1.1,2.622-3.259,7.889-5.43,13.717Zm-4.495-.526h4.14l5.407-13.386c2.124-5.7,4.243-10.876,5.362-13.555H25.979L24.614,6.342c-1.055,3.038-2.137,5.678-3.183,8.231-1.311,3.2-2.55,6.226-3.626,9.747l-.255.831-.248-.833a3.274,3.274,0,0,1,.021-.839c.074-1.35.229-4.158.188-7.633-.055-4.607-.129-9.674-.161-11.064L17.3,2.541l-1.484.043a12.729,12.729,0,0,0-2.49.228A14.887,14.887,0,0,0,5.06,7.877a6.071,6.071,0,0,0-1.4,4.524c.2,1.58,1.028,2.336,2.77,2.529l.333.035c-.019-.054-.041-.114-.066-.179a4.893,4.893,0,0,1-.219-2.055,8.7,8.7,0,0,1,.6-3.638,7.883,7.883,0,0,1,2.644-3.43c.022-.016,2.232-1.525,2.615-1.142.092.092.131.131.433,12.666h0c.01.485.08,2.149.16,4.076C13.06,24.313,13.217,28.06,13.237,29.474Z" style="fill:#c8c8c8"/>',
"VB.Net": '<path d="M6.67,7.836,9,18.915,11.336,7.836H16L11.336,24.164H6.672L2,7.836Z" style="fill:#00519a"/><path d="M18.331,7.836h7.6a4.08,4.08,0,0,1,2.9,1.749,3.78,3.78,0,0,1,.571,2.04,3.985,3.985,0,0,1-.571,2.034,4.108,4.108,0,0,1-2.341,1.763,4.1,4.1,0,0,1,2.929,1.756,3.8,3.8,0,0,1,.58,2.1,4.663,4.663,0,0,1-.579,2.546,5.047,5.047,0,0,1-3.5,2.338H18.331ZM23,14.252h1.166a1.754,1.754,0,0,0,0-3.5H23Zm0,7H24.39a2.047,2.047,0,0,0,0-4.089H23Z" style="fill:#00519a"/>',
"VBA": '<polygon points="10.457 11.092 16.014 13.839 16.014 18.307 10.457 15.382 10.457 11.092" style="fill:#6483c0"/><path d="M16.2,18.613l-5.926-3.12V10.8L16.2,13.724ZM10.642,15.27,15.83,18V13.953l-5.188-2.564Z"/><polygon points="16.371 13.839 16.371 18.307 21.315 15.814 21.315 11.354 16.371 13.839" style="fill:#6483c0"/><path d="M16.186,18.607V13.725l5.313-2.67v4.873Zm.369-4.655v4.055L21.13,15.7V11.653Z"/><polygon points="10.703 10.797 16.186 13.58 21.082 11.064 15.777 8.389 10.703 10.797" style="fill:#6483c0"/><path d="M16.187,13.788l-5.9-3,5.5-2.608,5.709,2.879ZM11.122,10.8l5.064,2.57,4.49-2.308-4.9-2.471Z"/><polygon points="18.957 15.829 24.515 18.575 24.515 23.043 18.957 20.118 18.957 15.829" style="fill:#952781"/><path d="M24.7,23.349l-5.926-3.12v-4.7L24.7,18.46Zm-5.557-3.343,5.188,2.731V18.689l-5.188-2.564Z"/><polygon points="24.871 18.575 24.871 23.043 29.815 20.55 29.815 16.09 24.871 18.575" style="fill:#952781"/><path d="M24.687,23.343V18.461L30,15.791v4.873Zm.369-4.655v4.055l4.575-2.308V16.389Z"/><polygon points="19.203 15.546 24.687 18.329 29.583 15.812 24.364 13.346 19.203 15.546" style="fill:#952781"/><path d="M24.687,18.536l-5.92-3.005,5.6-2.387L30,15.805ZM19.64,15.56l5.046,2.561,4.479-2.3-4.806-2.27Z"/><polygon points="2.19 15.496 7.748 18.243 7.748 22.711 2.19 19.786 2.19 15.496" style="fill:#d87b30"/><path d="M7.932,23.017,2.006,19.9V15.2l5.926,2.929ZM2.375,19.674l5.188,2.731V18.357L2.375,15.793Z"/><polygon points="8.104 18.243 8.104 22.711 13.048 20.218 13.048 15.758 8.104 18.243" style="fill:#d87b30"/><path d="M7.92,23.011V18.129l5.313-2.67v4.873Zm.369-4.655v4.055L12.864,20.1V16.057Z"/><polygon points="2.436 15.213 7.92 17.997 12.816 15.48 7.597 13.014 2.436 15.213" style="fill:#d87b30"/><path d="M7.92,18.2,2,15.2l5.6-2.387,5.632,2.661ZM2.873,15.228l5.046,2.561,4.479-2.3-4.806-2.27Z"/><polygon points="10.875 16.296 16.432 19.042 16.432 23.511 10.875 20.585 10.875 16.296" style="fill:#e0d400"/><path d="M16.617,23.816,10.691,20.7V16l5.926,2.929ZM11.06,20.474l5.188,2.731V19.157L11.06,16.593Z"/><polygon points="16.789 19.042 16.789 23.511 21.733 21.017 21.733 16.557 16.789 19.042" style="fill:#e0d400"/><path d="M16.6,23.811V18.929l5.313-2.67v4.873Zm.369-4.655v4.055L21.549,20.9V16.857Z"/><polygon points="11.121 16.001 16.605 18.784 21.501 16.267 16.196 13.593 11.121 16.001" style="fill:#e0d400"/><path d="M16.605,18.991l-5.9-3,5.5-2.608,5.709,2.879ZM11.54,16.006l5.064,2.57,4.49-2.308-4.9-2.471Z"/>',
"Velocity": '<path d="M16.245,24.187A8.352,8.352,0,1,1,24.6,15.835,8.362,8.362,0,0,1,16.245,24.187Zm0-14.762a6.41,6.41,0,1,0,6.41,6.41A6.417,6.417,0,0,0,16.245,9.425Z"/><polygon points="29.132 8.551 25.451 6.531 25.451 7.474 15.821 7.474 15.821 9.424 25.451 9.424 25.451 10.571 29.132 8.551" style="fill:#262692"/><polygon points="8.984 2 6.964 5.687 7.906 5.687 7.906 15.328 9.857 15.328 9.857 5.687 11.004 5.687 8.984 2" style="fill:#262693"/><polygon points="23.705 30 21.685 26.243 22.628 26.243 22.628 16.417 24.578 16.417 24.578 26.243 25.725 26.243 23.705 30" style="fill:#262693"/><polygon points="2.868 23.32 6.634 21.3 6.634 22.242 16.484 22.242 16.484 24.192 6.634 24.192 6.634 25.34 2.868 23.32" style="fill:#262692"/>',
"Verilog": '<path d="M29.007,17.4h.037a1.449,1.449,0,0,0,.938-.316,1.473,1.473,0,0,0,.519-1.031V15.9a1.413,1.413,0,0,0-1.376-1.3h-.009c-.687,0-1.374,0-2.062,0H25.5V11.956l3.513,0h.034A1.411,1.411,0,0,0,30.5,10.6l0-.09,0-.032a1.412,1.412,0,0,0-.646-1.1,1.455,1.455,0,0,0-.835-.225H25.456a2.96,2.96,0,0,0-.278-1.034,2.909,2.909,0,0,0-1.7-1.461,2.684,2.684,0,0,0-.629-.13V4.947c0-.69,0-1.38,0-2.063A1.414,1.414,0,0,0,21.481,1.5h-.116a1.4,1.4,0,0,0-1.319,1.388q0,1.154,0,2.306V6.5H17.4V4.981c0-.7,0-1.4,0-2.087A1.41,1.41,0,0,0,16.053,1.5H15.9a1.408,1.408,0,0,0-1.3,1.383c0,.688,0,1.376,0,2.064V6.508q-1.319,0-2.639,0V4.888c0-.666,0-1.332,0-1.989a1.366,1.366,0,0,0-.4-.975,1.4,1.4,0,0,0-.984-.424H10.5A1.41,1.41,0,0,0,9.159,2.881c0,.683,0,1.366,0,2.049v1.6a2.933,2.933,0,0,0-2.466,1.9,2.878,2.878,0,0,0-.161.726H4.957c-.693,0-1.386,0-2.073,0H2.876A1.413,1.413,0,0,0,1.5,10.5v.095a1.417,1.417,0,0,0,.575,1.091,1.463,1.463,0,0,0,.887.273h.017l3.522,0V14.6H4.948c-.686,0-1.375,0-2.057,0A1.428,1.428,0,0,0,1.5,15.913V16.1a1.4,1.4,0,0,0,1.386,1.3c.711,0,1.423,0,2.135,0H6.5V20.05l-.292,0c-.613-.007-1.226,0-1.838,0H3.087a1.633,1.633,0,0,0-.918.211A1.437,1.437,0,0,0,1.5,21.4V21.5a1.417,1.417,0,0,0,1.375,1.337h.005q.645,0,1.29,0H6.546a2.832,2.832,0,0,0,1.978,2.5,2.712,2.712,0,0,0,.631.128v1.62c0,.678,0,1.354,0,2.025a1.4,1.4,0,1,0,2.8-.092l0-3.527H14.6v3.516A1.414,1.414,0,0,0,15.947,30.5H16.1a1.411,1.411,0,0,0,1.3-1.385q.006-1.066,0-2.131V25.5h2.644V29.1A1.423,1.423,0,0,0,21.4,30.5h.119a1.408,1.408,0,0,0,1.16-.741,1.643,1.643,0,0,0,.167-.833V25.474a2.671,2.671,0,0,0,.62-.128,2.928,2.928,0,0,0,1.886-1.888,2.834,2.834,0,0,0,.123-.613h1.581c.687,0,1.375,0,2.057,0h.008A1.422,1.422,0,0,0,30.5,21.481v-.118a1.409,1.409,0,0,0-1.382-1.318h0c-.718,0-1.436,0-2.154,0H25.5V17.4Z" style="fill:#c5c5c5;opacity:0.3"/><path d="M10.515,2h.056a.91.91,0,0,1,.886.893c.006,1.108,0,2.216,0,3.324-.6,0-1.2,0-1.8,0,0-1.111,0-2.222,0-3.333A.907.907,0,0,1,10.515,2Z" style="fill:#1a348f"/><path d="M15.937,2h.116a.912.912,0,0,1,.846.889c.006,1.109,0,2.219,0,3.329H15.1c0-1.11,0-2.22,0-3.33A.911.911,0,0,1,15.937,2Z" style="fill:#1a348f"/><path d="M21.392,2h.089a.907.907,0,0,1,.859.881c.007,1.112,0,2.225,0,3.337h-1.8c0-1.109,0-2.217,0-3.326A.912.912,0,0,1,21.392,2Z" style="fill:#1a348f"/><path d="M2,10.518a.908.908,0,0,1,.882-.859c1.112-.007,2.223,0,3.334,0q0,.9,0,1.8c-1.079,0-2.158,0-3.237,0a.983.983,0,0,1-.6-.173A.924.924,0,0,1,2,10.571Z" style="fill:#1a348f"/><path d="M25.786,9.655h3.233a1,1,0,0,1,.561.143.924.924,0,0,1,.42.716v.058a.933.933,0,0,1-.3.651.957.957,0,0,1-.677.234c-1.079,0-2.158,0-3.237,0Q25.786,10.556,25.786,9.655Z" style="fill:#1a348f"/><path d="M2,15.944a.913.913,0,0,1,.888-.842c1.109-.007,2.219,0,3.328,0q0,.9,0,1.8c-1.109,0-2.217,0-3.326,0A.915.915,0,0,1,2,16.063Z" style="fill:#1a348f"/><path d="M25.786,15.1c1.109,0,2.218,0,3.326,0a.914.914,0,0,1,.889.835v.117a.946.946,0,0,1-.331.641.973.973,0,0,1-.651.207H25.786Q25.785,16,25.786,15.1Z" style="fill:#1a348f"/><path d="M2.433,20.678a1.121,1.121,0,0,1,.643-.136c1.043.006,2.086-.006,3.129.006.028.6,0,1.2.012,1.8-1.11,0-2.221,0-3.331,0A.911.911,0,0,1,2,21.483V21.4A.925.925,0,0,1,2.433,20.678Z" style="fill:#1a348f"/><path d="M25.786,20.543c1.108,0,2.216,0,3.324,0a.914.914,0,0,1,.89.847v.09a.911.911,0,0,1-.888.859c-1.109.007-2.218,0-3.326,0C25.786,21.743,25.785,21.143,25.786,20.543Z" style="fill:#1a348f"/><path d="M9.656,25.781h1.8c0,1.081,0,2.162,0,3.243a.957.957,0,0,1-.235.677.931.931,0,0,1-.653.3h-.052a.907.907,0,0,1-.86-.882C9.651,28.006,9.658,26.894,9.656,25.781Z" style="fill:#1a348f"/><path d="M15.1,25.781h1.8c0,1.11,0,2.22,0,3.33a.914.914,0,0,1-.836.889h-.116a.94.94,0,0,1-.619-.306.962.962,0,0,1-.228-.673Q15.1,27.4,15.1,25.781Z" style="fill:#1a348f"/><path d="M20.547,29.106c0-1.108,0-2.217,0-3.325h1.8c0,1.048,0,2.1,0,3.144a1.178,1.178,0,0,1-.105.59.92.92,0,0,1-.756.484H21.4A.911.911,0,0,1,20.547,29.106Z" style="fill:#1a348f"/><path d="M24.732,8.349A2.429,2.429,0,0,0,23.31,7.131,3.245,3.245,0,0,0,22.254,7c-4.3.008-8.6-.011-12.905.01A2.436,2.436,0,0,0,7.157,8.606,3.611,3.611,0,0,0,7,9.934q0,6.25,0,12.5a2.673,2.673,0,0,0,.268,1.219A2.431,2.431,0,0,0,8.688,24.87,3.756,3.756,0,0,0,9.927,25H22.07a3.762,3.762,0,0,0,1.243-.127A2.429,2.429,0,0,0,24.875,23.3,3.8,3.8,0,0,0,25,22.071q0-6.25,0-12.5A2.686,2.686,0,0,0,24.732,8.349Z" style="fill:#1a348f"/><path d="M7.5,8.307l.084-.2q.968,0,1.935.024h.394q.179,0,.394-.012.776-.036,2.807-.036.406,0,.788.006t.741.018a.234.234,0,0,1,.108.108l-.024.191q-.072.119-.358.119h-.1a10.3,10.3,0,0,0-1.1.054,2.179,2.179,0,0,0-1,.245.432.432,0,0,0-.155.346,4.05,4.05,0,0,0,.394,1.4l1.818,4.217.634,1.4q.921,2.222,1.819,4.539.1.251.179.454l.8-1.959q.62-1.481,1.252-3.154l.823-2.246q.024-.072.131-.478a17.026,17.026,0,0,0,1.157-4,.561.561,0,0,0-.161-.364,1.165,1.165,0,0,0-.52-.3,7.723,7.723,0,0,0-.932-.143l-.884-.108a.337.337,0,0,1-.108-.2l.036-.1,3.87-.036H23.6a3.1,3.1,0,0,1,.885.084l.012.1a.641.641,0,0,1-.072.251,2.449,2.449,0,0,1-.526.119,3.6,3.6,0,0,0-1.244.281,1.815,1.815,0,0,0-.5.687l-3.134,7.765q-1.466,3.5-2.086,5.423l-.345,1.039a.531.531,0,0,1-.263.1,1.383,1.383,0,0,1-.3-.036q-1.422-3.676-2.318-5.681L10.055,9.92a3.247,3.247,0,0,0-.591-.89,5.463,5.463,0,0,0-1.379-.424,4.347,4.347,0,0,1-.466-.119A.326.326,0,0,1,7.5,8.307Z" style="fill:#c5c2ff"/>',
"VHDL": '<path d="M2,2H30V30H2Zm1.689.067A1.624,1.624,0,0,0,2.063,3.692V28.314A1.625,1.625,0,0,0,3.689,29.94H28.316a1.625,1.625,0,0,0,1.626-1.626V3.692a1.624,1.624,0,0,0-1.626-1.625ZM3.008,28.079a.911.911,0,0,0,.911.912H28.083a.911.911,0,0,0,.911-.912V3.919a.91.91,0,0,0-.911-.911H3.919a.91.91,0,0,0-.911.911Z" style="fill:#0d9b35"/><polygon points="25.52 5.502 18.858 26.491 13.154 26.491 6.492 5.502 10.508 5.502 16.029 22.795 21.504 5.502 25.52 5.502" style="fill:#fff"/>',
"vim": '<defs><clipPath id="a"><polygon points="2 2 30 2 30 30 2 30 2 2 2 2" style="fill:none;clip-rule:evenodd"/></clipPath></defs><title>file_type_vim</title><polygon points="29.989 15.856 15.856 2.011 2.011 16.136 15.856 29.989 29.989 15.856 29.989 15.856" style="fill:#231f20;fill-rule:evenodd"/><g style="clip-path:url(#a)"><polygon points="29.989 15.856 15.856 2.011 2.011 16.136 15.856 29.989 29.989 15.856 29.989 15.856" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/></g><polygon points="28.575 15.856 29.422 15.856 15.856 29.422 15.856 28.575 28.575 15.856 28.575 15.856" style="fill:#29695d;fill-rule:evenodd"/><polygon points="28.575 15.856 29.422 15.856 15.856 29.422 15.856 28.575 28.575 15.856 28.575 15.856" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="2.578 16.136 3.425 16.136 15.856 28.575 15.856 29.422 2.578 16.136 2.578 16.136" style="fill:#317367;fill-rule:evenodd"/><polygon points="2.578 16.136 3.425 16.136 15.856 28.575 15.856 29.422 2.578 16.136 2.578 16.136" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="15.856 3.418 15.856 2.578 2.578 16.136 3.425 16.136 15.856 3.418 15.856 3.418" style="fill:#60c2ac;fill-rule:evenodd"/><polygon points="15.856 3.418 15.856 2.578 2.578 16.136 3.425 16.136 15.856 3.418 15.856 3.418" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="15.856 2.578 15.856 3.418 28.575 15.856 29.422 15.856 15.856 2.578 15.856 2.578" style="fill:#43b54a;fill-rule:evenodd"/><polygon points="15.856 2.578 15.856 3.418 28.575 15.856 29.422 15.856 15.856 2.578 15.856 2.578" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="15.856 28.575 28.575 15.856 15.856 3.418 3.425 16.136 15.856 28.575 15.856 28.575" style="fill:#3c8376;fill-rule:evenodd"/><polygon points="15.856 28.575 28.575 15.856 15.856 3.418 3.425 16.136 15.856 28.575 15.856 28.575" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="18.498 6.246 19.345 7.1 13.502 13.028 13.502 7.1 14.069 7.1 14.916 6.246 14.916 3.992 14.069 3.138 4.652 3.138 3.805 3.992 3.805 6.246 4.652 7.1 5.312 7.1 5.312 26.314 6.346 27.161 9.267 27.161 29.516 6.246 29.516 3.992 28.669 3.138 19.438 3.138 18.498 3.992 18.498 6.246 18.498 6.246" style="fill:#231f20;fill-rule:evenodd"/><polygon points="18.498 6.246 19.345 7.1 13.502 13.028 13.502 7.1 14.069 7.1 14.916 6.246 14.916 3.992 14.069 3.138 4.652 3.138 3.805 3.992 3.805 6.246 4.652 7.1 5.312 7.1 5.312 26.314 6.346 27.161 9.267 27.161 29.516 6.246 29.516 3.992 28.669 3.138 19.438 3.138 18.498 3.992 18.498 6.246 18.498 6.246" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="4.932 6.533 4.365 5.966 4.365 4.272 4.932 3.705 13.789 3.698 14.349 4.272 13.789 4.544 13.502 4.272 4.932 5.679 4.932 6.533 4.932 6.533" style="fill:#fff;fill-rule:evenodd"/><polygon points="4.932 6.533 4.365 5.966 4.365 4.272 4.932 3.705 13.789 3.698 14.349 4.272 13.789 4.544 13.502 4.272 4.932 5.679 4.932 6.533 4.932 6.533" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="6.626 26.594 5.966 26.027 5.966 6.526 6.626 5.966 6.626 26.594 6.626 26.594" style="fill:#fff;fill-rule:evenodd"/><polygon points="6.626 26.594 5.966 26.027 5.966 6.526 6.626 5.966 6.626 26.594 6.626 26.594" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="20.759 6.533 21.326 5.966 21.326 7.1 11.902 16.703 12.942 14.442 20.759 6.533 20.759 6.533" style="fill:#fff;fill-rule:evenodd"/><polygon points="20.759 6.533 21.326 5.966 21.326 7.1 11.902 16.703 12.942 14.442 20.759 6.533 20.759 6.533" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="6.82 5.686 6.626 5.966 5.966 6.533 4.932 6.533 4.932 5.399 6.82 5.686 6.82 5.686" style="fill:#929497;fill-rule:evenodd"/><polygon points="6.82 5.686 6.626 5.966 5.966 6.533 4.932 6.533 4.932 5.399 6.82 5.686 6.82 5.686" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="12.942 6.533 12.942 14.442 11.902 16.696 11.902 5.958 13.502 5.958 13.789 5.678 13.502 4.272 14.349 4.272 14.349 5.966 13.789 6.533 12.942 6.533 12.942 6.533" style="fill:#929497;fill-rule:evenodd"/><polygon points="12.942 6.533 12.942 14.442 11.902 16.696 11.902 5.958 13.502 5.958 13.789 5.678 13.502 4.272 14.349 4.272 14.349 5.966 13.789 6.533 12.942 6.533 12.942 6.533" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="19.625 6.533 19.065 5.966 19.065 4.272 19.718 3.705 28.295 3.705 28.956 4.272 28.008 5.119 19.625 5.679 19.625 6.533 19.625 6.533" style="fill:#fff;fill-rule:evenodd"/><polygon points="19.625 6.533 19.065 5.966 19.065 4.272 19.718 3.705 28.295 3.705 28.956 4.272 28.008 5.119 19.625 5.679 19.625 6.533 19.625 6.533" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="28.956 5.966 9.074 26.594 6.626 26.594 6.626 25.747 8.42 25.747 28.295 5.399 28.008 4.272 28.956 4.272 28.956 5.966 28.956 5.966" style="fill:#929497;fill-rule:evenodd"/><polygon points="28.956 5.966 9.074 26.594 6.626 26.594 6.626 25.747 8.42 25.747 28.295 5.399 28.008 4.272 28.956 4.272 28.956 5.966 28.956 5.966" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="21.512 5.686 21.319 5.966 20.759 6.533 19.625 6.533 19.625 5.399 21.512 5.686 21.512 5.686" style="fill:#929497;fill-rule:evenodd"/><polygon points="21.512 5.686 21.319 5.966 20.759 6.533 19.625 6.533 19.625 5.399 21.512 5.686 21.512 5.686" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="11.902 16.696 11.902 5.958 13.502 5.958 13.789 5.679 13.789 4.544 13.502 4.265 5.212 4.265 4.932 4.544 4.932 5.679 5.212 5.958 6.626 5.958 6.626 25.747 6.992 26.027 8.607 26.027 28.389 5.399 28.389 4.588 28.102 4.265 19.912 4.265 19.625 4.544 19.625 5.686 19.912 5.966 21.326 5.966 21.326 7.1 11.902 16.696 11.902 16.696" style="fill:#d0d2d3;fill-rule:evenodd"/><polygon points="11.902 16.696 11.902 5.958 13.502 5.958 13.789 5.679 13.789 4.544 13.502 4.265 5.212 4.265 4.932 4.544 4.932 5.679 5.212 5.958 6.626 5.958 6.626 25.747 6.992 26.027 8.607 26.027 28.389 5.399 28.389 4.588 28.102 4.265 19.912 4.265 19.625 4.544 19.625 5.686 19.912 5.966 21.326 5.966 21.326 7.1 11.902 16.696 11.902 16.696" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="17.041 16.711 17.701 16.144 19.395 16.144 19.869 16.711 19.302 18.405 18.649 18.972 16.955 18.972 16.474 18.405 17.041 16.711 17.041 16.711" style="fill:#231f20;fill-rule:evenodd"/><polygon points="17.041 16.711 17.701 16.144 19.395 16.144 19.869 16.711 19.302 18.405 18.649 18.972 16.955 18.972 16.474 18.405 17.041 16.711 17.041 16.711" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="17.608 26.034 19.309 20.953 18.742 20.953 19.309 19.251 21.843 19.251 22.41 19.819 22.79 19.819 23.35 19.251 25.238 19.251 25.805 19.819 26.178 19.819 26.745 19.251 28.812 19.251 29.566 20.386 28.331 24.405 28.891 24.405 28.346 26.034 24.951 26.034 26.278 22.079 25.431 22.079 24.649 24.391 25.209 24.391 24.678 26.034 21.283 26.034 22.603 22.079 21.756 22.079 20.967 24.405 21.534 24.405 21.003 26.034 17.608 26.034 17.608 26.034" style="fill:#231f20;fill-rule:evenodd"/><polygon points="17.608 26.034 19.309 20.953 18.742 20.953 19.309 19.251 21.843 19.251 22.41 19.819 22.79 19.819 23.35 19.251 25.238 19.251 25.805 19.819 26.178 19.819 26.745 19.251 28.812 19.251 29.566 20.386 28.331 24.405 28.891 24.405 28.346 26.034 24.951 26.034 26.278 22.079 25.431 22.079 24.649 24.391 25.209 24.391 24.678 26.034 21.283 26.034 22.603 22.079 21.756 22.079 20.967 24.405 21.534 24.405 21.003 26.034 17.608 26.034 17.608 26.034" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="28.554 19.819 28.992 20.443 27.599 24.907 28.159 24.907 27.972 25.467 25.711 25.467 27.032 21.512 25.051 21.512 23.924 24.907 24.484 24.907 24.297 25.467 22.036 25.467 23.357 21.512 21.376 21.512 20.249 24.907 20.816 24.907 20.622 25.467 18.361 25.467 20.063 20.386 19.495 20.386 19.682 19.819 21.756 19.819 22.323 20.386 22.883 20.386 23.45 19.819 25.144 19.819 25.711 20.386 26.278 20.386 26.845 19.819 28.554 19.819 28.554 19.819" style="fill:#d0d2d3;fill-rule:evenodd"/><polygon points="28.554 19.819 28.992 20.443 27.599 24.907 28.159 24.907 27.972 25.467 25.711 25.467 27.032 21.512 25.051 21.512 23.924 24.907 24.484 24.907 24.297 25.467 22.036 25.467 23.357 21.512 21.376 21.512 20.249 24.907 20.816 24.907 20.622 25.467 18.361 25.467 20.063 20.386 19.495 20.386 19.682 19.819 21.756 19.819 22.323 20.386 22.883 20.386 23.45 19.819 25.144 19.819 25.711 20.386 26.278 20.386 26.845 19.819 28.554 19.819 28.554 19.819" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><path d="M19.022,19.251,17.292,24.4h.589l-.56,1.637H13.933l1.694-5.082H15.06l3.962-1.7Zm-3.962,1.7.567-1.7h3.4l-3.962,1.7Z" style="fill:#231f20;fill-rule:evenodd"/><path d="M19.022,19.251,17.292,24.4h.589l-.56,1.637H13.933l1.694-5.082H15.06l3.962-1.7Zm-3.962,1.7.567-1.7h3.4l-3.962,1.7Z" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="16.947 25.467 17.134 24.907 16.567 24.907 18.268 19.819 15.914 19.819 15.72 20.386 16.38 20.386 14.686 25.467 16.947 25.467 16.947 25.467" style="fill:#d0d2d3;fill-rule:evenodd"/><polygon points="16.947 25.467 17.134 24.907 16.567 24.907 18.268 19.819 15.914 19.819 15.72 20.386 16.38 20.386 14.686 25.467 16.947 25.467 16.947 25.467" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="18.828 18.125 19.208 16.991 19.022 16.711 17.888 16.711 17.514 16.991 17.134 18.125 17.328 18.405 18.462 18.405 18.828 18.125 18.828 18.125" style="fill:#d0d2d3;fill-rule:evenodd"/><polygon points="18.828 18.125 19.208 16.991 19.022 16.711 17.888 16.711 17.514 16.991 17.134 18.125 17.328 18.405 18.462 18.405 18.828 18.125 18.828 18.125" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/>',
"Visual Basic": '<path d="M6.67,7.836,9,18.915,11.336,7.836H16L11.336,24.164H6.672L2,7.836Z" style="fill:#00519a"/><path d="M18.331,7.836h7.6a4.08,4.08,0,0,1,2.9,1.749,3.78,3.78,0,0,1,.571,2.04,3.985,3.985,0,0,1-.571,2.034,4.108,4.108,0,0,1-2.341,1.763,4.1,4.1,0,0,1,2.929,1.756,3.8,3.8,0,0,1,.58,2.1,4.663,4.663,0,0,1-.579,2.546,5.047,5.047,0,0,1-3.5,2.338H18.331ZM23,14.252h1.166a1.754,1.754,0,0,0,0-3.5H23Zm0,7H24.39a2.047,2.047,0,0,0,0-4.089H23Z" style="fill:#00519a"/>',
"WebAssembly": '<path d="M19.153,2.35V2.5a3.2,3.2,0,1,1-6.4,0h0V2.35H2V30.269H29.919V2.35Z" style="fill:#654ff0"/><path d="M8.485,17.4h1.85L11.6,24.123h.023L13.14,17.4h1.731l1.371,6.81h.027l1.44-6.81h1.815l-2.358,9.885H15.329l-1.36-6.728h-.036l-1.456,6.728h-1.87Zm13.124,0h2.917l2.9,9.885H25.515l-.63-2.2H21.562l-.486,2.2H19.217Zm1.11,2.437-.807,3.627h2.512L23.5,19.832Z" style="fill:#fff"/>',
"Wolfram language": '<path d="M30,20.55,25.94,16,30,11.45l-5.948-1.294.595-6.067L19.071,6.543,15.993,1.279,12.929,6.543,7.353,4.089l.595,6.067L2,11.45,6.059,16,2,20.55l5.948,1.294-.595,6.067,5.576-2.454,3.078,5.264,3.063-5.264,5.591,2.454-.61-6.067Z" style="fill:#d10"/><path d="M19.353,11.45a6.968,6.968,0,0,1-3.42.862,5.446,5.446,0,0,1-3.212-.862A7.1,7.1,0,0,1,12.5,14.8a6.225,6.225,0,0,1-1.874,2.914,7.454,7.454,0,0,1,3.138,1.19,9.659,9.659,0,0,1,2.216,2.721,8.194,8.194,0,0,1,2.141-2.691,7.605,7.605,0,0,1,3.242-1.2,12.562,12.562,0,0,1-1.933-2.944A6.718,6.718,0,0,1,19.353,11.45Zm-1.9,6.543a5.233,5.233,0,0,0-1.457,1.636,6.236,6.236,0,0,0-1.5-1.621,5.191,5.191,0,0,0-1.948-.848,6.839,6.839,0,0,0,1.115-2.007,6.18,6.18,0,0,0,.223-2.082,6.317,6.317,0,0,0,2.082.446,6.552,6.552,0,0,0,2.171-.461,4.521,4.521,0,0,0,.074,2.156,6.71,6.71,0,0,0,1.249,1.933A7.031,7.031,0,0,0,17.45,17.993Zm4.238-4.015c-.357-1.175.654-6.706.654-6.706S18.55,9.844,15.888,9.844s-6.23-2.572-6.23-2.572,1.175,4.015.461,6.587-4.387,5.472-4.387,5.472,4.788.283,6.6,1.5,3.658,5.948,3.658,5.948,2.454-5.2,3.48-5.948,6.8-1.5,6.8-1.5-4.223-4.178-4.58-5.353Zm-2.84,5.963a9.444,9.444,0,0,0-2.84,4.178s-1.413-3.152-2.974-4.223S8.3,18.543,8.3,18.543s2.454-2.171,3.048-4.1a11.923,11.923,0,0,0-.1-4.952,11.3,11.3,0,0,0,4.669,1.621c2.037,0,4.848-1.621,4.848-1.621s-.818,3.033-.164,4.922,3.108,4.134,3.108,4.134a10.557,10.557,0,0,0-4.862,1.4Z" style="fill:#fff"/>',
"XML": '<path d="M20.42,21.157l2.211,2.211L30,16,22.631,8.631,20.42,10.843,25.58,16Z" style="fill:#f1662a"/><path d="M11.58,10.843,9.369,8.631,2,16l7.369,7.369,2.211-2.211L6.42,16Z" style="fill:#f1662a"/><path d="M17.411,7.677l1.6.437-4.42,16.209-1.6-.437,4.42-16.209Z" style="fill:#f1662a"/>',
"XQuery": '<path d="M20.42,21.157l2.211,2.211L30,16,22.631,8.631,20.42,10.843,25.58,16ZM11.58,10.843,9.369,8.631,2,16l7.369,7.369,2.211-2.211L6.42,16Zm5.831-3.166,1.6.437-4.42,16.209-1.6-.437Z" style="fill:#f1662a"/><path d="M20.332,18.462a3.354,3.354,0,0,1,.975-1.423,4.014,4.014,0,0,1,1.617-.8A9.118,9.118,0,0,1,25.138,16a5.472,5.472,0,0,1,3.681,1.039A3.5,3.5,0,0,1,30,19.808a4.47,4.47,0,0,1-.24,1.491,3.124,3.124,0,0,1-.838,1.239l-1.675,1.6a1.512,1.512,0,0,0-.424.789,5.307,5.307,0,0,0-.1,1.1H23v-.54a6.32,6.32,0,0,1,.207-1.778,2.886,2.886,0,0,1,.78-1.24l1.352-1.289a1.84,1.84,0,0,0,.563-.894,3.682,3.682,0,0,0,.1-.8,1.5,1.5,0,0,0-.252-.9.9.9,0,0,0-.779-.346,1.255,1.255,0,0,0-.483.086.724.724,0,0,0-.344.337,2.347,2.347,0,0,0-.217.721,7.614,7.614,0,0,0-.081,1.24H20A6.155,6.155,0,0,1,20.332,18.462Zm6.457,8.5V30H22.936V26.962Z" style="fill:#fcba00"/>',
"YAML": '<path d="M2,12.218c.755,0,1.51-.008,2.264,0l.053.038Q5.7,13.638,7.078,15.014c.891-.906,1.8-1.794,2.7-2.7.053-.052.11-.113.192-.1.608,0,1.215,0,1.823,0a1.4,1.4,0,0,1,.353.019c-.7.67-1.377,1.369-2.069,2.05L5.545,18.8c-.331.324-.648.663-.989.975-.754.022-1.511.007-2.266.007,1.223-1.209,2.431-2.433,3.658-3.637C4.627,14.841,3.318,13.525,2,12.218Z" style="fill:#ffe885"/><path d="M12.7,12.218c.613,0,1.226,0,1.839,0q0,3.783,0,7.566c-.611,0-1.222.012-1.832-.008,0-1.664,0-3.329,0-4.994-1.6,1.607-3.209,3.2-4.811,4.8-.089.08-.166.217-.305.194-.824-.006-1.649,0-2.474,0Q8.916,16,12.7,12.218Z" style="fill:#ffe885"/><path d="M14.958,12.22c.47-.009.939,0,1.409,0,.836.853,1.69,1.689,2.536,2.532q1.268-1.267,2.539-2.532.7,0,1.4,0-.008,3.784,0,7.567c-.471,0-.943.006-1.414,0q.008-2.387,0-4.773c-.844.843-1.676,1.7-2.526,2.536-.856-.835-1.687-1.695-2.532-2.541,0,1.594-.006,3.188.006,4.781-.472,0-.943.005-1.415,0Q14.958,16,14.958,12.22Z" style="fill:#ffe885"/><path d="M23.259,12.217c.472,0,.944-.007,1.416,0q-.007,3.083,0,6.166c1.26,0,2.521,0,3.782,0,.063.006.144-.012.191.045.448.454.907.9,1.353,1.354q-3.371.007-6.741,0Q23.267,16,23.259,12.217Z" style="fill:#ffe885"/>',
"YANG": '<path d="M8.877,23.159c0-5.535,3.992-7.168,7.894-7.168,3.357,0,5.988-3.811,5.988-6.624,0-3.621-2.487-5.831-4.882-7.12A13.881,13.881,0,1,0,14.5,29.8C10.491,28.248,8.877,25.324,8.877,23.159Z" style="fill:#fff"/><path d="M14.482,29.917A14,14,0,0,1,16,2a14.154,14.154,0,0,1,1.893.131l.04.013c2.255,1.213,4.944,3.452,4.944,7.223,0,2.715-2.564,6.741-6.106,6.741-2.9,0-7.776.916-7.776,7.05,0,2.022,1.451,4.946,5.542,6.531ZM16,2.236A13.765,13.765,0,0,0,13.637,29.56c-3.581-1.684-4.877-4.447-4.877-6.4,0-6.576,5.6-7.286,8.012-7.286,3.406,0,5.87-3.886,5.87-6.506,0-3.645-2.606-5.82-4.8-7.006A13.928,13.928,0,0,0,16,2.236Z" style="fill:#231f20"/><path d="M29.882,16a13.882,13.882,0,0,0-12-13.752c2.4,1.289,4.882,3.5,4.882,7.12,0,2.813-2.631,6.624-5.988,6.624-3.9,0-7.894,1.633-7.894,7.168,0,2.166,1.613,5.089,5.618,6.641A13.875,13.875,0,0,0,29.882,16Z" style="fill:#231f20"/><path d="M16,30a14.2,14.2,0,0,1-1.518-.083l-.03-.007c-4.2-1.628-5.693-4.654-5.693-6.75,0-6.576,5.6-7.286,8.012-7.286,3.406,0,5.87-3.886,5.87-6.506,0-3.655-2.621-5.833-4.82-7.016l.072-.221A14,14,0,0,1,16,30Zm-1.477-.316A13.756,13.756,0,0,0,29.764,16,13.807,13.807,0,0,0,18.5,2.466c2.115,1.272,4.377,3.441,4.377,6.9,0,2.715-2.564,6.741-6.106,6.741-2.9,0-7.776.916-7.776,7.05C9,25.178,10.443,28.1,14.523,29.684Z" style="fill:#231f20"/><circle cx="15.943" cy="22.787" r="1.506" style="fill:#fff"/><circle cx="16.007" cy="9.142" r="1.506" style="fill:#231f20"/>',
"Zig": '<polygon points="5.733 19.731 5.733 12.264 8.533 12.264 8.533 8.531 2 8.531 2 23.464 5.547 23.464 8.907 19.731 5.733 19.731" style="fill:#f7a41d"/><polygon points="26.453 8.531 23.093 12.264 26.267 12.264 26.267 19.731 23.467 19.731 23.467 23.464 30 23.464 30 8.531 26.453 8.531" style="fill:#f7a41d"/><polygon points="26.875 6.707 20.513 8.531 9.467 8.531 9.467 12.264 16.847 12.264 5.115 25.293 11.497 23.464 22.533 23.464 22.533 19.731 15.148 19.731 26.875 6.707" style="fill:#f7a41d"/>'
};
var LANGUAGE_COLOURS = {
".gitignore": "#dd4c35",
".hgignore": "#bfbfbf",
".npmignore": "#cb3837",
".properties": "#99b8c4",
"6502 Assembly": "#0000bf",
"ActionScript": "#c41718",
"Ada": "#0f23c3",
"AL": "#2ea98e",
"ANTLR4": "#e44a32",
"Apache Configuration": "#c92037",
"Apex": "#0f9bd7",
"APL": "#d2d2d2",
"AppleScript": "#a8c2ab",
"Arduino": "#2d9094",
"ARM Assembly": "#0000bf",
"AsciiDoc": "#e40046",
"ASP.NET (C#)": "#33a9dc",
"AutoHotkey": "#d8d8d8",
"AutoIt": "#5d83ac",
"Avro IDL": "#0040ff",
"AWK": "#d2d2d2",
"Batch": "#d9b400",
"C#": "#368832",
"C": "#005f91",
"C++": "#984c93",
"Clojure": "#91dc47",
"CMake": "#01a300",
"COBOL": "#005ca5",
"CoffeeScript": "#6f4e37",
"Crystal": "#c8c8c8",
"CSS": "#1572b6",
"CSV": "#c2c2c2",
"D": "#b03931",
"Dart": "#58b6f0",
"Dhall": "#b7b7b7",
"Diff": "#c00000",
"Django/Jinja2": "#ff0000",
"Docker": "#0096e6",
"DOT (Graphviz)": "#4ed1f8",
"EditorConfig": "#e3e3f8",
"EJS": "#90a93a",
"Elixir": "#452459",
"Elm": "#8cd636",
"ERB": "#921a1e",
"Erlang": "#a2003e",
"F#": "#378bba",
"Firestore security rules": "#f6820c",
"Flow": "#ffb047",
"Fortran": "#734f96",
"FreeMarker Template Language": "#0050b2",
"GameMaker Language": "#8bc34a",
"G-code": "#ba0000",
"GDScript": "#478cbf",
"Git": "#dd4c35",
"GLSL": "#4386b5",
"Go module": "#ce3262",
"Go": "#00acd7",
"Gradle": "#006533",
"GraphQL": "#e10098",
"Groovy": "#6398aa",
"Haml": "#ecdfa7",
"Handlebars": "#c19770",
"Haskell": "#C04504",
"Haxe": "#f68712",
"HLSL": "#0000ff",
"HTML": "#e44f26",
"HTTP": "#3b61a6",
"Idris": "#8a0819",
"Ini": "#99b8c4",
"Io": "#c2c2c2",
"Java": "#5382a1",
"JavaScript": "#f5de19",
"JSON": "#f5de19",
"JSON5": "#909090",
"Julia": "#4063d8",
"Kotlin": "#9d4b9d",
"Kusto": "#59b4d9",
"LaTeX": "#cfcfcf",
"Less": "#2a4f84",
"Liquid": "#004999",
"Lisp": "#8381c5",
"LiveScript": "#317eac",
"Log file": "#00bd02",
"LOLCODE": "#8d2701",
"Lua": "#050080",
"Markdown": "#755838",
"MATLAB": "#ef6c3e",
"MAXScript": "#00696b",
"MEL": "#06a0a2",
"MongoDB": "#41a247",
"nginx": "#019639",
"Nim": "#ffe953",
"Nix": "#5277c3",
"NSIS": "#a42d26",
"Object Pascal": "#FF6344",
"Objective-C": "#c2c2c2",
"OCaml": "#f29104",
"Octave": "#77cce1",
"OpenCL": "#FF1C1A",
"Pascal": "#FF6344",
"Perl": "#3a3c5b",
"PHP": "#4c6b96",
"PL/SQL": "#ff0000",
"Plain text": "#c2c2c2",
"PlantUML": "#A11F41",
"PowerQuery": "#cfcfcf",
"PowerShell": "#5391fe",
"Processing": "#1c4c70",
"Prolog": "#ec1c24",
"Protocol Buffers": "#97ff27",
"Pug": "#442823",
"Puppet": "#ffae1a",
"PureScript": "#16171b",
"Python": "#3671A1",
"Q (kdb+ database)": "#1e78b3",
"Q#": "#3333cc",
"QML": "#41cd52",
"R": "#276dc3",
"Racket": "#9f1d20",
"Razor C#": "#368832",
"React JSX": "#00d8ff",
"React TSX": "#007acc",
"Reason": "#dd4b39",
"Rego": "#78929a",
"ReScript": "#e84f4f",
"reST (reStructuredText)": "#ce3f31",
"Robot Framework": "",
"Ruby": "#b31301",
"Rust": "#a04f12",
"SAS": "#002bb5",
"Sass (Sass)": "#cd6799",
"Sass (SCSS)": "#cd6799",
"Scala": "#e62d2a ",
"Shell session": "#d9b400",
"Shell": "#d9b400",
"Smarty": "#f6e200",
"Solidity (Ethereum)": "#c1c1c1",
"Solution file": "#854cc7",
"SPARQL": "#0c479c",
"SQF": "#c2c2c2",
"SQF: Status Quo Function (Arma 3)": "#c2c2c2",
"SQL": "#ffda44",
"Squirrel": "#a05a2c",
"Stan": "#b2001d",
"Stata Ado": "#3c6e8f",
"Stylus": "#c2c2c2",
"SVG": "#ffb13b",
"Swift": "#FA5D2D",
"Systemd configuration file": "#30d475",
"T4 templating": "#1e88e5",
"T4 Text Templates (C#)": "#1e88e5",
"T4 Text Templates (VB)": "#1e88e5",
"Tcl": "#eff1cb",
"Template Toolkit 2": "#3bcefc",
"TeX": "#cfcfcf",
"Textile": "#ffe7ac",
"TOML": "#bfbfbf",
"TSConfig": "#007acc",
"Twig": "#78dc50",
"TypeScript": "#3178c6",
"TypoScript": "#ff8700",
"V": "#5d87bf",
"Vala": "#403757",
"VB.Net": "#00519a",
"VBA": "#d87b30",
"Velocity": "#262692",
"Verilog": "#1a348f",
"VHDL": "#0d9b35",
"vim": "#43b54a",
"Visual Basic": "#00519a",
"WebAssembly": "#654ff0",
"Wolfram language": "#d01000",
"XML": "#f1662a",
"XQuery": "#f1662a",
"YAML": "#ffe885",
"YANG": "#231f20",
"Zig": "#f7a41d"
};
// src/SettingsTab.ts
var import_obsidian = require("obsidian");
var import_pickr = __toESM(require_pickr_min());
// node_modules/colortranslator/esm/index.js
var t = function() {
return t = Object.assign || function(t2) {
for (var e2, n2 = 1, r2 = arguments.length; n2 < r2; n2++)
for (var i2 in e2 = arguments[n2])
Object.prototype.hasOwnProperty.call(e2, i2) && (t2[i2] = e2[i2]);
return t2;
}, t.apply(this, arguments);
};
function e(t2, e2, n2) {
if (n2 || 2 === arguments.length)
for (var r2, i2 = 0, o2 = e2.length; i2 < o2; i2++)
!r2 && i2 in e2 || (r2 || (r2 = Array.prototype.slice.call(e2, 0, i2)), r2[i2] = e2[i2]);
return t2.concat(r2 || Array.prototype.slice.call(e2));
}
var n;
var r;
var i;
var o;
!function(t2) {
t2.HEX = "HEX", t2.RGB = "RGB", t2.HSL = "HSL", t2.CMYK = "CMYK";
}(n || (n = {})), function(t2) {
t2.ANALOGOUS = "ANALOGOUS", t2.COMPLEMENTARY = "COMPLEMENTARY", t2.SPLIT_COMPLEMENTARY = "SPLIT_COMPLEMENTARY", t2.TRIADIC = "TRIADIC", t2.TETRADIC = "TETRADIC", t2.SQUARE = "SQUARE";
}(r || (r = {})), function(t2) {
t2.ADDITIVE = "ADDITIVE", t2.SUBTRACTIVE = "SUBTRACTIVE";
}(i || (i = {})), function(t2) {
t2.black = "#000000", t2.silver = "#C0C0C0", t2.gray = "#808080", t2.white = "#FFFFFF", t2.maroon = "#800000", t2.red = "#FF0000", t2.purple = "#800080", t2.fuchsia = "#FF00FF", t2.green = "#008000", t2.lime = "#00FF00", t2.olive = "#808000", t2.yellow = "#FFFF00", t2.navy = "#000080", t2.blue = "#0000FF", t2.teal = "#008080", t2.aqua = "#00FFFF", t2.orange = "#FFA500", t2.aliceblue = "#F0F8FF", t2.antiquewhite = "#FAEBD7", t2.aquamarine = "#7FFFD4", t2.azure = "#F0FFFF", t2.beige = "#F5F5DC", t2.bisque = "#FFE4C4", t2.blanchedalmond = "#FFEBCD", t2.blueviolet = "#8A2BE2", t2.brown = "#A52A2A", t2.burlywood = "#DEB887", t2.cadetblue = "#5F9EA0", t2.chartreuse = "#7FFF00", t2.chocolate = "#D2691E", t2.coral = "#FF7F50", t2.cornflowerblue = "#6495ED", t2.cornsilk = "#FFF8DC", t2.crimson = "#DC143C", t2.cyan = "#00FFFF", t2.darkblue = "#00008B", t2.darkcyan = "#008B8B", t2.darkgoldenrod = "#B8860B", t2.darkgray = "#A9A9A9", t2.darkgreen = "#006400", t2.darkgrey = "#A9A9A9", t2.darkkhaki = "#BDB76B", t2.darkmagenta = "#8B008B", t2.darkolivegreen = "#556B2F", t2.darkorange = "#FF8C00", t2.darkorchid = "#9932CC", t2.darkred = "#8B0000", t2.darksalmon = "#E9967A", t2.darkseagreen = "#8FBC8F", t2.darkslateblue = "#483D8B", t2.darkslategray = "#2F4F4F", t2.darkslategrey = "#2F4F4F", t2.darkturquoise = "#00CED1", t2.darkviolet = "#9400D3", t2.deeppink = "#FF1493", t2.deepskyblue = "#00BFFF", t2.dimgray = "#696969", t2.dimgrey = "#696969", t2.dodgerblue = "#1E90FF", t2.firebrick = "#B22222", t2.floralwhite = "#FFFAF0", t2.forestgreen = "#228B22", t2.gainsboro = "#DCDCDC", t2.ghostwhite = "#F8F8FF", t2.gold = "#FFD700", t2.goldenrod = "#DAA520", t2.greenyellow = "#ADFF2F", t2.grey = "#808080", t2.honeydew = "#F0FFF0", t2.hotpink = "#FF69B4", t2.indianred = "#CD5C5C", t2.indigo = "#4B0082", t2.ivory = "#FFFFF0", t2.khaki = "#F0E68C", t2.lavender = "#E6E6FA", t2.lavenderblush = "#FFF0F5", t2.lawngreen = "#7CFC00", t2.lemonchiffon = "#FFFACD", t2.lightblue = "#ADD8E6", t2.lightcoral = "#F08080", t2.lightcyan = "#E0FFFF", t2.lightgoldenrodyellow = "#FAFAD2", t2.lightgray = "#D3D3D3", t2.lightgreen = "#90EE90", t2.lightgrey = "#D3D3D3", t2.lightpink = "#FFB6C1", t2.lightsalmon = "#FFA07A", t2.lightseagreen = "#20B2AA", t2.lightskyblue = "#87CEFA", t2.lightslategray = "#778899", t2.lightslategrey = "#778899", t2.lightsteelblue = "#B0C4DE", t2.lightyellow = "#FFFFE0", t2.limegreen = "#32CD32", t2.linen = "#FAF0E6", t2.magenta = "#FF00FF", t2.mediumaquamarine = "#66CDAA", t2.mediumblue = "#0000CD", t2.mediumorchid = "#BA55D3", t2.mediumpurple = "#9370DB", t2.mediumseagreen = "#3CB371", t2.mediumslateblue = "#7B68EE", t2.mediumspringgreen = "#00FA9A", t2.mediumturquoise = "#48D1CC", t2.mediumvioletred = "#C71585", t2.midnightblue = "#191970", t2.mintcream = "#F5FFFA", t2.mistyrose = "#FFE4E1", t2.moccasin = "#FFE4B5", t2.navajowhite = "#FFDEAD", t2.oldlace = "#FDF5E6", t2.olivedrab = "#6B8E23", t2.orangered = "#FF4500", t2.orchid = "#DA70D6", t2.palegoldenrod = "#EEE8AA", t2.palegreen = "#98FB98", t2.paleturquoise = "#AFEEEE", t2.palevioletred = "#DB7093", t2.papayawhip = "#FFEFD5", t2.peachpuff = "#FFDAB9", t2.peru = "#CD853F", t2.pink = "#FFC0CB", t2.plum = "#DDA0DD", t2.powderblue = "#B0E0E6", t2.rosybrown = "#BC8F8F", t2.royalblue = "#4169E1", t2.saddlebrown = "#8B4513", t2.salmon = "#FA8072", t2.sandybrown = "#F4A460", t2.seagreen = "#2E8B57", t2.seashell = "#FFF5EE", t2.sienna = "#A0522D", t2.skyblue = "#87CEEB", t2.slateblue = "#6A5ACD", t2.slategray = "#708090", t2.slategrey = "#708090", t2.snow = "#FFFAFA", t2.springgreen = "#00FF7F", t2.steelblue = "#4682B4", t2.tan = "#D2B48C", t2.thistle = "#D8BFD8", t2.tomato = "#FF6347", t2.turquoise = "#40E0D0", t2.violet = "#EE82EE", t2.wheat = "#F5DEB3", t2.whitesmoke = "#F5F5F5", t2.yellowgreen = "#9ACD32", t2.rebeccapurple = "#663399";
}(o || (o = {}));
var a;
var c;
var u = Object.keys(o);
var s = { HEX: ["r", "g", "b", "a"], RGB: ["r", "g", "b", "a"], HSL: ["h", "s", "l", "a"], CMYK: ["c", "m", "y", "k", "a"] };
var d = { BGR: n.RGB, ABGR: n.RGB, HLS: n.HSL, AHLS: n.HSL, CKMY: n.CMYK, ACKMY: n.CMYK };
!function(t2) {
t2.NUMBER = "number", t2.BOOLEAN = "boolean";
}(a || (a = {}));
var l;
var f;
var h;
var p = ((c = {})[n.HEX] = /^#(?:([a-f\d])([a-f\d])([a-f\d])([a-f\d])?|([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?)$/i, c[n.RGB] = /^rgba?\s*\(\s*(?:((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)(?:\s*,\s*((?:\d*\.)?\d+))?|((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)(?:\s*\/\s*((?:\d*\.)?\d+%?))?)\s*\)$/, c[n.HSL] = /^hsla?\s*\(\s*(?:(-?(?:\d*\.)?\d+(?:deg|grad|rad|turn)?)\s*,\s*((?:\d*\.)?\d+)%\s*,\s*((?:\d*\.)?\d+)%(?:\s*,\s*((?:\d*\.)?\d+))?|(-?(?:\d*\.)?\d+(?:deg|grad|rad|turn)?)\s*((?:\d*\.)?\d+)%\s*((?:\d*\.)?\d+)%(?:\s*\/\s*((?:\d*\.)?\d+%?))?)\s*\)$/, c[n.CMYK] = /^(?:device-cmyk|cmyk)\s*\(\s*(?:((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)(?:\s*,\s*((?:\d*\.)?\d+))?|((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)(?:\s*\/\s*((?:\d*\.)?\d+%?))?)\s*\)$/, c);
var g = /^(-?(?:\d*\.)?\d+)((?:deg|grad|rad|turn)?)$/;
var m = /^(\d+(?:\.\d+)?|\.\d+)%$/;
var b = /^0x([a-f\d]{1,2})$/i;
var A = /\{(\d+)\}/g;
var y = /,( +|\d+)/g;
var E = / +/;
var F = "The provided string color doesn't have a correct format";
var v = "The provided color object doesn't have the proper keys or format";
!function(t2) {
t2.NONE = "none", t2.DEGREES = "deg", t2.GRADIANS = "grad", t2.RADIANS = "rad", t2.TURNS = "turn";
}(l || (l = {})), function(t2) {
t2.NONE = "none", t2.PERCENT = "percent";
}(f || (f = {})), function(t2) {
t2.DEVICE_CMYK = "device-cmyk", t2.CMYK = "cmyk";
}(h || (h = {}));
var H;
var B;
var C;
var S;
var R;
var M;
var D = { decimals: 6, legacyCSS: false, spacesAfterCommas: false, anglesUnit: l.NONE, rgbUnit: f.NONE, cmykUnit: f.PERCENT, alphaUnit: f.NONE, cmykFunction: h.DEVICE_CMYK };
var O = function(t2, e2) {
return Object.prototype.hasOwnProperty.call(t2, e2);
};
var L = function(t2) {
return +"".concat(t2).replace(m, "$1");
};
var G = function(t2) {
return m.test("".concat(t2)) ? L(t2) : Math.min(+t2, 100);
};
var k = function(t2) {
return 1 === t2.length && (t2 += t2), parseInt(t2, 16);
};
var j = function(t2) {
var e2 = K(t2, 0).toString(16).toUpperCase();
return 1 === e2.length ? "0x0".concat(e2) : "0x".concat(e2);
};
var X = function(t2, e2) {
return void 0 === e2 && (e2 = false), !e2 && m.test(t2) ? Math.min(255 * L(t2) / 100, 255) : b.test(t2) ? (3 === t2.length && (t2 += t2.slice(-1)), e2 ? K(t2) / 255 : K(t2)) : Math.min(+t2, e2 ? 1 : 255);
};
var I = function(t2) {
return Math.min(m.test(t2) ? L(t2) / 100 : +t2, 1);
};
var Y = function(t2) {
return e([], t2, true).sort().join("").toUpperCase();
};
var K = function(t2, e2) {
void 0 === e2 && (e2 = 6);
var n2 = Math.pow(10, e2);
return Math.round(+t2 * n2) / n2;
};
var N = function(t2, e2, n2) {
return Math.max(e2, Math.min(t2, n2));
};
var T = function(t2) {
if ("string" == typeof t2) {
var e2 = t2.match(g), n2 = +e2[1];
switch (e2[2]) {
case l.RADIANS:
t2 = K(180 * n2 / Math.PI);
break;
case l.TURNS:
t2 = K(360 * n2);
break;
case l.GRADIANS:
t2 = K(0.9 * n2);
break;
case l.DEGREES:
default:
t2 = n2;
}
}
return (t2 > 360 || t2 < 0) && (t2 -= 360 * Math.floor(t2 / 360)), t2;
};
var P = function(t2, e2) {
var n2;
switch (e2) {
case l.RADIANS:
n2 = K(function(t3) {
return t3 * Math.PI / 180;
}(t2));
break;
case l.TURNS:
n2 = K(t2 / 360);
break;
case l.GRADIANS:
n2 = K(10 / 9 * t2);
break;
case l.DEGREES:
case l.NONE:
default:
n2 = t2;
}
return n2;
};
var U = function(t2) {
for (var e2 = [], n2 = 1; n2 < arguments.length; n2++)
e2[n2 - 1] = arguments[n2];
for (var r2 = [], i2 = [], o2 = [], c2 = [], u2 = [], s2 = Object.values(l), d2 = Object.values(f), b2 = Object.values(h), A2 = { legacyCSS: 0, spacesAfterCommas: 0, cmykFunction: 0 }, F2 = 0, v2 = e2; F2 < v2.length; F2++) {
var H2 = v2[F2];
if ("string" == typeof H2) {
if (r2.push(H2), H2.includes(",")) {
A2.legacyCSS++;
var B2 = H2.match(y);
1 === new Set(B2).size && E.test(B2[0].slice(1)) && A2.spacesAfterCommas++;
}
if (H2.match(p.HSL)) {
var C2 = (k2 = H2.match(p.HSL))[1] || k2[5], S2 = k2[8], R2 = C2.match(g)[2];
i2.push("" === R2 ? l.NONE : R2), u2.push(m.test(S2));
continue;
}
if (p.RGB.test(H2)) {
var M2 = (k2 = H2.match(p.RGB))[1] || k2[5], O2 = k2[2] || k2[6], L2 = k2[3] || k2[7], G2 = k2[8];
o2.push(m.test(M2) && m.test(O2) && m.test(L2)), u2.push(m.test(G2));
continue;
}
if (H2.match(p.CMYK)) {
var k2, j2 = (k2 = H2.match(p.CMYK))[1] || k2[6], X2 = k2[2] || k2[7], I2 = k2[3] || k2[8], Y2 = k2[4] || k2[9];
G2 = k2[10];
c2.push(m.test(j2) && m.test(X2) && m.test(I2) && m.test(Y2)), H2.startsWith("cmyk") && A2.cmykFunction++, u2.push(m.test(G2));
}
}
}
return { decimals: typeof t2.decimals === a.NUMBER ? t2.decimals : D.decimals, legacyCSS: typeof t2.legacyCSS === a.BOOLEAN ? t2.legacyCSS : Boolean(r2.length && A2.legacyCSS === r2.length) || D.legacyCSS, spacesAfterCommas: typeof t2.spacesAfterCommas === a.BOOLEAN ? t2.spacesAfterCommas : Boolean(r2.length && A2.spacesAfterCommas === r2.length) || D.spacesAfterCommas, anglesUnit: t2.anglesUnit && s2.includes(t2.anglesUnit) ? t2.anglesUnit : 1 === new Set(i2).size ? i2[0] : D.anglesUnit, rgbUnit: t2.rgbUnit && d2.includes(t2.rgbUnit) ? t2.rgbUnit : 1 === new Set(o2).size && o2[0] ? f.PERCENT : D.rgbUnit, cmykUnit: t2.cmykUnit && d2.includes(t2.cmykUnit) ? t2.cmykUnit : 1 !== new Set(c2).size || c2[0] ? D.cmykUnit : f.NONE, alphaUnit: t2.alphaUnit && d2.includes(t2.alphaUnit) ? t2.alphaUnit : 1 === new Set(u2).size && u2[0] ? f.PERCENT : D.alphaUnit, cmykFunction: t2.cmykFunction && b2.includes(t2.cmykFunction) ? t2.cmykFunction : c2.length && c2.length === A2.cmykFunction ? h.CMYK : D.cmykFunction };
};
var w = function(t2, e2, n2) {
return n2 < 0 && (n2 += 6), n2 >= 6 && (n2 -= 6), K(n2 < 1 ? 255 * ((e2 - t2) * n2 + t2) : n2 < 3 ? 255 * e2 : n2 < 4 ? 255 * ((e2 - t2) * (4 - n2) + t2) : 255 * t2);
};
var x = function(t2, e2, n2) {
e2 /= 100;
var r2 = (n2 /= 100) <= 0.5 ? n2 * (e2 + 1) : n2 + e2 - n2 * e2, i2 = 2 * n2 - r2;
return { r: w(i2, r2, (t2 /= 60) + 2), g: w(i2, r2, t2), b: w(i2, r2, t2 - 2) };
};
var V = function(t2, e2, n2, r2) {
return { r: K(255 * (1 - t2) * (r2 = 1 - r2)), g: K(255 * (1 - e2) * r2), b: K(255 * (1 - n2) * r2) };
};
var q = function(t2, e2, n2) {
t2 /= 255, e2 /= 255, n2 /= 255;
var r2 = 1 - Math.max(t2, e2, n2), i2 = 1 - r2, o2 = i2 && (i2 - e2) / i2, a2 = i2 && (i2 - n2) / i2;
return { c: K(100 * (i2 && (i2 - t2) / i2)), m: K(100 * o2), y: K(100 * a2), k: K(100 * r2) };
};
var _ = function(t2, e2, n2, r2) {
void 0 === r2 && (r2 = 1), t2 /= 255, e2 /= 255, n2 /= 255, r2 = Math.min(r2, 1);
var i2 = Math.max(t2, e2, n2), o2 = Math.min(t2, e2, n2), a2 = i2 - o2, c2 = 0, u2 = 0, s2 = (i2 + o2) / 2;
if (0 !== a2) {
switch (i2) {
case t2:
c2 = (e2 - n2) / a2 % 6;
break;
case e2:
c2 = (n2 - t2) / a2 + 2;
break;
case n2:
c2 = (t2 - e2) / a2 + 4;
}
(c2 = K(60 * c2)) < 0 && (c2 += 360), u2 = a2 / (1 - Math.abs(2 * s2 - 1));
}
return { h: c2, s: K(100 * u2), l: K(100 * s2), a: r2 };
};
var $ = function(t2, e2) {
if (t2 < 0 && (t2 += 360), t2 > 360 && (t2 -= 360), 360 === t2 || 0 === t2)
return t2;
var n2 = [[0, 120], [120, 180], [180, 240], [240, 360]], r2 = [[0, 60], [60, 120], [120, 240], [240, 360]], i2 = e2 ? r2 : n2, o2 = 0, a2 = 0, c2 = 0, u2 = 0;
return (e2 ? n2 : r2).find(function(e3, n3) {
return t2 >= e3[0] && t2 < e3[1] && (o2 = e3[0], a2 = e3[1], c2 = i2[n3][0], u2 = i2[n3][1], true);
}), c2 + (u2 - c2) / (a2 - o2) * (t2 - o2);
};
var z = function(t2) {
return t2 ? ", " : ",";
};
var Q = function(t2, e2) {
var n2 = Y(Object.keys(t2));
return s[d[n2]].reduce(function(n3, r2, i2) {
var o2 = t2[r2];
return void 0 !== o2 && n3.push(e2(o2, i2)), n3;
}, []);
};
var W = function(t2, e2) {
return t2.replace(A, function(t3, n2) {
return "".concat(e2[+n2 - 1]);
});
};
var J = function(t2, e2) {
var n2 = e2.alphaUnit, r2 = e2.legacyCSS, i2 = e2.decimals;
return n2 !== f.PERCENT || r2 ? K(t2, i2) : "".concat(K(100 * t2, i2), "%");
};
var Z = ((H = {})[n.HEX] = function(t2) {
var e2 = Q(t2, function(t3) {
return e3 = K(t3), 1 === (n3 = K(e3, 0).toString(16).toUpperCase()).length && (n3 = "0".concat(n3)), n3;
var e3, n3;
}), n2 = 4 === e2.length ? "#{1}{2}{3}{4}" : "#{1}{2}{3}";
return W(n2, e2);
}, H[n.RGB] = function(t2, e2) {
var n2 = e2.decimals, r2 = e2.legacyCSS, i2 = e2.spacesAfterCommas, o2 = e2.rgbUnit, a2 = z(i2), c2 = Q(t2, function(t3, r3) {
return o2 === f.PERCENT && r3 < 3 ? "".concat(function(t4, e3) {
return K(t4 / 255 * 100, e3);
}(t3, n2), "%") : 3 === r3 ? J(t3, e2) : K(t3, n2);
}), u2 = r2 ? 4 === c2.length ? "rgba({1}".concat(a2, "{2}").concat(a2, "{3}").concat(a2, "{4})") : "rgb({1}".concat(a2, "{2}").concat(a2, "{3})") : 4 === c2.length ? "rgb({1} {2} {3} / {4})" : "rgb({1} {2} {3})";
return W(u2, c2);
}, H[n.HSL] = function(t2, e2) {
var n2 = e2.decimals, r2 = e2.legacyCSS, i2 = e2.spacesAfterCommas, o2 = e2.anglesUnit, a2 = z(i2), c2 = Q(t2, function(t3, r3) {
if (0 === r3 && o2 !== l.NONE) {
var i3 = K(P(t3, o2), n2);
return "".concat(i3).concat(o2);
}
return 3 === r3 ? J(t3, e2) : K(t3, n2);
}), u2 = r2 ? 4 === c2.length ? "hsla({1}".concat(a2, "{2}%").concat(a2, "{3}%").concat(a2, "{4})") : "hsl({1}".concat(a2, "{2}%").concat(a2, "{3}%)") : 4 === c2.length ? "hsl({1} {2}% {3}% / {4})" : "hsl({1} {2}% {3}%)";
return W(u2, c2);
}, H[n.CMYK] = function(t2, e2) {
var n2 = e2.decimals, r2 = e2.legacyCSS, i2 = e2.spacesAfterCommas, o2 = e2.cmykUnit, a2 = e2.cmykFunction, c2 = z(i2), u2 = Q(t2, function(t3, r3) {
return o2 === f.PERCENT && r3 < 4 ? "".concat(K(t3, n2), "%") : 4 === r3 ? J(t3, e2) : K(t3 / 100, n2);
}), s2 = r2 ? 5 === u2.length ? "".concat(a2, "({1}").concat(c2, "{2}").concat(c2, "{3}").concat(c2, "{4}").concat(c2, "{5})") : "".concat(a2, "({1}").concat(c2, "{2}").concat(c2, "{3}").concat(c2, "{4})") : 5 === u2.length ? "".concat(a2, "({1} {2} {3} {4} / {5})") : "".concat(a2, "({1} {2} {3} {4})");
return W(s2, u2);
}, H);
var tt = function(t2) {
return "string" == typeof t2 && (t2 = m.test(t2) ? L(t2) / 100 : +t2), isNaN(+t2) || t2 > 1 ? 1 : K(t2);
};
var et = function(n2, r2, o2) {
return r2.reduce(function(r3, a2) {
return e(e([], r3, true), [t(t({}, n2), { h: o2 === i.ADDITIVE ? T(n2.h + a2) : T($($(n2.h, false) + a2, true)) })], false);
}, [t({}, n2)]);
};
var nt = function(t2, e2) {
return et(t2, [30, -30], e2);
};
var rt = function(t2, e2) {
return et(t2, [180], e2);
};
var it = function(t2, e2) {
return et(t2, [150, -150], e2);
};
var ot = function(t2, e2) {
return et(t2, [120, -120], e2);
};
var at = function(t2, e2) {
return et(t2, [60, -120, 180], e2);
};
var ct = function(t2, e2) {
return et(t2, [90, -90, 180], e2);
};
var ut = function(t2) {
return "string" == typeof t2 ? function(t3) {
var e2;
if (Object.keys(n).some(function(n2) {
if (p[n2].test(t3))
return e2 = n2, true;
}), !e2 && ~u.indexOf(t3) && (e2 = n.HEX), !e2)
throw new Error(F);
return e2;
}(t2) : function(t3) {
var e2, r2 = false, i2 = Y(Object.keys(t3));
if (d[i2] && (e2 = d[i2]), e2 && e2 === n.RGB) {
var o2 = Object.entries(t3).some(function(t4) {
return !b.test("".concat(t4[1]));
}), a2 = Object.entries(t3).some(function(t4) {
return !(m.test("".concat(t4[1])) || !b.test("".concat(t4[1])) && !isNaN(+t4[1]) && +t4[1] <= 255);
});
o2 && a2 && (r2 = true), o2 || (e2 = n.HEX);
}
if (!e2 || r2)
throw new Error(v);
return e2;
}(t2);
};
var st = ((B = {})[n.HEX] = function(t2) {
var e2 = (~u.indexOf(t2) ? o[t2] : t2).match(p.HEX), n2 = { r: k(e2[1] || e2[5]), g: k(e2[2] || e2[6]), b: k(e2[3] || e2[7]) }, r2 = e2[4] || e2[8];
return void 0 !== r2 && (n2.a = k(r2) / 255), n2;
}, B[n.RGB] = function(t2) {
var e2 = t2.match(p.RGB), n2 = X(e2[1] || e2[5]), r2 = X(e2[2] || e2[6]), i2 = X(e2[3] || e2[7]), o2 = e2[4] || e2[8], a2 = { r: Math.min(n2, 255), g: Math.min(r2, 255), b: Math.min(i2, 255) };
return void 0 !== o2 && (a2.a = tt(o2)), a2;
}, B[n.HSL] = function(t2) {
var e2 = t2.match(p.HSL), n2 = T(e2[1] || e2[5]), r2 = G(e2[2] || e2[6]), i2 = G(e2[3] || e2[7]), o2 = e2[4] || e2[8], a2 = x(n2, r2, i2);
return void 0 !== o2 && (a2.a = tt(o2)), a2;
}, B[n.CMYK] = function(t2) {
var e2 = t2.match(p.CMYK), n2 = I(e2[1] || e2[6]), r2 = I(e2[2] || e2[7]), i2 = I(e2[3] || e2[8]), o2 = I(e2[4] || e2[9]), a2 = e2[5] || e2[10], c2 = V(n2, r2, i2, o2);
return void 0 !== a2 && (c2.a = tt(a2)), c2;
}, B);
var dt = ((C = {})[n.HEX] = function(t2) {
var e2 = { r: X("".concat(t2.r)), g: X("".concat(t2.g)), b: X("".concat(t2.b)) };
return O(t2, "a") && (e2.a = Math.min(X("".concat(t2.a), true), 1)), e2;
}, C[n.RGB] = function(t2) {
return this.HEX(t2);
}, C[n.HSL] = function(t2) {
var e2 = G("".concat(t2.s)), n2 = G("".concat(t2.l)), r2 = x(T(t2.h), e2, n2);
return O(t2, "a") && (r2.a = tt(t2.a)), r2;
}, C[n.CMYK] = function(t2) {
var e2 = I("".concat(t2.c)), n2 = I("".concat(t2.m)), r2 = I("".concat(t2.y)), i2 = I("".concat(t2.k)), o2 = V(e2, n2, r2, i2);
return O(t2, "a") && (o2.a = tt(t2.a)), o2;
}, C);
var lt = function(t2, e2) {
return void 0 === e2 && (e2 = ut(t2)), "string" == typeof t2 ? st[e2](t2) : dt[e2](t2);
};
var ft = ((S = {})[n.HEX] = function(t2) {
return { r: j(t2.r), g: j(t2.g), b: j(t2.b) };
}, S.HEXA = function(t2) {
var e2 = ft.HEX(t2);
return e2.a = O(t2, "a") ? j(255 * t2.a) : "0xFF", e2;
}, S[n.RGB] = function(t2, e2) {
var n2 = mt(t2, e2);
return O(n2, "a") && delete n2.a, n2;
}, S.RGBA = function(t2, e2) {
var n2 = ft.RGB(t2, e2);
return n2.a = O(t2, "a") ? K(t2.a) : 1, n2;
}, S[n.HSL] = function(t2, e2) {
var n2 = _(t2.r, t2.g, t2.b);
return delete n2.a, bt(n2, e2);
}, S.HSLA = function(t2, e2) {
var n2 = ft.HSL(t2, e2);
return n2.a = O(t2, "a") ? K(t2.a, e2) : 1, n2;
}, S[n.CMYK] = function(t2, e2) {
return At(q(t2.r, t2.g, t2.b), e2);
}, S.CMYKA = function(t2, e2) {
var n2 = ft.CMYK(t2, e2);
return n2.a = O(t2, "a") ? K(t2.a, e2) : 1, n2;
}, S);
var ht = function(e2, r2, i2, o2) {
var a2 = ut(e2), c2 = "string" == typeof e2, u2 = lt(e2, a2), s2 = "string" == typeof e2 && O(u2, "a") || "string" != typeof e2 && O(e2, "a"), d2 = _(u2.r, u2.g, u2.b, u2.a);
s2 || delete d2.a;
var l2 = i2 ? d2.l / (r2 + 1) : (100 - d2.l) / (r2 + 1), f2 = Array(r2).fill(null).map(function(e3, n2) {
return t(t({}, d2), { l: d2.l + l2 * (n2 + 1) * (1 - 2 * +i2) });
});
switch (a2) {
case n.HEX:
default:
return f2.map(function(e3) {
var n2 = x(e3.h, e3.s, e3.l);
return s2 && (n2.a = e3.a), c2 ? s2 ? Z.HEX(t(t({}, n2), { a: K(255 * n2.a) })) : Z.HEX(n2) : s2 ? ft.HEXA(n2) : ft.HEX(n2);
});
case n.RGB:
return f2.map(function(t2) {
var e3 = x(t2.h, t2.s, t2.l);
return s2 && (e3.a = t2.a), c2 ? Z.RGB(e3, o2) : s2 ? ft.RGBA(e3, o2.decimals) : ft.RGB(e3, o2.decimals);
});
case n.HSL:
return f2.map(function(e3) {
return c2 ? Z.HSL(e3, o2) : s2 ? ft.HSLA(t(t({}, x(e3.h, e3.s, e3.l)), { a: e3.a }), o2.decimals) : ft.HSL(x(e3.h, e3.s, e3.l), o2.decimals);
});
}
};
var pt = ((R = { buildHarmony: function(t2, e2, r2, i2) {
var o2 = ut(t2), a2 = lt(t2, o2), c2 = _(a2.r, a2.g, a2.b, a2.a), u2 = "string" == typeof t2 && O(a2, "a") || "string" != typeof t2 && O(t2, "a"), s2 = "string" == typeof t2;
switch (o2) {
case n.HEX:
default:
return u2 ? this.HEXA(bt(c2, 0), e2, r2, s2) : this.HEX(bt(c2, 0), e2, r2, s2);
case n.HSL:
return u2 ? this.HSLA(c2, e2, r2, s2, i2) : this.HSL(c2, e2, r2, s2, i2);
case n.RGB:
return u2 ? this.RGBA(c2, e2, r2, s2, i2) : this.RGB(c2, e2, r2, s2, i2);
}
} })[n.HEX] = function(t2, e2, n2, r2) {
return e2(t2, n2).map(function(t3) {
return r2 ? Z.HEX(x(t3.h, t3.s, t3.l)) : ft.HEX(x(t3.h, t3.s, t3.l));
});
}, R.HEXA = function(e2, n2, r2, i2) {
return n2(e2, r2).map(function(e3) {
return i2 ? Z.HEX(t(t({}, x(e3.h, e3.s, e3.l)), { a: 255 * tt(e3.a) })) : ft.HEXA(t(t({}, x(e3.h, e3.s, e3.l)), { a: tt(e3.a) }));
});
}, R[n.RGB] = function(t2, e2, n2, r2, i2) {
return e2(t2, n2).map(function(t3) {
return r2 ? Z.RGB(x(t3.h, t3.s, t3.l), i2) : ft.RGB(x(t3.h, t3.s, t3.l), i2.decimals);
});
}, R.RGBA = function(e2, n2, r2, i2, o2) {
return n2(e2, r2).map(function(e3) {
return i2 ? Z.RGB(t(t({}, x(e3.h, e3.s, e3.l)), { a: tt(e3.a) }), o2) : ft.RGBA(t(t({}, x(e3.h, e3.s, e3.l)), { a: tt(e3.a) }), o2.decimals);
});
}, R[n.HSL] = function(t2, e2, n2, r2, i2) {
return e2(t2, n2).map(function(t3) {
return r2 ? Z.HSL({ h: t3.h, s: t3.s, l: t3.l }, i2) : ft.HSL(x(t3.h, t3.s, t3.l), i2.decimals);
});
}, R.HSLA = function(e2, n2, r2, i2, o2) {
return n2(e2, r2).map(function(e3) {
return i2 ? Z.HSL(t(t({}, e3), { a: tt(e3.a) }), o2) : ft.HSLA(t(t({}, x(e3.h, e3.s, e3.l)), { a: tt(e3.a) }), o2.decimals);
});
}, R);
var gt = ((M = { mix: function(e2, n2) {
var r2, o2, a2, c2, u2, s2, d2, l2, f2, h2, p2, g2, m2, b2, A2, y2 = e2.map(function(t2) {
var e3 = ut(t2);
return lt(t2, e3);
}), E2 = n2 === i.SUBTRACTIVE ? y2.map(function(t2) {
var e3, n3, r3, i2, o3, a3, c3, u3, s3, d3, l3, f3, h3, p3, g3 = (e3 = t2.r, n3 = t2.g, r3 = t2.b, i2 = Math.min(e3, n3, r3), o3 = Math.min(255 - e3, 255 - n3, 255 - r3), a3 = e3 - i2, c3 = n3 - i2, u3 = r3 - i2, s3 = Math.min(a3, c3), d3 = a3 - s3, l3 = (c3 + s3) / 2, f3 = (u3 + c3 - s3) / 2, h3 = Math.max(d3, l3, f3) / Math.max(a3, c3, u3), p3 = isNaN(h3) || h3 === 1 / 0 || h3 <= 0 ? 1 : h3, { r: d3 / p3 + o3, y: l3 / p3 + o3, b: f3 / p3 + o3 });
return O(t2, "a") && (g3.a = t2.a), g3;
}) : null;
function F2(e3) {
var r3 = n2 === i.ADDITIVE ? { r: 0, g: 0, b: 0, a: 0 } : { r: 0, y: 0, b: 0, a: 0 };
return e3.reduce(function(e4, r4) {
var o3 = O(r4, "a") ? r4.a : 1, a3 = { r: Math.min(e4.r + r4.r * o3, 255), b: Math.min(e4.b + r4.b * o3, 255), a: 1 - (1 - o3) * (1 - e4.a) }, c3 = "g" in e4 ? e4.g : e4.y, u3 = "g" in r4 ? r4.g : r4.y;
return t(t({}, a3), n2 === i.ADDITIVE ? { g: Math.min(c3 + u3 * o3, 255) } : { y: Math.min(c3 + u3 * o3, 255) });
}, r3);
}
if (n2 === i.ADDITIVE)
r2 = F2(y2);
else {
var v2 = F2(E2);
o2 = v2.r, a2 = v2.y, c2 = v2.b, u2 = Math.min(o2, a2, c2), s2 = Math.min(255 - o2, 255 - a2, 255 - c2), d2 = o2 - u2, l2 = a2 - u2, f2 = c2 - u2, h2 = Math.min(l2, f2), p2 = d2 + l2 - h2, g2 = l2 + h2, m2 = 2 * (f2 - h2), b2 = Math.max(p2, g2, m2) / Math.max(d2, l2, f2), A2 = isNaN(b2) || b2 === 1 / 0 || b2 <= 0 ? 1 : b2, (r2 = { r: p2 / A2 + s2, g: g2 / A2 + s2, b: m2 / A2 + s2 }).a = v2.a;
}
return { r: K(r2.r), g: K(r2.g), b: K(r2.b), a: N(r2.a, 0, 1) };
} })[n.HEX] = function(t2, e2, n2) {
var r2 = this.mix(t2, e2);
return delete r2.a, n2 ? Z.HEX(r2) : ft.HEX(r2);
}, M.HEXA = function(t2, e2, n2) {
var r2 = this.mix(t2, e2);
return r2.a = n2 ? 255 * tt(r2.a) : tt(r2.a), n2 ? Z.HEX(r2) : ft.HEXA(r2);
}, M[n.RGB] = function(t2, e2, n2, r2) {
var i2 = this.mix(t2, e2);
return delete i2.a, n2 ? Z.RGB(i2, r2) : ft.RGB(i2, r2.decimals);
}, M.RGBA = function(t2, e2, n2, r2) {
var i2 = this.mix(t2, e2);
return n2 ? Z.RGB(i2, r2) : ft.RGBA(i2, r2.decimals);
}, M[n.HSL] = function(t2, e2, n2, r2) {
var i2 = this.mix(t2, e2), o2 = _(i2.r, i2.g, i2.b);
return delete i2.a, delete o2.a, n2 ? Z.HSL(o2, r2) : ft.HSL(i2, r2.decimals);
}, M.HSLA = function(t2, e2, n2, r2) {
var i2 = this.mix(t2, e2), o2 = _(i2.r, i2.g, i2.b, i2.a);
return n2 ? Z.HSL(o2, r2) : ft.HSLA(i2, r2.decimals);
}, M);
var mt = function(e2, n2) {
var r2 = K(e2.r, n2), i2 = K(e2.g, n2), o2 = K(e2.b, n2);
return t({ r: r2, g: i2, b: o2 }, O(e2, "a") ? { a: K(e2.a, n2) } : {});
};
var bt = function(e2, n2) {
return t({ h: K(e2.h, n2), s: K(e2.s, n2), l: K(e2.l, n2) }, O(e2, "a") ? { a: K(e2.a, n2) } : {});
};
var At = function(t2, e2) {
return { c: K(t2.c, e2), m: K(t2.m, e2), y: K(t2.y, e2), k: K(t2.k, e2) };
};
var yt = function(t2, e2, n2, r2) {
return r2(lt(t2, e2), n2);
};
var Et = function(t2, e2, n2, r2, i2) {
n2 < 1 && (n2 = 5);
var o2 = function(t3, e3, n3) {
var r3 = n3 - 1, i3 = (e3.r - t3.r) / r3, o3 = (e3.g - t3.g) / r3, a2 = (e3.b - t3.b) / r3, c2 = tt(t3.a), u2 = (tt(e3.a) - c2) / r3;
return Array(n3).fill(null).map(function(n4, s2) {
return 0 === s2 ? t3 : s2 === r3 ? e3 : { r: K(t3.r + i3 * s2), g: K(t3.g + o3 * s2), b: K(t3.b + a2 * s2), a: K(c2 + u2 * s2) };
});
}(lt(t2), lt(e2), n2);
return o2.map(function(t3) {
return i2(t3, r2);
});
};
var Ft = function() {
function n2(t2, e2) {
void 0 === e2 && (e2 = {}), this._options = U(e2, t2), this.rgb = lt(t2), this.updateHSL(), this.updateCMYK();
}
return n2.prototype.updateRGB = function() {
this.rgb = t(t({}, x(this.hsl.h, this.hsl.s, this.hsl.l)), { a: this.hsl.a });
}, n2.prototype.updateRGBFromCMYK = function() {
this.rgb = t(t({}, V(this.cmyk.c, this.cmyk.m, this.cmyk.y, this.cmyk.k)), { a: this.rgb.a });
}, n2.prototype.updateHSL = function() {
this.hsl = _(this.rgb.r, this.rgb.g, this.rgb.b, this.rgb.a);
}, n2.prototype.updateCMYK = function() {
this.cmyk = q(this.rgb.r, this.rgb.g, this.rgb.b);
}, n2.prototype.updateRGBAndCMYK = function() {
return this.updateRGB(), this.updateCMYK(), this;
}, n2.prototype.updateHSLAndCMYK = function() {
return this.updateHSL(), this.updateCMYK(), this;
}, n2.prototype.updateRGBAndHSL = function() {
return this.updateRGBFromCMYK(), this.updateHSL(), this;
}, n2.prototype.setOptions = function(e2) {
return void 0 === e2 && (e2 = {}), this._options = t(t({}, this._options), e2), this;
}, n2.prototype.setH = function(t2) {
return this.hsl.h = T(t2), this.updateRGBAndCMYK();
}, n2.prototype.setS = function(t2) {
return this.hsl.s = N(t2, 0, 100), this.updateRGBAndCMYK();
}, n2.prototype.setL = function(t2) {
return this.hsl.l = N(t2, 0, 100), this.updateRGBAndCMYK();
}, n2.prototype.setR = function(t2) {
return this.rgb.r = N(t2, 0, 255), this.updateHSLAndCMYK();
}, n2.prototype.setG = function(t2) {
return this.rgb.g = N(t2, 0, 255), this.updateHSLAndCMYK();
}, n2.prototype.setB = function(t2) {
return this.rgb.b = N(t2, 0, 255), this.updateHSLAndCMYK();
}, n2.prototype.setA = function(t2) {
return this.hsl.a = this.rgb.a = N(t2, 0, 1), this;
}, n2.prototype.setC = function(t2) {
return this.cmyk.c = N(t2, 0, 100), this.updateRGBAndHSL();
}, n2.prototype.setM = function(t2) {
return this.cmyk.m = N(t2, 0, 100), this.updateRGBAndHSL();
}, n2.prototype.setY = function(t2) {
return this.cmyk.y = N(t2, 0, 100), this.updateRGBAndHSL();
}, n2.prototype.setK = function(t2) {
return this.cmyk.k = N(t2, 0, 100), this.updateRGBAndHSL();
}, Object.defineProperty(n2.prototype, "options", { get: function() {
return this._options;
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "H", { get: function() {
return K(this.hsl.h, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "S", { get: function() {
return K(this.hsl.s, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "L", { get: function() {
return K(this.hsl.l, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "R", { get: function() {
return K(this.rgb.r, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "G", { get: function() {
return K(this.rgb.g, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "B", { get: function() {
return K(this.rgb.b, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "A", { get: function() {
return K(this.hsl.a, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "C", { get: function() {
return K(this.cmyk.c, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "M", { get: function() {
return K(this.cmyk.m, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "Y", { get: function() {
return K(this.cmyk.y, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "K", { get: function() {
return K(this.cmyk.k, this.options.decimals);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HEXObject", { get: function() {
return ft.HEX(this.rgb);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HEXAObject", { get: function() {
return ft.HEXA(this.rgb);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "RGBObject", { get: function() {
return { r: this.R, g: this.G, b: this.B };
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "RGBAObject", { get: function() {
return t(t({}, this.RGBObject), { a: this.A });
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HSLObject", { get: function() {
return { h: this.H, s: this.S, l: this.L };
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HSLAObject", { get: function() {
return t(t({}, this.HSLObject), { a: this.A });
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "CMYKObject", { get: function() {
return { c: this.C, m: this.M, y: this.Y, k: this.K };
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "CMYKAObject", { get: function() {
return t(t({}, this.CMYKObject), { a: this.A });
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HEX", { get: function() {
return Z.HEX({ r: this.R, g: this.G, b: this.B });
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HEXA", { get: function() {
return Z.HEX({ r: this.R, g: this.G, b: this.B, a: 255 * this.A });
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "RGB", { get: function() {
return Z.RGB({ r: this.R, g: this.G, b: this.B }, this.options);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "RGBA", { get: function() {
return Z.RGB({ r: this.R, g: this.G, b: this.B, a: this.A }, this.options);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HSL", { get: function() {
return Z.HSL({ h: this.H, s: this.S, l: this.L }, this.options);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HSLA", { get: function() {
return Z.HSL({ h: this.H, s: this.S, l: this.L, a: this.A }, this.options);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "CMYK", { get: function() {
return Z.CMYK({ c: this.C, m: this.M, y: this.Y, k: this.K }, this.options);
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "CMYKA", { get: function() {
return Z.CMYK({ c: this.C, m: this.M, y: this.Y, k: this.K, a: this.A }, this.options);
}, enumerable: false, configurable: true }), n2.toHEXObject = function(t2) {
var e2 = ut(t2);
return yt(t2, e2, 0, ft.HEX);
}, n2.toHEX = function(t2) {
return Z.HEX(n2.toHEXObject(t2));
}, n2.toHEXAObject = function(t2) {
var e2 = ut(t2);
return yt(t2, e2, 0, ft.HEXA);
}, n2.toHEXA = function(t2) {
return Z.HEX(n2.toHEXAObject(t2));
}, n2.toRGBObject = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2);
return yt(t2, n3, e2.decimals, ft.RGB);
}, n2.toRGB = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.RGB);
return Z.RGB(i2, r2);
}, n2.toRGBAObject = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2);
return yt(t2, n3, e2.decimals, ft.RGBA);
}, n2.toRGBA = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.RGBA);
return Z.RGB(i2, r2);
}, n2.toHSLObject = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2);
return yt(t2, n3, e2.decimals, ft.HSL);
}, n2.toHSL = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.HSL);
return Z.HSL(i2, r2);
}, n2.toHSLAObject = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2);
return yt(t2, n3, e2.decimals, ft.HSLA);
}, n2.toHSLA = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.HSLA);
return Z.HSL(i2, r2);
}, n2.toCMYKObject = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2);
return yt(t2, n3, e2.decimals, ft.CMYK);
}, n2.toCMYK = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.CMYK);
return Z.CMYK(i2, r2);
}, n2.toCMYKAObject = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2);
return yt(t2, n3, e2.decimals, ft.CMYKA);
}, n2.toCMYKA = function(t2, e2) {
void 0 === e2 && (e2 = {});
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.CMYKA);
return Z.CMYK(i2, r2);
}, n2.getBlendHEXObject = function(t2, e2, n3) {
return void 0 === n3 && (n3 = 5), Et(t2, e2, n3, 0, ft.HEX);
}, n2.getBlendHEX = function(t2, e2, r2) {
return void 0 === r2 && (r2 = 5), n2.getBlendHEXObject(t2, e2, r2).map(function(t3) {
return Z.HEX(t3);
});
}, n2.getBlendHEXAObject = function(t2, e2, n3) {
return void 0 === n3 && (n3 = 5), Et(t2, e2, n3, 0, ft.HEXA);
}, n2.getBlendHEXA = function(t2, e2, r2) {
return void 0 === r2 && (r2 = 5), n2.getBlendHEXAObject(t2, e2, r2).map(function(t3) {
return Z.HEX(t3);
});
}, n2.getBlendRGBObject = function(t2, e2, n3, r2) {
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, r2.decimals, ft.RGB);
}, n2.getBlendRGB = function(t2, e2, n3, r2) {
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, 6, ft.RGB).map(function(n4) {
return Z.RGB(n4, U(r2, t2, e2));
});
}, n2.getBlendRGBAObject = function(t2, e2, n3, r2) {
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, r2.decimals, ft.RGBA);
}, n2.getBlendRGBA = function(t2, e2, n3, r2) {
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, 6, ft.RGBA).map(function(n4) {
return Z.RGB(n4, U(r2, t2, e2));
});
}, n2.getBlendHSLObject = function(t2, e2, n3, r2) {
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, r2.decimals, ft.HSL);
}, n2.getBlendHSL = function(t2, e2, n3, r2) {
void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {});
var i2 = U(r2, t2, e2);
return Et(t2, e2, n3, 6, ft.HSL).map(function(t3) {
return Z.HSL(t3, i2);
});
}, n2.getBlendHSLAObject = function(t2, e2, n3, r2) {
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, r2.decimals, ft.HSLA);
}, n2.getBlendHSLA = function(t2, e2, n3, r2) {
void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {});
var i2 = U(r2, t2, e2);
return Et(t2, e2, n3, 6, ft.HSLA).map(function(t3) {
return Z.HSL(t3, i2);
});
}, n2.getMixHEXObject = function(t2, e2) {
return void 0 === e2 && (e2 = i.ADDITIVE), gt.HEX(t2, e2, false);
}, n2.getMixHEX = function(t2, e2) {
return void 0 === e2 && (e2 = i.ADDITIVE), gt.HEX(t2, e2, true);
}, n2.getMixHEXAObject = function(t2, e2) {
return void 0 === e2 && (e2 = i.ADDITIVE), gt.HEXA(t2, e2, false);
}, n2.getMixHEXA = function(t2, e2) {
return void 0 === e2 && (e2 = i.ADDITIVE), gt.HEXA(t2, e2, true);
}, n2.getMixRGBObject = function(t2, n3, r2) {
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.RGB(t2, n3, false, U.apply(void 0, e([r2], t2, false)));
}, n2.getMixRGB = function(t2, n3, r2) {
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.RGB(t2, n3, true, U.apply(void 0, e([r2], t2, false)));
}, n2.getMixRGBAObject = function(t2, n3, r2) {
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.RGBA(t2, n3, false, U.apply(void 0, e([r2], t2, false)));
}, n2.getMixRGBA = function(t2, n3, r2) {
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.RGBA(t2, n3, true, U.apply(void 0, e([r2], t2, false)));
}, n2.getMixHSLObject = function(t2, n3, r2) {
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.HSL(t2, n3, false, U.apply(void 0, e([r2], t2, false)));
}, n2.getMixHSL = function(t2, n3, r2) {
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.HSL(t2, n3, true, U.apply(void 0, e([r2], t2, false)));
}, n2.getMixHSLAObject = function(t2, n3, r2) {
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.HSLA(t2, n3, false, U.apply(void 0, e([r2], t2, false)));
}, n2.getMixHSLA = function(t2, n3, r2) {
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.HSLA(t2, n3, true, U.apply(void 0, e([r2], t2, false)));
}, n2.getShades = function(t2, e2, n3) {
return void 0 === n3 && (n3 = {}), ht(t2, e2, true, U(n3, t2));
}, n2.getTints = function(t2, e2, n3) {
return void 0 === n3 && (n3 = {}), ht(t2, e2, false, U(n3, t2));
}, n2.getHarmony = function(t2, e2, n3, o2) {
return void 0 === e2 && (e2 = r.COMPLEMENTARY), void 0 === n3 && (n3 = i.ADDITIVE), void 0 === o2 && (o2 = {}), function(t3, e3, n4, i2) {
var o3;
return (o3 = {}, o3[r.ANALOGOUS] = pt.buildHarmony(e3, nt, n4, i2), o3[r.COMPLEMENTARY] = pt.buildHarmony(e3, rt, n4, i2), o3[r.SPLIT_COMPLEMENTARY] = pt.buildHarmony(e3, it, n4, i2), o3[r.TRIADIC] = pt.buildHarmony(e3, ot, n4, i2), o3[r.TETRADIC] = pt.buildHarmony(e3, at, n4, i2), o3[r.SQUARE] = pt.buildHarmony(e3, ct, n4, i2), o3)[t3];
}(e2, t2, n3, U(o2, t2));
}, n2;
}();
// src/SettingsTab.ts
var DISPLAY_OPTIONS = {
"none": "Never",
"if_header_shown": "If Header Shown",
"always": "Always"
};
var SettingsTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
this.pickrs = {};
this.disableableComponents = {};
}
/**
* Builds the html page that is showed in the settings.
*/
display() {
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h2", { text: "Settings for the Code Styler Plugin." });
this.disableableComponents = {
"lineNumbers": [],
"wrapLines": [],
"headerLanguageTags": [],
"headerLanguageIcons": [],
"editorActiveLineHighlight": [],
"codeblockActiveLineHighlight": [],
"gradientHighlighting": [],
"languageBorderColour": []
};
let ignoreTimeout = setTimeout(() => {
});
new import_obsidian.Setting(containerEl).setName("Ignore Codeblocks").setDesc("Define languages in a comma separated list which the plugin should completely ignore. You can use a wildcard (*) either at the beginning, or at the end. For example: ad-* will exclude codeblocks where the language starts with ad- e.g.: ad-info, ad-error etc.").addText((text3) => text3.setPlaceholder("e.g. dataview, dataviewjs etc.").setValue(this.plugin.settings.excludedCodeblocks).onChange((value) => {
this.plugin.settings.excludedCodeblocks = value;
(async () => {
await this.plugin.saveSettings();
})();
clearTimeout(ignoreTimeout);
ignoreTimeout = setTimeout(() => this.plugin.rerenderPreview(), 1e3);
}));
let excludeTimeout = setTimeout(() => {
});
new import_obsidian.Setting(containerEl).setName("Exclude Languages").setDesc("Define languages in a comma separated list which the plugin should not decorate. You can use a wildcard (*) either at the beginning, or at the end. For example: ad-* will exclude codeblocks where the language starts with ad- e.g.: ad-info, ad-error etc.").addText((text3) => text3.setPlaceholder("e.g. ad-*, python etc.").setValue(this.plugin.settings.excludedLanguages).onChange((value) => {
this.plugin.settings.excludedLanguages = value;
(async () => {
await this.plugin.saveSettings();
})();
clearTimeout(excludeTimeout);
excludeTimeout = setTimeout(() => this.plugin.rerenderPreview(), 1e3);
}));
new import_obsidian.Setting(containerEl).setName("Style Code on Export").setDesc("If enabled, styling will be applied when exporting to PDF.").addToggle((toggle) => toggle.setValue(this.plugin.settings.decoratePrint).onChange((value) => {
this.plugin.settings.decoratePrint = value;
(async () => {
await this.plugin.saveSettings();
})();
}));
containerEl.createEl("h3", { text: "Theme Settings" });
let themeDropdown;
new import_obsidian.Setting(containerEl).setName("Select Theme").addDropdown((dropdown) => {
themeDropdown = dropdown;
this.updateDropdown(themeDropdown, this.plugin.settings);
themeDropdown.onChange((value) => {
this.plugin.settings.selectedTheme = value;
this.plugin.settings.currentTheme = structuredClone(this.plugin.settings.themes[this.plugin.settings.selectedTheme]);
this.display();
(async () => {
await this.plugin.saveSettings();
})();
});
}).addExtraButton((button) => {
button.setTooltip("Update theme");
button.setIcon("save");
button.onClick(() => {
if (this.plugin.settings.selectedTheme in DEFAULT_SETTINGS.themes)
new import_obsidian.Notice("You cannot update the default themes");
else {
this.plugin.settings.themes[this.plugin.settings.selectedTheme] = structuredClone(this.plugin.settings.currentTheme);
this.updateAlternativeHighlights(alternativeHighlightsContainer);
new import_obsidian.Notice(`${this.plugin.settings.selectedTheme} theme saved successfully!`);
(async () => {
await this.plugin.saveSettings();
})();
}
});
}).addExtraButton((button) => {
button.setTooltip("Delete theme");
button.setIcon("trash");
button.onClick(() => {
if (this.plugin.settings.selectedTheme.trim().length === 0)
new import_obsidian.Notice("Select a theme first to delete");
else if (this.plugin.settings.selectedTheme in DEFAULT_SETTINGS.themes)
new import_obsidian.Notice("You cannot delete the default themes");
else {
delete this.plugin.settings.themes[this.plugin.settings.selectedTheme];
new import_obsidian.Notice(`${this.plugin.settings.selectedTheme} theme deleted successfully!`);
this.plugin.settings.selectedTheme = "Default";
this.plugin.settings.currentTheme = structuredClone(this.plugin.settings.themes[this.plugin.settings.selectedTheme]);
this.updateDropdown(themeDropdown, this.plugin.settings);
this.display();
(async () => {
await this.plugin.saveSettings();
})();
}
});
});
let newThemeName;
let newThemeDefault;
this.plugin.settings.newTheme = "";
new import_obsidian.Setting(containerEl).setName("Add New Theme").setDesc("Create a new theme from the current settings.").addText((text3) => {
newThemeName = text3.setPlaceholder("New theme name").setValue(this.plugin.settings.newTheme).onChange((value) => {
this.plugin.settings.newTheme = value;
});
}).addExtraButton((button) => {
button.setTooltip("Save theme");
button.setIcon("plus");
button.onClick(() => {
if (this.plugin.settings.newTheme.trim().length === 0)
new import_obsidian.Notice("Set a name for your theme");
else if (this.plugin.settings.newTheme in DEFAULT_SETTINGS.themes)
new import_obsidian.Notice("You can't overwrite the default themes");
else {
if (this.plugin.settings.newTheme in this.plugin.settings.themes) {
this.plugin.settings.themes[this.plugin.settings.newTheme] = structuredClone(this.plugin.settings.currentTheme);
new import_obsidian.Notice(`${this.plugin.settings.newTheme} theme updated successfully!`);
} else {
this.plugin.settings.themes[this.plugin.settings.newTheme] = structuredClone(this.plugin.settings.currentTheme);
new import_obsidian.Notice(`${this.plugin.settings.newTheme} theme saved successfully!`);
}
this.plugin.settings.selectedTheme = this.plugin.settings.newTheme;
this.updateDropdown(themeDropdown, this.plugin.settings);
this.updateAlternativeHighlights(alternativeHighlightsContainer);
this.plugin.settings.newTheme = "";
newThemeName.setValue("");
newThemeDefault.setValue(false);
(async () => {
await this.plugin.saveSettings();
})();
}
});
});
containerEl.createEl("h4", { text: "Codeblock Appearance" });
new import_obsidian.Setting(containerEl).setName("Codeblock Background Colour").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"codeblock_background",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].codeblock.backgroundColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].codeblock.backgroundColour = saveColour;
}
);
});
new import_obsidian.Setting(containerEl).setName("Codeblock Text Colour").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"codeblock_text",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].codeblock.textColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].codeblock.textColour = saveColour;
}
);
});
new import_obsidian.Setting(containerEl).setName("Unwrap codeblock lines").setDesc("Choose whether to unwrap lines in reading mode").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.codeblock.unwrapLines).onChange((value) => {
this.plugin.settings.currentTheme.settings.codeblock.unwrapLines = value;
if (!value)
wrapLinesActiveToggle.setValue(false);
this.disableableComponents["wrapLines"].forEach((component) => {
component.setDisabled(!value);
});
(async () => {
await this.plugin.saveSettings();
})();
this.plugin.rerenderPreview();
}));
new import_obsidian.Setting(containerEl).setName("Codeblock Curvature").setDesc("Determines how rounded the codeblocks appear in pixels.").then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(0, 25, 1).setValue(this.plugin.settings.currentTheme.settings.codeblock.curvature).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.codeblock.curvature = value;
(async () => {
await this.plugin.saveSettings();
})();
});
});
setting.addExtraButton((button) => {
button.setIcon("reset").setTooltip("Restore default curvature").onClick(() => {
this.plugin.settings.currentTheme.settings.codeblock.curvature = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.codeblock.curvature;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.codeblock.curvature);
(async () => {
await this.plugin.saveSettings();
})();
});
});
});
containerEl.createEl("h4", { text: "Gutter Appearance" });
new import_obsidian.Setting(containerEl).setName("Enable Line Numbers").setDesc("If disabled, the below settings are disabled too.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.codeblock.lineNumbers).onChange((value) => {
this.plugin.settings.currentTheme.settings.codeblock.lineNumbers = value;
this.disableableComponents["lineNumbers"].forEach((component) => {
component.setDisabled(!value);
});
(async () => {
await this.plugin.saveSettings();
})();
}));
new import_obsidian.Setting(containerEl).setName("Gutter Background Colour").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"gutter_background",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].gutter.backgroundColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].gutter.backgroundColour = saveColour;
},
() => !this.plugin.settings.currentTheme.settings.codeblock.lineNumbers
);
});
this.disableableComponents["lineNumbers"].push(this.pickrs["gutter_background"].resetButton);
new import_obsidian.Setting(containerEl).setName("Line Number Colour").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"line_number",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].gutter.textColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].gutter.textColour = saveColour;
},
() => !this.plugin.settings.currentTheme.settings.codeblock.lineNumbers
);
});
this.disableableComponents["lineNumbers"].push(this.pickrs["line_number"].resetButton);
new import_obsidian.Setting(containerEl).setName("Highlight Line Numbers").setDesc("If enabled, highlights will also highlight the line numbers.").addToggle((toggle) => {
const highlightLineNumbersToggle = toggle.setValue(this.plugin.settings.currentTheme.settings.gutter.highlight).setDisabled(!this.plugin.settings.currentTheme.settings.codeblock.lineNumbers).onChange((value) => {
this.plugin.settings.currentTheme.settings.gutter.highlight = value;
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["lineNumbers"].push(highlightLineNumbersToggle);
});
new import_obsidian.Setting(containerEl).setName("Indicate Current Line Number").setDesc("If enabled, the current line number in codeblocks will be indicated with a separate colour.").setClass("code-styler-spaced").addToggle((toggle) => {
const indicateCurrentLineNumberToggle = toggle.setValue(this.plugin.settings.currentTheme.settings.gutter.activeLine).setDisabled(!this.plugin.settings.currentTheme.settings.codeblock.lineNumbers).onChange((value) => {
this.plugin.settings.currentTheme.settings.gutter.activeLine = value;
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["lineNumbers"].push(indicateCurrentLineNumberToggle);
}).then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"active_line_number",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].gutter.activeTextColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].gutter.activeTextColour = saveColour;
},
() => !this.plugin.settings.currentTheme.settings.codeblock.lineNumbers
);
});
containerEl.createEl("h4", { text: "Header Appearance" });
new import_obsidian.Setting(containerEl).setName("Header Background Colour").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"header_background",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.backgroundColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].header.backgroundColour = saveColour;
}
);
});
new import_obsidian.Setting(containerEl).setName("Header Font Size").setDesc("Set the font size for header language tags and titles.").then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(6, 32, 1).setValue(this.plugin.settings.currentTheme.settings.header.fontSize).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.header.fontSize = value;
(async () => {
await this.plugin.saveSettings();
})();
});
});
setting.addExtraButton((button) => {
button.setIcon("reset").setTooltip("Restore default font size").onClick(() => {
this.plugin.settings.currentTheme.settings.header.fontSize = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.header.fontSize;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.header.fontSize);
(async () => {
await this.plugin.saveSettings();
})();
});
});
});
new import_obsidian.Setting(containerEl).setName("Header Title Text Styling").setDesc("Style the header title text using bold and italic toggles, by setting a font or by setting a text colour.").addToggle((toggle) => {
toggle.setTooltip("Toggle bold title text").setValue(this.plugin.settings.currentTheme.settings.header.title.textBold).onChange((value) => {
this.plugin.settings.currentTheme.settings.header.title.textBold = value;
(async () => {
await this.plugin.saveSettings();
})();
});
}).addToggle((toggle) => {
toggle.setTooltip("Toggle italic title text").setValue(this.plugin.settings.currentTheme.settings.header.title.textItalic).onChange((value) => {
this.plugin.settings.currentTheme.settings.header.title.textItalic = value;
(async () => {
await this.plugin.saveSettings();
})();
});
}).addText((text3) => {
text3.setPlaceholder("Font").setValue(this.plugin.settings.currentTheme.settings.header.title.textFont).onChange((value) => {
this.plugin.settings.currentTheme.settings.header.title.textFont = value;
(async () => {
await this.plugin.saveSettings();
})();
});
}).then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"header_title_text",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.title.textColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].header.title.textColour = saveColour;
}
);
});
let collapsePlaceholderTimeout = setTimeout(() => {
});
new import_obsidian.Setting(containerEl).setName("Collapse Placeholder Text").setDesc("Title placeholder text for collapsed code when no title parameter is set.").addText((text3) => text3.setPlaceholder("Collapsed Code").setValue(this.plugin.settings.currentTheme.settings.header.collapsePlaceholder).onChange((value) => {
this.plugin.settings.currentTheme.settings.header.collapsePlaceholder = value;
(async () => {
await this.plugin.saveSettings();
})();
clearTimeout(collapsePlaceholderTimeout);
collapsePlaceholderTimeout = setTimeout(() => this.plugin.rerenderPreview(), 1e3);
}));
new import_obsidian.Setting(containerEl).setName("Header Separator Colour").setDesc("Colour of the line separating the codeblock header and the codeblock.").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"header_separator",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.lineColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].header.lineColour = saveColour;
}
);
});
containerEl.createEl("h5", { text: "Header Language Tag Appearance" });
new import_obsidian.Setting(containerEl).setName("Display Header Language Tags").setDesc('Determine when to show language tags in the header. "Title Only" will only show language tags when the title parameter is set. If set to "None", the below settings are disabled too.').addDropdown((dropdown) => dropdown.addOptions(DISPLAY_OPTIONS).setValue(this.plugin.settings.currentTheme.settings.header.languageTag.display).onChange((value) => {
this.plugin.settings.currentTheme.settings.header.languageTag.display = value;
this.disableableComponents["headerLanguageTags"].forEach((component) => {
component.setDisabled(value === "none");
});
(async () => {
await this.plugin.saveSettings();
})();
}));
new import_obsidian.Setting(containerEl).setName("Header Language Tag Background Colour").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"header_language_tag_background",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.languageTag.backgroundColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].header.languageTag.backgroundColour = saveColour;
},
() => this.plugin.settings.currentTheme.settings.header.languageTag.display === "none"
);
});
this.disableableComponents["headerLanguageTags"].push(this.pickrs["header_language_tag_background"].resetButton);
let languageTagsBoldToggle;
let languageTagsItalicToggle;
let languageIconsFontText;
new import_obsidian.Setting(containerEl).setName("Header Language Tag Text Styling").setDesc("Style the header language tag text using bold and italic toggles, by setting a font or by setting a text colour.").addToggle((toggle) => {
languageTagsBoldToggle = toggle.setTooltip("Toggle bold language tag text").setValue(this.plugin.settings.currentTheme.settings.header.languageTag.textBold).setDisabled(this.plugin.settings.currentTheme.settings.header.languageTag.display === "none").onChange((value) => {
this.plugin.settings.currentTheme.settings.header.languageTag.textBold = value;
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["headerLanguageTags"].push(languageTagsBoldToggle);
}).addToggle((toggle) => {
languageTagsItalicToggle = toggle.setTooltip("Toggle italic language tag text").setValue(this.plugin.settings.currentTheme.settings.header.languageTag.textItalic).setDisabled(this.plugin.settings.currentTheme.settings.header.languageTag.display === "none").onChange((value) => {
this.plugin.settings.currentTheme.settings.header.languageTag.textItalic = value;
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["headerLanguageTags"].push(languageTagsItalicToggle);
}).addText((text3) => {
languageIconsFontText = text3.setPlaceholder("Font").setValue(this.plugin.settings.currentTheme.settings.header.languageTag.textFont).setDisabled(this.plugin.settings.currentTheme.settings.header.languageTag.display === "none").onChange((value) => {
this.plugin.settings.currentTheme.settings.header.languageTag.textFont = value;
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["headerLanguageTags"].push(languageIconsFontText);
}).then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"header_language_tag_text",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.languageTag.textColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].header.languageTag.textColour = saveColour;
},
() => this.plugin.settings.currentTheme.settings.header.languageTag.display === "none"
);
});
this.disableableComponents["headerLanguageTags"].push(this.pickrs["header_language_tag_text"].resetButton);
containerEl.createEl("h5", { text: "Header Language Icon Appearance" });
new import_obsidian.Setting(containerEl).setName("Display Header Language Icons").setDesc('Determine when to show language icons where available. "Title Only" will only show language tags when the title parameter is set. If set to "None", the below settings are disabled too.').addDropdown((dropdown) => dropdown.addOptions(DISPLAY_OPTIONS).setValue(this.plugin.settings.currentTheme.settings.header.languageIcon.display).onChange((value) => {
this.plugin.settings.currentTheme.settings.header.languageIcon.display = value;
this.disableableComponents["headerLanguageIcons"].forEach((component) => {
component.setDisabled(value === "none");
});
(async () => {
await this.plugin.saveSettings();
})();
}));
let languageIconsColouredToggle;
new import_obsidian.Setting(containerEl).setName("Language Icons Coloured").setDesc("If disabled, language icons will be black and white.").addToggle((toggle) => {
languageIconsColouredToggle = toggle.setValue(this.plugin.settings.currentTheme.settings.header.languageIcon.displayColour).setDisabled(this.plugin.settings.currentTheme.settings.header.languageIcon.display === "none").onChange((value) => {
this.plugin.settings.currentTheme.settings.header.languageIcon.displayColour = value;
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["headerLanguageIcons"].push(languageIconsColouredToggle);
});
new import_obsidian.Setting(containerEl).setName("Language Icon Size").setDesc("Set the size of the displayed language icons.").then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(10, 40, 1).setValue(this.plugin.settings.currentTheme.settings.advanced.iconSize).setDisabled(this.plugin.settings.currentTheme.settings.header.languageIcon.display === "none").setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.advanced.iconSize = value;
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["headerLanguageIcons"].push(resettableSlider);
});
let resetButton;
setting.addExtraButton((button) => {
resetButton = button.setIcon("reset").setDisabled(this.plugin.settings.currentTheme.settings.header.languageIcon.display === "none").setTooltip("Restore default icon size").onClick(() => {
this.plugin.settings.currentTheme.settings.advanced.iconSize = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.advanced.iconSize;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.advanced.iconSize);
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["headerLanguageIcons"].push(resetButton);
});
});
containerEl.createEl("h4", { text: "Highlighting Appearance" });
new import_obsidian.Setting(containerEl).setName("Editor Active Line Highlight").setDesc("If enabled, highlights the active line outside codeblocks.").setClass("code-styler-spaced").addToggle((toggle) => {
return toggle.setTooltip("Toggle editor active line highlighting").setValue(this.plugin.settings.currentTheme.settings.highlights.activeEditorLine).onChange((value) => {
this.plugin.settings.currentTheme.settings.highlights.activeEditorLine = value;
this.disableableComponents["editorActiveLineHighlight"].forEach((component) => {
component.setDisabled(!value);
});
(async () => {
await this.plugin.saveSettings();
})();
});
}).then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"editor_active_line_highlight",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].highlights.activeEditorLineColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].highlights.activeEditorLineColour = saveColour;
},
() => !this.plugin.settings.currentTheme.settings.highlights.activeEditorLine
);
});
this.disableableComponents["editorActiveLineHighlight"].push(this.pickrs["editor_active_line_highlight"].resetButton);
new import_obsidian.Setting(containerEl).setName("Codeblock Active Line Highlight").setDesc("If enabled, highlights the active line inside codeblocks.").setClass("code-styler-spaced").addToggle((toggle) => {
return toggle.setValue(this.plugin.settings.currentTheme.settings.highlights.activeCodeblockLine).onChange((value) => {
this.plugin.settings.currentTheme.settings.highlights.activeCodeblockLine = value;
this.disableableComponents["codeblockActiveLineHighlight"].forEach((component) => {
component.setDisabled(!value);
});
(async () => {
await this.plugin.saveSettings();
})();
});
}).then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"codeblock_active_line_highlight",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].highlights.activeCodeblockLineColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].highlights.activeCodeblockLineColour = saveColour;
},
() => !this.plugin.settings.currentTheme.settings.highlights.activeCodeblockLine
);
});
this.disableableComponents["codeblockActiveLineHighlight"].push(this.pickrs["codeblock_active_line_highlight"].resetButton);
new import_obsidian.Setting(containerEl).setName("Default Highlight Colour").setDesc("Used by the 'hl' parameter.").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"default_highlight",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].highlights.defaultColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].highlights.defaultColour = saveColour;
}
);
});
let newHighlightText;
new import_obsidian.Setting(containerEl).setName("Add Alternative Highlight").setDesc("Define a new alternative highlight name. The colour can be modified after it is added.").addText((value) => {
newHighlightText = value.setPlaceholder("e.g. error, warn").onChange((value2) => {
this.plugin.settings.newHighlight = value2;
});
}).addButton((button) => {
button.setButtonText("Add");
button.onClick(() => {
if (this.plugin.settings.newHighlight.trim() === "")
new import_obsidian.Notice("Please enter a colour name.");
else if (!/^[^\d]\w*$/.test(this.plugin.settings.newHighlight))
new import_obsidian.Notice(`"${this.plugin.settings.newHighlight}" is not a valid colour name.`);
else if (this.plugin.settings.newHighlight.trim().toLowerCase() === "hl")
new import_obsidian.Notice("Cannot override the default highlight parameter.");
else if (PARAMETERS.includes(this.plugin.settings.newHighlight.trim().toLowerCase()))
new import_obsidian.Notice("Cannot use other default parameters.");
else {
if (this.plugin.settings.newHighlight in this.plugin.settings.currentTheme.colours.light.highlights.alternativeHighlights)
new import_obsidian.Notice(`A highlight with the name "${this.plugin.settings.newHighlight}" already exists.`);
else {
const newColour = getRandomColour();
this.plugin.settings.currentTheme.colours.light.highlights.alternativeHighlights[this.plugin.settings.newHighlight] = newColour;
this.plugin.settings.currentTheme.colours.dark.highlights.alternativeHighlights[this.plugin.settings.newHighlight] = newColour;
this.updateAlternativeHighlights(alternativeHighlightsContainer);
new import_obsidian.Notice(`Added highlight "${this.plugin.settings.newHighlight}".`);
this.plugin.settings.newHighlight = "";
newHighlightText.setValue("");
(async () => {
await this.plugin.saveSettings();
})();
this.plugin.rerenderPreview();
}
}
});
});
const alternativeHighlightsContainer = containerEl.createDiv();
this.updateAlternativeHighlights(alternativeHighlightsContainer);
containerEl.createEl("h4", { text: "Inline Code Appearance" });
new import_obsidian.Setting(containerEl).setName("Syntax Highlight Inline Code").setDesc("If enabled, in reading mode, inline code will be syntax highlighted based on a language set with `{language} highlighted_inline_code`. See the README for more information.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.inline.syntaxHighlight).onChange((value) => {
this.plugin.settings.currentTheme.settings.inline.syntaxHighlight = value;
(async () => {
await this.plugin.saveSettings();
})();
this.plugin.rerenderPreview();
}));
new import_obsidian.Setting(containerEl).setName("Inline Code Background Colour").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"inline_background",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].inline.backgroundColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].inline.backgroundColour = saveColour;
}
);
});
new import_obsidian.Setting(containerEl).setName("Inline Code Text Colour").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"inline_text",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].inline.textColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].inline.textColour = saveColour;
}
);
});
new import_obsidian.Setting(containerEl).setName("Inline Code Active Text Colour").setDesc("The text colour when editing inline code.").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"inline_active_text",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].inline.activeTextColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].inline.activeTextColour = saveColour;
}
);
});
new import_obsidian.Setting(containerEl).setName("Inline Code Font Weight").setDesc("Determines how bold inline code appears.").then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(1, 9, 1).setValue(this.plugin.settings.currentTheme.settings.inline.fontWeight).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.inline.fontWeight = value;
(async () => {
await this.plugin.saveSettings();
})();
});
});
setting.addExtraButton((button) => {
button.setIcon("reset").setTooltip("Restore default font weight").onClick(() => {
this.plugin.settings.currentTheme.settings.inline.fontWeight = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.fontWeight;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.fontWeight);
(async () => {
await this.plugin.saveSettings();
})();
});
});
});
new import_obsidian.Setting(containerEl).setName("Inline Code Curvature").setDesc("Determines how rounded inline code appear in pixels.").then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(0, 12, 1).setValue(this.plugin.settings.currentTheme.settings.inline.curvature).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.inline.curvature = value;
(async () => {
await this.plugin.saveSettings();
})();
});
});
setting.addExtraButton((button) => {
button.setIcon("reset").setTooltip("Restore default curvature").onClick(() => {
this.plugin.settings.currentTheme.settings.inline.curvature = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.curvature;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.curvature);
(async () => {
await this.plugin.saveSettings();
})();
});
});
});
new import_obsidian.Setting(containerEl).setName("Inline Code Vertical Padding").setDesc("Determines how much vertical inner padding in pixels inline code has.").then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(0, 10, 1).setValue(this.plugin.settings.currentTheme.settings.inline.paddingVertical).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.inline.paddingVertical = value;
(async () => {
await this.plugin.saveSettings();
})();
});
});
setting.addExtraButton((button) => {
button.setIcon("reset").setTooltip("Restore default vertical padding").onClick(() => {
this.plugin.settings.currentTheme.settings.inline.paddingVertical = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.paddingVertical;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.paddingVertical);
(async () => {
await this.plugin.saveSettings();
})();
});
});
});
new import_obsidian.Setting(containerEl).setName("Inline Code Horizontal Padding").setDesc("Determines how much horizontal inner padding in pixels inline code has.").then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(0, 10, 1).setValue(this.plugin.settings.currentTheme.settings.inline.paddingHorizontal).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.inline.paddingHorizontal = value;
(async () => {
await this.plugin.saveSettings();
})();
});
});
setting.addExtraButton((button) => {
button.setIcon("reset").setTooltip("Restore default horizontal padding").onClick(() => {
this.plugin.settings.currentTheme.settings.inline.paddingHorizontal = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.paddingHorizontal;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.paddingHorizontal);
(async () => {
await this.plugin.saveSettings();
})();
});
});
});
new import_obsidian.Setting(containerEl).setName("Inline Code Horizontal Margin").setDesc("Determines how much horizontal outer margin is added to the inline code in pixels.").then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(0, 8, 1).setValue(this.plugin.settings.currentTheme.settings.inline.marginHorizontal).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.inline.marginHorizontal = value;
(async () => {
await this.plugin.saveSettings();
})();
});
});
setting.addExtraButton((button) => {
button.setIcon("reset").setTooltip("Restore default horizontal margin").onClick(() => {
this.plugin.settings.currentTheme.settings.inline.marginHorizontal = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.marginHorizontal;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.marginHorizontal);
(async () => {
await this.plugin.saveSettings();
})();
});
});
});
new import_obsidian.Setting(containerEl).setName("Inline Code Title Colour").setDesc("The text colour of inline code titles.").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"title_text",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].inline.titleTextColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].inline.titleTextColour = saveColour;
}
);
});
new import_obsidian.Setting(containerEl).setName("Inline Code Title Font Weight").setDesc("Determines how bold inline code titles appear.").then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(1, 9, 1).setValue(this.plugin.settings.currentTheme.settings.inline.titleFontWeight).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.inline.titleFontWeight = value;
(async () => {
await this.plugin.saveSettings();
})();
});
});
setting.addExtraButton((button) => {
button.setIcon("reset").setTooltip("Restore default font weight").onClick(() => {
this.plugin.settings.currentTheme.settings.inline.titleFontWeight = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.titleFontWeight;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.titleFontWeight);
(async () => {
await this.plugin.saveSettings();
})();
});
});
});
containerEl.createEl("h3", { text: "Advanced Settings" });
let wrapLinesActiveToggle;
new import_obsidian.Setting(containerEl).setName("Wrap Lines on Click").setDesc('If enabled, in reading mode, holding click on a codeblock will wrap the lines for better visibility. This can only be used if the "Unwrap Lines" setting is enabled.').addToggle((toggle) => {
wrapLinesActiveToggle = toggle.setValue(this.plugin.settings.currentTheme.settings.codeblock.wrapLinesActive).setDisabled(!this.plugin.settings.currentTheme.settings.codeblock.unwrapLines).onChange((value) => {
this.plugin.settings.currentTheme.settings.codeblock.wrapLinesActive = value;
(async () => {
await this.plugin.saveSettings();
})();
this.plugin.rerenderPreview();
});
this.disableableComponents["wrapLines"].push(wrapLinesActiveToggle);
});
new import_obsidian.Setting(containerEl).setName("Button Colour").setDesc("Used for UI buttons like the copy code button.").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"default_highlight",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].advanced.buttonColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].advanced.buttonColour = saveColour;
}
);
});
new import_obsidian.Setting(containerEl).setName("Button Active Colour").setDesc("Colour buttons use when activated.").then((setting) => {
this.createPickr(
this.plugin,
containerEl,
setting,
"default_highlight",
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].advanced.buttonActiveColour,
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].advanced.buttonActiveColour = saveColour;
}
);
});
new import_obsidian.Setting(containerEl).setName("Gradient Highlighting").setDesc("If enabled, highlights fade away to the right. The slider sets the gradient colour stop as a percentage.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.advanced.gradientHighlights).onChange((value) => {
this.plugin.settings.currentTheme.settings.advanced.gradientHighlights = value;
this.disableableComponents["gradientHighlighting"].forEach((component) => {
component.setDisabled(!value);
});
(async () => {
await this.plugin.saveSettings();
})();
})).then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(0, 100, 1).setValue(+this.plugin.settings.currentTheme.settings.advanced.gradientHighlightsColourStop.slice(0, -1)).setDisabled(!this.plugin.settings.currentTheme.settings.advanced.gradientHighlights).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.advanced.gradientHighlightsColourStop = `${value}%`;
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["gradientHighlighting"].push(resettableSlider);
});
let resetButton;
setting.addExtraButton((button) => {
resetButton = button.setIcon("reset").setDisabled(!this.plugin.settings.currentTheme.settings.advanced.gradientHighlights).setTooltip("Restore default colour stop").onClick(() => {
this.plugin.settings.currentTheme.settings.advanced.gradientHighlightsColourStop = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.advanced.gradientHighlightsColourStop;
resettableSlider.setValue(+this.plugin.settings.currentTheme.settings.advanced.gradientHighlightsColourStop.slice(0, -1));
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["gradientHighlighting"].push(resetButton);
});
});
new import_obsidian.Setting(containerEl).setName("Language Coloured Borders").setDesc("If enabled, languages with icons display a left border with the colour of the icon. The slider sets the width of the border.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.advanced.languageBorderColour).onChange((value) => {
this.plugin.settings.currentTheme.settings.advanced.languageBorderColour = value;
this.disableableComponents["languageBorderColour"].forEach((component) => {
component.setDisabled(!value);
});
(async () => {
await this.plugin.saveSettings();
})();
})).then((setting) => {
let resettableSlider;
setting.addSlider((slider) => {
resettableSlider = slider.setLimits(0, 20, 1).setValue(this.plugin.settings.currentTheme.settings.advanced.languageBorderWidth).setDisabled(!this.plugin.settings.currentTheme.settings.advanced.languageBorderColour).setDynamicTooltip().onChange((value) => {
this.plugin.settings.currentTheme.settings.advanced.languageBorderWidth = value;
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["languageBorderColour"].push(resettableSlider);
});
let resetButton;
setting.addExtraButton((button) => {
resetButton = button.setIcon("reset").setDisabled(!this.plugin.settings.currentTheme.settings.advanced.languageBorderColour).setTooltip("Restore default colour stop").onClick(() => {
this.plugin.settings.currentTheme.settings.advanced.languageBorderWidth = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.advanced.languageBorderWidth;
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.advanced.languageBorderWidth);
(async () => {
await this.plugin.saveSettings();
})();
});
this.disableableComponents["languageBorderColour"].push(resetButton);
});
});
new import_obsidian.Setting(containerEl).setName("Redirect Language Settings").setDesc("Use this textbox to redirect specific language colours and icons as a JSON with language names as keys and either a colour key, an icon key or both as the value for a given language. Colours should be passed as CSS colours and icons should be passed as a string of the inside of an svg element. This setting is theme independent.").setClass("code-styler-setting-text-area").addTextArea((textArea) => textArea.setValue(JSON.stringify(this.plugin.settings.redirectLanguages) === "{}" ? "" : JSON.stringify(this.plugin.settings.redirectLanguages, null, 4)).setPlaceholder(JSON.stringify({ toml: { colour: "#012345", icon: LANGUAGE_ICONS_DATA["APL"] } }, null, 4)).onChange((value) => {
if (value === "") {
this.plugin.settings.redirectLanguages = {};
(async () => {
await this.plugin.saveSettings();
})();
} else {
try {
this.plugin.settings.redirectLanguages = JSON.parse(value);
this.redirectLanguages();
(async () => {
await this.plugin.saveSettings();
})();
} catch (e2) {
new import_obsidian.Notice("Invalid JSON");
}
}
}));
const donationDiv = containerEl.createEl("div", { cls: "code-styler-donation" });
const donationText = createEl("p", { text: "If you like this plugin, and would like to help support continued development, use the button below!" });
donationDiv.appendChild(donationText);
const donationButton = createEl("a", { href: "https://www.buymeacoffee.com/mayurankv2" });
donationButton.innerHTML = '<img src="https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=&slug=mayurankv2&button_colour=e3e7efa0&font_colour=262626&font_family=Inter&outline_colour=262626&coffee_colour=a0522d" height="42px">';
donationDiv.appendChild(donationButton);
}
// Setting Parsing
redirectLanguages() {
Object.entries(this.plugin.settings.redirectLanguages).forEach(([languageName, languageSettings]) => {
if ("icon" in languageSettings) {
if (LANGUAGE_NAMES[languageName] in this.plugin.languageIcons)
URL.revokeObjectURL(this.plugin.languageIcons[LANGUAGE_NAMES[languageName]]);
this.plugin.languageIcons[LANGUAGE_NAMES[languageName]] = URL.createObjectURL(new Blob([`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">${languageSettings.icon}</svg>`], { type: "image/svg+xml" }));
}
});
}
// Setting Creation
createPickr(plugin, containerEl, setting, id, getRelevantThemeColour, saveRelevantThemeColour, disabled) {
const pickr = new PickrResettable(plugin, containerEl, setting, getRelevantThemeColour, saveRelevantThemeColour);
pickr.on("show", (colour, instance) => {
if (typeof disabled !== "undefined" && disabled())
instance.hide();
}).on("save", (colour, instance) => {
const savedColour = `#${colour.toHEXA().toString().substring(1)}`;
instance.hide();
instance.addSwatch(savedColour);
instance.saveColour(savedColour);
}).on("cancel", (instance) => {
instance.hide();
});
setting.addExtraButton((button) => {
pickr.resetButton = button.setIcon("reset").setDisabled(typeof disabled !== "undefined" && disabled()).setTooltip("Restore default colour").onClick(() => {
pickr.resetColour();
});
});
this.pickrs[id] = pickr;
}
// Setting Tab Updates
updateDropdown(dropdown, settings) {
dropdown.selectEl.empty();
Object.keys(settings.themes).forEach((theme_name) => {
dropdown.addOption(theme_name, theme_name);
});
dropdown.setValue(settings.selectedTheme);
}
updateAlternativeHighlights(alternativeHighlightsContainer) {
alternativeHighlightsContainer.empty();
Object.keys(this.plugin.settings.currentTheme.colours.light.highlights.alternativeHighlights).forEach((alternativeHighlightName) => {
new import_obsidian.Setting(alternativeHighlightsContainer).setName(alternativeHighlightName).setDesc(`To highlight lines with this highlight, use the ${alternativeHighlightName} parameter.`).then((setting) => {
this.createPickr(
this.plugin,
alternativeHighlightsContainer,
setting,
`alternative_highlight_${alternativeHighlightName}`,
(relevantThemeColours) => alternativeHighlightName in relevantThemeColours.light.highlights.alternativeHighlights ? relevantThemeColours[getCurrentMode()].highlights.alternativeHighlights[alternativeHighlightName] : this.plugin.settings.currentTheme.colours[getCurrentMode()].highlights.alternativeHighlights[alternativeHighlightName],
(relevantThemeColours, saveColour) => {
relevantThemeColours[getCurrentMode()].highlights.alternativeHighlights[alternativeHighlightName] = saveColour;
}
);
setting.addExtraButton((button) => {
button.setIcon("trash").setTooltip("Delete highlight").onClick(() => {
delete this.plugin.settings.currentTheme.colours.light.highlights.alternativeHighlights[alternativeHighlightName];
delete this.plugin.settings.currentTheme.colours.dark.highlights.alternativeHighlights[alternativeHighlightName];
new import_obsidian.Notice(`Removed highlight "${alternativeHighlightName}".`);
this.updateAlternativeHighlights(alternativeHighlightsContainer);
(async () => {
await this.plugin.saveSettings();
})();
});
});
});
});
}
};
var PickrResettable = class extends import_pickr.default {
constructor(plugin, containerEl, setting, getRelevantThemeColour, saveRelevantThemeColour, tooltip) {
const settings = {
el: setting.controlEl.createDiv({ cls: "picker" }),
theme: "nano",
default: getColour(getRelevantThemeColour(plugin.settings.currentTheme.colours)),
position: "left-middle",
lockOpacity: false,
components: {
preview: true,
hue: true,
opacity: true,
interaction: {
hex: true,
rgba: true,
hsla: false,
input: true,
cancel: true,
save: true
}
},
i18n: {
"ui:dialog": "Colour picker dialog",
"btn:toggle": typeof tooltip !== "undefined" ? tooltip : "Select colour",
"btn:swatch": "Colour swatch",
"btn:last-color": "Use previous colour"
}
};
if (containerEl.parentElement !== null)
settings.container = containerEl.parentElement;
super(settings);
this.saveColour = (saveColour) => {
saveRelevantThemeColour(plugin.settings.currentTheme.colours, saveColour);
(async () => {
await plugin.saveSettings();
})();
};
this.resetColour = () => {
const resetColour = getRelevantThemeColour(plugin.settings.themes[plugin.settings.selectedTheme].colours);
this.setColor(getColour(resetColour));
this.saveColour(resetColour);
};
}
};
function getRandomColour() {
const letters = "0123456789ABCDEF";
let colour = "";
for (let i2 = 0; i2 < 6; i2++)
colour += letters[Math.floor(Math.random() * 16)];
return `#${colour}FF`;
}
function isCss(possibleCss) {
return possibleCss.startsWith("--") && typeof possibleCss === "string";
}
function calc(calcString) {
const splitString = calcString.trim().replace(/(\d*)%/g, "$1").split(" ");
const operators = {
"+": (num1, num2) => Math.max(num1 + num2, 0),
"-": (num1, num2) => Math.max(num1 - num2, 0)
};
if (splitString.length === 3) {
if (splitString[1] in operators)
return `${operators[splitString[1]](parseFloat(splitString[0]), parseFloat(splitString[2]))}%`;
}
console.warn("Warning: Couldn't parse calc string");
return calcString;
}
function getCssVariable(cssVariable) {
const variableValue = window.getComputedStyle(document.body).getPropertyValue(cssVariable).trim();
if (typeof variableValue === "string" && variableValue.trim().startsWith("#"))
return `#${variableValue.trim().substring(1)}`;
else if (variableValue.startsWith("rgb"))
return `#${Ft.toHEXA(variableValue.replace(/calc\((.*?)\)/g, (match, capture) => calc(capture))).substring(1)}`;
else if (variableValue.startsWith("hsl"))
return `#${Ft.toHEXA(variableValue.replace(/calc\((.*?)\)/g, (match, capture) => calc(capture))).substring(1)}`;
else
console.warn(`Warning: Couldn't determine colour format - ${variableValue}`);
return `#${Ft.toHEXA(variableValue).substring(1)}`;
}
function getColour(themeColour) {
return isCss(themeColour) ? getCssVariable(themeColour) : themeColour;
}
function getCurrentMode() {
const body = document.querySelector("body");
if (body !== null) {
if (body.classList.contains("theme-light"))
return "light";
else if (body.classList.contains("theme-dark"))
return "dark";
}
console.warn("Warning: Couldn't get current theme");
return "light";
}
// src/ApplyStyling.ts
var STYLE_ID = "code-styler-styles";
var THEME_STYLES = {
Prism: {
border: {
size: 1,
style: "1px solid var(--window-border-color)"
}
},
"Shimmering Focus": {
border: {
size: 1,
style: "var(--thin-muted-border)"
}
},
Minimal: {
extra: `
.markdown-source-view.mod-cm6.is-readable-line-width :not(pre.code-styler-pre) > [class^="code-styler-header-container"] {
box-sizing: border-box;
}
`
}
};
function updateStyling(settings, app) {
const currentTheme = getCurrentTheme(app);
let styleTag = document.getElementById(STYLE_ID);
if (!styleTag) {
styleTag = document.createElement("style");
styleTag.id = STYLE_ID;
document.getElementsByTagName("head")[0].appendChild(styleTag);
}
styleTag.innerText = (styleThemeColours(settings.currentTheme.colours) + styleThemeSettings(settings.currentTheme.settings, currentTheme) + styleLanguageColours(settings.currentTheme.settings, settings.redirectLanguages, currentTheme)).trim().replace(/\s+/g, " ");
addThemeSettingsClasses(settings.currentTheme.settings);
}
function styleThemeColours(themeColours) {
return Object.keys(themeColours.light.highlights.alternativeHighlights).reduce((result, alternativeHighlight) => {
return result + `
body.code-styler .code-styler-line-highlighted-${alternativeHighlight.replace(/\s+/g, "-").toLowerCase()} {
--gradient-background-colour: var(--code-styler-${alternativeHighlight.replace(/\s+/g, "-").toLowerCase()}-highlight-colour) !important;
}
`;
}, `
body.code-styler.theme-light {
${getThemeColours(themeColours.light)}
}
body.code-styler.theme-dark {
${getThemeColours(themeColours.dark)}
}
`);
}
function getThemeColours(themeModeColours) {
return Object.entries({
"codeblock-background-colour": themeModeColours.codeblock.backgroundColour,
"codeblock-text-colour": themeModeColours.codeblock.textColour,
"gutter-background-colour": themeModeColours.gutter.backgroundColour,
"gutter-text-colour": themeModeColours.gutter.textColour,
"gutter-active-text-colour": themeModeColours.gutter.activeTextColour,
"header-background-colour": themeModeColours.header.backgroundColour,
"header-title-text-colour": themeModeColours.header.title.textColour,
"header-language-tag-background-colour": themeModeColours.header.languageTag.backgroundColour,
"header-language-tag-text-colour": themeModeColours.header.languageTag.textColour,
"header-separator-colour": themeModeColours.header.lineColour,
"active-codeblock-line-colour": themeModeColours.highlights.activeCodeblockLineColour,
"active-editor-line-colour": themeModeColours.highlights.activeEditorLineColour,
"default-highlight-colour": themeModeColours.highlights.defaultColour,
"button-colour": themeModeColours.advanced.buttonColour,
"button-active-colour": themeModeColours.advanced.buttonActiveColour,
"inline-colour": themeModeColours.inline.textColour,
"inline-colour-active": themeModeColours.inline.activeTextColour,
"inline-background-colour": themeModeColours.inline.backgroundColour,
"inline-title-colour": themeModeColours.inline.titleTextColour,
...Object.entries(themeModeColours.highlights.alternativeHighlights).reduce((result, [alternativeHighlight, colour]) => {
result[`${alternativeHighlight.replace(/\s+/g, "-").toLowerCase()}-highlight-colour`] = colour;
return result;
}, {})
}).reduce((result, [cssVariable, colour]) => {
const styleColour = isCss(colour) ? `var(${colour})` : colour;
return result + `--code-styler-${cssVariable}: ${styleColour};`;
}, "");
}
function styleThemeSettings(themeSettings, currentTheme) {
var _a, _b;
return `
body.code-styler [class^="code-styler-header-language-tag"] {
--code-styler-header-language-tag-text-bold: ${themeSettings.header.languageTag.textBold ? "bold" : "normal"};
--code-styler-header-language-tag-text-italic: ${themeSettings.header.languageTag.textItalic ? "italic" : "normal"};
font-family: ${themeSettings.header.languageTag.textFont !== "" ? themeSettings.header.languageTag.textFont : "var(--font-text)"};
}
body.code-styler .code-styler-header-text {
--code-styler-header-title-text-bold: ${themeSettings.header.title.textBold ? "bold" : "normal"};
--code-styler-header-title-text-italic: ${themeSettings.header.title.textItalic ? "italic" : "normal"};
font-family: ${themeSettings.header.languageTag.textFont !== "" ? themeSettings.header.languageTag.textFont : "var(--font-text)"};
}
body.code-styler {
--border-radius: ${themeSettings.codeblock.curvature}px;
--language-icon-size: ${themeSettings.advanced.iconSize}px;
--gradient-highlights-colour-stop: ${themeSettings.advanced.gradientHighlights ? themeSettings.advanced.gradientHighlightsColourStop : "100%"};
--header-font-size: ${themeSettings.header.fontSize}px;
--line-wrapping: ${themeSettings.codeblock.unwrapLines ? "pre" : "pre-wrap"};
--code-styler-inline-font-weight: ${themeSettings.inline.fontWeight}00;
--code-styler-inline-border-radius: ${themeSettings.inline.curvature}px;
--code-styler-inline-padding-vertical: ${themeSettings.inline.paddingVertical}px;
--code-styler-inline-padding-horizontal: ${themeSettings.inline.paddingHorizontal}px;
--code-styler-inline-margin-horizontal: ${themeSettings.inline.marginHorizontal}px;
--code-styler-inline-title-font-weight: ${themeSettings.inline.titleFontWeight}00;
${!themeSettings.codeblock.wrapLinesActive ? "" : "--line-active-wrapping: pre-wrap;"}
${themeSettings.header.languageIcon.displayColour ? "" : "--icon-filter: grayscale(1);"}
}
${((_a = THEME_STYLES == null ? void 0 : THEME_STYLES[currentTheme]) == null ? void 0 : _a.border) ? `
.markdown-source-view :not(pre.code-styler-pre) > [class^="code-styler-header-container"] {
--code-styler-header-border:` + //@ts-expect-error Does Exist
THEME_STYLES[currentTheme].border.style + `;
--header-separator-width-padding: calc(var(--header-separator-width) - ` + //@ts-expect-error Does Exist
THEME_STYLES[currentTheme].border.size + `px);
--collapsed-bottom-border: var(--code-styler-header-border);
}
` : ""}
${((_b = THEME_STYLES == null ? void 0 : THEME_STYLES[currentTheme]) == null ? void 0 : _b.extra) ? THEME_STYLES[currentTheme].extra : ""}
`;
}
function styleLanguageColours(themeSettings, redirectLanguages, currentTheme) {
return Object.entries(LANGUAGE_NAMES).reduce((result, [languageName, languageDisplayName]) => {
var _a, _b, _c;
if (languageDisplayName in LANGUAGE_COLOURS || languageName in redirectLanguages && "colour" in redirectLanguages[languageName]) {
result += `
.language-${languageName} {
--language-border-colour: ${(_b = (_a = redirectLanguages == null ? void 0 : redirectLanguages[languageName]) == null ? void 0 : _a["colour"]) != null ? _b : LANGUAGE_COLOURS[languageDisplayName]};
--language-border-width: ${themeSettings.advanced.languageBorderColour ? themeSettings.advanced.languageBorderWidth : 0}px;
}
`;
if ((_c = THEME_STYLES == null ? void 0 : THEME_STYLES[currentTheme]) == null ? void 0 : _c.border) {
result += `
.markdown-source-view :not(pre.code-styler-pre) > [class^="code-styler-header-container"].language-${languageName} {
--language-border-width: ${//@ts-expect-error Does exist
themeSettings.advanced.languageBorderColour ? themeSettings.advanced.languageBorderWidth + THEME_STYLES[currentTheme].border.size : 0}px;
}`;
}
}
return result;
}, "");
}
function addThemeSettingsClasses(themeSettings) {
themeSettings.codeblock.lineNumbers ? document.body.classList.add("code-styler-show-line-numbers") : document.body.classList.remove("code-styler-show-line-numbers");
themeSettings.gutter.highlight ? document.body.classList.add("code-styler-gutter-highlight") : document.body.classList.remove("code-styler-gutter-highlight");
themeSettings.gutter.activeLine ? document.body.classList.add("code-styler-gutter-active-line") : document.body.classList.remove("code-styler-gutter-active-line");
document.body.classList.remove("code-styler-active-line-highlight", "code-styler-active-line-highlight-codeblock", "code-styler-active-line-highlight-editor");
if (themeSettings.highlights.activeEditorLine && themeSettings.highlights.activeCodeblockLine)
document.body.classList.add("code-styler-active-line-highlight");
else if (themeSettings.highlights.activeEditorLine && !themeSettings.highlights.activeCodeblockLine)
document.body.classList.add("code-styler-active-line-highlight-editor");
else if (!themeSettings.highlights.activeEditorLine && themeSettings.highlights.activeCodeblockLine)
document.body.classList.add("code-styler-active-line-highlight-codeblock");
document.body.classList.remove("code-styler-show-langnames", "code-styler-show-langnames-always");
if (themeSettings.header.languageTag.display === "always")
document.body.classList.add("code-styler-show-langnames-always");
else if (themeSettings.header.languageTag.display === "if_header_shown")
document.body.classList.add("code-styler-show-langnames");
document.body.classList.remove("code-styler-show-langicons", "code-styler-show-langicons-always");
if (themeSettings.header.languageIcon.display === "always")
document.body.classList.add("code-styler-show-langicons-always");
else if (themeSettings.header.languageIcon.display === "if_header_shown")
document.body.classList.add("code-styler-show-langicons");
}
function removeStylesAndClasses() {
var _a;
(_a = document.getElementById(STYLE_ID)) == null ? void 0 : _a.remove();
document.body.classList.remove(
"code-styler",
"code-styler-show-line-numbers",
"code-styler-gutter-highlight",
"code-styler-gutter-active-line",
"code-styler-show-langnames",
"code-styler-show-langnames-always",
"code-styler-show-langicons",
"code-styler-show-langicons-always"
);
}
function getCurrentTheme(app) {
return app.vault.getConfig("cssTheme");
}
// src/EditingView.ts
var import_obsidian2 = require("obsidian");
var import_view = require("@codemirror/view");
var import_state = require("@codemirror/state");
var import_language = require("@codemirror/language");
// src/CodeblockParsing.ts
async function parseCodeblockSource(codeSection, sourcePath, plugin) {
const plugins = plugin.app.plugins.plugins;
const admonitions = "obsidian-admonition" in plugins;
const codeblocks = [];
const codeblocksParameters = [];
function parseCodeblockSection(codeSection2) {
var _a;
if (codeSection2.length === 0)
return;
const openingCodeblockLine = getOpeningLine(codeSection2);
if (!openingCodeblockLine)
return;
const openDelimiter = (_a = /^\s*(?:>\s*)*((?:```+|~~~+)).*$/.exec(openingCodeblockLine)) == null ? void 0 : _a[1];
if (!openDelimiter)
return;
const openDelimiterIndex = codeSection2.indexOf(openingCodeblockLine);
const closeDelimiterIndex = codeSection2.slice(openDelimiterIndex + 1).findIndex((line) => new RegExp(`^\\s*(?:>\\s*)*${openDelimiter}(?!${openDelimiter[0]})$`).test(line));
if (!admonitions || !/^\s*(?:>\s*)*(?:```+|~~~+) *ad-.*$/.test(openingCodeblockLine))
codeblocks.push(codeSection2.slice(0, openDelimiterIndex + 2 + closeDelimiterIndex));
else
parseCodeblockSection(codeSection2.slice(openDelimiterIndex + 1, openDelimiterIndex + 1 + closeDelimiterIndex));
parseCodeblockSection(codeSection2.slice(openDelimiterIndex + 1 + closeDelimiterIndex + 1));
}
parseCodeblockSection(codeSection);
for (const codeblockLines of codeblocks) {
const parameterLine = getParameterLine(codeblockLines);
if (!parameterLine)
continue;
let codeblockParameters = parseCodeblockParameters(parameterLine, plugin.settings.currentTheme);
if (isExcluded(codeblockParameters.language, plugin.settings.excludedCodeblocks))
continue;
codeblockParameters = await pluginAdjustParameters(codeblockParameters, plugins, codeblockLines, sourcePath);
codeblocksParameters.push(codeblockParameters);
}
return { codeblocksParameters, nested: codeblocks[0] ? !arraysEqual(codeSection, codeblocks[0]) : true };
}
function parseInlineCode(codeText2) {
const match = /^({} ?)?{([^}]*)} ?(.*)$/.exec(codeText2);
if (!(match == null ? void 0 : match[1]) && !((match == null ? void 0 : match[2]) && (match == null ? void 0 : match[3])))
return { parameters: null, text: "" };
else if (match == null ? void 0 : match[1])
return { parameters: null, text: match[0].substring(match[1].length) };
else
return { parameters: parseInlineCodeParameters(match[2]), text: match[3] };
}
function parseCodeblockParameters(parameterLine, theme) {
const codeblockParameters = {
language: "",
title: "",
fold: {
enabled: false,
placeholder: ""
},
lineNumbers: {
alwaysEnabled: false,
alwaysDisabled: false,
offset: 0
},
lineUnwrap: {
alwaysEnabled: false,
alwaysDisabled: false,
activeWrap: false
},
highlights: {
default: {
lineNumbers: [],
plainText: [],
regularExpressions: []
},
alternative: {}
},
ignore: false
};
if (parameterLine.startsWith("```")) {
parameterLine = parameterLine.replace(/^```+(?=[^`]|$)/, "");
} else if (parameterLine.startsWith("~~~")) {
parameterLine = parameterLine.replace(/^~~~+(?=[^~]|$)/, "");
} else {
return codeblockParameters;
}
const languageBreak = parameterLine.indexOf(" ");
codeblockParameters.language = parameterLine.slice(0, languageBreak !== -1 ? languageBreak : parameterLine.length).toLowerCase();
if (languageBreak === -1)
return codeblockParameters;
const parameterStrings = parameterLine.slice(languageBreak + 1).match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g);
if (!parameterStrings)
return codeblockParameters;
parameterStrings.forEach((parameterString) => parseCodeblockParameterString(parameterString, codeblockParameters, theme));
return codeblockParameters;
}
async function pluginAdjustParameters(codeblockParameters, plugins, codeblockLines, sourcePath) {
var _a, _b, _c, _d, _e, _f;
if (codeblockParameters.language === "preview") {
if (((_a = plugins == null ? void 0 : plugins["obsidian-code-preview"]) == null ? void 0 : _a.code) && ((_b = plugins == null ? void 0 : plugins["obsidian-code-preview"]) == null ? void 0 : _b.analyzeHighLightLines)) {
const codePreviewParams = await plugins["obsidian-code-preview"].code(codeblockLines.slice(1, -1).join("\n"), sourcePath);
if (!codeblockParameters.lineNumbers.alwaysDisabled && !codeblockParameters.lineNumbers.alwaysEnabled) {
if (typeof codePreviewParams.start === "number")
codeblockParameters.lineNumbers.offset = codePreviewParams.start - 1;
codeblockParameters.lineNumbers.alwaysEnabled = Boolean(codePreviewParams.linenumber);
}
codeblockParameters.highlights.default.lineNumbers = [...new Set(codeblockParameters.highlights.default.lineNumbers.concat(Array.from(plugins["obsidian-code-preview"].analyzeHighLightLines(codePreviewParams.lines, codePreviewParams.highlight), ([num, _2]) => num)))];
if (codeblockParameters.title === "")
codeblockParameters.title = (_d = (_c = codePreviewParams.filePath.split("\\").pop()) == null ? void 0 : _c.split("/").pop()) != null ? _d : "";
codeblockParameters.language = codePreviewParams.language;
}
} else if (codeblockParameters.language === "include") {
if ("file-include" in plugins) {
const fileIncludeLanguage = (_f = (_e = codeblockLines[0].match(/include(?:[:\s]+(?<lang>\w+))?/)) == null ? void 0 : _e.groups) == null ? void 0 : _f.lang;
if (typeof fileIncludeLanguage !== "undefined")
codeblockParameters.language = fileIncludeLanguage;
}
}
return codeblockParameters;
}
function parseInlineCodeParameters(parameterLine) {
const inlineCodeParameters = {
language: "",
title: "",
icon: false
};
const languageBreak = parameterLine.indexOf(" ");
inlineCodeParameters.language = parameterLine.slice(0, languageBreak !== -1 ? languageBreak : parameterLine.length).toLowerCase();
if (languageBreak === -1)
return inlineCodeParameters;
const parameterStrings = parameterLine.slice(languageBreak + 1).match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g);
if (!parameterStrings)
return inlineCodeParameters;
parameterStrings.forEach((parameterString) => parseInlineCodeParameterString(parameterString, inlineCodeParameters));
return inlineCodeParameters;
}
function parseCodeblockParameterString(parameterString, codeblockParameters, theme) {
if (parameterString.startsWith("title:")) {
const titleMatch = /(["']?)([^\1]+)\1/.exec(parameterString.slice("title:".length));
if (titleMatch)
codeblockParameters.title = titleMatch[2].trim();
} else if (parameterString.startsWith("fold:")) {
const foldPlaceholderMatch = /(["']?)([^\1]+)\1/.exec(parameterString.slice("fold:".length));
if (foldPlaceholderMatch) {
codeblockParameters.fold = {
enabled: true,
placeholder: foldPlaceholderMatch[2].trim()
};
}
} else if (parameterString === "fold") {
codeblockParameters.fold = {
enabled: true,
placeholder: ""
};
} else if (parameterString === "ignore") {
codeblockParameters.ignore = true;
} else if (parameterString.startsWith("ln:")) {
parameterString = parameterString.slice("ln:".length);
if (/^\d+$/.test(parameterString)) {
codeblockParameters.lineNumbers = {
alwaysEnabled: true,
alwaysDisabled: false,
offset: parseInt(parameterString) - 1
};
} else if (parameterString.toLowerCase() === "true") {
codeblockParameters.lineNumbers = {
alwaysEnabled: true,
alwaysDisabled: false,
offset: 0
};
} else if (parameterString.toLowerCase() === "false") {
codeblockParameters.lineNumbers = {
alwaysEnabled: false,
alwaysDisabled: true,
offset: 0
};
}
} else if (parameterString === "wrap") {
codeblockParameters.lineUnwrap = {
alwaysEnabled: false,
alwaysDisabled: true,
activeWrap: false
};
} else if (parameterString === "unwrap") {
codeblockParameters.lineUnwrap = {
alwaysEnabled: true,
alwaysDisabled: false,
activeWrap: false
};
} else if (parameterString.startsWith("unwrap:")) {
parameterString = parameterString.slice("unwrap:".length);
if (parameterString.toLowerCase() === "inactive") {
codeblockParameters.lineUnwrap = {
alwaysEnabled: true,
alwaysDisabled: false,
activeWrap: true
};
} else if (parameterString.toLowerCase() === "true") {
codeblockParameters.lineUnwrap = {
alwaysEnabled: true,
alwaysDisabled: false,
activeWrap: false
};
} else if (parameterString.toLowerCase() === "false") {
codeblockParameters.lineUnwrap = {
alwaysEnabled: false,
alwaysDisabled: true,
activeWrap: false
};
}
} else {
const highlightMatch = /^(\w+):(.+)$/.exec(parameterString);
if (highlightMatch) {
const highlights = parseHighlightedLines(highlightMatch[2]);
if (highlightMatch[1] === "hl")
codeblockParameters.highlights.default = highlights;
else {
if (highlightMatch[1] in theme.colours.light.highlights.alternativeHighlights)
codeblockParameters.highlights.alternative[highlightMatch[1]] = highlights;
}
}
}
}
function parseHighlightedLines(highlightedLinesString) {
const highlightRules = highlightedLinesString.split(",");
const lineNumbers = /* @__PURE__ */ new Set();
const plainText = /* @__PURE__ */ new Set();
const regularExpressions = /* @__PURE__ */ new Set();
highlightRules.forEach((highlightRule) => {
if (/\d+-\d+/.test(highlightRule)) {
const [start, end] = highlightRule.split("-").map((num) => parseInt(num));
if (start && end && start <= end)
Array.from({ length: end - start + 1 }, (_2, num) => num + start).forEach((lineNumber) => lineNumbers.add(lineNumber));
} else if (/^\/(.*)\/$/.test(highlightRule)) {
try {
regularExpressions.add(new RegExp(highlightRule.replace(/^\/(.*)\/$/, "$1")));
} catch (e2) {
}
} else if (/".*"/.test(highlightRule)) {
plainText.add(highlightRule.substring(1, highlightRule.length - 1));
} else if (/'.*'/.test(highlightRule)) {
plainText.add(highlightRule.substring(1, highlightRule.length - 1));
} else if (/\D/.test(highlightRule)) {
plainText.add(highlightRule);
} else if (/\d+/.test(highlightRule)) {
lineNumbers.add(parseInt(highlightRule));
}
});
return {
lineNumbers: [...lineNumbers],
plainText: [...plainText],
regularExpressions: [...regularExpressions]
};
}
function isExcluded(language, excludedLanguagesString) {
return parseRegexExcludedLanguages(excludedLanguagesString).some((regexExcludedLanguage) => {
if (regexExcludedLanguage.test(language))
return true;
});
}
function parseRegexExcludedLanguages(excludedLanguagesString) {
return excludedLanguagesString.split(",").map((regexLanguage) => new RegExp(`^${regexLanguage.trim().replace(/\*/g, ".+")}$`, "i"));
}
function parseInlineCodeParameterString(parameterString, inlineCodeParameters) {
if (parameterString.startsWith("title:")) {
const titleMatch = /(["']?)([^\1]+)\1/.exec(parameterString.slice("title:".length));
if (titleMatch)
inlineCodeParameters.title = titleMatch[2].trim();
} else if (parameterString === "icon" || parameterString.startsWith("icon:") && parameterString.toLowerCase() === "icon:true") {
inlineCodeParameters.icon = true;
}
}
function getParameterLine(codeblockLines) {
let openingCodeblockLine = getOpeningLine(codeblockLines);
if (openingCodeblockLine && (openingCodeblockLine !== codeblockLines[0] || />\s*(?:[`~])/.test(openingCodeblockLine)))
openingCodeblockLine = cleanParameterLine(openingCodeblockLine);
return openingCodeblockLine;
}
function getOpeningLine(codeblockLines) {
return codeblockLines.find((line) => Boolean(testOpeningLine(line)));
}
function testOpeningLine(codeblockLine) {
const lineMatch = /^(\s*(?:>\s*)*)(```+|~~~+)/.exec(codeblockLine);
if (!lineMatch)
return "";
if (codeblockLine.indexOf(lineMatch[2], lineMatch[1].length + lineMatch[2].length + 1) === -1)
return lineMatch[2];
return "";
}
function cleanParameterLine(parameterLine) {
return trimParameterLine(parameterLine).replace(/^(?:>\s*)*(```+|~~~+)/, "$1");
}
function trimParameterLine(parameterLine) {
return parameterLine.trim();
}
async function getFileContentLines(sourcePath, plugin) {
const file = plugin.app.vault.getAbstractFileByPath(sourcePath);
if (!file) {
console.error(`File not found: ${sourcePath}`);
return;
}
const fileContent = await plugin.app.vault.cachedRead(file).catch((error) => {
console.error(`Error reading file: ${error.message}`);
return "";
});
if (!fileContent)
return;
return fileContent.split(/\n/g);
}
function arraysEqual(array1, array2) {
return array1.length === array2.length && array1.every((el) => array2.includes(el));
}
// src/CodeblockDecorating.ts
function createHeader(codeblockParameters, themeSettings, languageIcons) {
const headerContainer = createDiv({ cls: `code-styler-header-container${codeblockParameters.fold.enabled || codeblockParameters.title !== "" ? "-specific" : ""}` });
if (codeblockParameters.language !== "") {
const iconURL = getLanguageIcon(codeblockParameters.language, languageIcons);
if (iconURL !== null)
headerContainer.appendChild(createImageWrapper(iconURL, createDiv()));
headerContainer.appendChild(createDiv({ cls: `code-styler-header-language-tag-${codeblockParameters.language}`, text: getLanguageTag(codeblockParameters.language) }));
}
let headerText = "";
if (codeblockParameters.title !== "")
headerText = codeblockParameters.title;
else if (codeblockParameters.fold.enabled)
if (codeblockParameters.fold.placeholder !== "")
headerText = codeblockParameters.fold.placeholder;
else
headerText = themeSettings.header.collapsePlaceholder !== "" ? themeSettings.header.collapsePlaceholder : "Collapsed Code";
headerContainer.appendChild(createDiv({ cls: "code-styler-header-text", text: headerText }));
return headerContainer;
}
function createInlineOpener(inlineCodeParameters, languageIcons, containerClasses = ["code-styler-inline-opener"]) {
const openerContainer = createSpan({ cls: containerClasses.join(" ") });
if (inlineCodeParameters.icon) {
const iconURL = getLanguageIcon(inlineCodeParameters.language, languageIcons);
if (iconURL !== null)
openerContainer.appendChild(createImageWrapper(iconURL, createSpan(), "code-styler-inline-icon"));
}
if (inlineCodeParameters.title)
openerContainer.appendChild(createSpan({ cls: "code-styler-inline-title", text: inlineCodeParameters.title }));
return openerContainer;
}
function createImageWrapper(iconURL, imageWrapper, imgClass = "code-styler-icon") {
const img = document.createElement("img");
img.classList.add(imgClass);
img.src = iconURL;
imageWrapper.appendChild(img);
return imageWrapper;
}
function getLanguageIcon(language, languageIcons) {
language = getLanguageTag(language);
if (language in languageIcons)
return languageIcons[language];
return null;
}
function getLanguageTag(language) {
if (language in LANGUAGE_NAMES)
return LANGUAGE_NAMES[language];
else if (language !== "")
return language.charAt(0).toUpperCase() + language.slice(1);
return "";
}
function getLineClass(codeblockParameters, lineNumber, line) {
let classList = [];
if (codeblockParameters.highlights.default.lineNumbers.includes(lineNumber + codeblockParameters.lineNumbers.offset) || codeblockParameters.highlights.default.plainText.some((text3) => line.indexOf(text3) > -1) || codeblockParameters.highlights.default.regularExpressions.some((regExp) => regExp.test(line)))
classList.push("code-styler-line-highlighted");
Object.entries(codeblockParameters.highlights.alternative).forEach(([alternativeHighlight, highlightedLines]) => {
if (highlightedLines.lineNumbers.includes(lineNumber + codeblockParameters.lineNumbers.offset) || highlightedLines.plainText.some((text3) => line.indexOf(text3) > -1) || highlightedLines.regularExpressions.some((regExp) => regExp.test(line)))
classList.push(`code-styler-line-highlighted-${alternativeHighlight.replace(/\s+/g, "-").toLowerCase()}`);
});
if (classList.length === 0)
classList = ["code-styler-line"];
return classList;
}
function getLineNumberDisplay(codeblockParameters) {
let lineNumberDisplay = "";
if (!codeblockParameters.lineNumbers.alwaysEnabled && codeblockParameters.lineNumbers.alwaysDisabled)
lineNumberDisplay = "-hide";
else if (codeblockParameters.lineNumbers.alwaysEnabled && !codeblockParameters.lineNumbers.alwaysDisabled)
lineNumberDisplay = "-specific";
return lineNumberDisplay;
}
// src/EditingView.ts
function createCodeblockCodeMirrorExtensions(settings, languageIcons) {
const codeblockLineNumberCharWidth = import_state.StateField.define({
create(state) {
return getCharWidth(state, state.field(import_obsidian2.editorEditorField).defaultCharacterWidth);
},
update(value, transaction) {
return getCharWidth(transaction.state, value);
}
});
const codeblockLines = import_view.ViewPlugin.fromClass(
class CodeblockLines {
constructor(view) {
this.settings = settings;
this.currentSettings = {
excludedCodeblocks: settings.excludedCodeblocks,
excludedLanguages: settings.excludedLanguages,
collapsePlaceholder: "",
alternativeHighlights: []
};
this.decorations = import_view.Decoration.none;
this.buildDecorations(view);
this.mutationObserver = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === "attributes" && mutation.attributeName === "class" && (mutation.target.classList.contains("HyperMD-codeblock-begin") || mutation.target.classList.contains("HyperMD-codeblock_HyperMD-codeblock-bg") || mutation.target.classList.contains("HyperMD-codeblock-end"))) {
this.forceUpdate(view);
}
});
});
this.mutationObserver.observe(view.contentDOM, {
attributes: true,
childList: true,
subtree: true,
attributeFilter: ["class"]
// Only observe changes to the 'class' attribute
});
}
forceUpdate(view) {
this.buildDecorations(view);
view.requestMeasure();
}
update(update) {
if (update.docChanged || update.viewportChanged || update.state.field(import_obsidian2.editorLivePreviewField) !== update.startState.field(import_obsidian2.editorLivePreviewField) || this.settings.excludedCodeblocks !== this.currentSettings.excludedCodeblocks || this.settings.excludedLanguages !== this.currentSettings.excludedLanguages || this.settings.currentTheme.settings.header.collapsePlaceholder !== this.currentSettings.collapsePlaceholder || !arraysEqual(Object.keys(this.settings.currentTheme.colours.light.highlights.alternativeHighlights), this.currentSettings.alternativeHighlights)) {
this.currentSettings = structuredClone({
excludedCodeblocks: this.settings.excludedCodeblocks,
excludedLanguages: this.settings.excludedLanguages,
collapsePlaceholder: this.settings.currentTheme.settings.header.collapsePlaceholder,
alternativeHighlights: Object.keys(this.settings.currentTheme.colours.light.highlights.alternativeHighlights)
});
this.buildDecorations(update.view);
}
}
buildDecorations(view) {
var _a;
if (!((_a = view == null ? void 0 : view.visibleRanges) == null ? void 0 : _a.length) || editingViewIgnore(view.state)) {
this.decorations = import_view.Decoration.none;
return;
}
const builder = new import_state.RangeSetBuilder();
const codeblocks = findUnduplicatedCodeblocks(view);
for (const codeblock of codeblocks) {
let codeblockParameters;
let excludedCodeblock = false;
let lineNumber = 0;
let maxLineNum = 0;
let lineNumberMargin = 0;
(0, import_language.syntaxTree)(view.state).iterate({
from: codeblock.from,
to: codeblock.to,
enter: (syntaxNode) => {
const line = view.state.doc.lineAt(syntaxNode.from);
const lineText = view.state.sliceDoc(line.from, line.to);
const startLine = syntaxNode.type.name.includes("HyperMD-codeblock-begin");
const endLine = syntaxNode.type.name.includes("HyperMD-codeblock-end");
if (startLine) {
codeblockParameters = parseCodeblockParameters(trimParameterLine(lineText), this.settings.currentTheme);
excludedCodeblock = isExcluded(codeblockParameters.language, [this.settings.excludedCodeblocks, this.settings.excludedLanguages].join(",")) || codeblockParameters.ignore;
lineNumber = 0;
let lineNumberCount = line.number + 1;
const startDelimiter = testOpeningLine(lineText);
while (startDelimiter !== testOpeningLine(view.state.doc.line(lineNumberCount).text)) {
lineNumberCount += 1;
}
maxLineNum = lineNumberCount - line.number - 1 + codeblockParameters.lineNumbers.offset;
if (maxLineNum.toString().length > 2)
lineNumberMargin = maxLineNum.toString().length * view.state.field(codeblockLineNumberCharWidth);
else
lineNumberMargin = void 0;
}
if (excludedCodeblock)
return;
if (syntaxNode.type.name.includes("HyperMD-codeblock")) {
builder.add(syntaxNode.from, syntaxNode.from, import_view.Decoration.line({ attributes: { style: `--line-number-gutter-width: ${lineNumberMargin ? lineNumberMargin + "px" : "calc(var(--line-number-gutter-min-width) - 12px)"}`, class: (this.settings.specialLanguages.some((regExp) => new RegExp(regExp).test(codeblockParameters.language)) || startLine || endLine ? "code-styler-line" : getLineClass(codeblockParameters, lineNumber, line.text).join(" ")) + (["^$"].concat(this.settings.specialLanguages).some((regExp) => new RegExp(regExp).test(codeblockParameters.language)) ? "" : ` language-${codeblockParameters.language}`) } }));
builder.add(syntaxNode.from, syntaxNode.from, import_view.Decoration.line({}));
builder.add(syntaxNode.from, syntaxNode.from, import_view.Decoration.widget({ widget: new LineNumberWidget(lineNumber, codeblockParameters, maxLineNum, startLine || endLine) }));
lineNumber++;
}
}
});
}
this.decorations = builder.finish();
}
destroy() {
this.mutationObserver.disconnect();
}
},
{
decorations: (value) => value.decorations,
provide: (plugin) => import_view.EditorView.atomicRanges.of((view) => view.state.field(codeblockCollapse) || import_view.Decoration.none)
// eslint-disable-line @typescript-eslint/no-unused-vars
}
);
const codeblockHeader = import_state.StateField.define({
create(state) {
return import_view.Decoration.none;
},
update(value, transaction) {
if (editingViewIgnore(transaction.state))
return import_view.Decoration.none;
const builder = new import_state.RangeSetBuilder();
let codeblockParameters;
let startLine = true;
let startDelimiter = "```";
for (let i2 = 1; i2 < transaction.state.doc.lines; i2++) {
const line = transaction.state.doc.line(i2);
const lineText = line.text.toString();
const currentDelimiter = testOpeningLine(lineText);
if (currentDelimiter) {
if (startLine) {
startLine = false;
startDelimiter = currentDelimiter;
codeblockParameters = parseCodeblockParameters(trimParameterLine(lineText), settings.currentTheme);
if (!isExcluded(codeblockParameters.language, [settings.excludedCodeblocks, settings.excludedLanguages].join(",")) && !codeblockParameters.ignore)
if (!settings.specialLanguages.some((regExp) => new RegExp(regExp).test(codeblockParameters.language)))
builder.add(line.from, line.from, import_view.Decoration.widget({ widget: new HeaderWidget(codeblockParameters, settings.currentTheme.settings, languageIcons), block: true, side: -1 }));
else
continue;
} else {
if (currentDelimiter === startDelimiter)
startLine = true;
}
}
}
return builder.finish();
},
provide(field) {
return import_view.EditorView.decorations.from(field);
}
});
const codeblockCollapse = import_state.StateField.define({
create(state) {
if (editingViewIgnore(state))
return import_view.Decoration.none;
const builder = new import_state.RangeSetBuilder();
let codeblockParameters;
let collapseStart = null;
let collapseEnd = null;
let startLine = true;
let startDelimiter = "```";
for (let i2 = 1; i2 < state.doc.lines; i2++) {
const line = state.doc.line(i2);
const lineText = line.text.toString();
const currentDelimiter = testOpeningLine(lineText);
if (currentDelimiter) {
if (startLine) {
startLine = false;
startDelimiter = currentDelimiter;
codeblockParameters = parseCodeblockParameters(trimParameterLine(lineText), settings.currentTheme);
if (!isExcluded(codeblockParameters.language, [settings.excludedCodeblocks, settings.excludedLanguages].join(",")) && !codeblockParameters.ignore && codeblockParameters.fold.enabled)
if (!settings.specialLanguages.some((regExp) => new RegExp(regExp).test(codeblockParameters.language)))
collapseStart = line;
else
continue;
} else {
if (currentDelimiter === startDelimiter) {
startLine = true;
if (collapseStart)
collapseEnd = line;
}
}
}
if (collapseStart && collapseEnd) {
builder.add(collapseStart.from, collapseEnd.to, import_view.Decoration.replace({ effect: collapse.of(import_view.Decoration.replace({ block: true }).range(collapseStart.from, collapseEnd.to)), block: true, inclusive: true }));
collapseStart = null;
collapseEnd = null;
}
}
return builder.finish();
},
update(value, transaction) {
value = value.map(transaction.changes);
for (const effect of transaction.effects) {
if (effect.is(collapse))
value = value.update({ add: [effect.value], sort: true });
else if (effect.is(uncollapse))
value = value.update({ filterFrom: effect.value.filterFrom, filterTo: effect.value.filterTo, filter: effect.value.filter });
}
return value;
},
provide(field) {
return import_view.EditorView.decorations.from(field);
}
});
const temporarilyUncollapsed = import_state.StateField.define({
create(state) {
return import_view.Decoration.none;
},
update(value, transaction) {
value = value.map(transaction.changes);
const uncollapseAnnotation = transaction.annotation(temporaryUncollapseAnnotation);
if (uncollapseAnnotation) {
if (uncollapseAnnotation.uncollapse)
value = value.update({ add: [uncollapseAnnotation.decorationRange], sort: true });
else
value = value.update({ filterFrom: uncollapseAnnotation.decorationRange.from, filterTo: uncollapseAnnotation.decorationRange.to, filter: (from, to, value2) => !(from === uncollapseAnnotation.decorationRange.from && to === uncollapseAnnotation.decorationRange.to) });
}
return value;
}
});
const inlineCodeDecorator = import_view.ViewPlugin.fromClass(
class InlineCodeDecoration {
//NOSONAR
// loadedLanguages: Record<string,LanguageSupport>; //NOTE: For future CM6 Compatibility
constructor(view) {
this.decorations = import_view.Decoration.none;
this.settings = settings;
this.syntaxHighlight = settings.currentTheme.settings.inline.syntaxHighlight;
this.buildDecorations(view);
}
update(update) {
if (update.docChanged || update.viewportChanged || update.selectionSet || update.state.field(import_obsidian2.editorLivePreviewField) !== update.startState.field(import_obsidian2.editorLivePreviewField) || this.settings.currentTheme.settings.inline.syntaxHighlight !== this.syntaxHighlight) {
this.syntaxHighlight = this.settings.currentTheme.settings.inline.syntaxHighlight;
if (update.docChanged)
this.decorations = this.decorations.map(update.changes);
this.buildDecorations(update.view);
}
}
buildDecorations(view) {
var _a;
if (!((_a = view == null ? void 0 : view.visibleRanges) == null ? void 0 : _a.length) || editingViewIgnore(view.state)) {
this.decorations = import_view.Decoration.none;
return;
}
for (const { from, to } of view.visibleRanges) {
(0, import_language.syntaxTree)(view.state).iterate({
from,
to,
enter: (syntaxNode) => {
var _a2;
const properties = new Set((_a2 = syntaxNode.node.type.prop(import_language.tokenClassNodeProp)) == null ? void 0 : _a2.split(" "));
if (!(properties.has("inline-code") && !properties.has("formatting")))
return;
const previousSibling = syntaxNode.node.prevSibling;
if (!previousSibling)
return;
const delimiterSize = previousSibling.to - previousSibling.from;
const inlineCodeText = view.state.doc.sliceString(syntaxNode.from, syntaxNode.to);
const { parameters, text: text3 } = parseInlineCode(inlineCodeText);
const endOfParameters = inlineCodeText.lastIndexOf(text3);
if (!parameters) {
if (text3) {
if (view.state.selection.ranges.some((range) => range.to >= syntaxNode.from - delimiterSize && range.from <= syntaxNode.to + delimiterSize))
this.decorations = this.decorations.update({ filterFrom: syntaxNode.from, filterTo: syntaxNode.from, filter: (from2, to2, value) => false });
else
this.decorations = this.decorations.update({ add: [{ from: syntaxNode.from, to: syntaxNode.from + endOfParameters, value: import_view.Decoration.replace({}) }] });
}
} else {
if (view.state.selection.ranges.some((range) => range.to >= syntaxNode.from - delimiterSize && range.from <= syntaxNode.to + delimiterSize)) {
this.decorations.between(syntaxNode.from, syntaxNode.from, (from2, to2, decorationValue) => {
this.decorations = this.decorations.update({ filterFrom: from2, filterTo: to2, filter: (from3, to3, value) => false });
});
this.decorations = this.decorations.update({ add: [{ from: syntaxNode.from, to: syntaxNode.from + endOfParameters, value: import_view.Decoration.mark({ class: "code-styler-inline-parameters" }) }] });
} else {
let decorated = false;
this.decorations.between(syntaxNode.from, syntaxNode.from, (from2, to2, decorationValue) => {
var _a3;
if (!((_a3 = decorationValue.spec) == null ? void 0 : _a3.class))
decorated = true;
});
if (!decorated) {
this.decorations = this.decorations.update({ add: [{ from: syntaxNode.from, to: syntaxNode.from + endOfParameters, value: import_view.Decoration.replace({}) }] });
if ((parameters == null ? void 0 : parameters.title) || (parameters == null ? void 0 : parameters.icon) && getLanguageIcon(parameters.language, languageIcons))
this.decorations = this.decorations.update({ add: [{ from: syntaxNode.from, to: syntaxNode.from, value: import_view.Decoration.replace({ widget: new OpenerWidget(parameters, languageIcons) }) }] });
}
}
this.decorations = this.decorations.update({ filterFrom: syntaxNode.from + endOfParameters + 1, filterTo: syntaxNode.to, filter: (from2, to2, decorationValue) => false });
if (!settings.currentTheme.settings.inline.syntaxHighlight)
return;
this.decorations = this.decorations.update({ add: modeHighlight({ start: syntaxNode.from + endOfParameters, text: text3, language: parameters.language }) });
}
}
});
}
}
},
{
decorations: (value) => value.decorations
}
);
function cursorIntoCollapsedTransactionFilter() {
return import_state.EditorState.transactionFilter.of((transaction) => {
var _a, _b, _c, _d;
const extraTransactions = [];
const collapsedRangeSet = (_b = (_a = transaction.startState.field(codeblockCollapse, false)) == null ? void 0 : _a.map(transaction.changes)) != null ? _b : import_view.Decoration.none;
const temporarilyUncollapsedRangeSet = (_d = (_c = transaction.startState.field(temporarilyUncollapsed, false)) == null ? void 0 : _c.map(transaction.changes)) != null ? _d : import_view.Decoration.none;
transaction.newSelection.ranges.forEach((range) => {
collapsedRangeSet.between(range.from, range.to, (collapseStartFrom, collapseEndTo, decorationValue) => {
if (collapseStartFrom <= range.head && range.head <= collapseEndTo)
extraTransactions.push({ effects: uncollapse.of({ filter: (from, to) => to <= collapseStartFrom || from >= collapseEndTo, filterFrom: collapseStartFrom, filterTo: collapseEndTo }), annotations: temporaryUncollapseAnnotation.of({ decorationRange: { from: collapseStartFrom, to: collapseEndTo, value: decorationValue }, uncollapse: true }) });
});
for (let iter = temporarilyUncollapsedRangeSet.iter(); iter.value !== null; iter.next()) {
if (!(iter.from <= range.head && range.head <= iter.to))
extraTransactions.push({ effects: collapse.of(import_view.Decoration.replace({ block: true }).range(iter.from, iter.to)), annotations: temporaryUncollapseAnnotation.of({ decorationRange: { from: iter.from, to: iter.to, value: iter.value }, uncollapse: false }) });
}
});
if (extraTransactions.length !== 0)
return [transaction, ...extraTransactions];
return transaction;
});
}
class LineNumberWidget extends import_view.WidgetType {
constructor(lineNumber, codeblockParameters, maxLineNum, empty2) {
super();
this.lineNumber = lineNumber;
this.codeblockParameters = codeblockParameters;
this.maxLineNum = maxLineNum;
this.empty = empty2;
}
eq(other) {
return this.lineNumber === other.lineNumber && this.codeblockParameters.lineNumbers.alwaysEnabled === other.codeblockParameters.lineNumbers.alwaysEnabled && this.codeblockParameters.lineNumbers.alwaysDisabled === other.codeblockParameters.lineNumbers.alwaysDisabled && this.codeblockParameters.lineNumbers.offset === other.codeblockParameters.lineNumbers.offset && this.maxLineNum === other.maxLineNum && this.empty === other.empty;
}
toDOM(view) {
return createSpan({ attr: { style: this.maxLineNum.toString().length > (this.lineNumber + this.codeblockParameters.lineNumbers.offset).toString().length ? "width: var(--line-number-gutter-width);" : "" }, cls: `code-styler-line-number${getLineNumberDisplay(this.codeblockParameters)}`, text: this.empty ? "" : (this.lineNumber + this.codeblockParameters.lineNumbers.offset).toString() });
}
}
class HeaderWidget extends import_view.WidgetType {
constructor(codeblockParameters, themeSettings, languageIcons2) {
super();
this.codeblockParameters = codeblockParameters;
this.themeSettings = themeSettings;
this.languageIcons = languageIcons2;
this.mutationObserver = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.target.hasAttribute("data-clicked"))
collapseOnClick(this.view, mutation.target);
});
});
}
eq(other) {
return this.codeblockParameters.language == other.codeblockParameters.language && this.codeblockParameters.title == other.codeblockParameters.title && this.codeblockParameters.fold.enabled == other.codeblockParameters.fold.enabled && this.codeblockParameters.fold.placeholder == other.codeblockParameters.fold.placeholder && this.themeSettings.header.collapsePlaceholder == other.themeSettings.header.collapsePlaceholder && getLanguageIcon(this.codeblockParameters.language, this.languageIcons) == getLanguageIcon(other.codeblockParameters.language, other.languageIcons);
}
toDOM(view) {
this.view = view;
const headerContainer = createHeader(this.codeblockParameters, this.themeSettings, this.languageIcons);
if (this.codeblockParameters.language !== "")
headerContainer.classList.add(`language-${this.codeblockParameters.language}`);
headerContainer.addEventListener("mousedown", handleMouseDown);
this.mutationObserver.observe(headerContainer, {
attributes: true
});
return headerContainer;
}
destroy(dom) {
dom.removeAttribute("data-clicked");
dom.removeEventListener("mousedown", handleMouseDown);
this.mutationObserver.disconnect();
}
ignoreEvent() {
return false;
}
}
class OpenerWidget extends import_view.WidgetType {
constructor(inlineCodeParameters, languageIcons2) {
super();
this.inlineCodeParameters = inlineCodeParameters;
this.languageIcons = languageIcons2;
}
eq(other) {
return this.inlineCodeParameters.language == other.inlineCodeParameters.language && this.inlineCodeParameters.title == other.inlineCodeParameters.title && this.inlineCodeParameters.icon == other.inlineCodeParameters.icon && getLanguageIcon(this.inlineCodeParameters.language, this.languageIcons) == getLanguageIcon(other.inlineCodeParameters.language, other.languageIcons);
}
toDOM(view) {
return createInlineOpener(this.inlineCodeParameters, this.languageIcons, ["code-styler-inline-opener", "cm-inline-code"]);
}
}
function collapseOnClick(view, target) {
var _a;
const position2 = view.posAtDOM(target);
let folded = false;
(_a = view.state.field(codeblockCollapse, false)) == null ? void 0 : _a.between(position2, position2, () => {
folded = true;
});
let collapseStart = null;
let collapseEnd = null;
let startLine = true;
let startDelimiter = "```";
for (let i2 = 1; i2 < view.state.doc.lines; i2++) {
const line = view.state.doc.line(i2);
const lineText = line.text.toString();
const currentDelimiter = testOpeningLine(lineText);
if (currentDelimiter) {
if (startLine) {
startLine = false;
startDelimiter = currentDelimiter;
if (position2 === line.from)
collapseStart = line;
} else {
if (currentDelimiter === startDelimiter) {
startLine = true;
if (collapseStart)
collapseEnd = line;
}
}
}
if (collapseStart && collapseEnd) {
if (folded)
view.dispatch({ effects: uncollapse.of({ filter: (from, to) => to <= collapseStart.from || from >= collapseEnd.to, filterFrom: collapseEnd.from, filterTo: collapseEnd.to }) });
else
view.dispatch({ effects: collapse.of(import_view.Decoration.replace({ block: true }).range(collapseStart.from, collapseEnd.to)) });
view.requestMeasure();
collapseStart = null;
collapseEnd = null;
}
}
}
function handleMouseDown(event) {
this.setAttribute("data-clicked", "true");
}
const collapse = import_state.StateEffect.define();
const uncollapse = import_state.StateEffect.define();
const temporaryUncollapseAnnotation = import_state.Annotation.define();
return [codeblockLineNumberCharWidth, codeblockLines, codeblockHeader, codeblockCollapse, temporarilyUncollapsed, inlineCodeDecorator, cursorIntoCollapsedTransactionFilter()];
}
function getCharWidth(state, default_value) {
const charWidths = Array.from(state.field(import_obsidian2.editorEditorField).contentDOM.querySelectorAll(".HyperMD-codeblock-end")).reduce((result, beginningElement) => {
const nextElement = beginningElement.previousElementSibling;
if (!nextElement)
return result;
const lineNumberElement = nextElement.querySelector("[class^='code-styler-line-number']");
if (!lineNumberElement || lineNumberElement.innerText.length <= 2)
return result;
const computedStyles = window.getComputedStyle(lineNumberElement, null);
result.push((lineNumberElement.getBoundingClientRect().width - parseFloat(computedStyles.paddingLeft) - parseFloat(computedStyles.paddingRight)) / lineNumberElement.innerText.length);
return result;
}, []);
if (charWidths.length === 0)
return default_value;
return charWidths.reduce((result, value) => result + value, 0) / charWidths.length;
}
function findUnduplicatedCodeblocks(view) {
const codeblocks = findVisibleCodeblocks(view);
const unduplicatedCodeblocks = [];
for (let i2 = 0; i2 < codeblocks.length; i2++)
if (i2 === 0 || codeblocks[i2].from !== codeblocks[i2 - 1].from)
unduplicatedCodeblocks.push(codeblocks[i2]);
return unduplicatedCodeblocks;
}
function findVisibleCodeblocks(view) {
return findCodeblocks(view).filter((codeblock) => {
return view.visibleRanges.some((visibleRange) => codeblock.from < visibleRange.to && codeblock.to > visibleRange.from);
});
}
function findCodeblocks(view) {
const codeblocks = [];
(0, import_language.syntaxTree)(view.state).iterate({
enter: (syntaxNode) => {
if (syntaxNode.type.name.includes("HyperMD-codeblock-begin") || syntaxNode.type.name === "HyperMD-codeblock_HyperMD-codeblock-bg" || syntaxNode.type.name.includes("HyperMD-codeblock-end"))
codeblocks.push(syntaxNode);
}
});
return codeblocks;
}
function modeHighlight({ start, text: text3, language }) {
var _a;
const markDecorations = [];
const mode = window.CodeMirror.getMode(window.CodeMirror.defaults, (_a = window.CodeMirror.findModeByName(language)) == null ? void 0 : _a.mime);
const state = window.CodeMirror.startState(mode);
if (mode == null ? void 0 : mode.token) {
const stream = new window.CodeMirror.StringStream(text3);
while (!stream.eol()) {
const style = mode.token(stream, state);
if (style)
markDecorations.push({ from: start + stream.start, to: start + stream.pos, value: import_view.Decoration.mark({ class: `cm-${style}` }) });
stream.start = stream.pos;
}
}
return markDecorations;
}
function editingViewIgnore(state) {
var _a, _b, _c, _d;
if (!state.field(import_obsidian2.editorLivePreviewField))
return true;
const filePath = (_b = (_a = state.field(import_obsidian2.editorInfoField)) == null ? void 0 : _a.file) == null ? void 0 : _b.path;
if (typeof filePath !== "undefined")
return ((_d = (_c = this.app.metadataCache.getCache(filePath)) == null ? void 0 : _c.frontmatter) == null ? void 0 : _d["code-styler-ignore"]) === true;
return false;
}
// src/ReadingView.ts
var import_obsidian3 = require("obsidian");
// node_modules/bail/index.js
function bail(error) {
if (error) {
throw error;
}
}
// node_modules/unified/lib/index.js
var import_is_buffer2 = __toESM(require_is_buffer(), 1);
var import_extend = __toESM(require_extend(), 1);
// node_modules/is-plain-obj/index.js
function isPlainObject(value) {
if (typeof value !== "object" || value === null) {
return false;
}
const prototype = Object.getPrototypeOf(value);
return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);
}
// node_modules/trough/index.js
function trough() {
const fns = [];
const pipeline = { run, use };
return pipeline;
function run(...values) {
let middlewareIndex = -1;
const callback = values.pop();
if (typeof callback !== "function") {
throw new TypeError("Expected function as last argument, not " + callback);
}
next(null, ...values);
function next(error, ...output) {
const fn = fns[++middlewareIndex];
let index2 = -1;
if (error) {
callback(error);
return;
}
while (++index2 < values.length) {
if (output[index2] === null || output[index2] === void 0) {
output[index2] = values[index2];
}
}
values = output;
if (fn) {
wrap(fn, next)(...output);
} else {
callback(null, ...output);
}
}
}
function use(middelware) {
if (typeof middelware !== "function") {
throw new TypeError(
"Expected `middelware` to be a function, not " + middelware
);
}
fns.push(middelware);
return pipeline;
}
}
function wrap(middleware, callback) {
let called;
return wrapped;
function wrapped(...parameters) {
const fnExpectsCallback = middleware.length > parameters.length;
let result;
if (fnExpectsCallback) {
parameters.push(done);
}
try {
result = middleware.apply(this, parameters);
} catch (error) {
const exception = (
/** @type {Error} */
error
);
if (fnExpectsCallback && called) {
throw exception;
}
return done(exception);
}
if (!fnExpectsCallback) {
if (result instanceof Promise) {
result.then(then, done);
} else if (result instanceof Error) {
done(result);
} else {
then(result);
}
}
}
function done(error, ...output) {
if (!called) {
called = true;
callback(error, ...output);
}
}
function then(value) {
done(null, value);
}
}
// node_modules/vfile/lib/index.js
var import_is_buffer = __toESM(require_is_buffer(), 1);
// node_modules/unist-util-stringify-position/lib/index.js
function stringifyPosition(value) {
if (!value || typeof value !== "object") {
return "";
}
if ("position" in value || "type" in value) {
return position(value.position);
}
if ("start" in value || "end" in value) {
return position(value);
}
if ("line" in value || "column" in value) {
return point(value);
}
return "";
}
function point(point3) {
return index(point3 && point3.line) + ":" + index(point3 && point3.column);
}
function position(pos) {
return point(pos && pos.start) + "-" + point(pos && pos.end);
}
function index(value) {
return value && typeof value === "number" ? value : 1;
}
// node_modules/vfile-message/lib/index.js
var VFileMessage = class extends Error {
/**
* Create a message for `reason` at `place` from `origin`.
*
* When an error is passed in as `reason`, the `stack` is copied.
*
* @param {string | Error | VFileMessage} reason
* Reason for message, uses the stack and message of the error if given.
*
* > 👉 **Note**: you should use markdown.
* @param {Node | NodeLike | Position | Point | null | undefined} [place]
* Place in file where the message occurred.
* @param {string | null | undefined} [origin]
* Place in code where the message originates (example:
* `'my-package:my-rule'` or `'my-rule'`).
* @returns
* Instance of `VFileMessage`.
*/
// To do: next major: expose `undefined` everywhere instead of `null`.
constructor(reason, place, origin) {
const parts = [null, null];
let position2 = {
// @ts-expect-error: we always follows the structure of `position`.
start: { line: null, column: null },
// @ts-expect-error: "
end: { line: null, column: null }
};
super();
if (typeof place === "string") {
origin = place;
place = void 0;
}
if (typeof origin === "string") {
const index2 = origin.indexOf(":");
if (index2 === -1) {
parts[1] = origin;
} else {
parts[0] = origin.slice(0, index2);
parts[1] = origin.slice(index2 + 1);
}
}
if (place) {
if ("type" in place || "position" in place) {
if (place.position) {
position2 = place.position;
}
} else if ("start" in place || "end" in place) {
position2 = place;
} else if ("line" in place || "column" in place) {
position2.start = place;
}
}
this.name = stringifyPosition(place) || "1:1";
this.message = typeof reason === "object" ? reason.message : reason;
this.stack = "";
if (typeof reason === "object" && reason.stack) {
this.stack = reason.stack;
}
this.reason = this.message;
this.fatal;
this.line = position2.start.line;
this.column = position2.start.column;
this.position = position2;
this.source = parts[0];
this.ruleId = parts[1];
this.file;
this.actual;
this.expected;
this.url;
this.note;
}
};
VFileMessage.prototype.file = "";
VFileMessage.prototype.name = "";
VFileMessage.prototype.reason = "";
VFileMessage.prototype.message = "";
VFileMessage.prototype.stack = "";
VFileMessage.prototype.fatal = null;
VFileMessage.prototype.column = null;
VFileMessage.prototype.line = null;
VFileMessage.prototype.source = null;
VFileMessage.prototype.ruleId = null;
VFileMessage.prototype.position = null;
// node_modules/vfile/lib/minpath.browser.js
var path = { basename, dirname, extname, join, sep: "/" };
function basename(path2, ext) {
if (ext !== void 0 && typeof ext !== "string") {
throw new TypeError('"ext" argument must be a string');
}
assertPath(path2);
let start = 0;
let end = -1;
let index2 = path2.length;
let seenNonSlash;
if (ext === void 0 || ext.length === 0 || ext.length > path2.length) {
while (index2--) {
if (path2.charCodeAt(index2) === 47) {
if (seenNonSlash) {
start = index2 + 1;
break;
}
} else if (end < 0) {
seenNonSlash = true;
end = index2 + 1;
}
}
return end < 0 ? "" : path2.slice(start, end);
}
if (ext === path2) {
return "";
}
let firstNonSlashEnd = -1;
let extIndex = ext.length - 1;
while (index2--) {
if (path2.charCodeAt(index2) === 47) {
if (seenNonSlash) {
start = index2 + 1;
break;
}
} else {
if (firstNonSlashEnd < 0) {
seenNonSlash = true;
firstNonSlashEnd = index2 + 1;
}
if (extIndex > -1) {
if (path2.charCodeAt(index2) === ext.charCodeAt(extIndex--)) {
if (extIndex < 0) {
end = index2;
}
} else {
extIndex = -1;
end = firstNonSlashEnd;
}
}
}
}
if (start === end) {
end = firstNonSlashEnd;
} else if (end < 0) {
end = path2.length;
}
return path2.slice(start, end);
}
function dirname(path2) {
assertPath(path2);
if (path2.length === 0) {
return ".";
}
let end = -1;
let index2 = path2.length;
let unmatchedSlash;
while (--index2) {
if (path2.charCodeAt(index2) === 47) {
if (unmatchedSlash) {
end = index2;
break;
}
} else if (!unmatchedSlash) {
unmatchedSlash = true;
}
}
return end < 0 ? path2.charCodeAt(0) === 47 ? "/" : "." : end === 1 && path2.charCodeAt(0) === 47 ? "//" : path2.slice(0, end);
}
function extname(path2) {
assertPath(path2);
let index2 = path2.length;
let end = -1;
let startPart = 0;
let startDot = -1;
let preDotState = 0;
let unmatchedSlash;
while (index2--) {
const code = path2.charCodeAt(index2);
if (code === 47) {
if (unmatchedSlash) {
startPart = index2 + 1;
break;
}
continue;
}
if (end < 0) {
unmatchedSlash = true;
end = index2 + 1;
}
if (code === 46) {
if (startDot < 0) {
startDot = index2;
} else if (preDotState !== 1) {
preDotState = 1;
}
} else if (startDot > -1) {
preDotState = -1;
}
}
if (startDot < 0 || end < 0 || // We saw a non-dot character immediately before the dot.
preDotState === 0 || // The (right-most) trimmed path component is exactly `..`.
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
return "";
}
return path2.slice(startDot, end);
}
function join(...segments) {
let index2 = -1;
let joined;
while (++index2 < segments.length) {
assertPath(segments[index2]);
if (segments[index2]) {
joined = joined === void 0 ? segments[index2] : joined + "/" + segments[index2];
}
}
return joined === void 0 ? "." : normalize(joined);
}
function normalize(path2) {
assertPath(path2);
const absolute = path2.charCodeAt(0) === 47;
let value = normalizeString(path2, !absolute);
if (value.length === 0 && !absolute) {
value = ".";
}
if (value.length > 0 && path2.charCodeAt(path2.length - 1) === 47) {
value += "/";
}
return absolute ? "/" + value : value;
}
function normalizeString(path2, allowAboveRoot) {
let result = "";
let lastSegmentLength = 0;
let lastSlash = -1;
let dots = 0;
let index2 = -1;
let code;
let lastSlashIndex;
while (++index2 <= path2.length) {
if (index2 < path2.length) {
code = path2.charCodeAt(index2);
} else if (code === 47) {
break;
} else {
code = 47;
}
if (code === 47) {
if (lastSlash === index2 - 1 || dots === 1) {
} else if (lastSlash !== index2 - 1 && dots === 2) {
if (result.length < 2 || lastSegmentLength !== 2 || result.charCodeAt(result.length - 1) !== 46 || result.charCodeAt(result.length - 2) !== 46) {
if (result.length > 2) {
lastSlashIndex = result.lastIndexOf("/");
if (lastSlashIndex !== result.length - 1) {
if (lastSlashIndex < 0) {
result = "";
lastSegmentLength = 0;
} else {
result = result.slice(0, lastSlashIndex);
lastSegmentLength = result.length - 1 - result.lastIndexOf("/");
}
lastSlash = index2;
dots = 0;
continue;
}
} else if (result.length > 0) {
result = "";
lastSegmentLength = 0;
lastSlash = index2;
dots = 0;
continue;
}
}
if (allowAboveRoot) {
result = result.length > 0 ? result + "/.." : "..";
lastSegmentLength = 2;
}
} else {
if (result.length > 0) {
result += "/" + path2.slice(lastSlash + 1, index2);
} else {
result = path2.slice(lastSlash + 1, index2);
}
lastSegmentLength = index2 - lastSlash - 1;
}
lastSlash = index2;
dots = 0;
} else if (code === 46 && dots > -1) {
dots++;
} else {
dots = -1;
}
}
return result;
}
function assertPath(path2) {
if (typeof path2 !== "string") {
throw new TypeError(
"Path must be a string. Received " + JSON.stringify(path2)
);
}
}
// node_modules/vfile/lib/minproc.browser.js
var proc = { cwd };
function cwd() {
return "/";
}
// node_modules/vfile/lib/minurl.shared.js
function isUrl(fileUrlOrPath) {
return fileUrlOrPath !== null && typeof fileUrlOrPath === "object" && // @ts-expect-error: indexable.
fileUrlOrPath.href && // @ts-expect-error: indexable.
fileUrlOrPath.origin;
}
// node_modules/vfile/lib/minurl.browser.js
function urlToPath(path2) {
if (typeof path2 === "string") {
path2 = new URL(path2);
} else if (!isUrl(path2)) {
const error = new TypeError(
'The "path" argument must be of type string or an instance of URL. Received `' + path2 + "`"
);
error.code = "ERR_INVALID_ARG_TYPE";
throw error;
}
if (path2.protocol !== "file:") {
const error = new TypeError("The URL must be of scheme file");
error.code = "ERR_INVALID_URL_SCHEME";
throw error;
}
return getPathFromURLPosix(path2);
}
function getPathFromURLPosix(url) {
if (url.hostname !== "") {
const error = new TypeError(
'File URL host must be "localhost" or empty on darwin'
);
error.code = "ERR_INVALID_FILE_URL_HOST";
throw error;
}
const pathname = url.pathname;
let index2 = -1;
while (++index2 < pathname.length) {
if (pathname.charCodeAt(index2) === 37 && pathname.charCodeAt(index2 + 1) === 50) {
const third = pathname.charCodeAt(index2 + 2);
if (third === 70 || third === 102) {
const error = new TypeError(
"File URL path must not include encoded / characters"
);
error.code = "ERR_INVALID_FILE_URL_PATH";
throw error;
}
}
}
return decodeURIComponent(pathname);
}
// node_modules/vfile/lib/index.js
var order = ["history", "path", "basename", "stem", "extname", "dirname"];
var VFile = class {
/**
* Create a new virtual file.
*
* `options` is treated as:
*
* * `string` or `Buffer` — `{value: options}`
* * `URL` — `{path: options}`
* * `VFile` — shallow copies its data over to the new file
* * `object` — all fields are shallow copied over to the new file
*
* Path related fields are set in the following order (least specific to
* most specific): `history`, `path`, `basename`, `stem`, `extname`,
* `dirname`.
*
* You cannot set `dirname` or `extname` without setting either `history`,
* `path`, `basename`, or `stem` too.
*
* @param {Compatible | null | undefined} [value]
* File value.
* @returns
* New instance.
*/
constructor(value) {
let options;
if (!value) {
options = {};
} else if (typeof value === "string" || buffer(value)) {
options = { value };
} else if (isUrl(value)) {
options = { path: value };
} else {
options = value;
}
this.data = {};
this.messages = [];
this.history = [];
this.cwd = proc.cwd();
this.value;
this.stored;
this.result;
this.map;
let index2 = -1;
while (++index2 < order.length) {
const prop2 = order[index2];
if (prop2 in options && options[prop2] !== void 0 && options[prop2] !== null) {
this[prop2] = prop2 === "history" ? [...options[prop2]] : options[prop2];
}
}
let prop;
for (prop in options) {
if (!order.includes(prop)) {
this[prop] = options[prop];
}
}
}
/**
* Get the full path (example: `'~/index.min.js'`).
*
* @returns {string}
*/
get path() {
return this.history[this.history.length - 1];
}
/**
* Set the full path (example: `'~/index.min.js'`).
*
* Cannot be nullified.
* You can set a file URL (a `URL` object with a `file:` protocol) which will
* be turned into a path with `url.fileURLToPath`.
*
* @param {string | URL} path
*/
set path(path2) {
if (isUrl(path2)) {
path2 = urlToPath(path2);
}
assertNonEmpty(path2, "path");
if (this.path !== path2) {
this.history.push(path2);
}
}
/**
* Get the parent path (example: `'~'`).
*/
get dirname() {
return typeof this.path === "string" ? path.dirname(this.path) : void 0;
}
/**
* Set the parent path (example: `'~'`).
*
* Cannot be set if theres no `path` yet.
*/
set dirname(dirname2) {
assertPath2(this.basename, "dirname");
this.path = path.join(dirname2 || "", this.basename);
}
/**
* Get the basename (including extname) (example: `'index.min.js'`).
*/
get basename() {
return typeof this.path === "string" ? path.basename(this.path) : void 0;
}
/**
* Set basename (including extname) (`'index.min.js'`).
*
* Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'`
* on windows).
* Cannot be nullified (use `file.path = file.dirname` instead).
*/
set basename(basename2) {
assertNonEmpty(basename2, "basename");
assertPart(basename2, "basename");
this.path = path.join(this.dirname || "", basename2);
}
/**
* Get the extname (including dot) (example: `'.js'`).
*/
get extname() {
return typeof this.path === "string" ? path.extname(this.path) : void 0;
}
/**
* Set the extname (including dot) (example: `'.js'`).
*
* Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'`
* on windows).
* Cannot be set if theres no `path` yet.
*/
set extname(extname2) {
assertPart(extname2, "extname");
assertPath2(this.dirname, "extname");
if (extname2) {
if (extname2.charCodeAt(0) !== 46) {
throw new Error("`extname` must start with `.`");
}
if (extname2.includes(".", 1)) {
throw new Error("`extname` cannot contain multiple dots");
}
}
this.path = path.join(this.dirname, this.stem + (extname2 || ""));
}
/**
* Get the stem (basename w/o extname) (example: `'index.min'`).
*/
get stem() {
return typeof this.path === "string" ? path.basename(this.path, this.extname) : void 0;
}
/**
* Set the stem (basename w/o extname) (example: `'index.min'`).
*
* Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'`
* on windows).
* Cannot be nullified (use `file.path = file.dirname` instead).
*/
set stem(stem) {
assertNonEmpty(stem, "stem");
assertPart(stem, "stem");
this.path = path.join(this.dirname || "", stem + (this.extname || ""));
}
/**
* Serialize the file.
*
* @param {BufferEncoding | null | undefined} [encoding='utf8']
* Character encoding to understand `value` as when its a `Buffer`
* (default: `'utf8'`).
* @returns {string}
* Serialized file.
*/
toString(encoding) {
return (this.value || "").toString(encoding || void 0);
}
/**
* Create a warning message associated with the file.
*
* Its `fatal` is set to `false` and `file` is set to the current file path.
* Its added to `file.messages`.
*
* @param {string | Error | VFileMessage} reason
* Reason for message, uses the stack and message of the error if given.
* @param {Node | NodeLike | Position | Point | null | undefined} [place]
* Place in file where the message occurred.
* @param {string | null | undefined} [origin]
* Place in code where the message originates (example:
* `'my-package:my-rule'` or `'my-rule'`).
* @returns {VFileMessage}
* Message.
*/
message(reason, place, origin) {
const message = new VFileMessage(reason, place, origin);
if (this.path) {
message.name = this.path + ":" + message.name;
message.file = this.path;
}
message.fatal = false;
this.messages.push(message);
return message;
}
/**
* Create an info message associated with the file.
*
* Its `fatal` is set to `null` and `file` is set to the current file path.
* Its added to `file.messages`.
*
* @param {string | Error | VFileMessage} reason
* Reason for message, uses the stack and message of the error if given.
* @param {Node | NodeLike | Position | Point | null | undefined} [place]
* Place in file where the message occurred.
* @param {string | null | undefined} [origin]
* Place in code where the message originates (example:
* `'my-package:my-rule'` or `'my-rule'`).
* @returns {VFileMessage}
* Message.
*/
info(reason, place, origin) {
const message = this.message(reason, place, origin);
message.fatal = null;
return message;
}
/**
* Create a fatal error associated with the file.
*
* Its `fatal` is set to `true` and `file` is set to the current file path.
* Its added to `file.messages`.
*
* > 👉 **Note**: a fatal error means that a file is no longer processable.
*
* @param {string | Error | VFileMessage} reason
* Reason for message, uses the stack and message of the error if given.
* @param {Node | NodeLike | Position | Point | null | undefined} [place]
* Place in file where the message occurred.
* @param {string | null | undefined} [origin]
* Place in code where the message originates (example:
* `'my-package:my-rule'` or `'my-rule'`).
* @returns {never}
* Message.
* @throws {VFileMessage}
* Message.
*/
fail(reason, place, origin) {
const message = this.message(reason, place, origin);
message.fatal = true;
throw message;
}
};
function assertPart(part, name) {
if (part && part.includes(path.sep)) {
throw new Error(
"`" + name + "` cannot be a path: did not expect `" + path.sep + "`"
);
}
}
function assertNonEmpty(part, name) {
if (!part) {
throw new Error("`" + name + "` cannot be empty");
}
}
function assertPath2(path2, name) {
if (!path2) {
throw new Error("Setting `" + name + "` requires `path` to be set too");
}
}
function buffer(value) {
return (0, import_is_buffer.default)(value);
}
// node_modules/unified/lib/index.js
var unified = base().freeze();
var own = {}.hasOwnProperty;
function base() {
const transformers = trough();
const attachers = [];
let namespace = {};
let frozen;
let freezeIndex = -1;
processor.data = data;
processor.Parser = void 0;
processor.Compiler = void 0;
processor.freeze = freeze;
processor.attachers = attachers;
processor.use = use;
processor.parse = parse2;
processor.stringify = stringify;
processor.run = run;
processor.runSync = runSync;
processor.process = process;
processor.processSync = processSync;
return processor;
function processor() {
const destination = base();
let index2 = -1;
while (++index2 < attachers.length) {
destination.use(...attachers[index2]);
}
destination.data((0, import_extend.default)(true, {}, namespace));
return destination;
}
function data(key, value) {
if (typeof key === "string") {
if (arguments.length === 2) {
assertUnfrozen("data", frozen);
namespace[key] = value;
return processor;
}
return own.call(namespace, key) && namespace[key] || null;
}
if (key) {
assertUnfrozen("data", frozen);
namespace = key;
return processor;
}
return namespace;
}
function freeze() {
if (frozen) {
return processor;
}
while (++freezeIndex < attachers.length) {
const [attacher, ...options] = attachers[freezeIndex];
if (options[0] === false) {
continue;
}
if (options[0] === true) {
options[0] = void 0;
}
const transformer = attacher.call(processor, ...options);
if (typeof transformer === "function") {
transformers.use(transformer);
}
}
frozen = true;
freezeIndex = Number.POSITIVE_INFINITY;
return processor;
}
function use(value, ...options) {
let settings;
assertUnfrozen("use", frozen);
if (value === null || value === void 0) {
} else if (typeof value === "function") {
addPlugin(value, ...options);
} else if (typeof value === "object") {
if (Array.isArray(value)) {
addList(value);
} else {
addPreset(value);
}
} else {
throw new TypeError("Expected usable value, not `" + value + "`");
}
if (settings) {
namespace.settings = Object.assign(namespace.settings || {}, settings);
}
return processor;
function add(value2) {
if (typeof value2 === "function") {
addPlugin(value2);
} else if (typeof value2 === "object") {
if (Array.isArray(value2)) {
const [plugin, ...options2] = value2;
addPlugin(plugin, ...options2);
} else {
addPreset(value2);
}
} else {
throw new TypeError("Expected usable value, not `" + value2 + "`");
}
}
function addPreset(result) {
addList(result.plugins);
if (result.settings) {
settings = Object.assign(settings || {}, result.settings);
}
}
function addList(plugins) {
let index2 = -1;
if (plugins === null || plugins === void 0) {
} else if (Array.isArray(plugins)) {
while (++index2 < plugins.length) {
const thing = plugins[index2];
add(thing);
}
} else {
throw new TypeError("Expected a list of plugins, not `" + plugins + "`");
}
}
function addPlugin(plugin, value2) {
let index2 = -1;
let entry;
while (++index2 < attachers.length) {
if (attachers[index2][0] === plugin) {
entry = attachers[index2];
break;
}
}
if (entry) {
if (isPlainObject(entry[1]) && isPlainObject(value2)) {
value2 = (0, import_extend.default)(true, entry[1], value2);
}
entry[1] = value2;
} else {
attachers.push([...arguments]);
}
}
}
function parse2(doc) {
processor.freeze();
const file = vfile(doc);
const Parser = processor.Parser;
assertParser("parse", Parser);
if (newable(Parser, "parse")) {
return new Parser(String(file), file).parse();
}
return Parser(String(file), file);
}
function stringify(node2, doc) {
processor.freeze();
const file = vfile(doc);
const Compiler = processor.Compiler;
assertCompiler("stringify", Compiler);
assertNode(node2);
if (newable(Compiler, "compile")) {
return new Compiler(node2, file).compile();
}
return Compiler(node2, file);
}
function run(node2, doc, callback) {
assertNode(node2);
processor.freeze();
if (!callback && typeof doc === "function") {
callback = doc;
doc = void 0;
}
if (!callback) {
return new Promise(executor);
}
executor(null, callback);
function executor(resolve, reject) {
transformers.run(node2, vfile(doc), done);
function done(error, tree, file) {
tree = tree || node2;
if (error) {
reject(error);
} else if (resolve) {
resolve(tree);
} else {
callback(null, tree, file);
}
}
}
}
function runSync(node2, file) {
let result;
let complete;
processor.run(node2, file, done);
assertDone("runSync", "run", complete);
return result;
function done(error, tree) {
bail(error);
result = tree;
complete = true;
}
}
function process(doc, callback) {
processor.freeze();
assertParser("process", processor.Parser);
assertCompiler("process", processor.Compiler);
if (!callback) {
return new Promise(executor);
}
executor(null, callback);
function executor(resolve, reject) {
const file = vfile(doc);
processor.run(processor.parse(file), file, (error, tree, file2) => {
if (error || !tree || !file2) {
done(error);
} else {
const result = processor.stringify(tree, file2);
if (result === void 0 || result === null) {
} else if (looksLikeAVFileValue(result)) {
file2.value = result;
} else {
file2.result = result;
}
done(error, file2);
}
});
function done(error, file2) {
if (error || !file2) {
reject(error);
} else if (resolve) {
resolve(file2);
} else {
callback(null, file2);
}
}
}
}
function processSync(doc) {
let complete;
processor.freeze();
assertParser("processSync", processor.Parser);
assertCompiler("processSync", processor.Compiler);
const file = vfile(doc);
processor.process(file, done);
assertDone("processSync", "process", complete);
return file;
function done(error) {
complete = true;
bail(error);
}
}
}
function newable(value, name) {
return typeof value === "function" && // Prototypes do exist.
// type-coverage:ignore-next-line
value.prototype && // A function with keys in its prototype is probably a constructor.
// Classes prototype methods are not enumerable, so we check if some value
// exists in the prototype.
// type-coverage:ignore-next-line
(keys(value.prototype) || name in value.prototype);
}
function keys(value) {
let key;
for (key in value) {
if (own.call(value, key)) {
return true;
}
}
return false;
}
function assertParser(name, value) {
if (typeof value !== "function") {
throw new TypeError("Cannot `" + name + "` without `Parser`");
}
}
function assertCompiler(name, value) {
if (typeof value !== "function") {
throw new TypeError("Cannot `" + name + "` without `Compiler`");
}
}
function assertUnfrozen(name, frozen) {
if (frozen) {
throw new Error(
"Cannot call `" + name + "` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`."
);
}
}
function assertNode(node2) {
if (!isPlainObject(node2) || typeof node2.type !== "string") {
throw new TypeError("Expected node, got `" + node2 + "`");
}
}
function assertDone(name, asyncName, complete) {
if (!complete) {
throw new Error(
"`" + name + "` finished async. Use `" + asyncName + "` instead"
);
}
}
function vfile(value) {
return looksLikeAVFile(value) ? value : new VFile(value);
}
function looksLikeAVFile(value) {
return Boolean(
value && typeof value === "object" && "message" in value && "messages" in value
);
}
function looksLikeAVFileValue(value) {
return typeof value === "string" || (0, import_is_buffer2.default)(value);
}
// node_modules/unist-util-is/lib/index.js
var convert = (
// Note: overloads in JSDoc cant yet use different `@template`s.
/**
* @type {(
* (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &
* (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &
* (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &
* ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &
* ((test?: Test) => Check)
* )}
*/
/**
* @param {Test} [test]
* @returns {Check}
*/
function(test) {
if (test === null || test === void 0) {
return ok;
}
if (typeof test === "function") {
return castFactory(test);
}
if (typeof test === "object") {
return Array.isArray(test) ? anyFactory(test) : propsFactory(test);
}
if (typeof test === "string") {
return typeFactory(test);
}
throw new Error("Expected function, string, or object as test");
}
);
function anyFactory(tests) {
const checks = [];
let index2 = -1;
while (++index2 < tests.length) {
checks[index2] = convert(tests[index2]);
}
return castFactory(any);
function any(...parameters) {
let index3 = -1;
while (++index3 < checks.length) {
if (checks[index3].apply(this, parameters))
return true;
}
return false;
}
}
function propsFactory(check) {
const checkAsRecord = (
/** @type {Record<string, unknown>} */
check
);
return castFactory(all2);
function all2(node2) {
const nodeAsRecord = (
/** @type {Record<string, unknown>} */
/** @type {unknown} */
node2
);
let key;
for (key in check) {
if (nodeAsRecord[key] !== checkAsRecord[key])
return false;
}
return true;
}
}
function typeFactory(check) {
return castFactory(type);
function type(node2) {
return node2 && node2.type === check;
}
}
function castFactory(testFunction) {
return check;
function check(value, index2, parent) {
return Boolean(
looksLikeANode(value) && testFunction.call(
this,
value,
typeof index2 === "number" ? index2 : void 0,
parent || void 0
)
);
}
}
function ok() {
return true;
}
function looksLikeANode(value) {
return value !== null && typeof value === "object" && "type" in value;
}
// node_modules/unist-util-visit-parents/lib/color.js
function color(d2) {
return d2;
}
// node_modules/unist-util-visit-parents/lib/index.js
var empty = [];
var CONTINUE = true;
var EXIT = false;
var SKIP = "skip";
function visitParents(tree, test, visitor, reverse) {
let check;
if (typeof test === "function" && typeof visitor !== "function") {
reverse = visitor;
visitor = test;
} else {
check = test;
}
const is2 = convert(check);
const step = reverse ? -1 : 1;
factory(tree, void 0, [])();
function factory(node2, index2, parents) {
const value = (
/** @type {Record<string, unknown>} */
node2 && typeof node2 === "object" ? node2 : {}
);
if (typeof value.type === "string") {
const name = (
// `hast`
typeof value.tagName === "string" ? value.tagName : (
// `xast`
typeof value.name === "string" ? value.name : void 0
)
);
Object.defineProperty(visit2, "name", {
value: "node (" + color(node2.type + (name ? "<" + name + ">" : "")) + ")"
});
}
return visit2;
function visit2() {
let result = empty;
let subresult;
let offset;
let grandparents;
if (!test || is2(node2, index2, parents[parents.length - 1] || void 0)) {
result = toResult(visitor(node2, parents));
if (result[0] === EXIT) {
return result;
}
}
if ("children" in node2 && node2.children) {
const nodeAsParent = (
/** @type {UnistParent} */
node2
);
if (nodeAsParent.children && result[0] !== SKIP) {
offset = (reverse ? nodeAsParent.children.length : -1) + step;
grandparents = parents.concat(nodeAsParent);
while (offset > -1 && offset < nodeAsParent.children.length) {
const child = nodeAsParent.children[offset];
subresult = factory(child, offset, grandparents)();
if (subresult[0] === EXIT) {
return subresult;
}
offset = typeof subresult[1] === "number" ? subresult[1] : offset + step;
}
}
}
return result;
}
}
}
function toResult(value) {
if (Array.isArray(value)) {
return value;
}
if (typeof value === "number") {
return [CONTINUE, value];
}
return value === null || value === void 0 ? empty : [value];
}
// node_modules/unist-util-visit/lib/index.js
function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {
let reverse;
let test;
let visitor;
if (typeof testOrVisitor === "function" && typeof visitorOrReverse !== "function") {
test = void 0;
visitor = testOrVisitor;
reverse = visitorOrReverse;
} else {
test = testOrVisitor;
visitor = visitorOrReverse;
reverse = maybeReverse;
}
visitParents(tree, test, overload, reverse);
function overload(node2, parents) {
const parent = parents[parents.length - 1];
const index2 = parent ? parent.children.indexOf(node2) : void 0;
return visitor(node2, index2, parent);
}
}
// node_modules/mdast-util-to-string/lib/index.js
var emptyOptions = {};
function toString(value, options) {
const settings = options || emptyOptions;
const includeImageAlt = typeof settings.includeImageAlt === "boolean" ? settings.includeImageAlt : true;
const includeHtml = typeof settings.includeHtml === "boolean" ? settings.includeHtml : true;
return one(value, includeImageAlt, includeHtml);
}
function one(value, includeImageAlt, includeHtml) {
if (node(value)) {
if ("value" in value) {
return value.type === "html" && !includeHtml ? "" : value.value;
}
if (includeImageAlt && "alt" in value && value.alt) {
return value.alt;
}
if ("children" in value) {
return all(value.children, includeImageAlt, includeHtml);
}
}
if (Array.isArray(value)) {
return all(value, includeImageAlt, includeHtml);
}
return "";
}
function all(values, includeImageAlt, includeHtml) {
const result = [];
let index2 = -1;
while (++index2 < values.length) {
result[index2] = one(values[index2], includeImageAlt, includeHtml);
}
return result.join("");
}
function node(value) {
return Boolean(value && typeof value === "object");
}
// node_modules/micromark-util-chunked/index.js
function splice(list2, start, remove, items) {
const end = list2.length;
let chunkStart = 0;
let parameters;
if (start < 0) {
start = -start > end ? 0 : end + start;
} else {
start = start > end ? end : start;
}
remove = remove > 0 ? remove : 0;
if (items.length < 1e4) {
parameters = Array.from(items);
parameters.unshift(start, remove);
list2.splice(...parameters);
} else {
if (remove)
list2.splice(start, remove);
while (chunkStart < items.length) {
parameters = items.slice(chunkStart, chunkStart + 1e4);
parameters.unshift(start, 0);
list2.splice(...parameters);
chunkStart += 1e4;
start += 1e4;
}
}
}
function push(list2, items) {
if (list2.length > 0) {
splice(list2, list2.length, 0, items);
return list2;
}
return items;
}
// node_modules/micromark-util-combine-extensions/index.js
var hasOwnProperty = {}.hasOwnProperty;
function combineExtensions(extensions) {
const all2 = {};
let index2 = -1;
while (++index2 < extensions.length) {
syntaxExtension(all2, extensions[index2]);
}
return all2;
}
function syntaxExtension(all2, extension2) {
let hook;
for (hook in extension2) {
const maybe = hasOwnProperty.call(all2, hook) ? all2[hook] : void 0;
const left = maybe || (all2[hook] = {});
const right = extension2[hook];
let code;
if (right) {
for (code in right) {
if (!hasOwnProperty.call(left, code))
left[code] = [];
const value = right[code];
constructs(
// @ts-expect-error Looks like a list.
left[code],
Array.isArray(value) ? value : value ? [value] : []
);
}
}
}
}
function constructs(existing, list2) {
let index2 = -1;
const before = [];
while (++index2 < list2.length) {
;
(list2[index2].add === "after" ? existing : before).push(list2[index2]);
}
splice(existing, 0, 0, before);
}
// node_modules/micromark-util-character/lib/unicode-punctuation-regex.js
var unicodePunctuationRegex = /[!-\/:-@\[-`\{-~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]/;
// node_modules/micromark-util-character/index.js
var asciiAlpha = regexCheck(/[A-Za-z]/);
var asciiAlphanumeric = regexCheck(/[\dA-Za-z]/);
var asciiAtext = regexCheck(/[#-'*+\--9=?A-Z^-~]/);
function asciiControl(code) {
return (
// Special whitespace codes (which have negative values), C0 and Control
// character DEL
code !== null && (code < 32 || code === 127)
);
}
var asciiDigit = regexCheck(/\d/);
var asciiHexDigit = regexCheck(/[\dA-Fa-f]/);
var asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);
function markdownLineEnding(code) {
return code !== null && code < -2;
}
function markdownLineEndingOrSpace(code) {
return code !== null && (code < 0 || code === 32);
}
function markdownSpace(code) {
return code === -2 || code === -1 || code === 32;
}
var unicodePunctuation = regexCheck(unicodePunctuationRegex);
var unicodeWhitespace = regexCheck(/\s/);
function regexCheck(regex) {
return check;
function check(code) {
return code !== null && regex.test(String.fromCharCode(code));
}
}
// node_modules/micromark-factory-space/index.js
function factorySpace(effects, ok2, type, max) {
const limit = max ? max - 1 : Number.POSITIVE_INFINITY;
let size = 0;
return start;
function start(code) {
if (markdownSpace(code)) {
effects.enter(type);
return prefix(code);
}
return ok2(code);
}
function prefix(code) {
if (markdownSpace(code) && size++ < limit) {
effects.consume(code);
return prefix;
}
effects.exit(type);
return ok2(code);
}
}
// node_modules/micromark/lib/initialize/content.js
var content = {
tokenize: initializeContent
};
function initializeContent(effects) {
const contentStart = effects.attempt(
this.parser.constructs.contentInitial,
afterContentStartConstruct,
paragraphInitial
);
let previous2;
return contentStart;
function afterContentStartConstruct(code) {
if (code === null) {
effects.consume(code);
return;
}
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return factorySpace(effects, contentStart, "linePrefix");
}
function paragraphInitial(code) {
effects.enter("paragraph");
return lineStart(code);
}
function lineStart(code) {
const token = effects.enter("chunkText", {
contentType: "text",
previous: previous2
});
if (previous2) {
previous2.next = token;
}
previous2 = token;
return data(code);
}
function data(code) {
if (code === null) {
effects.exit("chunkText");
effects.exit("paragraph");
effects.consume(code);
return;
}
if (markdownLineEnding(code)) {
effects.consume(code);
effects.exit("chunkText");
return lineStart;
}
effects.consume(code);
return data;
}
}
// node_modules/micromark/lib/initialize/document.js
var document2 = {
tokenize: initializeDocument
};
var containerConstruct = {
tokenize: tokenizeContainer
};
function initializeDocument(effects) {
const self2 = this;
const stack = [];
let continued = 0;
let childFlow;
let childToken;
let lineStartOffset;
return start;
function start(code) {
if (continued < stack.length) {
const item = stack[continued];
self2.containerState = item[1];
return effects.attempt(
item[0].continuation,
documentContinue,
checkNewContainers
)(code);
}
return checkNewContainers(code);
}
function documentContinue(code) {
continued++;
if (self2.containerState._closeFlow) {
self2.containerState._closeFlow = void 0;
if (childFlow) {
closeFlow();
}
const indexBeforeExits = self2.events.length;
let indexBeforeFlow = indexBeforeExits;
let point3;
while (indexBeforeFlow--) {
if (self2.events[indexBeforeFlow][0] === "exit" && self2.events[indexBeforeFlow][1].type === "chunkFlow") {
point3 = self2.events[indexBeforeFlow][1].end;
break;
}
}
exitContainers(continued);
let index2 = indexBeforeExits;
while (index2 < self2.events.length) {
self2.events[index2][1].end = Object.assign({}, point3);
index2++;
}
splice(
self2.events,
indexBeforeFlow + 1,
0,
self2.events.slice(indexBeforeExits)
);
self2.events.length = index2;
return checkNewContainers(code);
}
return start(code);
}
function checkNewContainers(code) {
if (continued === stack.length) {
if (!childFlow) {
return documentContinued(code);
}
if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {
return flowStart(code);
}
self2.interrupt = Boolean(
childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack
);
}
self2.containerState = {};
return effects.check(
containerConstruct,
thereIsANewContainer,
thereIsNoNewContainer
)(code);
}
function thereIsANewContainer(code) {
if (childFlow)
closeFlow();
exitContainers(continued);
return documentContinued(code);
}
function thereIsNoNewContainer(code) {
self2.parser.lazy[self2.now().line] = continued !== stack.length;
lineStartOffset = self2.now().offset;
return flowStart(code);
}
function documentContinued(code) {
self2.containerState = {};
return effects.attempt(
containerConstruct,
containerContinue,
flowStart
)(code);
}
function containerContinue(code) {
continued++;
stack.push([self2.currentConstruct, self2.containerState]);
return documentContinued(code);
}
function flowStart(code) {
if (code === null) {
if (childFlow)
closeFlow();
exitContainers(0);
effects.consume(code);
return;
}
childFlow = childFlow || self2.parser.flow(self2.now());
effects.enter("chunkFlow", {
contentType: "flow",
previous: childToken,
_tokenizer: childFlow
});
return flowContinue(code);
}
function flowContinue(code) {
if (code === null) {
writeToChild(effects.exit("chunkFlow"), true);
exitContainers(0);
effects.consume(code);
return;
}
if (markdownLineEnding(code)) {
effects.consume(code);
writeToChild(effects.exit("chunkFlow"));
continued = 0;
self2.interrupt = void 0;
return start;
}
effects.consume(code);
return flowContinue;
}
function writeToChild(token, eof) {
const stream = self2.sliceStream(token);
if (eof)
stream.push(null);
token.previous = childToken;
if (childToken)
childToken.next = token;
childToken = token;
childFlow.defineSkip(token.start);
childFlow.write(stream);
if (self2.parser.lazy[token.start.line]) {
let index2 = childFlow.events.length;
while (index2--) {
if (
// The token starts before the line ending…
childFlow.events[index2][1].start.offset < lineStartOffset && // …and either is not ended yet…
(!childFlow.events[index2][1].end || // …or ends after it.
childFlow.events[index2][1].end.offset > lineStartOffset)
) {
return;
}
}
const indexBeforeExits = self2.events.length;
let indexBeforeFlow = indexBeforeExits;
let seen;
let point3;
while (indexBeforeFlow--) {
if (self2.events[indexBeforeFlow][0] === "exit" && self2.events[indexBeforeFlow][1].type === "chunkFlow") {
if (seen) {
point3 = self2.events[indexBeforeFlow][1].end;
break;
}
seen = true;
}
}
exitContainers(continued);
index2 = indexBeforeExits;
while (index2 < self2.events.length) {
self2.events[index2][1].end = Object.assign({}, point3);
index2++;
}
splice(
self2.events,
indexBeforeFlow + 1,
0,
self2.events.slice(indexBeforeExits)
);
self2.events.length = index2;
}
}
function exitContainers(size) {
let index2 = stack.length;
while (index2-- > size) {
const entry = stack[index2];
self2.containerState = entry[1];
entry[0].exit.call(self2, effects);
}
stack.length = size;
}
function closeFlow() {
childFlow.write([null]);
childToken = void 0;
childFlow = void 0;
self2.containerState._closeFlow = void 0;
}
}
function tokenizeContainer(effects, ok2, nok) {
return factorySpace(
effects,
effects.attempt(this.parser.constructs.document, ok2, nok),
"linePrefix",
this.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4
);
}
// node_modules/micromark-util-classify-character/index.js
function classifyCharacter(code) {
if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {
return 1;
}
if (unicodePunctuation(code)) {
return 2;
}
}
// node_modules/micromark-util-resolve-all/index.js
function resolveAll(constructs2, events, context) {
const called = [];
let index2 = -1;
while (++index2 < constructs2.length) {
const resolve = constructs2[index2].resolveAll;
if (resolve && !called.includes(resolve)) {
events = resolve(events, context);
called.push(resolve);
}
}
return events;
}
// node_modules/micromark-core-commonmark/lib/attention.js
var attention = {
name: "attention",
tokenize: tokenizeAttention,
resolveAll: resolveAllAttention
};
function resolveAllAttention(events, context) {
let index2 = -1;
let open;
let group;
let text3;
let openingSequence;
let closingSequence;
let use;
let nextEvents;
let offset;
while (++index2 < events.length) {
if (events[index2][0] === "enter" && events[index2][1].type === "attentionSequence" && events[index2][1]._close) {
open = index2;
while (open--) {
if (events[open][0] === "exit" && events[open][1].type === "attentionSequence" && events[open][1]._open && // If the markers are the same:
context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index2][1]).charCodeAt(0)) {
if ((events[open][1]._close || events[index2][1]._open) && (events[index2][1].end.offset - events[index2][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index2][1].end.offset - events[index2][1].start.offset) % 3)) {
continue;
}
use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index2][1].end.offset - events[index2][1].start.offset > 1 ? 2 : 1;
const start = Object.assign({}, events[open][1].end);
const end = Object.assign({}, events[index2][1].start);
movePoint(start, -use);
movePoint(end, use);
openingSequence = {
type: use > 1 ? "strongSequence" : "emphasisSequence",
start,
end: Object.assign({}, events[open][1].end)
};
closingSequence = {
type: use > 1 ? "strongSequence" : "emphasisSequence",
start: Object.assign({}, events[index2][1].start),
end
};
text3 = {
type: use > 1 ? "strongText" : "emphasisText",
start: Object.assign({}, events[open][1].end),
end: Object.assign({}, events[index2][1].start)
};
group = {
type: use > 1 ? "strong" : "emphasis",
start: Object.assign({}, openingSequence.start),
end: Object.assign({}, closingSequence.end)
};
events[open][1].end = Object.assign({}, openingSequence.start);
events[index2][1].start = Object.assign({}, closingSequence.end);
nextEvents = [];
if (events[open][1].end.offset - events[open][1].start.offset) {
nextEvents = push(nextEvents, [
["enter", events[open][1], context],
["exit", events[open][1], context]
]);
}
nextEvents = push(nextEvents, [
["enter", group, context],
["enter", openingSequence, context],
["exit", openingSequence, context],
["enter", text3, context]
]);
nextEvents = push(
nextEvents,
resolveAll(
context.parser.constructs.insideSpan.null,
events.slice(open + 1, index2),
context
)
);
nextEvents = push(nextEvents, [
["exit", text3, context],
["enter", closingSequence, context],
["exit", closingSequence, context],
["exit", group, context]
]);
if (events[index2][1].end.offset - events[index2][1].start.offset) {
offset = 2;
nextEvents = push(nextEvents, [
["enter", events[index2][1], context],
["exit", events[index2][1], context]
]);
} else {
offset = 0;
}
splice(events, open - 1, index2 - open + 3, nextEvents);
index2 = open + nextEvents.length - offset - 2;
break;
}
}
}
}
index2 = -1;
while (++index2 < events.length) {
if (events[index2][1].type === "attentionSequence") {
events[index2][1].type = "data";
}
}
return events;
}
function tokenizeAttention(effects, ok2) {
const attentionMarkers2 = this.parser.constructs.attentionMarkers.null;
const previous2 = this.previous;
const before = classifyCharacter(previous2);
let marker;
return start;
function start(code) {
marker = code;
effects.enter("attentionSequence");
return inside(code);
}
function inside(code) {
if (code === marker) {
effects.consume(code);
return inside;
}
const token = effects.exit("attentionSequence");
const after = classifyCharacter(code);
const open = !after || after === 2 && before || attentionMarkers2.includes(code);
const close = !before || before === 2 && after || attentionMarkers2.includes(previous2);
token._open = Boolean(marker === 42 ? open : open && (before || !close));
token._close = Boolean(marker === 42 ? close : close && (after || !open));
return ok2(code);
}
}
function movePoint(point3, offset) {
point3.column += offset;
point3.offset += offset;
point3._bufferIndex += offset;
}
// node_modules/micromark-core-commonmark/lib/autolink.js
var autolink = {
name: "autolink",
tokenize: tokenizeAutolink
};
function tokenizeAutolink(effects, ok2, nok) {
let size = 0;
return start;
function start(code) {
effects.enter("autolink");
effects.enter("autolinkMarker");
effects.consume(code);
effects.exit("autolinkMarker");
effects.enter("autolinkProtocol");
return open;
}
function open(code) {
if (asciiAlpha(code)) {
effects.consume(code);
return schemeOrEmailAtext;
}
return emailAtext(code);
}
function schemeOrEmailAtext(code) {
if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {
size = 1;
return schemeInsideOrEmailAtext(code);
}
return emailAtext(code);
}
function schemeInsideOrEmailAtext(code) {
if (code === 58) {
effects.consume(code);
size = 0;
return urlInside;
}
if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {
effects.consume(code);
return schemeInsideOrEmailAtext;
}
size = 0;
return emailAtext(code);
}
function urlInside(code) {
if (code === 62) {
effects.exit("autolinkProtocol");
effects.enter("autolinkMarker");
effects.consume(code);
effects.exit("autolinkMarker");
effects.exit("autolink");
return ok2;
}
if (code === null || code === 32 || code === 60 || asciiControl(code)) {
return nok(code);
}
effects.consume(code);
return urlInside;
}
function emailAtext(code) {
if (code === 64) {
effects.consume(code);
return emailAtSignOrDot;
}
if (asciiAtext(code)) {
effects.consume(code);
return emailAtext;
}
return nok(code);
}
function emailAtSignOrDot(code) {
return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);
}
function emailLabel(code) {
if (code === 46) {
effects.consume(code);
size = 0;
return emailAtSignOrDot;
}
if (code === 62) {
effects.exit("autolinkProtocol").type = "autolinkEmail";
effects.enter("autolinkMarker");
effects.consume(code);
effects.exit("autolinkMarker");
effects.exit("autolink");
return ok2;
}
return emailValue(code);
}
function emailValue(code) {
if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {
const next = code === 45 ? emailValue : emailLabel;
effects.consume(code);
return next;
}
return nok(code);
}
}
// node_modules/micromark-core-commonmark/lib/blank-line.js
var blankLine = {
tokenize: tokenizeBlankLine,
partial: true
};
function tokenizeBlankLine(effects, ok2, nok) {
return start;
function start(code) {
return markdownSpace(code) ? factorySpace(effects, after, "linePrefix")(code) : after(code);
}
function after(code) {
return code === null || markdownLineEnding(code) ? ok2(code) : nok(code);
}
}
// node_modules/micromark-core-commonmark/lib/block-quote.js
var blockQuote = {
name: "blockQuote",
tokenize: tokenizeBlockQuoteStart,
continuation: {
tokenize: tokenizeBlockQuoteContinuation
},
exit
};
function tokenizeBlockQuoteStart(effects, ok2, nok) {
const self2 = this;
return start;
function start(code) {
if (code === 62) {
const state = self2.containerState;
if (!state.open) {
effects.enter("blockQuote", {
_container: true
});
state.open = true;
}
effects.enter("blockQuotePrefix");
effects.enter("blockQuoteMarker");
effects.consume(code);
effects.exit("blockQuoteMarker");
return after;
}
return nok(code);
}
function after(code) {
if (markdownSpace(code)) {
effects.enter("blockQuotePrefixWhitespace");
effects.consume(code);
effects.exit("blockQuotePrefixWhitespace");
effects.exit("blockQuotePrefix");
return ok2;
}
effects.exit("blockQuotePrefix");
return ok2(code);
}
}
function tokenizeBlockQuoteContinuation(effects, ok2, nok) {
const self2 = this;
return contStart;
function contStart(code) {
if (markdownSpace(code)) {
return factorySpace(
effects,
contBefore,
"linePrefix",
self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4
)(code);
}
return contBefore(code);
}
function contBefore(code) {
return effects.attempt(blockQuote, ok2, nok)(code);
}
}
function exit(effects) {
effects.exit("blockQuote");
}
// node_modules/micromark-core-commonmark/lib/character-escape.js
var characterEscape = {
name: "characterEscape",
tokenize: tokenizeCharacterEscape
};
function tokenizeCharacterEscape(effects, ok2, nok) {
return start;
function start(code) {
effects.enter("characterEscape");
effects.enter("escapeMarker");
effects.consume(code);
effects.exit("escapeMarker");
return inside;
}
function inside(code) {
if (asciiPunctuation(code)) {
effects.enter("characterEscapeValue");
effects.consume(code);
effects.exit("characterEscapeValue");
effects.exit("characterEscape");
return ok2;
}
return nok(code);
}
}
// node_modules/decode-named-character-reference/index.dom.js
var element = document.createElement("i");
function decodeNamedCharacterReference(value) {
const characterReference2 = "&" + value + ";";
element.innerHTML = characterReference2;
const char = element.textContent;
if (char.charCodeAt(char.length - 1) === 59 && value !== "semi") {
return false;
}
return char === characterReference2 ? false : char;
}
// node_modules/micromark-core-commonmark/lib/character-reference.js
var characterReference = {
name: "characterReference",
tokenize: tokenizeCharacterReference
};
function tokenizeCharacterReference(effects, ok2, nok) {
const self2 = this;
let size = 0;
let max;
let test;
return start;
function start(code) {
effects.enter("characterReference");
effects.enter("characterReferenceMarker");
effects.consume(code);
effects.exit("characterReferenceMarker");
return open;
}
function open(code) {
if (code === 35) {
effects.enter("characterReferenceMarkerNumeric");
effects.consume(code);
effects.exit("characterReferenceMarkerNumeric");
return numeric;
}
effects.enter("characterReferenceValue");
max = 31;
test = asciiAlphanumeric;
return value(code);
}
function numeric(code) {
if (code === 88 || code === 120) {
effects.enter("characterReferenceMarkerHexadecimal");
effects.consume(code);
effects.exit("characterReferenceMarkerHexadecimal");
effects.enter("characterReferenceValue");
max = 6;
test = asciiHexDigit;
return value;
}
effects.enter("characterReferenceValue");
max = 7;
test = asciiDigit;
return value(code);
}
function value(code) {
if (code === 59 && size) {
const token = effects.exit("characterReferenceValue");
if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self2.sliceSerialize(token))) {
return nok(code);
}
effects.enter("characterReferenceMarker");
effects.consume(code);
effects.exit("characterReferenceMarker");
effects.exit("characterReference");
return ok2;
}
if (test(code) && size++ < max) {
effects.consume(code);
return value;
}
return nok(code);
}
}
// node_modules/micromark-core-commonmark/lib/code-fenced.js
var nonLazyContinuation = {
tokenize: tokenizeNonLazyContinuation,
partial: true
};
var codeFenced = {
name: "codeFenced",
tokenize: tokenizeCodeFenced,
concrete: true
};
function tokenizeCodeFenced(effects, ok2, nok) {
const self2 = this;
const closeStart = {
tokenize: tokenizeCloseStart,
partial: true
};
let initialPrefix = 0;
let sizeOpen = 0;
let marker;
return start;
function start(code) {
return beforeSequenceOpen(code);
}
function beforeSequenceOpen(code) {
const tail = self2.events[self2.events.length - 1];
initialPrefix = tail && tail[1].type === "linePrefix" ? tail[2].sliceSerialize(tail[1], true).length : 0;
marker = code;
effects.enter("codeFenced");
effects.enter("codeFencedFence");
effects.enter("codeFencedFenceSequence");
return sequenceOpen(code);
}
function sequenceOpen(code) {
if (code === marker) {
sizeOpen++;
effects.consume(code);
return sequenceOpen;
}
if (sizeOpen < 3) {
return nok(code);
}
effects.exit("codeFencedFenceSequence");
return markdownSpace(code) ? factorySpace(effects, infoBefore, "whitespace")(code) : infoBefore(code);
}
function infoBefore(code) {
if (code === null || markdownLineEnding(code)) {
effects.exit("codeFencedFence");
return self2.interrupt ? ok2(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);
}
effects.enter("codeFencedFenceInfo");
effects.enter("chunkString", {
contentType: "string"
});
return info(code);
}
function info(code) {
if (code === null || markdownLineEnding(code)) {
effects.exit("chunkString");
effects.exit("codeFencedFenceInfo");
return infoBefore(code);
}
if (markdownSpace(code)) {
effects.exit("chunkString");
effects.exit("codeFencedFenceInfo");
return factorySpace(effects, metaBefore, "whitespace")(code);
}
if (code === 96 && code === marker) {
return nok(code);
}
effects.consume(code);
return info;
}
function metaBefore(code) {
if (code === null || markdownLineEnding(code)) {
return infoBefore(code);
}
effects.enter("codeFencedFenceMeta");
effects.enter("chunkString", {
contentType: "string"
});
return meta(code);
}
function meta(code) {
if (code === null || markdownLineEnding(code)) {
effects.exit("chunkString");
effects.exit("codeFencedFenceMeta");
return infoBefore(code);
}
if (code === 96 && code === marker) {
return nok(code);
}
effects.consume(code);
return meta;
}
function atNonLazyBreak(code) {
return effects.attempt(closeStart, after, contentBefore)(code);
}
function contentBefore(code) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return contentStart;
}
function contentStart(code) {
return initialPrefix > 0 && markdownSpace(code) ? factorySpace(
effects,
beforeContentChunk,
"linePrefix",
initialPrefix + 1
)(code) : beforeContentChunk(code);
}
function beforeContentChunk(code) {
if (code === null || markdownLineEnding(code)) {
return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);
}
effects.enter("codeFlowValue");
return contentChunk(code);
}
function contentChunk(code) {
if (code === null || markdownLineEnding(code)) {
effects.exit("codeFlowValue");
return beforeContentChunk(code);
}
effects.consume(code);
return contentChunk;
}
function after(code) {
effects.exit("codeFenced");
return ok2(code);
}
function tokenizeCloseStart(effects2, ok3, nok2) {
let size = 0;
return startBefore;
function startBefore(code) {
effects2.enter("lineEnding");
effects2.consume(code);
effects2.exit("lineEnding");
return start2;
}
function start2(code) {
effects2.enter("codeFencedFence");
return markdownSpace(code) ? factorySpace(
effects2,
beforeSequenceClose,
"linePrefix",
self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4
)(code) : beforeSequenceClose(code);
}
function beforeSequenceClose(code) {
if (code === marker) {
effects2.enter("codeFencedFenceSequence");
return sequenceClose(code);
}
return nok2(code);
}
function sequenceClose(code) {
if (code === marker) {
size++;
effects2.consume(code);
return sequenceClose;
}
if (size >= sizeOpen) {
effects2.exit("codeFencedFenceSequence");
return markdownSpace(code) ? factorySpace(effects2, sequenceCloseAfter, "whitespace")(code) : sequenceCloseAfter(code);
}
return nok2(code);
}
function sequenceCloseAfter(code) {
if (code === null || markdownLineEnding(code)) {
effects2.exit("codeFencedFence");
return ok3(code);
}
return nok2(code);
}
}
}
function tokenizeNonLazyContinuation(effects, ok2, nok) {
const self2 = this;
return start;
function start(code) {
if (code === null) {
return nok(code);
}
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return lineStart;
}
function lineStart(code) {
return self2.parser.lazy[self2.now().line] ? nok(code) : ok2(code);
}
}
// node_modules/micromark-core-commonmark/lib/code-indented.js
var codeIndented = {
name: "codeIndented",
tokenize: tokenizeCodeIndented
};
var furtherStart = {
tokenize: tokenizeFurtherStart,
partial: true
};
function tokenizeCodeIndented(effects, ok2, nok) {
const self2 = this;
return start;
function start(code) {
effects.enter("codeIndented");
return factorySpace(effects, afterPrefix, "linePrefix", 4 + 1)(code);
}
function afterPrefix(code) {
const tail = self2.events[self2.events.length - 1];
return tail && tail[1].type === "linePrefix" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);
}
function atBreak(code) {
if (code === null) {
return after(code);
}
if (markdownLineEnding(code)) {
return effects.attempt(furtherStart, atBreak, after)(code);
}
effects.enter("codeFlowValue");
return inside(code);
}
function inside(code) {
if (code === null || markdownLineEnding(code)) {
effects.exit("codeFlowValue");
return atBreak(code);
}
effects.consume(code);
return inside;
}
function after(code) {
effects.exit("codeIndented");
return ok2(code);
}
}
function tokenizeFurtherStart(effects, ok2, nok) {
const self2 = this;
return furtherStart2;
function furtherStart2(code) {
if (self2.parser.lazy[self2.now().line]) {
return nok(code);
}
if (markdownLineEnding(code)) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return furtherStart2;
}
return factorySpace(effects, afterPrefix, "linePrefix", 4 + 1)(code);
}
function afterPrefix(code) {
const tail = self2.events[self2.events.length - 1];
return tail && tail[1].type === "linePrefix" && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok2(code) : markdownLineEnding(code) ? furtherStart2(code) : nok(code);
}
}
// node_modules/micromark-core-commonmark/lib/code-text.js
var codeText = {
name: "codeText",
tokenize: tokenizeCodeText,
resolve: resolveCodeText,
previous
};
function resolveCodeText(events) {
let tailExitIndex = events.length - 4;
let headEnterIndex = 3;
let index2;
let enter;
if ((events[headEnterIndex][1].type === "lineEnding" || events[headEnterIndex][1].type === "space") && (events[tailExitIndex][1].type === "lineEnding" || events[tailExitIndex][1].type === "space")) {
index2 = headEnterIndex;
while (++index2 < tailExitIndex) {
if (events[index2][1].type === "codeTextData") {
events[headEnterIndex][1].type = "codeTextPadding";
events[tailExitIndex][1].type = "codeTextPadding";
headEnterIndex += 2;
tailExitIndex -= 2;
break;
}
}
}
index2 = headEnterIndex - 1;
tailExitIndex++;
while (++index2 <= tailExitIndex) {
if (enter === void 0) {
if (index2 !== tailExitIndex && events[index2][1].type !== "lineEnding") {
enter = index2;
}
} else if (index2 === tailExitIndex || events[index2][1].type === "lineEnding") {
events[enter][1].type = "codeTextData";
if (index2 !== enter + 2) {
events[enter][1].end = events[index2 - 1][1].end;
events.splice(enter + 2, index2 - enter - 2);
tailExitIndex -= index2 - enter - 2;
index2 = enter + 2;
}
enter = void 0;
}
}
return events;
}
function previous(code) {
return code !== 96 || this.events[this.events.length - 1][1].type === "characterEscape";
}
function tokenizeCodeText(effects, ok2, nok) {
const self2 = this;
let sizeOpen = 0;
let size;
let token;
return start;
function start(code) {
effects.enter("codeText");
effects.enter("codeTextSequence");
return sequenceOpen(code);
}
function sequenceOpen(code) {
if (code === 96) {
effects.consume(code);
sizeOpen++;
return sequenceOpen;
}
effects.exit("codeTextSequence");
return between(code);
}
function between(code) {
if (code === null) {
return nok(code);
}
if (code === 32) {
effects.enter("space");
effects.consume(code);
effects.exit("space");
return between;
}
if (code === 96) {
token = effects.enter("codeTextSequence");
size = 0;
return sequenceClose(code);
}
if (markdownLineEnding(code)) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return between;
}
effects.enter("codeTextData");
return data(code);
}
function data(code) {
if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {
effects.exit("codeTextData");
return between(code);
}
effects.consume(code);
return data;
}
function sequenceClose(code) {
if (code === 96) {
effects.consume(code);
size++;
return sequenceClose;
}
if (size === sizeOpen) {
effects.exit("codeTextSequence");
effects.exit("codeText");
return ok2(code);
}
token.type = "codeTextData";
return data(code);
}
}
// node_modules/micromark-util-subtokenize/index.js
function subtokenize(events) {
const jumps = {};
let index2 = -1;
let event;
let lineIndex;
let otherIndex;
let otherEvent;
let parameters;
let subevents;
let more;
while (++index2 < events.length) {
while (index2 in jumps) {
index2 = jumps[index2];
}
event = events[index2];
if (index2 && event[1].type === "chunkFlow" && events[index2 - 1][1].type === "listItemPrefix") {
subevents = event[1]._tokenizer.events;
otherIndex = 0;
if (otherIndex < subevents.length && subevents[otherIndex][1].type === "lineEndingBlank") {
otherIndex += 2;
}
if (otherIndex < subevents.length && subevents[otherIndex][1].type === "content") {
while (++otherIndex < subevents.length) {
if (subevents[otherIndex][1].type === "content") {
break;
}
if (subevents[otherIndex][1].type === "chunkText") {
subevents[otherIndex][1]._isInFirstContentOfListItem = true;
otherIndex++;
}
}
}
}
if (event[0] === "enter") {
if (event[1].contentType) {
Object.assign(jumps, subcontent(events, index2));
index2 = jumps[index2];
more = true;
}
} else if (event[1]._container) {
otherIndex = index2;
lineIndex = void 0;
while (otherIndex--) {
otherEvent = events[otherIndex];
if (otherEvent[1].type === "lineEnding" || otherEvent[1].type === "lineEndingBlank") {
if (otherEvent[0] === "enter") {
if (lineIndex) {
events[lineIndex][1].type = "lineEndingBlank";
}
otherEvent[1].type = "lineEnding";
lineIndex = otherIndex;
}
} else {
break;
}
}
if (lineIndex) {
event[1].end = Object.assign({}, events[lineIndex][1].start);
parameters = events.slice(lineIndex, index2);
parameters.unshift(event);
splice(events, lineIndex, index2 - lineIndex + 1, parameters);
}
}
}
return !more;
}
function subcontent(events, eventIndex) {
const token = events[eventIndex][1];
const context = events[eventIndex][2];
let startPosition = eventIndex - 1;
const startPositions = [];
const tokenizer = token._tokenizer || context.parser[token.contentType](token.start);
const childEvents = tokenizer.events;
const jumps = [];
const gaps = {};
let stream;
let previous2;
let index2 = -1;
let current = token;
let adjust = 0;
let start = 0;
const breaks = [start];
while (current) {
while (events[++startPosition][1] !== current) {
}
startPositions.push(startPosition);
if (!current._tokenizer) {
stream = context.sliceStream(current);
if (!current.next) {
stream.push(null);
}
if (previous2) {
tokenizer.defineSkip(current.start);
}
if (current._isInFirstContentOfListItem) {
tokenizer._gfmTasklistFirstContentOfListItem = true;
}
tokenizer.write(stream);
if (current._isInFirstContentOfListItem) {
tokenizer._gfmTasklistFirstContentOfListItem = void 0;
}
}
previous2 = current;
current = current.next;
}
current = token;
while (++index2 < childEvents.length) {
if (
// Find a void token that includes a break.
childEvents[index2][0] === "exit" && childEvents[index2 - 1][0] === "enter" && childEvents[index2][1].type === childEvents[index2 - 1][1].type && childEvents[index2][1].start.line !== childEvents[index2][1].end.line
) {
start = index2 + 1;
breaks.push(start);
current._tokenizer = void 0;
current.previous = void 0;
current = current.next;
}
}
tokenizer.events = [];
if (current) {
current._tokenizer = void 0;
current.previous = void 0;
} else {
breaks.pop();
}
index2 = breaks.length;
while (index2--) {
const slice = childEvents.slice(breaks[index2], breaks[index2 + 1]);
const start2 = startPositions.pop();
jumps.unshift([start2, start2 + slice.length - 1]);
splice(events, start2, 2, slice);
}
index2 = -1;
while (++index2 < jumps.length) {
gaps[adjust + jumps[index2][0]] = adjust + jumps[index2][1];
adjust += jumps[index2][1] - jumps[index2][0] - 1;
}
return gaps;
}
// node_modules/micromark-core-commonmark/lib/content.js
var content2 = {
tokenize: tokenizeContent,
resolve: resolveContent
};
var continuationConstruct = {
tokenize: tokenizeContinuation,
partial: true
};
function resolveContent(events) {
subtokenize(events);
return events;
}
function tokenizeContent(effects, ok2) {
let previous2;
return chunkStart;
function chunkStart(code) {
effects.enter("content");
previous2 = effects.enter("chunkContent", {
contentType: "content"
});
return chunkInside(code);
}
function chunkInside(code) {
if (code === null) {
return contentEnd(code);
}
if (markdownLineEnding(code)) {
return effects.check(
continuationConstruct,
contentContinue,
contentEnd
)(code);
}
effects.consume(code);
return chunkInside;
}
function contentEnd(code) {
effects.exit("chunkContent");
effects.exit("content");
return ok2(code);
}
function contentContinue(code) {
effects.consume(code);
effects.exit("chunkContent");
previous2.next = effects.enter("chunkContent", {
contentType: "content",
previous: previous2
});
previous2 = previous2.next;
return chunkInside;
}
}
function tokenizeContinuation(effects, ok2, nok) {
const self2 = this;
return startLookahead;
function startLookahead(code) {
effects.exit("chunkContent");
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return factorySpace(effects, prefixed, "linePrefix");
}
function prefixed(code) {
if (code === null || markdownLineEnding(code)) {
return nok(code);
}
const tail = self2.events[self2.events.length - 1];
if (!self2.parser.constructs.disable.null.includes("codeIndented") && tail && tail[1].type === "linePrefix" && tail[2].sliceSerialize(tail[1], true).length >= 4) {
return ok2(code);
}
return effects.interrupt(self2.parser.constructs.flow, nok, ok2)(code);
}
}
// node_modules/micromark-factory-destination/index.js
function factoryDestination(effects, ok2, nok, type, literalType, literalMarkerType, rawType, stringType, max) {
const limit = max || Number.POSITIVE_INFINITY;
let balance = 0;
return start;
function start(code) {
if (code === 60) {
effects.enter(type);
effects.enter(literalType);
effects.enter(literalMarkerType);
effects.consume(code);
effects.exit(literalMarkerType);
return enclosedBefore;
}
if (code === null || code === 32 || code === 41 || asciiControl(code)) {
return nok(code);
}
effects.enter(type);
effects.enter(rawType);
effects.enter(stringType);
effects.enter("chunkString", {
contentType: "string"
});
return raw(code);
}
function enclosedBefore(code) {
if (code === 62) {
effects.enter(literalMarkerType);
effects.consume(code);
effects.exit(literalMarkerType);
effects.exit(literalType);
effects.exit(type);
return ok2;
}
effects.enter(stringType);
effects.enter("chunkString", {
contentType: "string"
});
return enclosed(code);
}
function enclosed(code) {
if (code === 62) {
effects.exit("chunkString");
effects.exit(stringType);
return enclosedBefore(code);
}
if (code === null || code === 60 || markdownLineEnding(code)) {
return nok(code);
}
effects.consume(code);
return code === 92 ? enclosedEscape : enclosed;
}
function enclosedEscape(code) {
if (code === 60 || code === 62 || code === 92) {
effects.consume(code);
return enclosed;
}
return enclosed(code);
}
function raw(code) {
if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {
effects.exit("chunkString");
effects.exit(stringType);
effects.exit(rawType);
effects.exit(type);
return ok2(code);
}
if (balance < limit && code === 40) {
effects.consume(code);
balance++;
return raw;
}
if (code === 41) {
effects.consume(code);
balance--;
return raw;
}
if (code === null || code === 32 || code === 40 || asciiControl(code)) {
return nok(code);
}
effects.consume(code);
return code === 92 ? rawEscape : raw;
}
function rawEscape(code) {
if (code === 40 || code === 41 || code === 92) {
effects.consume(code);
return raw;
}
return raw(code);
}
}
// node_modules/micromark-factory-label/index.js
function factoryLabel(effects, ok2, nok, type, markerType, stringType) {
const self2 = this;
let size = 0;
let seen;
return start;
function start(code) {
effects.enter(type);
effects.enter(markerType);
effects.consume(code);
effects.exit(markerType);
effects.enter(stringType);
return atBreak;
}
function atBreak(code) {
if (size > 999 || code === null || code === 91 || code === 93 && !seen || // To do: remove in the future once weve switched from
// `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,
// which doesnt need this.
// Hidden footnotes hook.
/* c8 ignore next 3 */
code === 94 && !size && "_hiddenFootnoteSupport" in self2.parser.constructs) {
return nok(code);
}
if (code === 93) {
effects.exit(stringType);
effects.enter(markerType);
effects.consume(code);
effects.exit(markerType);
effects.exit(type);
return ok2;
}
if (markdownLineEnding(code)) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return atBreak;
}
effects.enter("chunkString", {
contentType: "string"
});
return labelInside(code);
}
function labelInside(code) {
if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {
effects.exit("chunkString");
return atBreak(code);
}
effects.consume(code);
if (!seen)
seen = !markdownSpace(code);
return code === 92 ? labelEscape : labelInside;
}
function labelEscape(code) {
if (code === 91 || code === 92 || code === 93) {
effects.consume(code);
size++;
return labelInside;
}
return labelInside(code);
}
}
// node_modules/micromark-factory-title/index.js
function factoryTitle(effects, ok2, nok, type, markerType, stringType) {
let marker;
return start;
function start(code) {
if (code === 34 || code === 39 || code === 40) {
effects.enter(type);
effects.enter(markerType);
effects.consume(code);
effects.exit(markerType);
marker = code === 40 ? 41 : code;
return begin;
}
return nok(code);
}
function begin(code) {
if (code === marker) {
effects.enter(markerType);
effects.consume(code);
effects.exit(markerType);
effects.exit(type);
return ok2;
}
effects.enter(stringType);
return atBreak(code);
}
function atBreak(code) {
if (code === marker) {
effects.exit(stringType);
return begin(marker);
}
if (code === null) {
return nok(code);
}
if (markdownLineEnding(code)) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return factorySpace(effects, atBreak, "linePrefix");
}
effects.enter("chunkString", {
contentType: "string"
});
return inside(code);
}
function inside(code) {
if (code === marker || code === null || markdownLineEnding(code)) {
effects.exit("chunkString");
return atBreak(code);
}
effects.consume(code);
return code === 92 ? escape : inside;
}
function escape(code) {
if (code === marker || code === 92) {
effects.consume(code);
return inside;
}
return inside(code);
}
}
// node_modules/micromark-factory-whitespace/index.js
function factoryWhitespace(effects, ok2) {
let seen;
return start;
function start(code) {
if (markdownLineEnding(code)) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
seen = true;
return start;
}
if (markdownSpace(code)) {
return factorySpace(
effects,
start,
seen ? "linePrefix" : "lineSuffix"
)(code);
}
return ok2(code);
}
}
// node_modules/micromark-util-normalize-identifier/index.js
function normalizeIdentifier(value) {
return value.replace(/[\t\n\r ]+/g, " ").replace(/^ | $/g, "").toLowerCase().toUpperCase();
}
// node_modules/micromark-core-commonmark/lib/definition.js
var definition = {
name: "definition",
tokenize: tokenizeDefinition
};
var titleBefore = {
tokenize: tokenizeTitleBefore,
partial: true
};
function tokenizeDefinition(effects, ok2, nok) {
const self2 = this;
let identifier;
return start;
function start(code) {
effects.enter("definition");
return before(code);
}
function before(code) {
return factoryLabel.call(
self2,
effects,
labelAfter,
// Note: we dont need to reset the way `markdown-rs` does.
nok,
"definitionLabel",
"definitionLabelMarker",
"definitionLabelString"
)(code);
}
function labelAfter(code) {
identifier = normalizeIdentifier(
self2.sliceSerialize(self2.events[self2.events.length - 1][1]).slice(1, -1)
);
if (code === 58) {
effects.enter("definitionMarker");
effects.consume(code);
effects.exit("definitionMarker");
return markerAfter;
}
return nok(code);
}
function markerAfter(code) {
return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);
}
function destinationBefore(code) {
return factoryDestination(
effects,
destinationAfter,
// Note: we dont need to reset the way `markdown-rs` does.
nok,
"definitionDestination",
"definitionDestinationLiteral",
"definitionDestinationLiteralMarker",
"definitionDestinationRaw",
"definitionDestinationString"
)(code);
}
function destinationAfter(code) {
return effects.attempt(titleBefore, after, after)(code);
}
function after(code) {
return markdownSpace(code) ? factorySpace(effects, afterWhitespace, "whitespace")(code) : afterWhitespace(code);
}
function afterWhitespace(code) {
if (code === null || markdownLineEnding(code)) {
effects.exit("definition");
self2.parser.defined.push(identifier);
return ok2(code);
}
return nok(code);
}
}
function tokenizeTitleBefore(effects, ok2, nok) {
return titleBefore2;
function titleBefore2(code) {
return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);
}
function beforeMarker(code) {
return factoryTitle(
effects,
titleAfter,
nok,
"definitionTitle",
"definitionTitleMarker",
"definitionTitleString"
)(code);
}
function titleAfter(code) {
return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, "whitespace")(code) : titleAfterOptionalWhitespace(code);
}
function titleAfterOptionalWhitespace(code) {
return code === null || markdownLineEnding(code) ? ok2(code) : nok(code);
}
}
// node_modules/micromark-core-commonmark/lib/hard-break-escape.js
var hardBreakEscape = {
name: "hardBreakEscape",
tokenize: tokenizeHardBreakEscape
};
function tokenizeHardBreakEscape(effects, ok2, nok) {
return start;
function start(code) {
effects.enter("hardBreakEscape");
effects.consume(code);
return after;
}
function after(code) {
if (markdownLineEnding(code)) {
effects.exit("hardBreakEscape");
return ok2(code);
}
return nok(code);
}
}
// node_modules/micromark-core-commonmark/lib/heading-atx.js
var headingAtx = {
name: "headingAtx",
tokenize: tokenizeHeadingAtx,
resolve: resolveHeadingAtx
};
function resolveHeadingAtx(events, context) {
let contentEnd = events.length - 2;
let contentStart = 3;
let content3;
let text3;
if (events[contentStart][1].type === "whitespace") {
contentStart += 2;
}
if (contentEnd - 2 > contentStart && events[contentEnd][1].type === "whitespace") {
contentEnd -= 2;
}
if (events[contentEnd][1].type === "atxHeadingSequence" && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === "whitespace")) {
contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;
}
if (contentEnd > contentStart) {
content3 = {
type: "atxHeadingText",
start: events[contentStart][1].start,
end: events[contentEnd][1].end
};
text3 = {
type: "chunkText",
start: events[contentStart][1].start,
end: events[contentEnd][1].end,
contentType: "text"
};
splice(events, contentStart, contentEnd - contentStart + 1, [
["enter", content3, context],
["enter", text3, context],
["exit", text3, context],
["exit", content3, context]
]);
}
return events;
}
function tokenizeHeadingAtx(effects, ok2, nok) {
let size = 0;
return start;
function start(code) {
effects.enter("atxHeading");
return before(code);
}
function before(code) {
effects.enter("atxHeadingSequence");
return sequenceOpen(code);
}
function sequenceOpen(code) {
if (code === 35 && size++ < 6) {
effects.consume(code);
return sequenceOpen;
}
if (code === null || markdownLineEndingOrSpace(code)) {
effects.exit("atxHeadingSequence");
return atBreak(code);
}
return nok(code);
}
function atBreak(code) {
if (code === 35) {
effects.enter("atxHeadingSequence");
return sequenceFurther(code);
}
if (code === null || markdownLineEnding(code)) {
effects.exit("atxHeading");
return ok2(code);
}
if (markdownSpace(code)) {
return factorySpace(effects, atBreak, "whitespace")(code);
}
effects.enter("atxHeadingText");
return data(code);
}
function sequenceFurther(code) {
if (code === 35) {
effects.consume(code);
return sequenceFurther;
}
effects.exit("atxHeadingSequence");
return atBreak(code);
}
function data(code) {
if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {
effects.exit("atxHeadingText");
return atBreak(code);
}
effects.consume(code);
return data;
}
}
// node_modules/micromark-util-html-tag-name/index.js
var htmlBlockNames = [
"address",
"article",
"aside",
"base",
"basefont",
"blockquote",
"body",
"caption",
"center",
"col",
"colgroup",
"dd",
"details",
"dialog",
"dir",
"div",
"dl",
"dt",
"fieldset",
"figcaption",
"figure",
"footer",
"form",
"frame",
"frameset",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"head",
"header",
"hr",
"html",
"iframe",
"legend",
"li",
"link",
"main",
"menu",
"menuitem",
"nav",
"noframes",
"ol",
"optgroup",
"option",
"p",
"param",
"search",
"section",
"summary",
"table",
"tbody",
"td",
"tfoot",
"th",
"thead",
"title",
"tr",
"track",
"ul"
];
var htmlRawNames = ["pre", "script", "style", "textarea"];
// node_modules/micromark-core-commonmark/lib/html-flow.js
var htmlFlow = {
name: "htmlFlow",
tokenize: tokenizeHtmlFlow,
resolveTo: resolveToHtmlFlow,
concrete: true
};
var blankLineBefore = {
tokenize: tokenizeBlankLineBefore,
partial: true
};
var nonLazyContinuationStart = {
tokenize: tokenizeNonLazyContinuationStart,
partial: true
};
function resolveToHtmlFlow(events) {
let index2 = events.length;
while (index2--) {
if (events[index2][0] === "enter" && events[index2][1].type === "htmlFlow") {
break;
}
}
if (index2 > 1 && events[index2 - 2][1].type === "linePrefix") {
events[index2][1].start = events[index2 - 2][1].start;
events[index2 + 1][1].start = events[index2 - 2][1].start;
events.splice(index2 - 2, 2);
}
return events;
}
function tokenizeHtmlFlow(effects, ok2, nok) {
const self2 = this;
let marker;
let closingTag;
let buffer2;
let index2;
let markerB;
return start;
function start(code) {
return before(code);
}
function before(code) {
effects.enter("htmlFlow");
effects.enter("htmlFlowData");
effects.consume(code);
return open;
}
function open(code) {
if (code === 33) {
effects.consume(code);
return declarationOpen;
}
if (code === 47) {
effects.consume(code);
closingTag = true;
return tagCloseStart;
}
if (code === 63) {
effects.consume(code);
marker = 3;
return self2.interrupt ? ok2 : continuationDeclarationInside;
}
if (asciiAlpha(code)) {
effects.consume(code);
buffer2 = String.fromCharCode(code);
return tagName;
}
return nok(code);
}
function declarationOpen(code) {
if (code === 45) {
effects.consume(code);
marker = 2;
return commentOpenInside;
}
if (code === 91) {
effects.consume(code);
marker = 5;
index2 = 0;
return cdataOpenInside;
}
if (asciiAlpha(code)) {
effects.consume(code);
marker = 4;
return self2.interrupt ? ok2 : continuationDeclarationInside;
}
return nok(code);
}
function commentOpenInside(code) {
if (code === 45) {
effects.consume(code);
return self2.interrupt ? ok2 : continuationDeclarationInside;
}
return nok(code);
}
function cdataOpenInside(code) {
const value = "CDATA[";
if (code === value.charCodeAt(index2++)) {
effects.consume(code);
if (index2 === value.length) {
return self2.interrupt ? ok2 : continuation;
}
return cdataOpenInside;
}
return nok(code);
}
function tagCloseStart(code) {
if (asciiAlpha(code)) {
effects.consume(code);
buffer2 = String.fromCharCode(code);
return tagName;
}
return nok(code);
}
function tagName(code) {
if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {
const slash = code === 47;
const name = buffer2.toLowerCase();
if (!slash && !closingTag && htmlRawNames.includes(name)) {
marker = 1;
return self2.interrupt ? ok2(code) : continuation(code);
}
if (htmlBlockNames.includes(buffer2.toLowerCase())) {
marker = 6;
if (slash) {
effects.consume(code);
return basicSelfClosing;
}
return self2.interrupt ? ok2(code) : continuation(code);
}
marker = 7;
return self2.interrupt && !self2.parser.lazy[self2.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);
}
if (code === 45 || asciiAlphanumeric(code)) {
effects.consume(code);
buffer2 += String.fromCharCode(code);
return tagName;
}
return nok(code);
}
function basicSelfClosing(code) {
if (code === 62) {
effects.consume(code);
return self2.interrupt ? ok2 : continuation;
}
return nok(code);
}
function completeClosingTagAfter(code) {
if (markdownSpace(code)) {
effects.consume(code);
return completeClosingTagAfter;
}
return completeEnd(code);
}
function completeAttributeNameBefore(code) {
if (code === 47) {
effects.consume(code);
return completeEnd;
}
if (code === 58 || code === 95 || asciiAlpha(code)) {
effects.consume(code);
return completeAttributeName;
}
if (markdownSpace(code)) {
effects.consume(code);
return completeAttributeNameBefore;
}
return completeEnd(code);
}
function completeAttributeName(code) {
if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {
effects.consume(code);
return completeAttributeName;
}
return completeAttributeNameAfter(code);
}
function completeAttributeNameAfter(code) {
if (code === 61) {
effects.consume(code);
return completeAttributeValueBefore;
}
if (markdownSpace(code)) {
effects.consume(code);
return completeAttributeNameAfter;
}
return completeAttributeNameBefore(code);
}
function completeAttributeValueBefore(code) {
if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {
return nok(code);
}
if (code === 34 || code === 39) {
effects.consume(code);
markerB = code;
return completeAttributeValueQuoted;
}
if (markdownSpace(code)) {
effects.consume(code);
return completeAttributeValueBefore;
}
return completeAttributeValueUnquoted(code);
}
function completeAttributeValueQuoted(code) {
if (code === markerB) {
effects.consume(code);
markerB = null;
return completeAttributeValueQuotedAfter;
}
if (code === null || markdownLineEnding(code)) {
return nok(code);
}
effects.consume(code);
return completeAttributeValueQuoted;
}
function completeAttributeValueUnquoted(code) {
if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {
return completeAttributeNameAfter(code);
}
effects.consume(code);
return completeAttributeValueUnquoted;
}
function completeAttributeValueQuotedAfter(code) {
if (code === 47 || code === 62 || markdownSpace(code)) {
return completeAttributeNameBefore(code);
}
return nok(code);
}
function completeEnd(code) {
if (code === 62) {
effects.consume(code);
return completeAfter;
}
return nok(code);
}
function completeAfter(code) {
if (code === null || markdownLineEnding(code)) {
return continuation(code);
}
if (markdownSpace(code)) {
effects.consume(code);
return completeAfter;
}
return nok(code);
}
function continuation(code) {
if (code === 45 && marker === 2) {
effects.consume(code);
return continuationCommentInside;
}
if (code === 60 && marker === 1) {
effects.consume(code);
return continuationRawTagOpen;
}
if (code === 62 && marker === 4) {
effects.consume(code);
return continuationClose;
}
if (code === 63 && marker === 3) {
effects.consume(code);
return continuationDeclarationInside;
}
if (code === 93 && marker === 5) {
effects.consume(code);
return continuationCdataInside;
}
if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {
effects.exit("htmlFlowData");
return effects.check(
blankLineBefore,
continuationAfter,
continuationStart
)(code);
}
if (code === null || markdownLineEnding(code)) {
effects.exit("htmlFlowData");
return continuationStart(code);
}
effects.consume(code);
return continuation;
}
function continuationStart(code) {
return effects.check(
nonLazyContinuationStart,
continuationStartNonLazy,
continuationAfter
)(code);
}
function continuationStartNonLazy(code) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return continuationBefore;
}
function continuationBefore(code) {
if (code === null || markdownLineEnding(code)) {
return continuationStart(code);
}
effects.enter("htmlFlowData");
return continuation(code);
}
function continuationCommentInside(code) {
if (code === 45) {
effects.consume(code);
return continuationDeclarationInside;
}
return continuation(code);
}
function continuationRawTagOpen(code) {
if (code === 47) {
effects.consume(code);
buffer2 = "";
return continuationRawEndTag;
}
return continuation(code);
}
function continuationRawEndTag(code) {
if (code === 62) {
const name = buffer2.toLowerCase();
if (htmlRawNames.includes(name)) {
effects.consume(code);
return continuationClose;
}
return continuation(code);
}
if (asciiAlpha(code) && buffer2.length < 8) {
effects.consume(code);
buffer2 += String.fromCharCode(code);
return continuationRawEndTag;
}
return continuation(code);
}
function continuationCdataInside(code) {
if (code === 93) {
effects.consume(code);
return continuationDeclarationInside;
}
return continuation(code);
}
function continuationDeclarationInside(code) {
if (code === 62) {
effects.consume(code);
return continuationClose;
}
if (code === 45 && marker === 2) {
effects.consume(code);
return continuationDeclarationInside;
}
return continuation(code);
}
function continuationClose(code) {
if (code === null || markdownLineEnding(code)) {
effects.exit("htmlFlowData");
return continuationAfter(code);
}
effects.consume(code);
return continuationClose;
}
function continuationAfter(code) {
effects.exit("htmlFlow");
return ok2(code);
}
}
function tokenizeNonLazyContinuationStart(effects, ok2, nok) {
const self2 = this;
return start;
function start(code) {
if (markdownLineEnding(code)) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return after;
}
return nok(code);
}
function after(code) {
return self2.parser.lazy[self2.now().line] ? nok(code) : ok2(code);
}
}
function tokenizeBlankLineBefore(effects, ok2, nok) {
return start;
function start(code) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return effects.attempt(blankLine, ok2, nok);
}
}
// node_modules/micromark-core-commonmark/lib/html-text.js
var htmlText = {
name: "htmlText",
tokenize: tokenizeHtmlText
};
function tokenizeHtmlText(effects, ok2, nok) {
const self2 = this;
let marker;
let index2;
let returnState;
return start;
function start(code) {
effects.enter("htmlText");
effects.enter("htmlTextData");
effects.consume(code);
return open;
}
function open(code) {
if (code === 33) {
effects.consume(code);
return declarationOpen;
}
if (code === 47) {
effects.consume(code);
return tagCloseStart;
}
if (code === 63) {
effects.consume(code);
return instruction;
}
if (asciiAlpha(code)) {
effects.consume(code);
return tagOpen;
}
return nok(code);
}
function declarationOpen(code) {
if (code === 45) {
effects.consume(code);
return commentOpenInside;
}
if (code === 91) {
effects.consume(code);
index2 = 0;
return cdataOpenInside;
}
if (asciiAlpha(code)) {
effects.consume(code);
return declaration;
}
return nok(code);
}
function commentOpenInside(code) {
if (code === 45) {
effects.consume(code);
return commentEnd;
}
return nok(code);
}
function comment(code) {
if (code === null) {
return nok(code);
}
if (code === 45) {
effects.consume(code);
return commentClose;
}
if (markdownLineEnding(code)) {
returnState = comment;
return lineEndingBefore(code);
}
effects.consume(code);
return comment;
}
function commentClose(code) {
if (code === 45) {
effects.consume(code);
return commentEnd;
}
return comment(code);
}
function commentEnd(code) {
return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);
}
function cdataOpenInside(code) {
const value = "CDATA[";
if (code === value.charCodeAt(index2++)) {
effects.consume(code);
return index2 === value.length ? cdata : cdataOpenInside;
}
return nok(code);
}
function cdata(code) {
if (code === null) {
return nok(code);
}
if (code === 93) {
effects.consume(code);
return cdataClose;
}
if (markdownLineEnding(code)) {
returnState = cdata;
return lineEndingBefore(code);
}
effects.consume(code);
return cdata;
}
function cdataClose(code) {
if (code === 93) {
effects.consume(code);
return cdataEnd;
}
return cdata(code);
}
function cdataEnd(code) {
if (code === 62) {
return end(code);
}
if (code === 93) {
effects.consume(code);
return cdataEnd;
}
return cdata(code);
}
function declaration(code) {
if (code === null || code === 62) {
return end(code);
}
if (markdownLineEnding(code)) {
returnState = declaration;
return lineEndingBefore(code);
}
effects.consume(code);
return declaration;
}
function instruction(code) {
if (code === null) {
return nok(code);
}
if (code === 63) {
effects.consume(code);
return instructionClose;
}
if (markdownLineEnding(code)) {
returnState = instruction;
return lineEndingBefore(code);
}
effects.consume(code);
return instruction;
}
function instructionClose(code) {
return code === 62 ? end(code) : instruction(code);
}
function tagCloseStart(code) {
if (asciiAlpha(code)) {
effects.consume(code);
return tagClose;
}
return nok(code);
}
function tagClose(code) {
if (code === 45 || asciiAlphanumeric(code)) {
effects.consume(code);
return tagClose;
}
return tagCloseBetween(code);
}
function tagCloseBetween(code) {
if (markdownLineEnding(code)) {
returnState = tagCloseBetween;
return lineEndingBefore(code);
}
if (markdownSpace(code)) {
effects.consume(code);
return tagCloseBetween;
}
return end(code);
}
function tagOpen(code) {
if (code === 45 || asciiAlphanumeric(code)) {
effects.consume(code);
return tagOpen;
}
if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {
return tagOpenBetween(code);
}
return nok(code);
}
function tagOpenBetween(code) {
if (code === 47) {
effects.consume(code);
return end;
}
if (code === 58 || code === 95 || asciiAlpha(code)) {
effects.consume(code);
return tagOpenAttributeName;
}
if (markdownLineEnding(code)) {
returnState = tagOpenBetween;
return lineEndingBefore(code);
}
if (markdownSpace(code)) {
effects.consume(code);
return tagOpenBetween;
}
return end(code);
}
function tagOpenAttributeName(code) {
if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {
effects.consume(code);
return tagOpenAttributeName;
}
return tagOpenAttributeNameAfter(code);
}
function tagOpenAttributeNameAfter(code) {
if (code === 61) {
effects.consume(code);
return tagOpenAttributeValueBefore;
}
if (markdownLineEnding(code)) {
returnState = tagOpenAttributeNameAfter;
return lineEndingBefore(code);
}
if (markdownSpace(code)) {
effects.consume(code);
return tagOpenAttributeNameAfter;
}
return tagOpenBetween(code);
}
function tagOpenAttributeValueBefore(code) {
if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {
return nok(code);
}
if (code === 34 || code === 39) {
effects.consume(code);
marker = code;
return tagOpenAttributeValueQuoted;
}
if (markdownLineEnding(code)) {
returnState = tagOpenAttributeValueBefore;
return lineEndingBefore(code);
}
if (markdownSpace(code)) {
effects.consume(code);
return tagOpenAttributeValueBefore;
}
effects.consume(code);
return tagOpenAttributeValueUnquoted;
}
function tagOpenAttributeValueQuoted(code) {
if (code === marker) {
effects.consume(code);
marker = void 0;
return tagOpenAttributeValueQuotedAfter;
}
if (code === null) {
return nok(code);
}
if (markdownLineEnding(code)) {
returnState = tagOpenAttributeValueQuoted;
return lineEndingBefore(code);
}
effects.consume(code);
return tagOpenAttributeValueQuoted;
}
function tagOpenAttributeValueUnquoted(code) {
if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {
return nok(code);
}
if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {
return tagOpenBetween(code);
}
effects.consume(code);
return tagOpenAttributeValueUnquoted;
}
function tagOpenAttributeValueQuotedAfter(code) {
if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {
return tagOpenBetween(code);
}
return nok(code);
}
function end(code) {
if (code === 62) {
effects.consume(code);
effects.exit("htmlTextData");
effects.exit("htmlText");
return ok2;
}
return nok(code);
}
function lineEndingBefore(code) {
effects.exit("htmlTextData");
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return lineEndingAfter;
}
function lineEndingAfter(code) {
return markdownSpace(code) ? factorySpace(
effects,
lineEndingAfterPrefix,
"linePrefix",
self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4
)(code) : lineEndingAfterPrefix(code);
}
function lineEndingAfterPrefix(code) {
effects.enter("htmlTextData");
return returnState(code);
}
}
// node_modules/micromark-core-commonmark/lib/label-end.js
var labelEnd = {
name: "labelEnd",
tokenize: tokenizeLabelEnd,
resolveTo: resolveToLabelEnd,
resolveAll: resolveAllLabelEnd
};
var resourceConstruct = {
tokenize: tokenizeResource
};
var referenceFullConstruct = {
tokenize: tokenizeReferenceFull
};
var referenceCollapsedConstruct = {
tokenize: tokenizeReferenceCollapsed
};
function resolveAllLabelEnd(events) {
let index2 = -1;
while (++index2 < events.length) {
const token = events[index2][1];
if (token.type === "labelImage" || token.type === "labelLink" || token.type === "labelEnd") {
events.splice(index2 + 1, token.type === "labelImage" ? 4 : 2);
token.type = "data";
index2++;
}
}
return events;
}
function resolveToLabelEnd(events, context) {
let index2 = events.length;
let offset = 0;
let token;
let open;
let close;
let media;
while (index2--) {
token = events[index2][1];
if (open) {
if (token.type === "link" || token.type === "labelLink" && token._inactive) {
break;
}
if (events[index2][0] === "enter" && token.type === "labelLink") {
token._inactive = true;
}
} else if (close) {
if (events[index2][0] === "enter" && (token.type === "labelImage" || token.type === "labelLink") && !token._balanced) {
open = index2;
if (token.type !== "labelLink") {
offset = 2;
break;
}
}
} else if (token.type === "labelEnd") {
close = index2;
}
}
const group = {
type: events[open][1].type === "labelLink" ? "link" : "image",
start: Object.assign({}, events[open][1].start),
end: Object.assign({}, events[events.length - 1][1].end)
};
const label = {
type: "label",
start: Object.assign({}, events[open][1].start),
end: Object.assign({}, events[close][1].end)
};
const text3 = {
type: "labelText",
start: Object.assign({}, events[open + offset + 2][1].end),
end: Object.assign({}, events[close - 2][1].start)
};
media = [
["enter", group, context],
["enter", label, context]
];
media = push(media, events.slice(open + 1, open + offset + 3));
media = push(media, [["enter", text3, context]]);
media = push(
media,
resolveAll(
context.parser.constructs.insideSpan.null,
events.slice(open + offset + 4, close - 3),
context
)
);
media = push(media, [
["exit", text3, context],
events[close - 2],
events[close - 1],
["exit", label, context]
]);
media = push(media, events.slice(close + 1));
media = push(media, [["exit", group, context]]);
splice(events, open, events.length, media);
return events;
}
function tokenizeLabelEnd(effects, ok2, nok) {
const self2 = this;
let index2 = self2.events.length;
let labelStart;
let defined;
while (index2--) {
if ((self2.events[index2][1].type === "labelImage" || self2.events[index2][1].type === "labelLink") && !self2.events[index2][1]._balanced) {
labelStart = self2.events[index2][1];
break;
}
}
return start;
function start(code) {
if (!labelStart) {
return nok(code);
}
if (labelStart._inactive) {
return labelEndNok(code);
}
defined = self2.parser.defined.includes(
normalizeIdentifier(
self2.sliceSerialize({
start: labelStart.end,
end: self2.now()
})
)
);
effects.enter("labelEnd");
effects.enter("labelMarker");
effects.consume(code);
effects.exit("labelMarker");
effects.exit("labelEnd");
return after;
}
function after(code) {
if (code === 40) {
return effects.attempt(
resourceConstruct,
labelEndOk,
defined ? labelEndOk : labelEndNok
)(code);
}
if (code === 91) {
return effects.attempt(
referenceFullConstruct,
labelEndOk,
defined ? referenceNotFull : labelEndNok
)(code);
}
return defined ? labelEndOk(code) : labelEndNok(code);
}
function referenceNotFull(code) {
return effects.attempt(
referenceCollapsedConstruct,
labelEndOk,
labelEndNok
)(code);
}
function labelEndOk(code) {
return ok2(code);
}
function labelEndNok(code) {
labelStart._balanced = true;
return nok(code);
}
}
function tokenizeResource(effects, ok2, nok) {
return resourceStart;
function resourceStart(code) {
effects.enter("resource");
effects.enter("resourceMarker");
effects.consume(code);
effects.exit("resourceMarker");
return resourceBefore;
}
function resourceBefore(code) {
return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);
}
function resourceOpen(code) {
if (code === 41) {
return resourceEnd(code);
}
return factoryDestination(
effects,
resourceDestinationAfter,
resourceDestinationMissing,
"resourceDestination",
"resourceDestinationLiteral",
"resourceDestinationLiteralMarker",
"resourceDestinationRaw",
"resourceDestinationString",
32
)(code);
}
function resourceDestinationAfter(code) {
return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);
}
function resourceDestinationMissing(code) {
return nok(code);
}
function resourceBetween(code) {
if (code === 34 || code === 39 || code === 40) {
return factoryTitle(
effects,
resourceTitleAfter,
nok,
"resourceTitle",
"resourceTitleMarker",
"resourceTitleString"
)(code);
}
return resourceEnd(code);
}
function resourceTitleAfter(code) {
return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);
}
function resourceEnd(code) {
if (code === 41) {
effects.enter("resourceMarker");
effects.consume(code);
effects.exit("resourceMarker");
effects.exit("resource");
return ok2;
}
return nok(code);
}
}
function tokenizeReferenceFull(effects, ok2, nok) {
const self2 = this;
return referenceFull;
function referenceFull(code) {
return factoryLabel.call(
self2,
effects,
referenceFullAfter,
referenceFullMissing,
"reference",
"referenceMarker",
"referenceString"
)(code);
}
function referenceFullAfter(code) {
return self2.parser.defined.includes(
normalizeIdentifier(
self2.sliceSerialize(self2.events[self2.events.length - 1][1]).slice(1, -1)
)
) ? ok2(code) : nok(code);
}
function referenceFullMissing(code) {
return nok(code);
}
}
function tokenizeReferenceCollapsed(effects, ok2, nok) {
return referenceCollapsedStart;
function referenceCollapsedStart(code) {
effects.enter("reference");
effects.enter("referenceMarker");
effects.consume(code);
effects.exit("referenceMarker");
return referenceCollapsedOpen;
}
function referenceCollapsedOpen(code) {
if (code === 93) {
effects.enter("referenceMarker");
effects.consume(code);
effects.exit("referenceMarker");
effects.exit("reference");
return ok2;
}
return nok(code);
}
}
// node_modules/micromark-core-commonmark/lib/label-start-image.js
var labelStartImage = {
name: "labelStartImage",
tokenize: tokenizeLabelStartImage,
resolveAll: labelEnd.resolveAll
};
function tokenizeLabelStartImage(effects, ok2, nok) {
const self2 = this;
return start;
function start(code) {
effects.enter("labelImage");
effects.enter("labelImageMarker");
effects.consume(code);
effects.exit("labelImageMarker");
return open;
}
function open(code) {
if (code === 91) {
effects.enter("labelMarker");
effects.consume(code);
effects.exit("labelMarker");
effects.exit("labelImage");
return after;
}
return nok(code);
}
function after(code) {
return code === 94 && "_hiddenFootnoteSupport" in self2.parser.constructs ? nok(code) : ok2(code);
}
}
// node_modules/micromark-core-commonmark/lib/label-start-link.js
var labelStartLink = {
name: "labelStartLink",
tokenize: tokenizeLabelStartLink,
resolveAll: labelEnd.resolveAll
};
function tokenizeLabelStartLink(effects, ok2, nok) {
const self2 = this;
return start;
function start(code) {
effects.enter("labelLink");
effects.enter("labelMarker");
effects.consume(code);
effects.exit("labelMarker");
effects.exit("labelLink");
return after;
}
function after(code) {
return code === 94 && "_hiddenFootnoteSupport" in self2.parser.constructs ? nok(code) : ok2(code);
}
}
// node_modules/micromark-core-commonmark/lib/line-ending.js
var lineEnding = {
name: "lineEnding",
tokenize: tokenizeLineEnding
};
function tokenizeLineEnding(effects, ok2) {
return start;
function start(code) {
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
return factorySpace(effects, ok2, "linePrefix");
}
}
// node_modules/micromark-core-commonmark/lib/thematic-break.js
var thematicBreak = {
name: "thematicBreak",
tokenize: tokenizeThematicBreak
};
function tokenizeThematicBreak(effects, ok2, nok) {
let size = 0;
let marker;
return start;
function start(code) {
effects.enter("thematicBreak");
return before(code);
}
function before(code) {
marker = code;
return atBreak(code);
}
function atBreak(code) {
if (code === marker) {
effects.enter("thematicBreakSequence");
return sequence(code);
}
if (size >= 3 && (code === null || markdownLineEnding(code))) {
effects.exit("thematicBreak");
return ok2(code);
}
return nok(code);
}
function sequence(code) {
if (code === marker) {
effects.consume(code);
size++;
return sequence;
}
effects.exit("thematicBreakSequence");
return markdownSpace(code) ? factorySpace(effects, atBreak, "whitespace")(code) : atBreak(code);
}
}
// node_modules/micromark-core-commonmark/lib/list.js
var list = {
name: "list",
tokenize: tokenizeListStart,
continuation: {
tokenize: tokenizeListContinuation
},
exit: tokenizeListEnd
};
var listItemPrefixWhitespaceConstruct = {
tokenize: tokenizeListItemPrefixWhitespace,
partial: true
};
var indentConstruct = {
tokenize: tokenizeIndent,
partial: true
};
function tokenizeListStart(effects, ok2, nok) {
const self2 = this;
const tail = self2.events[self2.events.length - 1];
let initialSize = tail && tail[1].type === "linePrefix" ? tail[2].sliceSerialize(tail[1], true).length : 0;
let size = 0;
return start;
function start(code) {
const kind = self2.containerState.type || (code === 42 || code === 43 || code === 45 ? "listUnordered" : "listOrdered");
if (kind === "listUnordered" ? !self2.containerState.marker || code === self2.containerState.marker : asciiDigit(code)) {
if (!self2.containerState.type) {
self2.containerState.type = kind;
effects.enter(kind, {
_container: true
});
}
if (kind === "listUnordered") {
effects.enter("listItemPrefix");
return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);
}
if (!self2.interrupt || code === 49) {
effects.enter("listItemPrefix");
effects.enter("listItemValue");
return inside(code);
}
}
return nok(code);
}
function inside(code) {
if (asciiDigit(code) && ++size < 10) {
effects.consume(code);
return inside;
}
if ((!self2.interrupt || size < 2) && (self2.containerState.marker ? code === self2.containerState.marker : code === 41 || code === 46)) {
effects.exit("listItemValue");
return atMarker(code);
}
return nok(code);
}
function atMarker(code) {
effects.enter("listItemMarker");
effects.consume(code);
effects.exit("listItemMarker");
self2.containerState.marker = self2.containerState.marker || code;
return effects.check(
blankLine,
// Cant be empty when interrupting.
self2.interrupt ? nok : onBlank,
effects.attempt(
listItemPrefixWhitespaceConstruct,
endOfPrefix,
otherPrefix
)
);
}
function onBlank(code) {
self2.containerState.initialBlankLine = true;
initialSize++;
return endOfPrefix(code);
}
function otherPrefix(code) {
if (markdownSpace(code)) {
effects.enter("listItemPrefixWhitespace");
effects.consume(code);
effects.exit("listItemPrefixWhitespace");
return endOfPrefix;
}
return nok(code);
}
function endOfPrefix(code) {
self2.containerState.size = initialSize + self2.sliceSerialize(effects.exit("listItemPrefix"), true).length;
return ok2(code);
}
}
function tokenizeListContinuation(effects, ok2, nok) {
const self2 = this;
self2.containerState._closeFlow = void 0;
return effects.check(blankLine, onBlank, notBlank);
function onBlank(code) {
self2.containerState.furtherBlankLines = self2.containerState.furtherBlankLines || self2.containerState.initialBlankLine;
return factorySpace(
effects,
ok2,
"listItemIndent",
self2.containerState.size + 1
)(code);
}
function notBlank(code) {
if (self2.containerState.furtherBlankLines || !markdownSpace(code)) {
self2.containerState.furtherBlankLines = void 0;
self2.containerState.initialBlankLine = void 0;
return notInCurrentItem(code);
}
self2.containerState.furtherBlankLines = void 0;
self2.containerState.initialBlankLine = void 0;
return effects.attempt(indentConstruct, ok2, notInCurrentItem)(code);
}
function notInCurrentItem(code) {
self2.containerState._closeFlow = true;
self2.interrupt = void 0;
return factorySpace(
effects,
effects.attempt(list, ok2, nok),
"linePrefix",
self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4
)(code);
}
}
function tokenizeIndent(effects, ok2, nok) {
const self2 = this;
return factorySpace(
effects,
afterPrefix,
"listItemIndent",
self2.containerState.size + 1
);
function afterPrefix(code) {
const tail = self2.events[self2.events.length - 1];
return tail && tail[1].type === "listItemIndent" && tail[2].sliceSerialize(tail[1], true).length === self2.containerState.size ? ok2(code) : nok(code);
}
}
function tokenizeListEnd(effects) {
effects.exit(this.containerState.type);
}
function tokenizeListItemPrefixWhitespace(effects, ok2, nok) {
const self2 = this;
return factorySpace(
effects,
afterPrefix,
"listItemPrefixWhitespace",
self2.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4 + 1
);
function afterPrefix(code) {
const tail = self2.events[self2.events.length - 1];
return !markdownSpace(code) && tail && tail[1].type === "listItemPrefixWhitespace" ? ok2(code) : nok(code);
}
}
// node_modules/micromark-core-commonmark/lib/setext-underline.js
var setextUnderline = {
name: "setextUnderline",
tokenize: tokenizeSetextUnderline,
resolveTo: resolveToSetextUnderline
};
function resolveToSetextUnderline(events, context) {
let index2 = events.length;
let content3;
let text3;
let definition2;
while (index2--) {
if (events[index2][0] === "enter") {
if (events[index2][1].type === "content") {
content3 = index2;
break;
}
if (events[index2][1].type === "paragraph") {
text3 = index2;
}
} else {
if (events[index2][1].type === "content") {
events.splice(index2, 1);
}
if (!definition2 && events[index2][1].type === "definition") {
definition2 = index2;
}
}
}
const heading = {
type: "setextHeading",
start: Object.assign({}, events[text3][1].start),
end: Object.assign({}, events[events.length - 1][1].end)
};
events[text3][1].type = "setextHeadingText";
if (definition2) {
events.splice(text3, 0, ["enter", heading, context]);
events.splice(definition2 + 1, 0, ["exit", events[content3][1], context]);
events[content3][1].end = Object.assign({}, events[definition2][1].end);
} else {
events[content3][1] = heading;
}
events.push(["exit", heading, context]);
return events;
}
function tokenizeSetextUnderline(effects, ok2, nok) {
const self2 = this;
let marker;
return start;
function start(code) {
let index2 = self2.events.length;
let paragraph;
while (index2--) {
if (self2.events[index2][1].type !== "lineEnding" && self2.events[index2][1].type !== "linePrefix" && self2.events[index2][1].type !== "content") {
paragraph = self2.events[index2][1].type === "paragraph";
break;
}
}
if (!self2.parser.lazy[self2.now().line] && (self2.interrupt || paragraph)) {
effects.enter("setextHeadingLine");
marker = code;
return before(code);
}
return nok(code);
}
function before(code) {
effects.enter("setextHeadingLineSequence");
return inside(code);
}
function inside(code) {
if (code === marker) {
effects.consume(code);
return inside;
}
effects.exit("setextHeadingLineSequence");
return markdownSpace(code) ? factorySpace(effects, after, "lineSuffix")(code) : after(code);
}
function after(code) {
if (code === null || markdownLineEnding(code)) {
effects.exit("setextHeadingLine");
return ok2(code);
}
return nok(code);
}
}
// node_modules/micromark/lib/initialize/flow.js
var flow = {
tokenize: initializeFlow
};
function initializeFlow(effects) {
const self2 = this;
const initial = effects.attempt(
// Try to parse a blank line.
blankLine,
atBlankEnding,
// Try to parse initial flow (essentially, only code).
effects.attempt(
this.parser.constructs.flowInitial,
afterConstruct,
factorySpace(
effects,
effects.attempt(
this.parser.constructs.flow,
afterConstruct,
effects.attempt(content2, afterConstruct)
),
"linePrefix"
)
)
);
return initial;
function atBlankEnding(code) {
if (code === null) {
effects.consume(code);
return;
}
effects.enter("lineEndingBlank");
effects.consume(code);
effects.exit("lineEndingBlank");
self2.currentConstruct = void 0;
return initial;
}
function afterConstruct(code) {
if (code === null) {
effects.consume(code);
return;
}
effects.enter("lineEnding");
effects.consume(code);
effects.exit("lineEnding");
self2.currentConstruct = void 0;
return initial;
}
}
// node_modules/micromark/lib/initialize/text.js
var resolver = {
resolveAll: createResolver()
};
var string = initializeFactory("string");
var text = initializeFactory("text");
function initializeFactory(field) {
return {
tokenize: initializeText,
resolveAll: createResolver(
field === "text" ? resolveAllLineSuffixes : void 0
)
};
function initializeText(effects) {
const self2 = this;
const constructs2 = this.parser.constructs[field];
const text3 = effects.attempt(constructs2, start, notText);
return start;
function start(code) {
return atBreak(code) ? text3(code) : notText(code);
}
function notText(code) {
if (code === null) {
effects.consume(code);
return;
}
effects.enter("data");
effects.consume(code);
return data;
}
function data(code) {
if (atBreak(code)) {
effects.exit("data");
return text3(code);
}
effects.consume(code);
return data;
}
function atBreak(code) {
if (code === null) {
return true;
}
const list2 = constructs2[code];
let index2 = -1;
if (list2) {
while (++index2 < list2.length) {
const item = list2[index2];
if (!item.previous || item.previous.call(self2, self2.previous)) {
return true;
}
}
}
return false;
}
}
}
function createResolver(extraResolver) {
return resolveAllText;
function resolveAllText(events, context) {
let index2 = -1;
let enter;
while (++index2 <= events.length) {
if (enter === void 0) {
if (events[index2] && events[index2][1].type === "data") {
enter = index2;
index2++;
}
} else if (!events[index2] || events[index2][1].type !== "data") {
if (index2 !== enter + 2) {
events[enter][1].end = events[index2 - 1][1].end;
events.splice(enter + 2, index2 - enter - 2);
index2 = enter + 2;
}
enter = void 0;
}
}
return extraResolver ? extraResolver(events, context) : events;
}
}
function resolveAllLineSuffixes(events, context) {
let eventIndex = 0;
while (++eventIndex <= events.length) {
if ((eventIndex === events.length || events[eventIndex][1].type === "lineEnding") && events[eventIndex - 1][1].type === "data") {
const data = events[eventIndex - 1][1];
const chunks = context.sliceStream(data);
let index2 = chunks.length;
let bufferIndex = -1;
let size = 0;
let tabs;
while (index2--) {
const chunk = chunks[index2];
if (typeof chunk === "string") {
bufferIndex = chunk.length;
while (chunk.charCodeAt(bufferIndex - 1) === 32) {
size++;
bufferIndex--;
}
if (bufferIndex)
break;
bufferIndex = -1;
} else if (chunk === -2) {
tabs = true;
size++;
} else if (chunk === -1) {
} else {
index2++;
break;
}
}
if (size) {
const token = {
type: eventIndex === events.length || tabs || size < 2 ? "lineSuffix" : "hardBreakTrailing",
start: {
line: data.end.line,
column: data.end.column - size,
offset: data.end.offset - size,
_index: data.start._index + index2,
_bufferIndex: index2 ? bufferIndex : data.start._bufferIndex + bufferIndex
},
end: Object.assign({}, data.end)
};
data.end = Object.assign({}, token.start);
if (data.start.offset === data.end.offset) {
Object.assign(data, token);
} else {
events.splice(
eventIndex,
0,
["enter", token, context],
["exit", token, context]
);
eventIndex += 2;
}
}
eventIndex++;
}
}
return events;
}
// node_modules/micromark/lib/create-tokenizer.js
function createTokenizer(parser, initialize, from) {
let point3 = Object.assign(
from ? Object.assign({}, from) : {
line: 1,
column: 1,
offset: 0
},
{
_index: 0,
_bufferIndex: -1
}
);
const columnStart = {};
const resolveAllConstructs = [];
let chunks = [];
let stack = [];
let consumed = true;
const effects = {
consume,
enter,
exit: exit2,
attempt: constructFactory(onsuccessfulconstruct),
check: constructFactory(onsuccessfulcheck),
interrupt: constructFactory(onsuccessfulcheck, {
interrupt: true
})
};
const context = {
previous: null,
code: null,
containerState: {},
events: [],
parser,
sliceStream,
sliceSerialize,
now,
defineSkip,
write
};
let state = initialize.tokenize.call(context, effects);
let expectedCode;
if (initialize.resolveAll) {
resolveAllConstructs.push(initialize);
}
return context;
function write(slice) {
chunks = push(chunks, slice);
main();
if (chunks[chunks.length - 1] !== null) {
return [];
}
addResult(initialize, 0);
context.events = resolveAll(resolveAllConstructs, context.events, context);
return context.events;
}
function sliceSerialize(token, expandTabs) {
return serializeChunks(sliceStream(token), expandTabs);
}
function sliceStream(token) {
return sliceChunks(chunks, token);
}
function now() {
const { line, column, offset, _index, _bufferIndex } = point3;
return {
line,
column,
offset,
_index,
_bufferIndex
};
}
function defineSkip(value) {
columnStart[value.line] = value.column;
accountForPotentialSkip();
}
function main() {
let chunkIndex;
while (point3._index < chunks.length) {
const chunk = chunks[point3._index];
if (typeof chunk === "string") {
chunkIndex = point3._index;
if (point3._bufferIndex < 0) {
point3._bufferIndex = 0;
}
while (point3._index === chunkIndex && point3._bufferIndex < chunk.length) {
go(chunk.charCodeAt(point3._bufferIndex));
}
} else {
go(chunk);
}
}
}
function go(code) {
consumed = void 0;
expectedCode = code;
state = state(code);
}
function consume(code) {
if (markdownLineEnding(code)) {
point3.line++;
point3.column = 1;
point3.offset += code === -3 ? 2 : 1;
accountForPotentialSkip();
} else if (code !== -1) {
point3.column++;
point3.offset++;
}
if (point3._bufferIndex < 0) {
point3._index++;
} else {
point3._bufferIndex++;
if (point3._bufferIndex === chunks[point3._index].length) {
point3._bufferIndex = -1;
point3._index++;
}
}
context.previous = code;
consumed = true;
}
function enter(type, fields) {
const token = fields || {};
token.type = type;
token.start = now();
context.events.push(["enter", token, context]);
stack.push(token);
return token;
}
function exit2(type) {
const token = stack.pop();
token.end = now();
context.events.push(["exit", token, context]);
return token;
}
function onsuccessfulconstruct(construct, info) {
addResult(construct, info.from);
}
function onsuccessfulcheck(_2, info) {
info.restore();
}
function constructFactory(onreturn, fields) {
return hook;
function hook(constructs2, returnState, bogusState) {
let listOfConstructs;
let constructIndex;
let currentConstruct;
let info;
return Array.isArray(constructs2) ? handleListOfConstructs(constructs2) : "tokenize" in constructs2 ? (
// @ts-expect-error Looks like a construct.
handleListOfConstructs([constructs2])
) : handleMapOfConstructs(constructs2);
function handleMapOfConstructs(map) {
return start;
function start(code) {
const def = code !== null && map[code];
const all2 = code !== null && map.null;
const list2 = [
// To do: add more extension tests.
/* c8 ignore next 2 */
...Array.isArray(def) ? def : def ? [def] : [],
...Array.isArray(all2) ? all2 : all2 ? [all2] : []
];
return handleListOfConstructs(list2)(code);
}
}
function handleListOfConstructs(list2) {
listOfConstructs = list2;
constructIndex = 0;
if (list2.length === 0) {
return bogusState;
}
return handleConstruct(list2[constructIndex]);
}
function handleConstruct(construct) {
return start;
function start(code) {
info = store();
currentConstruct = construct;
if (!construct.partial) {
context.currentConstruct = construct;
}
if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {
return nok(code);
}
return construct.tokenize.call(
// If we do have fields, create an object w/ `context` as its
// prototype.
// This allows a “live binding”, which is needed for `interrupt`.
fields ? Object.assign(Object.create(context), fields) : context,
effects,
ok2,
nok
)(code);
}
}
function ok2(code) {
consumed = true;
onreturn(currentConstruct, info);
return returnState;
}
function nok(code) {
consumed = true;
info.restore();
if (++constructIndex < listOfConstructs.length) {
return handleConstruct(listOfConstructs[constructIndex]);
}
return bogusState;
}
}
}
function addResult(construct, from2) {
if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {
resolveAllConstructs.push(construct);
}
if (construct.resolve) {
splice(
context.events,
from2,
context.events.length - from2,
construct.resolve(context.events.slice(from2), context)
);
}
if (construct.resolveTo) {
context.events = construct.resolveTo(context.events, context);
}
}
function store() {
const startPoint = now();
const startPrevious = context.previous;
const startCurrentConstruct = context.currentConstruct;
const startEventsIndex = context.events.length;
const startStack = Array.from(stack);
return {
restore,
from: startEventsIndex
};
function restore() {
point3 = startPoint;
context.previous = startPrevious;
context.currentConstruct = startCurrentConstruct;
context.events.length = startEventsIndex;
stack = startStack;
accountForPotentialSkip();
}
}
function accountForPotentialSkip() {
if (point3.line in columnStart && point3.column < 2) {
point3.column = columnStart[point3.line];
point3.offset += columnStart[point3.line] - 1;
}
}
}
function sliceChunks(chunks, token) {
const startIndex = token.start._index;
const startBufferIndex = token.start._bufferIndex;
const endIndex = token.end._index;
const endBufferIndex = token.end._bufferIndex;
let view;
if (startIndex === endIndex) {
view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];
} else {
view = chunks.slice(startIndex, endIndex);
if (startBufferIndex > -1) {
const head = view[0];
if (typeof head === "string") {
view[0] = head.slice(startBufferIndex);
} else {
view.shift();
}
}
if (endBufferIndex > 0) {
view.push(chunks[endIndex].slice(0, endBufferIndex));
}
}
return view;
}
function serializeChunks(chunks, expandTabs) {
let index2 = -1;
const result = [];
let atTab;
while (++index2 < chunks.length) {
const chunk = chunks[index2];
let value;
if (typeof chunk === "string") {
value = chunk;
} else
switch (chunk) {
case -5: {
value = "\r";
break;
}
case -4: {
value = "\n";
break;
}
case -3: {
value = "\r\n";
break;
}
case -2: {
value = expandTabs ? " " : " ";
break;
}
case -1: {
if (!expandTabs && atTab)
continue;
value = " ";
break;
}
default: {
value = String.fromCharCode(chunk);
}
}
atTab = chunk === -2;
result.push(value);
}
return result.join("");
}
// node_modules/micromark/lib/constructs.js
var constructs_exports = {};
__export(constructs_exports, {
attentionMarkers: () => attentionMarkers,
contentInitial: () => contentInitial,
disable: () => disable,
document: () => document3,
flow: () => flow2,
flowInitial: () => flowInitial,
insideSpan: () => insideSpan,
string: () => string2,
text: () => text2
});
var document3 = {
[42]: list,
[43]: list,
[45]: list,
[48]: list,
[49]: list,
[50]: list,
[51]: list,
[52]: list,
[53]: list,
[54]: list,
[55]: list,
[56]: list,
[57]: list,
[62]: blockQuote
};
var contentInitial = {
[91]: definition
};
var flowInitial = {
[-2]: codeIndented,
[-1]: codeIndented,
[32]: codeIndented
};
var flow2 = {
[35]: headingAtx,
[42]: thematicBreak,
[45]: [setextUnderline, thematicBreak],
[60]: htmlFlow,
[61]: setextUnderline,
[95]: thematicBreak,
[96]: codeFenced,
[126]: codeFenced
};
var string2 = {
[38]: characterReference,
[92]: characterEscape
};
var text2 = {
[-5]: lineEnding,
[-4]: lineEnding,
[-3]: lineEnding,
[33]: labelStartImage,
[38]: characterReference,
[42]: attention,
[60]: [autolink, htmlText],
[91]: labelStartLink,
[92]: [hardBreakEscape, characterEscape],
[93]: labelEnd,
[95]: attention,
[96]: codeText
};
var insideSpan = {
null: [attention, resolver]
};
var attentionMarkers = {
null: [42, 95]
};
var disable = {
null: []
};
// node_modules/micromark/lib/parse.js
function parse(options) {
const settings = options || {};
const constructs2 = (
/** @type {FullNormalizedExtension} */
combineExtensions([constructs_exports, ...settings.extensions || []])
);
const parser = {
defined: [],
lazy: {},
constructs: constructs2,
content: create(content),
document: create(document2),
flow: create(flow),
string: create(string),
text: create(text)
};
return parser;
function create(initial) {
return creator;
function creator(from) {
return createTokenizer(parser, initial, from);
}
}
}
// node_modules/micromark/lib/preprocess.js
var search = /[\0\t\n\r]/g;
function preprocess() {
let column = 1;
let buffer2 = "";
let start = true;
let atCarriageReturn;
return preprocessor;
function preprocessor(value, encoding, end) {
const chunks = [];
let match;
let next;
let startPosition;
let endPosition;
let code;
value = buffer2 + value.toString(encoding);
startPosition = 0;
buffer2 = "";
if (start) {
if (value.charCodeAt(0) === 65279) {
startPosition++;
}
start = void 0;
}
while (startPosition < value.length) {
search.lastIndex = startPosition;
match = search.exec(value);
endPosition = match && match.index !== void 0 ? match.index : value.length;
code = value.charCodeAt(endPosition);
if (!match) {
buffer2 = value.slice(startPosition);
break;
}
if (code === 10 && startPosition === endPosition && atCarriageReturn) {
chunks.push(-3);
atCarriageReturn = void 0;
} else {
if (atCarriageReturn) {
chunks.push(-5);
atCarriageReturn = void 0;
}
if (startPosition < endPosition) {
chunks.push(value.slice(startPosition, endPosition));
column += endPosition - startPosition;
}
switch (code) {
case 0: {
chunks.push(65533);
column++;
break;
}
case 9: {
next = Math.ceil(column / 4) * 4;
chunks.push(-2);
while (column++ < next)
chunks.push(-1);
break;
}
case 10: {
chunks.push(-4);
column = 1;
break;
}
default: {
atCarriageReturn = true;
column = 1;
}
}
}
startPosition = endPosition + 1;
}
if (end) {
if (atCarriageReturn)
chunks.push(-5);
if (buffer2)
chunks.push(buffer2);
chunks.push(null);
}
return chunks;
}
}
// node_modules/micromark/lib/postprocess.js
function postprocess(events) {
while (!subtokenize(events)) {
}
return events;
}
// node_modules/micromark-util-decode-numeric-character-reference/index.js
function decodeNumericCharacterReference(value, base2) {
const code = Number.parseInt(value, base2);
if (
// C0 except for HT, LF, FF, CR, space.
code < 9 || code === 11 || code > 13 && code < 32 || // Control character (DEL) of C0, and C1 controls.
code > 126 && code < 160 || // Lone high surrogates and low surrogates.
code > 55295 && code < 57344 || // Noncharacters.
code > 64975 && code < 65008 || (code & 65535) === 65535 || (code & 65535) === 65534 || // Out of range
code > 1114111
) {
return "\uFFFD";
}
return String.fromCharCode(code);
}
// node_modules/micromark-util-decode-string/index.js
var characterEscapeOrReference = /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;
function decodeString(value) {
return value.replace(characterEscapeOrReference, decode);
}
function decode($0, $1, $2) {
if ($1) {
return $1;
}
const head = $2.charCodeAt(0);
if (head === 35) {
const head2 = $2.charCodeAt(1);
const hex = head2 === 120 || head2 === 88;
return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);
}
return decodeNamedCharacterReference($2) || $0;
}
// node_modules/mdast-util-from-markdown/lib/index.js
var own2 = {}.hasOwnProperty;
var fromMarkdown = (
/**
* @type {(
* ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) &
* ((value: Value, options?: Options | null | undefined) => Root)
* )}
*/
/**
* @param {Value} value
* @param {Encoding | Options | null | undefined} [encoding]
* @param {Options | null | undefined} [options]
* @returns {Root}
*/
function(value, encoding, options) {
if (typeof encoding !== "string") {
options = encoding;
encoding = void 0;
}
return compiler(options)(
postprocess(
parse(options).document().write(preprocess()(value, encoding, true))
)
);
}
);
function compiler(options) {
const config = {
transforms: [],
canContainEols: ["emphasis", "fragment", "heading", "paragraph", "strong"],
enter: {
autolink: opener(link),
autolinkProtocol: onenterdata,
autolinkEmail: onenterdata,
atxHeading: opener(heading),
blockQuote: opener(blockQuote2),
characterEscape: onenterdata,
characterReference: onenterdata,
codeFenced: opener(codeFlow),
codeFencedFenceInfo: buffer2,
codeFencedFenceMeta: buffer2,
codeIndented: opener(codeFlow, buffer2),
codeText: opener(codeText2, buffer2),
codeTextData: onenterdata,
data: onenterdata,
codeFlowValue: onenterdata,
definition: opener(definition2),
definitionDestinationString: buffer2,
definitionLabelString: buffer2,
definitionTitleString: buffer2,
emphasis: opener(emphasis),
hardBreakEscape: opener(hardBreak),
hardBreakTrailing: opener(hardBreak),
htmlFlow: opener(html, buffer2),
htmlFlowData: onenterdata,
htmlText: opener(html, buffer2),
htmlTextData: onenterdata,
image: opener(image),
label: buffer2,
link: opener(link),
listItem: opener(listItem),
listItemValue: onenterlistitemvalue,
listOrdered: opener(list2, onenterlistordered),
listUnordered: opener(list2),
paragraph: opener(paragraph),
reference: onenterreference,
referenceString: buffer2,
resourceDestinationString: buffer2,
resourceTitleString: buffer2,
setextHeading: opener(heading),
strong: opener(strong),
thematicBreak: opener(thematicBreak2)
},
exit: {
atxHeading: closer(),
atxHeadingSequence: onexitatxheadingsequence,
autolink: closer(),
autolinkEmail: onexitautolinkemail,
autolinkProtocol: onexitautolinkprotocol,
blockQuote: closer(),
characterEscapeValue: onexitdata,
characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,
characterReferenceMarkerNumeric: onexitcharacterreferencemarker,
characterReferenceValue: onexitcharacterreferencevalue,
codeFenced: closer(onexitcodefenced),
codeFencedFence: onexitcodefencedfence,
codeFencedFenceInfo: onexitcodefencedfenceinfo,
codeFencedFenceMeta: onexitcodefencedfencemeta,
codeFlowValue: onexitdata,
codeIndented: closer(onexitcodeindented),
codeText: closer(onexitcodetext),
codeTextData: onexitdata,
data: onexitdata,
definition: closer(),
definitionDestinationString: onexitdefinitiondestinationstring,
definitionLabelString: onexitdefinitionlabelstring,
definitionTitleString: onexitdefinitiontitlestring,
emphasis: closer(),
hardBreakEscape: closer(onexithardbreak),
hardBreakTrailing: closer(onexithardbreak),
htmlFlow: closer(onexithtmlflow),
htmlFlowData: onexitdata,
htmlText: closer(onexithtmltext),
htmlTextData: onexitdata,
image: closer(onexitimage),
label: onexitlabel,
labelText: onexitlabeltext,
lineEnding: onexitlineending,
link: closer(onexitlink),
listItem: closer(),
listOrdered: closer(),
listUnordered: closer(),
paragraph: closer(),
referenceString: onexitreferencestring,
resourceDestinationString: onexitresourcedestinationstring,
resourceTitleString: onexitresourcetitlestring,
resource: onexitresource,
setextHeading: closer(onexitsetextheading),
setextHeadingLineSequence: onexitsetextheadinglinesequence,
setextHeadingText: onexitsetextheadingtext,
strong: closer(),
thematicBreak: closer()
}
};
configure(config, (options || {}).mdastExtensions || []);
const data = {};
return compile;
function compile(events) {
let tree = {
type: "root",
children: []
};
const context = {
stack: [tree],
tokenStack: [],
config,
enter,
exit: exit2,
buffer: buffer2,
resume,
setData,
getData
};
const listStack = [];
let index2 = -1;
while (++index2 < events.length) {
if (events[index2][1].type === "listOrdered" || events[index2][1].type === "listUnordered") {
if (events[index2][0] === "enter") {
listStack.push(index2);
} else {
const tail = listStack.pop();
index2 = prepareList(events, tail, index2);
}
}
}
index2 = -1;
while (++index2 < events.length) {
const handler = config[events[index2][0]];
if (own2.call(handler, events[index2][1].type)) {
handler[events[index2][1].type].call(
Object.assign(
{
sliceSerialize: events[index2][2].sliceSerialize
},
context
),
events[index2][1]
);
}
}
if (context.tokenStack.length > 0) {
const tail = context.tokenStack[context.tokenStack.length - 1];
const handler = tail[1] || defaultOnError;
handler.call(context, void 0, tail[0]);
}
tree.position = {
start: point2(
events.length > 0 ? events[0][1].start : {
line: 1,
column: 1,
offset: 0
}
),
end: point2(
events.length > 0 ? events[events.length - 2][1].end : {
line: 1,
column: 1,
offset: 0
}
)
};
index2 = -1;
while (++index2 < config.transforms.length) {
tree = config.transforms[index2](tree) || tree;
}
return tree;
}
function prepareList(events, start, length) {
let index2 = start - 1;
let containerBalance = -1;
let listSpread = false;
let listItem2;
let lineIndex;
let firstBlankLineIndex;
let atMarker;
while (++index2 <= length) {
const event = events[index2];
if (event[1].type === "listUnordered" || event[1].type === "listOrdered" || event[1].type === "blockQuote") {
if (event[0] === "enter") {
containerBalance++;
} else {
containerBalance--;
}
atMarker = void 0;
} else if (event[1].type === "lineEndingBlank") {
if (event[0] === "enter") {
if (listItem2 && !atMarker && !containerBalance && !firstBlankLineIndex) {
firstBlankLineIndex = index2;
}
atMarker = void 0;
}
} else if (event[1].type === "linePrefix" || event[1].type === "listItemValue" || event[1].type === "listItemMarker" || event[1].type === "listItemPrefix" || event[1].type === "listItemPrefixWhitespace") {
} else {
atMarker = void 0;
}
if (!containerBalance && event[0] === "enter" && event[1].type === "listItemPrefix" || containerBalance === -1 && event[0] === "exit" && (event[1].type === "listUnordered" || event[1].type === "listOrdered")) {
if (listItem2) {
let tailIndex = index2;
lineIndex = void 0;
while (tailIndex--) {
const tailEvent = events[tailIndex];
if (tailEvent[1].type === "lineEnding" || tailEvent[1].type === "lineEndingBlank") {
if (tailEvent[0] === "exit")
continue;
if (lineIndex) {
events[lineIndex][1].type = "lineEndingBlank";
listSpread = true;
}
tailEvent[1].type = "lineEnding";
lineIndex = tailIndex;
} else if (tailEvent[1].type === "linePrefix" || tailEvent[1].type === "blockQuotePrefix" || tailEvent[1].type === "blockQuotePrefixWhitespace" || tailEvent[1].type === "blockQuoteMarker" || tailEvent[1].type === "listItemIndent") {
} else {
break;
}
}
if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {
listItem2._spread = true;
}
listItem2.end = Object.assign(
{},
lineIndex ? events[lineIndex][1].start : event[1].end
);
events.splice(lineIndex || index2, 0, ["exit", listItem2, event[2]]);
index2++;
length++;
}
if (event[1].type === "listItemPrefix") {
listItem2 = {
type: "listItem",
_spread: false,
start: Object.assign({}, event[1].start),
// @ts-expect-error: well add `end` in a second.
end: void 0
};
events.splice(index2, 0, ["enter", listItem2, event[2]]);
index2++;
length++;
firstBlankLineIndex = void 0;
atMarker = true;
}
}
}
events[start][1]._spread = listSpread;
return length;
}
function setData(key, value) {
data[key] = value;
}
function getData(key) {
return data[key];
}
function opener(create, and) {
return open;
function open(token) {
enter.call(this, create(token), token);
if (and)
and.call(this, token);
}
}
function buffer2() {
this.stack.push({
type: "fragment",
children: []
});
}
function enter(node2, token, errorHandler) {
const parent = this.stack[this.stack.length - 1];
parent.children.push(node2);
this.stack.push(node2);
this.tokenStack.push([token, errorHandler]);
node2.position = {
start: point2(token.start)
};
return node2;
}
function closer(and) {
return close;
function close(token) {
if (and)
and.call(this, token);
exit2.call(this, token);
}
}
function exit2(token, onExitError) {
const node2 = this.stack.pop();
const open = this.tokenStack.pop();
if (!open) {
throw new Error(
"Cannot close `" + token.type + "` (" + stringifyPosition({
start: token.start,
end: token.end
}) + "): it\u2019s not open"
);
} else if (open[0].type !== token.type) {
if (onExitError) {
onExitError.call(this, token, open[0]);
} else {
const handler = open[1] || defaultOnError;
handler.call(this, token, open[0]);
}
}
node2.position.end = point2(token.end);
return node2;
}
function resume() {
return toString(this.stack.pop());
}
function onenterlistordered() {
setData("expectingFirstListItemValue", true);
}
function onenterlistitemvalue(token) {
if (getData("expectingFirstListItemValue")) {
const ancestor = this.stack[this.stack.length - 2];
ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);
setData("expectingFirstListItemValue");
}
}
function onexitcodefencedfenceinfo() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.lang = data2;
}
function onexitcodefencedfencemeta() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.meta = data2;
}
function onexitcodefencedfence() {
if (getData("flowCodeInside"))
return;
this.buffer();
setData("flowCodeInside", true);
}
function onexitcodefenced() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.value = data2.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g, "");
setData("flowCodeInside");
}
function onexitcodeindented() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.value = data2.replace(/(\r?\n|\r)$/g, "");
}
function onexitdefinitionlabelstring(token) {
const label = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.label = label;
node2.identifier = normalizeIdentifier(
this.sliceSerialize(token)
).toLowerCase();
}
function onexitdefinitiontitlestring() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.title = data2;
}
function onexitdefinitiondestinationstring() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.url = data2;
}
function onexitatxheadingsequence(token) {
const node2 = this.stack[this.stack.length - 1];
if (!node2.depth) {
const depth = this.sliceSerialize(token).length;
node2.depth = depth;
}
}
function onexitsetextheadingtext() {
setData("setextHeadingSlurpLineEnding", true);
}
function onexitsetextheadinglinesequence(token) {
const node2 = this.stack[this.stack.length - 1];
node2.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2;
}
function onexitsetextheading() {
setData("setextHeadingSlurpLineEnding");
}
function onenterdata(token) {
const node2 = this.stack[this.stack.length - 1];
let tail = node2.children[node2.children.length - 1];
if (!tail || tail.type !== "text") {
tail = text3();
tail.position = {
start: point2(token.start)
};
node2.children.push(tail);
}
this.stack.push(tail);
}
function onexitdata(token) {
const tail = this.stack.pop();
tail.value += this.sliceSerialize(token);
tail.position.end = point2(token.end);
}
function onexitlineending(token) {
const context = this.stack[this.stack.length - 1];
if (getData("atHardBreak")) {
const tail = context.children[context.children.length - 1];
tail.position.end = point2(token.end);
setData("atHardBreak");
return;
}
if (!getData("setextHeadingSlurpLineEnding") && config.canContainEols.includes(context.type)) {
onenterdata.call(this, token);
onexitdata.call(this, token);
}
}
function onexithardbreak() {
setData("atHardBreak", true);
}
function onexithtmlflow() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.value = data2;
}
function onexithtmltext() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.value = data2;
}
function onexitcodetext() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.value = data2;
}
function onexitlink() {
const node2 = this.stack[this.stack.length - 1];
if (getData("inReference")) {
const referenceType = getData("referenceType") || "shortcut";
node2.type += "Reference";
node2.referenceType = referenceType;
delete node2.url;
delete node2.title;
} else {
delete node2.identifier;
delete node2.label;
}
setData("referenceType");
}
function onexitimage() {
const node2 = this.stack[this.stack.length - 1];
if (getData("inReference")) {
const referenceType = getData("referenceType") || "shortcut";
node2.type += "Reference";
node2.referenceType = referenceType;
delete node2.url;
delete node2.title;
} else {
delete node2.identifier;
delete node2.label;
}
setData("referenceType");
}
function onexitlabeltext(token) {
const string3 = this.sliceSerialize(token);
const ancestor = this.stack[this.stack.length - 2];
ancestor.label = decodeString(string3);
ancestor.identifier = normalizeIdentifier(string3).toLowerCase();
}
function onexitlabel() {
const fragment = this.stack[this.stack.length - 1];
const value = this.resume();
const node2 = this.stack[this.stack.length - 1];
setData("inReference", true);
if (node2.type === "link") {
const children = fragment.children;
node2.children = children;
} else {
node2.alt = value;
}
}
function onexitresourcedestinationstring() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.url = data2;
}
function onexitresourcetitlestring() {
const data2 = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.title = data2;
}
function onexitresource() {
setData("inReference");
}
function onenterreference() {
setData("referenceType", "collapsed");
}
function onexitreferencestring(token) {
const label = this.resume();
const node2 = this.stack[this.stack.length - 1];
node2.label = label;
node2.identifier = normalizeIdentifier(
this.sliceSerialize(token)
).toLowerCase();
setData("referenceType", "full");
}
function onexitcharacterreferencemarker(token) {
setData("characterReferenceType", token.type);
}
function onexitcharacterreferencevalue(token) {
const data2 = this.sliceSerialize(token);
const type = getData("characterReferenceType");
let value;
if (type) {
value = decodeNumericCharacterReference(
data2,
type === "characterReferenceMarkerNumeric" ? 10 : 16
);
setData("characterReferenceType");
} else {
const result = decodeNamedCharacterReference(data2);
value = result;
}
const tail = this.stack.pop();
tail.value += value;
tail.position.end = point2(token.end);
}
function onexitautolinkprotocol(token) {
onexitdata.call(this, token);
const node2 = this.stack[this.stack.length - 1];
node2.url = this.sliceSerialize(token);
}
function onexitautolinkemail(token) {
onexitdata.call(this, token);
const node2 = this.stack[this.stack.length - 1];
node2.url = "mailto:" + this.sliceSerialize(token);
}
function blockQuote2() {
return {
type: "blockquote",
children: []
};
}
function codeFlow() {
return {
type: "code",
lang: null,
meta: null,
value: ""
};
}
function codeText2() {
return {
type: "inlineCode",
value: ""
};
}
function definition2() {
return {
type: "definition",
identifier: "",
label: null,
title: null,
url: ""
};
}
function emphasis() {
return {
type: "emphasis",
children: []
};
}
function heading() {
return {
type: "heading",
depth: void 0,
children: []
};
}
function hardBreak() {
return {
type: "break"
};
}
function html() {
return {
type: "html",
value: ""
};
}
function image() {
return {
type: "image",
title: null,
url: "",
alt: null
};
}
function link() {
return {
type: "link",
title: null,
url: "",
children: []
};
}
function list2(token) {
return {
type: "list",
ordered: token.type === "listOrdered",
start: null,
spread: token._spread,
children: []
};
}
function listItem(token) {
return {
type: "listItem",
spread: token._spread,
checked: null,
children: []
};
}
function paragraph() {
return {
type: "paragraph",
children: []
};
}
function strong() {
return {
type: "strong",
children: []
};
}
function text3() {
return {
type: "text",
value: ""
};
}
function thematicBreak2() {
return {
type: "thematicBreak"
};
}
}
function point2(d2) {
return {
line: d2.line,
column: d2.column,
offset: d2.offset
};
}
function configure(combined, extensions) {
let index2 = -1;
while (++index2 < extensions.length) {
const value = extensions[index2];
if (Array.isArray(value)) {
configure(combined, value);
} else {
extension(combined, value);
}
}
}
function extension(combined, extension2) {
let key;
for (key in extension2) {
if (own2.call(extension2, key)) {
if (key === "canContainEols") {
const right = extension2[key];
if (right) {
combined[key].push(...right);
}
} else if (key === "transforms") {
const right = extension2[key];
if (right) {
combined[key].push(...right);
}
} else if (key === "enter" || key === "exit") {
const right = extension2[key];
if (right) {
Object.assign(combined[key], right);
}
}
}
}
}
function defaultOnError(left, right) {
if (left) {
throw new Error(
"Cannot close `" + left.type + "` (" + stringifyPosition({
start: left.start,
end: left.end
}) + "): a different token (`" + right.type + "`, " + stringifyPosition({
start: right.start,
end: right.end
}) + ") is open"
);
} else {
throw new Error(
"Cannot close document, a token (`" + right.type + "`, " + stringifyPosition({
start: right.start,
end: right.end
}) + ") is still open"
);
}
}
// node_modules/remark-parse/lib/index.js
function remarkParse(options) {
const parser = (doc) => {
const settings = (
/** @type {Options} */
this.data("settings")
);
return fromMarkdown(
doc,
Object.assign({}, settings, options, {
// Note: these options are not in the readme.
// The goal is for them to be set by plugins on `data` instead of being
// passed by users.
extensions: this.data("micromarkExtensions") || [],
mdastExtensions: this.data("fromMarkdownExtensions") || []
})
);
};
Object.assign(this, { Parser: parser });
}
// src/ReadingView.ts
async function readingViewCodeblockDecoratingPostProcessor(element2, { sourcePath, getSectionInfo, frontmatter }, plugin, editingEmbeds = false) {
var _a;
const cache = plugin.app.metadataCache.getCache(sourcePath);
if (!sourcePath || !element2 || ((_a = frontmatter != null ? frontmatter : cache == null ? void 0 : cache.frontmatter) == null ? void 0 : _a["code-styler-ignore"]) === true)
return;
editingEmbeds = editingEmbeds || Boolean(element2.matchParent(".cm-embed-block"));
const specific = !element2.querySelector(".view-content > *");
const printing = Boolean(element2.querySelector("div.print > *"));
if (printing && !plugin.settings.decoratePrint)
return;
const codeblockPreElements = await getCodeblockPreElements(element2, specific, editingEmbeds);
if (codeblockPreElements.length === 0 && !(editingEmbeds && specific))
return;
const codeblockSectionInfo = getSectionInfo(codeblockPreElements[0]);
if (codeblockSectionInfo && specific && !editingEmbeds)
await renderSpecificReadingSection(codeblockPreElements, sourcePath, codeblockSectionInfo, plugin);
else if (specific && !printing)
await retriggerProcessor(element2, { sourcePath, getSectionInfo, frontmatter }, plugin, editingEmbeds);
else
await renderDocument(codeblockPreElements, sourcePath, cache, editingEmbeds, printing, plugin);
}
async function readingViewInlineDecoratingPostProcessor(element2, { sourcePath }, plugin) {
if (!sourcePath || !element2)
return;
for (const inlineCodeElement of Array.from(element2.querySelectorAll(":not(pre) > code"))) {
await remakeInlineCode(inlineCodeElement, plugin);
}
}
function destroyReadingModeElements() {
document.querySelectorAll(".code-styler-pre-parent").forEach((codeblockPreParent) => {
codeblockPreParent.classList.remove("code-styler-pre-parent");
});
[
...Array.from(document.querySelectorAll("pre.code-styler-pre div[class^='code-styler-header-container']")),
...Array.from(document.querySelectorAll("pre.code-styler-pre div[class^='code-styler-line-number']")),
...Array.from(document.querySelectorAll(":not(pre) > code span.code-styler-inline-opener"))
].forEach((element2) => element2.remove());
document.querySelectorAll("pre.code-styler-pre").forEach((codeblockPreElement) => {
codeblockPreElement.classList.remove("code-styler-pre");
codeblockPreElement.classList.remove("code-styler-collapsed");
codeblockPreElement.style.removeProperty("--true-height");
codeblockPreElement.style.removeProperty("--line-number-margin");
codeblockPreElement.style.removeProperty("max-height");
codeblockPreElement.style.removeProperty("white-space");
});
document.querySelectorAll("pre > code ~ code.language-output").forEach((executeCodeOutput) => {
executeCodeOutput.classList.remove("execute-code-output");
executeCodeOutput.style.removeProperty("--true-height");
executeCodeOutput.style.removeProperty("max-height");
});
document.querySelectorAll("pre > code:nth-of-type(1)").forEach((codeblockCodeElement) => {
codeblockCodeElement.style.removeProperty("--true-height");
codeblockCodeElement.style.removeProperty("--line-wrapping");
codeblockCodeElement.style.removeProperty("--line-active-wrapping");
codeblockCodeElement.style.removeProperty("max-height");
codeblockCodeElement.style.removeProperty("white-space");
codeblockCodeElement.innerHTML = Array.from(codeblockCodeElement.querySelectorAll('code > [class*="code-styler-line"]')).reduce((reconstructedCodeblockLines, codeblockLine) => {
const codeblockLineText = codeblockLine.firstChild;
if (codeblockLineText)
reconstructedCodeblockLines.push(codeblockLineText.innerHTML);
return reconstructedCodeblockLines;
}, []).join("\n") + "\n";
});
document.querySelectorAll(":not(pre) > code").forEach((inlineCodeElement) => {
inlineCodeElement.classList.remove("code-styler-highlighted");
inlineCodeElement.classList.remove("code-styler-highlight-ignore");
inlineCodeElement.innerText = inlineCodeElement.getAttribute("parameters") + inlineCodeElement.innerText;
});
}
async function renderSpecificReadingSection(codeblockPreElements, sourcePath, codeblockSectionInfo, plugin) {
const codeblocksParameters = (await parseCodeblockSource(Array.from({ length: codeblockSectionInfo.lineEnd - codeblockSectionInfo.lineStart + 1 }, (_2, num) => num + codeblockSectionInfo.lineStart).map((lineNumber) => codeblockSectionInfo.text.split("\n")[lineNumber]), sourcePath, plugin)).codeblocksParameters;
if (codeblockPreElements.length !== codeblocksParameters.length)
return;
for (const [key, codeblockPreElement] of codeblockPreElements.entries()) {
const codeblockParameters = codeblocksParameters[key];
const codeblockCodeElement = codeblockPreElement.querySelector("pre > code");
if (!codeblockCodeElement)
return;
if (Array.from(codeblockCodeElement.classList).some((className) => /^language-\S+/.test(className)))
while (!codeblockCodeElement.classList.contains("is-loaded"))
await sleep(2);
if (isExcluded(codeblockParameters.language, plugin.settings.excludedLanguages) || codeblockParameters.ignore)
continue;
await remakeCodeblock(codeblockCodeElement, codeblockPreElement, codeblockParameters, true, plugin);
}
}
async function retriggerProcessor(element2, context, plugin, editingEmbeds) {
await sleep(50);
editingEmbeds = editingEmbeds || Boolean(element2.matchParent(".cm-embed-block"));
if (editingEmbeds || !element2.classList.contains("admonition-content")) {
const contentEl = element2.matchParent(".view-content");
await readingViewCodeblockDecoratingPostProcessor(contentEl || element2.matchParent("div.print"), context, plugin, editingEmbeds);
}
}
async function renderDocument(codeblockPreElements, sourcePath, cache, editingEmbeds, printing, plugin) {
const codeblocksParameters = await getCodeblocksParameters(sourcePath, cache, plugin, editingEmbeds);
if (codeblocksParameters.length !== codeblockPreElements.length)
return;
try {
for (const [key, codeblockPreElement] of Array.from(codeblockPreElements).entries()) {
const codeblockParameters = codeblocksParameters[key];
const codeblockCodeElement = codeblockPreElement.querySelector("pre > code");
if (!codeblockCodeElement)
return;
if (Array.from(codeblockCodeElement.classList).some((className) => /^language-\S+/.test(className)))
while (!codeblockCodeElement.classList.contains("is-loaded"))
await sleep(2);
if (codeblockCodeElement.querySelector("code [class*='code-styler-line']"))
continue;
if (isExcluded(codeblockParameters.language, plugin.settings.excludedLanguages) || codeblockParameters.ignore)
continue;
await remakeCodeblock(codeblockCodeElement, codeblockPreElement, codeblockParameters, !printing, plugin);
}
} catch (error) {
console.error(`Error rendering document: ${error.message}`);
return;
}
}
async function remakeCodeblock(codeblockCodeElement, codeblockPreElement, codeblockParameters, dynamic, plugin) {
if (dynamic)
plugin.executeCodeMutationObserver.observe(codeblockPreElement, { childList: true, subtree: true, attributes: true, characterData: true });
insertHeader(codeblockPreElement, codeblockParameters, plugin, dynamic);
codeblockPreElement.classList.add(...getPreClasses(codeblockParameters, dynamic));
if (codeblockPreElement.parentElement)
codeblockPreElement.parentElement.classList.add("code-styler-pre-parent");
if (!codeblockCodeElement.querySelector("code [class*='code-styler-line']"))
decorateCodeblockLines(codeblockCodeElement, codeblockParameters);
}
async function remakeInlineCode(inlineCodeElement, plugin) {
if (inlineCodeElement.classList.contains("code-styler-inline"))
return;
const inlineCodeText = inlineCodeElement.innerText;
const { parameters, text: text3 } = parseInlineCode(inlineCodeText);
if (parameters && plugin.settings.currentTheme.settings.inline.syntaxHighlight)
inlineCodeElement.innerHTML = await getHighlightedHTML(parameters, text3, plugin);
else if (!parameters && text3 || parameters && !plugin.settings.currentTheme.settings.inline.syntaxHighlight)
inlineCodeElement.innerHTML = text3;
else
return;
inlineCodeElement.classList.add("code-styler-inline");
if (parameters) {
const parameterString = inlineCodeText.substring(0, inlineCodeText.lastIndexOf(text3));
inlineCodeElement.setAttribute("parameters", parameterString);
if (parameters.icon || parameters.title)
inlineCodeElement.insertBefore(createInlineOpener(parameters, plugin.languageIcons), inlineCodeElement.childNodes[0]);
}
}
async function getCodeblockPreElements(element2, specific, editingEmbeds) {
var _a;
let codeblockPreElements;
if (!editingEmbeds && !specific)
codeblockPreElements = Array.from(element2.querySelectorAll(".markdown-reading-view pre:not(.frontmatter)"));
else if (editingEmbeds && !specific)
codeblockPreElements = Array.from(element2.querySelectorAll(".markdown-source-view .cm-embed-block pre:not(.frontmatter)"));
else if (!editingEmbeds && specific) {
codeblockPreElements = Array.from(element2.querySelectorAll("pre:not(.frontmatter)"));
const admonitionCodeElement = (_a = codeblockPreElements == null ? void 0 : codeblockPreElements[0]) == null ? void 0 : _a.querySelector('pre:not([class]) > code[class*="language-ad-"]');
if (admonitionCodeElement) {
await sleep(50);
codeblockPreElements = Array.from(element2.querySelectorAll("pre:not(.frontmatter)"));
}
} else
codeblockPreElements = [];
return codeblockPreElements;
}
async function getCodeblocksParameters(sourcePath, cache, plugin, editingEmbeds) {
let codeblocksParameters = [];
const fileContentLines = await getFileContentLines(sourcePath, plugin);
if (!fileContentLines)
return [];
if (typeof (cache == null ? void 0 : cache.sections) !== "undefined") {
for (const section of cache.sections) {
if (!editingEmbeds || section.type === "code" || section.type === "callout") {
const parsedCodeblocksParameters = await parseCodeblockSource(fileContentLines.slice(section.position.start.line, section.position.end.line + 1), sourcePath, plugin);
if (!editingEmbeds || parsedCodeblocksParameters.nested)
codeblocksParameters = codeblocksParameters.concat(parsedCodeblocksParameters.codeblocksParameters);
}
}
} else
console.error(`Metadata cache not found for file: ${sourcePath}`);
return codeblocksParameters;
}
async function toggleFold(codeblockPreElement) {
codeblockPreElement.querySelectorAll("pre > code").forEach((codeblockCodeElement) => codeblockCodeElement.style.setProperty("max-height", `calc(${Math.ceil(codeblockCodeElement.scrollHeight + 0.01)}px + var(--code-padding) * ${codeblockCodeElement.classList.contains("execute-code-output") ? "3.5 + var(--header-separator-width)" : "2"})`));
await sleep(1);
codeblockPreElement.classList.toggle("code-styler-collapsed");
await sleep(TRANSITION_LENGTH);
codeblockPreElement.querySelectorAll("pre > code").forEach((codeblockCodeElement) => codeblockCodeElement.style.removeProperty("max-height"));
}
function insertHeader(codeblockPreElement, codeblockParameters, plugin, dynamic) {
const headerContainer = createHeader(codeblockParameters, plugin.settings.currentTheme.settings, plugin.languageIcons);
if (dynamic)
headerContainer.addEventListener("click", () => {
toggleFold(codeblockPreElement);
});
codeblockPreElement.insertBefore(headerContainer, codeblockPreElement.childNodes[0]);
}
function getPreClasses(codeblockParameters, dynamic) {
const preClassList = ["code-styler-pre"];
if (codeblockParameters.language)
preClassList.push(`language-${codeblockParameters.language}`);
if (dynamic) {
if (codeblockParameters.fold.enabled)
preClassList.push("code-styler-collapsed");
if (codeblockParameters.lineUnwrap.alwaysEnabled)
preClassList.push(codeblockParameters.lineUnwrap.activeWrap ? "unwrapped-inactive" : "unwrapped");
else if (codeblockParameters.lineUnwrap.alwaysDisabled)
preClassList.push("unwrapped");
}
return preClassList;
}
function decorateCodeblockLines(codeblockCodeElement, codeblockParameters) {
getCodeblockLines(codeblockCodeElement).forEach((line, index2, codeblockLines) => {
if (index2 !== codeblockLines.length - 1)
insertLineWrapper(codeblockCodeElement, codeblockParameters, index2 + 1, line);
});
}
function getCodeblockLines(codeblockCodeElement) {
function escapeHTML(plaintext) {
return plaintext.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
}
const tree = unified().use(remarkParse).parse(codeblockCodeElement.innerHTML.replace(/\n/g, "<br>"));
const stack = [];
let codeblockHTML = "";
visit(tree, ["text", "html"], (node2) => {
if (node2.type === "html" && node2.value !== "<br>") {
if (node2.value.startsWith("<span"))
stack.push(node2.value);
else if (node2.value.startsWith("</span"))
stack.pop();
} else if (node2.type === "html" && node2.value === "<br>")
node2.value = "</span>".repeat(stack.length) + "<br>" + stack.join("");
else if (node2.type === "text")
node2.value = escapeHTML(node2.value);
if ("value" in node2)
codeblockHTML += node2.value;
});
let codeblockLines = codeblockHTML.split("<br>");
if (codeblockLines.length == 1)
codeblockLines = ["", ""];
codeblockCodeElement.innerHTML = "";
return codeblockLines;
}
function insertLineWrapper(codeblockCodeElement, codeblockParameters, lineNumber, line) {
const lineWrapper = document.createElement("div");
codeblockCodeElement.appendChild(lineWrapper);
getLineClass(codeblockParameters, lineNumber, line).forEach((lineClass) => lineWrapper.classList.add(lineClass));
lineWrapper.appendChild(createDiv({ cls: `code-styler-line-number${getLineNumberDisplay(codeblockParameters)}`, text: (lineNumber + codeblockParameters.lineNumbers.offset).toString() }));
lineWrapper.appendChild(createDiv({ cls: "code-styler-line-text", text: (0, import_obsidian3.sanitizeHTMLToDom)(line !== "" ? line : "<br>") }));
}
async function getHighlightedHTML(parameters, text3, plugin) {
const temporaryRenderingContainer = createDiv();
import_obsidian3.MarkdownRenderer.render(plugin.app, ["```", parameters.language, "\n", text3, "\n", "```"].join(""), temporaryRenderingContainer, "", new import_obsidian3.Component());
const renderedCodeElement = temporaryRenderingContainer.querySelector("code");
if (!renderedCodeElement)
return "ERROR: Could not render highlighted code";
while (plugin.settings.currentTheme.settings.inline.syntaxHighlight && !renderedCodeElement.classList.contains("is-loaded"))
await sleep(2);
return renderedCodeElement.innerHTML;
}
var executeCodeMutationObserver = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === "childList" && mutation.target.tagName === "PRE") {
const executeCodeOutput = mutation.target.querySelector("pre > code ~ code.language-output");
if (executeCodeOutput)
executeCodeOutput.classList.add("execute-code-output");
}
});
});
// src/main.ts
var CodeStylerPlugin = class extends import_obsidian4.Plugin {
async onload() {
await this.loadSettings();
const settingsTab = new SettingsTab(this.app, this);
this.addSettingTab(settingsTab);
document.body.classList.add("code-styler");
updateStyling(this.settings, this.app);
this.languageIcons = Object.keys(LANGUAGE_ICONS_DATA).reduce((result, key) => {
result[key] = URL.createObjectURL(new Blob([`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">${LANGUAGE_ICONS_DATA[key]}</svg>`], { type: "image/svg+xml" }));
return result;
}, {});
this.sizes = {
font: document.body.getCssPropertyValue("--font-text-size"),
zoom: document.body.getCssPropertyValue("--zoom-factor")
};
this.executeCodeMutationObserver = executeCodeMutationObserver;
this.registerMarkdownPostProcessor(async (el, ctx) => {
await readingViewCodeblockDecoratingPostProcessor(el, ctx, this);
});
this.registerMarkdownPostProcessor(async (el, ctx) => {
await readingViewInlineDecoratingPostProcessor(el, ctx, this);
});
this.registerEditorExtension(createCodeblockCodeMirrorExtensions(this.settings, this.languageIcons));
let zoomTimeout = setTimeout(() => {
});
this.registerEvent(this.app.workspace.on("css-change", () => {
updateStyling(this.settings, this.app);
const currentFontSize = document.body.getCssPropertyValue("--font-text-size");
if (this.sizes.font !== currentFontSize) {
this.sizes.font = currentFontSize;
clearTimeout(zoomTimeout);
zoomTimeout = setTimeout(() => {
this.rerenderPreview();
}, 1e3);
}
}, this));
this.registerEvent(this.app.workspace.on("resize", () => {
const currentZoomSize = document.body.getCssPropertyValue("--zoom-factor");
if (this.sizes.zoom !== currentZoomSize) {
this.sizes.zoom = currentZoomSize;
clearTimeout(zoomTimeout);
zoomTimeout = setTimeout(() => {
this.rerenderPreview();
}, 1e3);
}
}, this));
this.app.workspace.onLayoutReady(() => {
this.rerenderPreview();
});
console.log("Loaded plugin: Code Styler");
}
onunload() {
this.executeCodeMutationObserver.disconnect();
removeStylesAndClasses();
destroyReadingModeElements();
for (const url of Object.values(this.languageIcons))
URL.revokeObjectURL(url);
console.log("Unloaded plugin: Code Styler");
}
async loadSettings() {
this.settings = Object.assign({}, structuredClone(DEFAULT_SETTINGS), await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
this.app.workspace.updateOptions();
updateStyling(this.settings, this.app);
}
rerenderPreview() {
this.app.workspace.iterateRootLeaves((leaf) => {
if (leaf.view instanceof import_obsidian4.MarkdownView && leaf.view.getMode() === "preview")
leaf.view.previewMode.rerender(true);
});
}
};
/*! Bundled license information:
@simonwep/pickr/dist/pickr.min.js:
(*! Pickr 1.8.2 MIT | https://github.com/Simonwep/pickr *)
is-buffer/index.js:
(*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*)
*/
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3dlYnBhY2s6L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsICJub2RlX21vZHVsZXMvQHNpbW9ud2VwL3BpY2tyL2Rpc3Qvd2VicGFjazovd2VicGFjay9ib290c3RyYXAiLCAibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3dlYnBhY2s6L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsICJub2RlX21vZHVsZXMvQHNpbW9ud2VwL3BpY2tyL2Rpc3Qvd2VicGFjazovd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsICJub2RlX21vZHVsZXMvQHNpbW9ud2VwL3BpY2tyL2Rpc3Qvd2VicGFjazovd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsICJub2RlX21vZHVsZXMvQHNpbW9ud2VwL3BpY2tyL2Rpc3Qvd2VicGFjazovc3JjL2pzL3V0aWxzL3V0aWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2ltb253ZXAvcGlja3IvZGlzdC93ZWJwYWNrOi9zcmMvanMvdXRpbHMvY29sb3IuanMiLCAibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3dlYnBhY2s6L3NyYy9qcy91dGlscy9oc3ZhY29sb3IuanMiLCAibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3dlYnBhY2s6L3NyYy9qcy9saWJzL21vdmVhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2ltb253ZXAvcGlja3IvZGlzdC93ZWJwYWNrOi9zcmMvanMvbGlicy9zZWxlY3RhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2ltb253ZXAvcGlja3IvZGlzdC93ZWJwYWNrOi9zcmMvanMvdGVtcGxhdGUuanMiLCAibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3NyYy9OYW5vUG9wLnRzIiwgIm5vZGVfbW9kdWxlcy9Ac2ltb253ZXAvcGlja3IvZGlzdC93ZWJwYWNrOi9zcmMvanMvcGlja3IuanMiLCAibm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvZXh0ZW5kL2luZGV4LmpzIiwgInNyYy9tYWluLnRzIiwgInNyYy9TZXR0aW5ncy50cyIsICJzcmMvU2V0dGluZ3NUYWIudHMiLCAibm9kZV9tb2R1bGVzL2NvbG9ydHJhbnNsYXRvci9lc20vaW5kZXguanMiLCAic3JjL0FwcGx5U3R5bGluZy50cyIsICJzcmMvRWRpdGluZ1ZpZXcudHMiLCAic3JjL0NvZGVibG9ja1BhcnNpbmcudHMiLCAic3JjL0NvZGVibG9ja0RlY29yYXRpbmcudHMiLCAic3JjL1JlYWRpbmdWaWV3LnRzIiwgIm5vZGVfbW9kdWxlcy9iYWlsL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy91bmlmaWVkL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy90cm91Z2gvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24vbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy92ZmlsZS1tZXNzYWdlL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnBhdGguYnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnByb2MuYnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnVybC5zaGFyZWQuanMiLCAibm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuYnJvd3Nlci5qcyIsICJub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9saWIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvY29sb3IuanMiLCAibm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLXN0cmluZy9saWIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNodW5rZWQvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9ucy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyL2xpYi91bmljb2RlLXB1bmN0dWF0aW9uLXJlZ2V4LmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jaGFyYWN0ZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXNwYWNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvY29udGVudC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9hdHRlbnRpb24uanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2F1dG9saW5rLmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9ibGFuay1saW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9ibG9jay1xdW90ZS5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY2hhcmFjdGVyLWVzY2FwZS5qcyIsICJub2RlX21vZHVsZXMvZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UvaW5kZXguZG9tLmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jaGFyYWN0ZXItcmVmZXJlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLWZlbmNlZC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS1pbmRlbnRlZC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS10ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29udGVudC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24vaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS10aXRsZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3Rvcnktd2hpdGVzcGFjZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2hhcmQtYnJlYWstZXNjYXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9oZWFkaW5nLWF0eC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtaHRtbC10YWctbmFtZS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaHRtbC1mbG93LmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9odG1sLXRleHQuanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLWVuZC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtc3RhcnQtaW1hZ2UuanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWxpbmsuanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xpbmUtZW5kaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi90aGVtYXRpYy1icmVhay5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGlzdC5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvc2V0ZXh0LXVuZGVybGluZS5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2Zsb3cuanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS90ZXh0LmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NyZWF0ZS10b2tlbml6ZXIuanMiLCAibm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29uc3RydWN0cy5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wYXJzZS5qcyIsICJub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wcmVwcm9jZXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3Bvc3Rwcm9jZXNzLmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtc3RyaW5nL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL2luZGV4LmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJQaWNrclwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJQaWNrclwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsICIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwgIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsICJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwgIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsICIvKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItcmVzdC1wYXJhbXMgKi9cclxuZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcihtZXRob2QsIGVsZW1lbnRzLCBldmVudHMsIGZuLCBvcHRpb25zID0ge30pIHtcclxuXHJcbiAgICAvLyBOb3JtYWxpemUgYXJyYXlcclxuICAgIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcclxuICAgICAgICBlbGVtZW50cyA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xyXG4gICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShlbGVtZW50cykpIHtcclxuICAgICAgICBlbGVtZW50cyA9IFtlbGVtZW50c107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV2ZW50cykpIHtcclxuICAgICAgICBldmVudHMgPSBbZXZlbnRzXTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnRzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudHMpIHtcclxuICAgICAgICAgICAgZWxbbWV0aG9kXShldiwgZm4sIHtjYXB0dXJlOiBmYWxzZSwgLi4ub3B0aW9uc30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFkZCBldmVudChzKSB0byBlbGVtZW50KHMpLlxyXG4gKiBAcGFyYW0gZWxlbWVudHMgRE9NLUVsZW1lbnRzXHJcbiAqIEBwYXJhbSBldmVudHMgRXZlbnQgbmFtZXNcclxuICogQHBhcmFtIGZuIENhbGxiYWNrXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnNcclxuICogQHJldHVybiBBcnJheSBwYXNzZWQgYXJndW1lbnRzXHJcbiAqL1xyXG5leHBvcnQgY29uc3Qgb24gPSBldmVudExpc3RlbmVyLmJpbmQobnVsbCwgJ2FkZEV2ZW50TGlzdGVuZXInKTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlbnQocykgZnJvbSBlbGVtZW50KHMpLlxyXG4gKiBAcGFyYW0gZWxlbWVudHMgRE9NLUVsZW1lbnRzXHJcbiAqIEBwYXJhbSBldmVudHMgRXZlbnQgbmFtZXNcclxuICogQHBhcmFtIGZuIENhbGxiYWNrXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnNcclxuICogQHJldHVybiBBcnJheSBwYXNzZWQgYXJndW1lbnRzXHJcbiAqL1xyXG5leHBvcnQgY29uc3Qgb2ZmID0gZXZlbnRMaXN0ZW5lci5iaW5kKG51bGwsICdyZW1vdmVFdmVudExpc3RlbmVyJyk7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBET00tRWxlbWVudCBvdXQgb2YgYSBzdHJpbmcgKFNpbmdsZSBlbGVtZW50KS5cclxuICogQHBhcmFtIGh0bWwgSFRNTCByZXByZXNlbnRpbmcgYSBzaW5nbGUgZWxlbWVudFxyXG4gKiBAcmV0dXJucyB7RWxlbWVudCB8IG51bGx9IFRoZSBlbGVtZW50LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRGcm9tU3RyaW5nKGh0bWwpIHtcclxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWwudHJpbSgpO1xyXG4gICAgcmV0dXJuIGRpdi5maXJzdEVsZW1lbnRDaGlsZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaHRtbCBlbGVtZW50LCBldmVyeSBlbGVtZW50IHdoaWNoIGhhc1xyXG4gKiBhICc6cmVmJyBhdHRyaWJ1dGUgd2lsbCBiZSBzYXZlZCBpbiBhIG9iamVjdCAod2hpY2ggd2lsbCBiZSByZXR1cm5lZClcclxuICogd2hlcmUgdGhlIHZhbHVlIG9mICc6cmVmJyBpcyB0aGUgb2JqZWN0LWtleSBhbmQgdGhlIHZhbHVlIHRoZSBIVE1MRWxlbWVudC5cclxuICpcclxuICogSXQncyBwb3NzaWJsZSB0byBjcmVhdGUgYSBoaWVyYXJjaHkgaWYgeW91IGFkZCBhICc6b2JqJyBhdHRyaWJ1dGUuIEV2ZXJ5XHJcbiAqIHNpYmxpbmcgd2lsbCBiZSBhZGRlZCB0byB0aGUgb2JqZWN0IHdoaWNoIHdpbGwgZ2V0IHRoZSBuYW1lIGZyb20gdGhlICdkYXRhLWNvbicgYXR0cmlidXRlLlxyXG4gKlxyXG4gKiBJZiB5b3Ugd2FudCB0byBjcmVhdGUgYW4gQXJyYXkgb3V0IG9mIG11bHRpcGxlIGVsZW1lbnRzLCB5b3UgY2FuIHVzZSB0aGUgJzphcnInIGF0dHJpYnV0ZSxcclxuICogdGhlIHZhbHVlIGRlZmluZXMgdGhlIGtleSBhbmQgYWxsIGVsZW1lbnRzLCB3aGljaCBoYXMgdGhlIHNhbWUgcGFyZW50IGFuZCB0aGUgc2FtZSAnZGF0YS1hcnInIGF0dHJpYnV0ZSxcclxuICogd291bGQgYmUgYWRkZWQgdG8gaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSBzdHIgLSBUaGUgSFRNTCBTdHJpbmcuXHJcbiAqL1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21UZW1wbGF0ZShzdHIpIHtcclxuXHJcbiAgICAvLyBSZW1vdmVzIGFuIGF0dHJpYnV0ZSBmcm9tIGEgSFRNTEVsZW1lbnQgYW5kIHJldHVybnMgdGhlIHZhbHVlLlxyXG4gICAgY29uc3QgcmVtb3ZlQXR0cmlidXRlID0gKGVsLCBuYW1lKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XHJcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gUmVjdXJzaXZlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGVtcGxhdGVcclxuICAgIGNvbnN0IHJlc29sdmUgPSAoZWxlbWVudCwgYmFzZSA9IHt9KSA9PiB7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGtleSBhbmQgY29udGFpbmVyIGF0dHJpYnV0ZVxyXG4gICAgICAgIGNvbnN0IGNvbiA9IHJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCAnOm9iaicpO1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCAnOnJlZicpO1xyXG4gICAgICAgIGNvbnN0IHN1YnRyZWUgPSBjb24gPyAoYmFzZVtjb25dID0ge30pIDogYmFzZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgYW5kIHNhdmUgZWxlbWVudFxyXG4gICAgICAgIGtleSAmJiAoYmFzZVtrZXldID0gZWxlbWVudCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBBcnJheS5mcm9tKGVsZW1lbnQuY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IHJlbW92ZUF0dHJpYnV0ZShjaGlsZCwgJzphcnInKTtcclxuICAgICAgICAgICAgY29uc3Qgc3ViID0gcmVzb2x2ZShjaGlsZCwgYXJyID8ge30gOiBzdWJ0cmVlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcnIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGFycmF5IGFuZCBhZGQgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgKHN1YnRyZWVbYXJyXSB8fCAoc3VidHJlZVthcnJdID0gW10pKVxyXG4gICAgICAgICAgICAgICAgICAgIC5wdXNoKE9iamVjdC5rZXlzKHN1YikubGVuZ3RoID8gc3ViIDogY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYmFzZTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJlc29sdmUoY3JlYXRlRWxlbWVudEZyb21TdHJpbmcoc3RyKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQb2x5ZmlsbCBmb3Igc2FmYXJpICYgZmlyZWZveCBmb3IgdGhlIGV2ZW50UGF0aCBldmVudCBwcm9wZXJ0eS5cclxuICogQHBhcmFtIGV2dCBUaGUgZXZlbnQgb2JqZWN0LlxyXG4gKiBAcmV0dXJuIFtTdHJpbmddIGV2ZW50IHBhdGguXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRQYXRoKGV2dCkge1xyXG4gICAgbGV0IHBhdGggPSBldnQucGF0aCB8fCAoZXZ0LmNvbXBvc2VkUGF0aCAmJiBldnQuY29tcG9zZWRQYXRoKCkpO1xyXG4gICAgaWYgKHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZWwgPSBldnQudGFyZ2V0LnBhcmVudEVsZW1lbnQ7XHJcbiAgICBwYXRoID0gW2V2dC50YXJnZXQsIGVsXTtcclxuICAgIHdoaWxlIChlbCA9IGVsLnBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgICBwYXRoLnB1c2goZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGgucHVzaChkb2N1bWVudCwgd2luZG93KTtcclxuICAgIHJldHVybiBwYXRoO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZXMgYSBIVE1MRWxlbWVudCBieSBxdWVyeS5cclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcmV0dXJucyB7bnVsbHxEb2N1bWVudHxFbGVtZW50fVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbGVtZW50KHZhbCkge1xyXG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiB2YWwuc3BsaXQoLz4+L2cpLnJlZHVjZSgocHYsIGN2LCBjaSwgYSkgPT4ge1xyXG4gICAgICAgICAgICBwdiA9IHB2LnF1ZXJ5U2VsZWN0b3IoY3YpO1xyXG4gICAgICAgICAgICByZXR1cm4gY2kgPCBhLmxlbmd0aCAtIDEgPyBwdi5zaGFkb3dSb290IDogcHY7XHJcbiAgICAgICAgfSwgZG9jdW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyB0aGUgYWJpbGl0eSB0byBjaGFuZ2UgbnVtYmVycyBpbiBhbiBpbnB1dCBmaWVsZCB3aXRoIHRoZSBzY3JvbGwtd2hlZWwuXHJcbiAqIEBwYXJhbSBlbFxyXG4gKiBAcGFyYW0gbWFwcGVyXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0YWJsZUlucHV0TnVtYmVycyhlbCwgbWFwcGVyID0gdiA9PiB2KSB7XHJcblxyXG4gICAgZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKGUpIHtcclxuICAgICAgICBjb25zdCBpbmMgPSAoWzAuMDAxLCAwLjAxLCAwLjFdKVtOdW1iZXIoZS5zaGlmdEtleSB8fCBlLmN0cmxLZXkgKiAyKV0gKiAoZS5kZWx0YVkgPCAwID8gMSA6IC0xKTtcclxuXHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICBsZXQgb2ZmID0gZWwuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgZWwudmFsdWUgPSBlbC52YWx1ZS5yZXBsYWNlKC9bXFxkLl0rL2csICh2LCBpKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBudW1iZXIgaXMgaW4gY3Vyc29yIHJhbmdlIGFuZCBpbmNyZWFzZSBpdFxyXG4gICAgICAgICAgICBpZiAoaSA8PSBvZmYgJiYgaSArIHYubGVuZ3RoID49IG9mZikge1xyXG4gICAgICAgICAgICAgICAgb2ZmID0gaTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXBwZXIoTnVtYmVyKHYpLCBpbmMsIGluZGV4KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaW5kZXgrKztcclxuICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGVsLmZvY3VzKCk7XHJcbiAgICAgICAgZWwuc2V0U2VsZWN0aW9uUmFuZ2Uob2ZmLCBvZmYpO1xyXG5cclxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgYW5kIHRyaWdnZXIgaW5wdXQgZXZlbnRcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJpbmQgZXZlbnRzXHJcbiAgICBvbihlbCwgJ2ZvY3VzJywgKCkgPT4gb24od2luZG93LCAnd2hlZWwnLCBoYW5kbGVTY3JvbGwsIHtwYXNzaXZlOiBmYWxzZX0pKTtcclxuICAgIG9uKGVsLCAnYmx1cicsICgpID0+IG9mZih3aW5kb3csICd3aGVlbCcsIGhhbmRsZVNjcm9sbCkpO1xyXG59XHJcbiIsICIvLyBTaG9ydGhhbmRzXHJcbmNvbnN0IHttaW4sIG1heCwgZmxvb3IsIHJvdW5kfSA9IE1hdGg7XHJcblxyXG4vKipcclxuICogVHJpZXMgdG8gY29udmVydCBhIGNvbG9yIG5hbWUgdG8gcmdiL2EgaGV4IHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSBuYW1lXHJcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBDYW52YXNHcmFkaWVudCB8IENhbnZhc1BhdHRlcm59XHJcbiAqL1xyXG5mdW5jdGlvbiBzdGFuZGFyZGl6ZUNvbG9yKG5hbWUpIHtcclxuXHJcbiAgICAvLyBTaW5jZSBpbnZhbGlkIGNvbG9yJ3Mgd2lsbCBiZSBwYXJzZWQgYXMgYmxhY2ssIGZpbHRlciB0aGVtIG91dFxyXG4gICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2JsYWNrJykge1xyXG4gICAgICAgIHJldHVybiAnIzAwMCc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSBuYW1lO1xyXG4gICAgcmV0dXJuIGN0eC5maWxsU3R5bGUgPT09ICcjMDAwJyA/IG51bGwgOiBjdHguZmlsbFN0eWxlO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBIU1Ygc3BlY3RydW0gdG8gUkdCLlxyXG4gKiBAcGFyYW0gaCBIdWVcclxuICogQHBhcmFtIHMgU2F0dXJhdGlvblxyXG4gKiBAcGFyYW0gdiBWYWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyW119IEFycmF5IHdpdGggcmdiIHZhbHVlcy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBoc3ZUb1JnYihoLCBzLCB2KSB7XHJcbiAgICBoID0gKGggLyAzNjApICogNjtcclxuICAgIHMgLz0gMTAwO1xyXG4gICAgdiAvPSAxMDA7XHJcblxyXG4gICAgY29uc3QgaSA9IGZsb29yKGgpO1xyXG5cclxuICAgIGNvbnN0IGYgPSBoIC0gaTtcclxuICAgIGNvbnN0IHAgPSB2ICogKDEgLSBzKTtcclxuICAgIGNvbnN0IHEgPSB2ICogKDEgLSBmICogcyk7XHJcbiAgICBjb25zdCB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpO1xyXG5cclxuICAgIGNvbnN0IG1vZCA9IGkgJSA2O1xyXG4gICAgY29uc3QgciA9IFt2LCBxLCBwLCBwLCB0LCB2XVttb2RdO1xyXG4gICAgY29uc3QgZyA9IFt0LCB2LCB2LCBxLCBwLCBwXVttb2RdO1xyXG4gICAgY29uc3QgYiA9IFtwLCBwLCB0LCB2LCB2LCBxXVttb2RdO1xyXG5cclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgciAqIDI1NSxcclxuICAgICAgICBnICogMjU1LFxyXG4gICAgICAgIGIgKiAyNTVcclxuICAgIF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IEhTViBzcGVjdHJ1bSB0byBIZXguXHJcbiAqIEBwYXJhbSBoIEh1ZVxyXG4gKiBAcGFyYW0gcyBTYXR1cmF0aW9uXHJcbiAqIEBwYXJhbSB2IFZhbHVlXHJcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gSGV4IHZhbHVlc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGhzdlRvSGV4KGgsIHMsIHYpIHtcclxuICAgIHJldHVybiBoc3ZUb1JnYihoLCBzLCB2KS5tYXAodiA9PlxyXG4gICAgICAgIHJvdW5kKHYpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpXHJcbiAgICApO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBIU1Ygc3BlY3RydW0gdG8gQ01ZSy5cclxuICogQHBhcmFtIGggSHVlXHJcbiAqIEBwYXJhbSBzIFNhdHVyYXRpb25cclxuICogQHBhcmFtIHYgVmFsdWVcclxuICogQHJldHVybnMge251bWJlcltdfSBDTVlLIHZhbHVlc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGhzdlRvQ215ayhoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoc3ZUb1JnYihoLCBzLCB2KTtcclxuICAgIGNvbnN0IHIgPSByZ2JbMF0gLyAyNTU7XHJcbiAgICBjb25zdCBnID0gcmdiWzFdIC8gMjU1O1xyXG4gICAgY29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcclxuXHJcbiAgICBjb25zdCBrID0gbWluKDEgLSByLCAxIC0gZywgMSAtIGIpO1xyXG4gICAgY29uc3QgYyA9IGsgPT09IDEgPyAwIDogKDEgLSByIC0gaykgLyAoMSAtIGspO1xyXG4gICAgY29uc3QgbSA9IGsgPT09IDEgPyAwIDogKDEgLSBnIC0gaykgLyAoMSAtIGspO1xyXG4gICAgY29uc3QgeSA9IGsgPT09IDEgPyAwIDogKDEgLSBiIC0gaykgLyAoMSAtIGspO1xyXG5cclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgYyAqIDEwMCxcclxuICAgICAgICBtICogMTAwLFxyXG4gICAgICAgIHkgKiAxMDAsXHJcbiAgICAgICAgayAqIDEwMFxyXG4gICAgXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgSFNWIHNwZWN0cnVtIHRvIEhTTC5cclxuICogQHBhcmFtIGggSHVlXHJcbiAqIEBwYXJhbSBzIFNhdHVyYXRpb25cclxuICogQHBhcmFtIHYgVmFsdWVcclxuICogQHJldHVybnMge251bWJlcltdfSBIU0wgdmFsdWVzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaHN2VG9Ic2woaCwgcywgdikge1xyXG4gICAgcyAvPSAxMDA7XHJcbiAgICB2IC89IDEwMDtcclxuXHJcbiAgICBjb25zdCBsID0gKDIgLSBzKSAqIHYgLyAyO1xyXG5cclxuICAgIGlmIChsICE9PSAwKSB7XHJcbiAgICAgICAgaWYgKGwgPT09IDEpIHtcclxuICAgICAgICAgICAgcyA9IDA7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsIDwgMC41KSB7XHJcbiAgICAgICAgICAgIHMgPSBzICogdiAvIChsICogMik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcyA9IHMgKiB2IC8gKDIgLSBsICogMik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgaCxcclxuICAgICAgICBzICogMTAwLFxyXG4gICAgICAgIGwgKiAxMDBcclxuICAgIF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IFJHQiB0byBIU1YuXHJcbiAqIEBwYXJhbSByIFJlZFxyXG4gKiBAcGFyYW0gZyBHcmVlblxyXG4gKiBAcGFyYW0gYiBCbHVlXHJcbiAqIEByZXR1cm4ge251bWJlcltdfSBIU1YgdmFsdWVzLlxyXG4gKi9cclxuZnVuY3Rpb24gcmdiVG9Ic3YociwgZywgYikge1xyXG4gICAgciAvPSAyNTU7XHJcbiAgICBnIC89IDI1NTtcclxuICAgIGIgLz0gMjU1O1xyXG5cclxuICAgIGNvbnN0IG1pblZhbCA9IG1pbihyLCBnLCBiKTtcclxuICAgIGNvbnN0IG1heFZhbCA9IG1heChyLCBnLCBiKTtcclxuICAgIGNvbnN0IGRlbHRhID0gbWF4VmFsIC0gbWluVmFsO1xyXG5cclxuICAgIGxldCBoLCBzO1xyXG4gICAgY29uc3QgdiA9IG1heFZhbDtcclxuICAgIGlmIChkZWx0YSA9PT0gMCkge1xyXG4gICAgICAgIGggPSBzID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcyA9IGRlbHRhIC8gbWF4VmFsO1xyXG4gICAgICAgIGNvbnN0IGRyID0gKCgobWF4VmFsIC0gcikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIGNvbnN0IGRnID0gKCgobWF4VmFsIC0gZykgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIGNvbnN0IGRiID0gKCgobWF4VmFsIC0gYikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG5cclxuICAgICAgICBpZiAociA9PT0gbWF4VmFsKSB7XHJcbiAgICAgICAgICAgIGggPSBkYiAtIGRnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZyA9PT0gbWF4VmFsKSB7XHJcbiAgICAgICAgICAgIGggPSAoMSAvIDMpICsgZHIgLSBkYjtcclxuICAgICAgICB9IGVsc2UgaWYgKGIgPT09IG1heFZhbCkge1xyXG4gICAgICAgICAgICBoID0gKDIgLyAzKSArIGRnIC0gZHI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaCA8IDApIHtcclxuICAgICAgICAgICAgaCArPSAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaCA+IDEpIHtcclxuICAgICAgICAgICAgaCAtPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIGggKiAzNjAsXHJcbiAgICAgICAgcyAqIDEwMCxcclxuICAgICAgICB2ICogMTAwXHJcbiAgICBdO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBDTVlLIHRvIEhTVi5cclxuICogQHBhcmFtIGMgQ3lhblxyXG4gKiBAcGFyYW0gbSBNYWdlbnRhXHJcbiAqIEBwYXJhbSB5IFllbGxvd1xyXG4gKiBAcGFyYW0gayBLZXkgKEJsYWNrKVxyXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gSFNWIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGNteWtUb0hzdihjLCBtLCB5LCBrKSB7XHJcbiAgICBjIC89IDEwMDtcclxuICAgIG0gLz0gMTAwO1xyXG4gICAgeSAvPSAxMDA7XHJcbiAgICBrIC89IDEwMDtcclxuXHJcbiAgICBjb25zdCByID0gKDEgLSBtaW4oMSwgYyAqICgxIC0gaykgKyBrKSkgKiAyNTU7XHJcbiAgICBjb25zdCBnID0gKDEgLSBtaW4oMSwgbSAqICgxIC0gaykgKyBrKSkgKiAyNTU7XHJcbiAgICBjb25zdCBiID0gKDEgLSBtaW4oMSwgeSAqICgxIC0gaykgKyBrKSkgKiAyNTU7XHJcblxyXG4gICAgcmV0dXJuIFsuLi5yZ2JUb0hzdihyLCBnLCBiKV07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IEhTTCB0byBIU1YuXHJcbiAqIEBwYXJhbSBoIEh1ZVxyXG4gKiBAcGFyYW0gcyBTYXR1cmF0aW9uXHJcbiAqIEBwYXJhbSBsIExpZ2h0bmVzc1xyXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gSFNWIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGhzbFRvSHN2KGgsIHMsIGwpIHtcclxuICAgIHMgLz0gMTAwO1xyXG4gICAgbCAvPSAxMDA7XHJcbiAgICBzICo9IGwgPCAwLjUgPyBsIDogMSAtIGw7XHJcblxyXG4gICAgY29uc3QgbnMgPSAoMiAqIHMgLyAobCArIHMpKSAqIDEwMDtcclxuICAgIGNvbnN0IHYgPSAobCArIHMpICogMTAwO1xyXG4gICAgcmV0dXJuIFtoLCBpc05hTihucykgPyAwIDogbnMsIHZdO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBIRVggdG8gSFNWLlxyXG4gKiBAcGFyYW0gaGV4IEhleGFkZWNpbWFsIHN0cmluZyBvZiByZ2IgY29sb3JzLCBjYW4gaGF2ZSBsZW5ndGggMyBvciA2LlxyXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gSFNWIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvSHN2KGhleCkge1xyXG4gICAgcmV0dXJuIHJnYlRvSHN2KC4uLmhleC5tYXRjaCgvLnsyfS9nKS5tYXAodiA9PiBwYXJzZUludCh2LCAxNikpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRyeSdzIHRvIHBhcnNlIGEgc3RyaW5nIHdoaWNoIHJlcHJlc2VudHMgYSBjb2xvciB0byBhIEhTViBhcnJheS5cclxuICogQ3VycmVudCBzdXBwb3J0ZWQgdHlwZXMgYXJlIGNteWssIHJnYmEsIGhzbGEgYW5kIGhleGFkZWNpbWFsLlxyXG4gKiBAcGFyYW0gc3RyXHJcbiAqIEByZXR1cm4geyp9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUb0hTVkEoc3RyKSB7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgc3RyaW5nIGlzIGEgY29sb3ItbmFtZVxyXG4gICAgc3RyID0gc3RyLm1hdGNoKC9eW2EtekEtWl0rJC8pID8gc3RhbmRhcmRpemVDb2xvcihzdHIpIDogc3RyO1xyXG5cclxuICAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gbWF0Y2ggZGlmZmVyZW50IHR5cGVzIG9mIGNvbG9yIHJlcHJlc2VudGlvblxyXG4gICAgY29uc3QgcmVnZXggPSB7XHJcbiAgICAgICAgY215azogL15jbXlrW1xcRF0rKFtcXGQuXSspW1xcRF0rKFtcXGQuXSspW1xcRF0rKFtcXGQuXSspW1xcRF0rKFtcXGQuXSspL2ksXHJcbiAgICAgICAgcmdiYTogL14oKHJnYmEpfHJnYilbXFxEXSsoW1xcZC5dKylbXFxEXSsoW1xcZC5dKylbXFxEXSsoW1xcZC5dKylbXFxEXSo/KFtcXGQuXSt8JCkvaSxcclxuICAgICAgICBoc2xhOiAvXigoaHNsYSl8aHNsKVtcXERdKyhbXFxkLl0rKVtcXERdKyhbXFxkLl0rKVtcXERdKyhbXFxkLl0rKVtcXERdKj8oW1xcZC5dK3wkKS9pLFxyXG4gICAgICAgIGhzdmE6IC9eKChoc3ZhKXxoc3YpW1xcRF0rKFtcXGQuXSspW1xcRF0rKFtcXGQuXSspW1xcRF0rKFtcXGQuXSspW1xcRF0qPyhbXFxkLl0rfCQpL2ksXHJcbiAgICAgICAgaGV4YTogL14jPygoW1xcZEEtRmEtZl17Myw0fSl8KFtcXGRBLUZhLWZdezZ9KXwoW1xcZEEtRmEtZl17OH0pKSQvaVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGFuIEFycmF5IG9mIGFueSB0eXBlLCBjb252ZXJ0IHN0cmluZ3Mgd2hpY2ggcmVwcmVzZW50c1xyXG4gICAgICogYSBudW1iZXIgdG8gYSBudW1iZXIgYW4gYW55dGhpbmcgZWxzZSB0byB1bmRlZmluZWQuXHJcbiAgICAgKiBAcGFyYW0gYXJyYXlcclxuICAgICAqIEByZXR1cm4geyp9XHJcbiAgICAgKi9cclxuICAgIGNvbnN0IG51bWFyaXplID0gYXJyYXkgPT4gYXJyYXkubWFwKHYgPT4gL14ofFxcZCspXFwuXFxkK3xcXGQrJC8udGVzdCh2KSA/IE51bWJlcih2KSA6IHVuZGVmaW5lZCk7XHJcblxyXG4gICAgbGV0IG1hdGNoO1xyXG4gICAgaW52YWxpZDogZm9yIChjb25zdCB0eXBlIGluIHJlZ2V4KSB7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgc2NoZW1lIHBhc3NlZFxyXG4gICAgICAgIGlmICghKG1hdGNoID0gcmVnZXhbdHlwZV0uZXhlYyhzdHIpKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1hdGNoWzJdIGRvZXMgb25seSBjb250YWluIGEgdHJ1bHkgdmFsdWUgaWYgcmdiYSwgaHNsYSwgb3IgaHNsYSBnb3QgbWF0Y2hlZFxyXG4gICAgICAgIGNvbnN0IGFscGhhVmFsaWQgPSBhID0+ICghIW1hdGNoWzJdID09PSAodHlwZW9mIGEgPT09ICdudW1iZXInKSk7XHJcblxyXG4gICAgICAgIC8vIFRyeSB0byBjb252ZXJ0XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NteWsnOiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbLCBjLCBtLCB5LCBrXSA9IG51bWFyaXplKG1hdGNoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYyA+IDEwMCB8fCBtID4gMTAwIHx8IHkgPiAxMDAgfHwgayA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGludmFsaWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZXM6IGNteWtUb0hzdihjLCBtLCB5LCBrKSwgdHlwZX07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAncmdiYSc6IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFssICwgLCByLCBnLCBiLCBhXSA9IG51bWFyaXplKG1hdGNoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAociA+IDI1NSB8fCBnID4gMjU1IHx8IGIgPiAyNTUgfHwgYSA8IDAgfHwgYSA+IDEgfHwgIWFscGhhVmFsaWQoYSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhayBpbnZhbGlkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWVzOiBbLi4ucmdiVG9Ic3YociwgZywgYiksIGFdLCBhLCB0eXBlfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdoZXhhJzoge1xyXG4gICAgICAgICAgICAgICAgbGV0IFssIGhleF0gPSBtYXRjaDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCB8fCBoZXgubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKS5tYXAodiA9PiB2ICsgdikuam9pbignJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmF3ID0gaGV4LnN1YnN0cmluZygwLCA2KTtcclxuICAgICAgICAgICAgICAgIGxldCBhID0gaGV4LnN1YnN0cmluZyg2KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IDAgLSAyNTUgdG8gMCAtIDEgZm9yIG9wYWNpdHlcclxuICAgICAgICAgICAgICAgIGEgPSBhID8gKHBhcnNlSW50KGEsIDE2KSAvIDI1NSkgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZXM6IFsuLi5oZXhUb0hzdihyYXcpLCBhXSwgYSwgdHlwZX07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnaHNsYSc6IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFssICwgLCBoLCBzLCBsLCBhXSA9IG51bWFyaXplKG1hdGNoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaCA+IDM2MCB8fCBzID4gMTAwIHx8IGwgPiAxMDAgfHwgYSA8IDAgfHwgYSA+IDEgfHwgIWFscGhhVmFsaWQoYSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhayBpbnZhbGlkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWVzOiBbLi4uaHNsVG9Ic3YoaCwgcywgbCksIGFdLCBhLCB0eXBlfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdoc3ZhJzoge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgWywgLCAsIGgsIHMsIHYsIGFdID0gbnVtYXJpemUobWF0Y2gpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChoID4gMzYwIHx8IHMgPiAxMDAgfHwgdiA+IDEwMCB8fCBhIDwgMCB8fCBhID4gMSB8fCAhYWxwaGFWYWxpZChhKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGludmFsaWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZXM6IFtoLCBzLCB2LCBhXSwgYSwgdHlwZX07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHt2YWx1ZXM6IG51bGwsIHR5cGU6IG51bGx9O1xyXG59XHJcbiIsICJpbXBvcnQge2hzdlRvQ215aywgaHN2VG9IZXgsIGhzdlRvSHNsLCBoc3ZUb1JnYn0gZnJvbSAnLi9jb2xvcic7XHJcblxyXG4vKipcclxuICogU2ltcGxlIGNsYXNzIHdoaWNoIGhvbGRzIHRoZSBwcm9wZXJ0aWVzXHJcbiAqIG9mIHRoZSBjb2xvciByZXByZXNlbnRpb24gbW9kZWwgaHNsYSAoaHVlIHNhdHVyYXRpb24gbGlnaHRuZXNzIGFscGhhKVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEhTVmFDb2xvcihoID0gMCwgcyA9IDAsIHYgPSAwLCBhID0gMSkge1xyXG4gICAgY29uc3QgbWFwcGVyID0gKG9yaWdpbmFsLCBuZXh0KSA9PiAocHJlY2lzaW9uID0gLTEpID0+IHtcclxuICAgICAgICByZXR1cm4gbmV4dCh+cHJlY2lzaW9uID8gb3JpZ2luYWwubWFwKHYgPT4gTnVtYmVyKHYudG9GaXhlZChwcmVjaXNpb24pKSkgOiBvcmlnaW5hbCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHRoYXQgPSB7XHJcbiAgICAgICAgaCwgcywgdiwgYSxcclxuXHJcbiAgICAgICAgdG9IU1ZBKCkge1xyXG4gICAgICAgICAgICBjb25zdCBoc3ZhID0gW3RoYXQuaCwgdGhhdC5zLCB0aGF0LnYsIHRoYXQuYV07XHJcbiAgICAgICAgICAgIGhzdmEudG9TdHJpbmcgPSBtYXBwZXIoaHN2YSwgYXJyID0+IGBoc3ZhKCR7YXJyWzBdfSwgJHthcnJbMV19JSwgJHthcnJbMl19JSwgJHt0aGF0LmF9KWApO1xyXG4gICAgICAgICAgICByZXR1cm4gaHN2YTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0b0hTTEEoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzbGEgPSBbLi4uaHN2VG9Ic2wodGhhdC5oLCB0aGF0LnMsIHRoYXQudiksIHRoYXQuYV07XHJcbiAgICAgICAgICAgIGhzbGEudG9TdHJpbmcgPSBtYXBwZXIoaHNsYSwgYXJyID0+IGBoc2xhKCR7YXJyWzBdfSwgJHthcnJbMV19JSwgJHthcnJbMl19JSwgJHt0aGF0LmF9KWApO1xyXG4gICAgICAgICAgICByZXR1cm4gaHNsYTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0b1JHQkEoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJnYmEgPSBbLi4uaHN2VG9SZ2IodGhhdC5oLCB0aGF0LnMsIHRoYXQudiksIHRoYXQuYV07XHJcbiAgICAgICAgICAgIHJnYmEudG9TdHJpbmcgPSBtYXBwZXIocmdiYSwgYXJyID0+IGByZ2JhKCR7YXJyWzBdfSwgJHthcnJbMV19LCAke2FyclsyXX0sICR7dGhhdC5hfSlgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJnYmE7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdG9DTVlLKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjbXlrID0gaHN2VG9DbXlrKHRoYXQuaCwgdGhhdC5zLCB0aGF0LnYpO1xyXG4gICAgICAgICAgICBjbXlrLnRvU3RyaW5nID0gbWFwcGVyKGNteWssIGFyciA9PiBgY215aygke2FyclswXX0lLCAke2FyclsxXX0lLCAke2FyclsyXX0lLCAke2FyclszXX0lKWApO1xyXG4gICAgICAgICAgICByZXR1cm4gY215aztcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0b0hFWEEoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhleCA9IGhzdlRvSGV4KHRoYXQuaCwgdGhhdC5zLCB0aGF0LnYpO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYWxwaGEgY2hhbm5lbCBtYWtlIHNlbnNlLCBjb252ZXJ0IGl0IHRvIDI1NSBudW1iZXIgc3BhY2UsIGNvbnZlcnRcclxuICAgICAgICAgICAgLy8gVG8gaGV4IGFuZCBwYWQgaXQgd2l0aCB6ZXJvcyBpZiBuZWVkZXQuXHJcbiAgICAgICAgICAgIGNvbnN0IGFscGhhID0gdGhhdC5hID49IDEgPyAnJyA6IE51bWJlcigodGhhdC5hICogMjU1KS50b0ZpeGVkKDApKVxyXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKDE2KVxyXG4gICAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuXHJcbiAgICAgICAgICAgIGFscGhhICYmIGhleC5wdXNoKGFscGhhKTtcclxuICAgICAgICAgICAgaGV4LnRvU3RyaW5nID0gKCkgPT4gYCMke2hleC5qb2luKCcnKS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgICAgICAgIHJldHVybiBoZXg7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY2xvbmU6ICgpID0+IEhTVmFDb2xvcih0aGF0LmgsIHRoYXQucywgdGhhdC52LCB0aGF0LmEpXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGF0O1xyXG59XHJcbiIsICJpbXBvcnQgKiBhcyBfIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcclxuXHJcbmNvbnN0IGNsYW1wID0gdiA9PiBNYXRoLm1heChNYXRoLm1pbih2LCAxKSwgMCk7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVhYmxlKG9wdCkge1xyXG5cclxuICAgIGNvbnN0IHRoYXQgPSB7XHJcblxyXG4gICAgICAgIC8vIEFzc2lnbiBkZWZhdWx0IHZhbHVlc1xyXG4gICAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBsb2NrOiBudWxsLFxyXG4gICAgICAgICAgICBvbmNoYW5nZTogKCkgPT4gMCxcclxuICAgICAgICAgICAgb25zdG9wOiAoKSA9PiAwXHJcbiAgICAgICAgfSwgb3B0KSxcclxuXHJcbiAgICAgICAgX2tleWJvYXJkKGUpIHtcclxuICAgICAgICAgICAgY29uc3Qge29wdGlvbnN9ID0gdGhhdDtcclxuICAgICAgICAgICAgY29uc3Qge3R5cGUsIGtleX0gPSBlO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBNb3ZhYmxlIGlzIGZvY3VzZWQgYW5kIHRoZW4gbW92ZSBpdCBiYXNlZCBvbiBhcnJvdyBrZXkgaW5wdXRzXHJcbiAgICAgICAgICAgIC8vIEZvciBpbXByb3ZlZCBhY2Nlc3NpYmlsaXR5XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBvcHRpb25zLndyYXBwZXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHtsb2NrfSA9IHRoYXQub3B0aW9ucztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVwID0ga2V5ID09PSAnQXJyb3dVcCc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodCA9IGtleSA9PT0gJ0Fycm93UmlnaHQnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG93biA9IGtleSA9PT0gJ0Fycm93RG93bic7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0ID0ga2V5ID09PSAnQXJyb3dMZWZ0JztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2tleWRvd24nICYmICh1cCB8fCByaWdodCB8fCBkb3duIHx8IGxlZnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHhtID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgeW0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobG9jayA9PT0gJ3YnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtID0gKHVwIHx8IHJpZ2h0KSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2sgPT09ICdoJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4bSA9ICh1cCB8fCByaWdodCkgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeW0gPSB1cCA/IC0xIDogKGRvd24gPyAxIDogMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtID0gbGVmdCA/IC0xIDogKHJpZ2h0ID8gMSA6IDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC51cGRhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYW1wKHRoYXQuY2FjaGUueCArICgwLjAxICogeG0pKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhbXAodGhhdC5jYWNoZS55ICsgKDAuMDEgKiB5bSkpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5zdGFydHNXaXRoKCdBcnJvdycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5vcHRpb25zLm9uc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF90YXBzdGFydChldnQpIHtcclxuICAgICAgICAgICAgXy5vbihkb2N1bWVudCwgWydtb3VzZXVwJywgJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJ10sIHRoYXQuX3RhcHN0b3ApO1xyXG4gICAgICAgICAgICBfLm9uKGRvY3VtZW50LCBbJ21vdXNlbW92ZScsICd0b3VjaG1vdmUnXSwgdGhhdC5fdGFwbW92ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZ0LmNhbmNlbGFibGUpIHtcclxuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBUcmlnZ2VyXHJcbiAgICAgICAgICAgIHRoYXQuX3RhcG1vdmUoZXZ0KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfdGFwbW92ZShldnQpIHtcclxuICAgICAgICAgICAgY29uc3Qge29wdGlvbnMsIGNhY2hlfSA9IHRoYXQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHtsb2NrLCBlbGVtZW50LCB3cmFwcGVyfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgICAgIGNvbnN0IGIgPSB3cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHggPSAwLCB5ID0gMDtcclxuICAgICAgICAgICAgaWYgKGV2dCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldnQgJiYgZXZ0LnRvdWNoZXMgJiYgZXZ0LnRvdWNoZXNbMF07XHJcbiAgICAgICAgICAgICAgICB4ID0gZXZ0ID8gKHRvdWNoIHx8IGV2dCkuY2xpZW50WCA6IDA7XHJcbiAgICAgICAgICAgICAgICB5ID0gZXZ0ID8gKHRvdWNoIHx8IGV2dCkuY2xpZW50WSA6IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgdG8gYm91bmRzXHJcbiAgICAgICAgICAgICAgICBpZiAoeCA8IGIubGVmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBiLmxlZnQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPiBiLmxlZnQgKyBiLndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IGIubGVmdCArIGIud2lkdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeSA8IGIudG9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IGIudG9wO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5ID4gYi50b3AgKyBiLmhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBiLnRvcCArIGIuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZVxyXG4gICAgICAgICAgICAgICAgeCAtPSBiLmxlZnQ7XHJcbiAgICAgICAgICAgICAgICB5IC09IGIudG9wO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB4ID0gY2FjaGUueCAqIGIud2lkdGg7XHJcbiAgICAgICAgICAgICAgICB5ID0gY2FjaGUueSAqIGIuaGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobG9jayAhPT0gJ2gnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgY2FsYygke3ggLyBiLndpZHRoICogMTAwfSUgLSAke2VsZW1lbnQub2Zmc2V0V2lkdGggLyAyfXB4KWA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsb2NrICE9PSAndicpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYGNhbGMoJHt5IC8gYi5oZWlnaHQgKiAxMDB9JSAtICR7ZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyfXB4KWA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoYXQuY2FjaGUgPSB7eDogeCAvIGIud2lkdGgsIHk6IHkgLyBiLmhlaWdodH07XHJcbiAgICAgICAgICAgIGNvbnN0IGN4ID0gY2xhbXAoeCAvIGIud2lkdGgpO1xyXG4gICAgICAgICAgICBjb25zdCBjeSA9IGNsYW1wKHkgLyBiLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGxvY2spIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3YnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLm9uY2hhbmdlKGN4KTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2gnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLm9uY2hhbmdlKGN5KTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMub25jaGFuZ2UoY3gsIGN5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF90YXBzdG9wKCkge1xyXG4gICAgICAgICAgICB0aGF0Lm9wdGlvbnMub25zdG9wKCk7XHJcbiAgICAgICAgICAgIF8ub2ZmKGRvY3VtZW50LCBbJ21vdXNldXAnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnXSwgdGhhdC5fdGFwc3RvcCk7XHJcbiAgICAgICAgICAgIF8ub2ZmKGRvY3VtZW50LCBbJ21vdXNlbW92ZScsICd0b3VjaG1vdmUnXSwgdGhhdC5fdGFwbW92ZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHJpZ2dlcigpIHtcclxuICAgICAgICAgICAgdGhhdC5fdGFwbW92ZSgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHVwZGF0ZSh4ID0gMCwgeSA9IDApIHtcclxuICAgICAgICAgICAgY29uc3Qge2xlZnQsIHRvcCwgd2lkdGgsIGhlaWdodH0gPSB0aGF0Lm9wdGlvbnMud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMubG9jayA9PT0gJ2gnKSB7XHJcbiAgICAgICAgICAgICAgICB5ID0geDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhhdC5fdGFwbW92ZSh7XHJcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBsZWZ0ICsgd2lkdGggKiB4LFxyXG4gICAgICAgICAgICAgICAgY2xpZW50WTogdG9wICsgaGVpZ2h0ICogeVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBkZXN0cm95KCkge1xyXG4gICAgICAgICAgICBjb25zdCB7b3B0aW9ucywgX3RhcHN0YXJ0LCBfa2V5Ym9hcmR9ID0gdGhhdDtcclxuICAgICAgICAgICAgXy5vZmYoZG9jdW1lbnQsIFsna2V5ZG93bicsICdrZXl1cCddLCBfa2V5Ym9hcmQpO1xyXG4gICAgICAgICAgICBfLm9mZihbb3B0aW9ucy53cmFwcGVyLCBvcHRpb25zLmVsZW1lbnRdLCAnbW91c2Vkb3duJywgX3RhcHN0YXJ0KTtcclxuICAgICAgICAgICAgXy5vZmYoW29wdGlvbnMud3JhcHBlciwgb3B0aW9ucy5lbGVtZW50XSwgJ3RvdWNoc3RhcnQnLCBfdGFwc3RhcnQsIHtcclxuICAgICAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8gSW5pdGlsaXplXHJcbiAgICBjb25zdCB7b3B0aW9ucywgX3RhcHN0YXJ0LCBfa2V5Ym9hcmR9ID0gdGhhdDtcclxuICAgIF8ub24oW29wdGlvbnMud3JhcHBlciwgb3B0aW9ucy5lbGVtZW50XSwgJ21vdXNlZG93bicsIF90YXBzdGFydCk7XHJcbiAgICBfLm9uKFtvcHRpb25zLndyYXBwZXIsIG9wdGlvbnMuZWxlbWVudF0sICd0b3VjaHN0YXJ0JywgX3RhcHN0YXJ0LCB7XHJcbiAgICAgICAgcGFzc2l2ZTogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIF8ub24oZG9jdW1lbnQsIFsna2V5ZG93bicsICdrZXl1cCddLCBfa2V5Ym9hcmQpO1xyXG5cclxuICAgIHJldHVybiB0aGF0O1xyXG59XHJcbiIsICJpbXBvcnQgKiBhcyBfIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2VsZWN0YWJsZShvcHQgPSB7fSkge1xuICAgIG9wdCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBvbmNoYW5nZTogKCkgPT4gMCxcbiAgICAgICAgY2xhc3NOYW1lOiAnJyxcbiAgICAgICAgZWxlbWVudHM6IFtdXG4gICAgfSwgb3B0KTtcblxuICAgIGNvbnN0IG9uVGFwID0gXy5vbihvcHQuZWxlbWVudHMsICdjbGljaycsIGV2dCA9PiB7XG4gICAgICAgIG9wdC5lbGVtZW50cy5mb3JFYWNoKGUgPT5cbiAgICAgICAgICAgIGUuY2xhc3NMaXN0W2V2dC50YXJnZXQgPT09IGUgPyAnYWRkJyA6ICdyZW1vdmUnXShvcHQuY2xhc3NOYW1lKVxuICAgICAgICApO1xuXG4gICAgICAgIG9wdC5vbmNoYW5nZShldnQpO1xuXG4gICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL1NpbW9ud2VwL3BpY2tyL2lzc3Vlcy8yNDNcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVzdHJveTogKCkgPT4gXy5vZmYoLi4ub25UYXApXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyBfIGZyb20gJy4vdXRpbHMvdXRpbHMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgaW5zdGFuY2UgPT4ge1xyXG5cclxuICAgIGNvbnN0IHtcclxuICAgICAgICBjb21wb25lbnRzLFxyXG4gICAgICAgIHVzZUFzQnV0dG9uLFxyXG4gICAgICAgIGlubGluZSxcclxuICAgICAgICBhcHBDbGFzcyxcclxuICAgICAgICB0aGVtZSxcclxuICAgICAgICBsb2NrT3BhY2l0eVxyXG4gICAgfSA9IGluc3RhbmNlLm9wdGlvbnM7XHJcblxyXG4gICAgLy8gVXRpbHNcclxuICAgIGNvbnN0IGhpZGRlbiA9IGNvbiA9PiBjb24gPyAnJyA6ICdzdHlsZT1cImRpc3BsYXk6bm9uZVwiIGhpZGRlbic7XHJcbiAgICBjb25zdCB0ID0gc3RyID0+IGluc3RhbmNlLl90KHN0cik7XHJcblxyXG4gICAgY29uc3Qgcm9vdCA9IF8uY3JlYXRlRnJvbVRlbXBsYXRlKGBcclxuICAgICAgPGRpdiA6cmVmPVwicm9vdFwiIGNsYXNzPVwicGlja3JcIj5cclxuXHJcbiAgICAgICAgJHt1c2VBc0J1dHRvbiA/ICcnIDogJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIDpyZWY9XCJidXR0b25cIiBjbGFzcz1cInBjci1idXR0b25cIj48L2J1dHRvbj4nfVxyXG5cclxuICAgICAgICA8ZGl2IDpyZWY9XCJhcHBcIiBjbGFzcz1cInBjci1hcHAgJHthcHBDbGFzcyB8fCAnJ31cIiBkYXRhLXRoZW1lPVwiJHt0aGVtZX1cIiAke2lubGluZSA/ICdzdHlsZT1cInBvc2l0aW9uOiB1bnNldFwiJyA6ICcnfSBhcmlhLWxhYmVsPVwiJHt0KCd1aTpkaWFsb2cnLCAnY29sb3IgcGlja2VyIGRpYWxvZycpfVwiIHJvbGU9XCJ3aW5kb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwY3Itc2VsZWN0aW9uXCIgJHtoaWRkZW4oY29tcG9uZW50cy5wYWxldHRlKX0+XHJcbiAgICAgICAgICAgIDxkaXYgOm9iaj1cInByZXZpZXdcIiBjbGFzcz1cInBjci1jb2xvci1wcmV2aWV3XCIgJHtoaWRkZW4oY29tcG9uZW50cy5wcmV2aWV3KX0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgOnJlZj1cImxhc3RDb2xvclwiIGNsYXNzPVwicGNyLWxhc3QtY29sb3JcIiBhcmlhLWxhYmVsPVwiJHt0KCdidG46bGFzdC1jb2xvcicpfVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxkaXYgOnJlZj1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwicGNyLWN1cnJlbnQtY29sb3JcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IDpvYmo9XCJwYWxldHRlXCIgY2xhc3M9XCJwY3ItY29sb3ItcGFsZXR0ZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgOnJlZj1cInBpY2tlclwiIGNsYXNzPVwicGNyLXBpY2tlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgOnJlZj1cInBhbGV0dGVcIiBjbGFzcz1cInBjci1wYWxldHRlXCIgdGFiaW5kZXg9XCIwXCIgYXJpYS1sYWJlbD1cIiR7dCgnYXJpYTpwYWxldHRlJyl9XCIgcm9sZT1cImxpc3Rib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IDpvYmo9XCJodWVcIiBjbGFzcz1cInBjci1jb2xvci1jaG9vc2VyXCIgJHtoaWRkZW4oY29tcG9uZW50cy5odWUpfT5cclxuICAgICAgICAgICAgICA8ZGl2IDpyZWY9XCJwaWNrZXJcIiBjbGFzcz1cInBjci1waWNrZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IDpyZWY9XCJzbGlkZXJcIiBjbGFzcz1cInBjci1odWUgcGNyLXNsaWRlclwiIHRhYmluZGV4PVwiMFwiIGFyaWEtbGFiZWw9XCIke3QoJ2FyaWE6aHVlJyl9XCIgcm9sZT1cInNsaWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgOm9iaj1cIm9wYWNpdHlcIiBjbGFzcz1cInBjci1jb2xvci1vcGFjaXR5XCIgJHtoaWRkZW4oY29tcG9uZW50cy5vcGFjaXR5KX0+XHJcbiAgICAgICAgICAgICAgPGRpdiA6cmVmPVwicGlja2VyXCIgY2xhc3M9XCJwY3ItcGlja2VyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiA6cmVmPVwic2xpZGVyXCIgY2xhc3M9XCJwY3Itb3BhY2l0eSBwY3Itc2xpZGVyXCIgdGFiaW5kZXg9XCIwXCIgYXJpYS1sYWJlbD1cIiR7dCgnYXJpYTpvcGFjaXR5JywgJ29wYWNpdHkgc2VsZWN0aW9uIHNsaWRlcicpfVwiIHJvbGU9XCJzbGlkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGNyLXN3YXRjaGVzICR7Y29tcG9uZW50cy5wYWxldHRlID8gJycgOiAncGNyLWxhc3QnfVwiIDpyZWY9XCJzd2F0Y2hlc1wiPjwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgOm9iaj1cImludGVyYWN0aW9uXCIgY2xhc3M9XCJwY3ItaW50ZXJhY3Rpb25cIiAke2hpZGRlbihPYmplY3Qua2V5cyhjb21wb25lbnRzLmludGVyYWN0aW9uKS5sZW5ndGgpfT5cclxuICAgICAgICAgICAgPGlucHV0IDpyZWY9XCJyZXN1bHRcIiBjbGFzcz1cInBjci1yZXN1bHRcIiB0eXBlPVwidGV4dFwiIHNwZWxsY2hlY2s9XCJmYWxzZVwiICR7aGlkZGVuKGNvbXBvbmVudHMuaW50ZXJhY3Rpb24uaW5wdXQpfSBhcmlhLWxhYmVsPVwiJHt0KCdhcmlhOmlucHV0JywgJ2NvbG9yIGlucHV0IGZpZWxkJyl9XCI+XHJcblxyXG4gICAgICAgICAgICA8aW5wdXQgOmFycj1cIm9wdGlvbnNcIiBjbGFzcz1cInBjci10eXBlXCIgZGF0YS10eXBlPVwiSEVYQVwiIHZhbHVlPVwiJHtsb2NrT3BhY2l0eSA/ICdIRVgnIDogJ0hFWEEnfVwiIHR5cGU9XCJidXR0b25cIiAke2hpZGRlbihjb21wb25lbnRzLmludGVyYWN0aW9uLmhleCl9PlxyXG4gICAgICAgICAgICA8aW5wdXQgOmFycj1cIm9wdGlvbnNcIiBjbGFzcz1cInBjci10eXBlXCIgZGF0YS10eXBlPVwiUkdCQVwiIHZhbHVlPVwiJHtsb2NrT3BhY2l0eSA/ICdSR0InIDogJ1JHQkEnfVwiIHR5cGU9XCJidXR0b25cIiAke2hpZGRlbihjb21wb25lbnRzLmludGVyYWN0aW9uLnJnYmEpfT5cclxuICAgICAgICAgICAgPGlucHV0IDphcnI9XCJvcHRpb25zXCIgY2xhc3M9XCJwY3ItdHlwZVwiIGRhdGEtdHlwZT1cIkhTTEFcIiB2YWx1ZT1cIiR7bG9ja09wYWNpdHkgPyAnSFNMJyA6ICdIU0xBJ31cIiB0eXBlPVwiYnV0dG9uXCIgJHtoaWRkZW4oY29tcG9uZW50cy5pbnRlcmFjdGlvbi5oc2xhKX0+XHJcbiAgICAgICAgICAgIDxpbnB1dCA6YXJyPVwib3B0aW9uc1wiIGNsYXNzPVwicGNyLXR5cGVcIiBkYXRhLXR5cGU9XCJIU1ZBXCIgdmFsdWU9XCIke2xvY2tPcGFjaXR5ID8gJ0hTVicgOiAnSFNWQSd9XCIgdHlwZT1cImJ1dHRvblwiICR7aGlkZGVuKGNvbXBvbmVudHMuaW50ZXJhY3Rpb24uaHN2YSl9PlxyXG4gICAgICAgICAgICA8aW5wdXQgOmFycj1cIm9wdGlvbnNcIiBjbGFzcz1cInBjci10eXBlXCIgZGF0YS10eXBlPVwiQ01ZS1wiIHZhbHVlPVwiQ01ZS1wiIHR5cGU9XCJidXR0b25cIiAke2hpZGRlbihjb21wb25lbnRzLmludGVyYWN0aW9uLmNteWspfT5cclxuXHJcbiAgICAgICAgICAgIDxpbnB1dCA6cmVmPVwic2F2ZVwiIGNsYXNzPVwicGNyLXNhdmVcIiB2YWx1ZT1cIiR7dCgnYnRuOnNhdmUnKX1cIiB0eXBlPVwiYnV0dG9uXCIgJHtoaWRkZW4oY29tcG9uZW50cy5pbnRlcmFjdGlvbi5zYXZlKX0gYXJpYS1sYWJlbD1cIiR7dCgnYXJpYTpidG46c2F2ZScpfVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgOnJlZj1cImNhbmNlbFwiIGNsYXNzPVwicGNyLWNhbmNlbFwiIHZhbHVlPVwiJHt0KCdidG46Y2FuY2VsJyl9XCIgdHlwZT1cImJ1dHRvblwiICR7aGlkZGVuKGNvbXBvbmVudHMuaW50ZXJhY3Rpb24uY2FuY2VsKX0gYXJpYS1sYWJlbD1cIiR7dCgnYXJpYTpidG46Y2FuY2VsJyl9XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCA6cmVmPVwiY2xlYXJcIiBjbGFzcz1cInBjci1jbGVhclwiIHZhbHVlPVwiJHt0KCdidG46Y2xlYXInKX1cIiB0eXBlPVwiYnV0dG9uXCIgJHtoaWRkZW4oY29tcG9uZW50cy5pbnRlcmFjdGlvbi5jbGVhcil9IGFyaWEtbGFiZWw9XCIke3QoJ2FyaWE6YnRuOmNsZWFyJyl9XCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICBgKTtcclxuXHJcbiAgICBjb25zdCBpbnQgPSByb290LmludGVyYWN0aW9uO1xyXG5cclxuICAgIC8vIFNlbGVjdCBvcHRpb24gd2hpY2ggaXMgbm90IGhpZGRlblxyXG4gICAgaW50Lm9wdGlvbnMuZmluZChvID0+ICFvLmhpZGRlbiAmJiAhby5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKSk7XHJcblxyXG4gICAgLy8gQXBwZW5kIG1ldGhvZCB0byBmaW5kIGN1cnJlbnRseSBhY3RpdmUgb3B0aW9uXHJcbiAgICBpbnQudHlwZSA9ICgpID0+IGludC5vcHRpb25zLmZpbmQoZSA9PiBlLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpO1xyXG4gICAgcmV0dXJuIHJvb3Q7XHJcbn07XHJcbiIsICJ0eXBlIERpcmVjdGlvbiA9ICd0b3AnIHwgJ2xlZnQnIHwgJ2JvdHRvbScgfCAncmlnaHQnO1xuXG5leHBvcnQgdHlwZSBWYXJpYW50RmxpcE9yZGVyID0ge1xuICAgIHN0YXJ0OiBzdHJpbmc7XG4gICAgbWlkZGxlOiBzdHJpbmc7XG4gICAgZW5kOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbkZsaXBPcmRlciA9IHtcbiAgICB0b3A6IHN0cmluZztcbiAgICByaWdodDogc3RyaW5nO1xuICAgIGJvdHRvbTogc3RyaW5nO1xuICAgIGxlZnQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE5hbm9Qb3BQb3NpdGlvbiA9XG4gICAgJ3RvcC1zdGFydCcgfCAndG9wLW1pZGRsZScgfCAndG9wLWVuZCcgfFxuICAgICdsZWZ0LXN0YXJ0JyB8ICdsZWZ0LW1pZGRsZScgfCAnbGVmdC1lbmQnIHxcbiAgICAncmlnaHQtc3RhcnQnIHwgJ3JpZ2h0LW1pZGRsZScgfCAncmlnaHQtZW5kJyB8XG4gICAgJ2JvdHRvbS1zdGFydCcgfCAnYm90dG9tLW1pZGRsZScgfCAnYm90dG9tLWVuZCcgfCBEaXJlY3Rpb247XG5cbmV4cG9ydCB0eXBlIE5hbm9Qb3BPcHRpb25zID0ge1xuICAgIGNvbnRhaW5lcjogRE9NUmVjdDtcbiAgICBwb3NpdGlvbjogTmFub1BvcFBvc2l0aW9uO1xuICAgIHZhcmlhbnRGbGlwT3JkZXI6IFZhcmlhbnRGbGlwT3JkZXI7XG4gICAgcG9zaXRpb25GbGlwT3JkZXI6IFBvc2l0aW9uRmxpcE9yZGVyO1xuICAgIG1hcmdpbjogbnVtYmVyO1xuICAgIHJlZmVyZW5jZT86IEhUTUxFbGVtZW50O1xuICAgIHBvcHBlcj86IEhUTUxFbGVtZW50O1xufTtcblxudHlwZSBBdmFpbGFibGVQb3NpdGlvbnMgPSB7XG4gICAgdDogbnVtYmVyO1xuICAgIGI6IG51bWJlcjtcbiAgICBsOiBudW1iZXI7XG4gICAgcjogbnVtYmVyO1xufTtcblxudHlwZSBBdmFpbGFibGVWYXJpYW50cyA9IHtcbiAgICB2czogbnVtYmVyO1xuICAgIHZtOiBudW1iZXI7XG4gICAgdmU6IG51bWJlcjtcbiAgICBoczogbnVtYmVyO1xuICAgIGhtOiBudW1iZXI7XG4gICAgaGU6IG51bWJlcjtcbn07XG5cbnR5cGUgUG9zaXRpb25QYWlycyA9IFtEaXJlY3Rpb24sIERpcmVjdGlvbl07XG5leHBvcnQgdHlwZSBQb3NpdGlvbk1hdGNoID0gJ3RzJyB8ICd0bScgfCAndGUnIHwgJ2JzJyB8ICdibScgfCAnYmUnIHwgJ2xzJyB8ICdsbScgfCAnbGUnIHwgJ3JzJyB8ICdybScgfCAncmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbm9Qb3Age1xuICAgIHVwZGF0ZSh1cGRhdGVkT3B0aW9ucz86IFBhcnRpYWw8TmFub1BvcE9wdGlvbnM+KTogUG9zaXRpb25NYXRjaCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFub1BvcENvbnN0cnVjdG9yIHtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSByZWZlcmVuY2UgUmVmZXJlbmNlIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gcG9wcGVyIEFjdHVhbCBwb3BwZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnNcbiAgICAgKi9cbiAgICAocmVmZXJlbmNlOiBIVE1MRWxlbWVudCwgcG9wcGVyOiBIVE1MRWxlbWVudCwgb3B0aW9ucz86IFBhcnRpYWw8TmFub1BvcE9wdGlvbnM+KTogTmFub1BvcDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFBhcnRpYWwgb3B0aW9ucyB3aGljaCBnZXQgbWVyZ2VkIHdpdGggdGhlIGN1cnJlbnQgb25lXG4gICAgICovXG4gICAgKG9wdGlvbnM/OiBQYXJ0aWFsPE5hbm9Qb3BPcHRpb25zPik6IE5hbm9Qb3A7XG59XG5cbi8vIEV4cG9ydCBjdXJyZW50IHZlcnNpb25cbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gVkVSU0lPTjtcblxuLy8gRXhwb3J0IGRlZmF1bHRcbmV4cG9ydCBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICB2YXJpYW50RmxpcE9yZGVyOiB7c3RhcnQ6ICdzbWUnLCBtaWRkbGU6ICdtc2UnLCBlbmQ6ICdlbXMnfSxcbiAgICBwb3NpdGlvbkZsaXBPcmRlcjoge3RvcDogJ3RicmwnLCByaWdodDogJ3JsdGInLCBib3R0b206ICdidHJsJywgbGVmdDogJ2xyYnQnfSxcbiAgICBwb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgbWFyZ2luOiA4XG59O1xuXG4vKipcbiAqIFJlcG9zaXRpb25zIGFuIGVsZW1lbnQgb25jZSB1c2luZyB0aGUgcHJvdmlkZWQgb3B0aW9ucyBhbmQgZWxlbWVudHMuXG4gKiBAcGFyYW0gcmVmZXJlbmNlIFJlZmVyZW5jZSBlbGVtZW50XG4gKiBAcGFyYW0gcG9wcGVyIFBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0gb3B0IE9wdGlvbmFsLCBhZGRpdGlvbmFsIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcG9zaXRpb24gPSAoXG4gICAgcmVmZXJlbmNlOiBIVE1MRWxlbWVudCxcbiAgICBwb3BwZXI6IEhUTUxFbGVtZW50LFxuICAgIG9wdD86IFBhcnRpYWw8TmFub1BvcE9wdGlvbnM+XG4pOiBQb3NpdGlvbk1hdGNoIHwgbnVsbCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIG1hcmdpbixcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHZhcmlhbnRGbGlwT3JkZXIsXG4gICAgICAgIHBvc2l0aW9uRmxpcE9yZGVyXG4gICAgfSA9IHtcbiAgICAgICAgY29udGFpbmVyOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIC4uLmRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVzZXQgcG9zaXRpb24gdG8gcmVzb2x2ZSB2aWV3cG9ydFxuICAgICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvcG9zaXRpb24jZml4ZWRcbiAgICAgKi9cbiAgICBjb25zdCB7bGVmdDogb3JpZ2luYWxMZWZ0LCB0b3A6IG9yaWdpbmFsVG9wfSA9IHBvcHBlci5zdHlsZTtcbiAgICBwb3BwZXIuc3R5bGUubGVmdCA9ICcwJztcbiAgICBwb3BwZXIuc3R5bGUudG9wID0gJzAnO1xuXG4gICAgY29uc3QgcmVmQm94ID0gcmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHBvcEJveCA9IHBvcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIGNvb3JkaW5hdGVzIG9mIHRvcCwgbGVmdCwgYm90dG9tIGFuZCByaWdodCBhbGlnbm1lbnRcbiAgICAgKi9cbiAgICBjb25zdCBwb3NpdGlvblN0b3JlOiBBdmFpbGFibGVQb3NpdGlvbnMgPSB7XG4gICAgICAgIHQ6IHJlZkJveC50b3AgLSBwb3BCb3guaGVpZ2h0IC0gbWFyZ2luLFxuICAgICAgICBiOiByZWZCb3guYm90dG9tICsgbWFyZ2luLFxuICAgICAgICByOiByZWZCb3gucmlnaHQgKyBtYXJnaW4sXG4gICAgICAgIGw6IHJlZkJveC5sZWZ0IC0gcG9wQm94LndpZHRoIC0gbWFyZ2luXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIGNvcnJlc3BvbmRpbmcgdmFyaWFudHMgKHN0YXJ0LCBtaWRkbGUsIGVuZCkuXG4gICAgICogVGhlIHZhbHVlcyBkZXBlbmQgb24gaG9yaXpvbnRhbCAvIHZlcnRpY2FsIG9yaWVudGF0aW9uXG4gICAgICovXG4gICAgY29uc3QgdmFyaWFudFN0b3JlOiBBdmFpbGFibGVWYXJpYW50cyA9IHtcbiAgICAgICAgdnM6IHJlZkJveC5sZWZ0LFxuICAgICAgICB2bTogcmVmQm94LmxlZnQgKyByZWZCb3gud2lkdGggLyAyICsgLXBvcEJveC53aWR0aCAvIDIsXG4gICAgICAgIHZlOiByZWZCb3gubGVmdCArIHJlZkJveC53aWR0aCAtIHBvcEJveC53aWR0aCxcbiAgICAgICAgaHM6IHJlZkJveC50b3AsXG4gICAgICAgIGhtOiByZWZCb3guYm90dG9tIC0gcmVmQm94LmhlaWdodCAvIDIgLSBwb3BCb3guaGVpZ2h0IC8gMixcbiAgICAgICAgaGU6IHJlZkJveC5ib3R0b20gLSBwb3BCb3guaGVpZ2h0XG4gICAgfTtcblxuICAgIC8vIEV4dHJhY3QgcG9zaXRpb24gYW5kIHZhcmlhbnRcbiAgICAvLyBUb3Atc3RhcnQgLT4gdG9wIGlzIFwicG9zaXRpb25cIiBhbmQgXCJzdGFydFwiIGlzIHRoZSB2YXJpYW50XG4gICAgY29uc3QgW3Bvc0tleSwgdmFyS2V5ID0gJ21pZGRsZSddID0gcG9zaXRpb24uc3BsaXQoJy0nKTtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBwb3NpdGlvbkZsaXBPcmRlcltwb3NLZXkgYXMga2V5b2YgUG9zaXRpb25GbGlwT3JkZXJdO1xuICAgIGNvbnN0IHZhcmlhbnRzID0gdmFyaWFudEZsaXBPcmRlclt2YXJLZXkgYXMga2V5b2YgVmFyaWFudEZsaXBPcmRlcl07XG5cbiAgICAvLyBUcnkgb3V0IGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMsIHN0YXJ0aW5nIHdpdGggdGhlIHByZWZlcnJlZCBvbmUuXG4gICAgY29uc3Qge3RvcCwgbGVmdCwgYm90dG9tLCByaWdodH0gPSBjb250YWluZXI7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgcG9zaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsID0gKHAgPT09ICd0JyB8fCBwID09PSAnYicpO1xuXG4gICAgICAgIC8vIFRoZSBwb3NpdGlvbi12YWx1ZVxuICAgICAgICBjb25zdCBwb3NpdGlvblZhbCA9IHBvc2l0aW9uU3RvcmVbcCBhcyBrZXlvZiBBdmFpbGFibGVQb3NpdGlvbnNdO1xuXG4gICAgICAgIC8vIFdoaWNoIHByb3BlcnR5IGhhcyB0byBiZSBjaGFuZ2VzLlxuICAgICAgICBjb25zdCBbcG9zaXRpb25LZXksIHZhcmlhbnRLZXldID0gKHZlcnRpY2FsID8gWyd0b3AnLCAnbGVmdCddIDogWydsZWZ0JywgJ3RvcCddKSBhcyBQb3NpdGlvblBhaXJzO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBib3ggcmVmZXJzIHRvIHRoZSBzaXplIG9mIHRoZSBwb3BwZXIgZWxlbWVudC4gRGVwZW5kaW5nIG9uIHRoZSBvcmllbnRhdGlvbiB0aGlzIGlzIHdpZHRoIG9yIGhlaWdodC5cbiAgICAgICAgICogVGhlIGxpbWl0IGlzIHRoZSBjb3JyZXNwb25kaW5nLCBtYXhpbXVtIHZhbHVlIGZvciB0aGlzIHBvc2l0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgW3Bvc2l0aW9uU2l6ZSwgdmFyaWFudFNpemVdID0gdmVydGljYWwgPyBbcG9wQm94LmhlaWdodCwgcG9wQm94LndpZHRoXSA6IFtwb3BCb3gud2lkdGgsIHBvcEJveC5oZWlnaHRdO1xuICAgICAgICBjb25zdCBbcG9zaXRpb25NYXhpbXVtLCB2YXJpYW50TWF4aW11bV0gPSB2ZXJ0aWNhbCA/IFtib3R0b20sIHJpZ2h0XSA6IFtyaWdodCwgYm90dG9tXTtcbiAgICAgICAgY29uc3QgW3Bvc2l0aW9uTWluaW11bSwgdmFyaWFudE1pbmltdW1dID0gdmVydGljYWwgPyBbdG9wLCBsZWZ0XSA6IFtsZWZ0LCB0b3BdO1xuXG4gICAgICAgIC8vIFNraXAgcHJlLWNsaXBwZWQgdmFsdWVzXG4gICAgICAgIGlmIChwb3NpdGlvblZhbCA8IHBvc2l0aW9uTWluaW11bSB8fCAocG9zaXRpb25WYWwgKyBwb3NpdGlvblNpemUpID4gcG9zaXRpb25NYXhpbXVtKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB2YXJpYW50cykge1xuXG4gICAgICAgICAgICAvLyBUaGUgcG9zaXRpb24tdmFsdWUsIHRoZSByZWxhdGVkIHNpemUgdmFsdWUgb2YgdGhlIHBvcHBlciBhbmQgdGhlIGxpbWl0XG4gICAgICAgICAgICBjb25zdCB2YXJpYW50VmFsID0gdmFyaWFudFN0b3JlWygodmVydGljYWwgPyAndicgOiAnaCcpICsgdikgYXMga2V5b2YgQXZhaWxhYmxlVmFyaWFudHNdO1xuXG4gICAgICAgICAgICBpZiAodmFyaWFudFZhbCA8IHZhcmlhbnRNaW5pbXVtIHx8ICh2YXJpYW50VmFsICsgdmFyaWFudFNpemUpID4gdmFyaWFudE1heGltdW0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQXBwbHkgc3R5bGVzIGFuZCBub3JtYWxpemUgdmlld3BvcnRcbiAgICAgICAgICAgIHBvcHBlci5zdHlsZVt2YXJpYW50S2V5XSA9IGAke3ZhcmlhbnRWYWwgLSBwb3BCb3hbdmFyaWFudEtleV19cHhgO1xuICAgICAgICAgICAgcG9wcGVyLnN0eWxlW3Bvc2l0aW9uS2V5XSA9IGAke3Bvc2l0aW9uVmFsIC0gcG9wQm94W3Bvc2l0aW9uS2V5XX1weGA7XG4gICAgICAgICAgICByZXR1cm4gKHAgKyB2KSBhcyBQb3NpdGlvbk1hdGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV2ZXJ0IHN0eWxlIHZhbHVlcyAod29uJ3Qgd29yayB3aXRoIHN0eWxlZC1lbGVtZW50cyBvciBzaW1pbGFyIHN5c3RlbXMpXG4gICAgLy8gXCJGaXhcIiBmb3IgaHR0cHM6Ly9naXRodWIuY29tL1NpbW9ud2VwL25hbm9wb3AvaXNzdWVzLzdcbiAgICBwb3BwZXIuc3R5bGUubGVmdCA9IG9yaWdpbmFsTGVmdDtcbiAgICBwb3BwZXIuc3R5bGUudG9wID0gb3JpZ2luYWxUb3A7XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YXRlZnVsIHBvcHBlci5cbiAqIFlvdSBjYW4gZWl0aGVyLi4uXG4gKiAuLi4gcGFzcyBhbiBvcHRpb25zIG9iamVjdDogY3JlYXRlUG9wcGVyKDxvcHRpb25zPilcbiAqIC4uLiBwYXNzIGJvdGggdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyOiBjcmVhdGUoPHJlZj4sIDxlbD4sIDw/b3B0aW9ucz4pXG4gKiAuLi4gcGFzcyBub3RoaW5nLCBpbiB0aGlzIGNhc2UgeW91J2xsIGhhdmUgdG8gc2V0IGF0IGxlYXN0IGJvdGggYSByZWZlcmVuY2UgYW5kIGEgcG9wcGVyIGluIHVwZGF0ZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIHwgb3B0aW9ucyBSZWZlcmVuY2UgZWxlbWVudCBvciBvcHRpb25zXG4gKiBAcGFyYW0gcG9wcGVyIFBvcHBlciBlbGVtZW50XG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBhZGRpdGlvbmFsIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVBvcHBlcjogTmFub1BvcENvbnN0cnVjdG9yID0gKFxuICAgIHJlZmVyZW5jZT86IEhUTUxFbGVtZW50IHwgUGFydGlhbDxOYW5vUG9wT3B0aW9ucz4sXG4gICAgcG9wcGVyPzogSFRNTEVsZW1lbnQsXG4gICAgb3B0aW9ucz86IFBhcnRpYWw8TmFub1BvcE9wdGlvbnM+XG4pOiBOYW5vUG9wID0+IHtcblxuICAgIC8vIFJlc29sdmUgb3B0aW9uc1xuICAgIGNvbnN0IGJhc2VPcHRpb25zOiBQYXJ0aWFsPE5hbm9Qb3BPcHRpb25zPiA9IHR5cGVvZiByZWZlcmVuY2UgPT09ICdvYmplY3QnICYmICEocmVmZXJlbmNlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpID9cbiAgICAgICAgcmVmZXJlbmNlIDoge3JlZmVyZW5jZSwgcG9wcGVyLCAuLi5vcHRpb25zfTtcblxuICAgIHJldHVybiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlcG9zaXRpb25zIHRoZSBjdXJyZW50IHBvcHBlci5cbiAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgb3B0aW9ucyB3aGljaCBnZXQgbWVyZ2VkIHdpdGggdGhlIGN1cnJlbnQgb25lcy5cbiAgICAgICAgICovXG4gICAgICAgIHVwZGF0ZShvcHRpb25zOiBQYXJ0aWFsPE5hbm9Qb3BPcHRpb25zPiA9IGJhc2VPcHRpb25zKTogUG9zaXRpb25NYXRjaCB8IG51bGwge1xuICAgICAgICAgICAgY29uc3Qge3JlZmVyZW5jZSwgcG9wcGVyfSA9IE9iamVjdC5hc3NpZ24oYmFzZU9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoIXBvcHBlciB8fCAhcmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb3BwZXItIG9yIHJlZmVyZW5jZS1lbGVtZW50IG1pc3NpbmcuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXBvc2l0aW9uKHJlZmVyZW5jZSwgcG9wcGVyLCBiYXNlT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbiIsICJpbXBvcnQgKiBhcyBfIGZyb20gJy4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtwYXJzZVRvSFNWQX0gZnJvbSAnLi91dGlscy9jb2xvcic7XG5pbXBvcnQge0hTVmFDb2xvcn0gZnJvbSAnLi91dGlscy9oc3ZhY29sb3InO1xuaW1wb3J0IE1vdmVhYmxlIGZyb20gJy4vbGlicy9tb3ZlYWJsZSc7XG5pbXBvcnQgU2VsZWN0YWJsZSBmcm9tICcuL2xpYnMvc2VsZWN0YWJsZSc7XG5pbXBvcnQgYnVpbGRQaWNrciBmcm9tICcuL3RlbXBsYXRlJztcbmltcG9ydCB7Y3JlYXRlUG9wcGVyfSBmcm9tICduYW5vcG9wJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGlja3Ige1xuXG4gICAgLy8gRXhwb3NlIHBpY2tyIHV0aWxzXG4gICAgc3RhdGljIHV0aWxzID0gXztcblxuICAgIC8vIEFzc2lnbiB2ZXJzaW9uIGFuZCBleHBvcnRcbiAgICBzdGF0aWMgdmVyc2lvbiA9IFZFUlNJT047XG5cbiAgICAvLyBEZWZhdWx0IHN0cmluZ3NcbiAgICBzdGF0aWMgSTE4Tl9ERUZBVUxUUyA9IHtcblxuICAgICAgICAvLyBTdHJpbmdzIHZpc2libGUgaW4gdGhlIFVJXG4gICAgICAgICd1aTpkaWFsb2cnOiAnY29sb3IgcGlja2VyIGRpYWxvZycsXG4gICAgICAgICdidG46dG9nZ2xlJzogJ3RvZ2dsZSBjb2xvciBwaWNrZXIgZGlhbG9nJyxcbiAgICAgICAgJ2J0bjpzd2F0Y2gnOiAnY29sb3Igc3dhdGNoJyxcbiAgICAgICAgJ2J0bjpsYXN0LWNvbG9yJzogJ3VzZSBwcmV2aW91cyBjb2xvcicsXG4gICAgICAgICdidG46c2F2ZSc6ICdTYXZlJyxcbiAgICAgICAgJ2J0bjpjYW5jZWwnOiAnQ2FuY2VsJyxcbiAgICAgICAgJ2J0bjpjbGVhcic6ICdDbGVhcicsXG5cbiAgICAgICAgLy8gU3RyaW5ncyB1c2VkIGZvciBhcmlhLWxhYmVsc1xuICAgICAgICAnYXJpYTpidG46c2F2ZSc6ICdzYXZlIGFuZCBjbG9zZScsXG4gICAgICAgICdhcmlhOmJ0bjpjYW5jZWwnOiAnY2FuY2VsIGFuZCBjbG9zZScsXG4gICAgICAgICdhcmlhOmJ0bjpjbGVhcic6ICdjbGVhciBhbmQgY2xvc2UnLFxuICAgICAgICAnYXJpYTppbnB1dCc6ICdjb2xvciBpbnB1dCBmaWVsZCcsXG4gICAgICAgICdhcmlhOnBhbGV0dGUnOiAnY29sb3Igc2VsZWN0aW9uIGFyZWEnLFxuICAgICAgICAnYXJpYTpodWUnOiAnaHVlIHNlbGVjdGlvbiBzbGlkZXInLFxuICAgICAgICAnYXJpYTpvcGFjaXR5JzogJ3NlbGVjdGlvbiBzbGlkZXInXG4gICAgfTtcblxuICAgIC8vIERlZmF1bHQgb3B0aW9uc1xuICAgIHN0YXRpYyBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgICAgIGFwcENsYXNzOiBudWxsLFxuICAgICAgICB0aGVtZTogJ2NsYXNzaWMnLFxuICAgICAgICB1c2VBc0J1dHRvbjogZmFsc2UsXG4gICAgICAgIHBhZGRpbmc6IDgsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgY29tcGFyaXNvbjogdHJ1ZSxcbiAgICAgICAgY2xvc2VPblNjcm9sbDogZmFsc2UsXG4gICAgICAgIG91dHB1dFByZWNpc2lvbjogMCxcbiAgICAgICAgbG9ja09wYWNpdHk6IGZhbHNlLFxuICAgICAgICBhdXRvUmVwb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbmVyOiAnYm9keScsXG5cbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgaW50ZXJhY3Rpb246IHt9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaTE4bjoge30sXG4gICAgICAgIHN3YXRjaGVzOiBudWxsLFxuICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICBzbGlkZXJzOiBudWxsLFxuXG4gICAgICAgIGRlZmF1bHQ6ICcjNDI0NDVhJyxcbiAgICAgICAgZGVmYXVsdFJlcHJlc2VudGF0aW9uOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogJ2JvdHRvbS1taWRkbGUnLFxuICAgICAgICBhZGp1c3RhYmxlTnVtYmVyczogdHJ1ZSxcbiAgICAgICAgc2hvd0Fsd2F5czogZmFsc2UsXG5cbiAgICAgICAgY2xvc2VXaXRoS2V5OiAnRXNjYXBlJ1xuICAgIH07XG5cbiAgICAvLyBXaWxsIGJlIHVzZWQgdG8gcHJldmVudCBzcGVjaWZpYyBhY3Rpb25zIGR1cmluZyBpbml0aWxpemF0aW9uXG4gICAgX2luaXRpYWxpemluZ0FjdGl2ZSA9IHRydWU7XG5cbiAgICAvLyBJZiB0aGUgY3VycmVudCBjb2xvciB2YWx1ZSBzaG91bGQgYmUgcmVjYWxjdWxhdGVkXG4gICAgX3JlY2FsYyA9IHRydWU7XG5cbiAgICAvLyBQb3NpdGlvbmluZyBlbmdpbmUgYW5kIERPTS1UcmVlXG4gICAgX25hbm9wb3AgPSBudWxsO1xuICAgIF9yb290ID0gbnVsbDtcblxuICAgIC8vIEN1cnJlbnQgYW5kIGxhc3QgY29sb3IgZm9yIGNvbXBhcmlzb25cbiAgICBfY29sb3IgPSBIU1ZhQ29sb3IoKTtcbiAgICBfbGFzdENvbG9yID0gSFNWYUNvbG9yKCk7XG4gICAgX3N3YXRjaENvbG9ycyA9IFtdO1xuXG4gICAgLy8gQW5pbWF0aW9uIGZyYW1lIHVzZWQgZm9yIHNldHVwLlxuICAgIC8vIFdpbGwgYmUgY2FuY2VsbGVkIGluIGNhc2Ugb2YgZGVzdHJ1Y3Rpb24uXG4gICAgX3NldHVwQW5pbWF0aW9uRnJhbWUgPSBudWxsO1xuXG4gICAgLy8gRXZlbmxpc3RlbmVyIG5hbWU6IFtjYWxsYmFja3NdXG4gICAgX2V2ZW50TGlzdGVuZXIgPSB7XG4gICAgICAgIGluaXQ6IFtdLFxuICAgICAgICBzYXZlOiBbXSxcbiAgICAgICAgaGlkZTogW10sXG4gICAgICAgIHNob3c6IFtdLFxuICAgICAgICBjbGVhcjogW10sXG4gICAgICAgIGNoYW5nZTogW10sXG4gICAgICAgIGNoYW5nZXN0b3A6IFtdLFxuICAgICAgICBjYW5jZWw6IFtdLFxuICAgICAgICBzd2F0Y2hzZWxlY3Q6IFtdXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKG9wdCkge1xuXG4gICAgICAgIC8vIEFzc2lnbiBkZWZhdWx0IHZhbHVlc1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHQgPSBPYmplY3QuYXNzaWduKHsuLi5QaWNrci5ERUZBVUxUX09QVElPTlN9LCBvcHQpO1xuXG4gICAgICAgIGNvbnN0IHtzd2F0Y2hlcywgY29tcG9uZW50cywgdGhlbWUsIHNsaWRlcnMsIGxvY2tPcGFjaXR5LCBwYWRkaW5nfSA9IG9wdDtcblxuICAgICAgICBpZiAoWyduYW5vJywgJ21vbm9saXRoJ10uaW5jbHVkZXModGhlbWUpICYmICFzbGlkZXJzKSB7XG4gICAgICAgICAgICBvcHQuc2xpZGVycyA9ICdoJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGludGVyYWN0aW9uIHNlY3Rpb25cbiAgICAgICAgaWYgKCFjb21wb25lbnRzLmludGVyYWN0aW9uKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmludGVyYWN0aW9uID0ge307XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdmVyd3JpdGUgcGFsZXR0ZSBpZiBwcmV2aWV3LCBvcGFjaXR5IG9yIGh1ZSBhcmUgdHJ1ZVxuICAgICAgICBjb25zdCB7cHJldmlldywgb3BhY2l0eSwgaHVlLCBwYWxldHRlfSA9IGNvbXBvbmVudHM7XG4gICAgICAgIGNvbXBvbmVudHMub3BhY2l0eSA9ICghbG9ja09wYWNpdHkgJiYgb3BhY2l0eSk7XG4gICAgICAgIGNvbXBvbmVudHMucGFsZXR0ZSA9IHBhbGV0dGUgfHwgcHJldmlldyB8fCBvcGFjaXR5IHx8IGh1ZTtcblxuICAgICAgICAvLyBJbml0aWFsaXplIHBpY2tlclxuICAgICAgICB0aGlzLl9wcmVCdWlsZCgpO1xuICAgICAgICB0aGlzLl9idWlsZENvbXBvbmVudHMoKTtcbiAgICAgICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICAgICAgICB0aGlzLl9maW5hbEJ1aWxkKCk7XG5cbiAgICAgICAgLy8gQXBwZW5kIHByZS1kZWZpbmVkIHN3YXRjaCBjb2xvcnNcbiAgICAgICAgaWYgKHN3YXRjaGVzICYmIHN3YXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3dhdGNoZXMuZm9yRWFjaChjb2xvciA9PiB0aGlzLmFkZFN3YXRjaChjb2xvcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBwb3NpdGlvbmluZyBlbmdpbmVcbiAgICAgICAgY29uc3Qge2J1dHRvbiwgYXBwfSA9IHRoaXMuX3Jvb3Q7XG4gICAgICAgIHRoaXMuX25hbm9wb3AgPSBjcmVhdGVQb3BwZXIoYnV0dG9uLCBhcHAsIHtcbiAgICAgICAgICAgIG1hcmdpbjogcGFkZGluZ1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJbml0aWFsaXplIGFjY2Vzc2liaWxpdHlcbiAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgncm9sZScsICdidXR0b24nKTtcbiAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRoaXMuX3QoJ2J0bjp0b2dnbGUnKSk7XG5cbiAgICAgICAgLy8gSW5pdGlsaXphdGlvbiBpcyBmaW5pc2gsIHBpY2tyIGlzIHZpc2libGUgYW5kIHJlYWR5IGZvciB1c2FnZVxuICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgdGhpcy5fc2V0dXBBbmltYXRpb25GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24gY2IoKSB7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFBlcmZvcm1hbmNlIGlzc3VlIGR1ZSB0byBoaWdoIGNhbGwtcmF0ZT9cbiAgICAgICAgICAgIGlmICghYXBwLm9mZnNldFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IGRlZmF1bHQgY29sb3JcbiAgICAgICAgICAgIHRoYXQuc2V0Q29sb3Iob3B0LmRlZmF1bHQpO1xuICAgICAgICAgICAgdGhhdC5fcmVQb3NpdGlvbmluZ1BpY2tlcigpO1xuXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIGNvbG9yIHJlcHJlc2VudGF0aW9uXG4gICAgICAgICAgICBpZiAob3B0LmRlZmF1bHRSZXByZXNlbnRhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoYXQuX3JlcHJlc2VudGF0aW9uID0gb3B0LmRlZmF1bHRSZXByZXNlbnRhdGlvbjtcbiAgICAgICAgICAgICAgICB0aGF0LnNldENvbG9yUmVwcmVzZW50YXRpb24odGhhdC5fcmVwcmVzZW50YXRpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaG93IHBpY2tyIGlmIGxvY2tlZFxuICAgICAgICAgICAgaWYgKG9wdC5zaG93QWx3YXlzKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5zaG93KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEluaXRpYWxpemF0aW9uIGlzIGRvbmUgLSBwaWNrciBpcyB1c2FibGUsIGZpcmUgaW5pdCBldmVudFxuICAgICAgICAgICAgdGhhdC5faW5pdGlhbGl6aW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGF0Ll9lbWl0KCdpbml0Jyk7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgaW5zdGFuY2UgdmlhIG1ldGhvZFxuICAgIHN0YXRpYyBjcmVhdGUgPSBvcHRpb25zID0+IG5ldyBQaWNrcihvcHRpb25zKTtcblxuICAgIC8vIERvZXMgb25seSB0aGUgYWJzb2x1dGx5IGJhc2ljIHRoaW5nIHRvIGluaXRpYWxpemUgdGhlIGNvbXBvbmVudHNcbiAgICBfcHJlQnVpbGQoKSB7XG4gICAgICAgIGNvbnN0IHtvcHRpb25zfSA9IHRoaXM7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBlbGVtZW50c1xuICAgICAgICBmb3IgKGNvbnN0IHR5cGUgb2YgWydlbCcsICdjb250YWluZXInXSkge1xuICAgICAgICAgICAgb3B0aW9uc1t0eXBlXSA9IF8ucmVzb2x2ZUVsZW1lbnQob3B0aW9uc1t0eXBlXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgZWxlbWVudCBhbmQgYXBwZW5kIGl0IHRvIGJvZHkgdG9cbiAgICAgICAgLy8gUHJldmVudCBpbml0aWFsaXphdGlvbiBlcnJvcnNcbiAgICAgICAgdGhpcy5fcm9vdCA9IGJ1aWxkUGlja3IodGhpcyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgYSBjdXN0b20gYnV0dG9uIGlzIHVzZWRcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlQXNCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvb3QuYnV0dG9uID0gb3B0aW9ucy5lbDsgLy8gUmVwbGFjZSBidXR0b24gd2l0aCBjdXN0b21pemVkIGJ1dHRvblxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcm9vdC5yb290KTtcbiAgICB9XG5cbiAgICBfZmluYWxCdWlsZCgpIHtcbiAgICAgICAgY29uc3Qgb3B0ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fcm9vdDtcblxuICAgICAgICAvLyBSZW1vdmUgZnJvbSBib2R5XG4gICAgICAgIG9wdC5jb250YWluZXIucmVtb3ZlQ2hpbGQocm9vdC5yb290KTtcblxuICAgICAgICBpZiAob3B0LmlubGluZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gb3B0LmVsLnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChvcHQuZWwubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHJvb3QuYXBwLCBvcHQuZWwubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQocm9vdC5hcHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0LmNvbnRhaW5lci5hcHBlbmRDaGlsZChyb290LmFwcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb24ndCByZXBsYWNlIHRoZSB0aGUgZWxlbWVudCBpZiBhIGN1c3RvbSBidXR0b24gaXMgdXNlZFxuICAgICAgICBpZiAoIW9wdC51c2VBc0J1dHRvbikge1xuXG4gICAgICAgICAgICAvLyBSZXBsYWNlIGVsZW1lbnQgd2l0aCBhY3R1YWwgY29sb3ItcGlja2VyXG4gICAgICAgICAgICBvcHQuZWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocm9vdC5yb290LCBvcHQuZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdC5pbmxpbmUpIHtcbiAgICAgICAgICAgIG9wdC5lbC5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGl0IHNob3VsZCBiZSBpbW1lZGlhdGx5IGRpc2FibGVkXG4gICAgICAgIGlmIChvcHQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29sb3IgY29tcGFyaXNvbiBpcyBkaXNhYmxlZCwgaWYgeWVzIC0gcmVtb3ZlIHRyYW5zaXRpb25zIHNvIGV2ZXJ5dGhpbmcga2VlcHMgc21vb3RobHlcbiAgICAgICAgaWYgKCFvcHQuY29tcGFyaXNvbikge1xuICAgICAgICAgICAgcm9vdC5idXR0b24uc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcblxuICAgICAgICAgICAgaWYgKCFvcHQudXNlQXNCdXR0b24pIHtcbiAgICAgICAgICAgICAgICByb290LnByZXZpZXcubGFzdENvbG9yLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG5cbiAgICBfYnVpbGRDb21wb25lbnRzKCkge1xuXG4gICAgICAgIC8vIEluc3RhbmNlIHJlZmVyZW5jZVxuICAgICAgICBjb25zdCBpbnN0ID0gdGhpcztcbiAgICAgICAgY29uc3QgY3MgPSB0aGlzLm9wdGlvbnMuY29tcG9uZW50cztcbiAgICAgICAgY29uc3Qgc2xpZGVycyA9IChpbnN0Lm9wdGlvbnMuc2xpZGVycyB8fCAndicpLnJlcGVhdCgyKTtcbiAgICAgICAgY29uc3QgW3NvLCBzaF0gPSBzbGlkZXJzLm1hdGNoKC9eW3ZoXSskL2cpID8gc2xpZGVycyA6IFtdO1xuXG4gICAgICAgIC8vIFJlLWFzc2lnbiBpZiBudWxsXG4gICAgICAgIGNvbnN0IGdldENvbG9yID0gKCkgPT5cbiAgICAgICAgICAgIHRoaXMuX2NvbG9yIHx8ICh0aGlzLl9jb2xvciA9IHRoaXMuX2xhc3RDb2xvci5jbG9uZSgpKTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0ge1xuXG4gICAgICAgICAgICBwYWxldHRlOiBNb3ZlYWJsZSh7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogaW5zdC5fcm9vdC5wYWxldHRlLnBpY2tlcixcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiBpbnN0Ll9yb290LnBhbGV0dGUucGFsZXR0ZSxcblxuICAgICAgICAgICAgICAgIG9uc3RvcDogKCkgPT4gaW5zdC5fZW1pdCgnY2hhbmdlc3RvcCcsICdzbGlkZXInLCBpbnN0KSxcbiAgICAgICAgICAgICAgICBvbmNoYW5nZSh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3MucGFsZXR0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSBnZXRDb2xvcigpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7X3Jvb3QsIG9wdGlvbnN9ID0gaW5zdDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge2xhc3RDb2xvciwgY3VycmVudENvbG9yfSA9IF9yb290LnByZXZpZXc7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBpbnB1dCBmaWVsZCBvbmx5IGlmIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBub3QgdHlwaW5nXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0Ll9yZWNhbGMpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHNhdHVyYXRpb24gYmFzZWQgb24gdGhlIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5zID0geCAqIDEwMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IudiA9IDEwMCAtIHkgKiAxMDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgZmFsbGluZyB1bmRlciB6ZXJvXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvci52IDwgMCA/IGNvbG9yLnYgPSAwIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QuX3VwZGF0ZU91dHB1dCgnc2xpZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgcGlja2VyIGFuZCBncmFkaWVudCBjb2xvclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjc3NSR0JhU3RyaW5nID0gY29sb3IudG9SR0JBKCkudG9TdHJpbmcoMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gY3NzUkdCYVN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLmJhY2tncm91bmQgPSBgXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCByZ2JhKDAsIDAsIDAsICR7Y29sb3IuYX0pLCB0cmFuc3BhcmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgaHNsYSgke2NvbG9yLmh9LCAxMDAlLCA1MCUsICR7Y29sb3IuYX0pLCByZ2JhKDI1NSwgMjU1LCAyNTUsICR7Y29sb3IuYX0pKVxuICAgICAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGNvbG9yIGlzIGxvY2tlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuY29tcGFyaXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3Jvb3QuYnV0dG9uLnN0eWxlLnNldFByb3BlcnR5KCctLXBjci1jb2xvcicsIGNzc1JHQmFTdHJpbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjb2xvciwgcmVtb3ZlIHRoZSBjbGVhcmVkIGljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF9yb290LmJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdjbGVhcicpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnVzZUFzQnV0dG9uICYmICFpbnN0Ll9sYXN0Q29sb3IpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgY29sb3IgdG8gYm90aCB0aGUgbGFzdCBhbmQgY3VycmVudCBjb2xvciBzaW5jZSB0aGUgY3VycmVudCBzdGF0ZSBpcyBjbGVhcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q29sb3Iuc3R5bGUuc2V0UHJvcGVydHkoJy0tcGNyLWNvbG9yJywgY3NzUkdCYVN0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgc3dhdGNoIHdoaWNoIGNvbG9yIG1hdGNoZXMgdGhlIGN1cnJlbnQgb25lXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhleGEgPSBjb2xvci50b0hFWEEoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHtlbCwgY29sb3J9IG9mIGluc3QuX3N3YXRjaENvbG9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0W2hleGEgPT09IGNvbG9yLnRvSEVYQSgpLnRvU3RyaW5nKCkgPyAnYWRkJyA6ICdyZW1vdmUnXSgncGNyLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlIGN1cnJlbnQgY29sb3JcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbG9yLnN0eWxlLnNldFByb3BlcnR5KCctLXBjci1jb2xvcicsIGNzc1JHQmFTdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICBodWU6IE1vdmVhYmxlKHtcbiAgICAgICAgICAgICAgICBsb2NrOiBzaCA9PT0gJ3YnID8gJ2gnIDogJ3YnLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGluc3QuX3Jvb3QuaHVlLnBpY2tlcixcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiBpbnN0Ll9yb290Lmh1ZS5zbGlkZXIsXG5cbiAgICAgICAgICAgICAgICBvbnN0b3A6ICgpID0+IGluc3QuX2VtaXQoJ2NoYW5nZXN0b3AnLCAnc2xpZGVyJywgaW5zdCksXG4gICAgICAgICAgICAgICAgb25jaGFuZ2Uodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNzLmh1ZSB8fCAhY3MucGFsZXR0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSBnZXRDb2xvcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBodWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3QuX3JlY2FsYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuaCA9IHYgKiAzNjA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgY29sb3JcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGBoc2woJHtjb2xvci5ofSwgMTAwJSwgNTAlKWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucGFsZXR0ZS50cmlnZ2VyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIG9wYWNpdHk6IE1vdmVhYmxlKHtcbiAgICAgICAgICAgICAgICBsb2NrOiBzbyA9PT0gJ3YnID8gJ2gnIDogJ3YnLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGluc3QuX3Jvb3Qub3BhY2l0eS5waWNrZXIsXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogaW5zdC5fcm9vdC5vcGFjaXR5LnNsaWRlcixcblxuICAgICAgICAgICAgICAgIG9uc3RvcDogKCkgPT4gaW5zdC5fZW1pdCgnY2hhbmdlc3RvcCcsICdzbGlkZXInLCBpbnN0KSxcbiAgICAgICAgICAgICAgICBvbmNoYW5nZSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3Mub3BhY2l0eSB8fCAhY3MucGFsZXR0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSBnZXRDb2xvcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBvcGFjaXR5XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0Ll9yZWNhbGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEgPSBNYXRoLnJvdW5kKHYgKiAxZTIpIC8gMTAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGNvbG9yXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gYHJnYmEoMCwgMCwgMCwgJHtjb2xvci5hfSlgO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBhbGV0dGUudHJpZ2dlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBTZWxlY3RhYmxlKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50czogaW5zdC5fcm9vdC5pbnRlcmFjdGlvbi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2FjdGl2ZScsXG5cbiAgICAgICAgICAgICAgICBvbmNoYW5nZShlKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3QuX3JlcHJlc2VudGF0aW9uID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0Ll9yZWNhbGMgJiYgaW5zdC5fdXBkYXRlT3V0cHV0KCdzd2F0Y2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICAgIH1cblxuICAgIF9iaW5kRXZlbnRzKCkge1xuICAgICAgICBjb25zdCB7X3Jvb3QsIG9wdGlvbnN9ID0gdGhpcztcblxuICAgICAgICBjb25zdCBldmVudEJpbmRpbmdzID0gW1xuXG4gICAgICAgICAgICAvLyBDbGVhciBjb2xvclxuICAgICAgICAgICAgXy5vbihfcm9vdC5pbnRlcmFjdGlvbi5jbGVhciwgJ2NsaWNrJywgKCkgPT4gdGhpcy5fY2xlYXJDb2xvcigpKSxcblxuICAgICAgICAgICAgLy8gU2VsZWN0IGxhc3QgY29sb3Igb24gY2xpY2tcbiAgICAgICAgICAgIF8ub24oW1xuICAgICAgICAgICAgICAgIF9yb290LmludGVyYWN0aW9uLmNhbmNlbCxcbiAgICAgICAgICAgICAgICBfcm9vdC5wcmV2aWV3Lmxhc3RDb2xvclxuICAgICAgICAgICAgXSwgJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SFNWQSguLi4odGhpcy5fbGFzdENvbG9yIHx8IHRoaXMuX2NvbG9yKS50b0hTVkEoKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgnY2FuY2VsJyk7XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgLy8gU2F2ZSBjb2xvclxuICAgICAgICAgICAgXy5vbihfcm9vdC5pbnRlcmFjdGlvbi5zYXZlLCAnY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgIXRoaXMuYXBwbHlDb2xvcigpICYmICFvcHRpb25zLnNob3dBbHdheXMgJiYgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgLy8gVXNlciBpbnB1dFxuICAgICAgICAgICAgXy5vbihfcm9vdC5pbnRlcmFjdGlvbi5yZXN1bHQsIFsna2V5dXAnLCAnaW5wdXQnXSwgZSA9PiB7XG5cbiAgICAgICAgICAgICAgICAvLyBGaXJlIGxpc3RlbmVyIGlmIGluaXRpYWxpemF0aW9uIGlzIGZpbmlzaCBhbmQgY2hhbmdlZCBjb2xvciB3YXMgdmFsaWRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXRDb2xvcihlLnRhcmdldC52YWx1ZSwgdHJ1ZSkgJiYgIXRoaXMuX2luaXRpYWxpemluZ0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0KCdjaGFuZ2UnLCB0aGlzLl9jb2xvciwgJ2lucHV0JywgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2NoYW5nZXN0b3AnLCAnaW5wdXQnLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIC8vIERldGVjdCB1c2VyIGlucHV0IGFuZCBkaXNhYmxlIGF1dG8tcmVjYWxjdWxhdGlvblxuICAgICAgICAgICAgXy5vbihfcm9vdC5pbnRlcmFjdGlvbi5yZXN1bHQsIFsnZm9jdXMnLCAnYmx1ciddLCBlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWNhbGMgPSBlLnR5cGUgPT09ICdibHVyJztcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWNhbGMgJiYgdGhpcy5fdXBkYXRlT3V0cHV0KG51bGwpO1xuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIC8vIENhbmNlbCBpbnB1dCBkZXRlY3Rpb24gb24gY29sb3IgY2hhbmdlXG4gICAgICAgICAgICBfLm9uKFtcbiAgICAgICAgICAgICAgICBfcm9vdC5wYWxldHRlLnBhbGV0dGUsXG4gICAgICAgICAgICAgICAgX3Jvb3QucGFsZXR0ZS5waWNrZXIsXG4gICAgICAgICAgICAgICAgX3Jvb3QuaHVlLnNsaWRlcixcbiAgICAgICAgICAgICAgICBfcm9vdC5odWUucGlja2VyLFxuICAgICAgICAgICAgICAgIF9yb290Lm9wYWNpdHkuc2xpZGVyLFxuICAgICAgICAgICAgICAgIF9yb290Lm9wYWNpdHkucGlja2VyXG4gICAgICAgICAgICBdLCBbJ21vdXNlZG93bicsICd0b3VjaHN0YXJ0J10sICgpID0+IHRoaXMuX3JlY2FsYyA9IHRydWUsIHtwYXNzaXZlOiB0cnVlfSlcbiAgICAgICAgXTtcblxuICAgICAgICAvLyBQcm92aWRlIGhpZGluZyAvIHNob3dpbmcgYWJpbGl0aWVzIG9ubHkgaWYgc2hvd0Fsd2F5cyBpcyBmYWxzZVxuICAgICAgICBpZiAoIW9wdGlvbnMuc2hvd0Fsd2F5cykge1xuICAgICAgICAgICAgY29uc3QgY2sgPSBvcHRpb25zLmNsb3NlV2l0aEtleTtcblxuICAgICAgICAgICAgZXZlbnRCaW5kaW5ncy5wdXNoKFxuXG4gICAgICAgICAgICAgICAgLy8gU2F2ZSBhbmQgaGlkZSAvIHNob3cgcGlja2VyXG4gICAgICAgICAgICAgICAgXy5vbihfcm9vdC5idXR0b24sICdjbGljaycsICgpID0+IHRoaXMuaXNPcGVuKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpKSxcblxuICAgICAgICAgICAgICAgIC8vIENsb3NlIHdpdGggZXNjYXBlIGtleVxuICAgICAgICAgICAgICAgIF8ub24oZG9jdW1lbnQsICdrZXl1cCcsIGUgPT4gdGhpcy5pc09wZW4oKSAmJiAoZS5rZXkgPT09IGNrIHx8IGUuY29kZSA9PT0gY2spICYmIHRoaXMuaGlkZSgpKSxcblxuICAgICAgICAgICAgICAgIC8vIENhbmNlbCBzZWxlY3RpbmcgaWYgdGhlIHVzZXIgdGFwcyBiZWhpbmQgdGhlIGNvbG9yIHBpY2tlclxuICAgICAgICAgICAgICAgIF8ub24oZG9jdW1lbnQsIFsndG91Y2hzdGFydCcsICdtb3VzZWRvd24nXSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3BlbigpICYmICFfLmV2ZW50UGF0aChlKS5zb21lKGVsID0+IGVsID09PSBfcm9vdC5hcHAgfHwgZWwgPT09IF9yb290LmJ1dHRvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwge2NhcHR1cmU6IHRydWV9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2UgaW5wdXQgYWRqdXN0YWJsZSBpZiBlbmFibGVkXG4gICAgICAgIGlmIChvcHRpb25zLmFkanVzdGFibGVOdW1iZXJzKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZXMgPSB7XG4gICAgICAgICAgICAgICAgcmdiYTogWzI1NSwgMjU1LCAyNTUsIDFdLFxuICAgICAgICAgICAgICAgIGhzdmE6IFszNjAsIDEwMCwgMTAwLCAxXSxcbiAgICAgICAgICAgICAgICBoc2xhOiBbMzYwLCAxMDAsIDEwMCwgMV0sXG4gICAgICAgICAgICAgICAgY215azogWzEwMCwgMTAwLCAxMDAsIDEwMF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIF8uYWRqdXN0YWJsZUlucHV0TnVtYmVycyhfcm9vdC5pbnRlcmFjdGlvbi5yZXN1bHQsIChvLCBzdGVwLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gcmFuZ2VzW3RoaXMuZ2V0Q29sb3JSZXByZXNlbnRhdGlvbigpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IHJhbmdlW2luZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV4dCByZWFzb25hYmxlIG51bWJlclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBudiA9IG8gKyAobWF4ID49IDEwMCA/IHN0ZXAgKiAxMDAwIDogc3RlcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgcmFuZ2Ugb2YgemVybyB1cCB0byBtYXgsIGZpeCBmbG9hdGluZy1wb2ludCBpc3N1ZXNcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG52IDw9IDAgPyAwIDogTnVtYmVyKChudiA8IG1heCA/IG52IDogbWF4KS50b1ByZWNpc2lvbigzKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmF1dG9SZXBvc2l0aW9uICYmICFvcHRpb25zLmlubGluZSkge1xuICAgICAgICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICAgIC8vIFJlLWNhbGMgcG9zaXRpb24gb24gd2luZG93IHJlc2l6ZSwgc2Nyb2xsIGFuZCB3aGVlbFxuICAgICAgICAgICAgZXZlbnRCaW5kaW5ncy5wdXNoKFxuICAgICAgICAgICAgICAgIF8ub24od2luZG93LCBbJ3Njcm9sbCcsICdyZXNpemUnXSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5pc09wZW4oKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jbG9zZU9uU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGltZW91dCA9IG51bGwsIDEwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcG9zaXRpb24gb24gZXZlcnkgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gcnMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX3JlUG9zaXRpb25pbmdQaWNrZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWVvdXQgIT09IG51bGwpICYmIHJlcXVlc3RBbmltYXRpb25GcmFtZShycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aW1lb3V0ID0gbnVsbCwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHtjYXB0dXJlOiB0cnVlfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuX2V2ZW50QmluZGluZ3MgPSBldmVudEJpbmRpbmdzO1xuICAgIH1cblxuICAgIF9yZVBvc2l0aW9uaW5nUGlja2VyKCkge1xuICAgICAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzO1xuXG4gICAgICAgIC8vIE5vIHJlcG9zaXRpb25pbmcgbmVlZGVkIGlmIGlubGluZVxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5saW5lKSB7XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5fbmFub3BvcC51cGRhdGUoe1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogb3B0aW9ucy5wb3NpdGlvblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gdGhpcy5fcm9vdC5hcHA7XG4gICAgICAgICAgICAgICAgY29uc3QgZWIgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBlbC5zdHlsZS50b3AgPSBgJHsod2luZG93LmlubmVySGVpZ2h0IC0gZWIuaGVpZ2h0KSAvIDJ9cHhgO1xuICAgICAgICAgICAgICAgIGVsLnN0eWxlLmxlZnQgPSBgJHsod2luZG93LmlubmVyV2lkdGggLSBlYi53aWR0aCkgLyAyfXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVPdXRwdXQoZXZlbnRTb3VyY2UpIHtcbiAgICAgICAgY29uc3Qge19yb290LCBfY29sb3IsIG9wdGlvbnN9ID0gdGhpcztcblxuICAgICAgICAvLyBDaGVjayBpZiBjb21wb25lbnQgaXMgcHJlc2VudFxuICAgICAgICBpZiAoX3Jvb3QuaW50ZXJhY3Rpb24udHlwZSgpKSB7XG5cbiAgICAgICAgICAgIC8vIENvbnN0cnVjdCBmdW5jdGlvbiBuYW1lIGFuZCBjYWxsIGlmIHByZXNlbnRcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGB0byR7X3Jvb3QuaW50ZXJhY3Rpb24udHlwZSgpLmdldEF0dHJpYnV0ZSgnZGF0YS10eXBlJyl9YDtcbiAgICAgICAgICAgIF9yb290LmludGVyYWN0aW9uLnJlc3VsdC52YWx1ZSA9IHR5cGVvZiBfY29sb3JbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgICAgICAgICAgX2NvbG9yW21ldGhvZF0oKS50b1N0cmluZyhvcHRpb25zLm91dHB1dFByZWNpc2lvbikgOiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcmUgbGlzdGVuZXIgaWYgaW5pdGlhbGl6YXRpb24gaXMgZmluaXNoXG4gICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6aW5nQWN0aXZlICYmIHRoaXMuX3JlY2FsYykge1xuICAgICAgICAgICAgdGhpcy5fZW1pdCgnY2hhbmdlJywgX2NvbG9yLCBldmVudFNvdXJjZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY2xlYXJDb2xvcihzaWxlbnQgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB7X3Jvb3QsIG9wdGlvbnN9ID0gdGhpcztcblxuICAgICAgICAvLyBDaGFuZ2Ugb25seSB0aGUgYnV0dG9uIGNvbG9yIGlmIGl0IGlzbid0IGN1c3RvbWl6ZWRcbiAgICAgICAgaWYgKCFvcHRpb25zLnVzZUFzQnV0dG9uKSB7XG4gICAgICAgICAgICBfcm9vdC5idXR0b24uc3R5bGUuc2V0UHJvcGVydHkoJy0tcGNyLWNvbG9yJywgJ3JnYmEoMCwgMCwgMCwgMC4xNSknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9yb290LmJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdjbGVhcicpO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy5zaG93QWx3YXlzKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xhc3RDb2xvciA9IG51bGw7XG4gICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6aW5nQWN0aXZlICYmICFzaWxlbnQpIHtcblxuICAgICAgICAgICAgLy8gRmlyZSBsaXN0ZW5lclxuICAgICAgICAgICAgdGhpcy5fZW1pdCgnc2F2ZScsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdCgnY2xlYXInKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9wYXJzZUxvY2FsQ29sb3Ioc3RyKSB7XG4gICAgICAgIGNvbnN0IHt2YWx1ZXMsIHR5cGUsIGF9ID0gcGFyc2VUb0hTVkEoc3RyKTtcbiAgICAgICAgY29uc3Qge2xvY2tPcGFjaXR5fSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgYWxwaGFNYWtlc0FDaGFuZ2UgPSBhICE9PSB1bmRlZmluZWQgJiYgYSAhPT0gMTtcblxuICAgICAgICAvLyBJZiBubyBvcGFjaXR5IGlzIGFwcGxpZWQsIGFkZCB1bmRlZmluZWQgYXQgdGhlIHZlcnkgZW5kIHdoaWNoIGdldHNcbiAgICAgICAgLy8gU2V0IHRvIDEgaW4gc2V0SFNWQVxuICAgICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHZhbHVlc1szXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZXM6ICghdmFsdWVzIHx8IChsb2NrT3BhY2l0eSAmJiBhbHBoYU1ha2VzQUNoYW5nZSkpID8gbnVsbCA6IHZhbHVlcyxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfdChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5pMThuW2tleV0gfHwgUGlja3IuSTE4Tl9ERUZBVUxUU1trZXldO1xuICAgIH1cblxuICAgIF9lbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuX2V2ZW50TGlzdGVuZXJbZXZlbnRdLmZvckVhY2goY2IgPT4gY2IoLi4uYXJncywgdGhpcykpO1xuICAgIH1cblxuICAgIG9uKGV2ZW50LCBjYikge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVyW2V2ZW50XS5wdXNoKGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb2ZmKGV2ZW50LCBjYikge1xuICAgICAgICBjb25zdCBjYWxsQmFja3MgPSAodGhpcy5fZXZlbnRMaXN0ZW5lcltldmVudF0gfHwgW10pO1xuICAgICAgICBjb25zdCBpbmRleCA9IGNhbGxCYWNrcy5pbmRleE9mKGNiKTtcblxuICAgICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgICAgICBjYWxsQmFja3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGVuZHMgYSBjb2xvciB0byB0aGUgc3dhdGNoIHBhbGV0dGVcbiAgICAgKiBAcGFyYW0gY29sb3JcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBhZGRTd2F0Y2goY29sb3IpIHtcbiAgICAgICAgY29uc3Qge3ZhbHVlc30gPSB0aGlzLl9wYXJzZUxvY2FsQ29sb3IoY29sb3IpO1xuXG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtfc3dhdGNoQ29sb3JzLCBfcm9vdH0gPSB0aGlzO1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBIU1ZhQ29sb3IoLi4udmFsdWVzKTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBzd2F0Y2ggSFRNTEVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IGVsID0gXy5jcmVhdGVFbGVtZW50RnJvbVN0cmluZyhcbiAgICAgICAgICAgICAgICBgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCItLXBjci1jb2xvcjogJHtjb2xvci50b1JHQkEoKS50b1N0cmluZygwKX1cIiBhcmlhLWxhYmVsPVwiJHt0aGlzLl90KCdidG46c3dhdGNoJyl9XCIvPmBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEFwcGVuZCBlbGVtZW50IGFuZCBzYXZlIHN3YXRjaCBkYXRhXG4gICAgICAgICAgICBfcm9vdC5zd2F0Y2hlcy5hcHBlbmRDaGlsZChlbCk7XG4gICAgICAgICAgICBfc3dhdGNoQ29sb3JzLnB1c2goe2VsLCBjb2xvcn0pO1xuXG4gICAgICAgICAgICAvLyBCaW5kIGV2ZW50XG4gICAgICAgICAgICB0aGlzLl9ldmVudEJpbmRpbmdzLnB1c2goXG4gICAgICAgICAgICAgICAgXy5vbihlbCwgJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEhTVkEoLi4uY29sb3IudG9IU1ZBKCksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0KCdzd2F0Y2hzZWxlY3QnLCBjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2NoYW5nZScsIGNvbG9yLCAnc3dhdGNoJywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBzd2F0Y2ggY29sb3IgYnkgaXQncyBpbmRleFxuICAgICAqIEBwYXJhbSBpbmRleFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIHJlbW92ZVN3YXRjaChpbmRleCkge1xuICAgICAgICBjb25zdCBzd2F0Y2hDb2xvciA9IHRoaXMuX3N3YXRjaENvbG9yc1tpbmRleF07XG5cbiAgICAgICAgLy8gQ2hlY2sgc3dhdGNoIGRhdGFcbiAgICAgICAgaWYgKHN3YXRjaENvbG9yKSB7XG4gICAgICAgICAgICBjb25zdCB7ZWx9ID0gc3dhdGNoQ29sb3I7XG5cbiAgICAgICAgICAgIC8vIFJlbW92ZSBIVE1MIGNoaWxkIGFuZCBzd2F0Y2ggZGF0YVxuICAgICAgICAgICAgdGhpcy5fcm9vdC5zd2F0Y2hlcy5yZW1vdmVDaGlsZChlbCk7XG4gICAgICAgICAgICB0aGlzLl9zd2F0Y2hDb2xvcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGFwcGx5Q29sb3Ioc2lsZW50ID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qge3ByZXZpZXcsIGJ1dHRvbn0gPSB0aGlzLl9yb290O1xuXG4gICAgICAgIC8vIENoYW5nZSBwcmV2aWV3IGFuZCBjdXJyZW50IGNvbG9yXG4gICAgICAgIGNvbnN0IGNzc1JHQmFTdHJpbmcgPSB0aGlzLl9jb2xvci50b1JHQkEoKS50b1N0cmluZygwKTtcbiAgICAgICAgcHJldmlldy5sYXN0Q29sb3Iuc3R5bGUuc2V0UHJvcGVydHkoJy0tcGNyLWNvbG9yJywgY3NzUkdCYVN0cmluZyk7XG5cbiAgICAgICAgLy8gQ2hhbmdlIG9ubHkgdGhlIGJ1dHRvbiBjb2xvciBpZiBpdCBpc24ndCBjdXN0b21pemVkXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnVzZUFzQnV0dG9uKSB7XG4gICAgICAgICAgICBidXR0b24uc3R5bGUuc2V0UHJvcGVydHkoJy0tcGNyLWNvbG9yJywgY3NzUkdCYVN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2VyIGNoYW5nZWQgdGhlIGNvbG9yIHNvIHJlbW92ZSB0aGUgY2xlYXIgY2xhc1xuICAgICAgICBidXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnY2xlYXInKTtcblxuICAgICAgICAvLyBTYXZlIGxhc3QgY29sb3JcbiAgICAgICAgdGhpcy5fbGFzdENvbG9yID0gdGhpcy5fY29sb3IuY2xvbmUoKTtcblxuICAgICAgICAvLyBGaXJlIGxpc3RlbmVyXG4gICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6aW5nQWN0aXZlICYmICFzaWxlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoJ3NhdmUnLCB0aGlzLl9jb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95J3MgYWxsIGZ1bmN0aW9uYWxpdHlzXG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcblxuICAgICAgICAvLyBDYW5jZWwgc2V0dXAtZnJhbWUgaWYgc2V0XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3NldHVwQW5pbWF0aW9uRnJhbWUpO1xuXG4gICAgICAgIC8vIFVuYmluZCBldmVudHNcbiAgICAgICAgdGhpcy5fZXZlbnRCaW5kaW5ncy5mb3JFYWNoKGFyZ3MgPT4gXy5vZmYoLi4uYXJncykpO1xuXG4gICAgICAgIC8vIERlc3Ryb3kgc3ViLWNvbXBvbmVudHNcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fY29tcG9uZW50cylcbiAgICAgICAgICAgIC5mb3JFYWNoKGtleSA9PiB0aGlzLl9jb21wb25lbnRzW2tleV0uZGVzdHJveSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95J3MgYWxsIGZ1bmN0aW9uYWxpdHlzIGFuZCByZW1vdmVzXG4gICAgICogdGhlIHBpY2tyIGVsZW1lbnQuXG4gICAgICovXG4gICAgZGVzdHJveUFuZFJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIGNvbnN0IHtyb290LCBhcHB9ID0gdGhpcy5fcm9vdDtcblxuICAgICAgICAvLyBSZW1vdmUgZWxlbWVudFxuICAgICAgICBpZiAocm9vdC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByb290LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQocm9vdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgLnBjci1hcHBcbiAgICAgICAgYXBwLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoYXBwKTtcblxuICAgICAgICAvLyBUaGVyZSBhcmUgcmVmZXJlbmNlcyB0byB2YXJpb3VzIERPTSBlbGVtZW50cyBzdG9yZWQgaW4gdGhlIHBpY2tyIGluc3RhbmNlXG4gICAgICAgIC8vIFRoaXMgY2xlYW5zIGFsbCBvZiB0aGVtIHRvIGF2b2lkIGRldGFjaGVkIERPTXNcbiAgICAgICAgT2JqZWN0LmtleXModGhpcylcbiAgICAgICAgICAgIC5mb3JFYWNoKGtleSA9PiB0aGlzW2tleV0gPSBudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlcyB0aGUgY29sb3ItcGlja2VyIHVpLlxuICAgICAqL1xuICAgIGhpZGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICAgICAgICB0aGlzLl9yb290LmFwcC5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KCdoaWRlJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyB0aGUgY29sb3ItcGlja2VyIHVpLlxuICAgICAqL1xuICAgIHNob3coKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmRpc2FibGVkICYmICF0aGlzLmlzT3BlbigpKSB7XG4gICAgICAgICAgICB0aGlzLl9yb290LmFwcC5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7XG4gICAgICAgICAgICB0aGlzLl9yZVBvc2l0aW9uaW5nUGlja2VyKCk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KCdzaG93JywgdGhpcy5fY29sb3IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gSWYgdGhlIGNvbG9yIHBpY2tlciBpcyBjdXJyZW50bHkgb3BlblxuICAgICAqL1xuICAgIGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QuYXBwLmNsYXNzTGlzdC5jb250YWlucygndmlzaWJsZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBhIHNwZWNpZmljIGNvbG9yLlxuICAgICAqIEBwYXJhbSBoIEh1ZVxuICAgICAqIEBwYXJhbSBzIFNhdHVyYXRpb25cbiAgICAgKiBAcGFyYW0gdiBWYWx1ZVxuICAgICAqIEBwYXJhbSBhIEFscGhhIGNoYW5uZWwgKDAgLSAxKVxuICAgICAqIEBwYXJhbSBzaWxlbnQgSWYgdGhlIGJ1dHRvbiBzaG91bGQgbm90IGNoYW5nZSB0aGUgY29sb3JcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gaWYgdGhlIGNvbG9yIGhhcyBiZWVuIGFjY2VwdGVkXG4gICAgICovXG4gICAgc2V0SFNWQShoID0gMzYwLCBzID0gMCwgdiA9IDAsIGEgPSAxLCBzaWxlbnQgPSBmYWxzZSkge1xuXG4gICAgICAgIC8vIERlYWN0aXZhdGUgY29sb3IgY2FsY3VsYXRpb25cbiAgICAgICAgY29uc3QgcmVjYWxjID0gdGhpcy5fcmVjYWxjOyAvLyBTYXZlIHN0YXRlXG4gICAgICAgIHRoaXMuX3JlY2FsYyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGlucHV0XG4gICAgICAgIGlmIChoIDwgMCB8fCBoID4gMzYwIHx8IHMgPCAwIHx8IHMgPiAxMDAgfHwgdiA8IDAgfHwgdiA+IDEwMCB8fCBhIDwgMCB8fCBhID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgY3VycmVudCBjb2xvciBhbmQgcmUtYWN0aXZlIGNvbG9yIGNhbGN1bGF0aW9uXG4gICAgICAgIHRoaXMuX2NvbG9yID0gSFNWYUNvbG9yKGgsIHMsIHYsIGEpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBzbGlkZXIgYW5kIHBhbGV0dGVcbiAgICAgICAgY29uc3Qge2h1ZSwgb3BhY2l0eSwgcGFsZXR0ZX0gPSB0aGlzLl9jb21wb25lbnRzO1xuICAgICAgICBodWUudXBkYXRlKChoIC8gMzYwKSk7XG4gICAgICAgIG9wYWNpdHkudXBkYXRlKGEpO1xuICAgICAgICBwYWxldHRlLnVwZGF0ZShzIC8gMTAwLCAxIC0gKHYgLyAxMDApKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBjYWxsIGlzIHNpbGVudFxuICAgICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUNvbG9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgb3V0cHV0IGlmIHJlY2FsY3VsYXRpb24gaXMgZW5hYmxlZFxuICAgICAgICBpZiAocmVjYWxjKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVPdXRwdXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc3RvcmUgb2xkIHN0YXRlXG4gICAgICAgIHRoaXMuX3JlY2FsYyA9IHJlY2FsYztcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZXMgdG8gcGFyc2UgYSBzdHJpbmcgd2hpY2ggcmVwcmVzZW50cyBhIGNvbG9yLlxuICAgICAqIEV4YW1wbGVzOiAjZmZmXG4gICAgICogICAgICAgICAgIHJnYiAxMCAxMCAyMDBcbiAgICAgKiAgICAgICAgICAgaHN2YSAxMCAyMCA1IDAuNVxuICAgICAqIEBwYXJhbSBzdHJpbmdcbiAgICAgKiBAcGFyYW0gc2lsZW50XG4gICAgICovXG4gICAgc2V0Q29sb3Ioc3RyaW5nLCBzaWxlbnQgPSBmYWxzZSkge1xuXG4gICAgICAgIC8vIENoZWNrIGlmIG51bGxcbiAgICAgICAgaWYgKHN0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fY2xlYXJDb2xvcihzaWxlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7dmFsdWVzLCB0eXBlfSA9IHRoaXMuX3BhcnNlTG9jYWxDb2xvcihzdHJpbmcpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbG9yIGlzIG9rXG4gICAgICAgIGlmICh2YWx1ZXMpIHtcblxuICAgICAgICAgICAgLy8gQ2hhbmdlIHNlbGVjdGVkIGNvbG9yIGZvcm1hdFxuICAgICAgICAgICAgY29uc3QgdXR5cGUgPSB0eXBlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzLl9yb290LmludGVyYWN0aW9uO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gb3B0aW9ucy5maW5kKGVsID0+IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS10eXBlJykgPT09IHV0eXBlKTtcblxuICAgICAgICAgICAgLy8gQXV0byBzZWxlY3Qgb25seSBpZiBub3QgaGlkZGVuXG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmICF0YXJnZXQuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdFtlbCA9PT0gdGFyZ2V0ID8gJ2FkZCcgOiAncmVtb3ZlJ10oJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIGNvbG9yIChmaXJlcyAnc2F2ZScgZXZlbnQgaWYgc2lsZW50IGlzICdmYWxzZScpXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2V0SFNWQSguLi52YWx1ZXMsIHNpbGVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSByZXByZXNlbnRhdGlvbiAoZmlyZXMgJ2NoYW5nZScgZXZlbnQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRDb2xvclJlcHJlc2VudGF0aW9uKHV0eXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRoZSBjb2xvciBfcmVwcmVzZW50YXRpb24uXG4gICAgICogQWxsb3dlZCB2YWx1ZXMgYXJlIEhFWCwgUkdCLCBIU1YsIEhTTCBhbmQgQ01ZS1xuICAgICAqIEBwYXJhbSB0eXBlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIHRoZSBzZWxlY3RlZCB0eXBlIHdhcyB2YWxpZC5cbiAgICAgKi9cbiAgICBzZXRDb2xvclJlcHJlc2VudGF0aW9uKHR5cGUpIHtcblxuICAgICAgICAvLyBGb3JjZSB1cHBlcmNhc2UgdG8gYWxsb3cgYSBjYXNlLXNlbnNpdGl2IGNvbXBhcmlzb25cbiAgICAgICAgdHlwZSA9IHR5cGUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAvLyBGaW5kIGJ1dHRvbiB3aXRoIGdpdmVuIHR5cGUgYW5kIHRyaWdnZXIgY2xpY2sgZXZlbnRcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fcm9vdC5pbnRlcmFjdGlvbi5vcHRpb25zXG4gICAgICAgICAgICAuZmluZCh2ID0+IHYuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKS5zdGFydHNXaXRoKHR5cGUpICYmICF2LmNsaWNrKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgY29sb3IgcmVwcmVzZW50YWlvbi4gU2VlIHNldENvbG9yUmVwcmVzZW50YXRpb25cbiAgICAgKiBAcmV0dXJucyB7Kn1cbiAgICAgKi9cbiAgICBnZXRDb2xvclJlcHJlc2VudGF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVwcmVzZW50YXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgSFNWYUNvbG9yIEN1cnJlbnQgSFNWYUNvbG9yIG9iamVjdC5cbiAgICAgKi9cbiAgICBnZXRDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjb2xvci5cbiAgICAgKiBAcmV0dXJucyB7e2EsIHRvSFNWQSwgdG9IRVhBLCBzLCB2LCBoLCBjbG9uZSwgdG9DTVlLLCB0b0hTTEEsIHRvUkdCQX19XG4gICAgICovXG4gICAgZ2V0U2VsZWN0ZWRDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhc3RDb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgcm9vdCBIVE1MRWxlbWVudCB3aXRoIGFsbCBoaXMgY29tcG9uZW50cy5cbiAgICAgKi9cbiAgICBnZXRSb290KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIHBpY2tyXG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3Jvb3QuYnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZSBwaWNrclxuICAgICAqL1xuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Jvb3QuYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsICIvKiFcbiAqIERldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBCdWZmZXJcbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnIpIHtcblx0aWYgKHR5cGVvZiBBcnJheS5pc0FycmF5ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKTtcblx0fVxuXG5cdHJldHVybiB0b1N0ci5jYWxsKGFycikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG52YXIgaXNQbGFpbk9iamVjdCA9IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG5cdGlmICghb2JqIHx8IHRvU3RyLmNhbGwob2JqKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHR2YXIgaGFzT3duQ29uc3RydWN0b3IgPSBoYXNPd24uY2FsbChvYmosICdjb25zdHJ1Y3RvcicpO1xuXHR2YXIgaGFzSXNQcm90b3R5cGVPZiA9IG9iai5jb25zdHJ1Y3RvciAmJiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlICYmIGhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsICdpc1Byb3RvdHlwZU9mJyk7XG5cdC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3Rcblx0aWYgKG9iai5jb25zdHJ1Y3RvciAmJiAhaGFzT3duQ29uc3RydWN0b3IgJiYgIWhhc0lzUHJvdG90eXBlT2YpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBPd24gcHJvcGVydGllcyBhcmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCxcblx0Ly8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBvd24uXG5cdHZhciBrZXk7XG5cdGZvciAoa2V5IGluIG9iaikgeyAvKiovIH1cblxuXHRyZXR1cm4gdHlwZW9mIGtleSA9PT0gJ3VuZGVmaW5lZCcgfHwgaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufTtcblxuLy8gSWYgbmFtZSBpcyAnX19wcm90b19fJywgYW5kIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBpcyBhdmFpbGFibGUsIGRlZmluZSBfX3Byb3RvX18gYXMgYW4gb3duIHByb3BlcnR5IG9uIHRhcmdldFxudmFyIHNldFByb3BlcnR5ID0gZnVuY3Rpb24gc2V0UHJvcGVydHkodGFyZ2V0LCBvcHRpb25zKSB7XG5cdGlmIChkZWZpbmVQcm9wZXJ0eSAmJiBvcHRpb25zLm5hbWUgPT09ICdfX3Byb3RvX18nKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBvcHRpb25zLm5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHR2YWx1ZTogb3B0aW9ucy5uZXdWYWx1ZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0dGFyZ2V0W29wdGlvbnMubmFtZV0gPSBvcHRpb25zLm5ld1ZhbHVlO1xuXHR9XG59O1xuXG4vLyBSZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgX19wcm90b19fIGlmICdfX3Byb3RvX18nIGlzIG5vdCBhbiBvd24gcHJvcGVydHlcbnZhciBnZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGdldFByb3BlcnR5KG9iaiwgbmFtZSkge1xuXHRpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHtcblx0XHRpZiAoIWhhc093bi5jYWxsKG9iaiwgbmFtZSkpIHtcblx0XHRcdHJldHVybiB2b2lkIDA7XG5cdFx0fSBlbHNlIGlmIChnT1BEKSB7XG5cdFx0XHQvLyBJbiBlYXJseSB2ZXJzaW9ucyBvZiBub2RlLCBvYmpbJ19fcHJvdG9fXyddIGlzIGJ1Z2d5IHdoZW4gb2JqIGhhc1xuXHRcdFx0Ly8gX19wcm90b19fIGFzIGFuIG93biBwcm9wZXJ0eS4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigpIHdvcmtzLlxuXHRcdFx0cmV0dXJuIGdPUEQob2JqLCBuYW1lKS52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb2JqW25hbWVdO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBleHRlbmQoKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZTtcblx0dmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXTtcblx0dmFyIGkgPSAxO1xuXHR2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblx0dmFyIGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnYm9vbGVhbicpIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcblx0XHQvLyBza2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0aSA9IDI7XG5cdH1cblx0aWYgKHRhcmdldCA9PSBudWxsIHx8ICh0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Zm9yICg7IGkgPCBsZW5ndGg7ICsraSkge1xuXHRcdG9wdGlvbnMgPSBhcmd1bWVudHNbaV07XG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmIChvcHRpb25zICE9IG51bGwpIHtcblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAobmFtZSBpbiBvcHRpb25zKSB7XG5cdFx0XHRcdHNyYyA9IGdldFByb3BlcnR5KHRhcmdldCwgbmFtZSk7XG5cdFx0XHRcdGNvcHkgPSBnZXRQcm9wZXJ0eShvcHRpb25zLCBuYW1lKTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICh0YXJnZXQgIT09IGNvcHkpIHtcblx0XHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0XHRpZiAoZGVlcCAmJiBjb3B5ICYmIChpc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGlzQXJyYXkoY29weSkpKSkge1xuXHRcdFx0XHRcdFx0aWYgKGNvcHlJc0FycmF5KSB7XG5cdFx0XHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGNsb25lID0gc3JjICYmIGlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdFx0c2V0UHJvcGVydHkodGFyZ2V0LCB7IG5hbWU6IG5hbWUsIG5ld1ZhbHVlOiBleHRlbmQoZGVlcCwgY2xvbmUsIGNvcHkpIH0pO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGNvcHkgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0XHRzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZTogbmFtZSwgbmV3VmFsdWU6IGNvcHkgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG4iLCAiaW1wb3J0IHsgUGx1Z2luLCBNYXJrZG93blZpZXcsIFdvcmtzcGFjZUxlYWYgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IHsgREVGQVVMVF9TRVRUSU5HUywgTEFOR1VBR0VfSUNPTlNfREFUQSwgQ29kZVN0eWxlclNldHRpbmdzIH0gZnJvbSBcIi4vU2V0dGluZ3NcIjtcbmltcG9ydCB7IFNldHRpbmdzVGFiIH0gZnJvbSBcIi4vU2V0dGluZ3NUYWJcIjtcbmltcG9ydCB7IHJlbW92ZVN0eWxlc0FuZENsYXNzZXMsIHVwZGF0ZVN0eWxpbmcgfSBmcm9tIFwiLi9BcHBseVN0eWxpbmdcIjtcbmltcG9ydCB7IGNyZWF0ZUNvZGVibG9ja0NvZGVNaXJyb3JFeHRlbnNpb25zIH0gZnJvbSBcIi4vRWRpdGluZ1ZpZXdcIjtcbmltcG9ydCB7IGRlc3Ryb3lSZWFkaW5nTW9kZUVsZW1lbnRzLCBleGVjdXRlQ29kZU11dGF0aW9uT2JzZXJ2ZXIsIHJlYWRpbmdWaWV3Q29kZWJsb2NrRGVjb3JhdGluZ1Bvc3RQcm9jZXNzb3IsIHJlYWRpbmdWaWV3SW5saW5lRGVjb3JhdGluZ1Bvc3RQcm9jZXNzb3IgfSBmcm9tIFwiLi9SZWFkaW5nVmlld1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2RlU3R5bGVyUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblx0c2V0dGluZ3M6IENvZGVTdHlsZXJTZXR0aW5ncztcblx0ZXhlY3V0ZUNvZGVNdXRhdGlvbk9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuXHRsYW5ndWFnZUljb25zOiBSZWNvcmQ8c3RyaW5nLHN0cmluZz47XG5cdHNpemVzOiB7XG5cdFx0Zm9udDogc3RyaW5nO1xuXHRcdHpvb206IHN0cmluZztcblx0fTtcblx0XG5cdGFzeW5jIG9ubG9hZCgpIHtcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpOyAvLyBMb2FkIFNldHRpbmdzXG5cdFx0Y29uc3Qgc2V0dGluZ3NUYWIgPSBuZXcgU2V0dGluZ3NUYWIodGhpcy5hcHAsdGhpcyk7XG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKHNldHRpbmdzVGFiKTtcblxuXHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvZGUtc3R5bGVyXCIpOyAvLyBMb2FkIFN0eWxlc1xuXHRcdHVwZGF0ZVN0eWxpbmcodGhpcy5zZXR0aW5ncyx0aGlzLmFwcCk7XG5cblx0XHR0aGlzLmxhbmd1YWdlSWNvbnMgPSBPYmplY3Qua2V5cyhMQU5HVUFHRV9JQ09OU19EQVRBKS5yZWR1Y2UoKHJlc3VsdDoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIGtleTogc3RyaW5nKSA9PiB7IC8vIExvYWQgSWNvbnNcblx0XHRcdHJlc3VsdFtrZXldID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIj4ke0xBTkdVQUdFX0lDT05TX0RBVEFba2V5XX08L3N2Zz5gXSwgeyB0eXBlOiBcImltYWdlL3N2Zyt4bWxcIiB9KSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0se30pO1xuXHRcdHRoaXMuc2l6ZXMgPSB7XG5cdFx0XHRmb250OiBkb2N1bWVudC5ib2R5LmdldENzc1Byb3BlcnR5VmFsdWUoXCItLWZvbnQtdGV4dC1zaXplXCIpLFxuXHRcdFx0em9vbTogZG9jdW1lbnQuYm9keS5nZXRDc3NQcm9wZXJ0eVZhbHVlKFwiLS16b29tLWZhY3RvclwiKSxcblx0XHR9O1xuXG5cdFx0dGhpcy5leGVjdXRlQ29kZU11dGF0aW9uT2JzZXJ2ZXIgPSBleGVjdXRlQ29kZU11dGF0aW9uT2JzZXJ2ZXI7IC8vIEFkZCBleGVjdXRlIGNvZGUgbXV0YXRpb24gb2JzZXJ2ZXJcblx0XHRcblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Qb3N0UHJvY2Vzc29yKGFzeW5jIChlbCxjdHgpID0+IHthd2FpdCByZWFkaW5nVmlld0NvZGVibG9ja0RlY29yYXRpbmdQb3N0UHJvY2Vzc29yKGVsLGN0eCx0aGlzKTt9KTsgLy8gQWRkIGNvZGVibG9jayBkZWNvcmF0aW5nIG1hcmtkb3duUG9zdFByb2Nlc3NvclxuXHRcdHRoaXMucmVnaXN0ZXJNYXJrZG93blBvc3RQcm9jZXNzb3IoYXN5bmMgKGVsLGN0eCkgPT4ge2F3YWl0IHJlYWRpbmdWaWV3SW5saW5lRGVjb3JhdGluZ1Bvc3RQcm9jZXNzb3IoZWwsY3R4LHRoaXMpO30pOyAvLyBBZGQgaW5saW5lIGNvZGUgZGVjb3JhdGluZyBtYXJrZG93blBvc3RQcm9jZXNzb3JcblxuXHRcdHRoaXMucmVnaXN0ZXJFZGl0b3JFeHRlbnNpb24oY3JlYXRlQ29kZWJsb2NrQ29kZU1pcnJvckV4dGVuc2lvbnModGhpcy5zZXR0aW5ncyx0aGlzLmxhbmd1YWdlSWNvbnMpKTsgLy8gQWRkIGNvZGVtaXJyb3IgZXh0ZW5zaW9uc1xuXG5cdFx0bGV0IHpvb21UaW1lb3V0OiBOb2RlSlMuVGltZW91dCA9IHNldFRpbWVvdXQoKCk9Pnt9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cblx0XHR0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKFwiY3NzLWNoYW5nZVwiLCgpPT57XG5cdFx0XHR1cGRhdGVTdHlsaW5nKHRoaXMuc2V0dGluZ3MsdGhpcy5hcHApOyAvLyBVcGRhdGUgc3R5bGluZyBvbiBjc3MgY2hhbmdlc1xuXHRcdFx0Y29uc3QgY3VycmVudEZvbnRTaXplID0gZG9jdW1lbnQuYm9keS5nZXRDc3NQcm9wZXJ0eVZhbHVlKFwiLS1mb250LXRleHQtc2l6ZVwiKTtcblx0XHRcdGlmICh0aGlzLnNpemVzLmZvbnQgIT09IGN1cnJlbnRGb250U2l6ZSkge1xuXHRcdFx0XHR0aGlzLnNpemVzLmZvbnQgPSBjdXJyZW50Rm9udFNpemU7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh6b29tVGltZW91dCk7XG5cdFx0XHRcdHpvb21UaW1lb3V0ID0gc2V0VGltZW91dCgoKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVyZW5kZXJQcmV2aWV3KCk7IC8vIFJlLXJlbmRlciBvbiBmb250IHNpemUgY2hhbmdlc1xuXHRcdFx0XHR9LDEwMDApO1xuXHRcdFx0fVxuXHRcdH0sdGhpcykpO1xuXHRcdHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oXCJyZXNpemVcIiwoKT0+e1xuXHRcdFx0Y29uc3QgY3VycmVudFpvb21TaXplID0gZG9jdW1lbnQuYm9keS5nZXRDc3NQcm9wZXJ0eVZhbHVlKFwiLS16b29tLWZhY3RvclwiKTtcblx0XHRcdGlmICh0aGlzLnNpemVzLnpvb20gIT09IGN1cnJlbnRab29tU2l6ZSkge1xuXHRcdFx0XHR0aGlzLnNpemVzLnpvb20gPSBjdXJyZW50Wm9vbVNpemU7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh6b29tVGltZW91dCk7XG5cdFx0XHRcdHpvb21UaW1lb3V0ID0gc2V0VGltZW91dCgoKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVyZW5kZXJQcmV2aWV3KCk7IC8vIFJlLXJlbmRlciBvbiB6b29tIGNoYW5nZXNcblx0XHRcdFx0fSwxMDAwKTtcblx0XHRcdH1cblx0XHR9LHRoaXMpKTtcblxuXHRcdHRoaXMuYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KCgpPT57dGhpcy5yZXJlbmRlclByZXZpZXcoKTt9KTsgLy8gQWRkIGRlY29yYXRpb24gb24gZW5hYmxpbmcgb2YgcGx1Z2luXG5cblx0XHRjb25zb2xlLmxvZyhcIkxvYWRlZCBwbHVnaW46IENvZGUgU3R5bGVyXCIpO1xuXHR9XG5cdFxuXHRvbnVubG9hZCgpIHtcblx0XHR0aGlzLmV4ZWN1dGVDb2RlTXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0cmVtb3ZlU3R5bGVzQW5kQ2xhc3NlcygpO1xuXHRcdGRlc3Ryb3lSZWFkaW5nTW9kZUVsZW1lbnRzKCk7XG5cdFx0Zm9yIChjb25zdCB1cmwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmxhbmd1YWdlSWNvbnMpKSAvLyBVbmxvYWQgaWNvbnNcblx0XHRcdFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcblx0XHRjb25zb2xlLmxvZyhcIlVubG9hZGVkIHBsdWdpbjogQ29kZSBTdHlsZXJcIik7XG5cdH1cblxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHN0cnVjdHVyZWRDbG9uZShERUZBVUxUX1NFVFRJTkdTKSwgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcblx0fVxuXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuXHRcdHRoaXMuYXBwLndvcmtzcGFjZS51cGRhdGVPcHRpb25zKCk7XG5cdFx0dXBkYXRlU3R5bGluZyh0aGlzLnNldHRpbmdzLHRoaXMuYXBwKTtcblx0fVxuXG5cdHJlcmVuZGVyUHJldmlldygpIHtcblx0XHR0aGlzLmFwcC53b3Jrc3BhY2UuaXRlcmF0ZVJvb3RMZWF2ZXMoKGxlYWY6IFdvcmtzcGFjZUxlYWYpID0+IHtcblx0XHRcdGlmIChsZWFmLnZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcgJiYgbGVhZi52aWV3LmdldE1vZGUoKSA9PT0gXCJwcmV2aWV3XCIpXG5cdFx0XHRcdGxlYWYudmlldy5wcmV2aWV3TW9kZS5yZXJlbmRlcih0cnVlKTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8vIFR5cGluZ1xuZXhwb3J0IHR5cGUgSEVYID0gYCMke3N0cmluZ31gO1xuZXhwb3J0IHR5cGUgQ1NTID0gYC0tJHtzdHJpbmd9YDtcbmV4cG9ydCB0eXBlIENvbG91ciA9IEhFWCB8IENTUztcbmV4cG9ydCB0eXBlIFBlcmNlbnRhZ2UgPSBgJHtudW1iZXJ9JWA7XG5leHBvcnQgdHlwZSBEaXNwbGF5ID0gXCJub25lXCIgfCBcImlmX2hlYWRlcl9zaG93blwiIHwgXCJhbHdheXNcIjtcblxuLy8gSW50ZXJmYWNlIENyZWF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIENvZGVTdHlsZXJUaGVtZU1vZGVDb2xvdXJzIHtcblx0Y29kZWJsb2NrOiB7XG5cdFx0YmFja2dyb3VuZENvbG91cjogQ29sb3VyO1xuXHRcdHRleHRDb2xvdXI6IENvbG91cjtcblx0fSxcblx0Z3V0dGVyOiB7XG5cdFx0YmFja2dyb3VuZENvbG91cjogQ29sb3VyO1xuXHRcdHRleHRDb2xvdXI6IENvbG91cjtcblx0XHRhY3RpdmVUZXh0Q29sb3VyOiBDb2xvdXI7XG5cdH0sXG5cdGhlYWRlcjoge1xuXHRcdGJhY2tncm91bmRDb2xvdXI6IENvbG91cjtcblx0XHR0aXRsZToge1xuXHRcdFx0dGV4dENvbG91cjogQ29sb3VyO1xuXHRcdH0sXG5cdFx0bGFuZ3VhZ2VUYWc6IHtcblx0XHRcdGJhY2tncm91bmRDb2xvdXI6IENvbG91cjtcblx0XHRcdHRleHRDb2xvdXI6IENvbG91cjtcblx0XHR9LFxuXHRcdGxpbmVDb2xvdXI6IENvbG91cjtcblx0fSxcblx0aGlnaGxpZ2h0czoge1xuXHRcdGFjdGl2ZUNvZGVibG9ja0xpbmVDb2xvdXI6IENvbG91cjtcblx0XHRhY3RpdmVFZGl0b3JMaW5lQ29sb3VyOiBDb2xvdXI7XG5cdFx0ZGVmYXVsdENvbG91cjogQ29sb3VyO1xuXHRcdGFsdGVybmF0aXZlSGlnaGxpZ2h0czogUmVjb3JkPHN0cmluZyxDb2xvdXI+O1xuXHR9LFxuXHRpbmxpbmU6IHtcblx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBDb2xvdXI7XG5cdFx0dGV4dENvbG91cjogQ29sb3VyO1xuXHRcdGFjdGl2ZVRleHRDb2xvdXI6IENvbG91cjtcblx0XHR0aXRsZVRleHRDb2xvdXI6IENvbG91clxuXHR9XG5cdGFkdmFuY2VkOiB7XG5cdFx0YnV0dG9uQ29sb3VyOiBDb2xvdXI7XG5cdFx0YnV0dG9uQWN0aXZlQ29sb3VyOiBDb2xvdXI7XG5cdH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZVN0eWxlclRoZW1lU2V0dGluZ3Mge1xuXHRjb2RlYmxvY2s6IHtcblx0XHRsaW5lTnVtYmVyczogYm9vbGVhbjtcblx0XHR1bndyYXBMaW5lczogYm9vbGVhbjtcblx0XHR3cmFwTGluZXNBY3RpdmU6IGJvb2xlYW47XG5cdFx0Y3VydmF0dXJlOiBudW1iZXI7XG5cdH0sXG5cdGd1dHRlcjoge1xuXHRcdGhpZ2hsaWdodDogYm9vbGVhbjtcblx0XHRhY3RpdmVMaW5lOiBib29sZWFuO1xuXHR9LFxuXHRoZWFkZXI6IHtcblx0XHR0aXRsZToge1xuXHRcdFx0dGV4dEZvbnQ6IHN0cmluZztcblx0XHRcdHRleHRCb2xkOiBib29sZWFuO1xuXHRcdFx0dGV4dEl0YWxpYzogYm9vbGVhbjtcblx0XHR9LFxuXHRcdGxhbmd1YWdlVGFnOiB7XG5cdFx0XHRkaXNwbGF5OiBEaXNwbGF5O1xuXHRcdFx0dGV4dEZvbnQ6IHN0cmluZztcblx0XHRcdHRleHRCb2xkOiBib29sZWFuO1xuXHRcdFx0dGV4dEl0YWxpYzogYm9vbGVhbjtcblx0XHR9LFxuXHRcdGxhbmd1YWdlSWNvbjoge1xuXHRcdFx0ZGlzcGxheTogRGlzcGxheTtcblx0XHRcdGRpc3BsYXlDb2xvdXI6IGJvb2xlYW47XG5cdFx0fSxcblx0XHRmb250U2l6ZTogbnVtYmVyO1xuXHRcdGNvbGxhcHNlUGxhY2Vob2xkZXI6IHN0cmluZztcblx0fSxcblx0aGlnaGxpZ2h0czoge1xuXHRcdGFjdGl2ZUNvZGVibG9ja0xpbmU6IGJvb2xlYW47XG5cdFx0YWN0aXZlRWRpdG9yTGluZTogYm9vbGVhbjtcblx0fSxcblx0aW5saW5lOiB7XG5cdFx0c3ludGF4SGlnaGxpZ2h0OiBib29sZWFuO1xuXHRcdGZvbnRXZWlnaHQ6IG51bWJlcjtcblx0XHRjdXJ2YXR1cmU6IG51bWJlcjtcblx0XHRwYWRkaW5nVmVydGljYWw6IG51bWJlcjtcblx0XHRwYWRkaW5nSG9yaXpvbnRhbDogbnVtYmVyO1xuXHRcdG1hcmdpbkhvcml6b250YWw6IG51bWJlcjtcblx0XHR0aXRsZUZvbnRXZWlnaHQ6IG51bWJlcjtcblx0fSxcblx0YWR2YW5jZWQ6IHtcblx0XHRncmFkaWVudEhpZ2hsaWdodHM6IGJvb2xlYW47XG5cdFx0Z3JhZGllbnRIaWdobGlnaHRzQ29sb3VyU3RvcDogUGVyY2VudGFnZTtcblx0XHRsYW5ndWFnZUJvcmRlckNvbG91cjogYm9vbGVhbjtcblx0XHRsYW5ndWFnZUJvcmRlcldpZHRoOiBudW1iZXI7XG5cdFx0aWNvblNpemU6IG51bWJlcjtcblx0fTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZVN0eWxlclRoZW1lQ29sb3VycyB7XG5cdGxpZ2h0OiBDb2RlU3R5bGVyVGhlbWVNb2RlQ29sb3Vycztcblx0ZGFyazogQ29kZVN0eWxlclRoZW1lTW9kZUNvbG91cnM7XG59XG5leHBvcnQgaW50ZXJmYWNlIENvZGVTdHlsZXJUaGVtZSB7XG5cdHNldHRpbmdzOiBDb2RlU3R5bGVyVGhlbWVTZXR0aW5ncztcblx0Y29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZVN0eWxlclNldHRpbmdzIHtcblx0dGhlbWVzOiBSZWNvcmQ8c3RyaW5nLENvZGVTdHlsZXJUaGVtZT47XG5cdHNlbGVjdGVkVGhlbWU6IHN0cmluZztcblx0Y3VycmVudFRoZW1lOiBDb2RlU3R5bGVyVGhlbWU7XG5cdG5ld1RoZW1lOiBzdHJpbmc7XG5cdG5ld0hpZ2hsaWdodDogc3RyaW5nO1xuXHRkZWNvcmF0ZVByaW50OiBib29sZWFuO1xuXHRleGNsdWRlZExhbmd1YWdlczogc3RyaW5nO1xuXHRleGNsdWRlZENvZGVibG9ja3M6IHN0cmluZztcblx0c3BlY2lhbExhbmd1YWdlczogQXJyYXk8c3RyaW5nPjtcblx0cmVkaXJlY3RMYW5ndWFnZXM6IFJlY29yZDxzdHJpbmcse2NvbG91cj86IENvbG91ciwgaWNvbj86IHN0cmluZ30+XG59XG5cbi8vIFRoZW1lIERlZmF1bHRzXG5jb25zdCBUSEVNRV9ERUZBVUxUX1NFVFRJTkdTOiBDb2RlU3R5bGVyVGhlbWVTZXR0aW5ncyA9IHtcblx0Y29kZWJsb2NrOiB7XG5cdFx0bGluZU51bWJlcnM6IHRydWUsXG5cdFx0dW53cmFwTGluZXM6IHRydWUsXG5cdFx0d3JhcExpbmVzQWN0aXZlOiBmYWxzZSxcblx0XHRjdXJ2YXR1cmU6IDQsXG5cdH0sXG5cdGd1dHRlcjoge1xuXHRcdGhpZ2hsaWdodDogdHJ1ZSxcblx0XHRhY3RpdmVMaW5lOiBmYWxzZSxcblx0fSxcblx0aGVhZGVyOiB7XG5cdFx0dGl0bGU6IHtcblx0XHRcdHRleHRGb250OiBcIlwiLFxuXHRcdFx0dGV4dEJvbGQ6IGZhbHNlLFxuXHRcdFx0dGV4dEl0YWxpYzogdHJ1ZSxcblx0XHR9LFxuXHRcdGxhbmd1YWdlVGFnOiB7XG5cdFx0XHRkaXNwbGF5OiBcIm5vbmVcIixcblx0XHRcdHRleHRGb250OiBcIlwiLFxuXHRcdFx0dGV4dEJvbGQ6IHRydWUsXG5cdFx0XHR0ZXh0SXRhbGljOiBmYWxzZSxcblx0XHR9LFxuXHRcdGxhbmd1YWdlSWNvbjoge1xuXHRcdFx0ZGlzcGxheTogXCJub25lXCIsXG5cdFx0XHRkaXNwbGF5Q29sb3VyOiB0cnVlLFxuXHRcdH0sXG5cdFx0Zm9udFNpemU6IDE0LFxuXHRcdGNvbGxhcHNlUGxhY2Vob2xkZXI6IFwiXCIsXG5cdH0sXG5cdGhpZ2hsaWdodHM6IHtcblx0XHRhY3RpdmVDb2RlYmxvY2tMaW5lOiBmYWxzZSxcblx0XHRhY3RpdmVFZGl0b3JMaW5lOiBmYWxzZSxcblx0fSxcblx0aW5saW5lOiB7XG5cdFx0c3ludGF4SGlnaGxpZ2h0OiB0cnVlLFxuXHRcdGZvbnRXZWlnaHQ6IDQsXG5cdFx0Y3VydmF0dXJlOiA2LFxuXHRcdHBhZGRpbmdWZXJ0aWNhbDogNSxcblx0XHRwYWRkaW5nSG9yaXpvbnRhbDogNSxcblx0XHRtYXJnaW5Ib3Jpem9udGFsOiAwLFxuXHRcdHRpdGxlRm9udFdlaWdodDogOCxcblx0fSxcblx0YWR2YW5jZWQ6IHtcblx0XHRncmFkaWVudEhpZ2hsaWdodHM6IGZhbHNlLFxuXHRcdGdyYWRpZW50SGlnaGxpZ2h0c0NvbG91clN0b3A6IFwiNzAlXCIsXG5cdFx0bGFuZ3VhZ2VCb3JkZXJDb2xvdXI6IGZhbHNlLFxuXHRcdGxhbmd1YWdlQm9yZGVyV2lkdGg6IDUsXG5cdFx0aWNvblNpemU6IDI4LFxuXHR9LFxufTtcbmV4cG9ydCBjb25zdCBUSEVNRV9GQUxMQkFDS19DT0xPVVJTOiBDb2RlU3R5bGVyVGhlbWVNb2RlQ29sb3VycyA9IHtcblx0Y29kZWJsb2NrOiB7XG5cdFx0YmFja2dyb3VuZENvbG91cjogXCItLWNvZGUtYmFja2dyb3VuZFwiLFxuXHRcdHRleHRDb2xvdXI6IFwiLS1jb2RlLW5vcm1hbFwiLFxuXHR9LFxuXHRndXR0ZXI6IHtcblx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIi0tY29kZS1iYWNrZ3JvdW5kXCIsXG5cdFx0dGV4dENvbG91cjogXCItLXRleHQtZmFpbnRcIixcblx0XHRhY3RpdmVUZXh0Q29sb3VyOiBcIi0tdGV4dC1tdXRlZFwiLFxuXHR9LFxuXHRoZWFkZXI6IHtcblx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIi0tY29kZS1iYWNrZ3JvdW5kXCIsXG5cdFx0dGl0bGU6IHtcblx0XHRcdHRleHRDb2xvdXI6IFwiLS1jb2RlLWNvbW1lbnRcIixcblx0XHR9LFxuXHRcdGxhbmd1YWdlVGFnOiB7XG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIi0tY29kZS1iYWNrZ3JvdW5kXCIsXG5cdFx0XHR0ZXh0Q29sb3VyOiBcIi0tY29kZS1jb21tZW50XCIsXG5cdFx0fSxcblx0XHRsaW5lQ29sb3VyOiBcIi0tY29sb3ItYmFzZS0zMFwiLFxuXHR9LFxuXHRoaWdobGlnaHRzOiB7XG5cdFx0YWN0aXZlQ29kZWJsb2NrTGluZUNvbG91cjogXCItLWNvbG9yLWJhc2UtMzBcIixcblx0XHRhY3RpdmVFZGl0b3JMaW5lQ29sb3VyOiBcIi0tY29sb3ItYmFzZS0yMFwiLFxuXHRcdGRlZmF1bHRDb2xvdXI6IFwiLS10ZXh0LWhpZ2hsaWdodC1iZ1wiLFxuXHRcdGFsdGVybmF0aXZlSGlnaGxpZ2h0czoge30sXG5cdH0sXG5cdGlubGluZToge1xuXHRcdGJhY2tncm91bmRDb2xvdXI6IFwiLS1jb2RlLWJhY2tncm91bmRcIixcblx0XHR0ZXh0Q29sb3VyOiBcIi0tY29kZS1ub3JtYWxcIixcblx0XHRhY3RpdmVUZXh0Q29sb3VyOiBcIi0tY29kZS1ub3JtYWxcIixcblx0XHR0aXRsZVRleHRDb2xvdXI6IFwiLS1jb2RlLWNvbW1lbnRcIixcblx0fSxcblx0YWR2YW5jZWQ6IHtcblx0XHRidXR0b25Db2xvdXI6IFwiLS10ZXh0LW11dGVkXCIsXG5cdFx0YnV0dG9uQWN0aXZlQ29sb3VyOiBcIi0tdGV4dC1ub3JtYWxcIixcblx0fVxufTtcblxuLy8gVGhlbWUgQ3JlYXRpb25cbmNvbnN0IERFRkFVTFRfVEhFTUU6IENvZGVTdHlsZXJUaGVtZSA9IHtcblx0c2V0dGluZ3M6IFRIRU1FX0RFRkFVTFRfU0VUVElOR1MsXG5cdGNvbG91cnM6IHtcblx0XHRsaWdodDogVEhFTUVfRkFMTEJBQ0tfQ09MT1VSUyxcblx0XHRkYXJrOiBUSEVNRV9GQUxMQkFDS19DT0xPVVJTLFxuXHR9LFxufTtcbmNvbnN0IFNPTEFSSVpFRF9USEVNRTogQ29kZVN0eWxlclRoZW1lID0ge1xuXHRzZXR0aW5nczogVEhFTUVfREVGQVVMVF9TRVRUSU5HUyxcblx0Y29sb3Vyczoge1xuXHRcdGxpZ2h0OiB7XG5cdFx0XHRjb2RlYmxvY2s6IHtcblx0XHRcdFx0YmFja2dyb3VuZENvbG91cjogXCIjRkNGNkU0XCIsXG5cdFx0XHRcdHRleHRDb2xvdXI6IFwiI2JhYmFiYVwiLFxuXHRcdFx0fSxcblx0XHRcdGd1dHRlcjoge1xuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIiNFREU4RDZcIixcblx0XHRcdFx0dGV4dENvbG91cjogXCIjNmM2YzZjXCIsXG5cdFx0XHRcdGFjdGl2ZVRleHRDb2xvdXI6IFwiIzhjOGM4Y1wiLFxuXHRcdFx0fSxcblx0XHRcdGhlYWRlcjoge1xuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIiNENUNDQjRcIixcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiM4NjY3MDRcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFuZ3VhZ2VUYWc6IHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIiNCOEI1QUFcIixcblx0XHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiNDMjVGMzBcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0bGluZUNvbG91cjogXCIjRURENDg5XCIsXG5cdFx0XHR9LFxuXHRcdFx0aGlnaGxpZ2h0czoge1xuXHRcdFx0XHRhY3RpdmVDb2RlYmxvY2tMaW5lQ29sb3VyOiBcIiNFREU4RDZcIixcblx0XHRcdFx0YWN0aXZlRWRpdG9yTGluZUNvbG91cjogXCIjNjA0NjA2MzNcIixcblx0XHRcdFx0ZGVmYXVsdENvbG91cjogXCIjRTlERkJBXCIsXG5cdFx0XHRcdGFsdGVybmF0aXZlSGlnaGxpZ2h0czoge30sXG5cdFx0XHR9LFxuXHRcdFx0aW5saW5lOiB7XG5cdFx0XHRcdGJhY2tncm91bmRDb2xvdXI6IFwiI0ZDRjZFNFwiLFxuXHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiNiYWJhYmFcIixcblx0XHRcdFx0YWN0aXZlVGV4dENvbG91cjogXCIjYmFiYWJhXCIsXG5cdFx0XHRcdHRpdGxlVGV4dENvbG91cjogXCIjQzI1RjMwXCIsXG5cdFx0XHR9LFxuXHRcdFx0YWR2YW5jZWQ6IHtcblx0XHRcdFx0YnV0dG9uQ29sb3VyOiBcIi0tdGV4dC1tdXRlZFwiLFxuXHRcdFx0XHRidXR0b25BY3RpdmVDb2xvdXI6IFwiLS10ZXh0LW5vcm1hbFwiLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGFyazoge1xuXHRcdFx0Y29kZWJsb2NrOiB7XG5cdFx0XHRcdGJhY2tncm91bmRDb2xvdXI6IFwiIzAwMmIzNlwiLFxuXHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiNiYWJhYmFcIixcblx0XHRcdH0sXG5cdFx0XHRndXR0ZXI6IHtcblx0XHRcdFx0YmFja2dyb3VuZENvbG91cjogXCIjMDczNjQyXCIsXG5cdFx0XHRcdHRleHRDb2xvdXI6IFwiIzZjNmM2Y1wiLFxuXHRcdFx0XHRhY3RpdmVUZXh0Q29sb3VyOiBcIiM0YzRjNGNcIixcblx0XHRcdH0sXG5cdFx0XHRoZWFkZXI6IHtcblx0XHRcdFx0YmFja2dyb3VuZENvbG91cjogXCIjMGE0NTU0XCIsXG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dGV4dENvbG91cjogXCIjZGFkYWRhXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhbmd1YWdlVGFnOiB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZENvbG91cjogXCIjMDA4MDgwXCIsXG5cdFx0XHRcdFx0dGV4dENvbG91cjogXCIjMDAwMDAwXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxpbmVDb2xvdXI6IFwiIzQ2Y2NlZFwiLFxuXHRcdFx0fSxcblx0XHRcdGhpZ2hsaWdodHM6IHtcblx0XHRcdFx0YWN0aXZlQ29kZWJsb2NrTGluZUNvbG91cjogXCIjMDczNjQyXCIsXG5cdFx0XHRcdGFjdGl2ZUVkaXRvckxpbmVDb2xvdXI6IFwiIzQ2OGVlYjMzXCIsXG5cdFx0XHRcdGRlZmF1bHRDb2xvdXI6IFwiIzA1NGI1Y1wiLFxuXHRcdFx0XHRhbHRlcm5hdGl2ZUhpZ2hsaWdodHM6IHt9LFxuXHRcdFx0fSxcblx0XHRcdGlubGluZToge1xuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIiMwMDJiMzZcIixcblx0XHRcdFx0dGV4dENvbG91cjogXCIjYmFiYWJhXCIsXG5cdFx0XHRcdGFjdGl2ZVRleHRDb2xvdXI6IFwiI2JhYmFiYVwiLFxuXHRcdFx0XHR0aXRsZVRleHRDb2xvdXI6IFwiIzAwMDAwMFwiLFxuXHRcdFx0fSxcblx0XHRcdGFkdmFuY2VkOiB7XG5cdFx0XHRcdGJ1dHRvbkNvbG91cjogXCItLXRleHQtbXV0ZWRcIixcblx0XHRcdFx0YnV0dG9uQWN0aXZlQ29sb3VyOiBcIi0tdGV4dC1ub3JtYWxcIixcblx0XHRcdH1cblx0XHR9LFxuXHR9LFxufTtcblxuLy8gUGx1Z2luIGRlZmF1bHQgc2V0dGluZ3NcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFVFRJTkdTOiBDb2RlU3R5bGVyU2V0dGluZ3MgPSB7XG5cdHRoZW1lczoge1xuXHRcdFwiRGVmYXVsdFwiOiBERUZBVUxUX1RIRU1FLFxuXHRcdFwiU29sYXJpemVkXCI6IFNPTEFSSVpFRF9USEVNRSxcblx0fSxcblx0c2VsZWN0ZWRUaGVtZTogXCJEZWZhdWx0XCIsXG5cdGN1cnJlbnRUaGVtZTogc3RydWN0dXJlZENsb25lKERFRkFVTFRfVEhFTUUpLFxuXHRuZXdUaGVtZTogXCJcIixcblx0bmV3SGlnaGxpZ2h0OiBcIlwiLFxuXHRkZWNvcmF0ZVByaW50OiB0cnVlLFxuXHRleGNsdWRlZExhbmd1YWdlczogXCJhZC0qXCIsXG5cdGV4Y2x1ZGVkQ29kZWJsb2NrczogXCJkYXRhdmlldywgZGF0YXZpZXdqcywgbWF0aFwiLFxuXHRzcGVjaWFsTGFuZ3VhZ2VzOiBbXCJecHJldmlldyRcIixcIl5pbmNsdWRlJFwiLFwiXm91dHB1dCRcIixcIl5ydW4tLiskXCJdLFxuXHRyZWRpcmVjdExhbmd1YWdlczoge30sXG59O1xuXG4vLyBDb25zdGFudHNcbmV4cG9ydCBjb25zdCBQQVJBTUVURVJTID0gW1widGl0bGVcIixcImZvbGRcIixcImxuXCIsXCJ1bndyYXBcIixcImlnbm9yZVwiXTtcbmV4cG9ydCBjb25zdCBUUkFOU0lUSU9OX0xFTkdUSCA9IDI0MDsgLy8gMjQwbXNcblxuY29uc3QgUFJJU01fTEFOR1VBR0VTOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHsgLy8gUHJpc20gTGFuZ3VhZ2VzOiBodHRwczovL3ByaXNtanMuY29tL3BsdWdpbnMvc2hvdy1sYW5ndWFnZS9cblx0Ly8gXCJub25lXCI6IFwiUGxhaW4gdGV4dFwiLCAvLyBOT1RFOiBPYnNpZGlhbiB1c2VzIHRoaXMgZm9yIGNvZGVibG9ja3Mgd2l0aG91dCBsYW5ndWFnZSBuYW1lc1xuXHRcInBsYWluXCI6IFwiUGxhaW4gdGV4dFwiLFxuXHRcInBsYWludGV4dFwiOiBcIlBsYWluIHRleHRcIixcblx0XCJ0ZXh0XCI6IFwiUGxhaW4gdGV4dFwiLFxuXHRcInR4dFwiOiBcIlBsYWluIHRleHRcIixcblx0XCJodG1sXCI6IFwiSFRNTFwiLFxuXHRcInhtbFwiOiBcIlhNTFwiLFxuXHRcInN2Z1wiOiBcIlNWR1wiLFxuXHRcIm1hdGhtbFwiOiBcIk1hdGhNTFwiLFxuXHRcInNzbWxcIjogXCJTU01MXCIsXG5cdFwicnNzXCI6IFwiUlNTXCIsXG5cdFwiY3NzXCI6IFwiQ1NTXCIsXG5cdFwiY2xpa2VcIjogXCJDLWxpa2VcIixcblx0XCJqc1wiOiBcIkphdmFTY3JpcHRcIixcblx0XCJhYmFwXCI6IFwiQUJBUFwiLFxuXHRcImFibmZcIjogXCJBQk5GXCIsXG5cdFwiYWxcIjogXCJBTFwiLFxuXHRcImFudGxyNFwiOiBcIkFOVExSNFwiLFxuXHRcImc0XCI6IFwiQU5UTFI0XCIsXG5cdFwiYXBhY2hlY29uZlwiOiBcIkFwYWNoZSBDb25maWd1cmF0aW9uXCIsXG5cdFwiYXBsXCI6IFwiQVBMXCIsXG5cdFwiYXFsXCI6IFwiQVFMXCIsXG5cdFwiaW5vXCI6IFwiQXJkdWlub1wiLFxuXHRcImFyZmZcIjogXCJBUkZGXCIsXG5cdFwiYXJtYXNtXCI6IFwiQVJNIEFzc2VtYmx5XCIsXG5cdFwiYXJtLWFzbVwiOiBcIkFSTSBBc3NlbWJseVwiLFxuXHRcImFydFwiOiBcIkFydHVyb1wiLFxuXHRcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcblx0XCJhZG9jXCI6IFwiQXNjaWlEb2NcIixcblx0XCJhc3BuZXRcIjogXCJBU1AuTkVUIChDIylcIixcblx0XCJhc202NTAyXCI6IFwiNjUwMiBBc3NlbWJseVwiLFxuXHRcImFzbWF0bWVsXCI6IFwiQXRtZWwgQVZSIEFzc2VtYmx5XCIsXG5cdFwiYXV0b2hvdGtleVwiOiBcIkF1dG9Ib3RrZXlcIixcblx0XCJhdXRvaXRcIjogXCJBdXRvSXRcIixcblx0XCJhdmlzeW50aFwiOiBcIkF2aVN5bnRoXCIsXG5cdFwiYXZzXCI6IFwiQXZpU3ludGhcIixcblx0XCJhdnJvLWlkbFwiOiBcIkF2cm8gSURMXCIsXG5cdFwiYXZkbFwiOiBcIkF2cm8gSURMXCIsXG5cdFwiYXdrXCI6IFwiQVdLXCIsXG5cdFwiZ2F3a1wiOiBcIkdBV0tcIixcblx0XCJzaFwiOiBcIlNoZWxsXCIsXG5cdFwiYmFzaWNcIjogXCJCQVNJQ1wiLFxuXHRcImJiY29kZVwiOiBcIkJCY29kZVwiLFxuXHRcImJialwiOiBcIkJCalwiLFxuXHRcImJuZlwiOiBcIkJORlwiLFxuXHRcInJibmZcIjogXCJSQk5GXCIsXG5cdFwiYnFuXCI6IFwiQlFOXCIsXG5cdFwiYnNsXCI6IFwiQlNMICgxQzpFbnRlcnByaXNlKVwiLFxuXHRcIm9zY3JpcHRcIjogXCJPbmVTY3JpcHRcIixcblx0XCJjc2hhcnBcIjogXCJDI1wiLFxuXHRcImNzXCI6IFwiQyNcIixcblx0XCJkb3RuZXRcIjogXCJDI1wiLFxuXHRcImNwcFwiOiBcIkMrK1wiLFxuXHRcImNmc2NyaXB0XCI6IFwiQ0ZTY3JpcHRcIixcblx0XCJjZmNcIjogXCJDRlNjcmlwdFwiLFxuXHRcImNpbFwiOiBcIkNJTFwiLFxuXHRcImNpbGtjXCI6IFwiQ2lsay9DXCIsXG5cdFwiY2lsay1jXCI6IFwiQ2lsay9DXCIsXG5cdFwiY2lsa2NwcFwiOiBcIkNpbGsvQysrXCIsXG5cdFwiY2lsay1jcHBcIjogXCJDaWxrL0MrK1wiLFxuXHRcImNpbGtcIjogXCJDaWxrL0MrK1wiLFxuXHRcImNtYWtlXCI6IFwiQ01ha2VcIixcblx0XCJjb2JvbFwiOiBcIkNPQk9MXCIsXG5cdFwiY29mZmVlXCI6IFwiQ29mZmVlU2NyaXB0XCIsXG5cdFwiY29uY1wiOiBcIkNvbmN1cm5hc1wiLFxuXHRcImNzcFwiOiBcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCIsXG5cdFwiY3NzLWV4dHJhc1wiOiBcIkNTUyBFeHRyYXNcIixcblx0XCJjc3ZcIjogXCJDU1ZcIixcblx0XCJjdWVcIjogXCJDVUVcIixcblx0XCJkYXRhd2VhdmVcIjogXCJEYXRhV2VhdmVcIixcblx0XCJkYXhcIjogXCJEQVhcIixcblx0XCJkamFuZ29cIjogXCJEamFuZ28vSmluamEyXCIsXG5cdFwiamluamEyXCI6IFwiRGphbmdvL0ppbmphMlwiLFxuXHRcImRucy16b25lLWZpbGVcIjogXCJETlMgem9uZSBmaWxlXCIsXG5cdFwiZG5zLXpvbmVcIjogXCJETlMgem9uZSBmaWxlXCIsXG5cdFwiZG9ja2VyZmlsZVwiOiBcIkRvY2tlclwiLFxuXHRcImRvdFwiOiBcIkRPVCAoR3JhcGh2aXopXCIsXG5cdFwiZ3ZcIjogXCJET1QgKEdyYXBodml6KVwiLFxuXHRcImVibmZcIjogXCJFQk5GXCIsXG5cdFwiZWRpdG9yY29uZmlnXCI6IFwiRWRpdG9yQ29uZmlnXCIsXG5cdFwiZWpzXCI6IFwiRUpTXCIsXG5cdFwiZXRsdWFcIjogXCJFbWJlZGRlZCBMdWEgdGVtcGxhdGluZ1wiLFxuXHRcImVyYlwiOiBcIkVSQlwiLFxuXHRcImV4Y2VsLWZvcm11bGFcIjogXCJFeGNlbCBGb3JtdWxhXCIsXG5cdFwieGxzeFwiOiBcIkV4Y2VsIEZvcm11bGFcIixcblx0XCJ4bHNcIjogXCJFeGNlbCBGb3JtdWxhXCIsXG5cdFwiZnNoYXJwXCI6IFwiRiNcIixcblx0XCJmaXJlc3RvcmUtc2VjdXJpdHktcnVsZXNcIjogXCJGaXJlc3RvcmUgc2VjdXJpdHkgcnVsZXNcIixcblx0XCJmdGxcIjogXCJGcmVlTWFya2VyIFRlbXBsYXRlIExhbmd1YWdlXCIsXG5cdFwiZ21sXCI6IFwiR2FtZU1ha2VyIExhbmd1YWdlXCIsXG5cdFwiZ2FtZW1ha2VybGFuZ3VhZ2VcIjogXCJHYW1lTWFrZXIgTGFuZ3VhZ2VcIixcblx0XCJnYXBcIjogXCJHQVAgKENBUylcIixcblx0XCJnY29kZVwiOiBcIkctY29kZVwiLFxuXHRcImdkc2NyaXB0XCI6IFwiR0RTY3JpcHRcIixcblx0XCJnZWRjb21cIjogXCJHRURDT01cIixcblx0XCJnZXR0ZXh0XCI6IFwiZ2V0dGV4dFwiLFxuXHRcInBvXCI6IFwiZ2V0dGV4dFwiLFxuXHRcImdsc2xcIjogXCJHTFNMXCIsXG5cdFwiZ25cIjogXCJHTlwiLFxuXHRcImduaVwiOiBcIkdOXCIsXG5cdFwibGlua2VyLXNjcmlwdFwiOiBcIkdOVSBMaW5rZXIgU2NyaXB0XCIsXG5cdFwibGRcIjogXCJHTlUgTGlua2VyIFNjcmlwdFwiLFxuXHRcImdvLW1vZHVsZVwiOiBcIkdvIG1vZHVsZVwiLFxuXHRcImdvLW1vZFwiOiBcIkdvIG1vZHVsZVwiLFxuXHRcImdyYXBocWxcIjogXCJHcmFwaFFMXCIsXG5cdFwiaGJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuXHRcImhzXCI6IFwiSGFza2VsbFwiLFxuXHRcImhjbFwiOiBcIkhDTFwiLFxuXHRcImhsc2xcIjogXCJITFNMXCIsXG5cdFwiaHR0cFwiOiBcIkhUVFBcIixcblx0XCJocGtwXCI6IFwiSFRUUCBQdWJsaWMtS2V5LVBpbnNcIixcblx0XCJoc3RzXCI6IFwiSFRUUCBTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5XCIsXG5cdFwiaWNoaWdvamFtXCI6IFwiSWNoaWdvSmFtXCIsXG5cdFwiaWN1LW1lc3NhZ2UtZm9ybWF0XCI6IFwiSUNVIE1lc3NhZ2UgRm9ybWF0XCIsXG5cdFwiaWRyXCI6IFwiSWRyaXNcIixcblx0XCJpZ25vcmVcIjogXCIuaWdub3JlXCIsXG5cdFwiZ2l0aWdub3JlXCI6IFwiLmdpdGlnbm9yZVwiLFxuXHRcImhnaWdub3JlXCI6IFwiLmhnaWdub3JlXCIsXG5cdFwibnBtaWdub3JlXCI6IFwiLm5wbWlnbm9yZVwiLFxuXHRcImluZm9ybTdcIjogXCJJbmZvcm0gN1wiLFxuXHRcImphdmFkb2NcIjogXCJKYXZhRG9jXCIsXG5cdFwiamF2YWRvY2xpa2VcIjogXCJKYXZhRG9jLWxpa2VcIixcblx0XCJqYXZhc3RhY2t0cmFjZVwiOiBcIkphdmEgc3RhY2sgdHJhY2VcIixcblx0XCJqcVwiOiBcIkpRXCIsXG5cdFwianNkb2NcIjogXCJKU0RvY1wiLFxuXHRcImpzLWV4dHJhc1wiOiBcIkpTIEV4dHJhc1wiLFxuXHRcImpzb25cIjogXCJKU09OXCIsXG5cdFwid2VibWFuaWZlc3RcIjogXCJXZWIgQXBwIE1hbmlmZXN0XCIsXG5cdFwianNvbjVcIjogXCJKU09ONVwiLFxuXHRcImpzb25wXCI6IFwiSlNPTlBcIixcblx0XCJqc3N0YWNrdHJhY2VcIjogXCJKUyBzdGFjayB0cmFjZVwiLFxuXHRcImpzLXRlbXBsYXRlc1wiOiBcIkpTIFRlbXBsYXRlc1wiLFxuXHRcImtlZXBhbGl2ZWRcIjogXCJLZWVwYWxpdmVkIENvbmZpZ3VyZVwiLFxuXHRcImt0c1wiOiBcIktvdGxpbiBTY3JpcHRcIixcblx0XCJrdFwiOiBcIktvdGxpblwiLFxuXHRcImt1bWlyXCI6IFwiS3VNaXIgKFx1MDQxQVx1MDQ0M1x1MDQxQ1x1MDQzOFx1MDQ0MClcIixcblx0XCJrdW1cIjogXCJLdU1pciAoXHUwNDFBXHUwNDQzXHUwNDFDXHUwNDM4XHUwNDQwKVwiLFxuXHRcImxhdGV4XCI6IFwiTGFUZVhcIixcblx0XCJ0ZXhcIjogXCJUZVhcIixcblx0XCJjb250ZXh0XCI6IFwiQ29uVGVYdFwiLFxuXHRcImxpbHlwb25kXCI6IFwiTGlseVBvbmRcIixcblx0XCJseVwiOiBcIkxpbHlQb25kXCIsXG5cdFwiZW1hY3NcIjogXCJMaXNwXCIsXG5cdFwiZWxpc3BcIjogXCJMaXNwXCIsXG5cdFwiZW1hY3MtbGlzcFwiOiBcIkxpc3BcIixcblx0XCJsbHZtXCI6IFwiTExWTSBJUlwiLFxuXHRcImxvZ1wiOiBcIkxvZyBmaWxlXCIsXG5cdFwibG9sY29kZVwiOiBcIkxPTENPREVcIixcblx0XCJtYWdtYVwiOiBcIk1hZ21hIChDQVMpXCIsXG5cdFwibWRcIjogXCJNYXJrZG93blwiLFxuXHRcIm1hcmt1cC10ZW1wbGF0aW5nXCI6IFwiTWFya3VwIHRlbXBsYXRpbmdcIixcblx0XCJtYXRsYWJcIjogXCJNQVRMQUJcIixcblx0XCJtYXhzY3JpcHRcIjogXCJNQVhTY3JpcHRcIixcblx0XCJtZWxcIjogXCJNRUxcIixcblx0XCJtZXRhZm9udFwiOiBcIk1FVEFGT05UXCIsXG5cdFwibW9uZ29kYlwiOiBcIk1vbmdvREJcIixcblx0XCJtb29uXCI6IFwiTW9vblNjcmlwdFwiLFxuXHRcIm4xcWxcIjogXCJOMVFMXCIsXG5cdFwibjRqc1wiOiBcIk40SlNcIixcblx0XCJuNGpzZFwiOiBcIk40SlNcIixcblx0XCJuYW5kMnRldHJpcy1oZGxcIjogXCJOYW5kIFRvIFRldHJpcyBIRExcIixcblx0XCJuYW5pc2NyaXB0XCI6IFwiTmFuaW5vdmVsIFNjcmlwdFwiLFxuXHRcIm5hbmlcIjogXCJOYW5pbm92ZWwgU2NyaXB0XCIsXG5cdFwibmFzbVwiOiBcIk5BU01cIixcblx0XCJuZW9uXCI6IFwiTkVPTlwiLFxuXHRcIm5naW54XCI6IFwibmdpbnhcIixcblx0XCJuc2lzXCI6IFwiTlNJU1wiLFxuXHRcIm9iamVjdGl2ZWNcIjogXCJPYmplY3RpdmUtQ1wiLFxuXHRcIm9iamNcIjogXCJPYmplY3RpdmUtQ1wiLFxuXHRcIm9jYW1sXCI6IFwiT0NhbWxcIixcblx0XCJvcGVuY2xcIjogXCJPcGVuQ0xcIixcblx0XCJvcGVucWFzbVwiOiBcIk9wZW5RYXNtXCIsXG5cdFwicWFzbVwiOiBcIk9wZW5RYXNtXCIsXG5cdFwicGFyaWdwXCI6IFwiUEFSSS9HUFwiLFxuXHRcIm9iamVjdHBhc2NhbFwiOiBcIk9iamVjdCBQYXNjYWxcIixcblx0XCJwc2xcIjogXCJQQVRST0wgU2NyaXB0aW5nIExhbmd1YWdlXCIsXG5cdFwicGNheGlzXCI6IFwiUEMtQXhpc1wiLFxuXHRcInB4XCI6IFwiUEMtQXhpc1wiLFxuXHRcInBlb3BsZWNvZGVcIjogXCJQZW9wbGVDb2RlXCIsXG5cdFwicGNvZGVcIjogXCJQZW9wbGVDb2RlXCIsXG5cdFwicGhwXCI6IFwiUEhQXCIsXG5cdFwicGhwZG9jXCI6IFwiUEhQRG9jXCIsXG5cdFwicGhwLWV4dHJhc1wiOiBcIlBIUCBFeHRyYXNcIixcblx0XCJwbGFudC11bWxcIjogXCJQbGFudFVNTFwiLFxuXHRcInBsYW50dW1sXCI6IFwiUGxhbnRVTUxcIixcblx0XCJwbHNxbFwiOiBcIlBML1NRTFwiLFxuXHRcInBvd2VycXVlcnlcIjogXCJQb3dlclF1ZXJ5XCIsXG5cdFwicHFcIjogXCJQb3dlclF1ZXJ5XCIsXG5cdFwibXNjcmlwdFwiOiBcIlBvd2VyUXVlcnlcIixcblx0XCJwb3dlcnNoZWxsXCI6IFwiUG93ZXJTaGVsbFwiLFxuXHRcInByb21xbFwiOiBcIlByb21RTFwiLFxuXHRcInByb3BlcnRpZXNcIjogXCIucHJvcGVydGllc1wiLFxuXHRcInByb3RvYnVmXCI6IFwiUHJvdG9jb2wgQnVmZmVyc1wiLFxuXHRcInB1cmViYXNpY1wiOiBcIlB1cmVCYXNpY1wiLFxuXHRcInBiZmFzbVwiOiBcIlB1cmVCYXNpY1wiLFxuXHRcInB1cnNcIjogXCJQdXJlU2NyaXB0XCIsXG5cdFwicHlcIjogXCJQeXRob25cIixcblx0XCJxc2hhcnBcIjogXCJRI1wiLFxuXHRcInFzXCI6IFwiUSNcIixcblx0XCJxXCI6IFwiUSAoa2RiKyBkYXRhYmFzZSlcIixcblx0XCJxbWxcIjogXCJRTUxcIixcblx0XCJya3RcIjogXCJSYWNrZXRcIixcblx0XCJjc2h0bWxcIjogXCJSYXpvciBDI1wiLFxuXHRcInJhem9yXCI6IFwiUmF6b3IgQyNcIixcblx0XCJqc3hcIjogXCJSZWFjdCBKU1hcIixcblx0XCJ0c3hcIjogXCJSZWFjdCBUU1hcIixcblx0XCJyZW5weVwiOiBcIlJlbidweVwiLFxuXHRcInJweVwiOiBcIlJlbidweVwiLFxuXHRcInJlc1wiOiBcIlJlU2NyaXB0XCIsXG5cdFwicmVzdFwiOiBcInJlU1QgKHJlU3RydWN0dXJlZFRleHQpXCIsXG5cdFwicm9ib3RmcmFtZXdvcmtcIjogXCJSb2JvdCBGcmFtZXdvcmtcIixcblx0XCJyb2JvdFwiOiBcIlJvYm90IEZyYW1ld29ya1wiLFxuXHRcInJiXCI6IFwiUnVieVwiLFxuXHRcInNhc1wiOiBcIlNBU1wiLFxuXHRcInNhc3NcIjogXCJTYXNzIChTYXNzKVwiLFxuXHRcInNjc3NcIjogXCJTYXNzIChTQ1NTKVwiLFxuXHRcInNoZWxsLXNlc3Npb25cIjogXCJTaGVsbCBzZXNzaW9uXCIsXG5cdFwic2gtc2Vzc2lvblwiOiBcIlNoZWxsIHNlc3Npb25cIixcblx0XCJzaGVsbHNlc3Npb25cIjogXCJTaGVsbCBzZXNzaW9uXCIsXG5cdFwic21sXCI6IFwiU01MXCIsXG5cdFwic21sbmpcIjogXCJTTUwvTkpcIixcblx0XCJzb2xpZGl0eVwiOiBcIlNvbGlkaXR5IChFdGhlcmV1bSlcIixcblx0XCJzb2xcIjogXCJTb2xpZGl0eSAoRXRoZXJldW0pXCIsXG5cdFwic29sdXRpb24tZmlsZVwiOiBcIlNvbHV0aW9uIGZpbGVcIixcblx0XCJzbG5cIjogXCJTb2x1dGlvbiBmaWxlXCIsXG5cdFwic295XCI6IFwiU295IChDbG9zdXJlIFRlbXBsYXRlKVwiLFxuXHRcInNwYXJxbFwiOiBcIlNQQVJRTFwiLFxuXHRcInJxXCI6IFwiU1BBUlFMXCIsXG5cdFwic3BsdW5rLXNwbFwiOiBcIlNwbHVuayBTUExcIixcblx0XCJzcWZcIjogXCJTUUY6IFN0YXR1cyBRdW8gRnVuY3Rpb24gKEFybWEgMylcIixcblx0XCJzcWxcIjogXCJTUUxcIixcblx0XCJzdGF0YVwiOiBcIlN0YXRhIEFkb1wiLFxuXHRcImllY3N0XCI6IFwiU3RydWN0dXJlZCBUZXh0IChJRUMgNjExMzEtMylcIixcblx0XCJzdXBlcmNvbGxpZGVyXCI6IFwiU3VwZXJDb2xsaWRlclwiLFxuXHRcInNjbGFuZ1wiOiBcIlN1cGVyQ29sbGlkZXJcIixcblx0XCJzeXN0ZW1kXCI6IFwiU3lzdGVtZCBjb25maWd1cmF0aW9uIGZpbGVcIixcblx0XCJ0NC10ZW1wbGF0aW5nXCI6IFwiVDQgdGVtcGxhdGluZ1wiLFxuXHRcInQ0LWNzXCI6IFwiVDQgVGV4dCBUZW1wbGF0ZXMgKEMjKVwiLFxuXHRcInQ0XCI6IFwiVDQgVGV4dCBUZW1wbGF0ZXMgKEMjKVwiLFxuXHRcInQ0LXZiXCI6IFwiVDQgVGV4dCBUZW1wbGF0ZXMgKFZCKVwiLFxuXHRcInRhcFwiOiBcIlRBUFwiLFxuXHRcInR0MlwiOiBcIlRlbXBsYXRlIFRvb2xraXQgMlwiLFxuXHRcInRvbWxcIjogXCJUT01MXCIsXG5cdFwidHJpY2tsZVwiOiBcInRyaWNrbGVcIixcblx0XCJ0cm95XCI6IFwidHJveVwiLFxuXHRcInRyaWdcIjogXCJUcmlHXCIsXG5cdFwidHNcIjogXCJUeXBlU2NyaXB0XCIsXG5cdFwidHNjb25maWdcIjogXCJUU0NvbmZpZ1wiLFxuXHRcInVzY3JpcHRcIjogXCJVbnJlYWxTY3JpcHRcIixcblx0XCJ1Y1wiOiBcIlVucmVhbFNjcmlwdFwiLFxuXHRcInVvcmF6b3JcIjogXCJVTyBSYXpvciBTY3JpcHRcIixcblx0XCJ1cmlcIjogXCJVUklcIixcblx0XCJ1cmxcIjogXCJVUkxcIixcblx0XCJ2Ym5ldFwiOiBcIlZCLk5ldFwiLFxuXHRcInZoZGxcIjogXCJWSERMXCIsXG5cdFwidmltXCI6IFwidmltXCIsXG5cdFwidmlzdWFsLWJhc2ljXCI6IFwiVmlzdWFsIEJhc2ljXCIsXG5cdFwidmJhXCI6IFwiVkJBXCIsXG5cdFwidmJcIjogXCJWaXN1YWwgQmFzaWNcIixcblx0XCJ3YXNtXCI6IFwiV2ViQXNzZW1ibHlcIixcblx0XCJ3ZWItaWRsXCI6IFwiV2ViIElETFwiLFxuXHRcIndlYmlkbFwiOiBcIldlYiBJRExcIixcblx0XCJ3Z3NsXCI6IFwiV0dTTFwiLFxuXHRcIndpa2lcIjogXCJXaWtpIG1hcmt1cFwiLFxuXHRcIndvbGZyYW1cIjogXCJXb2xmcmFtIGxhbmd1YWdlXCIsXG5cdFwibmJcIjogXCJNYXRoZW1hdGljYSBOb3RlYm9va1wiLFxuXHRcIndsXCI6IFwiV29sZnJhbSBsYW5ndWFnZVwiLFxuXHRcInhlb3JhY3ViZVwiOiBcIlhlb3JhQ3ViZVwiLFxuXHRcInhtbC1kb2NcIjogXCJYTUwgZG9jICgubmV0KVwiLFxuXHRcInhvam9cIjogXCJYb2pvIChSRUFMYmFzaWMpXCIsXG5cdFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG5cdFwieWFtbFwiOiBcIllBTUxcIixcblx0XCJ5bWxcIjogXCJZQU1MXCIsXG5cdFwieWFuZ1wiOiBcIllBTkdcIixcbn07IFxuY29uc3QgTUFOVUFMX1BSSVNNX0xBTkdVQUdFUzoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7IC8vIE1hbnVhbGx5IGdlbmVyYXRlZCBsaXN0IGZyb20gaHR0cHM6Ly9wcmlzbWpzLmNvbS8gIC0gIDI5NyBsYW5ndWFnZXNcblx0XCJjc3NcIjpcIkNTU1wiLFxuXHRcImNsaWtlXCI6XCJDLWxpa2VcIixcblx0XCJqYXZhc2NyaXB0XCI6XCJKYXZhU2NyaXB0XCIsXG5cdFwianNcIjpcIkphdmFTY3JpcHRcIixcblx0XCJhYmFwXCI6XCJBQkFQXCIsXG5cdFwiYWJuZlwiOlwiQUJORlwiLFxuXHRcImFjdGlvbnNjcmlwdFwiOlwiQWN0aW9uU2NyaXB0XCIsXG5cdFwiYWRhXCI6XCJBZGFcIixcblx0XCJhZ2RhXCI6XCJBZ2RhXCIsXG5cdFwiYWxcIjpcIkFMXCIsXG5cdFwiYW50bHI0XCI6XCJBTlRMUjRcIixcblx0XCJnNFwiOlwiQU5UTFI0XCIsXG5cdFwiYXBhY2hlY29uZlwiOlwiQXBhY2hlIENvbmZpZ3VyYXRpb25cIixcblx0XCJhcGV4XCI6XCJBcGV4XCIsXG5cdFwiYXBsXCI6XCJBUExcIixcblx0XCJhcHBsZXNjcmlwdFwiOlwiQXBwbGVTY3JpcHRcIixcblx0XCJhcWxcIjpcIkFRTFwiLFxuXHRcImFyZHVpbm9cIjpcIkFyZHVpbm9cIixcblx0XCJpbm9cIjpcIkFyZHVpbm9cIixcblx0XCJhcmZmXCI6XCJBUkZGXCIsXG5cdFwiYXJtYXNtXCI6XCJBUk0gQXNzZW1ibHlcIixcblx0XCJhcm0tYXNtXCI6XCJBUk0gQXNzZW1ibHlcIixcblx0XCJhcnR1cm9cIjpcIkFydHVyb1wiLFxuXHRcImFydFwiOlwiQXJ0dXJvXCIsXG5cdFwiYXNjaWlkb2NcIjpcIkFzY2lpRG9jXCIsXG5cdFwiYWRvY1wiOlwiQXNjaWlEb2NcIixcblx0XCJhc3BuZXRcIjpcIkFTUC5ORVQgKEMjKVwiLFxuXHRcImFzbTY1MDJcIjpcIjY1MDIgQXNzZW1ibHlcIixcblx0XCJhc21hdG1lbFwiOlwiQXRtZWwgQVZSIEFzc2VtYmx5XCIsXG5cdFwiYXV0b2hvdGtleVwiOlwiQXV0b0hvdGtleVwiLFxuXHRcImF1dG9pdFwiOlwiQXV0b0l0XCIsXG5cdFwiYXZpc3ludGhcIjpcIkF2aVN5bnRoXCIsXG5cdFwiYXZzXCI6XCJBdmlTeW50aFwiLFxuXHRcImF2cm8taWRsXCI6XCJBdnJvIElETFwiLFxuXHRcImF2ZGxcIjpcIkF2cm8gSURMXCIsXG5cdFwiYXdrXCI6XCJBV0tcIixcblx0XCJnYXdrXCI6XCJHQVdLXCIsXG5cdFwiYmFzaFwiOlwiQmFzaFwiLFxuXHRcInNoXCI6XCJTaGVsbFwiLFxuXHRcInNoZWxsXCI6XCJTaGVsbFwiLFxuXHRcImJhc2ljXCI6XCJCQVNJQ1wiLFxuXHRcImJhdGNoXCI6XCJCYXRjaFwiLFxuXHRcImJiY29kZVwiOlwiQkJjb2RlXCIsXG5cdFwic2hvcnRjb2RlXCI6XCJCQmNvZGVcIixcblx0XCJiYmpcIjpcIkJCalwiLFxuXHRcImJpcmJcIjpcIkJpcmJcIixcblx0XCJiaXNvblwiOlwiQmlzb25cIixcblx0XCJibmZcIjpcIkJORlwiLFxuXHRcInJibmZcIjpcIkJORlwiLFxuXHRcImJxblwiOlwiQlFOXCIsXG5cdFwiYnJhaW5mdWNrXCI6XCJCcmFpbmZ1Y2tcIixcblx0XCJicmlnaHRzY3JpcHRcIjpcIkJyaWdodFNjcmlwdFwiLFxuXHRcImJyb1wiOlwiQnJvXCIsXG5cdFwiYnNsXCI6XCJCU0wgKDFDKVwiLFxuXHRcIm9zY3JpcHRcIjpcIkJTTCAoMUMpXCIsXG5cdFwiY1wiOlwiQ1wiLFxuXHRcImNzaGFycFwiOlwiQyNcIixcblx0XCJjc1wiOlwiQyNcIixcblx0XCJkb3RuZXRcIjpcIkMjXCIsXG5cdFwiY3BwXCI6XCJDKytcIixcblx0XCJjZnNjcmlwdFwiOlwiQ0ZTY3JpcHRcIixcblx0XCJjZmNcIjpcIkNGU2NyaXB0XCIsXG5cdFwiY2hhaXNjcmlwdFwiOlwiQ2hhaVNjcmlwdFwiLFxuXHRcImNpbFwiOlwiQ0lMXCIsXG5cdFwiY2lsa2NcIjpcIkNpbGsvQ1wiLFxuXHRcImNpbGstY1wiOlwiQ2lsay9DXCIsXG5cdFwiY2lsa2NwcFwiOlwiQ2lsay9DKytcIixcblx0XCJjaWxrLWNwcFwiOlwiQ2lsay9DKytcIixcblx0XCJjaWxrXCI6XCJDaWxrL0MrK1wiLFxuXHRcImNsb2p1cmVcIjpcIkNsb2p1cmVcIixcblx0XCJjbWFrZVwiOlwiQ01ha2VcIixcblx0XCJjb2JvbFwiOlwiQ09CT0xcIixcblx0XCJjb2ZmZWVzY3JpcHRcIjpcIkNvZmZlZVNjcmlwdFwiLFxuXHRcImNvZmZlZVwiOlwiQ29mZmVlU2NyaXB0XCIsXG5cdFwiY29uY3VybmFzXCI6XCJDb25jdXJuYXNcIixcblx0XCJjb25jXCI6XCJDb25jdXJuYXNcIixcblx0XCJjc3BcIjpcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCIsXG5cdFwiY29va2xhbmdcIjpcIkNvb2tsYW5nXCIsXG5cdFwiY29xXCI6XCJDb3FcIixcblx0XCJjcnlzdGFsXCI6XCJDcnlzdGFsXCIsXG5cdFwiY3NzLWV4dHJhc1wiOlwiQ1NTIEV4dHJhc1wiLFxuXHRcImNzdlwiOlwiQ1NWXCIsXG5cdFwiY3VlXCI6XCJDVUVcIixcblx0XCJjeXBoZXJcIjpcIkN5cGhlclwiLFxuXHRcImRcIjpcIkRcIixcblx0XCJkYXJ0XCI6XCJEYXJ0XCIsXG5cdFwiZGF0YXdlYXZlXCI6XCJEYXRhV2VhdmVcIixcblx0XCJkYXhcIjpcIkRBWFwiLFxuXHRcImRoYWxsXCI6XCJEaGFsbFwiLFxuXHRcImRpZmZcIjpcIkRpZmZcIixcblx0XCJkamFuZ29cIjpcIkRqYW5nby9KaW5qYTJcIixcblx0XCJqaW5qYTJcIjpcIkRqYW5nby9KaW5qYTJcIixcblx0XCJkbnMtem9uZS1maWxlXCI6XCJETlMgem9uZSBmaWxlXCIsXG5cdFwiZG5zLXpvbmVcIjpcIkROUyB6b25lIGZpbGVcIixcblx0XCJkb2NrZXJcIjpcIkRvY2tlclwiLFxuXHRcImRvY2tlcmZpbGVcIjpcIkRvY2tlclwiLFxuXHRcImRvdFwiOlwiRE9UIChHcmFwaHZpeilcIixcblx0XCJndlwiOlwiRE9UIChHcmFwaHZpeilcIixcblx0XCJlYm5mXCI6XCJFQk5GXCIsXG5cdFwiZWRpdG9yY29uZmlnXCI6XCJFZGl0b3JDb25maWdcIixcblx0XCJlaWZmZWxcIjpcIkVpZmZlbFwiLFxuXHRcImVqc1wiOlwiRUpTXCIsXG5cdFwiZXRhXCI6XCJFSlNcIixcblx0XCJlbGl4aXJcIjpcIkVsaXhpclwiLFxuXHRcImVsbVwiOlwiRWxtXCIsXG5cdFwiZXRsdWFcIjpcIkVtYmVkZGVkIEx1YSB0ZW1wbGF0aW5nXCIsXG5cdFwiZXJiXCI6XCJFUkJcIixcblx0XCJlcmxhbmdcIjpcIkVybGFuZ1wiLFxuXHRcImV4Y2VsLWZvcm11bGFcIjpcIkV4Y2VsIEZvcm11bGFcIixcblx0XCJ4bHN4XCI6XCJFeGNlbCBGb3JtdWxhXCIsXG5cdFwieGxzXCI6XCJFeGNlbCBGb3JtdWxhXCIsXG5cdFwiZnNoYXJwXCI6XCJGI1wiLFxuXHRcImZhY3RvclwiOlwiRmFjdG9yXCIsXG5cdFwiZmFsc2VcIjpcIkZhbHNlXCIsXG5cdFwiZmlyZXN0b3JlLXNlY3VyaXR5LXJ1bGVzXCI6XCJGaXJlc3RvcmUgc2VjdXJpdHkgcnVsZXNcIixcblx0XCJmbG93XCI6XCJGbG93XCIsXG5cdFwiZm9ydHJhblwiOlwiRm9ydHJhblwiLFxuXHRcImZ0bFwiOlwiRnJlZU1hcmtlciBUZW1wbGF0ZSBMYW5ndWFnZVwiLFxuXHRcImdtbFwiOlwiR2FtZU1ha2VyIExhbmd1YWdlXCIsXG5cdFwiZ2FtZW1ha2VybGFuZ3VhZ2VcIjpcIkdhbWVNYWtlciBMYW5ndWFnZVwiLFxuXHRcImdhcFwiOlwiR0FQIChDQVMpXCIsXG5cdFwiZ2NvZGVcIjpcIkctY29kZVwiLFxuXHRcImdkc2NyaXB0XCI6XCJHRFNjcmlwdFwiLFxuXHRcImdlZGNvbVwiOlwiR0VEQ09NXCIsXG5cdFwiZ2V0dGV4dFwiOlwiZ2V0dGV4dFwiLFxuXHRcInBvXCI6XCJnZXR0ZXh0XCIsXG5cdFwiZ2hlcmtpblwiOlwiR2hlcmtpblwiLFxuXHRcImdpdFwiOlwiR2l0XCIsXG5cdFwiZ2xzbFwiOlwiR0xTTFwiLFxuXHRcImduXCI6XCJHTlwiLFxuXHRcImduaVwiOlwiR05cIixcblx0XCJsaW5rZXItc2NyaXB0XCI6XCJHTlUgTGlua2VyIFNjcmlwdFwiLFxuXHRcImxkXCI6XCJHTlUgTGlua2VyIFNjcmlwdFwiLFxuXHRcImdvXCI6XCJHb1wiLFxuXHRcImdvLW1vZHVsZVwiOlwiR28gbW9kdWxlXCIsXG5cdFwiZ28tbW9kXCI6XCJHbyBtb2R1bGVcIixcblx0XCJncmFkbGVcIjpcIkdyYWRsZVwiLFxuXHRcImdyYXBocWxcIjpcIkdyYXBoUUxcIixcblx0XCJncm9vdnlcIjpcIkdyb292eVwiLFxuXHRcImhhbWxcIjpcIkhhbWxcIixcblx0XCJoYW5kbGViYXJzXCI6XCJIYW5kbGViYXJzXCIsXG5cdFwiaGJzXCI6XCJIYW5kbGViYXJzXCIsXG5cdFwibXVzdGFjaGVcIjpcIkhhbmRsZWJhcnNcIixcblx0XCJoYXNrZWxsXCI6XCJIYXNrZWxsXCIsXG5cdFwiaHNcIjpcIkhhc2tlbGxcIixcblx0XCJoYXhlXCI6XCJIYXhlXCIsXG5cdFwiaGNsXCI6XCJIQ0xcIixcblx0XCJobHNsXCI6XCJITFNMXCIsXG5cdFwiaG9vblwiOlwiSG9vblwiLFxuXHRcImh0dHBcIjpcIkhUVFBcIixcblx0XCJocGtwXCI6XCJIVFRQIFB1YmxpYy1LZXktUGluc1wiLFxuXHRcImhzdHNcIjpcIkhUVFAgU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eVwiLFxuXHRcImljaGlnb2phbVwiOlwiSWNoaWdvSmFtXCIsXG5cdFwiaWNvblwiOlwiSWNvblwiLFxuXHRcImljdS1tZXNzYWdlLWZvcm1hdFwiOlwiSUNVIE1lc3NhZ2UgRm9ybWF0XCIsXG5cdFwiaWRyaXNcIjpcIklkcmlzXCIsXG5cdFwiaWRyXCI6XCJJZHJpc1wiLFxuXHRcImluZm9ybTdcIjpcIkluZm9ybSA3XCIsXG5cdFwiaW5pXCI6XCJJbmlcIixcblx0XCJpb1wiOlwiSW9cIixcblx0XCJqXCI6XCJKXCIsXG5cdFwiamF2YVwiOlwiSmF2YVwiLFxuXHRcImphdmFkb2NcIjpcIkphdmFEb2NcIixcblx0XCJqYXZhZG9jbGlrZVwiOlwiSmF2YURvYy1saWtlXCIsXG5cdFwiamF2YXN0YWNrdHJhY2VcIjpcIkphdmEgc3RhY2sgdHJhY2VcIixcblx0XCJqZXhsXCI6XCJKZXhsXCIsXG5cdFwiam9saWVcIjpcIkpvbGllXCIsXG5cdFwianFcIjpcIkpRXCIsXG5cdFwianNkb2NcIjpcIkpTRG9jXCIsXG5cdFwianMtZXh0cmFzXCI6XCJKUyBFeHRyYXNcIixcblx0XCJqc29uXCI6XCJKU09OXCIsXG5cdFwid2VibWFuaWZlc3RcIjpcIkpTT05cIixcblx0XCJqc29uNVwiOlwiSlNPTjVcIixcblx0XCJqc29ucFwiOlwiSlNPTlBcIixcblx0XCJqc3N0YWNrdHJhY2VcIjpcIkpTIHN0YWNrIHRyYWNlXCIsXG5cdFwianMtdGVtcGxhdGVzXCI6XCJKUyBUZW1wbGF0ZXNcIixcblx0XCJqdWxpYVwiOlwiSnVsaWFcIixcblx0XCJrZWVwYWxpdmVkXCI6XCJLZWVwYWxpdmVkIENvbmZpZ3VyZVwiLFxuXHRcImtleW1hblwiOlwiS2V5bWFuXCIsXG5cdFwia290bGluXCI6XCJLb3RsaW5cIixcblx0XCJrdFwiOlwiS290bGluXCIsXG5cdFwia3RzXCI6XCJLb3RsaW5cIixcblx0XCJrdW1pclwiOlwiS3VNaXIgKFx1MDQxQVx1MDQ0M1x1MDQxQ1x1MDQzOFx1MDQ0MClcIixcblx0XCJrdW1cIjpcIkt1TWlyIChcdTA0MUFcdTA0NDNcdTA0MUNcdTA0MzhcdTA0NDApXCIsXG5cdFwia3VzdG9cIjpcIkt1c3RvXCIsXG5cdFwibGF0ZXhcIjpcIkxhVGVYXCIsXG5cdFwidGV4XCI6XCJMYVRlWFwiLFxuXHRcImNvbnRleHRcIjpcIkxhVGVYXCIsXG5cdFwibGF0dGVcIjpcIkxhdHRlXCIsXG5cdFwibGVzc1wiOlwiTGVzc1wiLFxuXHRcImxpbHlwb25kXCI6XCJMaWx5UG9uZFwiLFxuXHRcImx5XCI6XCJMaWx5UG9uZFwiLFxuXHRcImxpcXVpZFwiOlwiTGlxdWlkXCIsXG5cdFwibGlzcFwiOlwiTGlzcFwiLFxuXHRcImVtYWNzXCI6XCJMaXNwXCIsXG5cdFwiZWxpc3BcIjpcIkxpc3BcIixcblx0XCJlbWFjcy1saXNwXCI6XCJMaXNwXCIsXG5cdFwibGl2ZXNjcmlwdFwiOlwiTGl2ZVNjcmlwdFwiLFxuXHRcImxsdm1cIjpcIkxMVk0gSVJcIixcblx0XCJsb2dcIjpcIkxvZyBmaWxlXCIsXG5cdFwibG9sY29kZVwiOlwiTE9MQ09ERVwiLFxuXHRcImx1YVwiOlwiTHVhXCIsXG5cdFwibWFnbWFcIjpcIk1hZ21hIChDQVMpXCIsXG5cdFwibWFrZWZpbGVcIjpcIk1ha2VmaWxlXCIsXG5cdFwibWFya2Rvd25cIjpcIk1hcmtkb3duXCIsXG5cdFwibWRcIjpcIk1hcmtkb3duXCIsXG5cdFwibWFya3VwLXRlbXBsYXRpbmdcIjpcIk1hcmt1cCB0ZW1wbGF0aW5nXCIsXG5cdFwibWF0YVwiOlwiTWF0YVwiLFxuXHRcIm1hdGxhYlwiOlwiTUFUTEFCXCIsXG5cdFwibWF4c2NyaXB0XCI6XCJNQVhTY3JpcHRcIixcblx0XCJtZWxcIjpcIk1FTFwiLFxuXHRcIm1lcm1haWRcIjpcIk1lcm1haWRcIixcblx0XCJtZXRhZm9udFwiOlwiTUVUQUZPTlRcIixcblx0XCJtaXphclwiOlwiTWl6YXJcIixcblx0XCJtb25nb2RiXCI6XCJNb25nb0RCXCIsXG5cdFwibW9ua2V5XCI6XCJNb25rZXlcIixcblx0XCJtb29uc2NyaXB0XCI6XCJNb29uU2NyaXB0XCIsXG5cdFwibW9vblwiOlwiTW9vblNjcmlwdFwiLFxuXHRcIm4xcWxcIjpcIk4xUUxcIixcblx0XCJuNGpzXCI6XCJONEpTXCIsXG5cdFwibjRqc2RcIjpcIk40SlNcIixcblx0XCJuYW5kMnRldHJpcy1oZGxcIjpcIk5hbmQgVG8gVGV0cmlzIEhETFwiLFxuXHRcIm5hbmlzY3JpcHRcIjpcIk5hbmlub3ZlbCBTY3JpcHRcIixcblx0XCJuYW5pXCI6XCJOYW5pbm92ZWwgU2NyaXB0XCIsXG5cdFwibmFzbVwiOlwiTkFTTVwiLFxuXHRcIm5lb25cIjpcIk5FT05cIixcblx0XCJuZXZvZFwiOlwiTmV2b2RcIixcblx0XCJuZ2lueFwiOlwibmdpbnhcIixcblx0XCJuaW1cIjpcIk5pbVwiLFxuXHRcIm5peFwiOlwiTml4XCIsXG5cdFwibnNpc1wiOlwiTlNJU1wiLFxuXHRcIm9iamVjdGl2ZWNcIjpcIk9iamVjdGl2ZS1DXCIsXG5cdFwib2JqY1wiOlwiT2JqZWN0aXZlLUNcIixcblx0XCJvY2FtbFwiOlwiT0NhbWxcIixcblx0XCJvZGluXCI6XCJPZGluXCIsXG5cdFwib3BlbmNsXCI6XCJPcGVuQ0xcIixcblx0XCJvcGVucWFzbVwiOlwiT3BlblFhc21cIixcblx0XCJxYXNtXCI6XCJPcGVuUWFzbVwiLFxuXHRcIm96XCI6XCJPelwiLFxuXHRcInBhcmlncFwiOlwiUEFSSS9HUFwiLFxuXHRcInBhcnNlclwiOlwiUGFyc2VyXCIsXG5cdFwicGFzY2FsXCI6XCJQYXNjYWxcIixcblx0XCJwYXNjYWxpZ29cIjpcIlBhc2NhbGlnb1wiLFxuXHRcInBzbFwiOlwiUEFUUk9MIFNjcmlwdGluZyBMYW5ndWFnZVwiLFxuXHRcInBjYXhpc1wiOlwiUEMtQXhpc1wiLFxuXHRcInB4XCI6XCJQQy1BeGlzXCIsXG5cdFwicGVvcGxlY29kZVwiOlwiUGVvcGxlQ29kZVwiLFxuXHRcInBjb2RlXCI6XCJQZW9wbGVDb2RlXCIsXG5cdFwicGVybFwiOlwiUGVybFwiLFxuXHRcInBocFwiOlwiUEhQXCIsXG5cdFwicGhwZG9jXCI6XCJQSFBEb2NcIixcblx0XCJwaHAtZXh0cmFzXCI6XCJQSFAgRXh0cmFzXCIsXG5cdFwicGxhbnQtdW1sXCI6XCJQbGFudFVNTFwiLFxuXHRcInBsYW50dW1sXCI6XCJQbGFudFVNTFwiLFxuXHRcInBsc3FsXCI6XCJQTC9TUUxcIixcblx0XCJwb3dlcnF1ZXJ5XCI6XCJQb3dlclF1ZXJ5XCIsXG5cdFwicHFcIjpcIlBvd2VyUXVlcnlcIixcblx0XCJtc2NyaXB0XCI6XCJQb3dlclF1ZXJ5XCIsXG5cdFwicG93ZXJzaGVsbFwiOlwiUG93ZXJTaGVsbFwiLFxuXHRcInByb2Nlc3NpbmdcIjpcIlByb2Nlc3NpbmdcIixcblx0XCJwcm9sb2dcIjpcIlByb2xvZ1wiLFxuXHRcInByb21xbFwiOlwiUHJvbVFMXCIsXG5cdFwicHJvcGVydGllc1wiOlwiLnByb3BlcnRpZXNcIixcblx0XCJwcm90b2J1ZlwiOlwiUHJvdG9jb2wgQnVmZmVyc1wiLFxuXHRcInB1Z1wiOlwiUHVnXCIsXG5cdFwicHVwcGV0XCI6XCJQdXBwZXRcIixcblx0XCJwdXJlXCI6XCJQdXJlXCIsXG5cdFwicHVyZWJhc2ljXCI6XCJQdXJlQmFzaWNcIixcblx0XCJwYmZhc21cIjpcIlB1cmVCYXNpY1wiLFxuXHRcInB1cmVzY3JpcHRcIjpcIlB1cmVTY3JpcHRcIixcblx0XCJwdXJzXCI6XCJQdXJlU2NyaXB0XCIsXG5cdFwicHl0aG9uXCI6XCJQeXRob25cIixcblx0XCJweVwiOlwiUHl0aG9uXCIsXG5cdFwicXNoYXJwXCI6XCJRI1wiLFxuXHRcInFzXCI6XCJRI1wiLFxuXHRcInFcIjpcIlEgKGtkYisgZGF0YWJhc2UpXCIsXG5cdFwicW1sXCI6XCJRTUxcIixcblx0XCJxb3JlXCI6XCJRb3JlXCIsXG5cdFwiclwiOlwiUlwiLFxuXHRcInJhY2tldFwiOlwiUmFja2V0XCIsXG5cdFwicmt0XCI6XCJSYWNrZXRcIixcblx0XCJjc2h0bWxcIjpcIlJhem9yIEMjXCIsXG5cdFwianN4XCI6XCJSZWFjdCBKU1hcIixcblx0XCJ0c3hcIjpcIlJlYWN0IFRTWFwiLFxuXHRcInJlYXNvblwiOlwiUmVhc29uXCIsXG5cdFwicmVnZXhcIjpcIlJlZ2V4XCIsXG5cdFwicmVnb1wiOlwiUmVnb1wiLFxuXHRcInJlbnB5XCI6XCJSZW4ncHlcIixcblx0XCJycHlcIjpcIlJlbidweVwiLFxuXHRcInJlc2NyaXB0XCI6XCJSZVNjcmlwdFwiLFxuXHRcInJlc1wiOlwiUmVTY3JpcHRcIixcblx0XCJyZXN0XCI6XCJyZVNUIChyZVN0cnVjdHVyZWRUZXh0KVwiLFxuXHRcInJpcFwiOlwiUmlwXCIsXG5cdFwicm9ib2NvbmZcIjpcIlJvYm9jb25mXCIsXG5cdFwicm9ib3RmcmFtZXdvcmtcIjpcIlJvYm90IEZyYW1ld29ya1wiLFxuXHRcInJvYm90XCI6XCJSb2JvdCBGcmFtZXdvcmtcIixcblx0XCJydWJ5XCI6XCJSdWJ5XCIsXG5cdFwicmJcIjpcIlJ1YnlcIixcblx0XCJydXN0XCI6XCJSdXN0XCIsXG5cdFwic2FzXCI6XCJTQVNcIixcblx0XCJzYXNzXCI6XCJTYXNzIChTYXNzKVwiLFxuXHRcInNjc3NcIjpcIlNhc3MgKFNDU1MpXCIsXG5cdFwic2NhbGFcIjpcIlNjYWxhXCIsXG5cdFwic2NoZW1lXCI6XCJTY2hlbWVcIixcblx0XCJzaGVsbC1zZXNzaW9uXCI6XCJTaGVsbCBzZXNzaW9uXCIsXG5cdFwic2gtc2Vzc2lvblwiOlwiU2hlbGwgc2Vzc2lvblwiLFxuXHRcInNoZWxsc2Vzc2lvblwiOlwiU2hlbGwgc2Vzc2lvblwiLFxuXHRcInNtYWxpXCI6XCJTbWFsaVwiLFxuXHRcInNtYWxsdGFsa1wiOlwiU21hbGx0YWxrXCIsXG5cdFwic21hcnR5XCI6XCJTbWFydHlcIixcblx0XCJzbWxcIjpcIlNNTFwiLFxuXHRcInNtbG5qXCI6XCJTTUxcIixcblx0XCJzb2xpZGl0eVwiOlwiU29saWRpdHkgKEV0aGVyZXVtKVwiLFxuXHRcInNvbFwiOlwiU29saWRpdHkgKEV0aGVyZXVtKVwiLFxuXHRcInNvbHV0aW9uLWZpbGVcIjpcIlNvbHV0aW9uIGZpbGVcIixcblx0XCJzbG5cIjpcIlNvbHV0aW9uIGZpbGVcIixcblx0XCJzb3lcIjpcIlNveSAoQ2xvc3VyZSBUZW1wbGF0ZSlcIixcblx0XCJzcGFycWxcIjpcIlNQQVJRTFwiLFxuXHRcInJxXCI6XCJTUEFSUUxcIixcblx0XCJzcGx1bmstc3BsXCI6XCJTcGx1bmsgU1BMXCIsXG5cdFwic3FmXCI6XCJTUUZcIixcblx0XCJzcWxcIjpcIlNRTFwiLFxuXHRcInNxdWlycmVsXCI6XCJTcXVpcnJlbFwiLFxuXHRcInN0YW5cIjpcIlN0YW5cIixcblx0XCJzdGF0YVwiOlwiU3RhdGEgQWRvXCIsXG5cdFwiaWVjc3RcIjpcIlN0cnVjdHVyZWQgVGV4dCAoSUVDIDYxMTMxLTMpXCIsXG5cdFwic3R5bHVzXCI6XCJTdHlsdXNcIixcblx0XCJzdXBlcmNvbGxpZGVyXCI6XCJTdXBlckNvbGxpZGVyXCIsXG5cdFwic2NsYW5nXCI6XCJTdXBlckNvbGxpZGVyXCIsXG5cdFwic3dpZnRcIjpcIlN3aWZ0XCIsXG5cdFwic3lzdGVtZFwiOlwiU3lzdGVtZCBjb25maWd1cmF0aW9uIGZpbGVcIixcblx0XCJ0NC10ZW1wbGF0aW5nXCI6XCJUNCB0ZW1wbGF0aW5nXCIsXG5cdFwidDQtY3NcIjpcIlQ0IFRleHQgVGVtcGxhdGVzIChDIylcIixcblx0XCJ0NFwiOlwiVDQgVGV4dCBUZW1wbGF0ZXMgKEMjKVwiLFxuXHRcInQ0LXZiXCI6XCJUNCBUZXh0IFRlbXBsYXRlcyAoVkIpXCIsXG5cdFwidGFwXCI6XCJUQVBcIixcblx0XCJ0Y2xcIjpcIlRjbFwiLFxuXHRcInR0MlwiOlwiVGVtcGxhdGUgVG9vbGtpdCAyXCIsXG5cdFwidGV4dGlsZVwiOlwiVGV4dGlsZVwiLFxuXHRcInRvbWxcIjpcIlRPTUxcIixcblx0XCJ0cmVtb3JcIjpcIlRyZW1vclwiLFxuXHRcInRyaWNrbGVcIjpcIlRyZW1vclwiLFxuXHRcInRyb3lcIjpcIlRyZW1vclwiLFxuXHRcInR1cnRsZVwiOlwiVHVydGxlXCIsXG5cdFwidHJpZ1wiOlwiVHVydGxlXCIsXG5cdFwidHdpZ1wiOlwiVHdpZ1wiLFxuXHRcInR5cGVzY3JpcHRcIjpcIlR5cGVTY3JpcHRcIixcblx0XCJ0c1wiOlwiVHlwZVNjcmlwdFwiLFxuXHRcInR5cG9zY3JpcHRcIjpcIlR5cG9TY3JpcHRcIixcblx0XCJ0c2NvbmZpZ1wiOlwiVFNDb25maWdcIixcblx0XCJ1bnJlYWxzY3JpcHRcIjpcIlVucmVhbFNjcmlwdFwiLFxuXHRcInVzY3JpcHRcIjpcIlVucmVhbFNjcmlwdFwiLFxuXHRcInVjXCI6XCJVbnJlYWxTY3JpcHRcIixcblx0XCJ1b3Jhem9yXCI6XCJVTyBSYXpvciBTY3JpcHRcIixcblx0XCJ1cmlcIjpcIlVSSVwiLFxuXHRcInVybFwiOlwiVVJJXCIsXG5cdFwidlwiOlwiVlwiLFxuXHRcInZhbGFcIjpcIlZhbGFcIixcblx0XCJ2Ym5ldFwiOlwiVkIuTmV0XCIsXG5cdFwidmVsb2NpdHlcIjpcIlZlbG9jaXR5XCIsXG5cdFwidmVyaWxvZ1wiOlwiVmVyaWxvZ1wiLFxuXHRcInZoZGxcIjpcIlZIRExcIixcblx0XCJ2aW1cIjpcInZpbVwiLFxuXHRcInZpc3VhbC1iYXNpY1wiOlwiVmlzdWFsIEJhc2ljXCIsXG5cdFwidmJcIjpcIlZpc3VhbCBCYXNpY1wiLFxuXHRcIndhcnBzY3JpcHRcIjpcIldhcnBTY3JpcHRcIixcblx0XCJ3YXNtXCI6XCJXZWJBc3NlbWJseVwiLFxuXHRcIndlYi1pZGxcIjpcIldlYiBJRExcIixcblx0XCJ3ZWJpZGxcIjpcIldlYiBJRExcIixcblx0XCJ3Z3NsXCI6XCJXR1NMXCIsXG5cdFwid2lraVwiOlwiV2lraSBtYXJrdXBcIixcblx0XCJ3b2xmcmFtXCI6XCJXb2xmcmFtIGxhbmd1YWdlXCIsXG5cdFwibWF0aGVtYXRpY2FcIjpcIldvbGZyYW0gbGFuZ3VhZ2VcIixcblx0XCJuYlwiOlwiV29sZnJhbSBsYW5ndWFnZVwiLFxuXHRcIndsXCI6XCJXb2xmcmFtIGxhbmd1YWdlXCIsXG5cdFwid3JlblwiOlwiV3JlblwiLFxuXHRcInhlb3JhXCI6XCJYZW9yYVwiLFxuXHRcInhlb3JhY3ViZVwiOlwiWGVvcmFcIixcblx0XCJ4bWwtZG9jXCI6XCJYTUwgZG9jICgubmV0KVwiLFxuXHRcInhvam9cIjpcIlhvam8gKFJFQUxiYXNpYylcIixcblx0XCJ4cXVlcnlcIjpcIlhRdWVyeVwiLFxuXHRcInlhbWxcIjpcIllBTUxcIixcblx0XCJ5bWxcIjpcIllBTUxcIixcblx0XCJ5YW5nXCI6XCJZQU5HXCIsXG5cdFwiemlnXCI6XCJaaWdcIlxufTtcbmNvbnN0IE1BTlVBTF9MQU5HVUFHRVM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0geyAvLyBNYW51YWxseSBjcmVhdGVkIGxpc3Rcblx0XCJmaXNoXCI6XCJGaXNoXCIsXG5cdFwib2N0YXZlXCI6XCJPY3RhdmVcIixcblx0XCJtYXhpbWFcIjpcIk1heGltYVwiLFxuXHRcIm15c3FsXCI6XCJTUUxcIixcblx0XCJwb3N0Z3Jlc3FsXCI6XCJTUUxcIixcblx0XCJyc2NyaXB0XCI6XCJSXCIsXG5cdFwic2hlbGxzY3JpcHRcIjpcIlNoZWxsXCIsXG5cdFwic3FsaXRlXCI6XCJTUUxcIixcblx0XCJ6c2hcIjpcIlpzaFwiLFxufTtcbmV4cG9ydCBjb25zdCBMQU5HVUFHRV9OQU1FUzoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7Li4uUFJJU01fTEFOR1VBR0VTLC4uLk1BTlVBTF9QUklTTV9MQU5HVUFHRVMsLi4uTUFOVUFMX0xBTkdVQUdFU307XG5leHBvcnQgY29uc3QgTEFOR1VBR0VfSUNPTlNfREFUQToge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7IC8vIEljb25zIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3ZzY29kZS1pY29ucy92c2NvZGUtaWNvbnMvd2lraS9MaXN0T2ZGaWxlcyBhbmQgaHR0cHM6Ly9kZXZpY29uLmRldi9cblx0XCIuZ2l0aWdub3JlXCI6IFwiPHBhdGggZD1cXFwiTTI5LjQ3MiwxNC43NTMsMTcuMjQ3LDIuNTI4YTEuOCwxLjgsMCwwLDAtMi41NSwwTDEyLjE1OCw1LjA2N2wzLjIyLDMuMjJhMi4xNDEsMi4xNDEsMCwwLDEsMi43MTIsMi43M2wzLjEsMy4xYTIuMTQzLDIuMTQzLDAsMSwxLTEuMjg1LDEuMjFsLTIuODk1LTIuODk1djcuNjE3YTIuMTQxLDIuMTQxLDAsMSwxLTEuNzY0LS4wNjJWMTIuM2EyLjE0NiwyLjE0NiwwLDAsMS0xLjE2NS0yLjgxNEwxMC45MTEsNi4zMTQsMi41MjgsMTQuN2ExLjgsMS44LDAsMCwwLDAsMi41NTFMMTQuNzUzLDI5LjQ3MmExLjgsMS44LDAsMCwwLDIuNTUsMEwyOS40NzIsMTcuM2ExLjgsMS44LDAsMCwwLDAtMi41NTFcXFwiIHN0eWxlPVxcXCJmaWxsOiNkZDRjMzVcXFwiLz48cGF0aCBkPVxcXCJNMTIuMTU4LDUuMDY3bDMuMjIsMy4yMmEyLjE0MSwyLjE0MSwwLDAsMSwyLjcxMiwyLjczbDMuMSwzLjFhMi4xNDMsMi4xNDMsMCwxLDEtMS4yODUsMS4yMWwtMi44OTUtMi44OTV2Ny42MTdhMi4xNDEsMi4xNDEsMCwxLDEtMS43NjQtLjA2MlYxMi4zYTIuMTQ2LDIuMTQ2LDAsMCwxLTEuMTY1LTIuODE0TDEwLjkxMSw2LjMxNFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcIi5oZ2lnbm9yZVwiOiBcIjxwYXRoIGQ9XFxcIk0yOC4wNDIsMjMuMTcyYzQuOTg5LTguMy0xLjA1NC0yMS43NTEtMTIuMS0yMC4zODRDNS45NTUsNC4wMjIsNS43OTQsMTQuNTMsMTQuNTkzLDE3LjAyNmM3LjYxNCwyLjE2MiwxLjU3Myw2Ljk5MiwxLjc0OSwxMC4yMDhzNi42Miw0LjM4MiwxMS43LTQuMDYzXFxcIiBzdHlsZT1cXFwiZmlsbDojMWIxYjFiXFxcIi8+PGNpcmNsZSBjeD1cXFwiOS43ODRcXFwiIGN5PVxcXCIyNC4yNTdcXFwiIHI9XFxcIjQuMzMyXFxcIiBzdHlsZT1cXFwiZmlsbDojMWIxYjFiXFxcIi8+PGNpcmNsZSBjeD1cXFwiNC44MzVcXFwiIGN5PVxcXCIxNS4wOTlcXFwiIHI9XFxcIjIuODM1XFxcIiBzdHlsZT1cXFwiZmlsbDojMWIxYjFiXFxcIi8+PHBhdGggZD1cXFwiTTI4LjIzMSwyMi44MzVjNC45ODktOC4zLTEuMDU0LTIxLjc1MS0xMi4xLTIwLjM4NEM2LjE0NCwzLjY4Niw1Ljk4MywxNC4xOTQsMTQuNzgxLDE2LjY5YzcuNjE0LDIuMTYyLDEuNTczLDYuOTkyLDEuNzQ5LDEwLjIwOHM2LjYyLDQuMzgyLDExLjctNC4wNjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZmJmYmZcXFwiLz48Y2lyY2xlIGN4PVxcXCI5Ljk3MlxcXCIgY3k9XFxcIjIzLjkyMVxcXCIgcj1cXFwiNC4zMzJcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZmJmYmZcXFwiLz48Y2lyY2xlIGN4PVxcXCI1LjAyM1xcXCIgY3k9XFxcIjE0Ljc2MlxcXCIgcj1cXFwiMi44MzVcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZmJmYmZcXFwiLz48cGF0aCBkPVxcXCJNMTcuODExLDI4LjE2OGEuNjY5LjY2OSwwLDAsMSwuNjM1LS45OTQsNyw3LDAsMCwwLDMuNy0uNzQ2YzMuMjQ3LTEuODQxLDguMjQ0LTEwLjcsNS43MzEtMTYuMjg1QTEyLjc3LDEyLjc3LDAsMCwwLDI1LjA0OSw1LjdjLS4yMzYtLjI0OS0uMS0uMjM2LjA1OS0uMTUyYTEwLjA4LDEwLjA4LDAsMCwxLDIuODU3LDMuNjc2LDE0LjU3OCwxNC41NzgsMCwwLDEsMS4xLDEwLjI3OWMtLjQ5NCwxLjgxNy0yLjIsNS45MjgtNC42OTEsNy43MDZzLTUuNDI0LDIuOC02LjU2My45NTVNMTUuNTQ4LDE2LjY3M2MtMS43LS41LTMuODk0LTEuMjA4LTUuMTYzLTIuODY3QTguMDg4LDguMDg4LDAsMCwxLDguODU0LDEwLjQ5Yy0uMDQzLS4yNy0uMDgtLjUsMC0uNTU4YTIxLjg4MiwyMS44ODIsMCwwLDAsMS42ODgsMi43MjMsNi40ODcsNi40ODcsMCwwLDAsMy41MjYsMi4yNTYsMTIuMzgzLDEyLjM4MywwLDAsMSwzLjg2NywxLjM3Yy43MzkuNjI5LjgsMS45ODkuNTUyLDIuMTQycy0uNzU5LTEuMS0yLjkzOC0xLjc0OW0tOC4xNTUsMTAuNGMzLjM2OSwzLjEyMSw4LjQzOS0xLjE2Niw2LjIwNy00Ljk1NC0uMjUxLS40MjUtLjU3Ni0uNzQ5LS40NjktLjQyMy43MTQsMi4xNzguMDU0LDMuOS0xLjE3Niw0Ljc4OGE0LjA2Myw0LjA2MywwLDAsMS00LjE5Mi4zMjhjLS4zOS0uMi0uNTUxLjA5Mi0uMzcuMjYxbS0zLjkzLTEwLjE2Yy4wMTguMi4yOTIuNDU4LjcyMi41NzZhMi45NjksMi45NjksMCwwLDAsMi41NS0uNDEzLDIuNzU5LDIuNzU5LDAsMCwwLC44MS0zLjQ1MmMtLjE3Mi0uMzA4LS40LS41MzMtLjIxOC0uMDQxQTIuNjgsMi42OCwwLDAsMSw2LjE0OCwxNi41M2EyLjQzOSwyLjQzOSwwLDAsMS0yLjEuMTY0Yy0uMzkxLS4xMTktLjYuMDE2LS41OC4yMjNcXFwiLz48cGF0aCBkPVxcXCJNMTkuMDU2LDI4LjQwN2MtLjAzMy4zODkuNDE0LjQ2NiwxLjAxNi4zNzZhNi43NTUsNi43NTUsMCwwLDAsMi4zMTMtLjY0OCw5LjU0LDkuNTQsMCwwLDAsMy4zMTQtMi42M2MyLjY2Mi0zLjQ3MywzLjYtNy41ODIsMy40Ni04LjE3M0ExNi4xNzIsMTYuMTcyLDAsMCwxLDI3LDIyLjY5MmMtMS44ODgsMi45NjgtMy4yNTYsNC41NDgtNi40MTMsNS4zMTQtLjg3OS4yMTMtMS40ODUtLjExMi0xLjUyOS40bS03LTEzLjVBNy45NjcsNy45NjcsMCwwLDAsMTQuNiwxNi4wODlhMTIuMiwxMi4yLDAsMCwxLDIuOTYsMS4zMWMuMzc4LjI1My42MTguODE5LjY0Mi4zMTdzLS4yODUtLjkzNC0uOTc2LTEuMTY0YTE1LjI3NCwxNS4yNzQsMCwwLDAtMi4wMDktLjY3NGMtLjQ4NS0uMS0xLjI3My0uMjg1LTEuOTQ5LS40OTMtLjM3MS0uMTE0LS43NDgtLjMxMy0xLjIxNC0uNDgzTTEwLjAzNywyNy43MThjLjQyOS0uMDksMi45MjQtLjczNiwzLjUxLTIuNzg4LjE4My0uNjQuMjE1LS41MTEuMTY0LS4xNjVhMy44LDMuOCwwLDAsMS0zLjM1OCwzLjEyM2MtLjI4OS4wMy0uNjY4LS4xLS4zMTUtLjE3TTUuMDQ2LDE3LjJhNy45OTEsNy45OTEsMCwwLDAsMS4xOTUtLjMzNiwyLjM4MywyLjM4MywwLDAsMCwxLjIzMi0xLjc0MWMuMDY0LS41MDUuMDgzLS4zNzguMTA5LS4xYTIuNjI3LDIuNjI3LDAsMCwxLTIuMTQ3LDIuMzI0Yy0uMi4wMjgtLjU2LjAxMS0uMzg5LS4xNDNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMjcuNTQsMTcuNDQ2YzIuMTI0LTYuMTIzLTIuMzIxLTE1LjM3LTExLjMxNS0xNC4yNTgtOC4xMjYsMS04LjI1Nyw5LjU1Ny0xLjEsMTEuNTksOC4xMTIsMS4yMjgsMy4yMjcsNy4zNDcsMi41MzUsMTAuNDMzLS42MjEsMi43NjYsNi41NTUsMy4yMjEsOS44NzYtNy43NjVNNy4yMTksMjYuMmEyLjAyOCwyLjAyOCwwLDAsMSwxLjMzMi40NDIsMy41MjUsMy41MjUsMCwwLDAsMy43NTUtLjk4M0E0LjE1NCw0LjE1NCwwLDAsMCwxMi44NjksMjJjLS44MDYtMi4zMTktNC4yMjktMi4yNzgtNS43NTgtLjM1My0xLjY1NCwyLjE1LS40LDQuNTM5LjEwOCw0LjU0OE0yLjY3NiwxNS40NTFhMS4xNjYsMS4xNjYsMCwwLDAsLjkwOC44NjNjLjczMS4xLjg4LjQzNCwxLjc0My4yNjNBMi40NjQsMi40NjQsMCwwLDAsNy4xLDE0LjkxNmExLjc3MSwxLjc3MSwwLDAsMC0uODI0LTIuMTQsMi42ODksMi42ODksMCwwLDAtMy4wNDcuMzYzLDIuMjYzLDIuMjYzLDAsMCwwLS41NTgsMi4zMTJcXFwiIHN0eWxlPVxcXCJmaWxsOiM5OTlcXFwiLz48cGF0aCBkPVxcXCJNMjEuOTgxLDIyLjIyOGMtMi4yLS4yNzItNS4zNiw0LjY5LTIuMzc4LDQuMTA5aDBhNS42NDUsNS42NDUsMCwwLDAsMy42ODMtMS45MzIsMjMuMTM2LDIzLjEzNiwwLDAsMCw0LjA1NS03LjJjLjUtMS44NjEuMjUxLTQuNzQ1LS4yNjktMi4wMzYtLjUzMywyLjc4MS0yLjg5Myw3LjMzNi01LjA5MSw3LjA2NE0xMC41MjMsMjYuMzYyQTIuNzc4LDIuNzc4LDAsMCwwLDEyLjUsMjIuOTljLS4xNjUtMS4yNzYtLjg2MSwxLjU4NC0yLjE1LDIuMDEyLTEuOTUzLjY0OC0xLjczMywxLjg2MS4xNzYsMS4zNjFtLTQuOTc4LTEwLjJjLjY2My0uMTczLDEuNTQtMS4wNzcsMS4xLTEuNzY3LS41MzctLjg1LTIuMDMzLS4xMjItMi4wODQuODI0cy4yNzcsMS4xMjcuOTc5Ljk0M1xcXCIgc3R5bGU9XFxcImZpbGw6I2YzZjNmM1xcXCIvPlwiLFxuXHRcIi5ucG1pZ25vcmVcIjogXCI8cGF0aCBkPVxcXCJNMiwxMC41NTVIMzB2OS4zMzVIMTZ2MS41NTZIOS43NzhWMTkuODg5SDJabTEuNTU2LDcuNzc5SDYuNjY3VjEzLjY2Nkg4LjIyMnY0LjY2N0g5Ljc3OFYxMi4xMTFIMy41NTZabTcuNzc4LTYuMjIzdjcuNzc5aDMuMTExVjE4LjMzNGgzLjExMVYxMi4xMTFabTMuMTExLDEuNTU2SDE2djMuMTEySDE0LjQ0NFptNC42NjctMS41NTZ2Ni4yMjNoMy4xMTFWMTMuNjY2aDEuNTU2djQuNjY3aDEuNTU2VjEzLjY2NmgxLjU1NnY0LjY2N2gxLjU1NlYxMi4xMTFaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2IzODM3XFxcIi8+XCIsXG5cdFwiLnByb3BlcnRpZXNcIjogXCI8cGF0aCBkPVxcXCJNMjMuMjY1LDI0LjM4MWwuOS0uODk0YzQuMTY0LjEzNiw0LjIyOC0uMDEsNC40MTEtLjQzOGwxLjE0NC0yLjc4NUwyOS44MDUsMjBsLS4wOTMtLjIzMWMtLjA0OS0uMTIyLS4yLS40ODYtMi44LTIuOTY1VjE1LjVjMy0yLjg5LDIuOTM2LTMuMDM4LDIuNzY1LTMuNDYxTDI4LjUzOCw5LjIyNWMtLjE3MS0uNDIyLS4yMzYtLjU4Ny00LjM3LS40NzRsLS45LS45M2EyMC4xNjYsMjAuMTY2LDAsMCwwLS4xNDEtNC4xMDZsLS4xMTYtLjI2My0yLjk3NC0xLjNjLS40MzgtLjItLjU5Mi0uMjcyLTMuNCwyLjc4NmwtMS4yNjItLjAxOWMtMi44OTEtMy4wODYtMy4wMjgtMy4wMy0zLjQ2MS0yLjg1NUw5LjE0OSwzLjE4MmMtLjQzMy4xNzUtLjU4Ni4yMzctLjQxOCw0LjQzN2wtLjg5My44OWMtNC4xNjItLjEzNi00LjIyNi4wMTItNC40MDcuNDM4TDIuMjg1LDExLjczMywyLjE5NSwxMmwuMDk0LjIzMmMuMDQ5LjEyLjE5NC40OCwyLjgsMi45NjJsMCwxLjNjLTMsMi44OS0yLjkzNSwzLjAzOC0yLjc2MywzLjQ2MmwxLjEzOCwyLjgxN2MuMTc0LjQzMS4yMzYuNTg0LDQuMzY5LjQ3NmwuOS45MzVhMjAuMjQzLDIwLjI0MywwLDAsMCwuMTM3LDQuMWwuMTE2LjI2NSwyLjk5MywxLjMwOGMuNDM1LjE4Mi41ODYuMjQ3LDMuMzg2LTIuOGwxLjI2Mi4wMTZjMi44OTUsMy4wOSwzLjA0MywzLjAzLDMuNDY2LDIuODU5bDIuNzU5LTEuMTE1QzIzLjI4OCwyOC42NDQsMjMuNDQsMjguNTgzLDIzLjI2NSwyNC4zODFaTTExLjQwNywxNy44NTdhNC45NTcsNC45NTcsMCwxLDEsNi40ODgsMi44MjRBNS4wMTQsNS4wMTQsMCwwLDEsMTEuNDA3LDE3Ljg1N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM5OWI4YzRcXFwiLz5cIixcblx0XCI2NTAyIEFzc2VtYmx5XCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiODM2LjYzXFxcIiB5MT1cXFwiMzYuMjA1XFxcIiB4Mj1cXFwiODQzLjgwMlxcXCIgeTI9XFxcIjE0LjQ4XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDUyNS45MjIgMzAuMjQ5KSByb3RhdGUoMTgwKSBzY2FsZSgwLjYwNyAwLjYwNylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjI3NVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfYXNzZW1ibHk8L3RpdGxlPjxwYXRoIGQ9XFxcIk0xNiwyYy0xLjI0NiwzLjA1Ni0yLDUuMDU3LTMuMzkxLDguMDIyQTIxLjg4NCwyMS44ODQsMCwwLDAsMTYuMiwxMy4xNTZhMTQuODU4LDE0Ljg1OCwwLDAsMS00LTIuMjgzQzEwLjQzLDE0LjU3OSw3LjY0NiwxOS44NTUsMiwzMGM1LjE4Ni0yLjk5NCw5LjAxMi00LjY0OCwxMi42OTEtNC45NjZWMjQuMmgtLjgzNHYtLjgzN2guODM0VjI0LjJoMS42NzVWMjIuNTIxSDE0LjY5MXYtLjgzNGgtLjgzNFYyMC4wMTNoLjgzNHYtLjgzNGgxLjY3NXYuODM0SDE3LjJ2LjgzN2gtLjgzN3YtLjgzN0gxNC42OTF2MS42NzVoMS42NzV2LjgzNEgxNy4yVjI0LjJoLS44Mzd2Ljc4M2MzLjk4LjEsOC4wMDYsMS43NzIsMTMuNjM0LDUuMDIxLS44NjMtMS41ODktMS42MzYtMy4wMjEtMi4zNzItNC4zODVhMjUuNTI2LDI1LjUyNiwwLDAsMC00LjgzMy0zLjMzM0ExNC40MzYsMTQuNDM2LDAsMCwxLDI2LjY1LDIzLjhDMTkuMTcsOS44NzIsMTguNTY1LDguMDIsMTYsMlpNMTAuNTExLDE5LjE3OWgxLjY3MXYuODM0aC44Mzd2NS4wMjFoLS44MzdWMjIuNTIxSDEwLjUxMXYyLjUxMkg5LjY3M1YyMC4wMTNoLjgzN1ptMCwuODM0djEuNjc1aDEuNjcxVjIwLjAxM1ptNy41MjYtLjgzNGguODM3di44MzRoLjgzN3YuODM3aC44MzR2LS44MzdoLjgzN3YtLjgzNGguODM3djUuODU1aC0uODM3VjIwLjg1aC0uODM3di44MzdoLS44MzRWMjAuODVoLS44Mzd2NC4xODRoLS44MzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDAwMGJmXFxcIi8+PHBhdGggZD1cXFwiTTIzLjg4MSwxOC42NDJjLTYuMDY5LTguMjM3LTcuNDc2LTE0Ljg3Ni03LjgzMi0xNi40NjFBMTc1LjIxNywxNzUuMjE3LDAsMCwwLDIzLjg4MSwxOC42NDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmO2ZpbGwtb3BhY2l0eTowLjE2NTY4MDQ2ODA4MjQyOFxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wNTEsMi4xMiwxNS42LDMuMjI3Yy0uMTU5LjM5MS0uMzExLjc2NS0uNDYxLDEuMTMxcy0uMy43MjQtLjQ0OCwxLjA3Ny0uMy43LS40NDgsMS4wNTMtLjMuNzA2LS40NjUsMS4wNjYtLjMyOS43MjktLjUwNiwxLjExMS0uMzYyLjc3OC0uNTYxLDEuMTkzYy0uMDI4LjA1Ny0uMDYxLjEyMy0uMDg5LjE4MUEyMS44NzIsMjEuODcyLDAsMCwwLDE2LjIsMTMuMTU2YTE0Ljg3OSwxNC44NzksMCwwLDEtMy45ODktMi4yNzZsLS4xNC4yODdjLS4wNjUuMTMzLS4xNDQuMjgzLS4yMTIuNDJsLS4xMDYuMjE5Yy0uODc4LDEuNzkzLTIuMDA2LDMuOTg0LTMuNTI0LDYuODIyLDMuNTUxLTIsNy4zODEtNC44ODcsMTQuMzM4LTIuNC0uMzQ5LS42NjEtLjY3LTEuMjgtLjk3MS0xLjg2M3MtLjU4MS0xLjEyOC0uODQxLTEuNjQ0LS41LTEtLjcyNS0xLjQ2My0uNDMzLS45LS42MjktMS4zMTMtLjM4LS44MTgtLjU1NC0xLjItLjMzOS0uNzU0LS41LTEuMTE4UzE4LjA0Nyw2LjksMTcuOSw2LjU0NnMtLjI5MS0uNzA5LS40MzQtMS4wNjZjLS4wMzYtLjA5MS0uMDczLS4xODYtLjEwOS0uMjc3QzE2Ljk0OSw0LjI0NywxNi41MzYsMy4yNTgsMTYuMDUxLDIuMTJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+XCIsXG5cdFwiQWN0aW9uU2NyaXB0XCI6IFwiPHBhdGggZD1cXFwiTTIsMTUuMjgxYzEuOTE4LDAsMi4xMS0xLjA1NSwyLjExLTEuOTE4YTE3LjExOSwxNy4xMTksMCwwLDAtLjE5Mi0yLjIwNSwxOC43MjMsMTguNzIzLDAsMCwxLS4xOTItMi4yMDVjMC0yLjQsMS42My0zLjQ1MiwzLjgzNi0zLjQ1MmguNTc1VjYuOTM4SDcuNjU4Yy0xLjUzNCwwLTIuMTEuNzY3LTIuMTEsMi4yMDVhMTQuNDEyLDE0LjQxMiwwLDAsMCwuMTkyLDEuOTE4LDE0LjMwNiwxNC4zMDYsMCwwLDEsLjE5MiwyLjAxNGMwLDEuNzI2LS42NzEsMi40OTMtMS45MTgsMi44Nzd2LjFjMS4xNTEuMjg4LDEuOTE4LDEuMTUxLDEuOTE4LDIuODc3YTE0LjMwNiwxNC4zMDYsMCwwLDEtLjE5MiwyLjAxNCwxMywxMywwLDAsMC0uMTkyLDEuOTE4YzAsMS40MzguNTc1LDIuMywyLjExLDIuM2guNDc5VjI2LjZINy41NjJjLTIuMjA1LDAtMy44MzYtLjk1OS0zLjgzNi0zLjY0NGExOC43MjMsMTguNzIzLDAsMCwxLC4xOTItMi4yMDUsMTUuNjgsMTUuNjgsMCwwLDAsLjE5Mi0yLjExYzAtLjg2My0uMjg4LTEuOTE4LTIuMTEtMS45MThaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzQxNzE4XFxcIi8+PHBhdGggZD1cXFwiTTkuNDc5LDE4LjA2Miw4LjIzMywyMS44SDYuNkwxMC42Myw5LjkxMWgxLjgyMkwxNi40NzksMjEuOEgxNC45NDVMMTMuNywxOC4wNjJabTMuOTMyLTEuMTUxTDEyLjI2LDEzLjQ1OWE5LjM2NCw5LjM2NCwwLDAsMS0uNTc1LTIuMjA1aDBjLS4xOTIuNjcxLS4zODQsMS40MzgtLjU3NSwyLjExTDkuOTU5LDE2LjgxNWgzLjQ1MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjNDE3MThcXFwiLz48cGF0aCBkPVxcXCJNMTcuOTE4LDE5Ljk3OWE1Ljk0MSw1Ljk0MSwwLDAsMCwyLjc4MS43NjdjMS41MzQsMCwyLjQ5My0uODYzLDIuNDkzLTIuMDE0cy0uNjcxLTEuNzI2LTIuMjA1LTIuNGMtMS45MTgtLjY3MS0zLjE2NC0xLjcyNi0zLjE2NC0zLjM1NiwwLTEuODIyLDEuNTM0LTMuMjYsMy44MzYtMy4yNmE1LjEzNSw1LjEzNSwwLDAsMSwyLjU4OS41NzVsLS4zODQsMS4yNDdhNS41MTksNS41MTksMCwwLDAtMi4zLS40NzljLTEuNjMsMC0yLjIwNS45NTktMi4yMDUsMS44MjIsMCwxLjE1MS43NjcsMS42MywyLjQsMi4zLDIuMDE0Ljc2NywzLjA2OCwxLjcyNiwzLjA2OCwzLjQ1MiwwLDEuODIyLTEuMzQyLDMuNDUyLTQuMTIzLDMuNDUyYTUuODA3LDUuODA3LDAsMCwxLTMuMDY4LS43NjdaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzQxNzE4XFxcIi8+PHBhdGggZD1cXFwiTTMwLDE2LjYyM2MtMS45MTgsMC0yLjExLDEuMTUxLTIuMTEsMS45MThhMTUuNjgsMTUuNjgsMCwwLDAsLjE5MiwyLjExLDE1LjczOCwxNS43MzgsMCwwLDEsLjE5MiwyLjIwNWMwLDIuNjg1LTEuNjMsMy42NDQtMy44MzYsMy42NDRoLS41NzVWMjUuMDYyaC40NzljMS40MzgsMCwyLjExLS44NjMsMi4xMS0yLjNhMTMsMTMsMCwwLDAtLjE5Mi0xLjkxOCwxNC4zMDYsMTQuMzA2LDAsMCwxLS4xOTItMi4wMTRjMC0xLjcyNi43NjctMi41ODksMS45MTgtMi44Nzd2LS4xYy0xLjE1MS0uMjg4LTEuOTE4LTEuMTUxLTEuOTE4LTIuODc3YTE0LjMwNiwxNC4zMDYsMCwwLDEsLjE5Mi0yLjAxNCwxMywxMywwLDAsMCwuMTkyLTEuOTE4YzAtMS40MzgtLjU3NS0yLjIwNS0yLjExLTIuM2gtLjQ3OVY1LjRoLjU3NWMyLjIwNSwwLDMuODM2LDEuMDU1LDMuODM2LDMuNDUyYTE3LjExOSwxNy4xMTksMCwwLDEtLjE5MiwyLjIwNSwxNy4xMTksMTcuMTE5LDAsMCwwLS4xOTIsMi4yMDVjMCwuOTU5LjI4OCwxLjkxOCwyLjExLDEuOTE4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2M0MTcxOFxcXCIvPlwiLFxuXHRcIkFkYVwiOiBcIjxwYXRoIGQ9XFxcIk0yNC41NTQsMjAuMDc1Yy4yMDkuMjcsMS4zNTYuOTYxLDEuMzcsMS4yNDZhNi45MjEsNi45MjEsMCwwLDAtMS40LS4zMjRjLS40NjgtLjE0Mi0uOTUxLS4yOTMtMS40MTItLjQ4YTkuMiw5LjIsMCwwLDEtMi4zNzUtMS4zQTMuMTQ2LDMuMTQ2LDAsMCwxLDE5LjMsMTYuNzVhMS43MjIsMS43MjIsMCwwLDEsMS43NjctMS44MjIsMy41ODQsMy41ODQsMCwwLDEsMS41OTMuMzIxYy4xNDYuMDY2LDEuMzEuNjA2LDEuMjU2LjgwOWE1LjUsNS41LDAsMCwwLTEuNDEtLjExMmMtLjY0OS4yNDQtLjQuODI4LS4xNjgsMS4zMTFhNy44NzcsNy44NzcsMCwwLDAsMS4wNzgsMS41NTRDMjMuNTgsMTkuMDA1LDI0LjMsMjAuMDgyLDI0LjU1NCwyMC4wNzVaXFxcIiBzdHlsZT1cXFwiZmlsbDojMGYyM2MzXFxcIi8+PHBhdGggZD1cXFwiTTI0LjE0MSwxNi4yNzZjLjEyOC0uNTkuODE5LTEuMzg0LDEuMzQ0LS43NzNhNC4yLDQuMiwwLDAsMSwuNTc4LDEuOTE4Yy4xMi42NTYuMiwxLjMyNy4yNjEsMS45ODIuMDM4LjM3OS4zNCwxLjc5NC4xMjMsMi4wNzVhMjMuMjQsMjMuMjQsMCwwLDEtMi45MjItMi44MzgsMy43NjMsMy43NjMsMCwwLDEtLjkyNS0xLjdDMjIuNSwxNS44NjcsMjMuNDc5LDE2LjIxLDI0LjE0MSwxNi4yNzZaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWExOTc4XFxcIi8+PHBhdGggZD1cXFwiTTI2LjMsMTcuNzgxYy4xNDEtLjczMi0uNDA2LTIuNTkyLTEuMDY3LTIuOTQ5YS4wNi4wNiwwLDAsMCwuMDQ0LS4wMDdjLS4xNTYtLjQ0NC0xLjM1OSwxLjExNi0xLjIyOCwxLjE3NC0uMzE2LS4xMzguNzc0LTEuOTg0Ljk4OC0yLjE2LjctLjU3OCwxLjM3Mi0uMDg2LDEuODQ1LjU0M2E2LjAzNiw2LjAzNiwwLDAsMSwuNzMzLDQuNDM0LDQuNSw0LjUsMCwwLDEtLjQyMSwxLjMxMmMtLjEuMjItLjQ1LDEuMS0uNjgyLDEuMTc0QTE0Ljc1NCwxNC43NTQsMCwwLDAsMjYuMywxNy43ODFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMGYyM2MzXFxcIi8+PHBhdGggZD1cXFwiTTMuNjg3LDguNGMuMTc5LS4xODgtLjA0MS0xLjUyNy4zMjQtMS41NDguMjYyLS4wMTUuNTUzLDEuNzQxLjYyNywxLjk2OGE5LjIsOS4yLDAsMCwwLDEuMTI3LDIuMzI5LDcuNTI5LDcuNTI5LDAsMCwwLDQuMDE2LDIuOTc4LDQuNTUsNC41NSwwLDAsMCwyLjM2Ni4yYy45MzEtLjIwOCwxLjgyLS41NzcsMi43NTctLjc2NSwxLjM1LS4yNywzLjM0Mi0uMzUyLDQuNDM4LjY0Ny43LjY0MS4zNzYuNzYuMDQzLDEuNDIxYTIuNDQ1LDIuNDQ1LDAsMCwwLC4xNzgsMi41NjJjLjIzNS4zNDIsMS4wMzMuODI3LjY3NSwxLjA5NC0uNTY3LjQyNC0xLjI3Ny0uNDUyLTEuNjM2LS43NzYtMS40LTEuMjY0LTIuNzExLTEuMzEzLTQuNDkyLTEuMDc0YTguOTg3LDguOTg3LDAsMCwxLTQuODgzLS43MDhBOS40NjksOS40NjksMCwwLDEsMy42ODcsOC40WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS45NDEsMzBhMy42MTUsMy42MTUsMCwwLDEtMi4zMjUtLjgxN2MuNDY5LS4wOTIsMS4wMjEuMDI1LDEuNTA4LS4wNDRhOS43LDkuNywwLDAsMCwxLjc1NC0uNDNBMTAuNTM3LDEwLjUzNywwLDAsMCwyMy45LDI3LjE1NWE2LjU1LDYuNTUsMCwwLDAsMi43NTctNS4yMTRjLjE0OS0uMDg4LjMxNiwxLjAzNC4zMTksMS4wOTFhNS43ODksNS43ODksMCwwLDEtLjE5LDEuNzI3LDYuODY3LDYuODY3LDAsMCwxLTEuNDIzLDIuNzc0QTcuMjg2LDcuMjg2LDAsMCwxLDE5Ljk0MSwzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMmQyZDJcXFwiLz48cGF0aCBkPVxcXCJNMTguOTYyLDE5LjEwOWE1Ljc2LDUuNzYsMCwwLDEtMi4wNS44NTksMTMuMzgsMTMuMzgsMCwwLDEtMi4yMjQuNTQ5LDguODYxLDguODYxLDAsMCwxLTQuNDM1LS41MSw5LjkzOSw5LjkzOSwwLDAsMS0zLjg0OS0yLjRDNi4wNTIsMTcuMjQsNC4zLDE1LjE5LDQuODU2LDE0LjU1N2MuMjQ4LS4yODIuODc1Ljg0NiwxLC45OTJhNSw1LDAsMCwwLDEuMzU3LDEuMTEsMTAuOTE3LDEwLjkxNywwLDAsMCw0LjAzNSwxLjQ1Niw2LjY5Myw2LjY5MywwLDAsMCwyLjM0LS4wOTQsMTIuNzQzLDEyLjc0MywwLDAsMSwxLjY5NC0uNDg1LDQsNCwwLDAsMSwyLjExMy40NTdDMTcuNzM5LDE4LjE2MywxOC45MTgsMTguNzM2LDE4Ljk2MiwxOS4xMDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTI4LjMxMywxNS4wNzhhMTkuMjc3LDE5LjI3NywwLDAsMS0uNDUzLDMuNzc0Yy0uMTc2LS4yNDIuMDE2LTEuNDcsMC0xLjc5MmE2LjAzMiw2LjAzMiwwLDAsMC0uMzg0LTIuMDg3QTQuOTI1LDQuOTI1LDAsMCwwLDI2LjEsMTMuMzEyYTE0LjcyOCwxNC43MjgsMCwwLDEtMS4yNy0xLjUzNmMtMS44MzctMi4zODItMy4yNDUtNS4yMTEtMi45LTguMy4wMzQtLjMwOC4wNjktMS40NDguNDExLTEuNDQ1LjE1MiwwLC4yNjYsMS41NjEuMjksMS43MThhMTIuNTI3LDEyLjUyNywwLDAsMCwxLjIyNCw0LjExNmMuNjcsMS4yMjIsMS45NDcsMi4wMjMsMi44MjUsMy4xQTYuNTc5LDYuNTc5LDAsMCwxLDI4LjMxMywxNS4wNzhaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTE1LjcsMjYuOTM1YTEwLjg0NSwxMC44NDUsMCwwLDAsNi40MzYtLjY4Nyw2Ljk0MSw2Ljk0MSwwLDAsMCw0LjI3OC00LjQxOGMuMzE5LjItLjA0OCwxLjUyOS0uMTI4LDEuNzgxYTUuNzI2LDUuNzI2LDAsMCwxLTEuMDEsMS44MTMsOC45MzMsOC45MzMsMCwwLDEtMy4yNTcsMi41MTRDMjAuMzE2LDI4LjcxLDE2LjM1NywyOS41OSwxNS43LDI2LjkzNVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMmQyZDJcXFwiLz48cGF0aCBkPVxcXCJNMTkuMTUxLDE5LjM3NmMuMzY3LDIuMTA3LTIuOTU3LDMuMTI0LTQuNDc4LDMuMjEzLTEuODU5LjExLTQuOTI5LS4yOTItNi4wNi0yLjAzMS0uNjczLTEuMDM1Ljc4MS0uMDksMS4xODguMDU4YTguNjYzLDguNjYzLDAsMCwwLDMuMDYuNSwxMS42LDExLjYsMCwwLDAsMy4zMDUtLjUsMTMuNzI1LDEzLjcyNSwwLDAsMCwxLjUzMy0uNTc2QzE4LDE5LjkwOCwxOC44MjMsMTkuMzQ5LDE5LjE1MSwxOS4zNzZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTI0LjE0MiwyMy40NmMuNC0uOTQ1LTEuODgzLTEuNTc4LTIuNDQ1LTEuODU4YTQuODU3LDQuODU3LDAsMCwxLTEuMzE1LS44NjdjLS4xODEtLjE4MS0uODcyLS45Mi0uODA3LTEuMjE5YTQuOTEyLDQuOTEyLDAsMCwxLDEuMDg3LS4xNzUsNS45Myw1LjkzLDAsMCwxLC44NTUuNTg4LDEwLjMyMywxMC4zMjMsMCwwLDAsLjk2NC41QTE1LjYxNSwxNS42MTUsMCwwLDAsMjQuNiwyMS4yYy4zMDguMDksMS41NDkuMjA4LDEuNzI3LjQyOEMyNi4yODcsMjEuOTI0LDI0LjM1NywyMy42NDksMjQuMTQyLDIzLjQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0yNi4xLDIyLjE3MmMuMjY1LjQzLTEuMDgsMS44MzEtMS4zNjMsMi4xMDVhOS4zNCw5LjM0LDAsMCwxLTIuNTY2LDEuNzI4LDcuNzQ4LDcuNzQ4LDAsMCwxLTIuNTYuNzUzYy0uNjc5LjA1OC0xLjk2Ni0uMTI0LTIuMTQxLS45NzlhNi45NTEsNi45NTEsMCwwLDEsMS4xNzctLjA4NmMuNDYyLS4wNTkuOTIxLS4xNDksMS4zNzYtLjI0NmExMy4wNjUsMTMuMDY1LDAsMCwwLDIuMTg0LS42NDUsMTEuNTA2LDExLjUwNiwwLDAsMCwyLjA4NC0xLjExLDEwLjg3MiwxMC44NzIsMCwwLDAsMS4wNzgtLjgyMkMyNS40NzQsMjIuNzgxLDI1Ljk4NiwyMi4xNjgsMjYuMSwyMi4xNzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTE4Ljc1OCwxMS45NjVjLS4xLTEuMzA4LDIuNjEyLTEuMywzLjI3MS0xLjA5MmE1Ljk3Niw1Ljk3NiwwLDAsMSwyLjk4MiwyLjQ3NWMtMS4wODIuOC0yLjQ0OS4wOTQtMy4zLS42NTRhNC4zMjQsNC4zMjQsMCwwLDAtMS40ODEtMS4wMjlDMTkuNDIxLDExLjQsMTkuNDEyLDExLjc1OSwxOC43NTgsMTEuOTY1WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0yNS43ODMsMTMuMzQxYy0uNDQ0LS4wMjktLjMxNi4wNzEtLjY0Ny0uMjEyLS4zNTgtLjMwNy0uNjE0LS43OTUtLjk0NS0xLjE0MS0uNTM0LS41NTgtMS4yNDItLjg5NS0xLjcyMy0xLjQ4NWE3LjI2OSw3LjI2OSwwLDAsMS0xLjYyNC00Ljg0OGMuMDE4LTEuNDg5LjQwNy4xODcuNTUxLjY3NWExMi4yNzYsMTIuMjc2LDAsMCwwLDEuMTI2LDIuNzA4LDQ2LjA1NSw0Ni4wNTUsMCwwLDAsMy40LDQuMzIxQzI1Ljg4MiwxMy4zNjEsMjUuODI0LDEzLjMzOCwyNS43ODMsMTMuMzQxWlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0yMC4wNjgsMTQuNzU2Yy4wMzMtLjYyNS0uOTExLS43OTItMS4yMTEtMS40Mi0uMTY0LS4zNDMtLjIxMS0uNTY5LjAyOS0uNy4wODItLjA0NS4zODMuMDEyLjUtLjAyLjI3MS0uMDc2LjMzNS0uMjczLjU4MS0uNEExLjE5MywxLjE5MywwLDAsMSwyMS42LDEzLjIzNywxLjgyMSwxLjgyMSwwLDAsMSwyMC4wNjgsMTQuNzU2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0yMC41LDE0Ljc0NWExLjkzMSwxLjkzMSwwLDAsMCwxLjMyMy0xLjdjLjUyNC4xMzkuOTI4LjY1OCwxLjUyMS43NzFhMi41ODQsMi41ODQsMCwwLDAsMS4wMjktLjAxN2MuMjA3LS4wNDUuNTQtLjI3NC43MjEtLjI1OS0uMDMzLjE2My0uNDY0LjU0Ni0uNTY1LjcxN2E0LjI0Miw0LjI0MiwwLDAsMC0uMzg4LjljLS4yMjkuNzQxLS4wNjEuNzM5LS43MDkuMzExYTQuMjg0LDQuMjg0LDAsMCwwLTEuOTU3LS43MkMyMS4yMDksMTQuNzIyLDIwLjU5NCwxNC43NjcsMjAuNSwxNC43NDVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTE5LjkwNSwyMC43MzRhMi4wMDgsMi4wMDgsMCwwLDEtMS40LDEuNzEyYy0uMjA1LjA5MS0yLjAxOC43MzMtMi4wMzIuMzQ4LS4wMDctLjIsMS42MjQtLjk1NCwxLjgwOS0xLjExYTMuMzU1LDMuMzU1LDAsMCwwLC44NjctMS4wNzFjLjA1NS0uMTEyLjIzMi0uOTI1LjI3MS0uOTQzQzE5LjY0NCwxOS41NjQsMTkuOTA4LDIwLjYsMTkuOTA1LDIwLjczNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMmQyZDJcXFwiLz48cGF0aCBkPVxcXCJNMTEuMzczLDEyLjUzMmExMC42MjUsMTAuNjI1LDAsMCwxLDMuNzEtLjkxNCwxMC4yODIsMTAuMjgyLDAsMCwxLDEuODY1LjAyNGMuMzY2LjAzOSwxLjQ2OS4wNTQsMS43NC4zNDNhLjI1NS4yNTUsMCwwLDEtLjI3My4xNzNjLS4wMzcuMDc3LjI1MS4zNzEuMy40MjUtLjAzNC4wMzQtMS40NDUtLjQtMS41NzItLjQyNGExMC42MzIsMTAuNjMyLDAsMCwwLTIuMjgyLS4xMzQsMTYsMTYsMCwwLDAtMS44NDEuMTk0QTYuMjI0LDYuMjI0LDAsMCwxLDExLjM3MywxMi41MzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTIyLjUxMiwxMC43MzFhMS44ODgsMS44ODgsMCwwLDEtMS41MTctLjZjLS4yNDctLjM0OS0uNzM3LTEuNjkyLS4zODUtMi4wMjEuMjA5LS4yLjM4NC42NjIuNDg0Ljg0NkExMC44MjIsMTAuODIyLDAsMCwwLDIyLjUxMiwxMC43MzFaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTI3Ljc4OCwxOS4yYTE5LjIxMiwxOS4yMTIsMCwwLDEtLjc0OSwzLjMxM2MtLjE3My0uMDc3LS4yNzUtLjc3OC0uNTYyLS45NWE0LjA3LDQuMDcsMCwwLDAsLjc2LTEuMTU0QzI3LjM4OSwyMC4xMDcsMjcuNTQsMTkuMzYzLDI3Ljc4OCwxOS4yWlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS45ODEsMTEuODQzYy0uMTMyLjI2OC0uOTMyLDEuMS0xLjExOC40ODFDMTguNzU2LDExLjk2OCwxOS43MzksMTEuNDgzLDE5Ljk4MSwxMS44NDNabS0uNzQ3LjQ1Yy4yMjguMDA2LjAxMi0uMjQ4LjAxMi0uMjY2QzE5LjI0NSwxMS45ODQsMTguODc4LDEyLjI5MywxOS4yMzQsMTIuMjkzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPlwiLFxuXHRcIkFMXCI6IFwiPHBhdGggZD1cXFwiTTExLjYxNiw3Ljk4NkExLjU1OSwxLjU1OSwwLDAsMCwxMC4xNiw3SDEwLjFhMS41NTgsMS41NTgsMCwwLDAtMS40NTYuOTg2TDIsMjVINS44MDZsMS4wMTUtMi44MzRoNi42MjFMMTQuNDU3LDI1aDMuOFpNNy45NDQsMTguOTU2bDIuMTg4LTYuMTExLDIuMTg4LDYuMTE2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzJlYTk4ZVxcXCIvPjxwYXRoIGQ9XFxcIk0yMy44MjksMjEuNjcxVjcuMTI5SDIwLjNWMjIuNzQ3QTIuMzQ2LDIuMzQ2LDAsMCwwLDIyLjU3LDI1SDMwVjIxLjY3MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyZWE5OGVcXFwiLz5cIixcblx0XCJBTlRMUjRcIjogXCI8cGF0aCBkPVxcXCJNMTQuMTc3LDcuMjc4YTIuMDgsMi4wOCwwLDAsMSwzLjA0MS0uOEEzLjU3MSwzLjU3MSwwLDAsMSwxOC4yLDguMDIyYzEuMzU2LDMuMTIyLDIuOSw2LjE2NSw0LjExOSw5LjM0NS42NDUsMS41LDEuNDI5LDIuOTM4LDEuOTk0LDQuNDY4YTEuNDU1LDEuNDU1LDAsMCwxLTIuMjU4LDEuMzc2Yy0yLjgtMS41NzItNS42MjgtMy4wOTQtOC4zODUtNC43MzEsMi4wMDkuMDA4LDQuMDE4LS4wMDgsNi4wMjUuMDEzYTE5LjcwNywxOS43MDcsMCwwLDAtMS4yODgtMi45MThjLS43ODEtMS44NTgtMS42LTMuNy0yLjM1OC01LjU2NWE5Ljc4Myw5Ljc4MywwLDAsMC0xLjAzMiwyLjEyNWMtMS4zLDMuMTgyLTIuODcsNi4yNDEtNC4xMzYsOS40MzUtLjI4MS41OS0uNDI0LDEuMzQ0LTEuMDM1LDEuNjlhMS40NDcsMS40NDcsMCwwLDEtMi4wOTQtLjczOGMtLjI0MS0uNjEuMTUxLTEuMi4zODItMS43NDMuNzc5LTEuNzI1LDEuNjQ1LTMuNDEzLDIuMjgzLTUuMkMxMS42NSwxMi44LDEyLjkxNiwxMC4wNDEsMTQuMTc3LDcuMjc4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZlZmVmZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMy44MTcsMi4yQTEzLjkyMywxMy45MjMsMCwwLDEsMjkuNTI2LDEyLjU0OWExMy43MzMsMTMuNzMzLDAsMCwxLTIuMDgyLDExLjUxOUExNC4wNzQsMTQuMDc0LDAsMCwxLDcuNzM4LDI3LjI5M2ExMy44NTIsMTMuODUyLDAsMCwxLTUuNjE1LTkuNDgzQTE0LjE1MiwxNC4xNTIsMCwwLDEsMy40NTEsOS44NSwxMy45NjEsMTMuOTYxLDAsMCwxLDEzLjgxNywyLjJtLjM1OSw1LjA4Yy0xLjI2MSwyLjc2Mi0yLjUyNiw1LjUyNS0zLjc2Miw4LjMtLjYzOCwxLjc4Ni0xLjUsMy40NzMtMi4yODMsNS4yLS4yMzEuNTQyLS42MjMsMS4xMzMtLjM4MiwxLjc0M2ExLjQ0NywxLjQ0NywwLDAsMCwyLjA5NC43MzhjLjYxLS4zNDcuNzUzLTEuMSwxLjAzNS0xLjY5LDEuMjY2LTMuMTk0LDIuODMzLTYuMjUzLDQuMTM2LTkuNDM1YTkuNzgzLDkuNzgzLDAsMCwxLDEuMDMyLTIuMTI1Yy43NTYsMS44NjgsMS41NzcsMy43MDcsMi4zNTgsNS41NjVhMTkuNzA3LDE5LjcwNywwLDAsMSwxLjI4OCwyLjkxOGMtMi4wMDctLjAyLTQuMDE2LS4wMDUtNi4wMjUtLjAxMywyLjc1NywxLjYzNyw1LjU4OCwzLjE1OSw4LjM4NSw0LjczMWExLjQ1NSwxLjQ1NSwwLDAsMCwyLjI1OC0xLjM3NmMtLjU2NS0xLjUyOS0xLjM0OS0yLjk3MS0xLjk5NC00LjQ2OC0xLjIyLTMuMTc5LTIuNzYyLTYuMjIzLTQuMTE5LTkuMzQ1YTMuNTcxLDMuNTcxLDAsMCwwLS45ODItMS41NDRBMi4wOCwyLjA4LDAsMCwwLDE0LjE3Nyw3LjI3OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlNDRhMzJcXFwiLz5cIixcblx0XCJBcGFjaGUgQ29uZmlndXJhdGlvblwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi01NjAyLjY4MlxcXCIgeTE9XFxcIjc2OC41NDFcXFwiIHgyPVxcXCItNTU5OC43MjdcXFwiIHkyPVxcXCI3NjMuOTE3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuNDIzLCAtMC45MDYsIC0wLjkwNiwgLTAuNDIzLCAzMDgyLjg1MywgLTQ3NDguNTUxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2Y2OTkyM1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zMTJcXFwiIHN0b3AtY29sb3I9XFxcIiNmNzlhMjNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuODM4XFxcIiBzdG9wLWNvbG9yPVxcXCIjZTk3ODI2XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCItNTYzMS45NTJcXFwiIHkxPVxcXCI3NjkuMDUyXFxcIiB4Mj1cXFwiLTU2MDMuNzM3XFxcIiB5Mj1cXFwiNzY5LjA1MlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgwLjQyMywgLTAuOTA2LCAtMC45MDYsIC0wLjQyMywgMzA4Mi44NTMsIC00NzQ4LjU1MSlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMzIzXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWUyMDY0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjYzXFxcIiBzdG9wLWNvbG9yPVxcXCIjYzkyMDM3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjc1MVxcXCIgc3RvcC1jb2xvcj1cXFwiI2NkMjMzNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2U5NzgyNlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiLTU2MjguNTQ2XFxcIiB5MT1cXFwiNzY2LjIyMVxcXCIgeDI9XFxcIi01NjExLjczM1xcXCIgeTI9XFxcIjc2Ni4yMjFcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMC40MjMsIC0wLjkwNiwgLTAuOTA2LCAtMC40MjMsIDMwODIuODUzLCAtNDc0OC41NTEpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMjgyNjYyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjA5NVxcXCIgc3RvcC1jb2xvcj1cXFwiIzY2MmU4ZFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43ODhcXFwiIHN0b3AtY29sb3I9XFxcIiM5ZjIwNjRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTQ5XFxcIiBzdG9wLWNvbG9yPVxcXCIjY2QyMDMyXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCItNTYzMC4zNjdcXFwiIHkxPVxcXCI3NjkuMzE2XFxcIiB4Mj1cXFwiLTU2MDIuMTUyXFxcIiB5Mj1cXFwiNzY5LjMxNlxcXCIgeGxpbms6aHJlZj1cXFwiI2JcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImVcXFwiIHgxPVxcXCItNTYyOC4zMVxcXCIgeTE9XFxcIjc2OC45MzNcXFwiIHgyPVxcXCItNTYxMy40ODJcXFwiIHkyPVxcXCI3NjguOTMzXFxcIiB4bGluazpocmVmPVxcXCIjY1xcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZlxcXCIgeDE9XFxcIi01NjMwLjM2N1xcXCIgeTE9XFxcIjc2Ni4zOTRcXFwiIHgyPVxcXCItNTYwMi4xNTJcXFwiIHkyPVxcXCI3NjYuMzk0XFxcIiB4bGluazpocmVmPVxcXCIjYlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZ1xcXCIgeDE9XFxcIi01NjMyLjExOFxcXCIgeTE9XFxcIjc2Ni41MzlcXFwiIHgyPVxcXCItNTYwMy45MDJcXFwiIHkyPVxcXCI3NjYuNTM5XFxcIiB4bGluazpocmVmPVxcXCIjYlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaFxcXCIgeDE9XFxcIi01NjMwLjM2N1xcXCIgeTE9XFxcIjc2NS41MjZcXFwiIHgyPVxcXCItNTYwMi4xNTJcXFwiIHkyPVxcXCI3NjUuNTI2XFxcIiB4bGluazpocmVmPVxcXCIjYlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaVxcXCIgeDE9XFxcIi01NjMwLjM2N1xcXCIgeTE9XFxcIjc2NS42MjVcXFwiIHgyPVxcXCItNTYwMi4xNTJcXFwiIHkyPVxcXCI3NjUuNjI1XFxcIiB4bGluazpocmVmPVxcXCIjYlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwialxcXCIgeDE9XFxcIi01NjE0LjUxNlxcXCIgeTE9XFxcIjc2NS42NDVcXFwiIHgyPVxcXCItNTYwOC4yOFxcXCIgeTI9XFxcIjc2NS42NDVcXFwiIHhsaW5rOmhyZWY9XFxcIiNiXFxcIi8+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfYXBhY2hlPC90aXRsZT48cGF0aCBkPVxcXCJNMTkuOTkzLDIuMTMzYTEwLjI2NywxMC4yNjcsMCwwLDAtMi4wNCwyLjA1NmwuOCwxLjUxYTE5LjczMywxOS43MzMsMCwwLDEsMS43MDgtMi4xNDRjLjA0NC0uMDQ5LjA2OC0uMDcyLjA2OC0uMDcybC0uMDY4LjA3MmExNy44NjUsMTcuODY1LDAsMCwwLTEuNiwyLjE3NCwzMC4xLDMwLjEsMCwwLDAsMy4xMTEtLjM4NSwzLjI4OCwzLjI4OCwwLDAsMC0uMy0yLjVTMjAuOSwxLjYsMTkuOTkzLDIuMTMzWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC42MzgsMTAuNzQ5bC4wMTgsMC0uMTE1LjAxMy0uMDIxLjAwOVpcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuODIxLDEzLjQ1NWMtLjA2Ni4wMTUtLjEzMi4wMjYtLjIuMDM2QzE3LjY4OSwxMy40ODEsMTcuNzU2LDEzLjQ2OSwxNy44MjEsMTMuNDU1WlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4yNywxOS41MjRjLjAwOS0uMDIzLjAxNy0uMDQ1LjAyNS0uMDY4cS4yNjQtLjcuNTIzLTEuMzU3LjI5MS0uNzQxLjU3NS0xLjQzNi4zLS43MzMuNTktMS40MTguMzA1LS43MTguNi0xLjM4NC4yNC0uNTQyLjQ3NC0xLjA0OS4wNzgtLjE2OS4xNTUtLjMzNS4xNTMtLjMyOS4zLS42NDUuMTM4LS4yOTEuMjc0LS41N2MuMDMtLjA2Mi4wNi0uMTIzLjA5LS4xODVsLjAxNS0uMDMtLjEuMDExLS4wNzgtLjE1NGMtLjAwNy4wMTUtLjAxNS4wMy0uMDIzLjA0NXEtLjIxMS40MTgtLjQxNy44NDUtLjExOS4yNDYtLjIzOC40OTUtLjMyOC42ODktLjY0NSwxLjM4OVQxMy43NjYsMTUuMXEtLjMuNy0uNTk0LDEuNHQtLjU2NywxLjM4N3EtLjI4OS43Mi0uNTYyLDEuNDI2LS4wNjIuMTU5LS4xMjMuMzE4LS4yMTkuNTY5LS40MjYsMS4xMjRsLjEyMy4yNDMuMTEtLjAxMi4wMTItLjAzM1ExMi4wMDgsMjAuMjE2LDEyLjI3LDE5LjUyNFpcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuNTcsMTMuNVpcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuMzA1LDE0LjgxOGwtLjMxNS4wNTVoMGwuMTYxLS4wMjVDMTcuMiwxNC44MzksMTcuMjUzLDE0LjgyOSwxNy4zMDUsMTQuODE4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2JlMjAyZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy4zMDUsMTQuODE4bC0uMzE1LjA1NWgwbC4xNjEtLjAyNUMxNy4yLDE0LjgzOSwxNy4yNTMsMTQuODI5LDE3LjMwNSwxNC44MThaXFxcIiBzdHlsZT1cXFwiZmlsbDojYmUyMDJlO29wYWNpdHk6MC4zNDk5OTk5OTQwMzk1MzU1O2lzb2xhdGlvbjppc29sYXRlXFxcIi8+PHBhdGggZD1cXFwiTTE3LjU3MywxMy41aDBsLjA1LS4wMDdjLjA2OC0uMDEuMTM1LS4wMjIuMi0uMDM2bC0uMjQ4LjA0MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZTIwMmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuNTczLDEzLjVoMGwuMDUtLjAwN2MuMDY4LS4wMS4xMzUtLjAyMi4yLS4wMzZsLS4yNDguMDQyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2JlMjAyZTtvcGFjaXR5OjAuMzQ5OTk5OTk0MDM5NTM1NTtpc29sYXRpb246aXNvbGF0ZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4zOTQsOS42cS4zNjUtLjY4Mi43MzktMS4zMzIuMzg4LS42NzQuNzg0LTEuMzA1bC4wNDYtLjA3NXEuMzkyLS42Mi43OS0xLjE5MWwtLjgtMS41MS0uMTgyLjIyNWMtLjIzMS4yODgtLjQ3LjYtLjcxNi45MjUtLjI3Ny4zNy0uNTYyLjc2NC0uODUxLDEuMTc5LS4yNjcuMzgzLS41MzguNzg0LS44MDksMS4yLS4yMzEuMzUzLS40NjIuNzE3LS42OTIsMS4wOWwtLjAyNi4wNDJMMTUuNzE4LDEwLjlRMTYuMDUyLDEwLjI0NCwxNi4zOTQsOS42WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS42NTEsMjEuMTkycS0uMjA3LjU2OC0uNDE1LDEuMTU5bC0uMDA2LjAxNy0uMDU5LjE2N2MtLjA5My4yNjYtLjE3NS41LS4zNjEsMS4wNDlhMi4xMDcsMi4xMDcsMCwwLDEsLjc4Ni45MjYsMS42OCwxLjY4LDAsMCwwLS41NDQtMS4xNTQsMy42MjEsMy42MjEsMCwwLDAsMy40ODktMS40MiwyLjc5MSwyLjc5MSwwLDAsMCwuMTY1LS4zMTMsMS40NTEsMS40NTEsMCwwLDEtMS40LjUxM2wwLDAsMCwwYTQuMDU5LDQuMDU5LDAsMCwwLDIuMDQ2LTEuNjcyYy4xMTEtLjE3OC4yMTgtLjM3Mi4zMjgtLjU4N2EzLjMsMy4zLDAsMCwxLTMuMTA5LDEuMDFsLS44NDIuMDkyQzExLjcsMjEuMDUsMTEuNjc3LDIxLjEyMSwxMS42NTEsMjEuMTkyWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4wNDQsMTkuMzA2cS4yNzMtLjcwNi41NjItMS40MjYuMjc2LS42OS41NjctMS4zODd0LjU5NC0xLjRxLjMwOC0uNzExLjYyOS0xLjQxOXQuNjQ1LTEuMzg5cS4xMTgtLjI0OC4yMzgtLjQ5NS4yMDctLjQyNi40MTctLjg0NWMuMDA3LS4wMTUuMDE1LS4wMy4wMjMtLjA0NUwxNC42NzcsOC44NDdsLS4wNTEuMDgzYy0uMjQyLjQtLjQ4NC44LS43MjEsMS4yMTZzLS40NzUuODQ0LS43LDEuMjc2cS0uMjkxLjU0Ny0uNTY4LDEuMWwtLjExLjIyNWMtLjIyNy40NjctLjQzMi45MTgtLjYxNywxLjM1MnEtLjMxNS43MzctLjU1NiwxLjQwNmMtLjEwNy4yOTMtLjIuNTc2LS4yOTIuODQ3LS4wNzMuMjMyLS4xNDIuNDY0LS4yMDguN3EtLjIzNC44MTgtLjQsMS42MzFMMTEuNSwyMC43NDhxLjIwOC0uNTU0LjQyNi0xLjEyNFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMTAuNDM1LDE4Ljc1NWExNi4wNywxNi4wNywwLDAsMC0uMjcyLDEuOTc0YzAsLjAyMywwLC4wNDYtLjAwNS4wNjlhNC4xNSw0LjE1LDAsMCwwLTEuMi0xLjAyOSw1LjgyNSw1LjgyNSwwLDAsMSwxLjE3MiwyLjY5MywyLjY0MiwyLjY0MiwwLDAsMS0xLjMyNS0uMjI2LDIuNjYyLDIuNjYyLDAsMCwwLDEuMTMuNjg2LDMuMjQ3LDMuMjQ3LDAsMCwwLTEuNTcxLjc4MywzLjM1OSwzLjM1OSwwLDAsMSwxLjg2MS0uMzQyQzkuNTEsMjUuMzg5LDguNzkzLDI3LjYyNiw4LjA3NiwzMGEuNjI1LjYyNSwwLDAsMCwuNDI1LS40MTNjLjEyOC0uNDMuOTc2LTMuMjUxLDIuMzA2LTYuOTU5bC4xMTUtLjMxOC4wMzItLjA4OXEuMjExLS41ODMuNDM3LTEuMTlsLjEtLjI3NywwLS4wMDVMMTAuNDUsMTguNjg0QzEwLjQ0NSwxOC43MDcsMTAuNDM5LDE4LjczMSwxMC40MzUsMTguNzU1WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNlKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNS44OCwxMS4wNzhsLS4wOS4xODVxLS4xMzUuMjc5LS4yNzQuNTctLjE1LjMxNS0uMy42NDVjLS4wNTIuMTExLS4xLjIyMi0uMTU1LjMzNXEtLjIzNC41MDgtLjQ3NCwxLjA0OS0uMy42NjYtLjYsMS4zODQtLjI5MS42ODUtLjU5LDEuNDE4LS4yODQuNy0uNTc1LDEuNDM2LS4yNTkuNjYxLS41MjMsMS4zNTdjLS4wMDkuMDIzLS4wMTcuMDQ1LS4wMjUuMDY4cS0uMjYyLjY5My0uNTI5LDEuNDIybC0uMDEyLjAzMy44NDItLjA5Mi0uMDUtLjAwOWE2LDYsMCwwLDAsMy4yMS0xLjgwNyw3Ljk4NCw3Ljk4NCwwLDAsMCwxLjEtMS41MjQsMTMuMTM5LDEzLjEzOSwwLDAsMCwuNzA2LTEuNDY3Yy4xOTUtLjQ3Mi4zODItLjk4Mi41NjItMS41MzZhMy4wNTMsMy4wNTMsMCwwLDEtLjc4OC4yNzRjLS4wNTEuMDExLS4xLjAyMS0uMTU2LjAzcy0uMTA3LjAxOC0uMTYxLjAyNWgwYTMuNjY4LDMuNjY4LDAsMCwwLDEuOTYyLTEuOTEzLDMuMzQ0LDMuMzQ0LDAsMCwxLTEuMTMuNDk1Yy0uMDY2LjAxNS0uMTMyLjAyNi0uMi4wMzZsLS4wNS4wMDdoMGEzLjgyMSwzLjgyMSwwLDAsMCwuODM5LS40NjljLjA1MS0uMDM4LjEtLjA3OC4xNDgtLjEyLjA3My0uMDYzLjE0Mi0uMTI5LjIwOC0uMi4wNDItLjA0NC4wODMtLjA5LjEyMy0uMTM4YTMuMjcsMy4yNywwLDAsMCwuMjYzLS4zNjJjLjAyNS0uMDQuMDUtLjA4LjA3NC0uMTIyLjAzMS0uMDYuMDYxLS4xMTkuMDktLjE3OC4xMzEtLjI2NC4yMzYtLjUuMzE5LS43MDYuMDQyLS4xLjA3OC0uMi4xMDktLjI4OC4wMTMtLjAzNS4wMjUtLjA3LjAzNi0uMS4wMzMtLjEuMDYtLjE4Ny4wODEtLjI2NWEyLjYwNSwyLjYwNSwwLDAsMCwuMDYyLS4yNzVoMGExLjAxLDEuMDEsMCwwLDEtLjEwOS4wNzUsMy45NjUsMy45NjUsMCwwLDEtMS4xNjIuNGwuNzczLS4wODUtLjc3My4wODUtLjAxOCwwLS4xMTkuMDE5LjAyMS0uMDA5LTIuNjQ1LjI5WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNmKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC44NTgsNS43M2MtLjIzNS4zNjEtLjQ5Mi43NzEtLjc2OCwxLjIzNmwtLjA0NC4wNzRxLS4zNTguNi0uNzU5LDEuMzI3LS4zNDYuNjI2LS43MTksMS4zNDctLjMyNi42MjktLjY3MiwxLjMzNmwyLjY0NS0uMjlBMy4yMTYsMy4yMTYsMCwwLDAsMTkuOTksOS42MmMuMDg5LS4xMjguMTc4LS4yNjIuMjY3LS40LjI3Mi0uNDI0LjUzOC0uODkxLjc3Ni0xLjM1NWExNC4wNzQsMTQuMDc0LDAsMCwwLC41ODgtMS4yOTQsNi44LDYuOCwwLDAsMCwuMjMzLS43Yy4wNDgtLjE4NC4wODYtLjM1OC4xMTUtLjUyNEEzMC4xNTIsMzAuMTUyLDAsMCwxLDE4Ljg1OCw1LjczWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNnKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy4xNDksMTQuODQ4Yy0uMDUzLjAwOS0uMTA3LjAxOC0uMTYxLjAyNWgwQzE3LjA0MiwxNC44NjYsMTcuMSwxNC44NTcsMTcuMTQ5LDE0Ljg0OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZTIwMmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuMTQ5LDE0Ljg0OGMtLjA1My4wMDktLjEwNy4wMTgtLjE2MS4wMjVoMEMxNy4wNDIsMTQuODY2LDE3LjEsMTQuODU3LDE3LjE0OSwxNC44NDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojYmUyMDJlO29wYWNpdHk6MC4zNDk5OTk5OTQwMzk1MzU1O2lzb2xhdGlvbjppc29sYXRlXFxcIi8+PHBhdGggZD1cXFwiTTE3LjE0OSwxNC44NDhjLS4wNTMuMDA5LS4xMDcuMDE4LS4xNjEuMDI1aDBDMTcuMDQyLDE0Ljg2NiwxNy4xLDE0Ljg1NywxNy4xNDksMTQuODQ4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNoKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy41NywxMy41bC4wNS0uMDA3LS4wNS4wMDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojYmUyMDJlXFxcIi8+PHBhdGggZD1cXFwiTTE3LjU3LDEzLjVsLjA1LS4wMDctLjA1LjAwN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZTIwMmU7b3BhY2l0eTowLjM0OTk5OTk5NDAzOTUzNTU7aXNvbGF0aW9uOmlzb2xhdGVcXFwiLz48cGF0aCBkPVxcXCJNMTcuNTcsMTMuNWwuMDUtLjAwNy0uMDUuMDA3WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy41NzIsMTMuNWgwWlxcXCIgc3R5bGU9XFxcImZpbGw6I2JlMjAyZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy41NzIsMTMuNWgwWlxcXCIgc3R5bGU9XFxcImZpbGw6I2JlMjAyZTtvcGFjaXR5OjAuMzQ5OTk5OTk0MDM5NTM1NTtpc29sYXRpb246aXNvbGF0ZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy41NzIsMTMuNWgwWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNqKVxcXCIvPlwiLFxuXHRcIkFwZXhcIjogXCI8cGF0aCBkPVxcXCJNMTMuNjUyLDguMzM4QTQuOTA2LDQuOTA2LDAsMCwxLDE3LjIsNi44MTRhNC45NTcsNC45NTcsMCwwLDEsNC4zMiwyLjU2LDUuOTcyLDUuOTcyLDAsMCwxLDIuNDQyLS41MTksNi4wODksNi4wODksMCwxLDEtMS4xODksMTIuMDYsNC40MTIsNC40MTIsMCwwLDEtNS43ODIsMS44MTZBNS4wMzQsNS4wMzQsMCwwLDEsNy42MzQsMjIuNWE0LjY0Niw0LjY0NiwwLDAsMS0uOTYuMSw0LjczMiw0LjczMiwwLDAsMS0yLjMzNy04LjgxMiw1LjQzOCw1LjQzOCwwLDAsMSw5LjMxNS01LjQ1M1xcXCIgc3R5bGU9XFxcImZpbGw6IzBmOWJkN1xcXCIvPjxwYXRoIGQ9XFxcIk0yNS4zNzYsMzAuOTY2aC0uNTYxYTQuNjU4LDQuNjU4LDAsMCwxLTEuMjg0LS4xMzcsMS45LDEuOSwwLDAsMS0uODE4LS40ODIsMS43MjYsMS43MjYsMCwwLDEtLjQ1NS0uODQzLDYuNzcsNi43NywwLDAsMS0uMTA2LTEuNDEzLDUuODg5LDUuODg5LDAsMCwwLS4wODQtMS4zMywxLDEsMCwwLDAtLjMtLjU0NCwxLjIyMywxLjIyMywwLDAsMC0uNjYtLjE3OWwtLjIzNi0uMDE0VjI0LjE0NWwuMjM2LS4wMTRhMS40ODIsMS40ODIsMCwwLDAsLjU0OS0uMS43MDYuNzA2LDAsMCwwLC4yNzMtLjI2NCwxLjM5NCwxLjM5NCwwLDAsMCwuMTgxLS41MjksNi42ODMsNi42ODMsMCwwLDAsLjA0NC0uOTM5LDguMTMyLDguMTMyLDAsMCwxLC4xMTItMS42NDMsMS43LDEuNywwLDAsMSwuNDQ4LS44NDEsMi4xNDQsMi4xNDQsMCwwLDEsLjkwNi0uNDkyLDQuNTE0LDQuNTE0LDAsMCwxLDEuMi0uMTE2aC41NjF2MS45aC0uMjVhMi41ODksMi41ODksMCwwLDAtLjc0My4wNTYuMjg0LjI4NCwwLDAsMC0uMTQ4LjExNy44MzkuODM5LDAsMCwwLS4wNTQuMzg2cTAsLjM3Mi0uMDUzLDEuNDEzYTMuNzQsMy43NCwwLDAsMS0uMTY2LDEuMDA5LDEuOTQ1LDEuOTQ1LDAsMCwxLS42OTMsMSwyLjAxLDIuMDEsMCwwLDEsLjcsMS4wNDQsNC42MjcsNC42MjcsMCwwLDEsLjE2MywxLjA3OWMuMDI3LjY1Ny4wNDEsMS4wNzQuMDQxLDEuMjU2YS44NzEuODcxLDAsMCwwLC4wNTcuNDA4QS4zNDMuMzQzLDAsMCwwLDI0LjQsMjlhMi4zODIsMi4zODIsMCwwLDAsLjcyOC4wNmguMjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTIxLjExOCwyNS43ODhWMjQuMzgyYTEuNzUyLDEuNzUyLDAsMCwwLC42NDUtLjEyOS45MzYuOTM2LDAsMCwwLC4zNzUtLjM1NCwxLjYyMSwxLjYyMSwwLDAsMCwuMjE3LS42MjRBNi44OCw2Ljg4LDAsMCwwLDIyLjQsMjIuM2E4LDgsMCwwLDEsLjEwNS0xLjU4NSwxLjQ1NiwxLjQ1NiwwLDAsMSwuMzgxLS43MjEsMS45LDEuOSwwLDAsMSwuOC0uNDMxLDQuMzM2LDQuMzM2LDAsMCwxLDEuMTI1LS4xMDVoLjMxMXYxLjRhMi44NzYsMi44NzYsMCwwLDAtLjgzNS4wNzMuNTMuNTMsMCwwLDAtLjI3Mi4yMjMsMS4wNzksMS4wNzksMCwwLDAtLjA4OC41MTNxMCwuMzY5LS4wNTMsMS40YTMuNTMxLDMuNTMxLDAsMCwxLS4xNTIuOTQsMS45MTgsMS45MTgsMCwwLDEtLjMxMy41OTUsMi40NywyLjQ3LDAsMCwxLS41ODMuNDg2LDIuMDQ1LDIuMDQ1LDAsMCwxLC41NjUuNDY2LDEuODY5LDEuODY5LDAsMCwxLC4zMzcuNjQ3LDQuNDEsNC40MSwwLDAsMSwuMTUyLDEuMDJxLjA0MS45NzMuMDQxLDEuMjQyYTEuMSwxLjEsMCwwLDAsLjA5NC41MzkuNTg0LjU4NCwwLDAsMCwuMjg0LjIzMSwyLjY0OSwyLjY0OSwwLDAsMCwuODIzLjA3OXYxLjQwNmgtLjMxMUE0LjQ3NCw0LjQ3NCwwLDAsMSwyMy42LDMwLjU5YTEuNjQ0LDEuNjQ0LDAsMCwxLS43MTItLjQxOSwxLjQ3OCwxLjQ3OCwwLDAsMS0uMzktLjcyNCw2LjYyMSw2LjYyMSwwLDAsMS0uMS0xLjM1Niw2LjM3NCw2LjM3NCwwLDAsMC0uMDk0LTEuNCwxLjIzMiwxLjIzMiwwLDAsMC0uMzktLjY3MUExLjQzMSwxLjQzMSwwLDAsMCwyMS4xMTgsMjUuNzg4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNzJhMFxcXCIvPjxwYXRoIGQ9XFxcIk0yNy4wMTEsMzAuOTY2SDI2LjQ1VjI5LjA1OWguMjVBMi4zMjksMi4zMjksMCwwLDAsMjcuNDI2LDI5YS4zMjMuMzIzLDAsMCwwLC4xNjUtLjEyNy44MTIuODEyLDAsMCwwLC4wNTgtLjM3OXEwLS4zNi4wNS0xLjM3NWEzLjcyNSwzLjcyNSwwLDAsMSwuMTczLTEuMDQ3LDIuMjIzLDIuMjIzLDAsMCwxLC4zODctLjcsMi4xNDUsMi4xNDUsMCwwLDEsLjMtLjI5MiwyLjE0MSwyLjE0MSwwLDAsMS0uNC0uNCwyLjYxMiwyLjYxMiwwLDAsMS0uNDIxLTEuMDkyLDE3LjUyNSwxNy41MjUsMCwwLDEtLjEtMS44NDEsMS4zNTcsMS4zNTcsMCwwLDAtLjA1My0uNDc5Yy0uMDA4LS4wMTYtLjAzMS0uMDYyLS4xMzYtLjEwNmEyLjUyNCwyLjUyNCwwLDAsMC0uNzU3LS4wNmgtLjI1VjE5LjJoLjU2MWE0Ljc5Myw0Ljc5MywwLDAsMSwxLjI4My4xMzMsMS44NDEsMS44NDEsMCwwLDEsLjgxOC40ODUsMS43ODEsMS43ODEsMCwwLDEsLjQ1My44NDMsNi42LDYuNiwwLDAsMSwuMTA5LDEuNDE0LDYuMzU5LDYuMzU5LDAsMCwwLC4wNzksMS4zMzYuOTkyLjk5MiwwLDAsMCwuMy41MzcsMS4yMjYsMS4yMjYsMCwwLDAsLjY2NC4xOGwuMjM2LjAxNHYxLjg3OWwtLjIzNi4wMTRhMS40ODIsMS40ODIsMCwwLDAtLjU0OS4xLjY4Ni42ODYsMCwwLDAtLjI3LjI2MiwxLjQ4NCwxLjQ4NCwwLDAsMC0uMTg2LjUzNCw2Ljc0Myw2Ljc0MywwLDAsMC0uMDQzLjkzMSw4LjM4Myw4LjM4MywwLDAsMS0uMTA4LDEuNjQ0LDEuNjk0LDEuNjk0LDAsMCwxLS40NDYuODQ2LDIuMTQzLDIuMTQzLDAsMCwxLS45MTMuNDkyQTQuNSw0LjUsMCwwLDEsMjcuMDExLDMwLjk2NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMzAuNzA4LDI1Ljc4OGExLjc1MiwxLjc1MiwwLDAsMC0uNjQ1LjEyOS45MTguOTE4LDAsMCwwLS4zNzIuMzU0LDEuNzI1LDEuNzI1LDAsMCwwLS4yMi42MjQsNi44Miw2LjgyLDAsMCwwLS4wNDcuOTczLDguMjcsOC4yNywwLDAsMS0uMSwxLjU4OCwxLjQzOSwxLjQzOSwwLDAsMS0uMzc4LjcyNCwxLjksMS45LDAsMCwxLS44MDkuNDMxLDQuMzM2LDQuMzM2LDAsMCwxLTEuMTI1LjEwNUgyNi43VjI5LjMxYTIuNjUyLDIuNjUyLDAsMCwwLC44Mi0uMDc5QS41NzIuNTcyLDAsMCwwLDI3LjgsMjksMS4wNSwxLjA1LDAsMCwwLDI3LjksMjguNXEwLS4zNTcuMDUtMS4zNjVhMy41MywzLjUzLDAsMCwxLC4xNTgtLjk3NiwxLjk3NiwxLjk3NiwwLDAsMSwuMzQzLS42MjFBMi4wMzgsMi4wMzgsMCwwLDEsMjksMjUuMDg1YTIuNDE2LDIuNDE2LDAsMCwxLS42MzMtLjU1MSwyLjMzOSwyLjMzOSwwLDAsMS0uMzc1LS45ODQsMTcuNTY0LDE3LjU2NCwwLDAsMS0uMDk0LTEuOCwxLjU3MSwxLjU3MSwwLDAsMC0uMDc5LS41ODYuNDg3LjQ4NywwLDAsMC0uMjY0LS4yMjYsMi44LDIuOCwwLDAsMC0uODUzLS4wNzl2LTEuNGguMzExYTQuNTc2LDQuNTc2LDAsMCwxLDEuMjEzLjEyMywxLjU4NywxLjU4NywwLDAsMSwuNzA5LjQxOSwxLjUyOSwxLjUyOSwwLDAsMSwuMzkuNzI3LDYuNDM2LDYuNDM2LDAsMCwxLC4xLDEuMzU2LDYuODQyLDYuODQyLDAsMCwwLC4wODgsMS40LDEuMjIzLDEuMjIzLDAsMCwwLC4zOTMuNjcxLDEuNDQ3LDEuNDQ3LDAsMCwwLC44LjIzMVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDcyYTBcXFwiLz5cIixcblx0XCJBUExcIjogXCI8cGF0aCBkPVxcXCJNMzAsMjguMjc1LDE2LDIsMiwyOC4yNzVIMTQuMTYyVjMwaDMuNjc2VjI4LjI3NVpNMTcuODM4LDI0LjgyNlYxMy4xNjFsNi4yMTUsMTEuNjY1Wm0tOS44OTEsMCw2LjIxNS0xMS42NjVWMjQuODI2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPlwiLFxuXHRcIkFwcGxlU2NyaXB0XCI6IFwiPHBhdGggZD1cXFwiTTE3LjE4MSw0LjQzN0E1Ljk5Myw1Ljk5MywwLDAsMSwyMS41NzksMmE1Ljk3OSw1Ljk3OSwwLDAsMS0xLjQ0Nyw0LjQ3Niw0LjcyOSw0LjcyOSwwLDAsMS00LjE3LDEuOTYxQTUuMiw1LjIsMCwwLDEsMTcuMTgxLDQuNDM3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2E4YzJhYlxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4yLDEwLjAzNGMuOTQ2LDAsMi43LTEuMyw0Ljk4OS0xLjNhNi4yNDksNi4yNDksMCwwLDEsNS40ODQsMi44LDYuMDgsNi4wOCwwLDAsMC0zLjAyOCw1LjMsNi4yMzUsNi4yMzUsMCwwLDAsMy43NzIsNS43cy0yLjYzNyw3LjQyMi02LjIsNy40MjJjLTEuNjM2LDAtMi45MDgtMS4xLTQuNjMxLTEuMS0xLjc1NywwLTMuNSwxLjE0NC00LjYzNSwxLjE0NEM4LjcsMzAsNC41ODcsMjIuOTU5LDQuNTg3LDE3LjNjMC01LjU2OCwzLjQ3OC04LjQ4OSw2Ljc0LTguNDg5QzEzLjQ0OCw4LjgxMSwxNS4wOTMsMTAuMDM0LDE2LjIsMTAuMDM0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2E4YzJhYlxcXCIvPlwiLFxuXHRcIkFyZHVpbm9cIjogXCI8ZGVmcz48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImFcXFwiIGN4PVxcXCI3NjcuMTc5XFxcIiBjeT1cXFwiNTE2OS41NDNcXFwiIHI9XFxcIjE0Ljk4OVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtNzE4LjExMiAtNDk1My45MTcpIHNjYWxlKDAuOTU1IDAuOTYyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzM2YmFjMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzJkOTA5NFxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfYXJkdWlubzwvdGl0bGU+PHBhdGggZD1cXFwiTTI5LjY0NSwxNS45MjVBMTMuNzcsMTMuNzcsMCwxLDEsMTUuODc2LDIuMDU2LDEzLjgxOSwxMy44MTksMCwwLDEsMjkuNjQ1LDE1LjkyNVpcXFwiIHN0eWxlPVxcXCJzdHJva2U6IzAyNzk3ZTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjEuMTM2NzIyODQ1NDk2OTI2N3B4O2ZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC41ODEsMTEuNjQ4YzIuNDEtLjA3NiwzLjM1OS44MzQsNC42MDUsMi4wNjkuMjg1LjI4Mi41NzkuNTkuOS45MjFsLjkyMi0uOTkxYTYuMjIzLDYuMjIzLDAsMCwxLDMuMjU2LTEuOTNjMS45MzktLjIxMSwzLjExOS0uMTIyLDQuMzExLjgxNGE1LjAyMyw1LjAyMywwLDAsMSwyLjI0NSwzLjksNS42NTMsNS42NTMsMCwwLDEtMy4yNSw1LjE1Niw1Ljk3NSw1Ljk3NSwwLDAsMS0zLjkxMy4xMzUsNy42NTYsNy42NTYsMCwwLDEtMy41NDEtMi45ODdjLTEuNjc4LDIuMTQyLTMuMTg3LDMuMjUzLTUuMjM1LDMuMTU1LTcuNDUyLS4zNTQtNi44NDItMTAuMDc1LS4zLTEwLjI0N1ptMS42NTcsNy45OTRhOS4xOTMsOS4xOTMsMCwwLDAsMi44NTYtMi45Yy0uNzQtMS4yNDMtMi4yMDktMi44MjQtMy40NTUtMy4xMzRhNC4zMjgsNC4zMjgsMCwwLDAtMy4yMjQuNzc3LDMuMzg0LDMuMzg0LDAsMCwwLS43NjIsMy42ODYsMy42NzQsMy42NzQsMCwwLDAsNC41ODUsMS41N1ptLTIuOTgtMy40ODcsMy4yNzguMDA1djEuMjFsLTMuMjgzLjAwNVptMTMuNDQ4LDMuNkEzLjg0MywzLjg0MywwLDAsMCwyNC45MzcsMTdhMy40NTgsMy40NTgsMCwwLDAtMS44NjMtMy4xMDksMy42NDgsMy42NDgsMCwwLDAtNC4yLjcyOCw3LjM2NCw3LjM2NCwwLDAsMC0xLjY0OSwyLjE1MUE4LjkzNiw4LjkzNiwwLDAsMCwxOS4yLDE5LjI1Miw0LjAyMiw0LjAyMiwwLDAsMCwyMi43MDYsMTkuNzU0Wm0tMS45NTUtMi4zNzYtMS4wODgtLjAwOCwwLTEuMjE3LDEuMDkxLDBWMTUuMDc1bDEuMTA3LS4wMDgtLjAwNywxLjA5MywxLjA4NSwwdjEuMTY1bC0xLjAyMS0uMDA4djEuMTJIMjAuNzUzWlxcXCIgc3R5bGU9XFxcInN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjEyMTAzMDk2NDgwOTI3NDgycHg7b3BhY2l0eTowLjE2ODA5OTk5OTQyNzc5NTQ7aXNvbGF0aW9uOmlzb2xhdGVcXFwiLz48cGF0aCBkPVxcXCJNNC45MTcsMTYuMzM3YzAsNS4zNDgsNy4zNTQsNy4zNCwxMC45ODcsMS44OTQsMy43NjUsNS42NDcsMTAuODI0LDMuMjgsMTAuODI0LTEuOVMxOS43LDguNjU2LDE1LjksMTQuNDQxYy0zLjYtNS43MTktMTAuOTg3LTMuNDUzLTEwLjk4NywxLjlabTEuOTMxLDBjMC0zLjg2LDUuNDU1LTUuMDc4LDcuOTkyLDAtMi41ODgsNC44ODktNy45OTIsMy44NTktNy45OTIsMFptMTAuMTE5LDBjMi4yODYtNS4xNzgsNy44ODktMy43NTEsNy44NzIuMDA4UzE5LjE4NiwyMS4yNzcsMTYuOTY3LDE2LjMzN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmY7c3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuMjQyMDYxOTI5NjE4NTQ5NjRweFxcXCIvPjxyZWN0IHg9XFxcIjguODk4XFxcIiB5PVxcXCIxNS43OTVcXFwiIHdpZHRoPVxcXCIzLjIzN1xcXCIgaGVpZ2h0PVxcXCIxLjA2N1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjAuNjQ0IDE2Ljg0NiAxOS41NzYgMTYuODQ2IDE5LjU3NiAxNS43MTIgMjAuNjQ0IDE1LjcxMiAyMC42NDQgMTQuNjQ0IDIxLjc3OSAxNC42NDQgMjEuNzc5IDE1LjcxMiAyMi44NDcgMTUuNzEyIDIyLjg0NyAxNi44NDYgMjEuNzc5IDE2Ljg0NiAyMS43NzkgMTcuOTE0IDIwLjY0NCAxNy45MTQgMjAuNjQ0IDE2Ljg0NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcIkFSTSBBc3NlbWJseVwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjgzNi42M1xcXCIgeTE9XFxcIjM2LjIwNVxcXCIgeDI9XFxcIjg0My44MDJcXFwiIHkyPVxcXCIxNC40OFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSg1MjUuOTIyIDMwLjI0OSkgcm90YXRlKDE4MCkgc2NhbGUoMC42MDcgMC42MDcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMC4yNzVcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX2Fzc2VtYmx5PC90aXRsZT48cGF0aCBkPVxcXCJNMTYsMmMtMS4yNDYsMy4wNTYtMiw1LjA1Ny0zLjM5MSw4LjAyMkEyMS44ODQsMjEuODg0LDAsMCwwLDE2LjIsMTMuMTU2YTE0Ljg1OCwxNC44NTgsMCwwLDEtNC0yLjI4M0MxMC40MywxNC41NzksNy42NDYsMTkuODU1LDIsMzBjNS4xODYtMi45OTQsOS4wMTItNC42NDgsMTIuNjkxLTQuOTY2VjI0LjJoLS44MzR2LS44MzdoLjgzNFYyNC4yaDEuNjc1VjIyLjUyMUgxNC42OTF2LS44MzRoLS44MzRWMjAuMDEzaC44MzR2LS44MzRoMS42NzV2LjgzNEgxNy4ydi44MzdoLS44Mzd2LS44MzdIMTQuNjkxdjEuNjc1aDEuNjc1di44MzRIMTcuMlYyNC4yaC0uODM3di43ODNjMy45OC4xLDguMDA2LDEuNzcyLDEzLjYzNCw1LjAyMS0uODYzLTEuNTg5LTEuNjM2LTMuMDIxLTIuMzcyLTQuMzg1YTI1LjUyNiwyNS41MjYsMCwwLDAtNC44MzMtMy4zMzNBMTQuNDM2LDE0LjQzNiwwLDAsMSwyNi42NSwyMy44QzE5LjE3LDkuODcyLDE4LjU2NSw4LjAyLDE2LDJaTTEwLjUxMSwxOS4xNzloMS42NzF2LjgzNGguODM3djUuMDIxaC0uODM3VjIyLjUyMUgxMC41MTF2Mi41MTJIOS42NzNWMjAuMDEzaC44MzdabTAsLjgzNHYxLjY3NWgxLjY3MVYyMC4wMTNabTcuNTI2LS44MzRoLjgzN3YuODM0aC44Mzd2LjgzN2guODM0di0uODM3aC44Mzd2LS44MzRoLjgzN3Y1Ljg1NWgtLjgzN1YyMC44NWgtLjgzN3YuODM3aC0uODM0VjIwLjg1aC0uODM3djQuMTg0aC0uODM3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwMDBiZlxcXCIvPjxwYXRoIGQ9XFxcIk0yMy44ODEsMTguNjQyYy02LjA2OS04LjIzNy03LjQ3Ni0xNC44NzYtNy44MzItMTYuNDYxQTE3NS4yMTcsMTc1LjIxNywwLDAsMCwyMy44ODEsMTguNjQyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZjtmaWxsLW9wYWNpdHk6MC4xNjU2ODA0NjgwODI0MjhcXFwiLz48cGF0aCBkPVxcXCJNMTYuMDUxLDIuMTIsMTUuNiwzLjIyN2MtLjE1OS4zOTEtLjMxMS43NjUtLjQ2MSwxLjEzMXMtLjMuNzI0LS40NDgsMS4wNzctLjMuNy0uNDQ4LDEuMDUzLS4zLjcwNi0uNDY1LDEuMDY2LS4zMjkuNzI5LS41MDYsMS4xMTEtLjM2Mi43NzgtLjU2MSwxLjE5M2MtLjAyOC4wNTctLjA2MS4xMjMtLjA4OS4xODFBMjEuODcyLDIxLjg3MiwwLDAsMCwxNi4yLDEzLjE1NmExNC44NzksMTQuODc5LDAsMCwxLTMuOTg5LTIuMjc2bC0uMTQuMjg3Yy0uMDY1LjEzMy0uMTQ0LjI4My0uMjEyLjQybC0uMTA2LjIxOWMtLjg3OCwxLjc5My0yLjAwNiwzLjk4NC0zLjUyNCw2LjgyMiwzLjU1MS0yLDcuMzgxLTQuODg3LDE0LjMzOC0yLjQtLjM0OS0uNjYxLS42Ny0xLjI4LS45NzEtMS44NjNzLS41ODEtMS4xMjgtLjg0MS0xLjY0NC0uNS0xLS43MjUtMS40NjMtLjQzMy0uOS0uNjI5LTEuMzEzLS4zOC0uODE4LS41NTQtMS4yLS4zMzktLjc1NC0uNS0xLjExOFMxOC4wNDcsNi45LDE3LjksNi41NDZzLS4yOTEtLjcwOS0uNDM0LTEuMDY2Yy0uMDM2LS4wOTEtLjA3My0uMTg2LS4xMDktLjI3N0MxNi45NDksNC4yNDcsMTYuNTM2LDMuMjU4LDE2LjA1MSwyLjEyWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPlwiLFxuXHRcIkFzY2lpRG9jXCI6IFwiPHBhdGggZD1cXFwiTTMwLDMwSDJWMkgzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlNDAwNDZcXFwiLz48cGF0aCBkPVxcXCJNMjMuNzMxLDI0LjgzYS41ODkuNTg5LDAsMCwxLS43NjMtLjMzN0wxNi43MjQsOS4yNjksMTMuOTMsMTUuOTloMS44MzNhLjU5LjU5LDAsMCwxLS4wMjQsMS4xOEg4LjlhLjU5LjU5LDAsMCwxLC4wMjQtMS4xOGgzLjcyN2wwLS4wMTNMMTYuMTg0LDcuNWEuNTkxLjU5MSwwLDAsMSwuNTMzLS4zNjNoMGEuNTkyLjU5MiwwLDAsMSwuNTU3LjM2Nmw2Ljc4NSwxNi41NDYuMDA5LjAyMUEuNTkuNTksMCwwLDEsMjMuNzMxLDI0LjgzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNC41MTYsMTguNzkxSDcuNjc5YS41OS41OSwwLDAsMC0uMDI0LDEuMThIMTFMOS4zMDksMjQuMDQzYS41OS41OSwwLDAsMCwxLjA4NS40NjRsMC0uMDExLDEuODc1LTQuNTA5LjAwNS0uMDE2aDIuMjE1YS41OS41OSwwLDAsMCwuMDIzLTEuMThaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdFwiQVNQLk5FVCAoQyMpXCI6IFwiPHRpdGxlPmZpbGVfdHlwZV9hc3B4PC90aXRsZT48cG9seWdvbiBwb2ludHM9XFxcIjIyLjc1IDIgNi4zNSAyIDYuMzUgMzAgMjkuNjUgMzAgMjkuNjUgOSAyMi43NSAyXFxcIiBzdHlsZT1cXFwiZmlsbDojYzVjNWM1XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNy4zNSAyNy43IDguNzUgMjcuNyA4Ljc1IDQuMyAyMC40NSA0LjMgMjAuNDUgMTEuMyAyNy40NSAxMS4zIDI3LjQ1IDI3LjcgMjcuMzUgMjcuN1xcXCIgc3R5bGU9XFxcImZpbGw6I2Y1ZjVmNVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4xLDMwLjk5NEExMS4wOTQsMTEuMDk0LDAsMSwxLDIzLjE5NCwxOS45LDExLjEwNiwxMS4xMDYsMCwwLDEsMTIuMSwzMC45OTRabTAtMjAuM0E5LjIsOS4yLDAsMSwwLDIxLjMsMTkuOSw5LjIxNiw5LjIxNiwwLDAsMCwxMi4xLDEwLjdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjXFxcIi8+PHJlY3QgeD1cXFwiMi4wOTlcXFwiIHk9XFxcIjE5LjQ1NVxcXCIgd2lkdGg9XFxcIjIwLjAwM1xcXCIgaGVpZ2h0PVxcXCIwLjg5XFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjO3N0cm9rZTojMzNhOWRjO3N0cm9rZS1taXRlcmxpbWl0OjEwXFxcIi8+PHBhdGggZD1cXFwiTTEyLjMyNSwxNS43NjNhMzEuOTMsMzEuOTMsMCwwLDEtOC40ODQtMS4xMWwuMjQyLS44MDdhMzEuMzc0LDMxLjM3NCwwLDAsMCwxNS45OTIsMGwuMjM5LjgwN0EyOC4wNzYsMjguMDc2LDAsMCwxLDEyLjMyNSwxNS43NjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjO3N0cm9rZTojMzNhOWRjO3N0cm9rZS1taXRlcmxpbWl0OjEwXFxcIi8+PHBhdGggZD1cXFwiTTQuMSwyNS43MjRsLS4yMzktLjgwN2EzMS42NTIsMzEuNjUyLDAsMCwxLDE2LjQ3MiwwbC0uMjQyLjgwN0EzMS4zOCwzMS4zOCwwLDAsMCw0LjEsMjUuNzI0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzMzYTlkYztzdHJva2U6IzMzYTlkYztzdHJva2UtbWl0ZXJsaW1pdDoxMFxcXCIvPjxwYXRoIGQ9XFxcIk04LjUzNiwyOS4wNTVBMjUuNDM4LDI1LjQzOCwwLDAsMSw4LDEwLjYwOGwuNzc2LjMzMWEyNC41NTgsMjQuNTU4LDAsMCwwLC41MzMsMTcuNzgzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzMzYTlkYztzdHJva2U6IzMzYTlkYztzdHJva2UtbWl0ZXJsaW1pdDoxMFxcXCIvPjxwYXRoIGQ9XFxcIk0xNS42LDI5LjA1NWwtLjc3Ni0uMzMzYTI0LjU1OSwyNC41NTksMCwwLDAsLjUzMS0xNy43ODNsLjc3Ni0uMzMxQTI1LjQ0MywyNS40NDMsMCwwLDEsMTUuNiwyOS4wNTVaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjO3N0cm9rZTojMzNhOWRjO3N0cm9rZS1taXRlcmxpbWl0OjEwXFxcIi8+PHJlY3QgeD1cXFwiMTEuNjU1XFxcIiB5PVxcXCI5Ljg5OFxcXCIgd2lkdGg9XFxcIjAuODg5XFxcIiBoZWlnaHQ9XFxcIjIwLjM3MVxcXCIgc3R5bGU9XFxcImZpbGw6IzMzYTlkYztzdHJva2U6IzMzYTlkYztzdHJva2UtbWl0ZXJsaW1pdDoxMFxcXCIvPlwiLFxuXHRcIkF1dG9Ib3RrZXlcIjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCI1NC42MDRcXFwiIHkxPVxcXCIxNjguMzg4XFxcIiB4Mj1cXFwiNTQuNjA0XFxcIiB5Mj1cXFwiMTk0Ljg4NVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMzguNjA0IC0xNjUuNjM2KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2Q4ZDhkOFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2EzYTNhM1xcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiNjguNzU2XFxcIiB5MT1cXFwiMjA5LjE1MlxcXCIgeDI9XFxcIjkxLjYzOFxcXCIgeTI9XFxcIjIwOS4xNTJcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTUwLjYwMSAtMTU5LjQ0OSkgc2NhbGUoMC44MzIgMC44MzcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZDdkN2Q3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjVcXFwiIHN0b3AtY29sb3I9XFxcIiNlN2U3ZTdcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNkN2Q3ZDdcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX2F1dG9ob3RrZXk8L3RpdGxlPjxyZWN0IHg9XFxcIjJcXFwiIHk9XFxcIjIuODI0XFxcIiB3aWR0aD1cXFwiMjhcXFwiIGhlaWdodD1cXFwiMjYuMzUzXFxcIiByeD1cXFwiMy4wODhcXFwiIHJ5PVxcXCIzLjA4OFxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0yNi44NTYsMjkuMTgxSDUuMTQ0QTMuMTQ4LDMuMTQ4LDAsMCwxLDIsMjYuMDM3VjUuOTYzQTMuMTQ4LDMuMTQ4LDAsMCwxLDUuMTQ0LDIuODE5SDI2Ljg1NkEzLjE0OCwzLjE0OCwwLDAsMSwzMCw1Ljk2M1YyNi4wMzdBMy4xNDgsMy4xNDgsMCwwLDEsMjYuODU2LDI5LjE4MVpNNS4xNDQsMi45NjNhMywzLDAsMCwwLTMsM2gwVjI2LjAzN2EzLDMsMCwwLDAsMywzSDI2Ljg1NmEzLDMsMCwwLDAsMy0zVjUuOTYzYTMsMywwLDAsMC0zLTNaXFxcIiBzdHlsZT1cXFwiZmlsbDojOGQ4ZDhkXFxcIi8+PHJlY3QgeD1cXFwiNC4zMTNcXFwiIHk9XFxcIjQuNjQxXFxcIiB3aWR0aD1cXFwiMjMuMTY5XFxcIiBoZWlnaHQ9XFxcIjIxLjk0XFxcIiByeD1cXFwiMi41NzFcXFwiIHJ5PVxcXCIyLjU3MVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0yNC45MTEsMjYuNjQxSDYuODg0QTIuNjM0LDIuNjM0LDAsMCwxLDQuMjUzLDI0LjAxVjcuMjEyQTIuNjM0LDIuNjM0LDAsMCwxLDYuODg0LDQuNTgxSDI0LjkxMWEyLjYzNCwyLjYzNCwwLDAsMSwyLjYzMSwyLjYzMXYxNi44QTIuNjM0LDIuNjM0LDAsMCwxLDI0LjkxMSwyNi42NDFaTTYuODg0LDQuN0EyLjUxNCwyLjUxNCwwLDAsMCw0LjM3Myw3LjIxMnYxNi44YTIuNTE0LDIuNTE0LDAsMCwwLDIuNTExLDIuNTExSDI0LjkxMWEyLjUxNCwyLjUxNCwwLDAsMCwyLjUxMS0yLjUxMVY3LjIxMkEyLjUxNCwyLjUxNCwwLDAsMCwyNC45MTEsNC43WlxcXCIgc3R5bGU9XFxcImZpbGw6I2Y4ZjhmOFxcXCIvPjxwYXRoIGQ9XFxcIk02LjE0NSwyMy45bDIuMzQzLTYuMWguODdsMi41LDYuMWgtLjkybC0uNzEyLTEuODQ4SDcuNjczTDcsMjMuOVpNNy45LDIxLjRIOS45NzRsLS42MzctMS43cS0uMjkxLS43Ny0uNDMzLTEuMjY1QTcuNzc2LDcuNzc2LDAsMCwxLDguNTc2LDE5LjZaXFxcIi8+PHBhdGggZD1cXFwiTTEzLjYwNywyMy45VjE3LjhoLjgwN3YyLjVoMy4xNzFWMTcuOGguODA3djYuMWgtLjgwN1YyMS4wMjFoLTMuMTdWMjMuOVpcXFwiLz48cGF0aCBkPVxcXCJNMjAuNDc4LDIzLjlWMTcuOGguODA3djMuMDI1bDMuMDMtMy4wMjVoMS4wOTRMMjIuODUsMjAuMjY3LDI1LjUyMiwyMy45SDI0LjQ1NmwtMi4xNzItMy4wODgtMSwuOTc0VjIzLjlaXFxcIi8+XCIsXG5cdFwiQXV0b0l0XCI6IFwiPGNpcmNsZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNlxcXCIgcj1cXFwiMTIuNTUxXFxcIiBzdHlsZT1cXFwiZmlsbDojNWQ4M2FjXFxcIi8+PHBhdGggZD1cXFwiTTIsMTZBMTQsMTQsMCwxLDEsMTYsMzAsMTQsMTQsMCwwLDEsMiwxNlpNMTYsNC43ODlBMTEuMjExLDExLjIxMSwwLDEsMCwyNy4yMTEsMTYsMTEuMjExLDExLjIxMSwwLDAsMCwxNiw0Ljc4OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmMGYwZjBcXFwiLz48cGF0aCBkPVxcXCJNMjQuNTc2LDIwLjE1NmwtNi40LTkuMjY0YTMuMTMxLDMuMTMxLDAsMCwwLS44MTktLjgxOSwyLjM2LDIuMzYsMCwwLDAtMi40NDIuMDIzLDMuNTQzLDMuNTQzLDAsMCwwLS44MTIuOEw3LjUzMywyMC4xNTZoMy43NTJsNC44MDgtNi44LDEuODM4LDIuNzFxLjI2LjM2OC41NDQuNzg5dC41LjdxLS4zNjgtLjAzMS0uODY1LS4wMzFoLTMuNTNsLTEuOTE0LDIuNjM0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2YwZjBmMFxcXCIvPlwiLFxuXHRcIkF2cm8gSURMXCI6IFwiPHBhdGggZD1cXFwiTTIsMTEuNjQ5aC4wMjVhNC43ODUsNC43ODUsMCwwLDAsMi45MTEsMS4zMzZjMi4zMDguMjIxLDQuNTktLjQ4NSw2LjktLjMyNmE3LjAzLDcuMDMsMCwwLDEsMi42OC42NjRjLjUtLjMxOS45ODktLjY2MiwxLjQ4Ni0uOTg5LjUuMzI3Ljk4NC42NzQsMS40ODguOTg5YTYuODM0LDYuODM0LDAsMCwxLDIuNDg3LS42NWMxLjk5NS0uMTY3LDMuOTY3LjMwOCw1Ljk1Ny4zNTlhNS4yLDUuMiwwLDAsMCw0LjAyNi0xLjM4M0gzMHYuMjM2Yy0uMTc4Ljc0Ny0uODgyLDEuMTc2LTEuMjg0LDEuNzlhNC45NDgsNC45NDgsMCwwLDEtLjczMS43OTEsMy44LDMuOCwwLDAsMS0uNTY1Ljc0OCwyLjU1MSwyLjU1MSwwLDAsMC0uNTk0LjU0MSwyLjE4MSwyLjE4MSwwLDAsMS0uOTYuNzQ5LDEuMTQ5LDEuMTQ5LDAsMCwxLS41NjUuNTYsNi42OSw2LjY5LDAsMCwxLTEuOTQuMTg0Yy43MjMuNTQ4LDEuNSwxLjAyLDIuMjQ2LDEuNTM1Ljc4Mi41MTMsMS41NCwxLjA2MSwyLjMyNiwxLjU2OEg0LjA4OWMxLjUtMS4wNTgsMy4wNTctMi4wMzUsNC41NS0zLjFBNi44LDYuOCwwLDAsMSw2LjcsMTcuMDY1YTEuMTU1LDEuMTU1LDAsMCwxLS41NjktLjU2MiwyLjI4LDIuMjgsMCwwLDEtMS4wNDMtLjg2Yy0uMjY4LS4zLS42Ny0uNDY2LS44NTMtLjg0My0uMi0uNDM2LS42NTgtLjY2NC0uOTA5LTEuMDY3LS40LS42NDItMS4xMzctMS4wNzYtMS4zMjctMS44NDZ2LS4yMzltMi45MzksOC41MjhxMTEuMDU5LjAwOSwyMi4xMiwwYy0zLjY2OC0yLjUxLTcuMzc2LTQuOTYxLTExLjA1OS03LjQ0OC0zLjY4NCwyLjQ4Ny03LjM5Miw0Ljk0MS0xMS4wNjEsNy40NDlNNC4xNjcsMTMuMmE3Ljg0Miw3Ljg0MiwwLDAsMCwyLjg0LjczMWMxLjE2My4xMjMsMi4zNDEuMDQ2LDMuNS4yMzZhMi43LDIuNywwLDAsMSwxLjYwNy43ODFjLjY1OS0uNDUyLDEuMzMyLS44ODUsMS45ODctMS4zNDJsLjAxMi0uMDY0YTUuMjk0LDUuMjk0LDAsMCwwLTEuODc3LS41Yy0yLjY5My0uMzE2LTUuMzg3LjcxMi04LjA2Ny4xNm0xMy42NTIuMzU2Yy42ODguNDY2LDEuMzgyLjkyNSwyLjA3LDEuMzkyYTIuNDg4LDIuNDg4LDAsMCwxLDEuMy0uNzE5LDE5Ljg1OSwxOS44NTksMCwwLDEsMy4xMzctLjI0OCw5LjEwNSw5LjEwNSwwLDAsMCwzLjUtLjc2OGMtMi41ODIuNS01LjE2OC0uNDA5LTcuNzYxLS4yYTYuMjU2LDYuMjU2LDAsMCwwLTIuMjQ1LjU0NU0zLjMzOSwxMy4xNjZhNy4yNjQsNy4yNjQsMCwwLDAsMi43MjMsMS4zYy0uMjE5LS4xNTMtLjM3Ni0uNDE2LS42NTctLjQ1N2E3Ljk1NSw3Ljk1NSwwLDAsMS0yLjA2Ni0uODQ0bTIzLjMzMy44MjVjLS4zMTcuMDIzLS41LjMtLjczMy40NzNhNy4yMzIsNy4yMzIsMCwwLDAsMi43MjQtMS4zLDguMTA2LDguMTA2LDAsMCwxLTEuOTkxLjgyNG0tMjIuNS4xMjZhNS4xMjEsNS4xMjEsMCwwLDAsMi41ODksMS4xYy0uMTE1LS4xMjgtLjIwOS0uMzEyLS40LS4zMzRhMTAuNDU5LDEwLjQ1OSwwLDAsMS0yLjE5LS43NzFtMjEuNDY3Ljc2OGMtLjE4OS4wMjItLjI4NC4yLS4zOTQuMzM2YTUuMTg3LDUuMTg3LDAsMCwwLDIuNi0xLjEwOSwxMC40NzcsMTAuNDc3LDAsMCwxLTIuMi43NzNNNi4zLDE0LjIwNmEzLjI0MywzLjI0MywwLDAsMCwyLjQ0NS4zNTJjLS4xLS4wOC0uMTgxLS4yMTUtLjMyNS0uMjA2cS0xLjA2My0uMDQtMi4xMi0uMTQ2bTE3LjM1MS4xMzljLS4xNzEtLjAxOS0uMjkxLjEtLjQwNi4yMTFhMy4xMDgsMy4xMDgsMCwwLDAsMi40Mi0uMzUycS0xLC4xMTItMi4wMTQuMTQxbS0xNi43NDEuNTM4YTMuNjY5LDMuNjY5LDAsMCwwLDIuNDgyLjMxOSwxLjEwNywxLjEwNywwLDAsMC0uMjgxLS4zNzYsNS4xNTgsNS4xNTgsMCwwLDEtMi4yLjA1N20xNS43LjMxOGEzLjY3OCwzLjY3OCwwLDAsMCwyLjQ4Ny0uMzE5LDUuMTI3LDUuMTI3LDAsMCwxLTIuMi0uMDU3LDEuMSwxLjEsMCwwLDAtLjI4My4zNzZNNC44MzgsMTQuOTc3YTQuMTEsNC4xMSwwLDAsMCwyLjEzMy44NDFjLS4wNTctLjA4NC0uMTE0LS4xNjgtLjE3MS0uMjU0YTYuOTQ4LDYuOTQ4LDAsMCwxLTEuOTYyLS41ODdtMjAuMzYxLjU4OS0uMTY5LjI1M2E0LjE0MSw0LjE0MSwwLDAsMCwyLjEzNi0uODQzLDcuMDE1LDcuMDE1LDAsMCwxLTEuOTY3LjU5bS0xOC4xLS4xM2EuOC44LDAsMCwwLC41MzQuMzEsNy41NzksNy41NzksMCwwLDAsMi4wMzctLjA3M2MtLjAwOS0uMDMtLjAyNy0uMDktLjAzNi0uMTItLjQ1Ny0uMDUxLS45MjMuMDc0LTEuMzg1LjA0N0E3LjA1NCw3LjA1NCwwLDAsMSw3LjEsMTUuNDM3bTE2LjE5MS4xNTFhNi4yOCw2LjI4LDAsMCwwLS45MTMtLjA0MWwtLjA0Mi4xMjZhNy40MTYsNy40MTYsMCwwLDAsMi4wNDUuMDcyLjcuNywwLDAsMCwuNTIyLS4zMzEsNC4zNDksNC4zNDksMCwwLDEtMS42MTMuMTc0bS0xNy41Mi4zMjdhMy4xMiwzLjEyLDAsMCwwLDEuNzU0LjQ4MWMtLjA2NS0uMjQtLjMzNC0uMi0uNTIzLS4yMzYtLjQxOS0uMDQxLS44MTYtLjE4Ni0xLjIzMS0uMjQ2TTI1LDE2LjE2M2MtLjE4OC4wNDEtLjQ1Mi0uMDA2LS41MjEuMjMyYTIuODc0LDIuODc0LDAsMCwwLDEuNzMyLS40ODJjLS40LjA3OS0uOC4yMDctMS4yMTEuMjUxTTcuNzM1LDE2LjExOWExLDEsMCwwLDAsLjc4OS4yNzUsOS4zMzEsOS4zMzEsMCwwLDAsMS4zMjUtLjE1OGMtLjAyMS0uMDkzLS4wMDktLjI3OC0uMTYzLS4yMjhhOS45ODMsOS45ODMsMCwwLDEtMS45NTEuMTExbTE0LjQxNS4xMThhOC4xNTcsOC4xNTcsMCwwLDAsMS40MTIuMTU0LjkuOSwwLDAsMCwuNy0uMjc0LDkuMzg3LDkuMzg3LDAsMCwxLTEuOTM0LS4xMWMtLjE2LS4wNi0uMTU1LjEzMi0uMTc2LjIzbS0xNS40MzguNDRhMS45NjIsMS45NjIsMCwwLDAsMS4zLjE4MWwtLjA5MS0uMTI2Yy0uNC4wMDYtLjgwNy0uMDIyLTEuMjA5LS4wNTVtMS42MTUuMDQzYTEuMDMsMS4wMywwLDAsMCwuNzE2LjI5NGMuMTc5LS4xMjUuMzU4LS4yNTIuNTMxLS4zODZhNS43NDcsNS43NDcsMCwwLDEtMS4yNDcuMDkybTE0LjEtLjA5M2MuMjM3LjE0NC40NjcuNDc3Ljc4Mi4zNDUuMTY2LS4wNS4zNjktLjA4OS40NjEtLjI1N2E1LjI3MSw1LjI3MSwwLDAsMS0xLjI0My0uMDg4bTEuNzEzLjI2M2EyLjAwNywyLjAwNywwLDAsMCwxLjE0NS0uMjEzLDEwLjI2OSwxMC4yNjksMCwwLDEtMS4xNDQuMDQ5QzIzLjk5MywxNi42NjcsMjMuOTg0LDE2Ljk2MSwyNC4xMzgsMTYuODlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA0MGZmXFxcIi8+PHBhdGggZD1cXFwiTTcuNDM1LDE4Ljg4NlExMS43MTksMTYuMDEzLDE2LDEzLjEzN2w5LjMsNi4yNDRjLjIyMS4xNDcuNDM5LjMuNjQ4LjQ2NHEtOS45NDctLjAxLTE5Ljg5NCwwYy40NDMtLjM0NC45Mi0uNjQsMS4zODMtLjk1OG04LjI1NS01LjA2NmMtLjQ1NywxLjg1OS0uOTA3LDMuNzE5LTEuMzc1LDUuNTc2LjUyLjAxNSwxLjA0MS4wMTIsMS41NjIsMHEtLjAxMy0yLjg0MSwwLTUuNjhsLS4xODQuMW0tMi41LDEuNjg0Yy4yNTUuODU5LjQ4LDEuNzI4Ljc2MywyLjU3OS4yODktMS4yMzguNi0yLjQ3MS45LTMuNzA3LS41NS4zODYtMS4xMTQuNzUtMS42NjgsMS4xMjltMy4zNTctLjg3M2MtLjAwNi42ODIsMCwxLjM2NCwwLDIuMDQ2YTIuMSwyLjEsMCwwLDAsMS4wMTQtLjI1NGMuMTkzLS4xNDUuMS0uNDA5LjAxMS0uNTg2YTQuMjc2LDQuMjc2LDAsMCwwLTEuMDI0LTEuMjA3TTE4LjMyNywxNi40Yy0uMS41NDQtLjY2Ni43OTItMS4xNTEuOS40NzQuNy45NiwxLjM4OSwxLjQxNiwyLjEuNDY5LjAyNC45NC4wMTEsMS40MTEuMDA5YTEuNjMxLDEuNjMxLDAsMCwxLC4xNi0yLjk3NmMtLjgzNC0uNi0xLjctMS4xNC0yLjU0NC0xLjcyNy4zNDkuNS44MzEsMS4wMzcuNzA4LDEuN20tNi44MjIuMjQyYy4yNjcuOTIxLjUyOSwxLjg0NS43OTQsMi43NjcuNDQsMCwuODguMDA4LDEuMzIxLS4wMDctLjMzOS0xLjE2MS0uNjg1LTIuMzE5LTEuMDA5LTMuNDg0LS4zODUuMjE1LS43MzcuNDgyLTEuMS43MjRtOC44LjQ1MmEuOTQ2Ljk0NiwwLDAsMCwuMDU3LDEuN2MuNTMzLjA5Ljg1NS0uNTMzLjc3OS0uOTktLjAyNi0uNC0uNC0uODYxLS44MzYtLjcxNE03LjQsMTkuNHExLjMyNC4wMTgsMi42NSwwYy4yNTYtLjcuNDEzLTEuNDY4LjYyOS0yLjItMS4xLjcxNS0yLjE4NywxLjQ2MS0zLjI3OSwyLjE5NG0xNC4zNzctMS45YTEuNjE2LDEuNjE2LDAsMCwxLS44NzYsMS45YzEuMjMzLjAxOCwyLjQ2NS4wMTUsMy43LDAtLjkzNC0uNjQ0LTEuODgzLTEuMjY2LTIuODIyLTEuOW0tNS4yMjMuMTE1Yy0uMDEuNiwwLDEuMiwwLDEuOC40MTUsMCwuODMxLDAsMS4yNDgsMC0uNDE5LS42LS44LTEuMjE5LTEuMjQzLTEuNzk0bS01LjU0Ni45NDFoLjM0NmMtLjA1NS0uMTg3LS4xMDgtLjM3Ni0uMTY2LS41NjJhMy43NTEsMy43NTEsMCwwLDAtLjE4MS41NjNtLS4xOC42OTNjLS4wMTUuMDQtLjA0NS4xMTktLjA2MS4xNTkuMjc1LS4wMjYuNTkuMDcxLjg0Mi0uMDVDMTEuNDUzLDE5LjExMiwxMS4wNzQsMTkuMjc1LDEwLjgyNiwxOS4yNDRaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA0MGZmXFxcIi8+XCIsXG5cdFwiQVdLXCI6IFwiPHBhdGggZD1cXFwiTTI2LjkyNSwyNy43MzdDMjMuNDMxLDI2LjEsMjQuNjA2LDE0LjU4OCwxMy44MSw4LjMxOSwxNC4wODksNS43OTIsMTQuNzU4LS41LDcuOTYxLDMsNi44NDUsMy4xMjgsNC45MDcsMi4zMzEsNCw0LjgzMXYuMTE0QzE2LjkxOCwzLjkuMDg4LDEwLjUzLDE2Ljc1LDI1Ljg0NGMtLjM3My4xNzYtLjY3NC0uMzI1LTEuOTcuMWwtLjAxNC4wMTZjLTEuNzIyLDEuMTM1LDEuOTMzLjc2OCw0LjE1NCwxLjI3NC0xLjYxMS40MTctNS41OTQtMS4xMzctNi4zLDEuNjQ1Ljg3Ny0uMzcsMSwuMzI5LDEuMDc2LDEuMDc3QTI2LjI3NywyNi4yNzcsMCwwLDEsMjIuMzc5LDI3LjVjMS4xLjI4NSw0LjExOCwyLjA0OSw1LjEyMi41NTFDMjcuNTE5LDI3LjkzLDI3LjIyMSwyNy44NzYsMjYuOTI1LDI3LjczN1pcXFwiLz48cGF0aCBkPVxcXCJNMTAuNDQ2LDIuOTdsLS4xMjEuMDg4YS4yNjYuMjY2LDAsMCwwLS4wMTEuMzc3LjIxMS4yMTEsMCwwLDAsLjA0NS4wMzkuNDE2LjQxNiwwLDAsMCwuNTIxLS4wNjMuMjYzLjI2MywwLDAsMCwuMDc4LS4zNjRsLS4wMS0uMDE0Yy0uMDc2LS4xNDMtLjE2My0uMTc3LS4zNC0uMTI3QzEwLjU1MywyLjkyNSwxMC41LDIuOTQ2LDEwLjQ0NiwyLjk3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0xOCwyNi4zNjhjLjE1MS0uMDQxLjMxOC0uODI4LjE3NC0uOTQ5QTYuMjksNi4yOSwwLDAsMCwxOS40LDI2LjQ4NWMxLjAyMywxLjAwNywyLjY2NS0uMDMyLDMuNDgyLjc1OWExMC43MzYsMTAuNzM2LDAsMCwwLDEuOTU3LDEuMDI3Yy0uMTM5LS4xNTEtLjAyOS0uMTQ0LjE3OS0uMDExLS4xMy0uMzM4LTQuNDIxLTUuMTU2LTUuMjI2LTcuMTguMDk1LjI5My0xLjYwOC0uODI0LTIuMDc2LTEuNDE5LS4wMjguMDU2LS4wOTItLjI1MS0uMjI4LS40MzQtLjA0MS4wNS0uMi0uNDMzLS4zLS43MjguMDM3LjE4Ny0uNDYyLS41LS42NS0uODE4LS4wNTYuMDktLjcxOS4zNzItLjgwOS4yODYtLjcyOS0uNCwyLjUyOSw0LjA2Ni4xMjIsMi41NTkuNjc2LjY4My42MTQuNC0xLjA5NS0uODUyLjM2NC40NTItLjMxNy4zMTItMS41NTMtMS41MjMuMTg2LjItLjIxOC0uNTc2LS4yMTgtLjU3NmEyLjY5MiwyLjY5MiwwLDAsMC0uMTMzLS40ODNjLS4wNTYtLjMyLS4yNDEtLjcyMy0uMTItLjY1LTEuNDQ0LTEuNTU2LDEuMzE0LTMuMy43MTktMy42NzEtLjExMSwwLS4wMjcuMDE3LS4xNTEtLjEwNi0uMDksMC0uNDY4LjI4NS0uNTg3LS4yMzQuMDA2LjEzMi0uMDM0LjQwNi0uMTUzLS4xLS4wMjMuMDUyLjAxNS4xLS4wMy4xNDUtLjIyNS0uNTc2LS43NzItMS42LTEuMjE3LTIuNTM5LS4xNTguMTU1LS4xMzgtLjA3Ni0uMTkzLTEuMDkyLjA1My4xNDQtLjIyNSwxLjkyMS0uMi4xMy0uMTI4LjAwNy4xMDgsMS4yNTgtLjM0My4yMS0uMTQxLjA1LS4zMDUtLjM2My0uMzQxLTEuMTc4LS4wNDguNjIzLS4yOS4xODctLjUtLjkyMy0uMjY5LjUwOC0xLjYsMS43NDMtLjMzMyw3LjYyMi0uMDUzLS4zMTMuMTg2LjM0MS43NTUsMi40MjcuMDIxLS4wMzktLjAyMi0uMDgzLjAzOC0uMTMxYTYuMzI0LDYuMzI0LDAsMCwwLC42NzcsMS4zNjVjLjU0NC42NTguOTk1LDIuMDc0LjgsMS4yNzdhMTEuODY3LDExLjg2NywwLDAsMCwyLjU1NCwzLjI0OUEzNC40MjMsMzQuNDIzLDAsMCwwLDE4LDI2LjM2OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMmQyZDJcXFwiLz48cGF0aCBkPVxcXCJNMTAuODIzLDIuNTU3YS4yOTEuMjkxLDAsMCwwLS4wNTEtLjAyMmMtLjIyMS0uMDQtLjQyOS4xNTMtLjY1NC4wMzItLjE0NS4wODUtLjI1Ny0uMDM2LS4zNzUtLjA3M2EuMjI0LjIyNCwwLDAsMC0uMi4wMTQsNS44MjMsNS44MjMsMCwwLDAtLjgxNC41ODIsMS4wMzcsMS4wMzcsMCwwLDAtLjI3My40NDljLS4wMjEuMDQ4LS4wMzcuMTI2LjA1LjEzN2EyLjMsMi4zLDAsMCwwLC42ODIuMDQ1Yy4xNzctLjAyOC4yNzctLjE1Mi40MTgtLjIyMWExLjIsMS4yLDAsMCwwLC41OTItLjY4Yy4wNjQtLjE3NS4xNjEtLjE2Ny4yOC0uMlMxMC43LDIuNjIsMTAuODIzLDIuNTU3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0xMC4zMjUsMy4wNThsLjEyMS0uMDg4YS4xMTcuMTE3LDAsMCwxLC4xMi4wNjRjLjA0NC4xLjEwNi4xMTIuMTkzLjA0Ny4wMzMtLjAyNS4wNzEtLjA1OC4xMTgtLjAyN2EuMTE5LjExOSwwLDAsMSwuMDQxLjEyOC4yNzYuMjc2LDAsMCwxLS4xODcuMjQ4LjI2Ni4yNjYsMCwwLDEtLjMtLjAzQzEwLjM0MSwzLjMwOCwxMC4yNiwzLjIsMTAuMzI1LDMuMDU4WlxcXCIvPlwiLFxuXHRcIkJhdGNoXCI6IFwiPHBhdGggZD1cXFwiTTI5LjQsMjcuNkgyLjVWNC41SDI5LjRabS0yNS45LTFIMjguNFY1LjVIMy41WlxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiNi4wNzcgMTkuMzE2IDUuNTIyIDE4LjQ4NCAxMC4zNjYgMTUuMjU1IDUuNDc5IDExLjE4NCA2LjEyIDEwLjQxNiAxMi4wMzUgMTUuMzQ0IDYuMDc3IDE5LjMxNlxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPjxyZWN0IHg9XFxcIjEyLjdcXFwiIHk9XFxcIjE4LjJcXFwiIHdpZHRoPVxcXCI3LjhcXFwiIGhlaWdodD1cXFwiMVxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPjxyZWN0IHg9XFxcIjIuNVxcXCIgeT1cXFwiNS41XFxcIiB3aWR0aD1cXFwiMjYuOVxcXCIgaGVpZ2h0PVxcXCIxLjlcXFwiIHN0eWxlPVxcXCJmaWxsOiNkOWI0MDBcXFwiLz5cIixcblx0XCJDI1wiOiBcIjx0aXRsZT5maWxlX3R5cGVfY3NoYXJwPC90aXRsZT48cGF0aCBkPVxcXCJNMTkuNzkyLDcuMDcxaDIuNTUzVjkuNjI0SDI0LjlWNy4wNzFoMi41NTJWOS42MjRIMzB2Mi41NTJoLTIuNTV2Mi41NTFIMzBWMTcuMjhIMjcuNDQ5djIuNTUySDI0Ljl2LTIuNTVsLTIuNTUsMCwwLDIuNTUySDE5Ljc5M3YtMi41NWwtMi41NTMsMFYxNC43MjVoMi41NTNWMTIuMTc5SDE3LjI0VjkuNjIyaDIuNTU0Wm0yLjU1Myw3LjY1OEgyNC45VjEyLjE3NkgyMi4zNDVaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzY4ODMyXFxcIi8+PHBhdGggZD1cXFwiTTE0LjY4OSwyNC4wMTNhMTAuMiwxMC4yLDAsMCwxLTQuNjUzLjkxNSw3LjYsNy42LDAsMCwxLTUuODktMi4zMzZBOC44MzksOC44MzksMCwwLDEsMiwxNi4zNjcsOS40MzYsOS40MzYsMCwwLDEsNC40MTIsOS42NDhhOC4xODEsOC4xODEsMCwwLDEsNi4yNTktMi41NzcsMTEuMSwxMS4xLDAsMCwxLDQuMDE4LjYzOHYzLjc0NWE2LjgxLDYuODEsMCwwLDAtMy43MjMtMS4wMzYsNC43OTMsNC43OTMsMCwwLDAtMy43LDEuNTI5LDUuODc5LDUuODc5LDAsMCwwLTEuNDA3LDQuMTQyLDUuNzc0LDUuNzc0LDAsMCwwLDEuMzI4LDMuOTkyLDQuNTUxLDQuNTUxLDAsMCwwLDMuNTc1LDEuNDg3LDcuMjg4LDcuMjg4LDAsMCwwLDMuOTI3LTEuMTA4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzM2ODgzMlxcXCIvPlwiLFxuXHRcIkNcIjogXCI8dGl0bGU+ZmlsZV90eXBlX2M8L3RpdGxlPjxwYXRoIGQ9XFxcIk0xMC42NzYsMTUuOTczYTEwLjA1MiwxMC4wNTIsMCwwLDAsMS4xNzUsNS4xNTEsNS40NDYsNS40NDYsMCwwLDAsNi4zMDYsMi40MDgsNC4yODQsNC4yODQsMCwwLDAsMy4wOS0zLjZjLjEwNy0uNi4xMDktLjYxLjEwOS0uNjEsMS43MzcuMjUxLDQuNTM3LjY1OCw2LjI3NC45MDZsLS4xMS40NGExMS4yNTYsMTEuMjU2LDAsMCwxLTIuNyw1LjM5LDkuNDM5LDkuNDM5LDAsMCwxLTUuMzY2LDIuNjg4LDE0LjYxLDE0LjYxLDAsMCwxLTguMjc3LS44MTlBMTAuMTUxLDEwLjE1MSwwLDAsMSw1LjQsMjEuNjg3YTE2LjIyNSwxNi4yMjUsMCwwLDEsLjAxOS0xMS40NSwxMC41MzgsMTAuNTM4LDAsMCwxLDguOTYzLTcuMDU0LDEzLjM1MywxMy4zNTMsMCwwLDEsNi42NjYuNTU1LDkuNTcxLDkuNTcxLDAsMCwxLDYuMTY3LDYuOWMuMDk0LjM1Mi4xMTQuNDE3LjExNC40MTctMS45MzIuMzUxLTQuMzE5LjgtNi4yMzgsMS4yMTUtLjM2Mi0xLjkxNS0xLjI2NS0zLjQyOC0zLjItMy45YTUuMjYzLDUuMjYzLDAsMCwwLTYuNjE2LDMuNTcsMTAuNDksMTAuNDksMCwwLDAtLjM4NSwxLjQzOUExMi4zMSwxMi4zMSwwLDAsMCwxMC42NzYsMTUuOTczWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNWY5MVxcXCIvPlwiLFxuXHRcIkMrK1wiOiBcIjx0aXRsZT5maWxlX3R5cGVfY3BwPC90aXRsZT48cGF0aCBkPVxcXCJNMTQuNzQyLDI0LjA0N2ExMC4yNDIsMTAuMjQyLDAsMCwxLTQuNjczLjkxOUE3LjYyOCw3LjYyOCwwLDAsMSw0LjE1NSwyMi42Miw4Ljg3Niw4Ljg3NiwwLDAsMSwyLDE2LjM2OSw5LjQ3Niw5LjQ3NiwwLDAsMSw0LjQyMiw5LjYyMWE4LjIxNiw4LjIxNiwwLDAsMSw2LjI4NS0yLjU4OCwxMS4xNTEsMTEuMTUxLDAsMCwxLDQuMDM1LjY0MXYzLjc2MUE2LjgzOSw2LjgzOSwwLDAsMCwxMSwxMC4zOTUsNC44MTMsNC44MTMsMCwwLDAsNy4yODgsMTEuOTNhNS45LDUuOSwwLDAsMC0xLjQxMyw0LjE1OUE1LjgsNS44LDAsMCwwLDcuMjA5LDIwLjFhNC41Nyw0LjU3LDAsMCwwLDMuNTksMS40OTMsNy4zMTksNy4zMTksMCwwLDAsMy45NDMtMS4xMTNaXFxcIiBzdHlsZT1cXFwiZmlsbDojOTg0YzkzXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNy4xMTIgMTQuODI5IDE3LjExMiAxMi40ODUgMTkuNDU2IDEyLjQ4NSAxOS40NTYgMTQuODI5IDIxLjggMTQuODI5IDIxLjggMTcuMTcyIDE5LjQ1NiAxNy4xNzIgMTkuNDU2IDE5LjUxNSAxNy4xMTIgMTkuNTE1IDE3LjExMiAxNy4xNzIgMTQuNzcgMTcuMTcyIDE0Ljc3IDE0LjgyOCAxNy4xMTIgMTQuODI5XFxcIiBzdHlsZT1cXFwiZmlsbDojOTg0YzkzXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNS4zMTMgMTQuODI5IDI1LjMxMyAxMi40ODUgMjcuNjU3IDEyLjQ4NSAyNy42NTcgMTQuODI5IDMwIDE0LjgyOSAzMCAxNy4xNzIgMjcuNjU3IDE3LjE3MiAyNy42NTcgMTkuNTE1IDI1LjMxMyAxOS41MTUgMjUuMzEzIDE3LjE3MiAyMi45NzEgMTcuMTcyIDIyLjk3MSAxNC44MjggMjUuMzEzIDE0LjgyOVxcXCIgc3R5bGU9XFxcImZpbGw6Izk4NGM5M1xcXCIvPlwiLFxuXHRcIkNsb2p1cmVcIjogXCI8cGF0aCBkPVxcXCJNMTYsMkExNCwxNCwwLDEsMCwzMCwxNiwxNC4wMTYsMTQuMDE2LDAsMCwwLDE2LDJcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTUuNDg4LDE2LjI1MmMtLjEyNi4yNzMtLjI2NS41NzktLjQwOC45QTIyLjk2MywyMi45NjMsMCwwLDAsMTMuOCwyMC42MDVhNS4xODEsNS4xODEsMCwwLDAtLjExOSwxLjE1NWMwLC4xNzQuMDA5LjM1Ni4wMjQuNTQyYTYuNjU4LDYuNjU4LDAsMCwwLDQuNDEzLjA2NywzLjk2NiwzLjk2NiwwLDAsMS0uNDQtLjQ2NmMtLjktMS4xNDYtMS40LTIuODI3LTIuMTk0LTUuNjUyXFxcIiBzdHlsZT1cXFwiZmlsbDojOTFkYzQ3XFxcIi8+PHBhdGggZD1cXFwiTTEyLjE2OSwxMC41NTZhNi42NzcsNi42NzcsMCwwLDAtLjA3NywxMC44ODFjLjQxMS0xLjcxLDEuNDQtMy4yNzYsMi45ODMtNi40MTUtLjA5Mi0uMjUyLS4yLS41MjctLjMxMy0uODE3YTEwLjIwNywxMC4yMDcsMCwwLDAtMS42LTIuODgyLDQuNDM5LDQuNDM5LDAsMCwwLTEtLjc2N1xcXCIgc3R5bGU9XFxcImZpbGw6IzkxZGM0N1xcXCIvPjxwYXRoIGQ9XFxcIk0yMS44NCwyMy43YTEwLjg3NywxMC44NzcsMCwwLDEtMi4yNTctLjQ3MUE4LjAzNiw4LjAzNiwwLDAsMSwxMC43MTYsOS45ODJhNS45LDUuOSwwLDAsMC0xLjQtLjE3MWMtMi4zNTguMDIyLTQuODQ4LDEuMzI3LTUuODg0LDQuODUyYTYuNjA2LDYuNjA2LDAsMCwwLS4wNzQsMS4zNjEsMTIuNjQ5LDEyLjY0OSwwLDAsMCwyMyw3LjI3NCwxNC43MzcsMTQuNzM3LDAsMCwxLTMuNDQ4LjQ1OUE4Ljg4MSw4Ljg4MSwwLDAsMSwyMS44NCwyMy43XFxcIiBzdHlsZT1cXFwiZmlsbDojNjNiMTMyXFxcIi8+PHBhdGggZD1cXFwiTTE5LjQ2MywyMS4yNDRhMy41MywzLjUzLDAsMCwwLC41LjE3MkE2LjY5LDYuNjksMCwwLDAsMjIuNywxNi4wMjNoMGE2LjY4MSw2LjY4MSwwLDAsMC04Ljc5LTYuMzQ4YzEuMzU4LDEuNTQ4LDIuMDExLDMuNzYxLDIuNjQzLDYuMTgxdjBzLjIuNjczLjU0NywxLjU2MmExNS40MzQsMTUuNDM0LDAsMCwwLDEuMzYzLDIuNzg4LDIuOTI0LDIuOTI0LDAsMCwwLDEsMS4wMzZcXFwiIHN0eWxlPVxcXCJmaWxsOiM5MGI0ZmVcXFwiLz48cGF0aCBkPVxcXCJNMTYuMDEzLDMuMzcyQTEyLjYzMiwxMi42MzIsMCwwLDAsNS43MzEsOC42NTZhNi40MjUsNi40MjUsMCwwLDEsMy40OC0xLjAwOSw2LjgsNi44LDAsMCwxLDMuMTgyLjc3MmMuMTM0LjA3Ny4yNjEuMTYuMzg2LjI0NmE4LjAzOCw4LjAzOCwwLDAsMSwxMS4yNzMsNy4zNThoMGE4LjAxMyw4LjAxMywwLDAsMS0yLjM5MSw1LjcxOSw5Ljg3MSw5Ljg3MSwwLDAsMCwxLjE0My4wNjQsNi4yNCw2LjI0LDAsMCwwLDQuMDUxLTEuMjYzLDUuMzQ4LDUuMzQ4LDAsMCwwLDEuNy0yLjkwNkExMi42MzIsMTIuNjMyLDAsMCwwLDE2LjAxMywzLjM3MlxcXCIgc3R5bGU9XFxcImZpbGw6IzU4ODFkOFxcXCIvPlwiLFxuXHRcIkNNYWtlXCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiOS45NTVcXFwiIHkxPVxcXCI5LjA5NlxcXCIgeDI9XFxcIjE2LjY4XFxcIiB5Mj1cXFwiMjMuMzI0XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEsIDAsIDAsIC0xLCAwLCAzMilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiMxMDExYTFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM2OTY5ZTFcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIjE2LjIzMVxcXCIgeTE9XFxcIjE5LjY1NVxcXCIgeDI9XFxcIjI1LjYxOFxcXCIgeTI9XFxcIjMuNzgyXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEsIDAsIDAsIC0xLCAwLCAzMilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNiNDBlMGVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZjU5NTlcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiY1xcXCIgeDE9XFxcIjIxLjY2M1xcXCIgeTE9XFxcIjQuODIzXFxcIiB4Mj1cXFwiOC4zODFcXFwiIHkyPVxcXCI1LjkzOFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLCAwLCAwLCAtMSwgMCwgMzIpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMDFhMzAwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMDFkZjAwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCIxNC42NDNcXFwiIHkxPVxcXCI4LjM2OFxcXCIgeDI9XFxcIjE0LjQ3MlxcXCIgeTI9XFxcIjE0LjE0NVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLCAwLCAwLCAtMSwgMCwgMzIpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjODQ4NDg0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZDJkMmQyXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9jbWFrZTwvdGl0bGU+PHBhdGggZD1cXFwiTTE3LjI1NywxNi45MTksMi4yNDYsMjkuNzQ5LDE1Ljk5NCwyLjI4M1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMi4yNjIsMjkuNzY4bC0uMDM4LS4wM0wxNi4wMTIsMi4xOTNsLjAwOC4wODhMMTcuMjgzLDE2LjkzbC0uMDEuMDA4Wk0xNS45NzcsMi4zNzQsMi4zMjQsMjkuNjQ5LDE3LjIzLDE2LjkwOFpcXFwiLz48cGF0aCBkPVxcXCJNMTcuOTUyLDI0LjkzMSwxNiwyLjI4LDI5Ljc2NywyOS43NTFaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTI5LjgxOCwyOS44bC0uMDYxLS4wMjVMMTcuOTI5LDI0Ljk0OGwwLS4wMTVMMTUuOTc1LDIuMjgybC4wNDctLjAxM1pNMTcuOTc2LDI0LjkxMywyOS43MTUsMjkuNywxNi4wMzYsMi40MDhaXFxcIi8+PHBhdGggZD1cXFwiTTExLjE2LDIyLjA5NGwxOC42MjEsNy42NTRIMi4yNVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYylcXFwiLz48cGF0aCBkPVxcXCJNMjkuNzgxLDI5Ljc3M0gyLjE4M2wuMDUxLS4wNDQsOC45MjEtNy42NjUuMDE0LjAwNiwxOC42MjIsNy42NTVabS0yNy40NjQtLjA1SDI5LjY1NGwtMTguNDg5LTcuNlpcXFwiLz48cGF0aCBkPVxcXCJNMTEuMTg5LDIyLjExMmw2LjA1OS01LjE2OC44NDMsNy45OFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMTguMTQ5LDI1bC0uMDc3LS4wMzItNi45NzgtMi44NDIsNi4xOTQtNS4yODMuMDEuMDk0Wm0tNi44NjUtMi45LDYuNzQ4LDIuNzQ5LS44MjQtNy44WlxcXCIvPjxwYXRoIGQ9XFxcIk0yOS43LDI5LjkxMUgyLjI4NWEuMjIxLjIyMSwwLDAsMS0uMTgyLS4wODguMjIyLjIyMiwwLDAsMSwuMDIyLS4yTDE1Ljg2NCwyLjE4N2EuMTY5LjE2OSwwLDAsMSwuMTQtLjFoMGEuMTU0LjE1NCwwLDAsMSwuMTMuMDg1TDI5Ljg2NywyOS42MDdhLjIzOC4yMzgsMCwwLDEsLjAyLjIyNkEuMjExLjIxMSwwLDAsMSwyOS43LDI5LjkxMVptLTI3LjQ2OC0uMTZhLjQ4NC40ODQsMCwwLDAsLjA1Ny4wMTFoMjcuNGwuMDczLS4wMDlhLjIyMS4yMjEsMCwwLDAtLjAyOC0uMDc3TDE2LDIuMjQ4LDE2LDIuMjYsMi4yNjEsMjkuNjg0YS4yNzkuMjc5LDAsMCwwLS4wMjUuMDY3WlxcXCIvPlwiLFxuXHRcIkNPQk9MXCI6IFwiPHBhdGggZD1cXFwiTTIyLjI0LDYuNTQ2YTQuNDQ5LDQuNDQ5LDAsMCwwLDEuNzY1LTIuNTIyLDQuNjM2LDQuNjM2LDAsMCwxLS4wMTgsMi4xNTdjLS4yMjMuNTgyLS41NjcsMS4xMDctLjgzNCwxLjY2OWEyMS43NzIsMjEuNzcyLDAsMCwxLDQuNTU5LTIuOTM4QzI3LjIzLDYuNCwyNS44OTEsNy4zLDI0LjkwNyw4LjQ0MmMuMTkuNDA5LjI4Ljk4OS44LDEuMTA5YTUuMDM2LDUuMDM2LDAsMCwwLDIuNS4xNTVjLjkxMi0uMzEzLDEuMzQ1LTEuMjU4LDEuOC0yLjAzNVY5LjE0YTE1LjczOCwxNS43MzgsMCwwLDEtLjU4MiwxLjc0OGMuMi41NDcuNDA5LDEuMDkyLjU4MiwxLjY0N3YuOTUyYy0uMjE0LjM2OC0uNDQyLjcyNi0uNjYzLDEuMDg5YTUuMjkzLDUuMjkzLDAsMCwwLTEuMDY4LTEuMTYyLDQuMDMsNC4wMywwLDAsMC0xLjg1MS0uMTI1LDMuMjEyLDMuMjEyLDAsMCwwLDIuNDEzLDEuNDdjLS4zNTkuMzctLjY2My45MTItMS4yMy45NjktMS42NDEuMjQ3LTMuMjA3LS41MDUtNC44MzktLjUtLjI4Mi4wMi0uNzA3LjAyNC0uNzg1LjM3MiwwLC43MzUuMjE3LDEuNDUzLjE5LDIuMTg4LS4wNTksMS4yNTgtLjUxMiwyLjQ2Ni0uNTI5LDMuNzI2YTEzLjc4NSwxMy43ODUsMCwwLDAsLjgzOCwzLjQ0OGMtLjUyMy0uMDc3LTEuMDQ0LS4xNjYtMS41NjItLjI2LS4xLjIwOC0uMTg0LjQyLS4yNi42MzRBNC41MTQsNC41MTQsMCwwLDAsMjEuOCwyNi41MzFjLS4wNjEuMTI3LS4xODIuMzgxLS4yNDEuNTA4bC0uNTczLjEzOGMtLjEzMS4yNDctLjI2My40OTItLjQuNzM5YTQuNDIxLDQuNDIxLDAsMCwwLTIuMi4wNjFjLS40NjYtLjE4Ni0uOTI4LS4zNzYtMS4zODktLjU2N2E1LjkzOSw1LjkzOSwwLDAsMCwuNDA3LTIuMzE1Yy0uMjgyLS45ODItMS42LS45ODQtMi0xLjg3N2E2LjIzMyw2LjIzMywwLDAsMS0xLjAyMi0yLjg1MWMtLjgyMy0uNDMzLTEuNDU1LTEuMjIxLTIuNC0xLjQtLjA0OC40MDktLjA4My44Mi0uMTUzLDEuMjI3QTYuMDE1LDYuMDE1LDAsMCwxLDEwLjQ4MSwyMi42Yy4wMzkuNDIyLjA3OS44NDIuMTIsMS4yNjUuMzQ2LjMyNC42OTEuNjQ4LDEuMDMzLjk3NGE5Ljc1Miw5Ljc1MiwwLDAsMS0xLjQyNi43MTMsMTEuMTE0LDExLjExNCwwLDAsMS0xLjY4Ny4wNzdjLS4yNTgtLjI1NC0uNTE4LS41MDgtLjc3Ny0uNzY0YTQuODcxLDQuODcxLDAsMCwwLC4xMTQtMi42MDhjLjE3MS0uNC4zMjYtLjgxMi40NzUtMS4yMjFhNS41NjUsNS41NjUsMCwwLDEtMy4wMS4yMDYsNS4xMiw1LjEyLDAsMCwxLTMuMjktNC4zMywzLjg1OSwzLjg1OSwwLDAsMSwxLjQwNy0zLjI2OEE2LjQxLDYuNDEsMCwwLDAsMy4yLDE2LjI1OWEzLjAzOCwzLjAzOCwwLDAsMCwyLjUsMi40NjYsMy40NjIsMy40NjIsMCwwLDAsMS45Ni0uNjQzLDcuNDgsNy40OCwwLDAsMSwuMzYzLTQuMTMzLDUuNTI0LDUuNTI0LDAsMCwxLDMuNTg2LTIuNjYsNC4yMzUsNC4yMzUsMCwwLDAsMi4wMTEtMS41NjYsMTAuNjcsMTAuNjcsMCwwLDEsMS41MjktMS4zM2MtLjIyOC0uMjE5LS40NTMtLjQ0LS42OC0uNjU5QTIuMTU0LDIuMTU0LDAsMCwwLDE1LjksNi4wMjNjMS4yODQtLjMsMi41NTEtLjY2MSwzLjgyLTEuMDExYTMuNzkzLDMuNzkzLDAsMCwwLDEuNDE1LjYwNmMuMzE3LjM0Ni40OTQsMS4xNTcsMS4xLjkyOE0xOC40NTgsMTkuOTA4Yy4wNDIuNzY4LS4wNDgsMS42NjUuNjc0LDIuMTU1LDAtLjc1NS0uMDQ2LTEuNTA3LS4xLTIuMjZaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA1Y2E1XFxcIi8+XCIsXG5cdFwiQ29mZmVlU2NyaXB0XCI6IFwiPHBhdGggZD1cXFwiTTEzLjExNCw1LjcyOGMuMDI1LjE1My0uMDUxLjI4LS4zMDYuNDA4YTMuNDU3LDMuNDU3LDAsMCwwLTEuNjMtLjIyOWMtLjYzNy4wNTEtMS4xNzIuMjU1LTEuMS42ODguMS40MzMuNzEzLjY4OCwxLjgwOC41ODYsMi42NzQtLjIyOSwyLjY0OS0yLjAzOCw2LjU3MS0yLjM5NCwzLjA1Ni0uMjgsNC43NjMuNjYyLDQuOTkyLDEuODA4LjE3OC44OTEtLjU2LDEuNzU3LTIuNzc2LDEuOTM2LTEuOTYxLjE3OC0zLjEwNy0uMzU3LTMuMjA5LS44OTEtLjA1MS0uMjguMS0uNjg4LDEuMDQ0LS43OS4xLjQzMy42MzcuODkxLDEuOTEuNzY0QzIxLjM0MSw3LjUzNiwyMi4xLDcuMiwyMiw2LjdjLS4xLS41MzUtMS4wNy0uODQtMi42LS43MTMtMy4xMDcuMjgtMy44NzEsMS45ODctNi41MiwyLjIxNkMxMSw4LjM3Niw5LjQ3Miw3LjY4OSw5LjI2OCw2LjY3Yy0uMDc2LS4zODItLjA3Ni0xLjI3MywxLjkxLTEuNDUyLDEuMDE5LS4wNzYsMS44MzQuMSwxLjkzNi41MDlaTTMuMTgxLDE2LjM3NEE1LjI3OSw1LjI3OSwwLDAsMCwyLjAxLDE5Ljk5YTQuMjA2LDQuMjA2LDAsMCwwLDEuNjU1LDMuMDU2LDQsNCwwLDAsMCwzLjM2Mi43OSwxMS40MzQsMTEuNDM0LDAsMCwwLDEuNS0uNDg0LDQuMjM4LDQuMjM4LDAsMCwxLTIuNzUxLTEuMDE5LDQuMTMsNC4xMywwLDAsMS0xLjczMi0yLjgyN0EzLjc5LDMuNzksMCwwLDEsNC42NTgsMTYuNSwzLjk3NywzLjk3NywwLDAsMSw3LjQwOSwxNWE0LjgwNiw0LjgwNiwwLDAsMSwzLjIwOS45NDIsNi45NSw2Ljk1LDAsMCwwLS44NjYtLjg2Niw0LjEsNC4xLDAsMCwwLTMuNDY0LS42ODgsNS4yLDUuMiwwLDAsMC0zLjEwNywxLjk4N1pNMTYuODMzLDEwLjQ5QTQwLjgzNyw0MC44MzcsMCwwLDEsOC41LDkuN0M2LjIzNyw5LjE0LDUuMDQsOC41MjksNS4wNCw3Ljc0YzAtLjMzMS4xNTMtLjYxMS42MTEtLjk0Mi0xLjQyNi41Ni0yLjE5LDEuMDE5LTIuMTksMS43MzIuMDc2Ljc5LDEuMzUsMS41NzksMy45NDgsMi4xOWEzOS40NDMsMzkuNDQzLDAsMCwwLDkuMzQ3Ljk0MkEzOC45OTMsMzguOTkzLDAsMCwwLDI2LjEsMTAuNzJjMi42LS42MTEsMy44NDYtMS40MjYsMy44NDYtMi4xOSwwLS41Ni0uNTYtMS4xLTEuNTc5LTEuNWEuODYyLjg2MiwwLDAsMSwuNDA4LjY4OGMwLC43OS0xLjE3MiwxLjQyNi0zLjU0LDEuOTYxQTM5LjMyNCwzOS4zMjQsMCwwLDEsMTYuODMzLDEwLjQ5Wm05LjM3MywyLjE5YTQyLjMxNSw0Mi4zMTUsMCwwLDEtOS4zNDcuOTQyLDQ0LjE0NCw0NC4xNDQsMCwwLDEtOS40MjQtLjk0MmMtMi4xOS0uNTYtMy4zNjItMS4xNzItMy43NjktMS44MDhhMjMuMTg2LDIzLjE4NiwwLDAsMCwyLjYsNy42NDFjLjk0MiwxLjQyNiwxLjg4NSwyLjY3NCwyLjgyNyw0LjAyNGE5Ljg4Myw5Ljg4MywwLDAsMSwuODY2LDIuMzY5LDQuNTU5LDQuNTU5LDAsMCwwLDIuNiwxLjczMiwxMC42MTEsMTAuNjExLDAsMCwwLDQuMTc3LjYxMWguMTUzYTExLjgzOSwxMS44MzksMCwwLDAsNC4zLS42MTEsNC44NjksNC44NjksMCwwLDAsMi41MjEtMS43MzJoLjA3NmE5LjU5Miw5LjU5MiwwLDAsMSwuNzktMi4zNjljLjk0Mi0xLjM1LDEuODg1LTIuNiwyLjgyNy00LjAyNEEyNC42MiwyNC42MiwwLDAsMCwzMCwxMC44NzJDMjkuNDkxLDExLjU4NSwyOC4zMTksMTIuMiwyNi4yMDUsMTIuNjgxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzZmNGUzN1xcXCIvPlwiLFxuXHRcIkNyeXN0YWxcIjogXCI8cGF0aCBkPVxcXCJNMjkuOTQxLDE5LjgxNiwxOS44LDI5LjkyOGMtLjAyOC4wMjgtLjA4NS4wMjgtLjE2OS4wMjhMNS44LDI2LjI2N2MtLjAyOCwwLS4wODQtLjAyOC0uMTEzLS4xMTNMMiwxMi4zNTJhLjQxOS40MTksMCwwLDEsLjAyOC0uMTY5TDEyLjE2OCwyLjA3MmMuMDI4LS4wMjguMDg0LS4wMjguMTY5LS4wMjhsMTMuODMsMy43MThjLjAyOCwwLC4wODQuMDI4LjExMy4xMTNsMy42OSwxMy44QzMwLjAyNiwxOS43MzIsMzAsMTkuNzg4LDI5Ljk0MSwxOS44MTZaTTE2LjM5Myw4LjgzMiwyLjgxNywxMi40OTNxLS4wNDIsMCwwLC4wODRMMTIuNzYsMjIuNTJjLjAyOC4wMjguMDI4LDAsLjA4NCwwTDE2LjUwNiw4Ljk3MkMxNi40NDksOC44MzIsMTYuMzkzLDguODMyLDE2LjM5Myw4LjgzMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjOGM4YzhcXFwiLz5cIixcblx0XCJDU1NcIjogXCI8cG9seWdvbiBwb2ludHM9XFxcIjUuOTAyIDI3LjIwMSAzLjY1NiAyIDI4LjM0NCAyIDI2LjA5NSAyNy4xOTcgMTUuOTg1IDMwIDUuOTAyIDI3LjIwMVxcXCIgc3R5bGU9XFxcImZpbGw6IzE1NzJiNlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTYgMjcuODU4IDI0LjE3IDI1LjU5MyAyNi4wOTIgNC4wNjEgMTYgNC4wNjEgMTYgMjcuODU4XFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNiAxMy4xOTEgMjAuMDkgMTMuMTkxIDIwLjM3MiAxMC4wMjYgMTYgMTAuMDI2IDE2IDYuOTM1IDE2LjAxMSA2LjkzNSAyMy43NSA2LjkzNSAyMy42NzYgNy43NjQgMjIuOTE3IDE2LjI4MiAxNiAxNi4yODIgMTYgMTMuMTkxXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi4wMTkgMjEuMjE4IDE2LjAwNSAyMS4yMjIgMTIuNTYzIDIwLjI5MiAxMi4zNDMgMTcuODI3IDEwLjY3IDE3LjgyNyA5LjI0IDE3LjgyNyA5LjY3MyAyMi42OCAxNi4wMDQgMjQuNDM4IDE2LjAxOSAyNC40MzQgMTYuMDE5IDIxLjIxOFxcXCIgc3R5bGU9XFxcImZpbGw6I2ViZWJlYlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTkuODI3IDE2LjE1MSAxOS40NTUgMjAuMjkgMTYuMDA4IDIxLjIyIDE2LjAwOCAyNC40MzYgMjIuMzQ0IDIyLjY4IDIyLjM5MSAyMi4xNTggMjIuOTI4IDE2LjE1MSAxOS44MjcgMTYuMTUxXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi4wMTEgNi45MzUgMTYuMDExIDguODU1IDE2LjAxMSAxMC4wMTggMTYuMDExIDEwLjAyNiA4LjU1NSAxMC4wMjYgOC41NTUgMTAuMDI2IDguNTQ1IDEwLjAyNiA4LjQ4MyA5LjMzMSA4LjM0MiA3Ljc2NCA4LjI2OCA2LjkzNSAxNi4wMTEgNi45MzVcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYmViZWJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE2IDEzLjE5MSAxNiAxNS4xMTEgMTYgMTYuMjc0IDE2IDE2LjI4MiAxMi42MTEgMTYuMjgyIDEyLjYxMSAxNi4yODIgMTIuNjAxIDE2LjI4MiAxMi41MzkgMTUuNTg3IDEyLjM5OSAxNC4wMiAxMi4zMjUgMTMuMTkxIDE2IDEzLjE5MVxcXCIgc3R5bGU9XFxcImZpbGw6I2ViZWJlYlxcXCIvPlwiLFxuXHRcIkNTVlwiOiBcIjxwYXRoIGQ9XFxcIk0yMi4wMzgsMkg2LjM3NWExLjc1NSwxLjc1NSwwLDAsMC0xLjc1LDEuNzV2MjQuNUExLjc1NSwxLjc1NSwwLDAsMCw2LjM3NSwzMGgxOS4yNWExLjc1NSwxLjc1NSwwLDAsMCwxLjc1LTEuNzVWNi44NTZabS41MjUsMi44NDQsMS42NjMsMS41MzFIMjIuNTYzWk02LjM3NSwyOC4yNVYzLjc1SDIwLjgxM1Y4LjEyNWg0LjgxM1YyOC4yNVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz48cmVjdCB4PVxcXCI4LjEyNVxcXCIgeT1cXFwiMTUuMDk3XFxcIiB3aWR0aD1cXFwiMTMuMDc2XFxcIiBoZWlnaHQ9XFxcIjEuNzVcXFwiIHN0eWxlPVxcXCJmaWxsOiM4MjllYzJcXFwiLz48cmVjdCB4PVxcXCI4LjEyNVxcXCIgeT1cXFwiMjQuNDM5XFxcIiB3aWR0aD1cXFwiOS43NjJcXFwiIGhlaWdodD1cXFwiMS43NVxcXCIgc3R5bGU9XFxcImZpbGw6IzgyOWVjMlxcXCIvPjxyZWN0IHg9XFxcIjguMTI1XFxcIiB5PVxcXCIxOS43NjNcXFwiIHdpZHRoPVxcXCIxNS43NVxcXCIgaGVpZ2h0PVxcXCIxLjc1XFxcIiBzdHlsZT1cXFwiZmlsbDojODI5ZWMyXFxcIi8+PHJlY3QgeD1cXFwiOC4xMjVcXFwiIHk9XFxcIjEwLjIzXFxcIiB3aWR0aD1cXFwiMTUuNzVcXFwiIGhlaWdodD1cXFwiMS43NVxcXCIgc3R5bGU9XFxcImZpbGw6IzgyOWVjMlxcXCIvPlwiLFxuXHRcIkRcIjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIxODUuNDU1XFxcIiB5MT1cXFwiMTYwMS42NDFcXFwiIHgyPVxcXCIxODEuOTU1XFxcIiB5Mj1cXFwiMTYzMC4yMjRcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTYyLjUyMyAtNjY2LjY0Nikgc2NhbGUoMC40MjcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIjE3Ni4xMzZcXFwiIHkxPVxcXCIxNjAwLjVcXFwiIHgyPVxcXCIxNzIuNjM2XFxcIiB5Mj1cXFwiMTYyOS4wODNcXFwiIHhsaW5rOmhyZWY9XFxcIiNhXFxcIi8+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfZGxhbmc8L3RpdGxlPjxwYXRoIGQ9XFxcIk0zLjk3OCwxNS40NjIsMy45NjksOC41MDlBLjU4OC41ODgsMCwwLDEsNC41LDcuOTQ3YS42NTguNjU4LDAsMCwxLC4wNzYsMGw2LjA3NC0uMDA5YTE1LjcsMTUuNywwLDAsMSw2LjA2Ny45NSw4LjksOC45LDAsMCwxLDIuMjQ0LDEuMzU5LDQuNDY5LDQuNDY5LDAsMCwxLDIuOTQ2LTEuMDgzLDQuMTEsNC4xMSwwLDAsMSw0LjI3NiwzLjkyQTQuMTEsNC4xMSwwLDAsMSwyMS45MDcsMTdjLS4wODksMC0uMTc3LS4wMDgtLjI2NS0uMDEyYTYuNjE3LDYuNjE3LDAsMCwxLS4yMzIuOTUzLDg1LjM4Myw4NS4zODMsMCwwLDEsOC41OSwyLjZWMkgyVjE1LjRRMi45OTIsMTUuNDIsMy45NzgsMTUuNDYyWm0yMi44LTcuOTQ0YTEuMzIsMS4zMiwwLDAsMSwxLjM3NCwxLjI1OSwxLjM3OSwxLjM3OSwwLDAsMS0yLjc0NywwQTEuMzIsMS4zMiwwLDAsMSwyNi43OCw3LjUxN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNiMDM5MzFcXFwiLz48cGF0aCBkPVxcXCJNMTcuODYxLDE1Ljc4N2E0LjExNCw0LjExNCwwLDAsMC0xLjc0OC0zLjQ1OCw1LjgxNCw1LjgxNCwwLDAsMC0xLjUwOC0uODIyLDcuMzU0LDcuMzU0LDAsMCwwLTEuNjI5LS40MzgsMjEuNjI5LDIxLjYyOSwwLDAsMC0yLjU4OC0uMWwtMi42MTksMCwuMDA2LDQuNzM3YTg4LjgyNyw4OC44MjcsMCwwLDEsOS45MSwxLjQwOEE0LjkxOSw0LjkxOSwwLDAsMCwxNy44NjEsMTUuNzg3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2IwMzkzMVxcXCIvPjxwYXRoIGQ9XFxcIk0yMC45OTMsMTguOTc5YTcuOTA2LDcuOTA2LDAsMCwxLTIuMTI4LDIuNTgyLDkuNzM5LDkuNzM5LDAsMCwxLTMuMjU2LDEuNzEsMTEuNTU4LDExLjU1OCwwLDAsMS0xLjk3MS40NzJoLS4wMTVhMzEuODU3LDMxLjg1NywwLDAsMS0zLjMyNi4xMTFsLTUuNjI1LjAyMmEuNjE2LjYxNiwwLDAsMS0uNjg2LS42ODFsLS4wMS03LjczNFEyLjk5MiwxNS40MiwyLDE1LjRWMzBIMzBWMjAuNTQ0YTg1LjM4Myw4NS4zODMsMCwwLDAtOC41OS0yLjZBNi45ODUsNi45ODUsMCwwLDEsMjAuOTkzLDE4Ljk3OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNiMDM5MzFcXFwiLz48cGF0aCBkPVxcXCJNMjAuOTkzLDE4Ljk3OWE3LjkwNiw3LjkwNiwwLDAsMS0yLjEyOCwyLjU4Miw5LjczOSw5LjczOSwwLDAsMS0zLjI1NiwxLjcxLDExLjU1OCwxMS41NTgsMCwwLDEtMS45NzEuNDcyaC0uMDE1YTMxLjg1NywzMS44NTcsMCwwLDEtMy4zMjYuMTExbC01LjYyNS4wMjJhLjYxNi42MTYsMCwwLDEtLjY4Ni0uNjgxbC0uMDEtNy43MzRRMi45OTIsMTUuNDIsMiwxNS40VjMwSDMwVjIwLjU0NGE4NS4zODMsODUuMzgzLDAsMCwwLTguNTktMi42QTYuOTg1LDYuOTg1LDAsMCwxLDIwLjk5MywxOC45NzlaXFxcIiBzdHlsZT1cXFwib3BhY2l0eTowLjMwMDAwMDAxMTkyMDkyOTtpc29sYXRpb246aXNvbGF0ZTtmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMTAuNDc3LDIwLjgzNWExNi4wMTQsMTYuMDE0LDAsMCwwLDIuODc3LS4yLDcuNjMzLDcuNjMzLDAsMCwwLDEuNjI4LS41LDUuNjI4LDUuNjI4LDAsMCwwLDEuMTg3LS43NDgsNC40NTcsNC40NTcsMCwwLDAsMS41MTgtMi4yNzEsODguNjkxLDg4LjY5MSwwLDAsMC05LjkxLTEuNDA4bC4wMDYsNS4xMzNaXFxcIiBzdHlsZT1cXFwiZmlsbDojYjAzOTMxXFxcIi8+PHBhdGggZD1cXFwiTTEwLjQ3NywyMC44MzVhMTYuMDE0LDE2LjAxNCwwLDAsMCwyLjg3Ny0uMiw3LjYzMyw3LjYzMywwLDAsMCwxLjYyOC0uNSw1LjYyOCw1LjYyOCwwLDAsMCwxLjE4Ny0uNzQ4LDQuNDU3LDQuNDU3LDAsMCwwLDEuNTE4LTIuMjcxLDg4LjY5MSw4OC42OTEsMCwwLDAtOS45MS0xLjQwOGwuMDA2LDUuMTMzWlxcXCIgc3R5bGU9XFxcIm9wYWNpdHk6MC4zMDAwMDAwMTE5MjA5Mjk7aXNvbGF0aW9uOmlzb2xhdGU7ZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTIwLjM4MywxMS43NDZhNi45OTMsNi45OTMsMCwwLDEsMS4zNiw0LjE0OCw2LjYxOCw2LjYxOCwwLDAsMS0uMSwxLjFjLjA4OCwwLC4xNzYuMDEyLjI2NS4wMTJhNC4xMSw0LjExLDAsMCwwLDQuMjc2LTMuOTIsNC4xMSw0LjExLDAsMCwwLTQuMjc2LTMuOTIsNC40Nyw0LjQ3LDAsMCwwLTIuOTQ2LDEuMDgzQTguMTIzLDguMTIzLDAsMCwxLDIwLjM4MywxMS43NDZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PGVsbGlwc2UgY3g9XFxcIjI2Ljc4XFxcIiBjeT1cXFwiOC43NzdcXFwiIHJ4PVxcXCIxLjM3NFxcXCIgcnk9XFxcIjEuMjU5XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTQuNjczLDIzLjg3N2w1LjYyNS0uMDIyYTMxLjg3MSwzMS44NzEsMCwwLDAsMy4zMjYtLjExMWguMDE1YTExLjQ5LDExLjQ5LDAsMCwwLDEuOTcxLS40NzIsOS43MzksOS43MzksMCwwLDAsMy4yNTYtMS43MSw3LjkwNiw3LjkwNiwwLDAsMCwyLjEyOC0yLjU4Miw2Ljk4NSw2Ljk4NSwwLDAsMCwuNDE3LTEuMDM0LDcuMDU2LDcuMDU2LDAsMCwwLC4zMzItMi4wNTEsNi45OTIsNi45OTIsMCwwLDAtMS4zNi00LjE0OCw4LjEsOC4xLDAsMCwwLTEuNDIxLTEuNSw4Ljg3OCw4Ljg3OCwwLDAsMC0yLjI0NC0xLjM1OSwxNS42ODYsMTUuNjg2LDAsMCwwLTYuMDY3LS45NWwtNi4wNzQuMDA5YS42NTguNjU4LDAsMCwwLS4wNzYsMCwuNTg4LjU4OCwwLDAsMC0uNTMyLjU2MmwuMDA5LDYuOTUyLjAxLDcuNzM0QS42MTYuNjE2LDAsMCwwLDQuNjczLDIzLjg3N1ptMy4xLTEyLjkwOCwyLjYxOSwwYTIxLjYyMywyMS42MjMsMCwwLDEsMi41ODguMSw3LjM1NCw3LjM1NCwwLDAsMSwxLjYyOS40MzgsNS44MTQsNS44MTQsMCwwLDEsMS41MDguODIyLDQuMTE2LDQuMTE2LDAsMCwxLDEuNzQ4LDMuNDU4LDQuOTA1LDQuOTA1LDAsMCwxLS4xNzUsMS4zMjcsNC40NTcsNC40NTcsMCwwLDEtMS41MTgsMi4yNzEsNS42MTMsNS42MTMsMCwwLDEtMS4xODcuNzQ4LDcuNjY2LDcuNjY2LDAsMCwxLTEuNjI4LjUsMTYuMDA5LDE2LjAwOSwwLDAsMS0yLjg3Ny4ybC0yLjY5NCwwLS4wMDYtNS4xMzNaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdFwiRGFydFwiOiBcIjxwYXRoIGQ9XFxcIk0xNi43MzksMi4wMzdhMS4zMTQsMS4zMTQsMCwwLDAtLjkxNi4zNzdsLS4wMTMuMDFMNy4yMiw3LjM4OWw4LjU2Niw4LjU2NnYuMDA2bDEwLjMsMTAuMywxLjk2My0zLjUzNkwyMC45NjgsNS43MjhsLTMuMy0zLjNhMS4zMDcsMS4zMDcsMCwwLDAtLjkyNy0uMzg4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY2YzNmYVxcXCIvPjxwYXRoIGQ9XFxcIk03LjI1LDcuMzUsMi4yODgsMTUuOTMxbC0uMDEuMDEzYTEuMzIyLDEuMzIyLDAsMCwwLS4zNzguOTE5LDEuMywxLjMsMCwwLDAsLjM4Ny45MjRMNi40LDIxLjlsMTYuMDg0LDYuMzI3LDMuNjM2LTIuMDItLjEtLjEtLjAyNSwwLTEwLjA4My0xMC4xSDE1LjlMNy4yNSw3LjM1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIxNTg5NlxcXCIvPjxwYXRoIGQ9XFxcIk03LjE5Miw3LjM2Mmw4Ljc2NCw4Ljc3M2guMDEzbDEwLjA4NywxMC4xLDMuODM5LS43MzJMMjkuOSwxNC4xNGwtNC4wNTQtMy45NzNhNi41MjEsNi41MjEsMCwwLDAtMy42MjQtMS42MTZsMC0uMDQ0TDcuMTkyLDcuMzYyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzNTk5N1xcXCIvPjxwYXRoIGQ9XFxcIk03LjI1Niw3LjQxMWw4Ljc2OCw4Ljc2OHYuMDEzTDI2LjExNiwyNi4yODRsLS43MzQsMy44MzlIMTQuMDIybC0zLjk3MS00LjA1NmE2LjUyMiw2LjUyMiwwLDAsMS0xLjYxNC0zLjYyNWwtLjA0NCwwTDcuMjU2LDcuNDExWlxcXCIgc3R5bGU9XFxcImZpbGw6IzU4YjZmMFxcXCIvPlwiLFxuXHRcIkRoYWxsXCI6IFwiPHBhdGggZD1cXFwiTTE2LDIuMDdBMTMuOTMsMTMuOTMsMCwxLDEsMiwxNiwxMy45MywxMy45MywwLDAsMSwxNiwyLjA3Wk0xMy4yOCwyMi4zMmExLjQ5LDEuNDksMCwxLDEtMSwxLjgzQTEuNDksMS40OSwwLDAsMSwxMy4yOCwyMi4zMlptOC0xNS42OGEuNTMuNTMsMCwwLDEsLjM4LjY2LjUyLjUyLDAsMCwxLS42NS4zOGwtLjUtLjEzYTQyLjY3LDQyLjY3LDAsMCwwLS4zNyw3LjA3QzE4LjA2LDE2LjQ1LDE0LjM5LDIyLDE0LjM5LDIybDEuOTMtNy4xOGExLDEsMCwwLDAsLjg5LS42NS45MS45MSwwLDAsMC0xLjc1LS40NywxLDEsMCwwLDAsLjQ1LDFMMTQsMjEuODVhNjguMzgsNjguMzgsMCwwLDAtMS4zNC05LjI1LDM0LjI4LDM0LjI4LDAsMCwwLDMuMjEtNi4zMWwtLjUtLjEzQS41NS41NSwwLDAsMSwxNSw1LjVhLjUzLjUzLDAsMCwxLC42Ni0uMzhsNS42OCwxLjUyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2I3YjdiNztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPlwiLFxuXHRcIkRpZmZcIjogXCI8cmVjdCB4PVxcXCI2Ljk3NVxcXCIgeT1cXFwiM1xcXCIgd2lkdGg9XFxcIjE4LjA1XFxcIiBoZWlnaHQ9XFxcIjYuMDE3XFxcIiBzdHlsZT1cXFwiZmlsbDojYzAwMDAwXFxcIi8+PHBhdGggZD1cXFwiTTEyLjk5MiwxMC45NXY2LjAxN0g2Ljk3NXY2LjAxN2g2LjAxN1YyOWg2LjAxN1YyMi45ODNoNi4wMTdWMTYuOTY3SDE5LjAwOFYxMC45NVpcXFwiIHN0eWxlPVxcXCJmaWxsOmdyZWVuXFxcIi8+XCIsXG5cdFwiRGphbmdvL0ppbmphMlwiOiBcIjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiYVxcXCIgY3g9XFxcIjE2XFxcIiBjeT1cXFwiLTExOS4yODNcXFwiIHI9XFxcIjEzLjVcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTAuOTQ1LCAwLCAtOTYuNzM1KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzU3NTc1N1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzJmMmYyZlxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfamluamE8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yOS4zNCwzLjI0MWEzOC4yNzEsMzguMjcxLDAsMCwxLTkuNDUxLDMuMDRjLTQuMjQxLjU1LTEyLjMyOSwxLjEtMTMuOTM1LjcxMkEyMy4zLDIzLjMsMCwwLDEsMy4yLDYuMTUxbC4zMzQsMS4xMzJMMi41LDguMTg4bC4xODMuMzIzLjQyNC4wMzIsMS4zLjE2Mi4xODMuNTgyLjcyNy4wNjYuMzY0LDEuMjI4czEuNTQ0LjEzLDIsLjEzLDEuMzYzLS4wNjQsMS4zNjMtLjA2NGwuMDMuNDg1LjMzNC4wNjR2LjU1bC0uNzI4LjY0OC4xODMuMDMydi4yMjVhMTUuODE2LDE1LjgxNiwwLDAsMS0yLjMuMDM0Yy0uNjY2LS4xLS43ODgtLjEtLjc4OC0uMWwtLjA2LjA2NC0uMDMuMjkxaC4xNTFsLjA2LDEuMjYyLDMuMzYzLS4xMy0uMjQzLDQuMzY1LS4wMy41NDktMi44NDgtLjE2Mi0uMDMtMS4xNjRoLjYzNWwuMDYxLS40NTMuNTc1LS4xMy4wOTEtLjEyOC0yLjE1MS0uNTE4LTEuNjM2LjQ4NS4yNzMuMjI3aC4yNzNsLjAzLjM4OS41NzUuMDMyVjE4LjdsLS42MzUuMTYyLjEyMS4yNTcuMTUxLjF2Ljg3M2guMzk0djQuMDQxbC0uNjM3LjEuMDkxLDEuMTY0LjM5My4wNjYtLjA2LDIuNjUxLDEuNzI3LjAzMi0uMzY0LTIuNjE5LDIuNjA1LS4wNjQtLjE4MSwxLjQyMi0uMjQzLDEsMi42MzUuMDMyLjAzLTIuNTg2LDEuODE3LS4xNjItLjA5LDEuNjQ5LS4wNjEuOTY5aDEuNTQ2bC0uMDYxLTIuNjUxLjIxMy4wMzQuMDYtMS4yNjJoLS4yNDNsLS4wOS0uNTE4TDEzLjgsMjEuOWwuMDYtMS43MTNoLjMzM1YxOS4xNDlsLS40MjQuMDMyLjA2MS0xLjIyLjQ5My0uMDQ5LjAyMy0uNC4yOC0uMDQxLjI4Ny0uMjE4TDEzLjE4NywxNi45bC0xLjcxMi4zNzkuMTY3LjI3NC4xODEtLjAxNS4yMTEtLjAwOC4wMzkuNS40NzctLjAyMy4wMDksMS4wODItMi4wNTMtLjA0Ny4wNjktMS4xNTYuMDY3LTEuMDUxVjE1LjQ1NUwxMC43LDE0bDQuMTExLS4yMSw0Ljg5Mi0uMjgyLjA0Ni45MjktLjE3NCwyLjIzMUwxOS41LDE4Ljc0NGwtMS44LS4wMzItLjAwOS0xLjQ1NS42NjctLjAyNC4wMy0uNDExLjI3My0uMDQxLS4wMTQtLjA4MS4yNzMtLjAxNS4xNTEtLjJMMTcuMDM0LDE2LDE1LDE2LjQ0bC4xNDQuMjUxLjIyNy0uMDE3di4xMTRoLjI4di40NmwuNi4wMDgtLjAwNywxLjI3N2gtLjYwNWwtLjAwOS4yOTEuMjEzLjAyNC0uMDIzLDEuMTA4LjQ0Ny4wMjQtLjA1Myw0LjM5LS41OTEuMTIuMDA3LjIxaC4yMDZ2MS4xMjRoLjM0bC0uMDksMS41MzZMMTUuOTc0LDI4LjdsMi4xNTEuMDU2LS4wNjktMS4xNjQtLjE1OC0uOTY5LS4wMzEtLjg0MSwxLjgyNi0uMDMyLS4wNTMsMS4zLS4wMDksMS4zNzQsMS4wMzEuMDgxLDEuNC0uMDU2LjQ0LS4xMy0uMjQzLS43MzYtLjA2LTEuMTU2LS4xMTQtLjgyNCwxLjc0Mi0uMDY0LS4wNzYsMS4wMS0uMDA3LDEuNTg1LjcuMDY0LjY5LS4wMTUuMzMzLS4xMDUtLjItMS41TDI1LjIsMjUuNDQ1bC4zLS4wMzJMMjUuNSwyNC40bC4wODMtLjAxNy0uMDE0LS4yMThoLS4zNDFsLS4wNjktLjc0NEwyNS4xMywyMC4ybC4yNTctLjAwOFYxOS4xMzNsLjEwNy4wMTd2LS4yMWwtLjM4LS4wMzQuMDA5LTEuMjI4LjYzNS0uMDU2LS4wMzctLjQxMy4yOC0uMDI0LS4wMTYtLjA4MS4zNzEtLjE4Ni0xLjg4Ni0uMzc5LTEuOTE2LjM4OS4xMjEuMjI2LjMtLjAyNC4wMTYuMWguMjVsLjAxNC40ODUuNjIxLS4wMDguMDUzLDEuMTg4LTIuMi0uMDE3LS4yNTctMS43ODYtLjIwNi0uOTQ2LS4xNjYtMS43LjEtLjk5Myw0LjM3Ny0uMzMyLjAxNC0xLjQ3OS4yMi0uMDU2LS4wMTQtLjIyNS0uMTY3LS4xcy0yLjM5My4zNTUtMy4xNTEuNDM2bC0uMzcxLjA0LS4wMjMtLjI3NC0uOTA1LS40NzQuMDExLS41NTIuMzExLS4wMDkuMDIzLS43NTlhMjQuODA3LDI0LjgwNywwLDAsMCwyLjU0NC0uMjgzYy42ODktLjE2MiwxLjY2Ni0uMzIzLDEuNjY2LS4zMjNMMjYuMiw3LjgwOWwuOTE3LS4yNjcuMDc2LS4yMSwyLjA3NC0uNTc0LjIzNi0uMTk0LS43ODgtMS43MjIuMDc2LS4zODkuNC0uMjEuMjg4LS44ODFaTTE5LjM3NCw5LjhsLS4wMTEuNjI2LjQ3LjAyLS4wMy41OTQtLjkyMS42LS4wNTcuMTc0LjM3MSwwLDAsLjE0Ni0yLjgxNC4xMzcuMDE5LS40MTYuMTI4LS4yMDcuMDA5LS4xMzMsMC0uMjg2LjA4LS4xOS4wMy0uMTU0di0uMTFsLjEyMS0uNDg1Wm0tNS44ODUuNTMzLS4wNjkuNDIxLjIyLjI1OS0uMDE0LjQ1My4yLjMxNS0uMDUzLjM3Mi4xNTEuMjE4LTIuODcxLjExMy0uMDA3LS4xLjMzMy0uMDQxLjAxNi0uMTIyLS43MjctLjM5NS0uMDM5LS42MzEuMzQ4LS4wMTcuMDMtLjY4Wm00LjI0OSw5LjcsMS43NDIuMTEzTDE5LjQyLDIyLjVsLjIyNywxLjkyM0wxNy44LDI0LjM1NFptLTExLjY2My4xLDIuNzg4LjE0NUw4LjYyLDIxLjl2MS4zNTlsLjIuNzU5LTIuNzI3LjEzWm0xNy44NDMuMDE1djQuMDFsLTEuNzcyLjEzLS4wNjEtMi4xMTgtLjItMS45NzNaTTEwLjUsMjAuMjRsMi4wNi4wMDguMDIxLDMuNzE4TDEwLjY1NywyNGwtLjEtMS4yMDUtLjAwNy0xLjJaXFxcIiBzdHlsZT1cXFwic3Ryb2tlOnJlZDtzdHJva2Utd2lkdGg6MC41cHg7ZmlsbDp1cmwoI2EpXFxcIi8+XCIsXG5cdFwiRG9ja2VyXCI6IFwiPHBhdGggZD1cXFwiTTE2LjU0LDEyLjY2M0gxOS40djIuOTI0aDEuNDQ2YTYuMjcyLDYuMjcyLDAsMCwwLDEuOTg4LS4zMzMsNS4wOTEsNS4wOTEsMCwwLDAsLjk2Ni0uNDM2LDMuNTg0LDMuNTg0LDAsMCwxLS42Ny0xLjg0OSwzLjkwNywzLjkwNywwLDAsMSwuNy0yLjc1M2wuMy0uMzQ4LjM1OC4yODhhNC41NTgsNC41NTgsMCwwLDEsMS43OTUsMi44OTIsNC4zNzUsNC4zNzUsMCwwLDEsMy4zMTkuMzA5bC4zOTMuMjI2LS4yMDcuNGE0LjE0MSw0LjE0MSwwLDAsMS00LjE1NywxLjk4M2MtMi40OCw2LjE2OC03Ljg3MSw5LjA4OC0xNC40MDksOS4wODgtMy4zNzgsMC02LjQ3Ni0xLjI2My04LjI0MS00LjI1OWwtLjAyOS0uMDQ5TDIuNywyMC4yMjdhOC4zMTYsOC4zMTYsMCwwLDEtLjY1OS00LjIwOGwuMDQtLjQzM0g0LjUyNlYxMi42NjNINy4zODdWOS44aDUuNzIxVjYuOTQySDE2LjU0djUuNzIxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwOTZlNlxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4wMDYsMjQuNTY3YTYuMDIyLDYuMDIyLDAsMCwxLTMuMTQtMy4wODksMTAuMzI5LDEwLjMyOSwwLDAsMS0yLjI2NC4zNDNxLS41LjAyOC0xLjA0NS4wMjgtLjYzMiwwLTEuMzMxLS4wMzdhOS4wNTEsOS4wNTEsMCwwLDAsNywyLjc2OVExMS42MTgsMjQuNTgxLDEyLjAwNiwyNC41NjdaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTcuMDgsMTMuMzQ2aC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N0g2LjdWMTMuMzQ2Wm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzc2LDBoLjJ2Mi4wNjdoLS4yWm0tLjM2OCwwaC4ydjIuMDY3aC0uMlYxMy4zNDZaTTUsMTMuMTRINy40ODJ2Mi40NzlINVptMi44NTktMi44NjFoMi40OHYyLjQ3OUg3Ljg2M1ptMi4wNzcuMjA3aC4ydjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzc2LDBoLjJ2Mi4wNjZoLS4yVjEwLjQ4NlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzc2LDBoLjJ2Mi4wNjZoLS4yWm0tLjM2OCwwaC4ydjIuMDY2aC0uMlptLS4yMDcsMi42NTNoMi40OHYyLjQ4SDcuODYzVjEzLjE0Wm0yLjA3Ny4yMDdoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJWMTMuMzQ2Wm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzY4LDBoLjJ2Mi4wNjdoLS4yWm0yLjY1NC0uMjA3SDEzLjJ2Mi40OGgtMi40OFYxMy4xNFptMi4wNzYuMjA3SDEzdjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzc2LDBoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzY4LDBoLjJ2Mi4wNjdoLS4yWm0tLjIwNi0zLjA2N0gxMy4ydjIuNDc5aC0yLjQ4VjEwLjI3OVptMi4wNzYuMjA3SDEzdjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzc2LDBoLjJ2Mi4wNjZoLS4yWm0tLjM3NiwwaC4ydjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzY4LDBoLjJ2Mi4wNjZoLS4yWm0yLjY1NCwyLjY1M2gyLjQ3OXYyLjQ4aC0yLjQ4VjEzLjE0Wm0yLjA3Ni4yMDdoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzc2LDBoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNjgsMGguMTkydjIuMDY3aC0uMlYxMy4zNDZabS0uMjA2LTMuMDY3aDIuNDc5djIuNDc5aC0yLjQ4VjEwLjI3OVptMi4wNzYuMjA3aC4ydjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzc2LDBoLjJ2Mi4wNjZoLS4yWm0tLjM3NiwwaC4ydjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzY4LDBoLjE5MnYyLjA2NmgtLjJWMTAuNDg2Wm0tLjIwNi0zLjA2N2gyLjQ3OVY5LjloLTIuNDhWNy40MTlabTIuMDc2LjIwNmguMlY5LjY5MWgtLjJabS0uMzc2LDBoLjJWOS42OTFoLS4yWm0tLjM3NiwwaC4yVjkuNjkxaC0uMlptLS4zNzYsMGguMlY5LjY5MWgtLjJabS0uMzc2LDBoLjJWOS42OTFoLS4yWm0tLjM2OCwwaC4xOTJWOS42OTFoLS4yVjcuNjI1Wm0yLjY1NCw1LjUxNGgyLjQ3OXYyLjQ4aC0yLjQ4VjEzLjE0Wm0yLjA3Ni4yMDdoLjE5NXYyLjA2N2gtLjJWMTMuMzQ2Wm0tLjM3NiwwaC4yMDZ2Mi4wNjdoLS4yMDZabS0uMzc2LDBoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjIwNVYxMy4zNDZabS0uMzY4LDBoLjJ2Mi4wNjdoLS4xOTRWMTMuMzQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xMC4xODgsMTkuNjM4YS42ODQuNjg0LDAsMSwxLS42ODQuNjg0QS42ODQuNjg0LDAsMCwxLDEwLjE4OCwxOS42MzhabTAsLjE5NGEuNDg5LjQ4OSwwLDAsMSwuMTc3LjAzMy4yLjIsMCwxLDAsLjI3NS4yNjkuNDkuNDksMCwxLDEtLjQ1My0uM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0XCJET1QgKEdyYXBodml6KVwiOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiMjMuOTQyIDMwIDEyLjY3OSAzMCAxLjQxNyAzMCAxLjQxNyAxNiAxLjQxNyAyIDEyLjY3OSAyIDIzLjk0MiAyIDIzLjk0MiAxNiAyMy45NDIgMzBcXFwiIHN0eWxlPVxcXCJmaWxsOiNlNmU2ZTZcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMy4yMDJcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiNy40MlxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIxMS42MzhcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMTUuODU2XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjIwLjA3NFxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIyNC4yOTNcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMjguNTExXFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMlxcXCIgeT1cXFwiMy4yMDJcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS41NzNcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCI2LjIxOFxcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIxMC40MzZcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMTQuNjU1XFxcIiB5PVxcXCIzLjMzM1xcXCIgd2lkdGg9XFxcIjAuMjY0XFxcIiBoZWlnaHQ9XFxcIjI1LjMzMVxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjE4Ljg3M1xcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyMy4wOTFcXFwiIHk9XFxcIjMuMjAyXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuNTczXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PGcgc3R5bGU9XFxcIm9wYWNpdHk6MC41XFxcIj48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMjcuNDU2XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjI2LjQwMlxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIyNS4zNDdcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMjMuMjM4XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjIyLjE4NFxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIyMS4xMjlcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMTkuMDJcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMTcuOTY1XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjE2LjkxMVxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIxNC44MDJcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMTMuNzQ3XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjEyLjY5M1xcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIxMC41ODNcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiOS41MjlcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiOC40NzRcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiNi4zNjVcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiNS4zMTFcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiNC4yNTZcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48L2c+PGcgc3R5bGU9XFxcIm9wYWNpdHk6MC41XFxcIj48cmVjdCB4PVxcXCIyMi4wMzZcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMjAuOTgyXFxcIiB5PVxcXCIzLjMzM1xcXCIgd2lkdGg9XFxcIjAuMjY0XFxcIiBoZWlnaHQ9XFxcIjI1LjMzMVxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjE5LjkyN1xcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIxNy44MThcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMTYuNzY0XFxcIiB5PVxcXCIzLjMzM1xcXCIgd2lkdGg9XFxcIjAuMjY0XFxcIiBoZWlnaHQ9XFxcIjI1LjMzMVxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjE1LjcwOVxcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIxMy42XFxcIiB5PVxcXCIzLjMzM1xcXCIgd2lkdGg9XFxcIjAuMjY0XFxcIiBoZWlnaHQ9XFxcIjI1LjMzMVxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjEyLjU0NVxcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIxMS40OTFcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiOS4zODJcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiOC4zMjdcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiNy4yNzNcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiNS4xNjRcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiNC4xMDlcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMy4wNTVcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PC9nPjxwYXRoIGQ9XFxcIk0xMyw4Ljk3NmMtMi4zMDgsMC00LjEzMS0xLjI3NC00LjE5My0yLjk2OWgwYTIuNzc1LDIuNzc1LDAsMCwxLDEuMjUzLTIuMzIsNS4zLDUuMywwLDAsMSwyLjk0My0uOTYzLDUuMjk0LDUuMjk0LDAsMCwxLDMuMDA2Ljc0MywyLjc3NSwyLjc3NSwwLDAsMSwxLjQyMSwyLjIyMWMuMDY1LDEuNzUyLTEuNzc5LDMuMTk0LTQuMiwzLjI4M0MxMy4xNTgsOC45NzQsMTMuMDgsOC45NzYsMTMsOC45NzZabS4yMzItNS4ycS0uMDk1LDAtLjE5LDBhNC4yMzgsNC4yMzgsMCwwLDAtMi4zNTQuNzU2LDEuNzYxLDEuNzYxLDAsMCwwLS44MjgsMS40MzVDOS45LDcuMDksMTEuNDI4LDcuOTc4LDEzLjIsNy45MTdzMy4yMjMtMS4wNjksMy4xODEtMi4xOTFhMS43NjEsMS43NjEsMCwwLDAtLjkzMi0xLjM2OUE0LjE2NSw0LjE2NSwwLDAsMCwxMy4yMzQsMy43NzNaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTYuNCwyOS4yODFBNS4yMzgsNS4yMzgsMCwwLDEsMy42LDI4LjUxOWEyLjc3NSwyLjc3NSwwLDAsMS0xLjQxLTIuMjI5Yy0uMDU2LTEuNzUyLDEuOC0zLjE4NSw0LjIxMy0zLjI2MnM0LjM1NiwxLjIzNiw0LjQxMiwyLjk4OEEyLjc3NSwyLjc3NSwwLDAsMSw5LjU0OCwyOC4zM2E1LjMsNS4zLDAsMCwxLTIuOTQ4Ljk0OFE2LjUsMjkuMjgxLDYuNCwyOS4yODFabS4xODYtNS4yLS4xNTYsMGMtMS43NjYuMDU2LTMuMjI5LDEuMDUyLTMuMTkzLDIuMTc0YTEuNzYxLDEuNzYxLDAsMCwwLC45MjQsMS4zNzQsNC4yMzUsNC4yMzUsMCwwLDAsMi40LjU5Myw0LjIzNSw0LjIzNSwwLDAsMCwyLjM1Ny0uNzQ0LDEuNzYxLDEuNzYxLDAsMCwwLC44MzUtMS40M0M5LjcyNCwyNC45NjEsOC4yOSwyNC4wOCw2LjU5MSwyNC4wOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NTY1NjVcXFwiLz48cGF0aCBkPVxcXCJNMTkuMjYxLDI5LjI2YTUuMjM4LDUuMjM4LDAsMCwxLTIuODA3LS43NjIsMi43NzUsMi43NzUsMCwwLDEtMS40MS0yLjIyOWgwYy0uMDU1LTEuNzUyLDEuOC0zLjE4NSw0LjIxMy0zLjI2MmE1LjMsNS4zLDAsMCwxLDMsLjc1OUEyLjYsMi42LDAsMCwxLDIyLjQsMjguMzFhNS4zLDUuMywwLDAsMS0yLjk0OC45NDhRMTkuMzU4LDI5LjI2LDE5LjI2MSwyOS4yNlpNMTYuMSwyNi4yMzZhMS43NjEsMS43NjEsMCwwLDAsLjkyNCwxLjM3NCw0LjU3LDQuNTcsMCwwLDAsNC43NTctLjE1MSwxLjU1OCwxLjU1OCwwLDAsMC0uMDg5LTIuOCw0LjIyNiw0LjIyNiwwLDAsMC0yLjQtLjU5M2MtMS43NjYuMDU2LTMuMjI4LDEuMDUyLTMuMTkzLDIuMTc0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk02LjIsMjMuNDc3QTI3LjQsMjcuNCwwLDAsMSw5Ljc2OSw4Ljk4NmwuNjg3LjM5MUEyNi42MDksMjYuNjA5LDAsMCwwLDYuOTg2LDIzLjQ1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC44NTMsNy45NTdhNy4xNzEsNy4xNzEsMCwwLDAtLjA3NSwyLjMybC0uNzU4LS45My0xLjE3OC0uMjNBNy4xNjUsNy4xNjUsMCwwLDAsMTAuODUzLDcuOTU3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS44NTQsMjMuNDc3bC0uNzktLjAyN2EyNi41OSwyNi41OSwwLDAsMC0uOTE1LTcuODg0LDI2LjYyNCwyNi42MjQsMCwwLDAtMi41NTQtNi4xODlsLjY4Ny0uMzkxYTI3LjQyMywyNy40MjMsMCwwLDEsMi42Myw2LjM3M0EyNy4zNzIsMjcuMzcyLDAsMCwxLDE5Ljg1NCwyMy40NzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTE1LjIsNy45NTdhNy4xNzEsNy4xNzEsMCwwLDAsMi4wMTEsMS4xNTlsLTEuMTc4LjIzLS43NTguOTNBNy4xNjUsNy4xNjUsMCwwLDAsMTUuMiw3Ljk1N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NTY1NjVcXFwiLz48cmVjdCB4PVxcXCIxMS4zNDhcXFwiIHk9XFxcIjkuOTQ1XFxcIiB3aWR0aD1cXFwiMy41MTVcXFwiIGhlaWdodD1cXFwiMC43OTFcXFwiIHRyYW5zZm9ybT1cXFwibWF0cml4KDAuMDE2LCAtMSwgMSwgMC4wMTYsIDIuNTU3LCAyMy4yNzkpXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTEzLjA1NCwxMy41MjlhNy4xNzEsNy4xNzEsMCwwLDAtMS4xLTIuMDQ2bDEuMTIyLjQyNiwxLjEzNS0uMzlBNy4xNjUsNy4xNjUsMCwwLDAsMTMuMDU0LDEzLjUyOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NTY1NjVcXFwiLz48cmVjdCB4PVxcXCI3LjgwOVxcXCIgeT1cXFwiMjAuMDgxXFxcIiB3aWR0aD1cXFwiNC43NTdcXFwiIGhlaWdodD1cXFwiMC43OTFcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0xMi41NiAxOC4xMDgpIHJvdGF0ZSgtNTcuNjAzKVxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk04LjE0NywyMy42OTRhNy4xNzEsNy4xNzEsMCwwLDAsLjEzMy0yLjMxN2wuNzM0Ljk0OSwxLjE3MS4yNkE3LjE2NSw3LjE2NSwwLDAsMCw4LjE0NywyMy42OTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHJlY3QgeD1cXFwiMTUuNDE4XFxcIiB5PVxcXCIxOC4wNTFcXFwiIHdpZHRoPVxcXCIwLjc5MVxcXCIgaGVpZ2h0PVxcXCI0LjkxOVxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTguMjU3IDEwLjk1MSkgcm90YXRlKC0zMC43MDgpXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTE3LjgsMjMuODU2YTcuMTcxLDcuMTcxLDAsMCwwLTIuMDA2LTEuMTY4bDEuMTc5LS4yMjUuNzYyLS45MjdBNy4xNjUsNy4xNjUsMCwwLDAsMTcuOCwyMy44NTZaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTEzLjAyNCwxOS4xMjVhNS4yMzgsNS4yMzgsMCwwLDEtMi44MDctLjc2MiwyLjc3NSwyLjc3NSwwLDAsMS0xLjQxLTIuMjI5LDIuNzc1LDIuNzc1LDAsMCwxLDEuMjY2LTIuMzE0LDUuMyw1LjMsMCwwLDEsMi45NDgtLjk0OCw2LjcxMiw2LjcxMiwwLDAsMSwyLjEzNC4zMTNsLS4zMzEsMWE1LjY2OCw1LjY2OCwwLDAsMC0xLjc2OS0uMjYxLDQuMjM4LDQuMjM4LDAsMCwwLTIuMzU4Ljc0NCwxLjc2MSwxLjc2MSwwLDAsMC0uODM1LDEuNDMsMS43NjEsMS43NjEsMCwwLDAsLjkyNCwxLjM3NCw0LjI0Miw0LjI0MiwwLDAsMCwyLjQuNTkzLDUuNyw1LjcsMCwwLDAsMS42NzgtLjM3OGwuMzc4Ljk4NWE2Ljg0NCw2Ljg0NCwwLDAsMS0yLjAyMi40NDhRMTMuMTIxLDE5LjEyNSwxMy4wMjQsMTkuMTI1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk0xNS40MzUsMTIuODc2YTQuMzM4LDQuMzM4LDAsMCwwLS45ODQsMS42MjIsMi4wNjQsMi4wNjQsMCwwLDEtLjAxNiwyLjgwNiw0LjQsNC40LDAsMCwwLC45ODIsMS42LDMuOTMyLDMuOTMyLDAsMCwwLC4wNzgtNS45ODZDMTUuNDc2LDEyLjksMTUuNDU0LDEyLjg5MywxNS40MzUsMTIuODc2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS41MjUsMTUuMjc4YTI3LjkzMSwyNy45MzEsMCwwLDAtMS4yNjMtMy43NDIsNC4zNzYsNC4zNzYsMCwwLDAtMS43NzcuNTE3LDI2LjA2MywyNi4wNjMsMCwwLDEsMS4yNTMsMy42ODUsMjYuMDM4LDI2LjAzOCwwLDAsMSwuNzM0LDQuNTM0LDQuMzQ3LDQuMzQ3LDAsMCwwLDEuODI1LS4zNTFBMjcuOSwyNy45LDAsMCwwLDE5LjUyNSwxNS4yNzhaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTE2LjE1MywxMi4yMjlBNC40MzcsNC40MzcsMCwxLDAsMjIuMywxMy41LDQuNDM3LDQuNDM3LDAsMCwwLDE2LjE1MywxMi4yMjlabTQuODEyLDcuMzMyYTQuMzQ2LDQuMzQ2LDAsMSwxLDEuMjQ5LTYuMDE4QTQuMzQ2LDQuMzQ2LDAsMCwxLDIwLjk2NSwxOS41NjFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMmMyOTI4XFxcIi8+PHBhdGggZD1cXFwiTTIyLjAxNSwxOS4xODZhLjgyMi44MjIsMCwwLDAtLjE5Mi0uMjA5LDQuMzQ3LDQuMzQ3LDAsMCwxLS4zMzMuMzE5LDQuNTIyLDQuNTIyLDAsMCwxLS40NDYuMzM3LDQuNzMsNC43MywwLDAsMS0uOTQuNDc3LjY2OS42NjksMCwwLDAsLjAzMS4xLjY0LjY0LDAsMCwwLC4wNDcuMDk0bC40ODcuOEwyMi41LDE5Ljk4NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyODI4MjhcXFwiLz48cmVjdCB4PVxcXCIyMC43OTNcXFwiIHk9XFxcIjIwLjc4NFxcXCIgd2lkdGg9XFxcIjIuMTQ3XFxcIiBoZWlnaHQ9XFxcIjAuNDRcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC03Ljc0IDE0LjQ2NSkgcm90YXRlKC0zMS4zOTQpXFxcIiBzdHlsZT1cXFwiZmlsbDojMjgyODI4XFxcIi8+PHJlY3QgeD1cXFwiMjIuODY4XFxcIiB5PVxcXCIyMC45NlxcXCIgd2lkdGg9XFxcIjIuMTQ3XFxcIiBoZWlnaHQ9XFxcIjYuODg3XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtOS4yMDcgMTYuMDQ0KSByb3RhdGUoLTMxLjM5NClcXFwiIHN0eWxlPVxcXCJmaWxsOiMyODI4MjhcXFwiLz48cGF0aCBkPVxcXCJNMjcuMDU0LDI3LjQ0M2wtLjIzNi0uMzg3LTEuODMzLDEuMTE5LjIzNi4zODdhLjkyNC45MjQsMCwwLDAsMS4yNzkuMTU5bC4xMS0uMDY3QS45MjQuOTI0LDAsMCwwLDI3LjA1NCwyNy40NDNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjgyODI4XFxcIi8+PHBhdGggZD1cXFwiTTIwLjY4LDE0Ljg0NWEuMzE1LjMxNSwwLDAsMSwuMzM4LjAyNywxLjA3OCwxLjA3OCwwLDAsMSwuMjk0LjU3OCwxLjEsMS4xLDAsMCwxLC4wMjkuNjU0LjMyNy4zMjcsMCwwLDEtLjI3OC4yLjQ2OC40NjgsMCwwLDEtLjM3LS4xLjkyMi45MjIsMCwwLDEtLjI2Mi0uNS45NTUuOTU1LDAsMCwxLS4wMS0uNTg1QS40NjYuNDY2LDAsMCwxLDIwLjY4LDE0Ljg0NVptLjA2LjIyN2EuMTQ5LjE0OSwwLDAsMC0uMDc0LjA2My4yNDcuMjQ3LDAsMCwwLS4wMjcuMTMyLDEuNjI2LDEuNjI2LDAsMCwwLC4wNjQuMzU1LDEuNTkyLDEuNTkyLDAsMCwwLC4xMTIuMzI5LjI2OC4yNjgsMCwwLDAsLjA5NC4xMS4xNDIuMTQyLDAsMCwwLC4wOTQuMDE1LjEyMS4xMjEsMCwwLDAsLjA3OC0uMDQ4LjIxMS4yMTEsMCwwLDAsLjAyOC0uMTI4LDIuNjQzLDIuNjQzLDAsMCwwLS4xODYtLjcyMi4yMzUuMjM1LDAsMCwwLS4wOTMtLjEwN0EuMTE2LjExNiwwLDAsMCwyMC43MzksMTUuMDcyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMS42OTQsMTQuNGEuMy4zLDAsMCwxLC4zNDYuMDU3LDEuNDkzLDEuNDkzLDAsMCwxLC4zMjUuNywxLjUyMSwxLjUyMSwwLDAsMSwuMDYuNzcxLjMxLjMxLDAsMCwxLS4yNy4yMjguNDQ2LjQ0NiwwLDAsMS0uMzc5LS4xMzcsMS4zMSwxLjMxLDAsMCwxLS4yOTItLjYxNywxLjM0MSwxLjM0MSwwLDAsMS0uMDQxLS43QS40NDEuNDQxLDAsMCwxLDIxLjY5NCwxNC40Wm0uMDcyLjI3M2EuMTM2LjEzNiwwLDAsMC0uMDcyLjA2OS4zMTUuMzE1LDAsMCwwLS4wMjEuMTU1LDIuMzUxLDIuMzUxLDAsMCwwLC4wODQuNDI3LDIuMzEsMi4zMSwwLDAsMCwuMTMxLjQuMzQ3LjM0NywwLDAsMCwuMS4xMzUuMTMuMTMsMCwwLDAsLjEuMDIxLjExLjExLDAsMCwwLC4wNzYtLjA1NC4yNzUuMjc1LDAsMCwwLC4wMjItLjE1LDMuNzczLDMuNzczLDAsMCwwLS4yMjQtLjg2Mi4zMTEuMzExLDAsMCwwLS4xLS4xMzJBLjEuMSwwLDAsMCwyMS43NjYsMTQuNjc0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMy40NzIsMTUuOTM0bC0uMjY5LjAzOC0uMzc5LTEuNDM5YS45NTUuOTU1LDAsMCwxLS4yNTcuMzkybC0uMDg3LS4zMzFhLjg0MS44NDEsMCwwLDAsLjE2OS0uMjYuODc0Ljg3NCwwLDAsMCwuMDc1LS4zODNsLjItLjA4OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjQuNDU1LDE1Ljc5NGwtLjI2OS4wMzgtLjQyOS0xLjYyNWExLDEsMCwwLDEtLjI0Ny40MjlsLS4xLS4zNzZhLjg3NC44NzQsMCwwLDAsLjE2Mi0uMjg0LDEuMDI4LDEuMDI4LDAsMCwwLC4wNjQtLjQyNGwuMi0uMDg5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yNC42MzYsMTMuMTE3Yy4xMjctLjA1NS4yNDktLjAwOC4zNjkuMTQ0YTMuMTEsMy4xMSwwLDAsMSwuNDE2LDEuMDM0LDMuMTQzLDMuMTQzLDAsMCwxLC4xNTEsMS4xMWMtLjAyOS4xOS0uMTExLjI5NC0uMjQ3LjMxMnMtLjI3Mi0uMDU5LS40LS4yMzFhMi44NTUsMi44NTUsMCwwLDEtLjM4MS0uOTUsMi44NzEsMi44NzEsMCwwLDEtLjEzMi0xLjAzOUEuNDM3LjQzNywwLDAsMSwyNC42MzYsMTMuMTE3Wm0uMTA3LjRhLjEyNC4xMjQsMCwwLDAtLjA2Ny4wODguNTg0LjU4NCwwLDAsMCwwLC4yMjEsNS4yMTgsNS4yMTgsMCwwLDAsLjEzOS42MzUsNS4xNTMsNS4xNTMsMCwwLDAsLjE4NC42LjY2LjY2LDAsMCwwLC4xMi4yMDguMTE4LjExOCwwLDAsMCwuMS4wNC4xLjEsMCwwLDAsLjA3MS0uMDcyLjUyOC41MjgsMCwwLDAsMC0uMjE2LDUuNDQyLDUuNDQyLDAsMCwwLS4xNDQtLjY1Myw1LjQ0Nyw1LjQ0NywwLDAsMC0uMTg5LS42MTkuNjEyLjYxMiwwLDAsMC0uMTE5LS4yMDVBLjA5My4wOTMsMCwwLDAsMjQuNzQzLDEzLjUyMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjYuNjM4LDE1LjQ4OGwtLjI2OS4wMzgtLjU0LTIuMDM5QTEuMTUxLDEuMTUxLDAsMCwxLDI1LjYsMTRsLS4xMjYtLjQ3NWEuOTkuOTksMCwwLDAsLjE0OC0uMzM3LDEuNDM2LDEuNDM2LDAsMCwwLC4wMzktLjUxNWwuMi0uMDg4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yNi42NjYsMTIuMjM2Yy4xMjctLjA1NS4yNTUuMDEyLjM4NS4yYTQuNTg0LDQuNTg0LDAsMCwxLC40NzgsMS4yNjgsNC42Miw0LjYyLDAsMCwxLC4yMTMsMS4zNDNjLS4wMTguMjI5LS4xLjM1Mi0uMjMyLjM3cy0uMjc4LS4wODEtLjQyMS0uM2E0LjI4NCw0LjI4NCwwLDAsMS0uNDQzLTEuMTc5LDQuMjgzLDQuMjgzLDAsMCwxLS4xOTQtMS4yNzJDMjYuNDY4LDEyLjQzOCwyNi41MzksMTIuMjkxLDI2LjY2NiwxMi4yMzZabS4xMzEuNXEtLjA0Ni4wMTgtLjA2NC4xYS44MjkuODI5LDAsMCwwLC4wMDkuMjY2LDcuODU2LDcuODU2LDAsMCwwLC4xNzguNzc5cS4xNDMuNTQxLjIyMS43MzhhLjk0Ny45NDcsMCwwLDAsLjEzNC4yNTguMTE5LjExOSwwLDAsMCwuMS4wNTJxLjA0OC0uMDA5LjA2OC0uMDg1YS43NjIuNzYyLDAsMCwwLS4wMDgtLjI2Miw4LjExNyw4LjExNywwLDAsMC0uMTgyLS44cS0uMTQ4LS41NTctLjIyNy0uNzU3YS44OTIuODkyLDAsMCwwLS4xMzMtLjI1NlEyNi44NDMsMTIuNzE0LDI2LjgsMTIuNzMyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yNy42ODEsMTEuOGMuMTI3LS4wNTUuMjU3LjAyMy4zOTMuMjM0YTUuNDMxLDUuNDMxLDAsMCwxLC41MDksMS4zODUsNS40NjcsNS40NjcsMCwwLDEsLjI0NCwxLjQ2Yy0uMDEzLjI0OS0uMDg4LjM4MS0uMjI0LjRzLS4yODEtLjA5Mi0uNDMtLjMyOGE1LjExLDUuMTEsMCwwLDEtLjQ3My0xLjI5NCw1LjEsNS4xLDAsMCwxLS4yMjUtMS4zODhDMjcuNDg2LDEyLjAwOCwyNy41NTUsMTEuODUxLDI3LjY4MSwxMS44Wm0uMTQ0LjU0MnEtLjA0Ni4wMTgtLjA2Mi4xMDZhLjk3Ljk3LDAsMCwwLC4wMTUuMjg5cS4wNC4yNTkuMi44NTF0LjI0LjgwN2ExLjExMiwxLjExMiwwLDAsMCwuMTQuMjg0cS4wNTcuMDY3LjEwNi4wNTl0LjA2Ni0uMDkxYS45LjksMCwwLDAtLjAxNC0uMjg0cS0uMDQtLjI2LS4yLS44Njd0LS4yNDUtLjgyN2ExLjA1MywxLjA1MywwLDAsMC0uMTQtLjI4MVEyNy44NzEsMTIuMzIsMjcuODI1LDEyLjMzOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjkuOTE1LDE1LjAzNGwtLjI3LjAzNy0uNzA2LTIuNjYxYTEuNDc4LDEuNDc4LDAsMCwxLS4xOTIuNjM2bC0uMTY2LS42MjVBMS4yNDgsMS4yNDgsMCwwLDAsMjguNzA4LDEyYTIuMjE0LDIuMjE0LDAsMCwwLDAtLjY1M2wuMi0uMDg4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yOS43MTIsMTAuOTIxYy4xMjctLjA1NC4yNjMuMDQzLjQwOS4yOTRhNy4zNDUsNy4zNDUsMCwwLDEsLjU3MiwxLjYxOUE3LjM4Miw3LjM4MiwwLDAsMSwzMSwxNC41MjdjMCwuMjg4LS4wNzIuNDQtLjIwOS40NThzLS4yODYtLjExNC0uNDQ3LS4zOTNhNi45ODQsNi45ODQsMCwwLDEtLjUzNS0xLjUyNCw2Ljk0NCw2Ljk0NCwwLDAsMS0uMjg3LTEuNjIxQzI5LjUyMywxMS4xNTEsMjkuNTg2LDEwLjk3NSwyOS43MTIsMTAuOTIxWm0uMTY4LjYzM3EtLjA0Ni4wMTgtLjA1OS4xMTlhMS4yODcsMS4yODcsMCwwLDAsLjAyNy4zMzRxLjA1MS4zLjIzNS45OTR0LjI3Ny45NDZhMS40ODQsMS40ODQsMCwwLDAsLjE1NC4zMzRxLjA2LjA4LjEwOS4wNzF0LjA2My0uMWExLjIsMS4yLDAsMCwwLS4wMjYtLjMzcS0uMDUxLS4zLS4yMzktMS4wMTF0LS4yODItLjk2NWExLjQyLDEuNDIsMCwwLDAtLjE1My0uMzMyUTI5LjkyNiwxMS41MzYsMjkuODgsMTEuNTUzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMS4xNjcsMTYuMzYyYS40MjIuNDIyLDAsMCwxLC4zMTguMTg1LDEuMDA1LDEuMDA1LDAsMCwxLS4yNzcsMS4wMy40Mi40MiwwLDAsMS0uMzY2LDAsLjU5LjU5LDAsMCwxLS4zMTEtLjI2MS44MDguODA4LDAsMCwxLC4yNTQtLjg5M0EuNTYxLjU2MSwwLDAsMSwyMS4xNjcsMTYuMzYyWm0tLjA1MS4xODlhLjE3NS4xNzUsMCwwLDAtLjE5Mi4wODcsMS40ODcsMS40ODcsMCwwLDAtLjE1NS41NjcuMjE2LjIxNiwwLDAsMCwuMDM5LjEyNC4xOTEuMTkxLDAsMCwwLC4wODQuMDU4LjE0NS4xNDUsMCwwLDAsLjE4OC0uMDY5LDEuNjY2LDEuNjY2LDAsMCwwLC4xNjQtLjYuMTg5LjE4OSwwLDAsMC0uMDQtLjEyMUEuMTYzLjE2MywwLDAsMCwyMS4xMTcsMTYuNTUxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMi4zNzYsMTYuNTQ4YS4zODIuMzgyLDAsMCwxLC4zMTEuMjEyLDEuMDI0LDEuMDI0LDAsMCwxLS4wMTkuNjYsMS4wMjIsMS4wMjIsMCwwLDEtLjMxNS41ODEuMzguMzgsMCwwLDEtLjM3My4wMjUuNTMzLjUzMywwLDAsMS0uMy0uMjksMS4xODksMS4xODksMCwwLDEsLjMwOS0xLjFBLjUuNSwwLDAsMSwyMi4zNzYsMTYuNTQ4Wm0tLjA2Mi4yM2EuMTY3LjE2NywwLDAsMC0uMS4wMTMuMjM1LjIzNSwwLDAsMC0uMS4xLDIuMjE5LDIuMjE5LDAsMCwwLS4xODkuNjk0LjI2OS4yNjksMCwwLDAsLjAzMy4xNDcuMTY3LjE2NywwLDAsMCwuMDgzLjA2NC4xNDMuMTQzLDAsMCwwLC4xLDAsLjIwNi4yMDYsMCwwLDAsLjA5NC0uMSwyLjQzNiwyLjQzNiwwLDAsMCwuMi0uNzI3LjI0LjI0LDAsMCwwLS4wMzQtLjE0NEEuMTQxLjE0MSwwLDAsMCwyMi4zMTQsMTYuNzc4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMy4zNywxOC41NDFsLS4yODEtLjExLjMyOC0xLjIyNWExLDEsMCwwLDEtLjQ0Mi4xNTJsLjA3NS0uMjgxYS44ODEuODgxLDAsMCwwLC4yOTItLjEuNjguNjgsMCwwLDAsLjI1OS0uMjM4bC4yNDIuMDM3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yNC43OTMsMTYuOTE5YS4zNDguMzQ4LDAsMCwxLC4zLjI2NiwxLjc1MSwxLjc1MSwwLDAsMS0uMDc1Ljg3LDEuNzQ5LDEuNzQ5LDAsMCwxLS4zNzEuNzkxLjM0NS4zNDUsMCwwLDEtLjM4OC4wNzguNDg4LjQ4OCwwLDAsMS0uMjg4LS4zNDgsMS41ODcsMS41ODcsMCwwLDEsLjA2Ny0uNzksMS41NzcsMS41NzcsMCwwLDEsLjM1NC0uNzI3QS40NTcuNDU3LDAsMCwxLDI0Ljc5MywxNi45MTlabS0uMDg0LjMxMmEuMTQzLjE0MywwLDAsMC0uMTA3LjAyNS4zNTMuMzUzLDAsMCwwLS4xMDYuMTQxLDQuMTI2LDQuMTI2LDAsMCwwLS4yNTcuOTQ4LjQwOC40MDgsMCwwLDAsLjAyMS4xOTIuMTQzLjE0MywwLDAsMCwuMDguMDc1LjEyLjEyLDAsMCwwLC4xLS4wMTEuMzE4LjMxOCwwLDAsMCwuMTA1LS4xMzcsNC40MTgsNC40MTgsMCwwLDAsLjI2Ni0uOTgxLjM3NC4zNzQsMCwwLDAtLjAyMi0uMTg5QS4xMTkuMTE5LDAsMCwwLDI0LjcxLDE3LjIzMVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjUuNjQ5LDE5LjQzbC0uMjgxLS4xMS40MjgtMS42YTEuMDMzLDEuMDMzLDAsMCwxLS40NjIuMjI3bC4xLS4zNzFhLjkuOSwwLDAsMCwuMy0uMTUxLjkzLjkzLDAsMCwwLC4yODEtLjMyMWwuMjQyLjAzN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjcuMjExLDE3LjI5MWEuMzQ0LjM0NCwwLDAsMSwuMjgyLjMxOSwyLjY5MiwyLjY5MiwwLDAsMS0uMTMxLDEuMDgsMi42OSwyLjY5LDAsMCwxLS40MjcsMSwuMzQuMzQsMCwwLDEtLjQuMTMuNDg3LjQ4NywwLDAsMS0uMjczLS40MDUsMi40OTQsMi40OTQsMCwwLDEsLjEyMi0xLDIuNDcsMi40NywwLDAsMSwuNDEtLjkzN0EuNDUxLjQ1MSwwLDAsMSwyNy4yMTEsMTcuMjkxWm0tLjEwNi4zOTRhLjEzMy4xMzMsMCwwLDAtLjExLjAzNi41MDkuNTA5LDAsMCwwLS4xMTcuMTgyLDYuNjIyLDYuNjIyLDAsMCwwLS4zMjUsMS4yLjU5MS41OTEsMCwwLDAsLjAwOS4yMzcuMTMzLjEzMywwLDAsMCwuMDc3LjA4Ni4xMS4xMSwwLDAsMCwuMTA3LS4wMjMuNDY1LjQ2NSwwLDAsMCwuMTE2LS4xNzgsNC42MzksNC42MzksMCwwLDAsLjItLjYxOSw0LjY1OCw0LjY1OCwwLDAsMCwuMTM2LS42MTUuNTUyLjU1MiwwLDAsMC0uMDEtLjIzNUEuMTEuMTEsMCwwLDAsMjcuMTA1LDE3LjY4NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjcuOTI3LDIwLjMybC0uMjgxLS4xMS41MjgtMS45NzFhMS4xMzQsMS4xMzQsMCwwLDEtLjQ4Mi4zbC4xMjMtLjQ2YS45NzIuOTcyLDAsMCwwLC4zMTctLjIsMS4yNDgsMS4yNDgsMCwwLDAsLjMtLjRsLjI0Mi4wMzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBmZjgwXFxcIi8+PHBhdGggZD1cXFwiTTI4Ljk1MywyMC43MjFsLS4yODEtLjExLjU3My0yLjEzOWExLjIsMS4yLDAsMCwxLS40OTEuMzM2bC4xMzQtLjVhMS4wMiwxLjAyLDAsMCwwLC4zMjMtLjIyLDEuNDEzLDEuNDEzLDAsMCwwLC4zMTQtLjQ0bC4yNDIuMDM3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0zMC43MTcsMTcuODNjLjE1MS4wMjMuMjM4LjE1NS4yNjIuNGE0LjQzNiw0LjQzNiwwLDAsMS0uMjEzLDEuMzg1LDQuNDM0LDQuNDM0LDAsMCwxLS41MDksMS4zMDdjLS4xNC4xOTUtLjI4LjI2My0uNDIyLjIwN3MtLjIyNi0uMjItLjI1LS40ODlhNC4xOTQsNC4xOTQsMCwwLDEsLjItMS4zLDQuMTQzLDQuMTQzLDAsMCwxLC40OTItMS4yNDFDMzAuNDIsMTcuOSwzMC41NjYsMTcuODA3LDMwLjcxNywxNy44M1ptLS4xMzcuNTEzYS4xMzIuMTMyLDAsMCwwLS4xMTUuMDUzLjguOCwwLDAsMC0uMTMzLjI0MSw3LjU4Nyw3LjU4NywwLDAsMC0uMjQ0Ljc5MSw3LjUzOSw3LjUzOSwwLDAsMC0uMTguNzc5LjkzLjkzLDAsMCwwLS4wMDkuMy4xMzEuMTMxLDAsMCwwLC4wNzMuMS4xMDguMTA4LDAsMCwwLC4xMTEtLjAzOS43NDIuNzQyLDAsMCwwLC4xMzItLjIzNyw3LjgsNy44LDAsMCwwLC4yNDgtLjgwNiw3LjgzNSw3LjgzNSwwLDAsMCwuMTg1LS44Ljg4NC44ODQsMCwwLDAsLjAwOC0uM1EzMC42MzMsMTguMzUzLDMwLjU4LDE4LjM0M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz5cIixcblx0XCJFZGl0b3JDb25maWdcIjogXCI8cGF0aCBkPVxcXCJNOC43MDksMTguMzUxYTEuMjY3LDEuMjY3LDAsMCwwLC41MzItMS4zNzlDOC42OTIsMTcuMjA3LDguNzE4LDE3Ljc0OSw4LjcwOSwxOC4zNTFaXFxcIiBzdHlsZT1cXFwiZmlsbDojZTNlM2Y4XFxcIi8+PHBhdGggZD1cXFwiTTE0LjkyNCwxOS44NTJhLjg3MS44NzEsMCwwLDAsLjYyLTEuMTM1QTEuNDMsMS40MywwLDAsMCwxNC45MjQsMTkuODUyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2UzZTNmOFxcXCIvPjxwYXRoIGQ9XFxcIk0yLjcxMywyNy4wNzlhMS41MzgsMS41MzgsMCwwLDAsLjUyNCwxLjM1M2MxLjQxNC43OTQsNi4zNzIuMTc1LDguMDU2LS4yYTE0Ljk5NCwxNC45OTQsMCwwLDAsMi40MjYtMS4yMTMsMjIuNjQzLDIyLjY0MywwLDAsMCw0LjcxMy0yLjU1N2MxLjA4Mi0uNzk0LDIuOC0zLjAyOSwyLjk4NS00LjM2NGwtMS40NzUtLjMzMmMtLjAzNSwxLjUtLjM3NSwxLjg0Mi0xLjcxMSwyLjE5MWExMC42NjIsMTAuNjYyLDAsMCwxLTMuNTcuMTQsMy4zNjIsMy4zNjIsMCwwLDEtMi4zMTMtMS41NjJjLTEuMDY1LTEuNDE0LjIzNi0yLjQtMS40NDktMi41LTEuNzcyLDIuMTczLTQuOS42MTEtNi4yNjcuMzkzYTMwLjA2NiwzMC4wNjYsMCwwLDAtMS45MzgsNy42LDIuNzQ4LDIuNzQ4LDAsMCwxLDIuMTM4LjMyM2MyLjY4OCwxLjAzOS4zNCwxLjk1NS0uNzMzLDEuNjg1QzMuMzY4LDI3Ljg2NCwzLjE0MSwyNy4zODQsMi43MTMsMjcuMDc5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZkZmRmZFxcXCIvPjxwYXRoIGQ9XFxcIk02LjIzMSwxNC41MzdhMTEuNTM5LDExLjUzOSwwLDAsMSwyLjk4NSwxLjEyNmMxLjUxLjc1MSwxLjc4MS42NDYsMS45MiwxLjY5My4wMTcuMTkyLS4wMTcuMy41MzIuNDcxLjkyNS4yODgtLjUzMi0uMjI3LDEuOTQ2LS4yMThBMTYuNjQsMTYuNjQsMCwwLDEsMTkuNTU5LDE4LjljLjQ1NC4yODguMzY3LjY1NSwxLjkuNjExYTE4Ljc2NywxOC43NjcsMCwwLDAtMS4yLTYuMTYyYy0uODY0LTIuMDA3LTIuMDA3LTIuMzEzLTQuMzM4LTMuMDY0LTEuMzYyLS40MzYtNS4zNTktLjkxNi02LjYtLjE0OC0xLjE2MS43MjQtMS4zNzksMS41ODktMi40NjEsMy4xMDdBNS4zNjYsNS4zNjYsMCwwLDAsNi4yMzEsMTQuNTM3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZkZmRmZFxcXCIvPjxwYXRoIGQ9XFxcIk0xNS44NCwxOC4yNDZjLjg3My4zNTgtLjA0NCwyLjY3MS0xLjI1NywyLjExMi0uMzkzLTEuMTA4LjU0MS0xLjczNy43OTQtMi4yMzRhOC41MSw4LjUxLDAsMCwwLTIuNDYxLS4xNDhjLS41NzYuMjE4LS43MDcsMS40NDktLjQxLDIuMDI1LDEuNCwyLjc0MSw3LjU2NywyLjE1Niw2LjkxMy4wMjYtLjI2Mi0uODY0LS41MDYtMS0xLjM4OC0xLjNBNi44ODUsNi44ODUsMCwwLDAsMTUuODQsMTguMjQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZkZmRmZFxcXCIvPjxwYXRoIGQ9XFxcIk00Ljg2OSwxNy45NDFjLjcuNjcyLDIuMjc4Ljc3NywzLjMuODI5QzguMywxNy40MTcsOC40MTMsMTYuNCw5LjUsMTYuNDgzYTEuNiwxLjYsMCwwLDEtLjMwNSwyLjEzLDEuMzg2LDEuMzg2LDAsMCwwLDEuMzYyLTEuNzYzLDE0LjU0MiwxNC41NDIsMCwwLDAtNC40Ni0xLjg5NEE5LjUwNiw5LjUwNiwwLDAsMCw0Ljg2OSwxNy45NDFaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmRmZGZkXFxcIi8+PHBhdGggZD1cXFwiTTMuMjI4LDI2LjU4MWMuNTc2LS4wNTIsMi4wNzcuMzg0LDIuMi44NzNDNC40OTQsMjcuNTY4LDMuMzA3LDI3LjQ4LDMuMjI4LDI2LjU4MVptLS41MTUuNWMuNDI4LjMwNS42NTUuNzg2LDEuMzg4Ljk2LDEuMDc0LjI3MSwzLjQyMS0uNjQ2LjczMy0xLjY4NUEyLjc0OCwyLjc0OCwwLDAsMCwyLjcsMjYuMDMyYTMwLjA2NiwzMC4wNjYsMCwwLDEsMS45MzgtNy42YzEuMzcuMjE4LDQuNDk1LDEuNzgxLDYuMjY3LS4zOTMsMS42ODUuMS4zODQsMS4wODIsMS40NDksMi41QTMuMzYyLDMuMzYyLDAsMCwwLDE0LjY2MiwyMi4xYTEwLjY2MiwxMC42NjIsMCwwLDAsMy41Ny0uMTRjMS4zMzUtLjM0OSwxLjY3Ni0uNjksMS43MTEtMi4xOTFsMS40NzUuMzMyYy0uMTgzLDEuMzM1LTEuOSwzLjU3LTIuOTg1LDQuMzY0YTIyLjY0MywyMi42NDMsMCwwLDEtNC43MTMsMi41NTcsMTQuOTk0LDE0Ljk5NCwwLDAsMS0yLjQyNiwxLjIxM2MtMS42ODUuMzc1LTYuNjQyLDEtOC4wNTYuMkExLjUzOCwxLjUzOCwwLDAsMSwyLjcxMywyNy4wNzlabTEyLjIxMS03LjIyN2ExLjQzLDEuNDMsMCwwLDEsLjYyLTEuMTM1QS44NzEuODcxLDAsMCwxLDE0LjkyNCwxOS44NTJabS45MTYtMS42MDZhNi44ODUsNi44ODUsMCwwLDEsMi4xOTEuNDhjLjg4Mi4zLDEuMTI2LjQzNiwxLjM4OCwxLjMuNjU1LDIuMTMtNS41MTYsMi43MTQtNi45MTMtLjAyNi0uMy0uNTc2LS4xNjYtMS44MDcuNDEtMi4wMjVhOC41MSw4LjUxLDAsMCwxLDIuNDYxLjE0OGMtLjI1My41LTEuMTg3LDEuMTI2LS43OTQsMi4yMzRDMTUuOCwyMC45MTcsMTYuNzEzLDE4LjYsMTUuODQsMTguMjQ2Wm0tNy4xMzEuMWMuMDA5LS42LS4wMTctMS4xNDMuNTMyLTEuMzc5QTEuMjY3LDEuMjY3LDAsMCwxLDguNzA5LDE4LjM1MVptLTMuODQtLjQxYTkuNTA2LDkuNTA2LDAsMCwxLDEuMjIyLTIuOTg1LDE0LjU0MiwxNC41NDIsMCwwLDEsNC40NiwxLjg5NEExLjM4NiwxLjM4NiwwLDAsMSw5LjE5LDE4LjYxM2ExLjYsMS42LDAsMCwwLC4zMDUtMi4xM2MtMS4wODItLjA3OS0xLjIuOTM0LTEuMzI3LDIuMjg3QzcuMTQ3LDE4LjcxNyw1LjU2NywxOC42MTMsNC44NjksMTcuOTQxWk00LDE3LjI0MmMtLjMyMy0uODktLjMyMy0yLjI3OCwxLjA0Ny0yLjM5MmwtLjcsMS45NDZDNC4xNjIsMTcuMjE2LDQuMTYyLDE3LjEyLDQsMTcuMjQyWm0yLjIzNC0yLjcwNmE1LjM2Niw1LjM2NiwwLDAsMSwuNjI4LTEuMjkyYzEuMDgyLTEuNTE5LDEuMy0yLjM4MywyLjQ2MS0zLjEwNywxLjIzOS0uNzY4LDUuMjM3LS4yODgsNi42LjE0OCwyLjMzLjc1MSwzLjQ3NCwxLjA1Niw0LjMzOCwzLjA2NGExOC43NjcsMTguNzY3LDAsMCwxLDEuMiw2LjE2MmMtMS41MzYuMDQ0LTEuNDQ5LS4zMjMtMS45LS42MTFhMTYuNjQsMTYuNjQsMCwwLDAtNS45NDQtMS4yOTJjLTIuNDc5LS4wMDktMS4wMjEuNTA2LTEuOTQ2LjIxOC0uNTUtLjE3NS0uNTE1LS4yNzktLjUzMi0uNDcxLS4xNC0xLjA0Ny0uNDEtLjk0My0xLjkyLTEuNjkzQTExLjUzOSwxMS41MzksMCwwLDAsNi4yMzEsMTQuNTM3Wm0xNS40NDktLjQyOGMtLjE2Ni0uNTUuMTQtLjUxNS42NzItLjg5YTkuMDIxLDkuMDIxLDAsMCwxLC45MjUtLjY1NWMxLjQwNS0uNzg2LDQuMDI0LS45MTYsNS4xNDEuMDE3QTIuNDc5LDIuNDc5LDAsMCwxLDI5LjUsMTQuNjVhNS44MzgsNS44MzgsMCwwLDEtMi42MTgsMy44MzIsNS4yMTMsNS4yMTMsMCwwLDEtNC43ODMsMS4yYy0uMTU3LS4zODQtLjAzNS0yLjgxOS0uMjE4LTMuNzE4LS4xNjYtLjgtLjA3OS0uODkuMzg0LTEuMzcsMS4zNjItMS40MTQsNC4zMTItMi40NDQsNS45ODgtMS4yMzEuNzA3LjUyNC41MDYuNzI0Ljg3MywxLjEyNi40NTQtLjQ4OS0uMzkzLTIuMTMtMy41MTctMi4wMjVDMjMuNDg2LDEyLjUyOSwyMi41NywxNC4xODcsMjEuNjgsMTQuMTA5Wk04Ljk3MSw5LjE0M2E4LjA5NCw4LjA5NCwwLDAsMSwyLjI3OC00LjZDMTIuNiwzLjUsMTQuMDE2LDIuNTA5LDE2LjA5NCwzLjY4N2MuNTE1LjI4OC40ODkuNDM2LjU0MSwxLjE1MmEzLjMxMiwzLjMxMiwwLDAsMS0uMTkyLDEuNWMtMS4zNzksNC40NTEtMi41MzEsMS44OTQtNi45NDgsMi45NWE2LjM3NCw2LjM3NCwwLDAsMSwyLjEyMS0zLjQxM2MxLjItMS4xNjEsMi4wNi0xLjkxMSwzLjg1OC0xLjY2N2ExLjg0MiwxLjg0MiwwLDAsMS0uMDUyLDIuMzIyYy0uOCwxLjI5Mi0xLDEuMjEzLS44ODIsMi4wOTUuNjI4LS4xNTcuODItLjc2OCwxLjEwOC0xLjM3OSwxLjc1NC0zLjY2Ni0uNzk0LTQuMTExLTIuMzU3LTMuNDM5QTEwLjM3MiwxMC4zNzIsMCwwLDAsOS43NjYsNy41NTRjLS4xMjIuMjQ0LS4yNTMuNTU5LS4zNjcuODI5Wm02LjkxMy4xODNDMTYuMDY3LDguMjM1LDE3LjE1LDcuOTY0LDE3LjE1LDQuNmMwLTEuNDQ5LTEuNzgxLTIuNzQ5LTQuMTExLTEuNzgxLTIsLjgyLTIuMywxLjQ0OS0zLjM2OSwzLjA1NS0xLDEuNTE5LS45NjksMy4xODYtMS44MzMsNC41OTEtLjI1My40LS40OC41NDEtLjc1OS45NDMtLjIuMy0uMzQ5LjY3Mi0uNTUsMS4wMjFBMTIuOTQsMTIuOTQsMCwwLDAsNS4zNjcsMTQuNGMtMS4wNDcuMDI2LTEuOTI5LjA0NC0yLjAzNCwxLjEyNi0uMTQsMS40ODQuNTU5LDEuODUuNTU5LDIuNDA5LS4wMDkuNi0yLjQ1Myw2LjY3Ny0xLjc3MiwxMC4zLjE5MiwxLC44NDcsMSwxLjg5NCwxLjEyNmExNy45MywxNy45MywwLDAsMCw4LjA1Ni0uNzA3bDQuMS0xLjk2NGExOC44NSwxOC44NSwwLDAsMCwzLjU2MS0yLjUsMTIuMzgzLDEyLjM4MywwLDAsMCwxLjMwOS0xLjcxOSwzLjIxMywzLjIxMywwLDAsMCwuOC0yLjIwOCw4LjQ3Myw4LjQ3MywwLDAsMSwyLjk4NSwxYy0uMDYxLjYtLjM1OC4zMTQtLjM1OC44NTVhMS4zNTUsMS4zNTUsMCwwLDAsMS4wNDctLjg5Yy0uMzU4LS41MjQtLjczMy0uNDM2LTEuMjQ4LS44NTVhOC4yMTIsOC4yMTIsMCwwLDEsMS43MTktLjcwN2MxLjIyMi0uNTA2LDMuMzA4LTIuMDQyLDMuODIzLTMuNDM5YTQuNDQ5LDQuNDQ5LDAsMCwwLS41NTktMy43MzYsNS40NDQsNS40NDQsMCwwLDAtMy42NDgtMS4xNjFjLTEuNTgsMC0zLjIxMiwxLjEzNS00LjQ4NiwxLjYyMy0uNDg5LS40MjgtLjUyNC0uOTE2LS44ODItMS4zODhBMTIuMjgxLDEyLjI4MSwwLDAsMCwxNS44ODQsOS4zMjZaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDIwMjAyXFxcIi8+PHBhdGggZD1cXFwiTTIxLjY4LDE0LjEwOWMuODkuMDc5LDEuODA3LTEuNTgsMy45MjgtMS42NSwzLjEyNS0uMSwzLjk3MSwxLjUzNiwzLjUxNywyLjAyNS0uMzY3LS40LS4xNjYtLjYtLjg3My0xLjEyNi0xLjY3Ni0xLjIxMy00LjYyNi0uMTgzLTUuOTg4LDEuMjMxLS40NjMuNDgtLjU1LjU2Ny0uMzg0LDEuMzcuMTgzLjkuMDYxLDMuMzM0LjIxOCwzLjcxOGE1LjIxMyw1LjIxMywwLDAsMCw0Ljc4My0xLjJBNS44MzgsNS44MzgsMCwwLDAsMjkuNSwxNC42NWEyLjQ3OSwyLjQ3OSwwLDAsMC0xLjA4Mi0yLjA2OWMtMS4xMTctLjkzNC0zLjczNi0uOC01LjE0MS0uMDE3YTkuMDIxLDkuMDIxLDAsMCwwLS45MjUuNjU1QzIxLjgxOSwxMy41OTQsMjEuNTE0LDEzLjU1OSwyMS42OCwxNC4xMDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmRmMmYyXFxcIi8+PHBhdGggZD1cXFwiTTguOTcxLDkuMTQzLDkuNCw4LjM4M2MuMTEzLS4yNzEuMjQ0LS41ODUuMzY3LS44MjlBMTAuMzcyLDEwLjM3MiwwLDAsMSwxMy4yOTIsMy44MWMxLjU2Mi0uNjcyLDQuMTExLS4yMjcsMi4zNTcsMy40MzktLjI4OC42MTEtLjQ4LDEuMjIyLTEuMTA4LDEuMzc5LS4xMjItLjg4Mi4wNzktLjguODgyLTIuMDk1YTEuODQyLDEuODQyLDAsMCwwLC4wNTItMi4zMjJjLTEuOC0uMjQ0LTIuNjYyLjUwNi0zLjg1OCwxLjY2N0E2LjM3NCw2LjM3NCwwLDAsMCw5LjUsOS4yOTFjNC40MTYtMS4wNTYsNS41NjksMS41LDYuOTQ4LTIuOTVhMy4zMTIsMy4zMTIsMCwwLDAsLjE5Mi0xLjVjLS4wNTItLjcxNi0uMDI2LS44NjQtLjU0MS0xLjE1Mi0yLjA3Ny0xLjE3OC0zLjQ5MS0uMTkyLTQuODQ0Ljg1NUE4LjA5NCw4LjA5NCwwLDAsMCw4Ljk3MSw5LjE0M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZWYzZjNcXFwiLz48cGF0aCBkPVxcXCJNNCwxNy4yNDJjLjE2Ni0uMTIyLjE2Ni0uMDI2LjM0OS0uNDQ1bC43LTEuOTQ2QzMuNjczLDE0Ljk2NCwzLjY3MywxNi4zNTIsNCwxNy4yNDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWZlZmVmXFxcIi8+PHBhdGggZD1cXFwiTTUuNDI4LDI3LjQ1NGMtLjEyMi0uNDg5LTEuNjIzLS45MjUtMi4yLS44NzNDMy4zMDcsMjcuNDgsNC40OTQsMjcuNTY4LDUuNDI4LDI3LjQ1NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWYxZjFcXFwiLz5cIixcblx0XCJFSlNcIjogXCI8cGF0aCBkPVxcXCJNMiwxNy42NzJWMTQuMzI4bDExLjg2LTYuMlYxMS4yTDUuMSwxNS45MzlsOC43NjIsNC44MzV2My4xWm0yNy44MTQtOC44OEwxOS40NjUsMjMuMjI5SDE1LjkxMkwyNi4yODEsOC43OTFaTTI2Ljk0NywyMS41YS43OTQuNzk0LDAsMCwwLC42MTktLjI3OCwxLjA2MSwxLjA2MSwwLDAsMCwuMjQ4LS43MzIsMS4xNDEsMS4xNDEsMCwwLDAtLjI0OC0uNzUzLjc2OC43NjgsMCwwLDAtMS4yMTcsMCwxLjE0MSwxLjE0MSwwLDAsMC0uMjQ4Ljc1MywxLjA5LDEuMDksMCwwLDAsLjIzNy43MzJBLjc2My43NjMsMCwwLDAsMjYuOTQ3LDIxLjVabTIuMTg2LDEuMDQyYTMuMjM3LDMuMjM3LDAsMCwxLTQuMzUyLS4wMSwyLjg2NCwyLjg2NCwwLDAsMSwwLTQuMSwzLjIyMywzLjIyMywwLDAsMSw0LjM1MiwwQTIuNzczLDIuNzczLDAsMCwxLDMwLDIwLjQ4NiwyLjc0LDIuNzQsMCwwLDEsMjkuMTM0LDIyLjUzOFpNMTguODIxLDEzLjA2MWEuNzk0Ljc5NCwwLDAsMCwuNjE5LS4yNzgsMS4wNjEsMS4wNjEsMCwwLDAsLjI0OC0uNzMyLDEuMTQxLDEuMTQxLDAsMCwwLS4yNDgtLjc1My43NjkuNzY5LDAsMCwwLTEuMjE3LDAsMS4xNDEsMS4xNDEsMCwwLDAtLjI0OC43NTMsMS4wOSwxLjA5LDAsMCwwLC4yMzcuNzMyQS43NjMuNzYzLDAsMCwwLDE4LjgyMSwxMy4wNjFaTTIxLjAwNywxNC4xYTMuMjM3LDMuMjM3LDAsMCwxLTQuMzUyLS4wMSwyLjg2NCwyLjg2NCwwLDAsMSwwLTQuMSwzLjIyMywzLjIyMywwLDAsMSw0LjM1MiwwLDIuNzczLDIuNzczLDAsMCwxLC44NjYsMi4wNjNBMi43NCwyLjc0LDAsMCwxLDIxLjAwNywxNC4xWlxcXCIgc3R5bGU9XFxcImZpbGw6IzkwYTkzYVxcXCIvPlwiLFxuXHRcIkVsaXhpclwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjE3LjI0OVxcXCIgeTE9XFxcIi0zMzUuNTk3XFxcIiB4Mj1cXFwiMTQuOTczXFxcIiB5Mj1cXFwiLTMwOS45OTRcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTEsIDAsIC0zMDYpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMDFcXFwiIHN0b3AtY29sb3I9XFxcIiNmN2Y2ZjhcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMC4wNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4wOVxcXCIgc3RvcC1jb2xvcj1cXFwiI2FhOWNiM1xcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjM5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjJcXFwiIHN0b3AtY29sb3I9XFxcIiM2ZjU2N2VcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMC42NlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zMlxcXCIgc3RvcC1jb2xvcj1cXFwiIzQ1MjQ1OVxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjg2XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjVcXFwiIHN0b3AtY29sb3I9XFxcIiMyZDA4NDNcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMC45N1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzI2MDAzZFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfZWxpeGlyPC90aXRsZT48cGF0aCBkPVxcXCJNMTcuOCw4LjU5MWMyLjA3OSw0LjU4NCw3LjY0LDYuNSw3LjE0MSwxMi40NzQtLjU4Miw3LjAxNy01LjU1MSw4Ljc4NC04LjMxNiw4LjkwOWE4LjgxNSw4LjgxNSwwLDAsMS05LjQtNy40ODVDNS42MTgsMTUuMDQ2LDEyLjY1NSwzLjYzMiwxNi43MDksMkExNS4wODMsMTUuMDgzLDAsMCwwLDE3LjgsOC41OTFabS0uMTY2LDE4Ljg1N2EuNDIzLjQyMywwLDAsMC0uMDU3LS4zMjdjLS41OTMtMS4xLTUuODEtMS42NDUtNi45MDctMS43NTJhOC4yNzIsOC4yNzIsMCwwLDAsMS42MzUsMS4zLDcuNzY2LDcuNzY2LDAsMCwwLDIuODE0LDEuMDQxQzE1LjkyMiwyNy44MzEsMTcuNDY3LDI3LjkzMywxNy42MzUsMjcuNDQ3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzdjNjQ4ZlxcXCIvPjxnIHN0eWxlPVxcXCJvcGFjaXR5OjAuMjVcXFwiPjxwYXRoIGQ9XFxcIk0xOC4yNDgsMTAuNjE4YzQuNDcsNC44MjMsNi40NDUsNC45NzksNi4yMzcsMTAuNDc4LS4yNDksNi40NzYtNC41NDMsOC4xOTEtNy4wNTgsOC40Mi00LjIuNTUxLTcuNDk1LTEuNTI4LTguMzU4LTUuNjg2QzcuMzEyLDE3LjA2MywxMi45NzgsNi4wMjMsMTYuNjM3LDQuMzZBMTUuMzIzLDE1LjMyMywwLDAsMCwxOC4yNTgsMTAuNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNjAwM2RcXFwiLz48L2c+PGcgc3R5bGU9XFxcIm9wYWNpdHk6MC43NVxcXCI+PHBhdGggZD1cXFwiTTE3LjM4NSw5LjkyMUMyMC4zNjksMTQsMjQuMzE5LDEzLjcsMjUsMTkuNjQxYy4wOTQsNi45MjMtMy42LDkuMjgzLTYuMjM3LDkuOTQ4LTQuNSwxLjI3OS04LjUxNC0uNjQ1LTEwLjA5NC01LTMuMDM1LTcsMi42NTEtMTguNTE0LDYuMzEtMjAuOTE1YTE1LjA4MywxNS4wODMsMCwwLDAsMi4zNyw2LjIzN1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48L2c+XCIsXG5cdFwiRWxtXCI6IFwiPHBhdGggZD1cXFwiTTE2LDE2Ljc2OCwyLjc2OCwzMEgyOS4yMzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojNWZiNGNiXFxcIi8+PHBhdGggZD1cXFwiTTI0LjEzLDIzLjM2MiwzMCwyOS4yMzJWMTcuNDkyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlYTQwMFxcXCIvPjxwYXRoIGQ9XFxcIk0xNS4yMzIsMTYsMiwyLjc2OFYyOS4yMzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojNTk2Mjc3XFxcIi8+PHBhdGggZD1cXFwiTTMwLDE0LjQ0OFYySDE3LjU1MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1ZmI0Y2JcXFwiLz48cGF0aCBkPVxcXCJNMjMuMzkyLDkuMzc2bDYuNTk0LDYuNTk0LTYuNjI0LDYuNjI0TDE2Ljc2OCwxNlpNMi43NjgsMiw4Ljg2Myw4LjFIMjIuMTExTDE2LjAxNiwyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhjZDYzNlxcXCIvPjxwYXRoIGQ9XFxcIk0xNiwxNS4yMzJsNi4wNTEtNi4wNTFIOS45NDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWVhNDAwXFxcIi8+XCIsXG5cdFwiRVJCXCI6IFwiPHBhdGggZD1cXFwiTTcuMjUsMjQuNzVoMTcuNUwxMi41LDEyLjUsNy4yNSwxNy43NVpNMiwzMEgzMFYySDE2TDIsMTZabTI1LjM3NS0yLjYyNUg0LjYyNXYtMTAuNWwxMi4yNS0xMi4yNWgxMC41WlxcXCIgc3R5bGU9XFxcImZpbGw6IzkyMWExZVxcXCIvPlwiLFxuXHRcIkVybGFuZ1wiOiBcIjxwYXRoIGQ9XFxcIk02LjM4OCwyMy44NjdhMTEuMDEyLDExLjAxMiwwLDAsMS0zLjQ0MS04LjIzNCwxMC43NjUsMTAuNzY1LDAsMCwxLDIuODY0LTcuNUgydjE1LjczWm0yMC4wNjYsMGExNi40NCwxNi40NCwwLDAsMCwyLjUzNy0zLjEzNmwtNC4yMTgtMS44NzNhOC4zMDYsOC4zMDYsMCwwLDEtNi42NDEsNC4xMmMtNC4zNTktLjAxNC02LjA3Mi0zLjMyOS02LjA2My03LjU4NEgyOC4zNmE2LjQ2NSw2LjQ2NSwwLDAsMCwwLS45MzUsOS4wNTcsOS4wNTcsMCwwLDAtMi4wMjktNi4zMjZIMzB2MTUuNzNIMjYuNDU2Wk0xMi4zMzIsMTEuNzQyYTMuNzIzLDMuNzIzLDAsMCwxLDMuOS0zLjIzLDMuMjksMy4yOSwwLDAsMSwzLjUzMiwzLjIzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2EyMDAzZVxcXCIvPlwiLFxuXHRcIkYjXCI6IFwiPHBhdGggZD1cXFwiTTIsMTYsMTUuMjg4LDIuNzEyVjkuMzU2TDguNjQ0LDE2bDYuNjQ0LDYuNjQ0djYuNjQ0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzM3OGJiYVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC41NDIsMTZsNC43NDYtNC43NDZ2OS40OTJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzc4YmJhXFxcIi8+PHBhdGggZD1cXFwiTTMwLDE2LDE2LjIzNywyLjcxMlY5LjM1NkwyMi44ODEsMTZsLTYuNjQ0LDYuNjQ0djYuNjQ0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzMwYjlkYlxcXCIvPlwiLFxuXHRcIkZpcmVzdG9yZSBzZWN1cml0eSBydWxlc1wiOiBcIjxwYXRoIGQ9XFxcIk01LjgsMjQuNmwuMTctLjIzN0wxMy45OSw5LjE0OWwuMDE3LS4xNjEtMy41MzUtNi42NGEuNjU2LjY1NiwwLDAsMC0xLjIyNy4yMDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZjMjRhXFxcIi8+PHBhdGggZD1cXFwiTTUuOSwyNC40MmwuMTI4LS4yNUwxMy45NjUsOS4xMTQsMTAuNDM5LDIuNDQ4YS42LjYsMCwwLDAtMS4xMzMuMjA2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYTcxMlxcXCIvPjxwYXRoIGQ9XFxcIk0xNi41ODQsMTQuMDFsMi42MzItMi43TDE2LjU4Myw2LjI4OWEuNjc4LjY3OCwwLDAsMC0xLjE5NSwwTDEzLjk4MSw4Ljk3MVY5LjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjRiZDYyXFxcIi8+PHBhdGggZD1cXFwiTTE2LjUzNywxMy45LDE5LjEsMTEuMjgsMTYuNTM3LDYuNGEuNTg5LjU4OSwwLDAsMC0xLjA3NC0uMDQ3TDE0LjA0OSw5LjA4MmwtLjA0Mi4xMzlaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZhNTBlXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI1LjgwMiAyNC42MDEgNS44NzkgMjQuNTIzIDYuMTU4IDI0LjQxIDE2LjQxOCAxNC4xODggMTYuNTQ4IDEzLjgzNCAxMy45ODkgOC45NTYgNS44MDIgMjQuNjAxXFxcIiBzdHlsZT1cXFwiZmlsbDojZjY4MjBjXFxcIi8+PHBhdGggZD1cXFwiTTE2LjkxMiwyOS43NTYsMjYuMiwyNC41NzcsMjMuNTQ2LDguMjQ2QS42MzUuNjM1LDAsMCwwLDIyLjQ3MSw3LjlMNS44LDI0LjZsOS4yMzMsNS4xNTVhMS45MjcsMS45MjcsMCwwLDAsMS44NzgsMFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZkZTA2OFxcXCIvPjxwYXRoIGQ9XFxcIk0yNi4xMTUsMjQuNTM0LDIzLjQ4Myw4LjMyNmEuNTU3LjU1NywwLDAsMC0uOTY3LS4zNTNMNS45LDI0LjU2OWw5LjEzMSw1LjFhMS45MTIsMS45MTIsMCwwLDAsMS44NjMsMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmY2NhM2ZcXFwiLz48cGF0aCBkPVxcXCJNMTYuOTEyLDI5LjZhMS45MjcsMS45MjcsMCwwLDEtMS44NzgsMEw1Ljg3NiwyNC41MjIsNS44LDI0LjZsOS4yMzMsNS4xNTVhMS45MjcsMS45MjcsMCwwLDAsMS44NzgsMEwyNi4yLDI0LjU3N2wtLjAyMy0uMTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWVhYjM3XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMy4yMDEgMTMgMTUuNDA1IDE2LjUzNCAxNS40MDUgMjcuNjAzIDIxLjYyNSAyNC43ODUgMjEuNjI1IDMxIDMxIDI2Ljc0MyAzMSAxNi41MzQgMjMuMjAxIDEzXFxcIiBzdHlsZT1cXFwiZmlsbDojMjUyNTI1XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMy4yMDEgMTQuNzMgMTYuOTg1IDE3LjU0OSAxNi45ODUgMjAuMzI3IDIzLjIwMSAxNy41MDcgMjkuNDIxIDIwLjMyNyAyOS40MjEgMTcuNTQ5IDIzLjIwMSAxNC43M1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjMuMjAxIDE5LjU2NCAxNi45ODUgMjIuMzgxIDE2Ljk4NSAyNS4xNTggMjMuMjAxIDIyLjMzNyAyOS40MjEgMjUuMTU4IDI5LjQyMSAyMi4zODEgMjMuMjAxIDE5LjU2NFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjguNjA2IDI2LjA5OCAyNS41NTEgMjQuNzEyIDIzLjIwMSAyNS43NzggMjMuMjAxIDI4LjU0OCAyOC42MDYgMjYuMDk4XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdFwiRmxvd1wiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi02Ny45MDdcXFwiIHkxPVxcXCItMzA4LjU1MVxcXCIgeDI9XFxcIi02Ny44NTdcXFwiIHkyPVxcXCItMzA4LjU2NFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg4Ny44MjIsIDAsIDAsIC04OC41MzMsIDU5ODQuNTMyLCAtMjcyOTAuNjE3KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZDQ0MVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmYjA0N1xcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiLTY3LjY3NFxcXCIgeTE9XFxcIi0zMTAuMTIxXFxcIiB4Mj1cXFwiLTY3LjY0N1xcXCIgeTI9XFxcIi0zMTAuMDYzXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDg3LjgyMiwgMCwgMCwgLTg4LjUzMywgNTk2NC42NjcsIC0yNzQ0MylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmQ3NTRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmI1MzJcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiY1xcXCIgeDE9XFxcIi02Ny4wMjlcXFwiIHkxPVxcXCItMzEwLjkxXFxcIiB4Mj1cXFwiLTY3LjAyOVxcXCIgeTI9XFxcIi0zMTAuODZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoODcuODIyLCAwLCAwLCAtODguNTMzLCA1OTAyLjgsIC0yNzUxOC43MzMpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZkNjQyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZkNDQxXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZiNTMyXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCItNjYuMjUyXFxcIiB5MT1cXFwiLTMxMC4zNzdcXFwiIHgyPVxcXCItNjYuMzJcXFwiIHkyPVxcXCItMzEwLjM2MlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxMDYuMTk4LCAwLCAwLCAtODguNTUxLCA3MDQ4LjQyOCwgLTI3NDc0LjE2NylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmQ0NDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmE4MjlcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX2Zsb3c8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yMy40MjYsMjkuNDFWMjIuMTcyaC03LjE4bDcuMTgsNy4yMzhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmRmNTE7ZmlsbC1vcGFjaXR5OjAuNjk5OTk5OTg4MDc5MDcxXFxcIi8+PHBhdGggZD1cXFwiTTI0LjIzMSwyNS4zMDZWMTcuNDc3SDE2LjQ2Nmw3Ljc2Niw3LjgyOVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmODkwMDtmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzFcXFwiLz48cGF0aCBkPVxcXCJNMTkuNTE1LDIyLjE3MVYzMGg3Ljc2NmwtNy43NjYtNy44MjlcXFwiIHN0eWxlPVxcXCJmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzE7ZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTIyLjYwOCwxOFYxMS44MDlIMTYuNDY2TDIyLjYwOCwxOFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZGY0ZjtmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzFcXFwiLz48cGF0aCBkPVxcXCJNMjUuNTI0LDE2LjUyNVY4LjdIMTcuNzU5bDcuNzY2LDcuODI5XFxcIiBzdHlsZT1cXFwiZmlsbC1vcGFjaXR5OjAuNzk5OTk5OTUyMzE2Mjg0O2ZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4yODgsMlY5LjgyOWg3Ljc2NkwxMi4yODgsMlxcXCIgc3R5bGU9XFxcImZpbGwtb3BhY2l0eTowLjgwMDAwMDAxMTkyMDkyOTtmaWxsOnVybCgjYylcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTEsMTQuMjYyVjYuNDMzSDQuNzE5bDcuNzMyLDcuODMsMS42NTksMFxcXCIgc3R5bGU9XFxcImZpbGwtb3BhY2l0eTowLjg3OTk5OTk5NTIzMTYyODtmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTEsMjkuOTU4VjIwLjQ4N0g0LjcxOWw5LjM5MSw5LjQ3MVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYjcwMDtmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzFcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTEyLDIyLjExNFYxNC4yODVINi4zNDZsNy43NjYsNy44MjlcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmI3MDA7ZmlsbC1vcGFjaXR5OjAuNVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi40NjUsMTEuODA5djcuODI5aDcuNzY2bC03Ljc2Ni03LjgyOVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmY2QyNTtmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzFcXFwiLz48cGF0aCBkPVxcXCJNMTQuMDkyLDEyLjY5MVY0Ljg2Mkg2LjMyNmw3Ljc2Niw3LjgyOVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmODkwMDtmaWxsLW9wYWNpdHk6MC43MDAwMDAwNDc2ODM3MTZcXFwiLz48cGF0aCBkPVxcXCJNMTYuMjQ2LDIyLjE3MVYzMGg3Ljc2NmwtNy43NjYtNy44MjlcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZjg5MDA7ZmlsbC1vcGFjaXR5OjAuNjk5OTk5OTg4MDc5MDcxXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMS4xMjIgMjIuMTcyIDE4LjYwOSAxOS42MzggMTYuNDY1IDE5LjYzOCAxNi40NjYgMTEuODA5IDIwLjg0NyAxMS44MDkgMTguODgyIDkuODI5IDE0LjA5MiA5LjgyOSAxNC4xMSAxNC4yNjIgMTQuMTEgMjAuNDg3IDE0LjExIDMwIDE2LjI0NiAzMCAxNi4yNDYgMjIuMTcyIDIxLjEyMiAyMi4xNzJcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0XCJGb3J0cmFuXCI6IFwiPGcgaWQ9XFxcImczNzY4XFxcIj48cmVjdCBpZD1cXFwicmVjdDg4MVxcXCIgeD1cXFwiMi4zNFxcXCIgeT1cXFwiMi4zNFxcXCIgd2lkdGg9XFxcIjI3LjMzXFxcIiBoZWlnaHQ9XFxcIjI3LjMzXFxcIiByeD1cXFwiNS4wOFxcXCIgc3R5bGU9XFxcImZpbGw6IzczNGY5NlxcXCIvPjxwYXRoIGlkPVxcXCJwYXRoMTQxMlxcXCIgZD1cXFwiTTYuMDYsMjUuNWMwLTEuMDksMC0xLjE5LjEtMS4xOWwxLjI1LS4wNmMxLDAsMS4xOC0uMDYsMS40Mi0uMTlhLjc0Ljc0LDAsMCwwLC4zOS0uMzdjLjEyLS4yMy4xMi0uMjkuMTItNy43MiwwLTcsMC03LjUtLjEtNy42N2ExLjA2LDEuMDYsMCwwLDAtLjYzLS41LDEwLjIzLDEwLjIzLDAsMCwwLTEuMzgtLjFsLTEuMTcsMFY1LjMySDI1Ljk0djguODJIMjQuODlhOC41Niw4LjU2LDAsMCwxLTEuMi0uMDVjLS4xNCwwLS4xNS0uMDUtLjIyLS45NWExMi43MywxMi43MywwLDAsMC0uMzUtMi40MywzLjIyLDMuMjIsMCwwLDAtMi42My0yLjgxYy0uNTctLjEtMy4xLS4yLTUuMTktLjJIMTMuODd2Ni42M2wuNzUsMEE2LjMzLDYuMzMsMCwwLDAsMTYuNDksMTRhMS44OCwxLjg4LDAsMCwwLC44OS0uOTEsNS44Niw1Ljg2LDAsMCwwLC4zOS0xLjc1YzAtLjMzLjA4LS42Ni4xLS43M3MwLS4xMywxLjE4LS4xM0gyMC4yVjIxLjA2SDE3Ljg1bDAtLjYxYTcuODUsNy44NSwwLDAsMC0uNTQtMi42NmMtLjM2LS42OC0xLjA1LTEtMi40NS0xLjA4bC0uNzYtLjA3LS4yLDAsMCwzLjM0YzAsMy41MSwwLDMuNjUuMywzLjk0cy40My4zMiwzLjIyLjQyYy4wNSwwLC4wNy4yOC4wNywxLjE5djEuMThINi4wNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48L2c+XCIsXG5cdFwiRnJlZU1hcmtlciBUZW1wbGF0ZSBMYW5ndWFnZVwiOiBcIjxwYXRoIGQ9XFxcIk0yNC4wMjMsMjAuOSwyNS40MDgsMjNsNC42MTUtN0wyNS40MDgsOWwtMS4zODUsMi4xTDI3LjI1NSwxNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDUwYjJcXFwiLz48cGF0aCBkPVxcXCJNNy45NzcsMTEuMSw2LjU5Miw5LDEuOTc3LDE2bDQuNjE1LDcsMS4zODUtMi4xTDQuNzQ1LDE2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNTBiMlxcXCIvPjxwYXRoIGQ9XFxcIk0xMy4wMzUsOWgyLjhsLS40OTQsMi44aDIuOEwxOC42MzUsOWgyLjhsLS40OTQsMi44aDIuOGwtLjQ5NSwyLjhoLTIuOGwtLjQ5MywyLjhoMi44bC0uNDk0LDIuOGgtMi44TDE4Ljk2NywyM2gtMi44bC40OTMtMi44LTIuOCwwTDEzLjM3NSwyM0gxMC41NjdsLjQ5My0yLjgtMi44LDAsLjQ5NC0yLjhoMi44bC40OTMtMi43OTNoLTIuOEw5Ljc0MSwxMS44aDIuOFptMS4zMTksOC40aDIuOGwuNDk0LTIuOGgtMi44WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNTBiMlxcXCIvPlwiLFxuXHRcIkdhbWVNYWtlciBMYW5ndWFnZVwiOiBcIjxwYXRoIGQ9XFxcIk0xNC4yMTYsMjQuMTY3aC0uOTg5YTMuMjQsMy4yNCwwLDAsMS0yLjgxMS0xLjY0OUw2LjY2NywxNmw0LjY4MS04LjE2N0gxNi4ybC00LjM0LDguMTc2LjA1Ny4wMzJMMTMuOTM2LDE5LjVIMTYuODJaTTguNDU1LDEwLjUzNWwtMS4yNy0yLjIxYTEsMSwwLDAsMC0uODU5LS40OTJIMmw0LDYuOTkyWk0yMS41NCw5LjQ4MmEzLjIzOSwzLjIzOSwwLDAsMC0yLjgxMi0xLjY0OUgxNy41MjNMMTUuMDQ1LDEyLjVIMTguMDJMMjAuMDgzLDE2bC00LjUzMSw4LjE2N2g1LjA1NkwyNS4zMzMsMTZaTTI2LDE3LjE3MmwtMi40Nyw0LjI3LDEuMjgzLDIuMjMzYTEsMSwwLDAsMCwuODU5LjQ5MkgzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4YmMzNGFcXFwiLz5cIixcblx0XCJHLWNvZGVcIjogXCI8cGF0aCBkPVxcXCJNMTcuMzMzLDE2LjM1NmgwTDE3LjMwOSwyMC44bC0yLjEtMS4wMTguMDIzLTQuNDM3aDBsMTAuNTU4LTMuMDM4LDIuMTA2LDEuMDEzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhlMDAwMFxcXCIvPjxwYXRoIGQ9XFxcIk0yNC40OTIsMTguNTc2YTE0LjkwOSwxNC45MDksMCwwLDEtMS4zNDMsMy4wNzQsNy44Niw3Ljg2LDAsMCwxLTEuMzksMS44MjksNi44LDYuOCwwLDAsMS0xLjcsMS4zMjQsNy40MDUsNy40MDUsMCwwLDEtMi4wMDYuODU1LDYsNiwwLDAsMS0zLjA3Mi4yM0E0LjY2OCw0LjY2OCwwLDAsMSwxMi40NCwyNC42NGE1LjMyMiw1LjMyMiwwLDAsMS0uNjM2LS42MjlsLS41MDgtLjI0NGE0LjcxNyw0LjcxNywwLDAsMCwuNDU3LjE4MSw1LjUyLDUuNTIsMCwwLDEtMS4wMTUtMS43NTgsOC4xMzUsOC4xMzUsMCwwLDEtLjQzLTEuNTMzYy0uMDIzLS4xMzEtLjA0My0uMjM5LS4wNjEtLjM0YTcuMjkyLDcuMjkyLDAsMCwwLC4zNzcsMS4zNTQsNS44MzYsNS44MzYsMCwwLDAsMS42MTQsMi4zMTljLjA2LjA1NC4xMjcuMS4xOS4xNDguMDQuMDA4LjA3OC4wMjIuMTE5LjAyOWE2LjQ1NCw2LjQ1NCwwLDAsMCwyLjkyOC0uMjE5LDguNCw4LjQsMCwwLDAsMS45MS0uODA3LDcuNjU4LDcuNjU4LDAsMCwwLDEuNTg5LTEuMjI3LDguNjYyLDguNjYyLDAsMCwwLDEuMjktMS42OSwxMi42NjcsMTIuNjY3LDAsMCwwLDEuMDE5LTIuMTk0TDIzLjMsMTljLjA1Ni0uMTUzLjA5MS0uMjU0LjA5MS0uMjU0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhlMDAwMFxcXCIvPjxwYXRoIGQ9XFxcIk0yNC41MjQsNC4wMTNhMTEuNiwxMS42LDAsMCwwLTYuNTg4LTEuOTk0LDEzLjgsMTMuOCwwLDAsMC05LjM3Myw0Ljg0QTE4LjI0MywxOC4yNDMsMCwwLDAsNCwxOC44Yy4wMjEsMy44NTEsMS40ODEsNy44MDYsNS4xMTIsOS41NzVhMTMuNTYzLDEzLjU2MywwLDAsMCw0LjE1OSwxLjU2NCwxMi4xMTQsMTIuMTE0LDAsMCwwLDYuODY5LTEuNTI5Yy0yLjczNCwxLjMzMy02LjEyLDEuOTkzLTguODk0LjQtMi42ODktMS41NDMtMy45ODMtNC43MjQtNC4yMjEtNy43LS41MTItNi40LDMuMS0xMy42NCw5LjEzMi0xNi4yODEsMy41MTItMS41MzcsNy4zMDctMS41ODUsMTAuMjM5LDEuMUMyNi43MjcsNS4yNDQsMjUsNC4zMDUsMjQuNTI0LDQuMDEzWm0tMTQuMzU5LDI0LjgtLjEzOC0uMDkzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhlMDAwMFxcXCIvPjxwYXRoIGQ9XFxcIk0yMi41MjksMjYuNzg4Yy0zLjA0NCwyLjU4Mi03LjkyLDQuMTQ5LTExLjU1NCwxLjg1N0M3LjI0LDI2LjI4OSw2LjUzLDIxLjA4OSw3LjIxMiwxNy4wODNhMTcuMjE4LDE3LjIxOCwwLDAsMSw2LjctMTAuOTdjMy43NzEtMi42MzYsOC44OC0zLjQ5LDEyLjQ4OS0uMTgybC0yLjI3LDMuMjkxYy0yLjUxLTIuMzU1LTYuMy0xLjk1Ni04Ljk0NS0uMDUyQTEyLjQzNCwxMi40MzQsMCwwLDAsMTAuNSwxNi4yYy0uNjYyLDIuNjIzLS41LDYuMDExLDEuNSw4LjA0NywyLjA4OCwyLjEyOSw1LjExMiwyLjExNiw3LjY1Ni44QTEwLjMzNCwxMC4zMzQsMCwwLDAsMjQuNSwxOC42MzZMMTcuMzA3LDIwLjhsLjAyMi00LjQzOEwyNy44OSwxMy4zMTlsLjEuODA2aDBBMTYuNjI1LDE2LjYyNSwwLDAsMSwyMi41MjksMjYuNzg4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2JhMDAwMFxcXCIvPlwiLFxuXHRcIkdEU2NyaXB0XCI6IFwiPHBhdGggZD1cXFwiTTI4LjE2NiwyMS4wMjl2MS42NTJhLjM3NC4zNzQsMCwwLDEtLjI2LjM1N2wtMi42Ljg0MWEuMzY3LjM2NywwLDAsMS0uMzM1LS4wNTQuMzc0LjM3NCwwLDAsMS0uMTU1LS4zdi0xLjhsLTIuNDM4LjQ2NFYyNC4wMmEuMzc1LjM3NSwwLDAsMS0uMzI1LjM3MWwtMy41MjUuNDgzYy0uMDE2LDAtLjAzNCwwLS4wNTEsMEEuMzc0LjM3NCwwLDAsMSwxOC4xLDI0LjVWMjIuNTU3bC0xLjgxOS4wMDhoLS4yNjdsLTEuODE5LS4wMDhWMjQuNWEuMzc1LjM3NSwwLDAsMS0uMzc1LjM3NmMtLjAxNywwLS4wMzQsMC0uMDUyLDBsLTMuNTI1LS40ODNhLjM3NS4zNzUsMCwwLDEtLjMyNC0uMzcxVjIyLjE4NGwtMi40MzktLjQ2NHYxLjhhLjM3NC4zNzQsMCwwLDEtLjE1NC4zLjM3LjM3LDAsMCwxLS4zMzYuMDU0bC0yLjYtLjg0MWEuMzc0LjM3NCwwLDAsMS0uMjU5LS4zNTdWMjEuMDI5bC0xLjYwOC0uNTQxYTQuNTU4LDQuNTU4LDAsMCwwLS4xMjQsMS4wNGMwLDQuMzE3LDYuMDgyLDcuNjUsMTMuNiw3LjY3NGguMDE5YzcuNTE3LS4wMjQsMTMuNi0zLjM1NiwxMy42LTcuNjc0YTQuNTQsNC41NCwwLDAsMC0uMS0uOTVaXFxcIiBmaWxsPVxcXCIjNDc4Y2JmXFxcIi8+PHBhdGggZD1cXFwiTTMuNzExLDEzLjM3M1YyMC4xbC45MDcuMzA2YS4zNzQuMzc0LDAsMCwxLC4yNTYuMzU1djEuNjVsMS44NTUuNlYyMS4yNjdhLjM3Ni4zNzYsMCwwLDEsLjQ0NS0uMzY5bDMuMTg5LjYwOWEuMzc0LjM3NCwwLDAsMSwuMzA1LjM2OHYxLjgxOGwyLjc3NS4zNzl2LTEuODlhLjM3NC4zNzQsMCwwLDEsLjM3Ni0uMzc1aDBsMi4zMjcuMDA5LDIuMzI2LS4wMDlhLjM3NC4zNzQsMCwwLDEsLjM3Ny4zNzV2MS44OWwyLjc3NS0uMzc5VjIxLjg3NGEuMzczLjM3MywwLDAsMSwuMy0uMzY4bDMuMTg5LS42MDlhLjM3Ny4zNzcsMCwwLDEsLjQ0Ni4zNjl2MS43NDFsMS44NTUtLjZWMjAuNzZhLjM3NC4zNzQsMCwwLDEsLjI1NS0uMzU1bC42MTgtLjIwOFYxMy4zNzNoLjAxN0EyNi43OTIsMjYuNzkyLDAsMCwwLDMwLDEwLjkzMWExOS4wMiwxOS4wMiwwLDAsMC0yLjUwOS0zLjI4OEEyNC41MDcsMjQuNTA3LDAsMCwwLDI1LDkuMDkxYTEzLjAxLDEzLjAxLDAsMCwwLTEuMjc5LTEuMDUyLDE1LjM2NSwxNS4zNjUsMCwwLDAtMS4zNzUtLjg5NCwyOC4zNTMsMjguMzUzLDAsMCwwLC4yMzItMy4wNzFBMTUuOTY4LDE1Ljk2OCwwLDAsMCwxOC44NDcsMi44YTI2LjQ0LDI2LjQ0LDAsMCwwLTEuMzg1LDIuNyw5LjQ2LDkuNDYsMCwwLDAtMS40NTMtLjExNmgtLjAxOGE5LjQ1Nyw5LjQ1NywwLDAsMC0xLjQ1NC4xMTYsMjYuMjc1LDI2LjI3NSwwLDAsMC0xLjM4NS0yLjdBMTUuOTYxLDE1Ljk2MSwwLDAsMCw5LjQyMiw0LjA3NWEyOC4xNDIsMjguMTQyLDAsMCwwLC4yMzIsMy4wNzEsMTUuMzEyLDE1LjMxMiwwLDAsMC0xLjM3Ni44OTRBMTMuMDYsMTMuMDYsMCwwLDAsNyw5LjA5MWEyNC41NTMsMjQuNTUzLDAsMCwwLTIuNDktMS40NDhBMTkuMDIsMTkuMDIsMCwwLDAsMiwxMC45MzFhMjYuNzkyLDI2Ljc5MiwwLDAsMCwxLjY5NCwyLjQ0M1pcXFwiIGZpbGw9XFxcIiM0NzhjYmZcXFwiLz48cGF0aCBkPVxcXCJtMTIuNDYyIDE2LjZhMi43MzkgMi43MzkgMCAxIDEtMi43NC0yLjczOCAyLjczOSAyLjczOSAwIDAgMSAyLjc0IDIuNzM4XFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZD1cXFwibTExLjggMTYuNzY0YTEuODE5IDEuODE5IDAgMSAxLTEuODE5LTEuODE5IDEuODE3IDEuODE3IDAgMCAxIDEuODE5IDEuODE5XFxcIiBmaWxsPVxcXCIjNDE0MDQyXFxcIi8+PHBhdGggZD1cXFwiTTE2LjE2NiwxOS41OWEuODQ0Ljg0NCwwLDAsMS0uODgyLS44VjE2LjI2N2EuODg2Ljg4NiwwLDAsMSwxLjc2NCwwdjIuNTIyYS44NDUuODQ1LDAsMCwxLS44ODMuOFxcXCIgZmlsbD1cXFwiI2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIm0xOS44NzEgMTYuNmEyLjczOSAyLjczOSAwIDEgMCAyLjc0LTIuNzM4IDIuNzM5IDIuNzM5IDAgMCAwLTIuNzQgMi43MzhcXFwiIGZpbGw9XFxcIiNmZmZcXFwiLz48cGF0aCBkPVxcXCJtMjAuNTMxIDE2Ljc2NGExLjgxOCAxLjgxOCAwIDEgMCAxLjgxNy0xLjgxOSAxLjgxNyAxLjgxNyAwIDAgMC0xLjgxNyAxLjgxOVxcXCIgZmlsbD1cXFwiIzQxNDA0MlxcXCIvPlwiLFxuXHRcIkdpdFwiOiBcIjxwYXRoIGQ9XFxcIk0yOS40NzIsMTQuNzUzLDE3LjI0NywyLjUyOGExLjgsMS44LDAsMCwwLTIuNTUsMEwxMi4xNTgsNS4wNjdsMy4yMiwzLjIyYTIuMTQxLDIuMTQxLDAsMCwxLDIuNzEyLDIuNzNsMy4xLDMuMWEyLjE0MywyLjE0MywwLDEsMS0xLjI4NSwxLjIxbC0yLjg5NS0yLjg5NXY3LjYxN2EyLjE0MSwyLjE0MSwwLDEsMS0xLjc2NC0uMDYyVjEyLjNhMi4xNDYsMi4xNDYsMCwwLDEtMS4xNjUtMi44MTRMMTAuOTExLDYuMzE0LDIuNTI4LDE0LjdhMS44LDEuOCwwLDAsMCwwLDIuNTUxTDE0Ljc1MywyOS40NzJhMS44LDEuOCwwLDAsMCwyLjU1LDBMMjkuNDcyLDE3LjNhMS44LDEuOCwwLDAsMCwwLTIuNTUxXFxcIiBzdHlsZT1cXFwiZmlsbDojZGQ0YzM1XFxcIi8+PHBhdGggZD1cXFwiTTEyLjE1OCw1LjA2N2wzLjIyLDMuMjJhMi4xNDEsMi4xNDEsMCwwLDEsMi43MTIsMi43M2wzLjEsMy4xYTIuMTQzLDIuMTQzLDAsMSwxLTEuMjg1LDEuMjFsLTIuODk1LTIuODk1djcuNjE3YTIuMTQxLDIuMTQxLDAsMSwxLTEuNzY0LS4wNjJWMTIuM2EyLjE0NiwyLjE0NiwwLDAsMS0xLjE2NS0yLjgxNEwxMC45MTEsNi4zMTRcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0XCJHTFNMXCI6IFwiPHBhdGggZD1cXFwiTTcuNzc5LDE4LjkyM0EyLjMzMywyLjMzMywwLDAsMSw1LjQsMTcuMTZjLjMwNiwxLjQ2MiwxLjk2MSwyLjg5Miw3LjE4MywzLjUyOWExNC4yMjgsMTQuMjI4LDAsMCwwLDkuMjMyLTEuNjEycy43MzMtLjMyMi4yOTMuMTc2YzAsMC0zLjEwNywyLjg3My05LjIsMi45UzEuOTcsMTkuMTA3LDIsMTZjLS4wMjktMy4xMDcsNC44MDYtNi4xODUsMTAuOS02LjE1NXM5LjIsMi45LDkuMiwyLjljLjQ0LjUtLjI5My4xNzYtLjI5My4xNzYtMS4wODQtLjctNC4yODYtMi4wODktOS4yMzItMS42MTItNC44NjYuNDY5LTYuNDUzLDIuMTIyLTYuOTgxLDMuMjM1YTMuMjU0LDMuMjU0LDAsMCwwLS4zMTgsMS4yNCwyLjQyNCwyLjQyNCwwLDAsMSwyLjUtMi4zMTZBMi41MDcsMi41MDcsMCwwLDEsMTAuMywxNi4xOTUsMi41MDYsMi41MDYsMCwwLDEsNy43NzksMTguOTJabTE5LjY0Ny0xLjA3NEgzMHYuOTM3SDI2LjM0NFYxMy42MDloMS4wODJ2NC4yNFpNMjMuNDU0LDE2aDIuMTYzdjIuNzkxSDI0LjlsLS4xMDgtLjY0OWExLjksMS45LDAsMCwxLTEuNjE0Ljc4NiwyLjQxNCwyLjQxNCwwLDAsMS0yLjM3OS0yLjcxMSwyLjQ4NSwyLjQ4NSwwLDAsMSwyLjUzMS0yLjc0QTIuMDUzLDIuMDUzLDAsMCwxLDI1LjYsMTUuMjE3SDI0LjUxNWExLjEzNiwxLjEzNiwwLDAsMC0xLjEzMi0uODUxYy0uNzcxLDAtMS40ODUuNTM0LTEuNDg1LDEuODYsMCwxLjQxMy43NzEsMS43ODEsMS41MDYsMS43ODFhMS4yOCwxLjI4LDAsMCwwLDEuMjU0LTEuMTM5aC0xLjJWMTZaTTcuNzgxLDE0LjFhMS44NiwxLjg2LDAsMCwwLTEuOCwyLjEwNSwxLjg2LDEuODYsMCwwLDAsMS44LDIuMTA1LDEuODYsMS44NiwwLDAsMCwxLjgtMi4xMDVBMS44NiwxLjg2LDAsMCwwLDcuNzgxLDE0LjFabTIuOTExLDEuMzgzaC41MjV2LjQ2OGguMDEzYTEuMTIsMS4xMiwwLDAsMSwuOTg3LS41NjMsMS41NjUsMS41NjUsMCwwLDEsMS41MDYsMS42NzcsMS42NzUsMS42NzUsMCwwLDEtMS41ODMsMS44MjQsMSwxLDAsMCwxLS44OC0uNDQzaC0uMDEzVjIwLjFoLS41NTdWMTUuNDc5Wk0xMi4xLDE4LjRjLjYwOCwwLDEuMDE5LS41MjcsMS4wMTktMS4yNTQsMC0uNDI0LS4xNzEtMS4yNjQtMS4wMzItMS4yNjQtLjgsMC0uODkzLjg2Ny0uODkzLDEuNDA2LDAsLjg4LjU1MSwxLjExNC45MDUsMS4xMTRabTUtLjY1MmExLjM3OCwxLjM3OCwwLDAsMS0xLjQ4OCwxLjEzMywxLjQ4NywxLjQ4NywwLDAsMS0xLjQ4Mi0xLjY1OGMwLTEuMDI1LjQ5NC0xLjg0MiwxLjU4OC0xLjg0Mi45NTYsMCwxLjQyNC43NiwxLjQyNCwxLjkzMUgxNC43MjFjMCwuNjkuMzIzLDEuMDg5Ljk2MiwxLjA4OWEuODQxLjg0MSwwLDAsMCwuODU0LS42NTJIMTcuMVptLS41OS0uODhjLS4wMzItLjUxMy0uMjQ3LS45ODctLjkyNC0uOTg3YS45NzIuOTcyLDAsMCwwLS45MTguOTg3aDEuODQyWm0zLjcxMywxLjkxN2gtLjU1N1YxNi43NTFjMC0uNTc2LS4xNjUtLjg2Ny0uNzA5LS44NjctLjMxNywwLS44NzQuMi0uODc0LDEuMXYxLjhoLS41NTdWMTUuNDc5aC41MjV2LjQ2OGguMDEzYTEuMiwxLjIsMCwwLDEsMS0uNTYzLDEuMDQ2LDEuMDQ2LDAsMCwxLDEuMTU4LDEuMTUydjIuMjUzXFxcIiBzdHlsZT1cXFwiZmlsbDojNDM4NmI1XFxcIi8+XCIsXG5cdFwiR28gbW9kdWxlXCI6IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNTQuNSAyMjVcXFwiPjx0aXRsZT5maWxlX3R5cGVfZ29fcGFja2FnZTwvdGl0bGU+PHBhdGggZD1cXFwiTTYxLjk0OSwxMy4wNjhjMTYuMDYtLjE0NywzMi4xNDMsMCw0OC4yMTEtLjA2Mi0zLjgxLDE2LjQwOC03LjQ2NiwzMi44NjItMTEuMjYxLDQ5LjI3N0gyNS41NDhjLTIuMzE5LDAtNC42MzcuMDc3LTYuOTU2LS4wOTNDMzMsNDUuNzc1LDQ3LjU2NiwyOS41LDYxLjk0OSwxMy4wNjhaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjJlNmM5XFxcIi8+PHBhdGggZD1cXFwiTTE0My41MDksMTMuMDE0aDQ4LjA3MmMxNC40MzcsMTYuNDMxLDI5LjAxMywzMi43MjMsNDMuNDExLDQ5LjE3Ny05LjI3NC4xOTMtMTguNTQ5LDAtMjcuODIzLjA4NUgxNTQuNjU0QzE1MS4wMDYsNDUuODM3LDE0Ny4xMTEsMjkuNDYsMTQzLjUwOSwxMy4wMTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjJlNmM5XFxcIi8+PHBhdGggZD1cXFwiTTExMC4xNiwxMy4wMTRoMzMuMzQ5YzMuNiwxNi40NDYsNy40ODksMzIuODIzLDExLjE2LDQ5LjI1NEg5OC45QzEwMi42OTQsNDUuODY4LDEwNi4zNSwyOS40MjIsMTEwLjE2LDEzLjAxNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZmM3NWVcXFwiLz48cGF0aCBkPVxcXCJNMTguNTkyLDYyLjE4M2MyLjMxOS4xNyw0LjYzNy4wODUsNi45NTYuMDkzSDk4LjlxMCwyNi4wMjYuMDU0LDUyLjA1MmExOC44NTcsMTguODU3LDAsMCwwLDEuOTc5LjEzOWg1Mi4xMTRhMTQuNjkzLDE0LjY5MywwLDAsMCwxLjU0Ni0uMTA4Yy4xNDctMTcuMzY2LDAtMzQuNzMyLjA3LTUyLjFoNTIuNTE2YzkuMjc0LS4wNDYsMTguNTQ5LjEwOCwyNy44MjMtLjA4NVYyMTIuNjJIMTguNlExOC41OTIsMTM3LjQwNSwxOC41OTIsNjIuMTgzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2U3YmY1NVxcXCIvPjxwYXRoIGQ9XFxcIk05OC45LDYyLjI5MWg1NS43NjljLS4wNjIsMTcuMzY2LjA4NSwzNC43MzItLjA3LDUyLjEtLjUxOC4wNTQtMS4wMzYuMDkzLTEuNTQ2LjEwOEgxMDAuOTRhMTguODU3LDE4Ljg1NywwLDAsMS0xLjk3MS0uMTMxQzk4Ljg2MSw5Ni45OTMsOTguOTY5LDc5LjYzNCw5OC45LDYyLjI5MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkYmI1NTFcXFwiLz48cmVjdCB4PVxcXCIzNC4zODlcXFwiIHk9XFxcIjE2My42ODJcXFwiIHdpZHRoPVxcXCI3Mi40MTdcXFwiIGhlaWdodD1cXFwiMjcuODg1XFxcIiBzdHlsZT1cXFwiZmlsbDojZjJmMmYyXFxcIi8+PHBhdGggZD1cXFwiTTYxLjQyMiwxMzcuMDg1Yy0uMzg4LDAtLjQ4Ny0uMTk0LS4yOTEtLjQ4N2wyLjA0MS0yLjYyNWExLjM5MywxLjM5MywwLDAsMSwxLjA2OS0uNDg3aDM0LjdjLjM4OCwwLC40ODcuMjkxLjI5MS41ODRMOTcuNTgyLDEzNi42YTEuNDgxLDEuNDgxLDAsMCwxLS45NzIuNTg0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NlMzI2MlxcXCIvPjxwYXRoIGQ9XFxcIk00Ni43NCwxNDYuMDI4Yy0uMzg4LDAtLjQ4Ny0uMTk0LS4yOTEtLjQ4N2wyLjA0MS0yLjYyNWExLjM5MywxLjM5MywwLDAsMSwxLjA2OS0uNDg3SDkzLjg5YS40NDcuNDQ3LDAsMCwxLC40ODcuNTg0bC0uNzc4LDIuMzMzYS44NS44NSwwLDAsMS0uODc1LjU4NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjZTMyNjJcXFwiLz48cGF0aCBkPVxcXCJNNzAuMjY0LDE1NC45NzFjLS4zODgsMC0uNDg3LS4yOTEtLjI5MS0uNTg0bDEuMzU3LTIuNDNhMS4yODksMS4yODksMCwwLDEsLjk3Mi0uNTg0SDkxLjc0N2MuMzg4LDAsLjU4NC4yOTEuNTg0LjY4MWwtLjE5NCwyLjMzM2EuNzMxLjczMSwwLDAsMS0uNjgxLjY4MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjZTMyNjJcXFwiLz48cGF0aCBkPVxcXCJNMTcxLjE2MywxMzUuMzM1Yy02LjEyNCwxLjU1Ni0xMC4zLDIuNzIyLTE2LjMzLDQuMjgtMS40NjIuMzg4LTEuNTU2LjQ4Ny0yLjgxOS0uOTcyYTEzLjAxMSwxMy4wMTEsMCwwLDAtNC41NjktMy42OTRjLTYuMTI0LTMuMDEzLTEyLjA1NC0yLjEzOC0xNy41OTQsMS40NjJhMjAuNjcxLDIwLjY3MSwwLDAsMC05LjkxOCwxOC40NjksMTUuMjQyLDE1LjI0MiwwLDAsMCwxMy4xMjMsMTUuMjYxYzYuNjEuODc1LDEyLjE1MS0xLjQ2MiwxNi41MjUtNi40MTUuODc1LTEuMDY5LDEuNjUzLTIuMjM2LDIuNjI1LTMuNkgxMzMuNDQ2Yy0yLjA0MSwwLTIuNTI4LTEuMjYzLTEuODQ3LTIuOTE2LDEuMjYzLTMuMDEzLDMuNi04LjA2OCw0Ljk1OC0xMC42YTIuNjI1LDIuNjI1LDAsMCwxLDIuNDMtMS41NTZoMzUuMzg0Yy0uMTk0LDIuNjI1LS4xOTQsNS4yNDktLjU4NCw3Ljg3NGE0MS40NTYsNDEuNDU2LDAsMCwxLTcuOTY3LDE5LjA0MmMtNi45OTUsOS4yMzQtMTYuMTM2LDE0Ljk3LTI3LjcsMTYuNTI1LTkuNTI2LDEuMjYzLTE4LjM3NC0uNTg0LTI2LjE0OC02LjQxNUEzMC41MzMsMzAuNTMzLDAsMCwxLDk5LjYyNSwxNjAuNTFjLTEuMjYzLTEwLjYsMS44NDctMjAuMTIyLDguMjYyLTI4LjQ4MUE0My4xMzcsNDMuMTM3LDAsMCwxLDEzNS4xLDExNS4yMTJjOS4xMzctMS42NTMsMTcuODg2LS41ODQsMjUuNzYsNC43NjNBMzAuNDcxLDMwLjQ3MSwwLDAsMSwxNzIuMTQsMTMzLjY4QzE3Mi43MTksMTM0LjU1OCwxNzIuMzMsMTM1LjA0NCwxNzEuMTYzLDEzNS4zMzVaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2UzMjYyXFxcIi8+PHBhdGggZD1cXFwiTTIwMy4zMzgsMTg5LjA5Yy04Ljg0Ni0uMTk0LTE2LjkxMy0yLjcyMi0yMy43MTktOC41NTRhMzAuNDg1LDMwLjQ4NSwwLDAsMS0xMC41LTE4Ljc2MWMtMS43NS0xMC45ODQsMS4yNjMtMjAuNyw3Ljg3NC0yOS4zNTYsNy4xLTkuMzMxLDE1LjY1MS0xNC4xOTIsMjcuMjE4LTE2LjIzMyw5LjkxOC0xLjc1LDE5LjI0Ny0uNzc4LDI3LjcsNC45NTgsNy42OCw1LjI0OSwxMi40NDIsMTIuMzQ1LDEzLjcwNiwyMS42NzYsMS42NTMsMTMuMTIzLTIuMTM4LDIzLjgxNi0xMS4xNzksMzIuOTUzYTQ0LjU0Miw0NC41NDIsMCwwLDEtMjMuMzI5LDEyLjQ0MkMyMDguNDksMTg4LjcsMjA1Ljg2NiwxODguOCwyMDMuMzM4LDE4OS4wOVptMjMuMTM1LTM5LjI3MWEyNy45NzgsMjcuOTc4LDAsMCwwLS4yOTEtMy4yMDgsMTYuMDEzLDE2LjAxMywwLDAsMC0xOC4zNzUtMTMuMjM1cS0uNzM0LjExOS0xLjQ1NC4zMDZjLTkuMDQsMi4wNDEtMTQuODczLDcuNzc3LTE3LjAxMSwxNi45MTNhMTYuMDA5LDE2LjAwOSwwLDAsMCw4Ljk0MywxOC4zNzQsMTcuODIsMTcuODIsMCwwLDAsMTUuODQ1LS41ODRjNy42NzktMy45ODUsMTEuODU5LTEwLjIwNiwxMi4zNDgtMTguNTY2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NlMzI2MlxcXCIvPjwvc3ZnPlwiLFxuXHRcIkdvXCI6IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNTQuNSAyMjVcXFwiPjx0aXRsZT5maWxlX3R5cGVfZ288L3RpdGxlPjxwYXRoIGQ9XFxcIk0tNDYuOTI2LDg5Yy0uNjIxLDAtLjc3Ny0uMzExLS40NjYtLjc3N2wzLjI2Mi00LjE5NGEyLjIyNSwyLjIyNSwwLDAsMSwxLjcwOC0uNzc3SDEzLjAyNmMuNjIxLDAsLjc3Ny40NjYuNDY2LjkzMmwtMi42NCw0LjAzOGEyLjM2NywyLjM2NywwLDAsMS0xLjU1My45MzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBhY2Q3XFxcIi8+PHBhdGggZD1cXFwiTS03MC4zNzksMTAzLjI4NWMtLjYyMSwwLS43NzctLjMxMS0uNDY2LS43NzdsMy4yNjItNC4xOTRhMi4yMjUsMi4yMjUsMCwwLDEsMS43MDgtLjc3N0g0Ljk1YS43MTQuNzE0LDAsMCwxLC43NzcuOTMyTDQuNDg0LDEwMi4yYTEuMzU4LDEuMzU4LDAsMCwxLTEuNC45MzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBhY2Q3XFxcIi8+PHBhdGggZD1cXFwiTS0zMi43OTIsMTE3LjU3NGMtLjYyMSwwLS43NzctLjQ2Ni0uNDY2LS45MzJsMi4xNzQtMy44ODNhMi4wNiwyLjA2LDAsMCwxLDEuNTUzLS45MzJIMS41MzNjLjYyMSwwLC45MzIuNDY2LjkzMiwxLjA4N2wtLjMxMSwzLjcyOGExLjE2NywxLjE2NywwLDAsMS0xLjA4NywxLjA4N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGFjZDdcXFwiLz48cGF0aCBkPVxcXCJNMTI4LjQyNiw4Ni4yYy05Ljc4NSwyLjQ4NS0xNi40NjQsNC4zNDktMjYuMDkzLDYuODM0LTIuMzMuNjIxLTIuNDg1Ljc3Ny00LjUtMS41NTMtMi4zMy0yLjY0LTQuMDM4LTQuMzQ5LTcuMy01LjktOS43ODUtNC44MTUtMTkuMjU5LTMuNDE3LTI4LjExMiwyLjMzLTEwLjU2MSw2LjgzNC0xNiwxNi45MjktMTUuODQyLDI5LjUxLjE1NSwxMi40MjUsOC43LDIyLjY3NiwyMC45NjgsMjQuMzg1LDEwLjU2MSwxLjQsMTkuNDE0LTIuMzMsMjYuNC0xMC4yNTEsMS40LTEuNzA4LDIuNjQtMy41NzIsNC4xOTQtNS43NDdINjguMTYzYy0zLjI2MiwwLTQuMDM4LTIuMDE5LTIuOTUxLTQuNjU5LDIuMDE5LTQuODE1LDUuNzQ3LTEyLjg5MSw3LjkyMS0xNi45MjlhNC4xOTQsNC4xOTQsMCwwLDEsMy44ODMtMi40ODVoNTYuNTM1Yy0uMzExLDQuMTk0LS4zMTEsOC4zODctLjkzMiwxMi41ODFhNjYuMjM5LDY2LjIzOSwwLDAsMS0xMi43MzYsMzAuNDQyQzEwOC43LDE1OS41MSw5NC4xLDE2OC42NzMsNzUuNjE4LDE3MS4xNThjLTE1LjIyMSwyLjAxOS0yOS4zNTUtLjkzMi00MS43OC0xMC4yNTFhNDguNzg1LDQ4Ljc4NSwwLDAsMS0xOS43MjUtMzQuNDhjLTIuMDE5LTE2LjkyOSwyLjk1MS0zMi4xNSwxMy4yLTQ1LjUwOEMzOC4zNDIsNjYuNDc1LDUyLjk0Miw1Ny4zMTIsNzAuOCw1NC4wNWMxNC42LTIuNjQsMjguNTc4LS45MzIsNDEuMTU5LDcuNjFhNDguNjg2LDQ4LjY4NiwwLDAsMSwxOC4wMTcsMjEuOUMxMzAuOTExLDg0Ljk1OCwxMzAuMjg5LDg1LjczNSwxMjguNDI2LDg2LjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBhY2Q3XFxcIi8+PHBhdGggZD1cXFwiTTE3OS44MzUsMTcyLjA5Yy0xNC4xMzQtLjMxMS0yNy4wMjUtNC4zNDktMzcuOS0xMy42NjhhNDguNzExLDQ4LjcxMSwwLDAsMS0xNi43NzQtMjkuOTc2Yy0yLjgtMTcuNTUxLDIuMDE5LTMzLjA4MiwxMi41ODEtNDYuOTA1LDExLjMzOC0xNC45MSwyNS4wMDYtMjIuNjc2LDQzLjQ4OC0yNS45MzgsMTUuODQyLTIuOCwzMC43NTMtMS4yNDMsNDQuMjY1LDcuOTIxLDEyLjI3LDguMzg3LDE5Ljg4LDE5LjcyNSwyMS45LDM0LjYzNSwyLjY0LDIwLjk2OC0zLjQxNywzOC4wNTItMTcuODYxLDUyLjY1MmE3MS4xNyw3MS4xNywwLDAsMS0zNy4yNzYsMTkuODhDMTg4LjA2NywxNzEuNDY5LDE4My44NzQsMTcxLjYyNCwxNzkuODM1LDE3Mi4wOVpNMjE2LjgsMTA5LjM0M2E0NC43LDQ0LjcsMCwwLDAtLjQ2Ni01LjEyNWMtMi44LTE1LjM3Ni0xNi45MjktMjQuMDc0LTMxLjY4NC0yMC42NTctMTQuNDQ0LDMuMjYyLTIzLjc2MywxMi40MjUtMjcuMTgsMjcuMDI1YTI1LjU3OSwyNS41NzksMCwwLDAsMTQuMjg5LDI5LjM1NWM4LjU0MiwzLjcyOCwxNy4wODUsMy4yNjIsMjUuMzE3LS45MzJDMjA5LjM0NSwxMzIuNjQsMjE2LjAyNCwxMjIuNywyMTYuOCwxMDkuMzQzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwYWNkN1xcXCIvPjwvc3ZnPlwiLFxuXHRcIkdyYWRsZVwiOiBcIjxwYXRoIGQ9XFxcIk0xMy41LDYuOTY1aDcuOTIzbDQsNi44ODdIMjkuOThBMTQuMSwxNC4xLDAsMCwwLDExLjAyNCwyLjkzMkwxMy41LDYuOTY1XFxcIiBzdHlsZT1cXFwiZmlsbDojMDA2NTMzXFxcIi8+PHBhdGggZD1cXFwiTTI1LjYyOCwxOGwtNC4yMDksNy4yNTJIMTAuODA2TDUuNSwxNi4xMDgsOS43MzksOC44LDcuNCw0Ljk4MUExNC4wMywxNC4wMywwLDEsMCwzMCwxOEgyNS42MjhcXFwiIHN0eWxlPVxcXCJmaWxsOiM4MmI4MTZcXFwiLz48cGF0aCBkPVxcXCJNMjEuMDYxLDE1Ljk2M2E1LjAyNiw1LjAyNiwwLDEsMS01LjAyNi01LDUuMDEzLDUuMDEzLDAsMCwxLDUuMDI2LDVcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDY1MzJcXFwiLz5cIixcblx0XCJHcmFwaFFMXCI6IFwiPHJlY3QgeD1cXFwiLTAuNDNcXFwiIHk9XFxcIjEyLjUzNFxcXCIgd2lkdGg9XFxcIjIyLjkwMVxcXCIgaGVpZ2h0PVxcXCIxLjE4N1xcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTUuODU4IDE2LjEwNykgcm90YXRlKC01OS45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojZTEwMDk4XFxcIi8+PHJlY3QgeD1cXFwiNC41NDVcXFwiIHk9XFxcIjIxLjE2MlxcXCIgd2lkdGg9XFxcIjIyLjkwMlxcXCIgaGVpZ2h0PVxcXCIxLjE4N1xcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjEwLjQzXFxcIiB5PVxcXCIxOC4wMDhcXFwiIHdpZHRoPVxcXCIxLjE4N1xcXCIgaGVpZ2h0PVxcXCIxMy4yMjdcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0xNS44MTIgMjEuODU3KSByb3RhdGUoLTU5Ljk5OSlcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cmVjdCB4PVxcXCIyMC4zODFcXFwiIHk9XFxcIjAuNzcxXFxcIiB3aWR0aD1cXFwiMS4xODdcXFwiIGhlaWdodD1cXFwiMTMuMjI3XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSg0LjA5MiAyMS44NTYpIHJvdGF0ZSgtNTkuOTk5KVxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjQuNDEyXFxcIiB5PVxcXCI2Ljc4N1xcXCIgd2lkdGg9XFxcIjEzLjIyN1xcXCIgaGVpZ2h0PVxcXCIxLjE4N1xcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTIuMjEzIDYuNTAyKSByb3RhdGUoLTMwLjAwMSlcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cmVjdCB4PVxcXCIyMC4zODlcXFwiIHk9XFxcIjEuNjc3XFxcIiB3aWR0aD1cXFwiMS4xODdcXFwiIGhlaWdodD1cXFwiMjIuOTAxXFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMy43NTMgMTIuMjUpIHJvdGF0ZSgtMzAuMDAxKVxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjUuNDU0XFxcIiB5PVxcXCI5LjM4NlxcXCIgd2lkdGg9XFxcIjEuMTg3XFxcIiBoZWlnaHQ9XFxcIjEzLjIyOFxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjI1LjM2XFxcIiB5PVxcXCI5LjM4NlxcXCIgd2lkdGg9XFxcIjEuMTg3XFxcIiBoZWlnaHQ9XFxcIjEzLjIyOFxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjE1LjIyMlxcXCIgeT1cXFwiMjQuMDk3XFxcIiB3aWR0aD1cXFwiMTEuNTA0XFxcIiBoZWlnaHQ9XFxcIjEuMDM3XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtOS40OTggMTMuNzg1KSByb3RhdGUoLTMwLjAwMSlcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cGF0aCBkPVxcXCJNMjguMTIsMjNhMi41LDIuNSwwLDEsMS0uOTE1LTMuNDExQTIuNSwyLjUsMCwwLDEsMjguMTIsMjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cGF0aCBkPVxcXCJNOC4yLDExLjVhMi41LDIuNSwwLDEsMS0uOTE1LTMuNDExQTIuNSwyLjUsMCwwLDEsOC4yLDExLjVcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cGF0aCBkPVxcXCJNMy44OCwyM2EyLjUsMi41LDAsMSwxLDMuNDExLjkxNUEyLjUsMi41LDAsMCwxLDMuODgsMjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cGF0aCBkPVxcXCJNMjMuOCwxMS41YTIuNSwyLjUsMCwxLDEsMy40MTEuOTE1QTIuNSwyLjUsMCwwLDEsMjMuOCwxMS41XFxcIiBzdHlsZT1cXFwiZmlsbDojZTEwMDk4XFxcIi8+PHBhdGggZD1cXFwiTTE2LDMwYTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjQ5MywyLjQ5MywwLDAsMSwxNiwzMFxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxwYXRoIGQ9XFxcIk0xNiw2Ljk5MWEyLjUsMi41LDAsMSwxLDIuNS0yLjUsMi40OTMsMi40OTMsMCwwLDEtMi41LDIuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPlwiLFxuXHRcIkdyb292eVwiOiBcIjxwYXRoIGQ9XFxcIk03LjQ1MywyOS44NjVjMC0uMDc0LjQ5NC0xLjcxNywxLjEtMy42NTFBMjEuODA4LDIxLjgwOCwwLDAsMCw5LjUsMjIuNmMtLjA3OS0uMDU2LS4zNS4wNDUtLjYuMjI0LS43NjQuNTM4LS45Mi40LTEuNDkxLTEuMzU2LS42MTctMS45LS42MzktMi4wOTEtLjMxNy0yLjgxLjIxLS40Ny4yLS41NzktLjE0Ny0xLjI3N2EzLjc1LDMuNzUsMCwwLDEtLjM3Ny0xLjA0NGMwLS4yNi0xLjQxMy0xLjQzOC0zLjY0Ny0zLjA0QTMuODQ1LDMuODQ1LDAsMCwxLDIsMTIuNWExMC40NzcsMTAuNDc3LDAsMCwxLDIuMzc4LS4wMzlsMi4zNzguMS4yMzItLjc0MWMuOTgxLTMuMTMsMi40NjMtNS45NTcsMy4xMjItNS45NTcuMTM3LDAsLjQxNi4yNjUuNjE5LjU4OC4zMzEuNTI3LjM3Ni44NTMuNDM1LDMuMTI2YTIzLjAxMywyMy4wMTMsMCwwLDAsLjE2NSwyLjczOWMuMDU1LjExLjIyOC0uMDM1LjM4NS0uMzIyLjItLjM2Ny40MTItLjQ2Ny43MS0uMzM1cy40ODUuMDQzLjY0Ni0uMzQ1Yy4yNDItLjU4MiwxLjQ1NS00LjUxMywxLjQ1NS00LjcxNywwLS4wNjkuMjQtLjkuNTM0LTEuODQ2cy42MzEtMi4wMzYuNzUxLTIuNDI0Yy4yMTMtLjY4OC4yNDYtLjYwNywxLjUyNCwzLjcyNiwxLjMyLDQuNDc0LDIuMDMsNi4xMjQsMi4zODUsNS41NDQuMjQ4LS40LDEuNTUtLjQyOCwxLjkxNC0uMDM0LjIwNy4yMjQuMzM4LjIyMS40NTMtLjAxLjIzNy0uNDguOC0uNC45NTMuMTQuMTE3LjQyMy4xNDcuNDIzLjMyLDBhLjgxMi44MTIsMCwwLDEsLjY5Mi0uNDY2Yy4zODksMCwuNTM4LjE2NC42NjYuNzM1bC4xNjUuNzM1LDIuNTU4LS4xODNBMTEuNTIxLDExLjUyMSwwLDAsMSwzMCwxMi40NjhhMjAuNzksMjAuNzksMCwwLDEtMi4zMjEsMS44ODljLTEuMjc3Ljk2LTIuMzQyLDEuNzc1LTIuMzY4LDEuODFhMTcuNjA3LDE3LjYwNywwLDAsMCwuMTI4LDEuODY3LDExLjA3NSwxMS4wNzUsMCwwLDEtLjU0NCw1LjcxMyw0LjMwOCw0LjMwOCwwLDAsMS0xLjAyMSwxLjQ5Yy0uMjc4LjE4Ni0uNTA2LjQtLjUwNi40ODZzLjMsMS4wNzcuNjYsMi4yMTJBOS42ODIsOS42ODIsMCwwLDEsMjQuNTY4LDMwYy0uMTA5LDAtMi43NTctMi4wNy02Ljg3Ni01LjM3M2ExMS4xNDMsMTEuMTQzLDAsMCwwLTEuNjQzLTEuMTg0Yy0uMTcxLDAtMS42NDksMS4xMzMtNS45ODQsNC41ODgtMi41MTQsMi0yLjYxMiwyLjA3My0yLjYxMiwxLjgzNVptNS4xNTgtNC43MjdjMS4zMzctMS4wNTEsMi42NjQtMi4wNzgsMi45NDctMi4yODIuNDg4LS4zNTEuNjUxLS4yNjMsMy4wMjEsMS42MzEsMS4zNzgsMS4xLDIuNzM3LDIuMTc0LDMuMDIxLDIuMzg0cy44NjguNjY2LDEuMywxLjAxM2MuNDkxLjQuNzQyLjQ5Mi42NzQuMjU2LS43Ny0yLjYzNC0uNzkzLTIuNjc4LTEuMzI3LTIuNDc2LS42NDQuMjQ0LTEuMDQzLS4wMDYtMS4yNDktLjc4M2ExLjczOSwxLjczOSwwLDAsMSwuMjQtMS40NTEsMi4zNzcsMi4zNzcsMCwwLDAtLjIyMS0yLjczMSw0LjI4OSw0LjI4OSwwLDAsMS0uNjg2LTEuNTNsLS4yNDEtMS4wMjMtLjUxNy43MWMtLjYzNi44NzMtMS40MTEuOTE4LTIuMDU5LjExOWwtLjQ3Ny0uNTg4LS41NTQuNzYyYy0uNTU1Ljc2My0xLjE5NC44NjItMS44NDQuMjg0LS4xNzktLjE1OS0uMjU4LS4xLS4yNTguMmExLjI0LDEuMjQsMCwwLDEtLjM3NS43NzdjLS42MTkuNTctMS4yMjMuNDE5LTEuNjMzLS40MDlMMTIsMTkuMjQ5bC0uMy43NzVhNy4wMzIsNy4wMzIsMCwwLDEtLjg1MywxLjQ3OSwxMy44OTEsMTMuODkxLDAsMCwwLTEuNDU1LDMuNjYzYy0uNSwxLjYyNy0uOSwzLjA0Mi0uOSwzLjE0M3MuMzgxLS4xNDEuODQ3LS41MzgsMS45NDItMS41ODIsMy4yNzktMi42MzNabTExLjM0My0xLjEzMWMxLjAxNS0xLjE1NCwxLjI1LTMuMjg4LjgtNy4yNzEtLjM3NS0zLjMyOS0uNTYyLTQuNDE5LS43ODQtNC41NjUtLjE1NC0uMS0uMTc3LjAxLS4wOTEuNDI2LjU2MiwyLjcuNTkzLDQuMDUzLjEsNC40MzQtLjMzNy4yNjItLjY5NS0uNzE5LS45NzYtMi42NzUtLjIxOC0xLjUxNS0uNDQ1LTIuMi0uNjE3LTEuODVhMy4zNTksMy4zNTksMCwwLDAsLjE2LDEuMDcsMjYuNzE4LDI2LjcxOCwwLDAsMSwuMzk0LDMuMzgxLDIxLjc1NywyMS43NTcsMCwwLDAsLjM3NSwzLjE1MWMuMzA5Ljk4NS44Ljc0NywxLjExOC0uNTRzLjM1LS40MjUuMDQ0LDEuMDU1Yy0uMzE3LDEuNTM2LTEuMjYsMi0yLjM1MiwxLjE1LS4xNzUtLjEzNi0uMjM0LDAtLjIzNC41NTVhNC45ODgsNC45ODgsMCwwLDEtLjMsMS41bC0uMy43NjUuNDA4LjEzOUEyLjI0NywyLjI0NywwLDAsMCwyMy45NTQsMjQuMDA3Wk05LjM0NiwyMS40NjhjMi4xMTgtMS4yMzIsMi41LTIuNjY4LDEuNzkzLTYuODA1YTIxLjk0MSwyMS45NDEsMCwwLDEtLjMtMi4zYzAtMS4wMjktLjI1Ni0uNTU0LS40NDguODMyLS4yNTQsMS44MzItMS4wMTYsMy4zODktMS42NTcsMy4zODMtLjU1Ny0uMDA1LS43MzgtLjIxLS45NjgtMS4wOTQtLjQxMy0xLjU4NS4wMzctNC4wMTgsMS4xODQtNi40MDYuODQtMS43NDksMS4zLTEuOTA4LDEuMy0uNDQ4LDAsMi4yNzYtLjc3Niw1LjYyNS0xLjE4NCw1LjExNWEzLjgxNCwzLjgxNCwwLDAsMSwuMDY1LTIuMmMuMi0uNzIuMTU3LTEuODE4LS4wNjYtMS44MTgtLjI1OSwwLS43NzMsMS45MS0uODQxLDMuMTI3LS4wNiwxLjA3Ni0uMDIyLDEuMzM4LjIzMSwxLjYxMi44ODguOTYyLDIuMDUyLTEuOTczLDIuMTExLTUuMzIzLjAzMS0xLjc1OS0uMTM4LTIuMjU0LS42NzQtMS45ODItLjc4MS40LTIuODgzLDUuODgzLTIuODgzLDcuNTIzLDAsMS4yODMuMzE5LDIuMTg2Ljg4LDIuNDkxLjk1NC41MTksMS44NzYtLjQsMi41MjktMi41MzFsLjI3NS0uODk0VjE0Ljk3YzAsMS43NTktLjU2NywyLjY4Ni0yLjM1NywzLjg1MmE4Ljg5Myw4Ljg5MywwLDAsMC0uODUyLjYsOS43NTgsOS43NTgsMCwwLDAsLjg5MiwyLjUzNCw1LjI4Myw1LjI4MywwLDAsMCwuOTY5LS40ODRabTEyLjc2NC0yLjE4NGMuMjEzLS40NzUuMjUtLjk5Mi4yLTIuODE3LS4wNS0xLjk4Ni0uMS0yLjMzNy0uNDg2LTMuMTQ0LS42OTEtMS40NTgtMS41NDQtMS4wODYtMS4wNDUuNDU1LjI2NS44Mi41ODkuNjguNDc1LS4yMDUtLjA5MS0uNy4wNzktLjcyMy4zNzUtLjA0MS41NTYsMS4yODEuNDE2LDMuMDU1LS4yNDIsMy4wNTUtLjQ1LDAtLjU5LS4zOS0uODgzLTIuNDU5YTYuNzUyLDYuNzUyLDAsMCwwLS4zNjItMS43MTRjLS4yMTcsMC0uMzE0LjM4OC0uMTc5LjcxOGEyOC4yMywyOC4yMywwLDAsMSwuNDUyLDIuODU5Yy40NDEsMy41MDcsMS4wNTcsNC43MDcsMS42OSwzLjI5M1ptLTguMzguMDU2YTMuMzg1LDMuMzg1LDAsMCwwLC4wOTUtMS4zM2MtLjA2LTEuMDA4LS4wOTQtMS4wODEtLjM2NC0uNzktLjM4Ny40MTktLjgtLjM3NS0uOTQ0LTEuOC0uMTA3LTEuMDgyLS4xNC0xLjA2MS42NC0uNDE1LjEuMDgxLjM0Ni0uMTk0LjU1My0uNjExLjM3Ny0uNzYzLjUtMS42OC4yMjgtMS42OC0uMDgxLDAtLjE0Ny4xMzQtLjE0Ny4zLDAsLjQyOS0uNC4zNjgtLjQ5NC0uMDc1LS4wNTMtLjI1OC0uMTY2LS4xNjctLjM2Ny4zLS4xNi4zNjktLjM1Ni42NzEtLjQzNC42NzFzLS4xODUtLjMtLjIzNy0uNjcxYy0uMDktLjY0Ni0uMS0uNjUtLjMtLjExM2EuOTUxLjk1MSwwLDAsMC0uMDEuOTY0LDE4LjgxOCwxOC44MTgsMCwwLDEsLjUyMSwzLjc5MWMwLDEuMTc0LjgsMi4xLDEuMjY3LDEuNDYzWm0yLjY4OC0xLjU1NmE3LjA1NSw3LjA1NSwwLDAsMCwuNDE2LTQuMjU5Yy0uMjM2LTEuMTQxLS42NDUtMS41NjgtMS4yMjItMS4yNzUtLjQyOS4yMTgtMS4wODIsMi43NDYtMS4wODQsNC4yLDAsMi4yNjIsMS4wNiwzLjAxNSwxLjg5LDEuMzM3Wm0tMS4wMDctMS43OTJhMy43NywzLjc3LDAsMCwxLS4yOS0xLjQxNmMwLS43NDUuMDIyLS43NzIuMi0uMy4yMi41ODYuNjExLjY4OC43NjEuMmExLjAzNSwxLjAzNSwwLDAsMC0uMDY1LS42NTZjLS4yMzItLjQ2OS0uMi0xLjEwNy4wNDktMS4xMDcuMjgsMCwuNjcyLDEuMTU0LjY3MiwxLjk4MiwwLC42MDktLjYxMywxLjg5My0uOSwxLjg5My0uMDcsMC0uMjYtLjI2OC0uNDIyLS42Wk0xOS4zNDgsMTcuN2E2LjQ0Nyw2LjQ0NywwLDAsMC0uMTQxLTQuOTE4Yy0uMzU4LS43NzMtMS4xNTMtLjkwNi0xLjQ3OS0uMjQ4YTExLjYwNywxMS42MDcsMCwwLDAtLjQ4OSwzLjg5NUMxNy40NzcsMTguMzQ4LDE4LjcxNiwxOS4xLDE5LjM0OCwxNy43Wk0xOC4xLDE1LjUyN2EyLjQ5MiwyLjQ5MiwwLDAsMS0uMzE4LTEuNTY1Yy4wMDgtLjkwOS4wMzEtLjk5MS4xMzUtLjQ3Mi4xNTMuNzY0LjQ3MywxLjA1Mi43NTMuNjc5LjE3NC0uMjMxLjE2Ni0uMzQxLS4wNS0uNjc2LS4yODgtLjQ0Ny0uMzQ0LTEuMDc5LS4xLTEuMDc5YTUuMDM3LDUuMDM3LDAsMCwxLDEuMDE3LDIuMjVjMCwuNDgtLjU2NCwxLjMyNy0uODg0LDEuMzI3QzE4LjUyNywxNS45OTEsMTguMjc2LDE1Ljc4MiwxOC4xLDE1LjUyN1ptOC42NjItMS4zMTgsMS41NDctMS4xNzUtMS42NTgtLjAxMmMtMS40ODQtLjAxMS0xLjY1OC4wNDMtMS42NTYuNTFhMTEuNTMyLDExLjUzMiwwLDAsMCwuMiwxLjg1N2MuMDExLDAsLjcxNi0uNTM0LDEuNTY3LTEuMThaTTYuNTM1LDE0bC4xNTgtLjk0OUw1LjMsMTIuOTU2Yy0uNzY0LS4wNTItMS4zODktLjAxMi0xLjM4OS4wODhhMTQuMSwxNC4xLDAsMCwwLDIuNDQ3LDEuOTM0QzYuMzcxLDE0Ljk2MSw2LjQ0OCwxNC41MjEsNi41MzUsMTRabTkuNTI2LTIuOTQxYTEuNjI0LDEuNjI0LDAsMCwxLC44MTkuNmMuMTkyLjM0OS4yNzYuMzI2LjU3My0uMTYzLjE5MS0uMzE1LjQ0LS41NzIuNTUzLS41NzJzLjItLjA2Ni4yLS4xNDZjMC0uMjc4LTIuMTIyLTcuMzA2LTIuMi03LjNzLTIuMjcsNy4zODYtMi4zMzcsNy45MjVjLS4wMjguMjI2LjA2LjMwOS4yMzEuMjE5LjE1Mi0uMDgxLjM2My4wNjMuNDY4LjMxOS4xNy40MTUuMjQuMzgyLjY0NC0uMzA2LjM4NC0uNjU0LjU0NC0uNzQyLDEuMDQ4LS41NzlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzMzXFxcIi8+PHBhdGggZD1cXFwiTTE0LjUsMTIuMTc1YS44NS44NSwwLDAsMS0uMTE1LS4yLjczNy43MzcsMCwwLDAtLjE5NC0uMjkuMjgxLjI4MSwwLDAsMC0uMy0uMDYxYy0uMDg3LjAzNS0uMTExLjAzOS0uMTUuMDI0LS4wNjUtLjAyNi0uMDg5LS4xMDYtLjA3LS4yNDIuMDIzLS4xNjkuMi0uODI1LjU0OC0yLjA1NC43MTEtMi41LDEuNjY2LTUuNjQ2LDEuNzcyLTUuODM5LjAxMi0uMDIxLjAxMi0uMDIxLjAyNCwwLC4wNjMuMTE0LjQzMiwxLjI2Ni45MzcsMi45MjIuNjgyLDIuMjQsMS4yNSw0LjIxLDEuMjUsNC4zMzksMCwuMDc5LS4wNi4xMjctLjE4Ni4xNDctLjE1Ny4wMjYtLjMzOS4yMTItLjU4Ny42YTEuNjc0LDEuNjc0LDAsMCwxLS4yMjYuMzFjLS4wNDguMDQ2LS4wNTIuMDQ4LS4xLjA0OHMtLjA1NiwwLS4xLS4wNDNhLjk1OC45NTgsMCwwLDEtLjEtLjE0NCwxLjI2OCwxLjI2OCwwLDAsMC0uNDE0LS40MjIsMS41MjUsMS41MjUsMCwwLDAtLjczOC0uMjgxLjQzNC40MzQsMCwwLDAtLjQuMTU2LDIuNzE4LDIuNzE4LDAsMCwwLS40MTYuNmMtLjI1Ny40MjUtLjM0OC41MTMtLjQ0MS40MjZaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjM5OGFhXFxcIi8+PHBhdGggZD1cXFwiTTYuMjUyLDE0LjkyOGExOS4wNTUsMTkuMDU1LDAsMCwxLTIuMy0xLjgzOGMtLjAzMS0uMDM4LS4wMzQtLjA0NC0uMDI1LS4wNTdhMi43LDIuNywwLDAsMSwxLjE0LS4wODVjLjIzLjAxMiwxLjYxOS4xLDEuNjIxLjEwOHMtLjMsMS43NzktLjMyMSwxLjg4MUM2LjM1NywxNC45ODEsNi4zMzcsMTQuOTc5LDYuMjUyLDE0LjkyOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM2Mzk4YWFcXFwiLz48cGF0aCBkPVxcXCJNMjUuMTc3LDE1LjM1QTE0LjIzOSwxNC4yMzksMCwwLDEsMjUsMTMuNTZhLjU1My41NTMsMCwwLDEsLjA0NC0uMjljLjA4MS0uMTUxLjI0NS0uMjA1LjctLjIzLjIyOC0uMDEzLDEuMjgxLS4wMTUsMi4wMjUsMGwuNTIxLjAwOEwyNy4wMjksMTRjLTEuMTQ0Ljg2Ny0xLjgxLDEuMzY5LTEuODM0LDEuMzgyLS4wMDYsMC0uMDEyLS4wMDYtLjAxOC0uMDI3aDBaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjM5OGFhXFxcIi8+PHBhdGggZD1cXFwiTTguNTA2LDI4LjI4MWMwLS4wNzEuMTQ5LS42LjUyNy0xLjg3OC45MDUtMy4wNTcsMS4zMTktNC4xNjUsMS44MjctNC44OTJhNy42NjQsNy42NjQsMCwwLDAsLjk2OS0xLjc5MkwxMiwxOS4yOTJsLjIyNS40NDhjLjM5NC43ODQuNjMyLDEuMDExLDEuMDYyLDEuMDE2YTEuMjM5LDEuMjM5LDAsMCwwLDEuMS0xLjEzN2MwLS4xMjQuMDQ0LS4yNTEuMDg2LS4yNTFhMS4xMTksMS4xMTksMCwwLDEsLjIyNi4xNCwxLjI3MSwxLjI3MSwwLDAsMCwuNjY2LjMuODc5Ljg3OSwwLDAsMCwuNjA5LS4xNDgsMi40NywyLjQ3LDAsMCwwLC43MTEtLjc2NGMuMTg3LS4yNTIuMzQ3LS40NTkuMzU0LS40NTlzLjE0My4xNTkuMy4zNTJhNS4wOTEsNS4wOTEsMCwwLDAsLjQyMi40NjcsMS4wNDksMS4wNDksMCwwLDAsMS41NDktLjA4LDYuMTExLDYuMTExLDAsMCwwLC40NjctLjU3MmMuMTY4LS4yMjguMzA3LS40MS4zMS0uNHMuMDY2LjI2OS4xNDEuNTg0LjE2OS42Ny4yMDkuNzg5YTMuODI2LDMuODI2LDAsMCwwLC42NDIsMS4yMzQsMi4xNywyLjE3LDAsMCwxLC40NjYsMS4yNDYsMy4wNTEsMy4wNTEsMCwwLDEtLjM1MiwxLjQ0NywyLjA3LDIuMDcsMCwwLDAtLjI2Ny45MzQsMi4wMTcsMi4wMTcsMCwwLDAsLjIxMy44NTEuNzczLjc3MywwLDAsMCwxLjA2OS40MTMsMS4zNTEsMS4zNTEsMCwwLDEsLjMxNi0uMDY4Yy4yLDAsLjMxNS4xOTMuNTQyLjg4MS4xNTcuNDc0LjUsMS42MzcuNSwxLjY5NSwwLC4wMy0uMDE2LjA1MS0uMDM5LjA1MWExLjQ4NiwxLjQ4NiwwLDAsMS0uNDA3LS4yMjRjLS4yLS4xNDQtMi42MTItMi4wMjktMy40MDgtMi42NjMtMi4xMjgtMS42OTMtMi44MjgtMi4yMzMtMy4xNzEtMi40NDYtLjM3LS4yMy0uNjIyLS4yODUtLjgyNy0uMTc3LS4yNTQuMTMzLTMuNzI2LDIuODQ3LTUuNzUxLDQuNUExMC44NDYsMTAuODQ2LDAsMCwxLDguNjUsMjguMjUxYy0uMTQ5LjA4My0uMTQzLjA4MS0uMTQzLjAzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzYzOThhYVxcXCIvPlwiLFxuXHRcIkhhbWxcIjogXCI8cGF0aCBkPVxcXCJNMTUuMzExLDE2LjA0MywxMy40LDI5LjcyNmE2LjMyMiw2LjMyMiwwLDAsMS01Ljk1Ni0xLjI1bDMuMS0xMy4yNjZMNC42OSwzLjM0YTguMDMxLDguMDMxLDAsMCwxLDMuNzktLjY0Nmw1LjE0NCw5LjcsOC45MTQtNy41ODFzMywxLjA0MSwzLjI3LDIuMDQxbC0xMC41LDkuMTg0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VjZGZhN1xcXCIvPjxwYXRoIGQ9XFxcIk0yNy4wMTYsMTcuNDExYTQuMjQ0LDQuMjQ0LDAsMCwwLS41NDEtLjgxMiw1LjcsNS43LDAsMCwwLTEuNDU4LTEuMTg3LDcuMzMxLDcuMzMxLDAsMCwwLTEuNjg3LS43OTFsLS4yMjktLjA2Mi0uMTg3LS4wNjJjLS4xMjUtLjA0Mi0uMjI5LS4xLS4zMzMtLjE0NmExLjI4MiwxLjI4MiwwLDAsMS0uNDU4LS40MTdBMS43NTQsMS43NTQsMCwwLDEsMjIsMTIuNjQyYTIuNTE4LDIuNTE4LDAsMCwxLC4xLS4zNzVjLjA0Mi0uMTI1LjA4My0uMjUuMTI1LS40YTIuNjkxLDIuNjkxLDAsMCwwLC4wNjItLjZsLjEtLjA4MywxLjI1LTEuMDQxYy4yMjktLjE4Ny40NTgtLjQuNjg3LS41ODNhMi4yLDIuMiwwLDAsMSwuMjI5LjE0NnMuNjQ2LjA2MiwxLS45MTZsLS4xODctLjEyNS4xMjUtLjEuMzEyLS4yNzFhLjYxMy42MTMsMCwwLDAsLjIyOS0uMzc1LjUyOS41MjksMCwwLDAtLjQxNy4xMjVsLS4zMzMuMjUtLjIyOS4xNjdMMjIuMTg0LDYuNDc4Yy4xNDYtLjEyNS4yNzEtLjIyOS40MTctLjM1NGwuNi0uNTQxLjA2Mi0uMDYyYy4wNjIuMDQyLjEuMDgzLjE2Ny4xMjUuMTQ2LjEuMzEyLjIwOC40NTguMjkybC45MTYuNWMuMjkyLjE2Ny42LjMzMy45MTYuNDc5YTMuMzIzLDMuMzIzLDAsMCwwLC40NzkuMjA4Yy4wODMuMDIxLjE2Ny4wNjIuMjUuMDgzLjA0MiwwLC4xLjAyMS4xNDYuMDIxaC4xYS4xNTEuMTUxLDAsMCwwLC4xMjUtLjA4M1Y3LjEyM2EuMDc3LjA3NywwLDAsMSwuMDIxLS4wNjJWNi45NzdhLjEwOC4xMDgsMCwwLDAtLjA0Mi0uMDgzYy0uMDIxLS4wNDItLjA2Mi0uMDgzLS4wODMtLjEyNWExLjU5LDEuNTksMCwwLDAtLjE4Ny0uMTg3Yy0uMTI1LS4xMjUtLjI3MS0uMjI5LS40LS4zMzMtLjI3MS0uMjA4LS41NjItLjQtLjg1NC0uNTgzYTcuNTQ1LDcuNTQ1LDAsMCwwLS45LS41LDMuMzIzLDMuMzIzLDAsMCwwLS40NzktLjIwOGMtLjA4My0uMDIxLS4xNjctLjA2Mi0uMjcxLS4wODMtLjA0MiwwLS4xLS4wMjEtLjE2Ny0uMDIxYS4zMS4zMSwwLDAsMC0uMTI1LjAyMS41MjIuNTIyLDAsMCwwLS4xNjcuMSwxLjYsMS42LDAsMCwwLS4zNzUuMjA4bC0uNjI1LjM1NGMtLjE4Ny4xNDYtLjQuMzEyLS41ODMuNDU4bC0uMjA4LS4xNDZzLS44NzUuMDgzLS41ODMuNjQ2bC4wODMuMDgzYy0uODMzLjY4Ny0xLjY0NSwxLjQtMi40NTcsMi4wODMtLjgzMy43MDgtMS42NDUsMS40MTYtMi40NzgsMi4xNDVsLTEuMjI5LDEuMDgzYTEuODc4LDEuODc4LDAsMCwxLS4yMDguMTg3Yy0uMDQyLS4xMjUtLjEtLjIyOS0uMTQ2LS4zMzNsLS4yOTItLjYyNS0uNTYyLTEuMjVjLS4zNzUtLjgzMy0uNzUtMS42NjYtMS4xNDUtMi41TDExLjIwOSw0Ljg5NWwtLjE4Ny0uMzc1aC4yNXMuMDgzLS42ODctLjQxNy0uODEyYTEuNCwxLjQsMCwwLDAtLjIwOC4wMjFjLS4xODctLjM3NS0uMzU0LS43NS0uNTQxLTEuMTI1aDBsLS4wODMtLjMxMkEuMzMuMzMsMCwwLDAsOS45LDIuMWEuMzUyLjM1MiwwLDAsMC0uMS0uMDQyYy0uMDYyLS4wMjEtLjEtLjAyMS0uMTY3LS4wNDJBMS4yODEsMS4yODEsMCwwLDAsOS4zNTUsMmE0LjA1Nyw0LjA1NywwLDAsMC0uNTIxLjA0Miw4Ljc2Nyw4Ljc2NywwLDAsMC0xLjAyLjE4N2MtLjMzMy4wODMtLjY2Ni4xNjctMSwuMjcxYTMuMjcyLDMuMjcyLDAsMCwwLS40NzkuMTg3bC0uMjUuMTI1Yy0uMDQyLjAyMS0uMDgzLjA2Mi0uMTI1LjA4M0w1LjksMi45NThjLS4wMjEuMDIxLS4wMjEuMDQyLS4wNDIuMDYydi4wNjJoMFYzLjFhLjE2NC4xNjQsMCwwLDAsLjEuMTI1Yy4wNDIuMDIxLjA2Mi4wNDIuMDgzLjA0MmExLjMyNywxLjMyNywwLDAsMSwuMTQ2LjA0MiwxLjE4OCwxLjE4OCwwLDAsMCwuMjcxLjAyMSw0LjM4NCw0LjM4NCwwLDAsMCwuNTIxLS4wNDJjLjMzMy0uMDQyLjY4Ny0uMDgzLDEuMDItLjE0NmwxLjAyLS4xNjdjLjE2Ny0uMDIxLjMzMy0uMDYyLjUyMS0uMS4xNDYuMjkyLjI5Mi42LjQzNy45LS45NTguMDgzLTIuNDU3LjIwOC0zLjM5NS4zMTItLjEtLjE4Ny0uMTg3LS4zNTQtLjI5Mi0uNTQxYS4xMjcuMTI3LDAsMCwwLS4xNDYtLjA2Mi4xMDguMTA4LDAsMCwwLS4wNjIuMTQ2Yy4wNjIuMTY3LjEyNS4zMTIuMTg3LjQ3OWExLjE2NywxLjE2NywwLDAsMC0uNS4xMjVBMS44MjgsMS44MjgsMCwwLDAsNi40LDUuNjQ1YTMuNTY3LDMuNTY3LDAsMCwxLC40NTgtLjEyNWwuNDM3LDEsMS4yNSwyLjgzMiwxLjI3LDIuODMyYy40MTcuOTM3Ljg1NCwxLjg3NCwxLjI5MSwyLjgzMmgwYS4wMi4wMiwwLDAsMCwuMDIxLjAyMWwtLjE4Ny42MjUtLjUsMS43NDljLS4zMTIsMS4xNjYtLjYsMi4zNTMtLjksMy41Mkw5LjEwNSwyMi43bC0uNDE3LDEuNzdjLS4yOTIsMS4xODctLjU2MiwyLjM1My0uOSwzLjUyYS4xMjUuMTI1LDAsMCwwLC4wMjEuMDgzLDMuMDc2LDMuMDc2LDAsMCwwLC42LjU2Miw2LjA0OCw2LjA0OCwwLDAsMCwuNjg3LjQxNyw5LjQsOS40LDAsMCwwLDEuNS42LDYuOTcyLDYuOTcyLDAsMCwwLDEuNjI0LjI3MSwzLjcyOCwzLjcyOCwwLDAsMCwuODMzLS4wNDIsNi41NDcsNi41NDcsMCwwLDAsLjgzMy0uMTY3LjI1NC4yNTQsMCwwLDAsLjE2Ny0uMTg3di0uMDIxYy4yMjktMS4xNDUuNDE3LTIuMzEyLjYyNS0zLjQ1N2wuNTgzLTMuNDc4Yy4xODctMS4xNjYuNC0yLjMxMi41ODMtMy40NzguMDIxLS4xMjUuMDQyLS4yNzEuMDYyLS40LjA0Mi4wNDIuMDYyLjEuMS4xNDZhNC4xMzcsNC4xMzcsMCwwLDAsLjcwOC42NDYsNy4yMTIsNy4yMTIsMCwwLDAsMS41ODMuODMzLDExLjc3NCwxMS43NzQsMCwwLDAsMS42NjYuNSwxMC4xODIsMTAuMTgyLDAsMCwwLDEuMS4xODcsMi42MjEsMi42MjEsMCwwLDAtLjI1LDEuMjA4LjExNS4xMTUsMCwwLDAsLjA2Mi4xaC4wMjFhNS4xNjQsNS4xNjQsMCwwLDAsMS4yNy40NzksNC4zMzMsNC4zMzMsMCwwLDAsMS4zNzUuMDYyLDIuNjI3LDIuNjI3LDAsMCwwLDEuMzMzLS41NjIsMi44MjQsMi44MjQsMCwwLDAsLjgxMi0xLjE2NmwuMDIxLS4wMjFWMjEuMWwuMDYyLS41NjJ2LS4wMjFhNS40MjcsNS40MjcsMCwwLDAsLjYyNS0uNDE3LDIuNzEsMi43MSwwLDAsMCwuNjQ2LS43MjksMS44MzMsMS44MzMsMCwwLDAsLjI1LTEsMi41NjMsMi41NjMsMCwwLDAtLjI5Mi0uOTU4Wm0tLjQtMTAuNVptLTEuNDc5LTEuMWE3LjEyLDcuMTIsMCwwLDEsLjgzMy41NDFjLjEyNS4xLjI3MS4xODcuNC4zMTJhMS4yNTcsMS4yNTcsMCwwLDEsLjE2Ny4xNjdsLjA0Mi4wNDJoLS4wNDJjLS4wODMtLjAyMS0uMTQ2LS4wNDItLjIyOS0uMDYyLS4xNDYtLjA2Mi0uMzEyLS4xMjUtLjQ1OC0uMTg3YTcuMTMyLDcuMTMyLDAsMCwxLS44NzUtLjQ3OUE1LjYxLDUuNjEsMCwwLDEsMjQuMiw1LjUyYTIuNSwyLjUsMCwwLDEtLjIyOS0uMjVsLjMxMi4xMjVhNi40LDYuNCwwLDAsMSwuODU0LjQxN1ptLTEuNDE2LS45MTYuMDIxLjAyMXYuMDQyYS4wMi4wMiwwLDAsMC0uMDIxLS4wMjFWNC44OTVaTTguODc2LDIuNTYyYTUuMDIxLDUuMDIxLDAsMCwxLS45MzcuMzMzLDUuMzQ3LDUuMzQ3LDAsMCwxLS45NzkuMTY3LDQuMDEzLDQuMDEzLDAsMCwxLS41LjAyMS43ODEuNzgxLDAsMCwxLS4yMjktLjAyMUg2LjE2OWMuMDIxLDAsLjAyMS0uMDIxLjA0Mi0uMDIxLjA2Mi0uMDQyLjE0Ni0uMDYyLjIwOC0uMS4xNDYtLjA2Mi4zMTItLjEuNDU4LS4xNjcuMzEyLS4wODMuNjQ2LS4xNjcuOTc5LS4yMjlhOC40LDguNCwwLDAsMSwuOTc5LS4xMjVBMS41NzYsMS41NzYsMCwwLDAsOS4xNDcsMi40YTEuNTM2LDEuNTM2LDAsMCwxLS4yNzEuMTY3Wm0xNC40NTMsNy4xLTEuMjkxLDEtMS4yOTEsMS4wMmMtLjM1NC4yOTItLjcwOC41ODMtMS4wNjIuODU0LjAyMS0uMDIxLjA0Mi0uMDYyLjA2Mi0uMDgzLjE2Ny0uMjI5LjMzMy0uNDM3LjUtLjY0Ni4zNTQtLjQxNy42ODctLjg1NCwxLjA2Mi0xLjI1cy43NzEtLjc5MSwxLjE2Ni0xLjE0NWE0Ljg3Miw0Ljg3MiwwLDAsMSwuNjQ2LS41bC4xODctLjEyNWMuMTg3LjE0Ni40LjI5Mi41ODMuNDM3LS4xNjcuMTQ2LS4zNzUuMjkyLS41NjIuNDM3Wk04LjA2NCw3LjFsLjEuMWE1LjYzLDUuNjMsMCwwLDEsLjU4My42NDYsMi4yMSwyLjIxLDAsMCwxLC4zNzUuNzI5LjkyMS45MjEsMCwwLDEtLjA2Mi42MjVsLS4wMjEtLjA2Mkw4LjA2NCw3LjFabTEuMDIsMi4xNjZhLjcyLjcyLDAsMCwwLC4xNDYtLjI1Ljg2Ni44NjYsMCwwLDAsLjA0Mi0uNDU4QTEuNywxLjcsMCwwLDAsOC45LDcuNzI3YTQuMDE1LDQuMDE1LDAsMCwwLS45NzktLjlsLS4yMjktLjQ3OWMtLjE0Ni0uMzEyLS4yOTItLjYyNS0uNDU4LS45MTYuMzEyLS4wODMuNjg3LS4yMDgsMS4xLS4zMTJBMjAuMzEzLDIwLjMxMywwLDAsMSw5LjM1NSw3YTcuOTYzLDcuOTYzLDAsMCwxLC43NzEsMi41NDFjLjAyMS4yMDgsMCwuNDM3LDAsLjY2NnMwLC40NTguMDIxLjY4N2E3LjYwOSw3LjYwOSwwLDAsMCwuMTQ2Ljk1OEw5LjA4NCw5LjI2OFpNMTQsMjYuMjQyYS45LjksMCwwLDEtLjE4Ny4yMDguNC40LDAsMCwxLS4zMzMuMS4zNTguMzU4LDAsMCwxLS4yMjktLjIyOS45ODEuOTgxLDAsMCwxLS4wODMtLjM1NCwyLjI3NSwyLjI3NSwwLDAsMSwuMDQyLS43NSwyLjgxNiwyLjgxNiwwLDAsMSwuMjI5LS43MDgsMS40NzgsMS40NzgsMCwwLDEsLjIwOC0uMjkyLjM0MS4zNDEsMCwwLDEsLjI5Mi0uMTI1Yy4xLDAsLjIwOC4xLjI3MS4yMDhhLjc0Ljc0LDAsMCwxLC4wODMuMTg3bC0uMjUsMS40NzljLS4wMjEuMS0uMDIxLjE4Ny0uMDQyLjI3MVptMS4yMjktNy4xODUtLjM3NSwyLjE4N2EzLjMyOSwzLjMyOSwwLDAsMC0uMS0uNDM3Yy0uMS0uNC0uMjI5LS43NzEtLjM1NC0xLjE0NWExNS41MzcsMTUuNTM3LDAsMCwwLS45NTgtMi4xNjZjLjIyOS43NzEuNSwxLjUuNzcxLDIuMjQ5LjE0Ni4zNzUuMjcxLjc1LjQsMS4xbC4xODcuNTYyYzAsLjAyMS4wMjEuMDYyLjAyMS4wODMtLjA2Mi4zMzMtLjEyNS42NjYtLjE2NywxLjAybC0uMzEyLDEuOWMtLjAyMS0uMDQyLS4wMjEtLjA4My0uMDQyLS4xMjVhLjQ4Ni40ODYsMCwwLDAtLjMxMi0uMjkyLjUyNS41MjUsMCwwLDAtLjQxNy4xMjUsMS45NDQsMS45NDQsMCwwLDAtLjI3MS4zMTIsMi4wMzYsMi4wMzYsMCwwLDAtLjI3MS43NSwyLjEzMSwyLjEzMSwwLDAsMCwwLC44MTIsMS4wMjEsMS4wMjEsMCwwLDAsLjE0Ni40LjQ4Ni40ODYsMCwwLDAsLjMzMy4yNzEuNDI4LjQyOCwwLDAsMCwuMzc1LS4xNjdjLjA0Mi0uMDQyLjA4My0uMS4xMjUtLjE0Ni0uMTQ2Ljk3OS0uMzEyLDEuOTU4LS40NTgsMi45NTdhMi43MjcsMi43MjcsMCwwLDEtLjU2Mi4xMjVjLS4yNS4wNDItLjUuMDYyLS43NS4wODNhNS41MzEsNS41MzEsMCwwLDEtMS41NDEtLjE0Niw3Ljg0Niw3Ljg0NiwwLDAsMS0xLjUtLjQ3OSwzLjYyNSwzLjYyNSwwLDAsMS0xLjIyOS0uODU0Yy4zMTItMS4xNDUuNjY2LTIuMjkxLDEuMDItMy40MzZsLjU0MS0xLjcyOS41MjEtMS43NDljLjM1NC0xLjE2Ni43MDgtMi4zMzMsMS4wNDEtMy41LjE2Ny0uNTgzLjMxMi0xLjE2Ni40NzktMS43NDlhMy42MjYsMy42MjYsMCwwLDAsLjE4Ny0xLjgzM3YtLjAyMWMtLjAyMS0uMDIxLS4wNDItLjAyMS0uMDQyLDBhMy4xMDksMy4xMDksMCwwLDAtLjI1LjI5MmMtLjIyOS0uNTIxLS40NzktMS4wMi0uNzA4LTEuNTQxYTQuNzY1LDQuNzY1LDAsMCwxLS4xNjctLjU4Myw3LjE2NSw3LjE2NSwwLDAsMS0uMjA4LTEuMzEyYy0uMDIxLS4yMjktLjAyMS0uNDM3LS4wMjEtLjY2NnMuMDIxLS40NTgsMC0uNjg3YTcuNjI1LDcuNjI1LDAsMCwwLS44MzMtMi42LDEyLjU4NywxMi41ODcsMCwwLDAtMS4xLTEuODMzYy42ODctLjE4NywxLjQxNi0uMzc1LDItLjQ3OS4wODMuMTg3LjE4Ny4zNTQuMjcxLjU0MUwxMS45MzgsNy42bDEuMjUsMi40MzcuNjI1LDEuMjA4LjMxMi42Yy4wODMuMTI1LjEyNS4yNzEuMjA4LjM3NWwtLjgxMi43NWEuMDY5LjA2OSwwLDAsMCwwLC4xLjA3My4wNzMsMCwwLDAsLjEuMDIxYy40MzctLjMxMi44NzUtLjY0NiwxLjMxMi0uOTc5bDEuMzEyLTFjLjg3NS0uNjY2LDEuNzI5LTEuMzMzLDIuNTgyLTJzMS43MDgtMS4zNTQsMi41NjItMi4wNDFsLjAyMS0uMDIxYTI0LjMxNiwyNC4zMTYsMCwwLDAsMS44NzQsMS42NDUsNi4xNjIsNi4xNjIsMCwwLDAtLjg3NS41NDEsOC45NDMsOC45NDMsMCwwLDAtMS4yMjksMS4xMjUsMTIuMjc5LDEyLjI3OSwwLDAsMC0xLjA0MSwxLjI5MSwxMS43NzgsMTEuNzc4LDAsMCwwLS42NDYsMWMtMS4yNywxLjA0MS0yLjUyLDIuMS0zLjcyOCwzLjIwN2EuMTI4LjEyOCwwLDAsMC0uMDIxLjE0Ni4xMzguMTM4LDAsMCwwLC4xNDYuMDQyLDkuMTM0LDkuMTM0LDAsMCwwLS4zMTIsMS4yNWMtLjEyNS41ODMtLjI1LDEuMTY2LS4zNTQsMS43NDlabTkuMjA1LDIuNzkxYTIuNTI3LDIuNTI3LDAsMCwxLTEuMDIuNDU4LDMuNzY3LDMuNzY3LDAsMCwxLTEuMTg3LjA0Miw3LjM2MSw3LjM2MSwwLDAsMS0xLjE0NS0uMjA4LDIuMDM3LDIuMDM3LDAsMCwxLC4xNjctMS4wNDFjLjE0Ni4wMjEuMjcxLjAyMS40MTcuMDQyYS4xMTQuMTE0LDAsMCwwLC4xMjUtLjA4My4xMjQuMTI0LDAsMCwwLS4wODMtLjE2N2gwYy0uMS0uMDQyLS4xODctLjA2Mi0uMjkyLS4xYTIuNzcxLDIuNzcxLDAsMCwxLC4yOTItLjRjLjEyNS0uMTI1LjI1LS4yNS4zNzUtLjM1NGEzLjk5MiwzLjk5MiwwLDAsMCwuODU0LjQsMi44ODEsMi44ODEsMCwwLDAsMS4xMjUuMSwxLjU1LDEuNTUsMCwwLDAsMS4wMi0uNTQxLDEuNTI0LDEuNTI0LDAsMCwwLC4zNTQtLjkxNi44NS44NSwwLDAsMSwuMDIxLjQsNC41MTEsNC41MTEsMCwwLDEtLjA4My41MjFsLS4wNjIuMzEyTDI1LDIwLjQ5NGEuOTE5LjkxOSwwLDAsMC0uMzMzLjM1NC43NTEuNzUxLDAsMCwwLC40NzksMGMuMDIxLDAsLjAyMS0uMDIxLjA0Mi0uMDIxLS4wMjEuMDYyLS4wMjEuMS0uMDQyLjE2N2EyLjU1MiwyLjU1MiwwLDAsMS0uNzA4Ljg1NFpNMjYuNSwxOS4xMTlhMi4yLDIuMiwwLDAsMS0uNDU4LjYyNSwyLjYzOCwyLjYzOCwwLDAsMS0uMjcxLjIyOSwyLjU4NSwyLjU4NSwwLDAsMC0uMDYyLS41NjIsMS41MzQsMS41MzQsMCwwLDAtLjA4My0uMjkyLjUzMS41MzEsMCwwLDAtLjE4Ny0uMjVoMGMtLjAyMSwwLS4wNDIsMC0uMDQyLjAyMWgwYTEuOTUsMS45NSwwLDAsMS0uNTYyLjc3MSwxLjQyOSwxLjQyOSwwLDAsMS0uODEyLjI5MiwyLjg1NywyLjg1NywwLDAsMS0uOTE2LS4xMjVjLS4zMTItLjA4My0uNjI1LS4xODctLjkzNy0uMjkybC0uMDQyLS4wMjFhLjIuMiwwLDAsMC0uMTg3LjA0MmMtLjE2Ny4yMDgtLjI5Mi40LS40MzcuNi0uMS4xNjctLjE4Ny4zMTItLjI3MS40NzktLjM3NS0uMTQ2LS43MjktLjI3MS0xLjEtLjQxNy0uNTIxLS4yMDgtMS4wNDEtLjQxNy0xLjUyLS42NjZhNy42NDgsNy42NDgsMCwwLDEtMS40LS44MTIsMi45NDksMi45NDksMCwwLDEtLjk3OS0xLjA2MnYtLjAyMWEuNDA5LjQwOSwwLDAsMC0uMTg3LS4xODdjMC0uMDQyLjAyMS0uMS4wMjEtLjE0NmE3LjM3LDcuMzcsMCwwLDAsLjEtMS41MmMxLjY4Ny0xLjE4NywzLjMzMi0yLjQzNyw0Ljk1Ny0zLjcyOGwtLjA2Mi4xODdhMy4yNywzLjI3LDAsMCwwLS4xNDYsMS4wMkEyLjA4OSwyLjA4OSwwLDAsMCwyMi4xMjIsMTUuMWEyLjgyNSwyLjgyNSwwLDAsMCwuNDc5LjE4N2wuMjUuMDYyLjIwOC4wNDJhNi42NDUsNi42NDUsMCwwLDEsMS41NDEuNjI1LDYuMTU2LDYuMTU2LDAsMCwxLDEuMzEyLjk3OSwyLjI3NSwyLjI3NSwwLDAsMSwuNzA4LDEuMzMzLDEuNTEsMS41MSwwLDAsMS0uMTI1Ljc5MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMzZjNlMjlcXFwiLz48cGF0aCBkPVxcXCJNMTIuNjY3LDIzLjkwOWEyLjE2MSwyLjE2MSwwLDAsMC0uMzU0Ljc3MSwxLjU1NiwxLjU1NiwwLDAsMC0uMDYyLjQxN2wtLjAyMS40MTdhNC41MzMsNC41MzMsMCwwLDAsLjE0NiwxLjY2Niw3LjY0Nyw3LjY0NywwLDAsMCwuNjY2LDEuNTJjLS4wODMtLjI3MS0uMTg3LS41MjEtLjI3MS0uNzcxcy0uMTY3LS41MjEtLjIyOS0uNzkxYTUuODksNS44OSwwLDAsMS0uMS0xLjZsLjAyMS0uNDE3YTIuNTUyLDIuNTUyLDAsMCwxLC4wNDItLjQsMy4xMzcsMy4xMzcsMCwwLDEsLjI5Mi0uNzI5LDIuOTY3LDIuOTY3LDAsMCwxLC41MjEtLjYyNSwyLjU5MSwyLjU5MSwwLDAsMSwuNjY2LS40NzksMi43NiwyLjc2LDAsMCwwLTEuMzEyLDEuMDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojM2YzZTI5XFxcIi8+XCIsXG5cdFwiSGFuZGxlYmFyc1wiOiBcIjxwYXRoIGQ9XFxcIk0xMi4zLDEzLjFhNC4yMzgsNC4yMzgsMCwwLDEsMi43MjguOUE0LjU5Miw0LjU5MiwwLDAsMSwxNiwxNS4xMjdhNC4xNDQsNC4xNDQsMCwwLDEsMi4wMzktMS43NDcsNC43NTcsNC43NTcsMCwwLDEsMy4yODYuMDE5LDcuODMzLDcuODMzLDAsMCwxLDIuNDQzLDEuNTU4Yy41NjguNSwxLjA5NCwxLjA1LDEuNjc5LDEuNTMzYTMuNCwzLjQsMCwwLDAsMS4wMTkuNjE0LDEuNDIsMS40MiwwLDAsMCwxLjQ2LS4zNzkuOTY1Ljk2NSwwLDAsMC0uMDU1LTEuMzIzLjU0NS41NDUsMCwwLDAtLjguMTA4LjY1OS42NTksMCwwLDAsLjA1LjY4NiwxLjIyMiwxLjIyMiwwLDAsMS0uNi0uOTI2LDEuMDIyLDEuMDIyLDAsMCwxLC42OTEtMS4wMzIsMi4wMDUsMi4wMDUsMCwwLDEsMi4zMTIuNjYxLDMuMjU4LDMuMjU4LDAsMCwxLC40NCwyLjMwOCwyLjc2MiwyLjc2MiwwLDAsMS0xLjEzNywxLjg3Miw1LjA1MSw1LjA1MSwwLDAsMS0zLjAxMy44LDguNDg4LDguNDg4LDAsMCwxLTIuOTMyLS42M2MtMS41NTgtLjYyNi0zLjAxNi0xLjQ5Mi00LjYyNS0xLjk5MmExMy45NzcsMTMuOTc3LDAsMCwwLTEuNy0uMzYzYy0uNDMuMDA3LS44NjEtLjAxNS0xLjI5LjAxNWE1LjY5Miw1LjY5MiwwLDAsMC0xLjUzNC4zNDljLTEuNjM2LjUwOS0zLjExNiwxLjQtNC43LDIuMDI0YTcuNjI1LDcuNjI1LDAsMCwxLTQuMjQ5LjQ3NCwzLjc0LDMuNzQsMCwwLDEtMi4xMjUtMS4xNEEyLjg1NiwyLjg1NiwwLDAsMSwyLDE2LjY2OGEyLjcyMiwyLjcyMiwwLDAsMSwuNTU1LTEuODc0LDEuOTk0LDEuOTk0LDAsMCwxLDEuNjg3LS42OCwxLjQyNSwxLjQyNSwwLDAsMSwxLjA2My41MiwxLjA0LDEuMDQsMCwwLDEsLjEyMi45MTEsMS40NTcsMS40NTcsMCwwLDEtLjU1Ni42NDQuNjQzLjY0MywwLDAsMCwuMDUxLS42ODEuNTQ3LjU0NywwLDAsMC0uODMxLS4wNzkuOTc1Ljk3NSwwLDAsMC0uMTUxLDEuMTEsMS4zMzEsMS4zMzEsMCwwLDAsMS4wMzIuNjIzLDIuMzMyLDIuMzMyLDAsMCwwLDEuNi0uN0EyOC41MjYsMjguNTI2LDAsMCwxLDkuNCwxNC4wNTMsNS4yNTEsNS4yNTEsMCwwLDEsMTIuMywxMy4xWlxcXCIgc3R5bGU9XFxcImZpbGw6I2MxOTc3MFxcXCIvPlwiLFxuXHRcIkhhc2tlbGxcIjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIwLjk5NlxcXCIgeTE9XFxcIi0yMDYuMDU3XFxcIiB4Mj1cXFwiMC45NTFcXFwiIHkyPVxcXCItMjA2LjA1N1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgyNTkuOTQxLCAwLCAwLCAtMTgzLjQ4NywgLTIzNy45NDEsIC0zNzc5Mi43ODgpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmFiYTA5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYjQyYzAxXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9oYXNrZWxsMjwvdGl0bGU+PHBhdGggZD1cXFwiTTIsMjUuODgyLDguNTg4LDE2LDIsNi4xMThINi45NDFMMTMuNTI5LDE2LDYuOTQxLDI1Ljg4MlptNi41ODgsMEwxNS4xNzcsMTYsOC41ODgsNi4xMThoNC45NDFMMjYuNzA2LDI1Ljg4MkgyMS43NjVsLTQuMTE3LTYuMTc2LTQuMTE4LDYuMTc2Wk0yNC41MSwyMC4xMThsLTIuMi0zLjI5NEgzMHYzLjI5NFptLTMuMjk0LTQuOTQxLTIuMi0zLjI5NEgzMHYzLjI5NFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz5cIixcblx0XCJIYXhlXCI6IFwiPHBhdGggZD1cXFwiTTE2LDUuNSw1LjUsMTYsMTYsMjYuNSwyNi41LDE2LDE2LDUuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2Y2ODcxMlxcXCIvPjxwYXRoIGQ9XFxcIk0yLDIsMTYsNS41LDUuNSwxNiwyLDJcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWIyMGJcXFwiLz48cGF0aCBkPVxcXCJNMzAsMiwyNi41LDE2LDE2LDUuNSwzMCwyXFxcIiBzdHlsZT1cXFwiZmlsbDojZjQ3MjE2XFxcIi8+PHBhdGggZD1cXFwiTTMwLDMwLDE2LDI2LjUsMjYuNSwxNiwzMCwzMFxcXCIgc3R5bGU9XFxcImZpbGw6I2YyNWMxOVxcXCIvPjxwYXRoIGQ9XFxcIk0yLDMwLDUuNSwxNiwxNiwyNi41LDIsMzBcXFwiIHN0eWxlPVxcXCJmaWxsOiNmODljMGVcXFwiLz48cGF0aCBkPVxcXCJNMTYsNS41LDIsMkg5bDcsMy41XFxcIiBzdHlsZT1cXFwiZmlsbDojZmJjNzA3XFxcIi8+PHBhdGggZD1cXFwiTTE2LDUuNSwzMCwySDIzTDE2LDUuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZiYzcwN1xcXCIvPjxwYXRoIGQ9XFxcIk0xNiwyNi41LDMwLDMwSDIzbC03LTMuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2Y2ODcxMlxcXCIvPjxwYXRoIGQ9XFxcIk0xNiwyNi41LDIsMzBIOWw3LTMuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2YyNWMxOVxcXCIvPjxwYXRoIGQ9XFxcIk01LjUsMTYsMiwzMFYyM2wzLjUtN1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZjIwMFxcXCIvPjxwYXRoIGQ9XFxcIk01LjUsMTYsMiwyVjlsMy41LDdcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmYyMDBcXFwiLz48cGF0aCBkPVxcXCJNMjYuNSwxNiwzMCwyVjlsLTMuNSw3XFxcIiBzdHlsZT1cXFwiZmlsbDojZjE0NzFkXFxcIi8+PHBhdGggZD1cXFwiTTI2LjUsMTYsMzAsMzBWMjNsLTMuNS03XFxcIiBzdHlsZT1cXFwiZmlsbDojZjE0NzFkXFxcIi8+XCIsXG5cdFwiSExTTFwiOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiOS41MjUgMjEuOTQ3IDcuNTYgMjEuOTQ3IDcuNTYgMTcuMSAzLjk1OCAxNy4xIDMuOTU4IDIxLjk0NyAyIDIxLjk0NyAyIDEwLjA0NCAzLjk1OCAxMC4wNDQgMy45NTggMTQuNzkyIDcuNTYgMTQuNzkyIDcuNTYgMTAuMDQ0IDkuNTI1IDEwLjA0NCA5LjUyNSAyMS45NDdcXFwiIHN0eWxlPVxcXCJmaWxsOmJsdWVcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE2LjY5MiAyMS45NDcgMTEuNTEzIDIxLjk0NyAxMS41MTMgMTAuMDQ0IDEzLjQ3MiAxMC4wNDQgMTMuNDcyIDE5Ljc3MyAxNi42OTIgMTkuNzczIDE2LjY5MiAyMS45NDdcXFwiIHN0eWxlPVxcXCJmaWxsOmJsdWVcXFwiLz48cGF0aCBkPVxcXCJNMTcuNDYyLDIxLjQ5MVYxOC44MzRhMy42NzYsMy42NzYsMCwwLDAsMS4xNDYuOTA5LDIuODA5LDIuODA5LDAsMCwwLDEuMjQ5LjMsMi4wNSwyLjA1LDAsMCwwLC42NDYtLjA5MiwxLjMwOSwxLjMwOSwwLDAsMCwuNDYxLS4yNTIsMS4wMjksMS4wMjksMCwwLDAsLjI3Ni0uMzgyLDEuMjMxLDEuMjMxLDAsMCwwLC4wOTEtLjQ3OCwxLjMsMS4zLDAsMCwwLS4xNDUtLjYyMywxLjkwNywxLjkwNywwLDAsMC0uNC0uNTA2LDQuMDc3LDQuMDc3LDAsMCwwLS42LS40NDhxLS4zNDYtLjIxNS0uNzQ2LS40MzlhNC4wNDUsNC4wNDUsMCwwLDEtMS41MTktMS40MTksMy44ODQsMy44ODQsMCwwLDEtLjUtMi4wMjYsNC4yMzIsNC4yMzIsMCwwLDEsLjI3My0xLjYsMy4wMiwzLjAyLDAsMCwxLC43NDQtMS4xLDIuOTM4LDIuOTM4LDAsMCwxLDEuMDg4LS42MzQsNC4xNjcsNC4xNjcsMCwwLDEsMS4zMS0uMiw1LjgxNiw1LjgxNiwwLDAsMSwxLjIuMTExLDMuOCwzLjgsMCwwLDEsLjk2Ny4zNDV2Mi40ODJhMi44NTksMi44NTksMCwwLDAtLjQ3Ni0uMzY1LDMuMjEyLDMuMjEyLDAsMCwwLS41My0uMjYyQTMuMSwzLjEsMCwwLDAsMjEuNDYsMTJhMi43OTQsMi43OTQsMCwwLDAtLjUxMi0uMDUsMS45OTQsMS45OTQsMCwwLDAtLjYwNi4wODcsMS4zNDcsMS4zNDcsMCwwLDAtLjQ2MS4yNDUsMS4wOTIsMS4wOTIsMCwwLDAtLjI5MS4zNzcsMS4xNDQsMS4xNDQsMCwwLDAtLjEuNDk0LDEuMiwxLjIsMCwwLDAsLjExNS41MzYsMS42NTcsMS42NTcsMCwwLDAsLjMyOC40NDgsMy40NjEsMy40NjEsMCwwLDAsLjUxNS40MTVjLjIuMTM2LjQzLjI3NS42ODYuNDE5YTcuMDk0LDcuMDk0LDAsMCwxLC45MzYuNjM1LDMuNzEyLDMuNzEyLDAsMCwxLC43MTMuNzU5LDMuMjY5LDMuMjY5LDAsMCwxLC40NTUuOTY3LDQuNTczLDQuNTczLDAsMCwxLC4xNTgsMS4yNjYsNC40MzksNC40MzksMCwwLDEtLjI3NywxLjY3MiwyLjg4OCwyLjg4OCwwLDAsMS0uNzQ5LDEuMSwyLjgyMywyLjgyMywwLDAsMS0xLjEuNiw0Ljc0Miw0Ljc0MiwwLDAsMS0xLjMyNS4xODIsNS40NzYsNS40NzYsMCwwLDEtMS4zNjEtLjE2NkEzLjQxLDMuNDEsMCwwLDEsMTcuNDYyLDIxLjQ5MVpcXFwiIHN0eWxlPVxcXCJmaWxsOmJsdWVcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjMwIDIxLjk0NyAyNC44MjIgMjEuOTQ3IDI0LjgyMiAxMC4wNDQgMjYuNzggMTAuMDQ0IDI2Ljc4IDE5Ljc3MyAzMCAxOS43NzMgMzAgMjEuOTQ3XFxcIiBzdHlsZT1cXFwiZmlsbDpibHVlXFxcIi8+XCIsXG5cdFwiSFRNTFwiOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiNS45MDIgMjcuMjAxIDMuNjU1IDIgMjguMzQ1IDIgMjYuMDk1IDI3LjE5NyAxNS45ODUgMzAgNS45MDIgMjcuMjAxXFxcIiBzdHlsZT1cXFwiZmlsbDojZTQ0ZjI2XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNiAyNy44NTggMjQuMTcgMjUuNTkzIDI2LjA5MiA0LjA2MSAxNiA0LjA2MSAxNiAyNy44NThcXFwiIHN0eWxlPVxcXCJmaWxsOiNmMTY2MmFcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE2IDEzLjQwNyAxMS45MSAxMy40MDcgMTEuNjI4IDEwLjI0MiAxNiAxMC4yNDIgMTYgNy4xNTEgMTUuOTg5IDcuMTUxIDguMjUgNy4xNTEgOC4zMjQgNy45ODEgOS4wODMgMTYuNDk4IDE2IDE2LjQ5OCAxNiAxMy40MDdcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYmViZWJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE2IDIxLjQzNCAxNS45ODYgMjEuNDM4IDEyLjU0NCAyMC41MDkgMTIuMzI0IDE4LjA0NCAxMC42NTEgMTguMDQ0IDkuMjIxIDE4LjA0NCA5LjY1NCAyMi44OTYgMTUuOTg2IDI0LjY1NCAxNiAyNC42NSAxNiAyMS40MzRcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYmViZWJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE1Ljk4OSAxMy40MDcgMTUuOTg5IDE2LjQ5OCAxOS43OTUgMTYuNDk4IDE5LjQzNyAyMC41MDcgMTUuOTg5IDIxLjQzNyAxNS45ODkgMjQuNjUzIDIyLjMyNiAyMi44OTYgMjIuMzcyIDIyLjM3NCAyMy4wOTggMTQuMjM3IDIzLjE3NCAxMy40MDcgMjIuMzQxIDEzLjQwNyAxNS45ODkgMTMuNDA3XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNS45ODkgNy4xNTEgMTUuOTg5IDkuMDcxIDE1Ljk4OSAxMC4yMzUgMTUuOTg5IDEwLjI0MiAyMy40NDUgMTAuMjQyIDIzLjQ0NSAxMC4yNDIgMjMuNDU1IDEwLjI0MiAyMy41MTcgOS41NDggMjMuNjU4IDcuOTgxIDIzLjczMiA3LjE1MSAxNS45ODkgNy4xNTFcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0XCJIVFRQXCI6IFwiPGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJhXFxcIiBjeD1cXFwiMTIuMjc4XFxcIiBjeT1cXFwiMjQuNTU3XFxcIiByPVxcXCIxOC4zNzFcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTEsIC0wLjAwMSwgMzQuMDAxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2QzZTlmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xNTVcXFwiIHN0b3AtY29sb3I9XFxcIiNkM2U5ZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzVcXFwiIHN0b3AtY29sb3I9XFxcIiM0MDc0YWVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMzNjQ4NmNcXFwiLz48L3JhZGlhbEdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiYlxcXCIgY3g9XFxcIjEwLjY1N1xcXCIgY3k9XFxcIjI2Ljc0NlxcXCIgcj1cXFwiMjYuNjZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTEsIC0wLjAwMSwgMzQuMDAxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjE2NVxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJjXFxcIiBjeD1cXFwiLTQ1LjA1XFxcIiBjeT1cXFwiOS4yODVcXFwiIHI9XFxcIjQuMTE1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0yMS45NzEgNDEuOTQyKSByb3RhdGUoMTQzLjczNClcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJkXFxcIiBjeD1cXFwiLTQxLjQ1NlxcXCIgY3k9XFxcIjMyLjE1NFxcXCIgcj1cXFwiNC4xMTVcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMy41NzEgODcuMDc1KSByb3RhdGUoMTQzLjczNCkgc2NhbGUoMS4yOTcpXFxcIiB4bGluazpocmVmPVxcXCIjY1xcXCIvPjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiZVxcXCIgY3g9XFxcIi00OC40ODVcXFwiIGN5PVxcXCIxMy4yMzlcXFwiIHI9XFxcIjQuMTE1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0yMy4wODQgNTUuNDEzKSByb3RhdGUoMTQzLjczNClcXFwiIHhsaW5rOmhyZWY9XFxcIiNjXFxcIi8+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJmXFxcIiBjeD1cXFwiLTQwLjg4M1xcXCIgY3k9XFxcIjE2LjAzNlxcXCIgcj1cXFwiNC4xMTVcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoLTAuODcsIDAuNjM5LCAtMC42MzgsIC0wLjg3LCAtOS4zNTEsIDQ3LjcwNilcXFwiIHhsaW5rOmhyZWY9XFxcIiNjXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJnXFxcIiB4MT1cXFwiLTY2LjUwMlxcXCIgeTE9XFxcIjIuMjE5XFxcIiB4Mj1cXFwiLTY0LjYyNlxcXCIgeTI9XFxcIjYuNzQ5XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuOTM5LCAtMC44NzksIC0wLjY4MywgLTAuNzMsIDg0LjgxLCAtMzMuNjI4KVxcXCIgeGxpbms6aHJlZj1cXFwiI2NcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImhcXFwiIHgxPVxcXCItMjYuNzkxXFxcIiB5MT1cXFwiMzkuMTU5XFxcIiB4Mj1cXFwiLTI0Ljk5OVxcXCIgeTI9XFxcIjQ0LjY4M1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLjEzMSwgMC42MTMsIDAuNDc3LCAtMC44NzksIDIxLjY0OCwgNjkuMDcxKVxcXCIgeGxpbms6aHJlZj1cXFwiI2NcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImlcXFwiIHgxPVxcXCItNjMuMzg0XFxcIiB5MT1cXFwiOC4xNzdcXFwiIHgyPVxcXCItNjMuNTdcXFwiIHkyPVxcXCI0LjY5XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuOTE4LCAtMC44NTksIC0wLjY2OCwgLTAuNzEzLCA3Ny44NTcsIC0zNi40OTMpXFxcIiB4bGluazpocmVmPVxcXCIjY1xcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwialxcXCIgeDE9XFxcIi05OS4yNTlcXFwiIHkxPVxcXCI4OS41NDVcXFwiIHgyPVxcXCItOTguODI1XFxcIiB5Mj1cXFwiOTMuMDIzXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KC0xLjI4LCAtMC4xMjYsIC0wLjA5OCwgMC45OTUsIC0xMDEuNjM3LCAtOTMuMDE1KVxcXCIgeGxpbms6aHJlZj1cXFwiI2NcXFwiLz48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImtcXFwiIGN4PVxcXCItMjAuNzEyXFxcIiBjeT1cXFwiNTcuNjFcXFwiIHI9XFxcIjIuODM2XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAsIC0wLjg0MywgLTAuNzIxLCAwLCAyNi42MjUsIC0yMS42OTYpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNzI5ZmNmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjM2I2MWE2XFxcIi8+PC9yYWRpYWxHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImxcXFwiIGN4PVxcXCItMjAuNzEyXFxcIiBjeT1cXFwiMzkuODU4XFxcIiByPVxcXCIyLjgzNlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgyNi42MjUgNjMuMDk2KSByb3RhdGUoOTApIHNjYWxlKDAuODQzIDAuNzIxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzcyOWZjZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzUwOWUyZlxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfaHR0cDwvdGl0bGU+PHBhdGggZD1cXFwiTTI4LjAyNiwxNC4yQTExLjg3NywxMS44NzcsMCwxLDEsMTYuMTQ5LDIuMzI1LDExLjg3OCwxMS44NzgsMCwwLDEsMjguMDI2LDE0LjJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTE2LjE0OSwyNi4zODZBMTIuMTgzLDEyLjE4MywwLDEsMSwyOC4zMzMsMTQuMiwxMi4yLDEyLjIsMCwwLDEsMTYuMTQ5LDI2LjM4NlptMC0yMy43NTRBMTEuNTcxLDExLjU3MSwwLDEsMCwyNy43MiwxNC4yLDExLjU4NCwxMS41ODQsMCwwLDAsMTYuMTQ5LDIuNjMyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzM5Mzk2Y1xcXCIvPjxwYXRoIGQ9XFxcIk0yNy42OTMsMTIuNDI0aDBsLS4zMjguMzcxYTcsNywwLDAsMC0uNjU2LS42NDRsLS41LjA3NC0uNDYtLjUxOXYuNjQzbC4zOTQuMy4yNjIuMy4zNS0uNGMuMDg4LjE2NS4xNzUuMzMuMjYzLjV2LjQ5NWwtLjM5NC40NDUtLjcyMi41LS41NDYuNTQ1LS4zNS0uNC4xNzUtLjQ0NS0uMzUtLjQtLjU5MS0xLjI2Mi0uNS0uNTY5TDIzLjYsMTIuMWwuMi43MTguMzcxLjQyMWExNy4wNjksMTcuMDY5LDAsMCwwLC43LDEuNzgzLDkuOTc5LDkuOTc5LDAsMCwwLDEuMjY4LS4xdi4zNDdsLS41MjUsMS4yODctLjQ4MS41NDQtLjM5NC44NDNWMTkuMzNsLjEzMi41NDUtLjIxOS4yNDctLjQ4Mi4zLS41LjQyMS40MTYuNDctLjU2OS41LjEwOS4zMjEtLjg1My45NjZIMjIuMmwtLjQ4MS4zaC0uMzA3di0uNGwtLjEzLS43OTNjLS4xNjktLjUtLjM0Ni0uOTkxLS41MjUtMS40ODQsMC0uMzY0LjAyMi0uNzI1LjA0NC0xLjA4OWwuMjE5LS40OTUtLjMwNy0uNTk1LjAyMi0uODE3LS40MTYtLjQ3LjIwOC0uNjgtLjMzOC0uMzg0SDE5LjZsLS4yLS4yMjMtLjU5MS4zNzItLjI0LS4yNzMtLjU0Ny40N0wxNi45MTEsMTUuMjdsLS40MzctMS4wNC4zOTQtLjU5My0uMjE5LS4yNDcuNDgxLTEuMTM5Yy4zOTUtLjQ5MS44MDctLjk2MywxLjIyNS0xLjQzNmwuNzQ0LS4yLjgzMS0uMS41NjkuMTQ5LjgwOS44MTYuMjg0LS4zMjEuMzkzLS4wNDkuNzQ0LjI0N0gyMy4zbC4zOTQtLjM0Ny4xNzUtLjI0Ny0uMzk0LS4yNDctLjY1Ni0uMDQ5YTYuNiw2LjYsMCwwLDAtLjU2OC0uNzQzbC0uMjE5LjEtLjA4OC42NDQtLjM5NC0uNDQ1LS4wODctLjUtLjQzNy0uMzQ2aC0uMTc2bC40MzguNDk1LS4xNzUuNDQ1LS4zNS4xLjIxOS0uNDQ1LS4zOTQtLjItLjM0OS0uNC0uNjU3LjE0OC0uMDg3LjItLjM5NC4yNDgtLjIxOS41NDUtLjU0Ni4yNzItLjI0MS0uMjcySDE3LjgzVjkuNDI4bC41NjktLjNoLjQzN2wtLjA4OC0uMzQ2TDE4LjQsOC40MzhsLjU5LS4xMjQuMzI4LS4zNzEuMjYyLS40NDZoLjQ4MmwtLjEzMi0uMzQ2LjMwNy0uMnYuNGwuNjU2LjE0OC42NTYtLjU0NC4wNDQtLjI0OC41NjgtLjRhNC4zNTMsNC4zNTMsMCwwLDAtLjYxMi4xVjUuOTYzbC4yMTktLjVoLS4yMTlsLS40OC40NDUtLjEzMi4yNDguMTMyLjM0Ny0uMjE5LjU5My0uMzUtLjItLjMwNi0uMzQ2LS40ODIuMzQ2LS4xNzUtLjc5Mi44MzEtLjU0NHYtLjNsLjUyNS0uMzQ2LjgzMS0uMi41NjkuMiwxLjA0OS4yLS4yNjIuM0gyMi41MWwuNTY5LjU5NC40MzctLjQ5NS4xMzMtLjIxOGExNS41MywxNS41MywwLDAsMSwyLjYzNSwzLjE0N0ExMS40NTIsMTEuNDUyLDAsMCwxLDI3LjY5MywxMi40MjRaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTYuODYxLDUuNTE3bC0uMDQ0LjMuMzA3LjIuNTI0LS4zNDYtLjI2Mi0uMy0uMzUuMi0uMTc0LS4wNVxcXCIgc3R5bGU9XFxcImZpbGw6IzIwNGE4NztmaWxsLW9wYWNpdHk6MC43MTM0NTAzMTI2MTQ0NDA5XFxcIi8+PHBhdGggZD1cXFwiTTE3LjM0MywzLjQ4OGwtMS4xMzgtLjQ0Ni0xLjMxMi4xNDgtMS42MTkuNDQ1LS4zMDYuMywxLjAwNi42OTN2LjRsLS4zOTQuNC41MjUsMS4wNC4zNDktLjIuNDM4LS42OTNhMTUuMDUzLDE1LjA1MywwLDAsMCwxLjkyNC0uNzQzbC41MjUtMS4zMzdcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMDRhODc7ZmlsbC1vcGFjaXR5OjAuNzEzNDUwMzEyNjE0NDQwOVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC41MjQsNy42NDcsMTguMzQ5LDcuMmwtLjMwNy4xLjA4OC41NDQuMzk0LS4yXFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTguNyw3LjU0N2wtLjA4OC41OTUuNDgxLS4xLjM1LS4zNDYtLjMwNi0uM2MtLjEtLjI3NC0uMjIxLS41MjktLjM1LS43OTJoLS4yNjJ2LjNsLjE3NC4ydi40NDVcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMDRhODc7ZmlsbC1vcGFjaXR5OjAuNzEzNDUwMzEyNjE0NDQwOVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4yMjUsMTYuOTUzbC0uMzUtLjY5My0uNjU2LS4xNDgtLjM1LS45NC0uODc1LjEtLjc0My0uNTQ0LS43ODguNjkzdi4xMDlhMywzLDAsMCwxLS43NDMtLjIwOWwtLjE3NS0uNDk1VjE0LjI4bC0uNTI1LjA0OXEuMDY2LS41Mi4xMzEtMS4wMzlINi44NDVsLS4zMDYuNC0uMzA2LjE0OEw1LjgsMTMuNTg3bC0uMDQ0LS41NDUuMDg4LS41OTQuNjU2LS40OTVINy4wMmwuMDg3LS4zLjY1Ni4xNDguNDgxLjU5NS4wODgtLjk5MS44MzEtLjY5My4zMDYtLjc0My42MTItLjI0Ny4zNS0uNDk1Ljc4Ny0uMTQ5LjM5NC0uNTkzSDEwLjQzMmwuNzQ0LS4zNDdIMTEuN2wuNzQ0LS4yNDguMDg4LS4zLS4yNjMtLjI0OC0uMzA2LS4xLjA4OC0uMy0uMjE5LS40NDUtLjUyNS4yLjA4OC0uNC0uNjEyLS4zNDdMMTAuMyw2LjhsLjA0NC4zLS40ODEuMi0uMzA2LjY0My0uMTMxLS41OTRMOC41OTQsN2wtLjEzMS0uNDQ1LDEuMDk0LS42NDQuNDgxLS40NDUuMDQ0LS41NDQtLjI2Mi0uMTQ5LS4zNS0uMDUtLjIxOS41NDVzLS4zNjYuMDcyLS40Ni4wOTVBMTIuNSwxMi41LDAsMCwwLDQuNiwxMy4zNzFhNi43ODksNi43ODksMCwwLDAsLjQwOS43MTFsLjkxOC41NDQuOTE4LjI0OC4zOTQuNS42MTIuNDQ1LjM1LS4wNDkuMjYyLjExOHYuMDhsLS4zNS45NC0uMjYzLjQuMDg4LjItLjIxOS43NDIuNzg3LDEuNDM2Ljc4Ny42OTMuMzUuNDk1TDkuNiwyMS45bC4yNjMuNTkzTDkuNiwyMy42MzdzLS4wMjEtLjAwNy4wMTMuMTA3YTUuMjc4LDUuMjc4LDAsMCwwLDEuNDg4LjgwOWwuMTYxLS4xMjMtLjA4Ny0uMjQ3LjM1LS4zNDcuMTMxLS4zNDcuNTY5LS4yLjQzNy0xLjA4OS0uMTMxLS4zLjMwNi0uNDQ1LjY1Ni0uMTQ5LjM1LS43OTItLjA4OC0uOTkuNTI1LS43NDMuMDg4LS43NDNjLS43MTgtLjM1Ni0xLjQzLS43MjMtMi4xNDMtMS4wODlcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMDRhODc7ZmlsbC1vcGFjaXR5OjAuNzEzNDUwMzEyNjE0NDQwOVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS4yNjMsNS43MTVsLjQzNy4zaC4zNVY1LjY2NmwtLjQzNy0uMi0uMzUuMjQ3XFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTAuMTI2LDUuMzE5bC0uMjE5LjU0NGguNDM4bC4yMTktLjVjLjE4OS0uMTMzLjM3Ni0uMjY4LjU2OC0uNGwuNDM4LjE0OS44NzUuNTk0LjQzOC0uNC0uNDgyLS4yLS4yMTktLjQ0Ni0uODMxLS4xLS4wNDQtLjI0OC0uMzk0LjEtLjE3NS4zNDYtLjIxOS0uNDQ2LS4wODcuMi4wNDQuNS0uMzUuM1xcXCIgc3R5bGU9XFxcImZpbGw6IzIwNGE4NztmaWxsLW9wYWNpdHk6MC43MTM0NTAzMTI2MTQ0NDA5XFxcIi8+PHBhdGggZD1cXFwiTTExLjcsNC4wODFsLjIxOS0uMi40MzgtLjFhNi45LDYuOSwwLDAsMSwuOTE4LS4zNDdsLS4xNzQtLjMtLjU2NS4wODEtLjI2Ny4yNjYtLjQ0LjA2NC0uMzkxLjE4NC0uMTkuMDkyLS4xMTYuMTU1LjU2OC4xXFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTIuNDQ0LDguNzg1bC4yNjMtLjQtLjM5NC0uMy4xMzEuNjkzXFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTQ5LDI1Ljc4M0ExMS41OCwxMS41OCwwLDEsMSwyNy43MjksMTQuMiwxMS41OTMsMTEuNTkzLDAsMCwxLDE2LjE0OSwyNS43ODNabTAtMjIuNTQ4QTEwLjk2OCwxMC45NjgsMCwxLDAsMjcuMTE3LDE0LjIsMTAuOTgsMTAuOTgsMCwwLDAsMTYuMTQ5LDMuMjM1WlxcXCIgc3R5bGU9XFxcIm9wYWNpdHk6MC4zOTU2MDQ0MDE4MjY4NTg1O2lzb2xhdGlvbjppc29sYXRlO2ZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk01LjU0MSwxMC4yNDFhNC4xMTUsNC4xMTUsMCwxLDAsNi42MzYtNC44NjZoMEE0LjExNSw0LjExNSwwLDAsMCw1LjU0LDEwLjI0WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk03LjgzNiw4LjU1OGExLjI2OCwxLjI2OCwwLDEsMCwyLjA0Ni0xLjVoMGExLjI2OCwxLjI2OCwwLDAsMC0yLjA0NiwxLjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTE3Ljk1MiwyNC44YTUuMzM3LDUuMzM3LDAsMSwwLDguNjA3LTYuMzEydjBBNS4zMzcsNS4zMzcsMCwwLDAsMTcuOTUsMjQuOFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMjAuOTI4LDIyLjYxNmExLjY0NSwxLjY0NSwwLDEsMCwyLjY1My0xLjk0NmgwYTEuNjQ1LDEuNjQ1LDAsMCwwLTIuNjUzLDEuOTQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk00Ljg1OSwxOC40OTNBNC4xMTUsNC4xMTUsMCwxLDAsMTEuNSwxMy42MjZoMGE0LjExNSw0LjExNSwwLDAsMC02LjYzNiw0Ljg2NlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZSlcXFwiLz48cGF0aCBkPVxcXCJNNy4xNTQsMTYuODA5YTEuMjY4LDEuMjY4LDAsMSwwLDIuMDQ2LTEuNWgwYTEuMjY4LDEuMjY4LDAsMCwwLTIuMDQ2LDEuNVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTIuNDA4LDEwLjI2OUE0LjQ0MSw0LjQ0MSwwLDEsMCwxOS41Nyw1LjAxNmgwYTQuNDQxLDQuNDQxLDAsMSwwLTcuMTYyLDUuMjUzWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNmKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNC44ODUsOC40NTJhMS4zNjksMS4zNjksMCwxLDAsMi4yMDgtMS42MTloMGExLjM2OSwxLjM2OSwwLDEsMC0yLjIwOCwxLjYxOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTIuNjgsMjYuMjM4YTMuODMsMy44MywwLDAsMS0yLjkwOS0xLjA4N2MtMS4xMzMtMS4yMS0xLjItMy4yNTUtLjItNS43NTdhMjEuNTQyLDIxLjU0MiwwLDAsMSw1LjMwNy03LjMyNkMyMC4wNjQsNy4yMTUsMjUuOTQ1LDUuMzU2LDI4LjI3LDcuODM5YzEuMTMzLDEuMjExLDEuMiwzLjI1NS4yLDUuNzU3YTIxLjU1MywyMS41NTMsMCwwLDEtNS4zMDgsNy4zMjZBMjEuNTUxLDIxLjU1MSwwLDAsMSwxNS41LDI1LjczMyw5LjIyOSw5LjIyOSwwLDAsMSwxMi42OCwyNi4yMzhaTTI1LjM0Miw3LjI4Yy0yLjcsMC02LjYsMS45MDgtMTAuMSw1LjE4M0EyMSwyMSwwLDAsMCwxMC4wNzEsMTkuNmMtLjkyMSwyLjMtLjg4Nyw0LjEzOC4wOTQsNS4xODdzMi44MTcsMS4yLDUuMTY5LjQzN2EyMSwyMSwwLDAsMCw3LjQ2LTQuNjkyLDIxLDIxLDAsMCwwLDUuMTc1LTcuMTMyYy45MjEtMi4zLjg4OC00LjEzOC0uMDk1LTUuMTg3QTMuMzQsMy4zNCwwLDAsMCwyNS4zNDIsNy4yOFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZylcXFwiLz48cGF0aCBkPVxcXCJNMjEuNjgxLDIyLjA5NGEyMC42MzMsMjAuNjMzLDAsMCwxLTkuMzM5LTIuNzU5QzYuMSwxNS45NSwyLjQ3MywxMC45NTcsNC4wOTQsNy45NjhjLjc5LTEuNDU4LDIuNy0yLjE3NSw1LjQtMi4wMTJBMjEuNTQyLDIxLjU0MiwwLDAsMSwxOC4xMiw4LjY3NGEyMS41NDUsMjEuNTQ1LDAsMCwxLDYuOTg3LDUuNzQ2YzEuNiwyLjE2NywyLjA1MSw0LjE2MywxLjI2MSw1LjYyMUMyNS42MjIsMjEuNDE2LDIzLjkxNSwyMi4wOTQsMjEuNjgxLDIyLjA5NFpNOC43NTksNi40NzRjLTIuMSwwLTMuNTcyLjYxMi00LjE5LDEuNzUxQzMuMTE3LDEwLjksNi43MiwxNS42NzQsMTIuNiwxOC44NnMxMS44NDMsMy42LDEzLjI5NC45MjRjLjY4NS0xLjI2My4yNTEtMy4wNTQtMS4yMi01LjA0MmEyMSwyMSwwLDAsMC02LjgxLTUuNTkzQTIxLDIxLDAsMCwwLDkuNDU5LDYuNVE5LjEsNi40NzQsOC43NTksNi40NzRaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2gpXFxcIi8+PHBhdGggZD1cXFwiTTEwLDI0LjA3OGEzLjc1NywzLjc1NywwLDAsMS0yLjg1MS0xLjA2NWMtMS4xMS0xLjE4Ny0xLjE4MS0zLjE4OS0uMi01LjYzOWEyMS4wNjIsMjEuMDYyLDAsMCwxLDUuMTg5LTcuMTYzYzUuMDczLTQuNzQ3LDEwLjgzLTYuNTYzLDEzLjEtNC4xMzJoMGMyLjI3NSwyLjQzMS4wODMsOC4wNTMtNC45OSwxMi44YTIxLjA1OSwyMS4wNTksMCwwLDEtNy40OTEsNC43QTkuMDI0LDkuMDI0LDAsMCwxLDEwLDI0LjA3OFpNMjIuMzczLDUuNTUzYy0yLjYzLDAtNi40MzksMS44NjQtOS44NTYsNS4wNjJBMjAuNSwyMC41LDAsMCwwLDcuNDYzLDE3LjU4Yy0uOSwyLjIzOS0uODY2LDQuMDM0LjA5LDUuMDU1czIuNzQ1LDEuMTcyLDUuMDM4LjQyNGEyMC41MTMsMjAuNTEzLDAsMCwwLDcuMjg0LTQuNTgyYzQuNzY2LTQuNDYsNi45OTQtOS44NTMsNC45NjUtMTIuMDJoMEEzLjI1NiwzLjI1NiwwLDAsMCwyMi4zNzMsNS41NTNaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2kpXFxcIi8+PHBhdGggZD1cXFwiTTE3LjUxMiwxOS40MTNjLS44NiwwLTEuNzQ4LS4wNDMtMi42NTktLjEzM0M3Ljc4NCwxOC41ODQsMi41MDcsMTUuMzg4LDIuODQsMTJoMGMuMzMzLTMuMzgzLDYuMTMzLTUuNDksMTMuMi00Ljc5MXMxMi4zNDUsMy44OTIsMTIuMDEyLDcuMjc1QzI3Ljc2MywxNy40MzYsMjMuMzI0LDE5LjQxMywxNy41MTIsMTkuNDEzWk0zLjM3OCwxMi4wNTdjLS4zLDMuMDMxLDQuODczLDYuMDMsMTEuNTI4LDYuNjg2czEyLjMxMi0xLjI3NywxMi42MTEtNC4zMDhTMjIuNjQ0LDguNDA2LDE1Ljk4OCw3Ljc1LDMuNjc3LDkuMDI3LDMuMzc4LDEyLjA1N1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjailcXFwiLz48cGF0aCBkPVxcXCJNNi4yNTEsMjkuOTY2aDYuNjc0VjIwLjgwOWgyLjk4MUw5LjU0OCwxMS40MzQsMy4yOTUsMjAuNzgybDIuOTU4LjAzMVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaylcXFwiLz48cGF0aCBkPVxcXCJNMTIuOTI0LDMwLjA0NUg2LjI1MWEuMDQ5LjA0OSwwLDAsMS0uMDM5LS4wMjNjLS4wMS0uMDE1LS4wMTYtMy4xMzUtLjAxNi0zLjE1NmwwLTUuOTc1LTIuOS0uMDNhLjA2LjA2LDAsMCwxLS4wNTEtLjA0OC4xLjEsMCwwLDEsLjAxMS0uMDg1TDkuNTA4LDExLjM4YS4wNTYuMDU2LDAsMCwxLC4wNDEtLjAyNS4wNS4wNSwwLDAsMSwuMDQuMDI0bDYuMzU3LDkuMzc1YS4xLjEsMCwwLDEsLjAxMS4wODYuMDU5LjA1OSwwLDAsMS0uMDUxLjA0OEgxMi45OHY5LjA3OEMxMi45OCwzMC4wMSwxMi45NTUsMzAuMDQ1LDEyLjkyNCwzMC4wNDVabS02LjYxOC0uMTU4aDYuNTYyVjIwLjgwOWMwLS4wNDQuMDI1LS4wNzkuMDU2LS4wNzloMi44NUw5LjU0OSwxMS41NDksMy40MjQsMjAuN2wyLjgzLjAzYy4wMzEsMCwuMDU1LjAzNi4wNTUuMDc5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzE4Mzg2OFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4wNTMsMjAuNTg3bC0yLjk1OC4wMzEsNi4yNTQsOS4zNDgsNi4zNTctOS4zNzVIMjUuNzI0VjExLjQzNEgxOS4wNTFaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2wpXFxcIi8+PHBhdGggZD1cXFwiTTI1Ljc4LDExLjQzNHY5LjA3OGgyLjkyNWEuMDU5LjA1OSwwLDAsMSwuMDUxLjA0OC4xLjEsMCwwLDEtLjAxMS4wODZsLTYuMzU3LDkuMzc1YS4wNS4wNSwwLDAsMS0uMDQuMDI0LjA1Ni4wNTYsMCwwLDEtLjA0MS0uMDI1bC02LjI1NC05LjM0OGEuMS4xLDAsMCwxLS4wMTEtLjA4NS4wNi4wNiwwLDAsMSwuMDUxLS4wNDhsMi45LS4wMywwLTUuOTc1YzAtLjAyMS4wMDYtMy4xNDEuMDE2LTMuMTU2YS4wNDkuMDQ5LDAsMCwxLC4wMzktLjAyM2g2LjY3NEMyNS43NTUsMTEuMzU1LDI1Ljc4LDExLjM5LDI1Ljc4LDExLjQzNFptLTYuNjcyLDkuMTUzYzAsLjA0My0uMDI1LjA3OS0uMDU1LjA3OWwtMi44My4wMyw2LjEyNSw5LjE1Niw2LjIyNi05LjE4MWgtMi44NWMtLjAzMSwwLS4wNTYtLjAzNS0uMDU2LS4wNzlWMTEuNTEzSDE5LjEwN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMxODM4NjhcXFwiLz5cIixcblx0XCJJZHJpc1wiOiBcIjxwYXRoIGQ9XFxcIk0xMy4zNzYsNi4yYzMuNiwxLjEsNC41LDIsNS44LDUuMi0uMy00LTEuOS01LjYtNS44LTUuMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4YTA4MTlcXFwiLz48cGF0aCBkPVxcXCJNOC4zNzYsMTIuNGMyLjMuNyw1LDEuMyw2LDUuNy40LTUuNS0yLjItNS44LTYtNS43WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhhMDgxOVxcXCIvPjxwYXRoIGQ9XFxcIk05Ljk3Niw4LjhjMy41LjcsNS43LDEuNyw3LDYuMi4zLTUuOC0yLjktNi40LTctNi4yWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhhMDgxOVxcXCIvPjxwYXRoIGQ9XFxcIk0xNC41NzYsMmMxOS4xLDEyLjQtNC4yLDEyLjcuOCwyNy4xbDMsLjljLTguMy0xMS4yLDE4LjQtMTctMy44LTI4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhhMDgxOVxcXCIvPlwiLFxuXHRcIkluaVwiOiBcIjxwYXRoIGQ9XFxcIk0yMy4yNjUsMjQuMzgxbC45LS44OTRjNC4xNjQuMTM2LDQuMjI4LS4wMSw0LjQxMS0uNDM4bDEuMTQ0LTIuNzg1TDI5LjgwNSwyMGwtLjA5My0uMjMxYy0uMDQ5LS4xMjItLjItLjQ4Ni0yLjgtMi45NjVWMTUuNWMzLTIuODksMi45MzYtMy4wMzgsMi43NjUtMy40NjFMMjguNTM4LDkuMjI1Yy0uMTcxLS40MjItLjIzNi0uNTg3LTQuMzctLjQ3NGwtLjktLjkzYTIwLjE2NiwyMC4xNjYsMCwwLDAtLjE0MS00LjEwNmwtLjExNi0uMjYzLTIuOTc0LTEuM2MtLjQzOC0uMi0uNTkyLS4yNzItMy40LDIuNzg2bC0xLjI2Mi0uMDE5Yy0yLjg5MS0zLjA4Ni0zLjAyOC0zLjAzLTMuNDYxLTIuODU1TDkuMTQ5LDMuMTgyYy0uNDMzLjE3NS0uNTg2LjIzNy0uNDE4LDQuNDM3bC0uODkzLjg5Yy00LjE2Mi0uMTM2LTQuMjI2LjAxMi00LjQwNy40MzhMMi4yODUsMTEuNzMzLDIuMTk1LDEybC4wOTQuMjMyYy4wNDkuMTIuMTk0LjQ4LDIuOCwyLjk2MmwwLDEuM2MtMywyLjg5LTIuOTM1LDMuMDM4LTIuNzYzLDMuNDYybDEuMTM4LDIuODE3Yy4xNzQuNDMxLjIzNi41ODQsNC4zNjkuNDc2bC45LjkzNWEyMC4yNDMsMjAuMjQzLDAsMCwwLC4xMzcsNC4xbC4xMTYuMjY1LDIuOTkzLDEuMzA4Yy40MzUuMTgyLjU4Ni4yNDcsMy4zODYtMi44bDEuMjYyLjAxNmMyLjg5NSwzLjA5LDMuMDQzLDMuMDMsMy40NjYsMi44NTlsMi43NTktMS4xMTVDMjMuMjg4LDI4LjY0NCwyMy40NCwyOC41ODMsMjMuMjY1LDI0LjM4MVpNMTEuNDA3LDE3Ljg1N2E0Ljk1Nyw0Ljk1NywwLDEsMSw2LjQ4OCwyLjgyNEE1LjAxNCw1LjAxNCwwLDAsMSwxMS40MDcsMTcuODU3WlxcXCIgc3R5bGU9XFxcImZpbGw6Izk5YjhjNFxcXCIvPlwiLFxuXHRcIklvXCI6IFwiPHBhdGggZD1cXFwiTTIsMi44ODdINy4wNzVWNy41MUgyWm0uMDUyLDYuODNINy4wNFYyOC42MjZIMi4wNTJaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+PHBhdGggZD1cXFwiTTEzLjI3MSwyNi40NTRhOS43OTEsOS43OTEsMCwwLDEtMi42MTYtNy4xNzgsMTAuMTQ4LDEwLjE0OCwwLDAsMSwyLjYxNi03LjM0Myw5LjMyMSw5LjMyMSwwLDAsMSw3LjA0Ny0yLjcyLDkuMzQsOS4zNCwwLDAsMSw3LjA3NSwyLjcyQTEwLjE2OCwxMC4xNjgsMCwwLDEsMzAsMTkuMjc2YTkuODA5LDkuODA5LDAsMCwxLTIuNjA3LDcuMTc4LDkuNDU2LDkuNDU2LDAsMCwxLTcuMDc1LDIuNjU5QTkuNDM2LDkuNDM2LDAsMCwxLDEzLjI3MSwyNi40NTRabTEwLjQzNi0yLjk3MmE2LjcsNi43LDAsMCwwLDEuMTY2LTQuMjU4LDYuOTQzLDYuOTQzLDAsMCwwLTEuMTY2LTQuMzU0LDQuMDQ3LDQuMDQ3LDAsMCwwLTMuMzg5LTEuNDg2LDQuMDIyLDQuMDIyLDAsMCwwLTMuMzgsMS40ODYsNi45OTEsNi45OTEsMCwwLDAtMS4xNTYsNC4zNTQsNi43NDQsNi43NDQsMCwwLDAsMS4xNTYsNC4yNTgsNC4wNTMsNC4wNTMsMCwwLDAsMy4zOCwxLjQ2QTQuMDc4LDQuMDc4LDAsMCwwLDIzLjcwNywyMy40ODJaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+XCIsXG5cdFwiSmF2YVwiOiBcIjxwYXRoIGQ9XFxcIk0xMi4zMjUsMjMuNjU0cy0xLjA3LjYyMi43NjEuODMzYTE2LjAyMywxNi4wMjMsMCwwLDAsNS44LS4yNDYsMTAuMDg4LDEwLjA4OCwwLDAsMCwxLjU0MS43NTJjLTUuNDgxLDIuMzQ5LTEyLjQwNS0uMTM2LTguMS0xLjMzOVxcXCIgc3R5bGU9XFxcImZpbGw6IzUzODJhMVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS42NTYsMjAuNTg4cy0xLjIuODg4LjYzMywxLjA3OGEyMi42MTgsMjIuNjE4LDAsMCwwLDcuNDgxLS4zNTksMy4zMiwzLjMyLDAsMCwwLDEuMTUyLjdjLTYuNjI3LDEuOTM4LTE0LjAwOS4xNTMtOS4yNjYtMS40MjFcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzgyYTFcXFwiLz48cGF0aCBkPVxcXCJNMTcuMywxNS4zODhhMi4wNTEsMi4wNTEsMCwwLDEtLjM1NSwyLjk1NHMzLjQyOS0xLjc3LDEuODU0LTMuOTg3Yy0xLjQ3MS0yLjA2Ny0yLjYtMy4wOTUsMy41MDgtNi42MzYsMCwwLTkuNTg2LDIuMzk0LTUuMDA3LDcuNjY5XFxcIiBzdHlsZT1cXFwiZmlsbDojNTM4MmExXFxcIi8+PHBhdGggZD1cXFwiTTI0LjU1MiwyNS45MjFzLjc5Mi42NTItLjg3MiwxLjE1N2MtMy4xNjQuOTU4LTEzLjE2OCwxLjI0OC0xNS45NDguMDM4LTEtLjQzNS44NzQtMS4wMzgsMS40NjQtMS4xNjRhMy44LDMuOCwwLDAsMSwuOTY2LS4xMDhjLTEuMTExLS43ODMtNy4xODEsMS41MzctMy4wODMsMi4yLDExLjE3NiwxLjgxMiwyMC4zNzItLjgxNiwxNy40NzMtMi4xMjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzgyYTFcXFwiLz48cGF0aCBkPVxcXCJNMTIuODQsMTcuNDEycy01LjA4OSwxLjIwOS0xLjgsMS42NDhhMzguMjI1LDM4LjIyNSwwLDAsMCw2LjczMS0uMDcyYzIuMTA2LS4xNzgsNC4yMjEtLjU1NSw0LjIyMS0uNTU1YTguOTM0LDguOTM0LDAsMCwwLTEuMjguNjg1Yy01LjE2OCwxLjM1OS0xNS4xNTEuNzI3LTEyLjI3Ny0uNjYzYTkuNjI5LDkuNjI5LDAsMCwxLDQuNDA3LTEuMDQyXFxcIiBzdHlsZT1cXFwiZmlsbDojNTM4MmExXFxcIi8+PHBhdGggZD1cXFwiTTIxLjk2OSwyMi41MTVjNS4yNTMtMi43MywyLjgyNC01LjM1MywxLjEyOS01YTMuOTMyLDMuOTMyLDAsMCwwLS42LjE2MS45NTcuOTU3LDAsMCwxLC40NDktLjM0NmMzLjM1NC0xLjE3OSw1LjkzMywzLjQ3OC0xLjA4Myw1LjMyMmEuNDU4LjQ1OCwwLDAsMCwuMTA2LS4xMzhcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzgyYTFcXFwiLz48cGF0aCBkPVxcXCJNMTguOCwyczIuOTA5LDIuOTEtMi43NTksNy4zODZjLTQuNTQ2LDMuNTktMS4wMzcsNS42MzcsMCw3Ljk3NS0yLjY1My0yLjM5NC00LjYtNC41LTMuMjk0LTYuNDYzQzE0LjY2NCw4LjAxOSwxOS45NzYsNi42MjMsMTguOCwyXFxcIiBzdHlsZT1cXFwiZmlsbDojNTM4MmExXFxcIi8+PHBhdGggZD1cXFwiTTEzLjM1NiwyOS45MTJjNS4wNDIuMzIzLDEyLjc4Ni0uMTc5LDEyLjk2OS0yLjU2NSwwLDAtLjM1My45LTQuMTY3LDEuNjIzYTQxLjQ1OCw0MS40NTgsMCwwLDEtMTIuNzYuMnMuNjQ1LjUzMywzLjk1OS43NDZcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzgyYTFcXFwiLz5cIixcblx0XCJKYXZhU2NyaXB0XCI6IFwiPHJlY3QgeD1cXFwiMlxcXCIgeT1cXFwiMlxcXCIgd2lkdGg9XFxcIjI4XFxcIiBoZWlnaHQ9XFxcIjI4XFxcIiBzdHlsZT1cXFwiZmlsbDojZjVkZTE5XFxcIi8+PHBhdGggZD1cXFwiTTIwLjgwOSwyMy44NzVhMi44NjYsMi44NjYsMCwwLDAsMi42LDEuNmMxLjA5LDAsMS43ODctLjU0NSwxLjc4Ny0xLjMsMC0uOS0uNzE2LTEuMjIyLTEuOTE2LTEuNzQ3bC0uNjU4LS4yODJjLTEuOS0uODA5LTMuMTYtMS44MjItMy4xNi0zLjk2NCwwLTEuOTczLDEuNS0zLjQ3NiwzLjg1My0zLjQ3NmEzLjg4OSwzLjg4OSwwLDAsMSwzLjc0MiwyLjEwN0wyNSwxOC4xMjhBMS43ODksMS43ODksMCwwLDAsMjMuMzExLDE3YTEuMTQ1LDEuMTQ1LDAsMCwwLTEuMjU5LDEuMTI4YzAsLjc4OS40ODksMS4xMDksMS42MTgsMS42bC42NTguMjgyYzIuMjM2Ljk1OSwzLjUsMS45MzYsMy41LDQuMTMzLDAsMi4zNjktMS44NjEsMy42NjctNC4zNiwzLjY2N2E1LjA1NSw1LjA1NSwwLDAsMS00Ljc5NS0yLjY5MVptLTkuMjk1LjIyOGMuNDEzLjczMy43ODksMS4zNTMsMS42OTMsMS4zNTMuODY0LDAsMS40MS0uMzM4LDEuNDEtMS42NTNWMTQuODU2aDIuNjMxdjguOTgyYzAsMi43MjQtMS42LDMuOTY0LTMuOTI5LDMuOTY0YTQuMDg1LDQuMDg1LDAsMCwxLTMuOTQ3LTIuNFpcXFwiLz5cIixcblx0XCJKU09OXCI6IFwiPHBhdGggZD1cXFwiTTQuMDE0LDE0Ljk3NmEyLjUxLDIuNTEsMCwwLDAsMS41NjctLjUxOEEyLjM3NywyLjM3NywwLDAsMCw2LjM4NiwxMy4xLDE1LjI2MSwxNS4yNjEsMCwwLDAsNi42LDEwLjE1NnEuMDEyLTIuMDg1LjA3NS0yLjc0N2E1LjIzNiw1LjIzNiwwLDAsMSwuNDE4LTEuNjg2LDMuMDI1LDMuMDI1LDAsMCwxLC43NTUtMS4wMThBMy4wNDYsMy4wNDYsMCwwLDEsOSw0LjEyNSw2Ljc2Miw2Ljc2MiwwLDAsMSwxMC41NDQsNGguN1Y1Ljk2aC0uMzg3YTIuMzM4LDIuMzM4LDAsMCwwLTEuNzIzLjQ2OEEzLjQsMy40LDAsMCwwLDguNzA5LDguNTJhMzYuMDU0LDM2LjA1NCwwLDAsMS0uMTM3LDQuMTMzLDQuNzM0LDQuNzM0LDAsMCwxLS43NjgsMi4wNkE0LjU2Nyw0LjU2NywwLDAsMSw2LjEsMTZhMy44MDksMy44MDksMCwwLDEsMS45OTIsMS43NTQsOC44NjEsOC44NjEsMCwwLDEsLjYxOCwzLjg2NXEwLDIuNDM1LjA1LDIuOUExLjc1NSwxLjc1NSwwLDAsMCw5LjI2NCwyNS43YTIuNjM5LDIuNjM5LDAsMCwwLDEuNTkyLjMzN2guMzg3VjI4aC0uN2E1LjY1NSw1LjY1NSwwLDAsMS0xLjc3My0uMiwyLjk3LDIuOTcsMCwwLDEtMS4zMjQtLjkzLDMuMzUzLDMuMzUzLDAsMCwxLS42ODEtMS42M0EyNC4xNzUsMjQuMTc1LDAsMCwxLDYuNiwyMi4wMDYsMTYuNDY5LDE2LjQ2OSwwLDAsMCw2LjM4NiwxOC45YTIuNDA4LDIuNDA4LDAsMCwwLS44MDUtMS4zNjEsMi40ODksMi40ODksMCwwLDAtMS41NjctLjUyNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmNWRlMTlcXFwiLz48cGF0aCBkPVxcXCJNMjcuOTg2LDE3LjAxMWEyLjQ4OSwyLjQ4OSwwLDAsMC0xLjU2Ny41MjQsMi40MDgsMi40MDgsMCwwLDAtLjgwNSwxLjM2MSwxNi40NjksMTYuNDY5LDAsMCwwLS4yMTIsMy4xMDksMjQuMTc1LDI0LjE3NSwwLDAsMS0uMTY5LDMuMjM0LDMuMzUzLDMuMzUzLDAsMCwxLS42ODEsMS42MywyLjk3LDIuOTcsMCwwLDEtMS4zMjQuOTMsNS42NTUsNS42NTUsMCwwLDEtMS43NzMuMmgtLjdWMjYuMDRoLjM4N2EyLjYzOSwyLjYzOSwwLDAsMCwxLjU5Mi0uMzM3LDEuNzU1LDEuNzU1LDAsMCwwLC41MDYtMS4xODZxLjA1LS40NjIuMDUtMi45YTguODYxLDguODYxLDAsMCwxLC42MTgtMy44NjVBMy44MDksMy44MDksMCwwLDEsMjUuOSwxNmE0LjU2Nyw0LjU2NywwLDAsMS0xLjctMS4yODYsNC43MzQsNC43MzQsMCwwLDEtLjc2OC0yLjA2LDM2LjA1NCwzNi4wNTQsMCwwLDEtLjEzNy00LjEzMywzLjQsMy40LDAsMCwwLS40MjUtMi4wOTIsMi4zMzgsMi4zMzgsMCwwLDAtMS43MjMtLjQ2OGgtLjM4N1Y0aC43QTYuNzYyLDYuNzYyLDAsMCwxLDIzLDQuMTI1YTMuMDQ2LDMuMDQ2LDAsMCwxLDEuMTQ5LjU4MSwzLjAyNSwzLjAyNSwwLDAsMSwuNzU1LDEuMDE4LDUuMjM2LDUuMjM2LDAsMCwxLC40MTgsMS42ODZxLjA2Mi42NjIuMDc1LDIuNzQ3YTE1LjI2MSwxNS4yNjEsMCwwLDAsLjIxMiwyLjk0NywyLjM3NywyLjM3NywwLDAsMCwuODA1LDEuMzU1LDIuNTEsMi41MSwwLDAsMCwxLjU2Ny41MThaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjVkZTE5XFxcIi8+XCIsXG5cdFwiSlNPTjVcIjogXCI8cGF0aCBkPVxcXCJNMTIuODE1LDE1LjE2N2wuNjgtNS42NzZoNi40ODl2MmgtNC40TDE1LjMyOSwxMy43YTIuNCwyLjQsMCwwLDEsLjI1Mi0uMTIyLDIuOTYyLDIuOTYyLDAsMCwxLC4zNzQtLjEzLDIuOSwyLjksMCwwLDEsLjQ1OC0uMTA2LDIuODM0LDIuODM0LDAsMCwxLC41MTItLjA0NiwzLjk4MywzLjk4MywwLDAsMSwxLjQ2Ni4yNTIsMi43MzYsMi43MzYsMCwwLDEsMS4wNzYuNzIzLDMuMTY3LDMuMTY3LDAsMCwxLC42NjQsMS4xNjgsNSw1LDAsMCwxLC4yMjgsMS41ODgsNC4xNTcsNC4xNTcsMCwwLDEtLjIzNiwxLjM4NywzLjMwNywzLjMwNywwLDAsMS0xLjksMi4wMjksNC4zLDQuMywwLDAsMS0xLjcxNS4zMTIsNC43NSw0Ljc1LDAsMCwxLTEuNDU4LS4yMjgsNC4wNTQsNC4wNTQsMCwwLDEtMS4yNTItLjY1NiwzLjM1OSwzLjM1OSwwLDAsMS0uODc4LTEuMDQ2LDIuNzg3LDIuNzg3LDAsMCwxLS4zMi0xLjM4MkgxNS4xOGExLjQ1OCwxLjQ1OCwwLDAsMCwuMzkuOTcsMS4zODMsMS4zODMsMCwwLDAsMS41NTguMjA2LDEuMDg5LDEuMDg5LDAsMCwwLC40LS40MTIsMS43NDksMS43NDksMCwwLDAsLjIwNi0uNjE4LDQuMyw0LjMsMCwwLDAsLjA2Mi0uNzQsMi43MDksMi43MDksMCwwLDAtLjA5Mi0uNzQsMS41MDYsMS41MDYsMCwwLDAtLjI4Mi0uNTU4LDEuMjI5LDEuMjI5LDAsMCwwLS41LS4zNDksMS43OCwxLjc4LDAsMCwwLS43MTgtLjEzLDIuMTIxLDIuMTIxLDAsMCwwLS41LjA1NCwxLjgwNSwxLjgwNSwwLDAsMC0uMzgyLjEzOCwxLjMxOCwxLjMxOCwwLDAsMC0uMjc0LjE5LDEuMjgsMS4yOCwwLDAsMC0uMTkuMmwtMi4wNDgtLjQ4MlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk01Ljk4NSwyMy4zNDNhNC40NSw0LjQ1LDAsMCwxLTEuMzExLS41OCwzLjIsMy4yLDAsMCwxLS44NDgtLjgyNCwzLjAxMiwzLjAxMiwwLDAsMS0uNDU4LTEuMDA4LDQuODc5LDQuODc5LDAsMCwxLS4xMy0xLjE0M3YtMS41NWEyLjMsMi4zLDAsMCwwLS4wNzYtLjYxOCwxLjE4NCwxLjE4NCwwLDAsMC0uMjIyLS40NjYuOTY5Ljk2OSwwLDAsMC0uMzgyLS4zMDZBMS4zMjQsMS4zMjQsMCwwLDAsMiwxNi43NDRWMTUuMDEyYTEuMDc0LDEuMDc0LDAsMCwwLC45MzctLjQsMS44NDEsMS44NDEsMCwwLDAsLjMtMS4xdi0xLjU1YTQuODc5LDQuODc5LDAsMCwxLC4xMy0xLjE0MywzLjAzNywzLjAzNywwLDAsMSwuNDU4LTEuMDA4QTMuMTcsMy4xNywwLDAsMSw0LjY3MSw5YTQuNDgyLDQuNDgyLDAsMCwxLDEuMzExLS41OGwuNDgsMS4zNDRhMS4yMjIsMS4yMjIsMCwwLDAtLjQ4OC4zMjgsMS43NDIsMS43NDIsMCwwLDAtLjMwNi41LDIuNTI0LDIuNTI0LDAsMCwwLS4xNi42MzQsNS44MjcsNS44MjcsMCwwLDAtLjA0Ni43NHYxLjU1QTIuODQ0LDIuODQ0LDAsMCwxLDUuMTI2LDE0LjlhMi4zNywyLjM3LDAsMCwxLTEuMDc2Ljk4MywyLjM1NiwyLjM1NiwwLDAsMSwxLjA3Ni45OTIsMi44MDgsMi44MDgsMCwwLDEsLjMzNiwxLjM3NHYxLjU1YTUuODI3LDUuODI3LDAsMCwwLC4wNDYuNzQsMi41ODYsMi41ODYsMCwwLDAsLjE2LjYzNCwxLjY4NCwxLjY4NCwwLDAsMCwuMzA2LjVBMS4yMjIsMS4yMjIsMCwwLDAsNi40NjIsMjJjMC0uMDA1LS40NzcsMS4zNDQtLjQ3NywxLjM0NFxcXCIgc3R5bGU9XFxcImZpbGw6Izk5OVxcXCIvPjxwYXRoIGQ9XFxcIk04LjIxNSwxOS4zOTNhMS4yODksMS4yODksMCwwLDEsLjEtLjUxMiwxLjIxMiwxLjIxMiwwLDAsMSwuMjktLjQsMS4zNzMsMS4zNzMsMCwwLDEsLjQ1LS4yNzQsMS42MzcsMS42MzcsMCwwLDEsLjU4LS4xLDEuNTU1LDEuNTU1LDAsMCwxLC41NzIuMSwxLjI2OSwxLjI2OSwwLDAsMSwuNDUuMjc0LDEuMDc3LDEuMDc3LDAsMCwxLC4yOS40LDEuMjk0LDEuMjk0LDAsMCwxLDAsMS4wMjQsMS4xNTEsMS4xNTEsMCwwLDEtLjI5LjQxMiwxLjM4OCwxLjM4OCwwLDAsMS0uNDUuMjY4LDEuNjEzLDEuNjEzLDAsMCwxLS41NzIuMSwxLjU3OCwxLjU3OCwwLDAsMS0uNTgtLjEsMS40MDksMS40MDksMCwwLDEtLjQ1LS4yNjgsMS4yMjksMS4yMjksMCwwLDEtLjM5LS45MjRtMC02LjA4OGExLjI4OSwxLjI4OSwwLDAsMSwuMS0uNTEyLDEuMjEyLDEuMjEyLDAsMCwxLC4yOS0uNCwxLjM3MywxLjM3MywwLDAsMSwuNDUtLjI3NCwxLjYzNywxLjYzNywwLDAsMSwuNTgtLjEsMS41NTUsMS41NTUsMCwwLDEsLjU3Mi4xLDEuMjY5LDEuMjY5LDAsMCwxLC40NS4yNzQsMS4wNzcsMS4wNzcsMCwwLDEsLjI5LjQsMS4yOTQsMS4yOTQsMCwwLDEsMCwxLjAyNCwxLjE1MSwxLjE1MSwwLDAsMS0uMjkuNDEyLDEuMzg4LDEuMzg4LDAsMCwxLS40NS4yNjgsMS42MTMsMS42MTMsMCwwLDEtLjU3Mi4xLDEuNTc4LDEuNTc4LDAsMCwxLS41OC0uMSwxLjQwOSwxLjQwOSwwLDAsMS0uNDUtLjI2OCwxLjIyOSwxLjIyOSwwLDAsMS0uMzktLjkyNFxcXCIgc3R5bGU9XFxcImZpbGw6Izk5OVxcXCIvPjxwYXRoIGQ9XFxcIk0yNC4yNCwyMC4yOTNhMy42NDgsMy42NDgsMCwwLDEtLjEyMi45MjksNC41MzQsNC41MzQsMCwwLDEtLjMzNi44OTEsNC43MDYsNC43MDYsMCwwLDEtLjUuODA3LDQuMDA1LDQuMDA1LDAsMCwxLS42MS42NjRsLTEuMy0uNjFjLjA4MS0uMTczLjE2OC0uMzQ5LjI2LS41MjZhNC44NDYsNC44NDYsMCwwLDAsLjI2OC0uNTU4LDQuNDQzLDQuNDQzLDAsMCwwLC4yMDYtLjY1NiwzLjQwNiwzLjQwNiwwLDAsMCwuMDg0LS44VjE4LjY1NmgyLjA1OWwtLjAwOCwxLjYzNlxcXCIgc3R5bGU9XFxcImZpbGw6Izk5OVxcXCIvPjxwYXRoIGQ9XFxcIk0yNS41MzgsMjEuOTk0YTEuMjUxLDEuMjUxLDAsMCwwLC40ODgtLjMyOCwxLjcwNywxLjcwNywwLDAsMCwuMzA2LS41LDIuNTI1LDIuNTI1LDAsMCwwLC4xNi0uNjM0LDUuODI2LDUuODI2LDAsMCwwLC4wNDYtLjc0di0xLjU1YTIuODQ0LDIuODQ0LDAsMCwxLC4zMzYtMS4zODIsMi4zNjQsMi4zNjQsMCwwLDEsMS4wODQtLjk4MywyLjM2NCwyLjM2NCwwLDAsMS0xLjA4NC0uOTgzLDIuODQ0LDIuODQ0LDAsMCwxLS4zMzYtMS4zODJ2LTEuNTVhNS44MjcsNS44MjcsMCwwLDAtLjA0Ni0uNzQsMi41ODYsMi41ODYsMCwwLDAtLjE2LS42MzQsMS42ODQsMS42ODQsMCwwLDAtLjMwNi0uNSwxLjIyMiwxLjIyMiwwLDAsMC0uNDg4LS4zMjhsLjQ4LTEuMzM4QTQuNDUsNC40NSwwLDAsMSwyNy4zMjksOWEzLjA5MiwzLjA5MiwwLDAsMSwuODQ4LjgxNSwyLjg5MiwyLjg5MiwwLDAsMSwuNDUsMS4wMDgsNC42MDYsNC42MDYsMCwwLDEsLjEzOCwxLjE0M3YxLjU1YTIuNjU1LDIuNjU1LDAsMCwwLC4wNjguNjI2LDEuNDQ4LDEuNDQ4LDAsMCwwLC4yMjIuNDc0LDEuMDM3LDEuMDM3LDAsMCwwLC4zODIuMywxLjM3NiwxLjM3NiwwLDAsMCwuNTY0LjEwNnYxLjczMWExLjA3NywxLjA3NywwLDAsMC0uOTQ2LjQxMiwxLjgyOCwxLjgyOCwwLDAsMC0uMjksMS4wODR2MS41NWE0LjYwNiw0LjYwNiwwLDAsMS0uMTM4LDEuMTQzLDIuOTE1LDIuOTE1LDAsMCwxLS40NSwxLjAwOCwzLjE1NywzLjE1NywwLDAsMS0uODQ4LjgyNCw0LjQ4Miw0LjQ4MiwwLDAsMS0xLjMxMS41OGwtLjQ4LTEuMzUyXFxcIiBzdHlsZT1cXFwiZmlsbDojOTk5XFxcIi8+XCIsXG5cdFwiSnVsaWFcIjogXCI8cGF0aCBkPVxcXCJNNy40NDgsMjEuOTgzVjEzLjc3NWwtMi40MzIuNjY5djguNzI5YTIuNjYsMi42NiwwLDAsMS0uMTA2LjkyOS4zMzYuMzM2LDAsMCwxLS4zMDguMjM5LjQwNS40MDUsMCwwLDEtLjIxMi0uMDc0LDEuMjgyLDEuMjgyLDAsMCwxLS4yODctLjMsMi44MTMsMi44MTMsMCwwLDAtLjM3Ny0uNDA5Ljg3NC44NzQsMCwwLDAtLjYxMS0uMjA3LDEuMjIsMS4yMiwwLDAsMC0uODEyLjI1NS43ODkuNzg5LDAsMCwwLS4zLjYyN0EuOTA3LjkwNywwLDAsMCwyLjU0MiwyNWEzLjExNSwzLjExNSwwLDAsMCwxLjU2MS4zMTksNy4wNjUsNy4wNjUsMCwwLDAsMS4zNy0uMTIyLDIuMzYxLDIuMzYxLDAsMCwwLDEuMDU3LS40ODMsMi4yOTIsMi4yOTIsMCwwLDAsLjY4LTEuMDE0LDUuMDk0LDUuMDk0LDAsMCwwLC4yMzktMS43MTVaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjUyNTI1XFxcIi8+PHBhdGggZD1cXFwiTTEwLjgyNSwxNC4wMDhIOC40djUuNjE4YTIuMjQxLDIuMjQxLDAsMCwwLC4yMTguOTc3LDIuNDg5LDIuNDg5LDAsMCwwLC42LjgsMi45LDIuOSwwLDAsMCwuODkyLjUzNiwzLjA0NSwzLjA0NSwwLDAsMCwxLjEuMiwyLjU1LDIuNTUsMCwwLDAsMS4wNTEtLjI0NCw0LjM0Nyw0LjM0NywwLDAsMCwxLjAxOS0uNjQ4di43NDNIMTUuNzFWMTQuMDA4SDEzLjI4OXY1Ljc1NmEyLjc2NCwyLjc2NCwwLDAsMS0uNjQ4LjcwNiwxLjEzOSwxLjEzOSwwLDAsMS0uNjQ4LjI4MSwxLjE1NSwxLjE1NSwwLDAsMS0uNDU3LS4wOSwxLjI2MywxLjI2MywwLDAsMS0uMzcyLS4yMzksMS4wNiwxLjA2LDAsMCwxLS4yNS0uMzU2LDEuMDkxLDEuMDkxLDAsMCwxLS4wOS0uNDQxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzI1MjUyNVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4wNzQsMjEuOTgzVjEwLjEzMmwtMi40MTEuNjY5VjIxLjk4M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNTI1MjVcXFwiLz48cGF0aCBkPVxcXCJNMjAuMDM4LDE0LjQ0NHY3LjU0aDIuNDIxVjEzLjc3NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNTI1MjVcXFwiLz48cGF0aCBkPVxcXCJNMjcuNTY4LDE3Ljg2M3YyLjNxLS4zNzIuMjc2LS42NzQuNDU3YTEuMTY1LDEuMTY1LDAsMCwxLS42LjE4MS40NjguNDY4LDAsMCwxLS4yNzYtLjA5LDEsMSwwLDAsMS0uMjM0LS4yMzksMS4xMzgsMS4xMzgsMCwwLDEtLjE2NS0uMzU2LDEuNTc2LDEuNTc2LDAsMCwxLS4wNTgtLjQzLjk2OC45NjgsMCwwLDEsLjE4MS0uNTUyLDIuMzA2LDIuMzA2LDAsMCwxLC40NzMtLjUsNC41NzIsNC41NzIsMCwwLDEsLjY0OC0uNDMsNy42MTIsNy42MTIsMCwwLDEsLjcwNi0uMzQ1Wk0zMCwyMS45ODNWMTZhMi4wODMsMi4wODMsMCwwLDAtLjE5MS0uOSwxLjc3OSwxLjc3OSwwLDAsMC0uNTk1LS42OSwzLjAwNiwzLjAwNiwwLDAsMC0xLjAyNS0uNDQxLDYuMjI1LDYuMjI1LDAsMCwwLTEuNDgxLS4xNTQsNS43MzUsNS43MzUsMCwwLDAtMS4zMjcuMTQ5LDQuNiw0LjYsMCwwLDAtMS4xLjQsMi4zNzMsMi4zNzMsMCwwLDAtLjc1OS42MTEsMS4yMTYsMS4yMTYsMCwwLDAtLjI4MS43Ny45NTguOTU4LDAsMCwwLC4zMTkuNzM4LDEuMTc4LDEuMTc4LDAsMCwwLC44MjguMjkyLDEuMzY0LDEuMzY0LDAsMCwwLC41NDctLjEuOC44LDAsMCwwLC4zMzUtLjI1NS45ODYuOTg2LDAsMCwwLC4xNjUtLjM3MiwxLjk3OCwxLjk3OCwwLDAsMCwuMDQ4LS40MzUsMS4wMzEsMS4wMzEsMCwwLDEsLjIyMy0uNjY5Ljk3NS45NzUsMCwwLDEsLjgtLjI3NiwxLjAwOCwxLjAwOCwwLDAsMSwuNzgxLjMxOSwxLjU5NCwxLjU5NCwwLDAsMSwuMjkyLDEuMDgzdi43ODZsLS4yNjUuMDY0cS0uNDg4LjE0OS0uOTg4LjMxM3QtLjk2MS4zNjFhNy44ODQsNy44ODQsMCwwLDAtLjg2NS40MywzLjUxMSwzLjUxMSwwLDAsMC0uNzA2LjUzMSwyLjMxOSwyLjMxOSwwLDAsMC0uNDc4LjY2OSwxLjkxOCwxLjkxOCwwLDAsMC0uMTc1LjgyOCwyLjAzNCwyLjAzNCwwLDAsMCwuMTY1LjgyMywxLjg3NiwxLjg3NiwwLDAsMCwuNDczLjY1MywyLjI1NSwyLjI1NSwwLDAsMCwuNzQ5LjQzNSwyLjkwNywyLjkwNywwLDAsMCwuOTkzLjE1OSwzLjY3OSwzLjY3OSwwLDAsMCwuNy0uMDU4LDIuNTA5LDIuNTA5LDAsMCwwLC41MzYtLjE2NSwyLjIwOSwyLjIwOSwwLDAsMCwuNDMtLjI1cS4xOTEtLjE0My4zOTMtLjMxM3YuNjM3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzI1MjUyNVxcXCIvPjxjaXJjbGUgY3g9XFxcIjYuMjA0XFxcIiBjeT1cXFwiMTEuNjcyXFxcIiByPVxcXCIxLjVcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NjgyZGZcXFwiLz48cGF0aCBkPVxcXCJNNi4yLDEzLjI4N2ExLjYxNSwxLjYxNSwwLDEsMSwxLjYxNS0xLjYxNUExLjYxNywxLjYxNywwLDAsMSw2LjIsMTMuMjg3Wm0wLTNhMS4zODUsMS4zODUsMCwxLDAsMS4zODUsMS4zODVBMS4zODYsMS4zODYsMCwwLDAsNi4yLDEwLjI4N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM0MDYzZDhcXFwiLz48Y2lyY2xlIGN4PVxcXCIyMS40MTdcXFwiIGN5PVxcXCIxMS42NzJcXFwiIHI9XFxcIjEuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2Q1NjM1Y1xcXCIvPjxwYXRoIGQ9XFxcIk0yMS40MTcsMTMuMjg3YTEuNjE1LDEuNjE1LDAsMSwxLDEuNjE1LTEuNjE1QTEuNjE3LDEuNjE3LDAsMCwxLDIxLjQxNywxMy4yODdabTAtM0ExLjM4NSwxLjM4NSwwLDEsMCwyMi44LDExLjY3MiwxLjM4NiwxLjM4NiwwLDAsMCwyMS40MTcsMTAuMjg3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NiM2MzM1xcXCIvPjxjaXJjbGUgY3g9XFxcIjIzLjM4NVxcXCIgY3k9XFxcIjguMjk3XFxcIiByPVxcXCIxLjVcXFwiIHN0eWxlPVxcXCJmaWxsOiM2MGFkNTFcXFwiLz48cGF0aCBkPVxcXCJNMjMuMzg1LDkuOTEyQTEuNjE1LDEuNjE1LDAsMSwxLDI1LDguMywxLjYxNywxLjYxNywwLDAsMSwyMy4zODUsOS45MTJabTAtM0ExLjM4NSwxLjM4NSwwLDEsMCwyNC43Nyw4LjMsMS4zODYsMS4zODYsMCwwLDAsMjMuMzg1LDYuOTEyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzM4OTgyNlxcXCIvPjxjaXJjbGUgY3g9XFxcIjI1LjM1NFxcXCIgY3k9XFxcIjExLjY3MlxcXCIgcj1cXFwiMS41XFxcIiBzdHlsZT1cXFwiZmlsbDojYWE3OWMxXFxcIi8+PHBhdGggZD1cXFwiTTI1LjM1NCwxMy4yODdhMS42MTUsMS42MTUsMCwxLDEsMS42MTUtMS42MTVBMS42MTcsMS42MTcsMCwwLDEsMjUuMzU0LDEzLjI4N1ptMC0zYTEuMzg1LDEuMzg1LDAsMSwwLDEuMzg1LDEuMzg1QTEuMzg2LDEuMzg2LDAsMCwwLDI1LjM1NCwxMC4yODdaXFxcIiBzdHlsZT1cXFwiZmlsbDojOTU1OGIyXFxcIi8+XCIsXG5cdFwiS290bGluXCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiMzExLjMzNlxcXCIgeTE9XFxcIjE0NTIuMDY0XFxcIiB4Mj1cXFwiMjgzLjM0MlxcXCIgeTI9XFxcIjE0ODAuMDU4XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0yODEuNCAtMTQ1MClcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNlNDQ4NTdcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDdcXFwiIHN0b3AtY29sb3I9XFxcIiM5ZDRiOWRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM2ZDVmYWFcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX2tvdGxpbjwvdGl0bGU+PHBhdGggZD1cXFwiTTMwLDMwSDJWMkgzMEwxNiwxNlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz5cIixcblx0XCJLdXN0b1wiOiBcIjxyZWN0IHg9XFxcIjAuNTVcXFwiIHk9XFxcIjIyLjMzOVxcXCIgd2lkdGg9XFxcIjE1LjQzM1xcXCIgaGVpZ2h0PVxcXCIyLjc5NlxcXCIgcng9XFxcIjAuNDM5XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMTQuMzYzIDEyLjc5Nykgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojYjhkNDMyXFxcIi8+PHJlY3QgeD1cXFwiMS4zNzJcXFwiIHk9XFxcIjE2LjM4MlxcXCIgd2lkdGg9XFxcIjkuODU5XFxcIiBoZWlnaHQ9XFxcIjIuNzk2XFxcIiByeD1cXFwiMC40MzlcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0xMC43MjcgOS42NjMpIHJvdGF0ZSgtNDQuOTk5KVxcXCIgc3R5bGU9XFxcImZpbGw6I2I4ZDQzMlxcXCIvPjxyZWN0IHg9XFxcIjkuMjMyXFxcIiB5PVxcXCIyNC4zMDFcXFwiIHdpZHRoPVxcXCI5Ljg1OVxcXCIgaGVpZ2h0PVxcXCIyLjc5NlxcXCIgcng9XFxcIjAuNDM5XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMTQuMDI0IDE3LjU0MSkgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojYjhkNDMyXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIzMCAyIDIgMiAzMCAyOS45OTkgMzAgMlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNzhkNFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTAuMjgyIDEwLjI4MiAyMS43MTggMjEuNzE4IDMwIDEzLjQzNiAzMCAyIDE4LjU2NCAyIDEwLjI4MiAxMC4yODJcXFwiIHN0eWxlPVxcXCJmaWxsOiM1OWI0ZDlcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjMwIDI5Ljk5OSAzMCAyIDE2IDE2IDMwIDI5Ljk5OVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZjtvcGFjaXR5OjAuMjAwMDAwMDAyOTgwMjMyMjQ7aXNvbGF0aW9uOmlzb2xhdGVcXFwiLz48cmVjdCB4PVxcXCIxNi4yMjZcXFwiIHk9XFxcIjkuMDAxXFxcIiB3aWR0aD1cXFwiMi43OTZcXFwiIGhlaWdodD1cXFwiMi43OTZcXFwiIHJ4PVxcXCIwLjYyMlxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTIuMTkyIDE1LjUwNykgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHJlY3QgeD1cXFwiMjAuMThcXFwiIHk9XFxcIjUuMDQ4XFxcIiB3aWR0aD1cXFwiMi43OTZcXFwiIGhlaWdodD1cXFwiMi43OTZcXFwiIHJ4PVxcXCIwLjYyMlxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMS43NjIgMTcuMTQ2KSByb3RhdGUoLTQ0Ljk5OSlcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cmVjdCB4PVxcXCIyMC4xOFxcXCIgeT1cXFwiMTIuOTU1XFxcIiB3aWR0aD1cXFwiMi43OTZcXFwiIGhlaWdodD1cXFwiMi43OTZcXFwiIHJ4PVxcXCIwLjYyMlxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTMuODI5IDE5LjQ2MSkgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHJlY3QgeD1cXFwiMjQuMTMzXFxcIiB5PVxcXCI5LjAwMlxcXCIgd2lkdGg9XFxcIjIuNzk2XFxcIiBoZWlnaHQ9XFxcIjIuNzk2XFxcIiByeD1cXFwiMC42MjJcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDAuMTI0IDIxLjA5OSkgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdFwiTGFUZVhcIjogXCI8cGF0aCBkPVxcXCJNMTEuMzMzLDEzLjEyMmMtLjEyOC0xLjU2Mi0uMjQxLTIuNzU2LTIuMjg3LTIuNzU2SDcuOTF2OC40aDIuMTQ1di42MTFsLTMuMDgzLS4wMjktMy4wODIuMDI5di0uNjExSDYuMDM0di04LjRINC44ODRjLTIuMDQ2LDAtMi4xNTksMS4yMDgtMi4yODcsMi43NTZIMmwuMjg0LTMuMzY3aDkuMzYybC4yODQsMy4zNjdoLS42WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4yODksMjIuNTNIMTAuNDFWMjEuOTJoMS41MDZWMTMuNDY3SDEwLjQxdi0uNjExaDguNjM3bC40MTIsMy4zNjdoLS42Yy0uMjEzLTEuODMzLS42ODItMi43NTYtMi44NTUtMi43NTZIMTMuNzkxVjE3LjJoLjgzOGMxLjM2NCwwLDEuNTA1LS42LDEuNTA1LTEuNjYyaC42djMuOTM1aC0uNmMwLTEuMDgtLjE0Mi0xLjY2Mi0xLjUwNS0xLjY2MmgtLjgzOHY0LjEwNmgyLjIxNmMyLjQ3MiwwLDMtMS4xMDgsMy4zLTMuMjI1aC42WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPjxwYXRoIGQ9XFxcIk0yNy43MjcsMTkuMTg2Yy0uNTQsMC0xLjk2LDAtMi40MTUuMDI5VjE4LjZoMS4xNzlsLTIuNTU3LTMuNTUyLTIuNTI5LDMuMzgxQTQuMSw0LjEsMCwwLDAsMjIuNywxOC42di42MTFjLS4zNTUtLjAyOS0xLjU3Ni0uMDI5LTIuMDE3LS4wMjktLjQsMC0xLjU0OCwwLTEuODc1LjAyOVYxOC42aC4zODNhNy40NTksNy40NTksMCwwLDAsLjgyNC0uMDQzYy41LS4wNDMuNTQtLjA4NS42NjctLjI1NkwyMy41MzYsMTQuNWwtMy4xNTMtNC40MThIMTlWOS40N2MuMzg0LjAyOCwxLjc5LjAyOCwyLjI3My4wMjguNTgyLDAsMS45MTgsMCwyLjQyOS0uMDI4di42MTFIMjIuNTI4bDIuMTE3LDIuOTU1LDIuMDc0LTIuNzg0YTQuMSw0LjEsMCwwLDAtMS4yOTMtLjE3VjkuNDdjLjM1Ni4wMjgsMS41OTEuMDI4LDIuMDMyLjAyOC40LDAsMS41MzQsMCwxLjg2MS0uMDI4di42MTFoLS4zNjlhNS4yNjQsNS4yNjQsMCwwLDAtLjgzOC4wNDNjLS40NjkuMDQzLS41MjYuMDcxLS42NjcuMjU2bC0yLjQsMy4yMUwyOC42MzYsMTguNkgzMHYuNjExQzI5LjY0NSwxOS4xODYsMjguMTgyLDE5LjE4NiwyNy43MjcsMTkuMTg2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPlwiLFxuXHRcIkxlc3NcIjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCItMy42MDlcXFwiIHkxPVxcXCItNDkyLjY4NVxcXCIgeDI9XFxcIi0zLjYwOVxcXCIgeTI9XFxcIi00ODAuMjcxXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDE5LjcxMiA1MDIuODkxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMC4xNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzJhNGY4NFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zODhcXFwiIHN0b3AtY29sb3I9XFxcIiMyOTRlODJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMxNzJlNGVcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX2xlc3M8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yOC41NTksMjAuMjI2YTIuNCwyLjQsMCwwLDEtMi4zOTQsMi4zOTRINi4wNGEyLjQsMi40LDAsMCwxLTIuMzk0LTIuMzk0VjEyLjZBMi40LDIuNCwwLDAsMSw2LjA0LDEwLjIwNkgyNi4xNjVBMi40LDIuNCwwLDAsMSwyOC41NTksMTIuNlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMjQuMzQ5LDE2LjI1YTEuOTcyLDEuOTcyLDAsMCwxLDEuNTc4LDEuODkxLDEuNjksMS42OSwwLDAsMS0uNjUzLDEuNCwyLjkzNCwyLjkzNCwwLDAsMS0xLjg2Mi41NTksNC41NTgsNC41NTgsMCwwLDEtMi4yNDEtLjYxOCwxLjk4NiwxLjk4NiwwLDAsMSwuMTYtLjY2OSwxLjgzLDEuODMsMCwwLDEsLjM1LS41NzYsMy43LDMuNywwLDAsMCwxLjY0OS40OTMuOTY1Ljk2NSwwLDAsMCwuNTEtLjExMi4zMzkuMzM5LDAsMCwwLC4xNzgtLjNxMC0uMzUzLS41NDYtLjUyOWwtLjY1My0uMjQ3cS0xLjQ4Mi0uNTQtMS40ODItMS43NjJhMS43NTMsMS43NTMsMCwwLDEsLjYyMy0xLjQxNiwyLjU4NywyLjU4NywwLDAsMSwxLjY3OC0uNjQ4LDUuMDk0LDUuMDk0LDAsMCwxLDEuMTUuMTQ3LDQuNTU1LDQuNTU1LDAsMCwxLDEuMDMyLjQ3MiwxLjY2OCwxLjY2OCwwLDAsMS0uMTMuNzIyLDEuMjIsMS4yMiwwLDAsMS0uMzguNTU4LDQuMjYxLDQuMjYxLDAsMCwwLTEuNjYtLjQ0Ni41NDQuNTQ0LDAsMCwwLS4zNjIuMTA2LjMzOC4zMzgsMCwwLDAtLjEyNC4yN3EwLC4yODIuNDUxLjQ0NmwuNzM2LjI1OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmNmY2ZjZcXFwiLz48cGF0aCBkPVxcXCJNMTkuMSwxNi4yNWExLjk3MiwxLjk3MiwwLDAsMSwxLjU3NywxLjg5MSwxLjY5MSwxLjY5MSwwLDAsMS0uNjUyLDEuNCwyLjkzNywyLjkzNywwLDAsMS0xLjg2Mi41NTksNC41Niw0LjU2LDAsMCwxLTIuMjQxLS42MTgsMS45ODEsMS45ODEsMCwwLDEsLjE2LS42NjksMS44MjEsMS44MjEsMCwwLDEsLjM1LS41NzYsMy43LDMuNywwLDAsMCwxLjY0OS40OTMuOTYzLjk2MywwLDAsMCwuNTEtLjExMi4zNC4zNCwwLDAsMCwuMTc4LS4zcTAtLjM1My0uNTQ2LS41MjlsLS42NTMtLjI0N3EtMS40ODItLjU0LTEuNDgyLTEuNzYyYTEuNzUyLDEuNzUyLDAsMCwxLC42MjMtMS40MTYsMi41ODUsMi41ODUsMCwwLDEsMS42NzctLjY0OCw1LjA4OCw1LjA4OCwwLDAsMSwxLjE1LjE0Nyw0LjU1Miw0LjU1MiwwLDAsMSwxLjAzMi40NzIsMS42NjgsMS42NjgsMCwwLDEtLjEzLjcyMiwxLjIyLDEuMjIsMCwwLDEtLjM4LjU1OCw0LjI2Myw0LjI2MywwLDAsMC0xLjY2MS0uNDQ2LjU0My41NDMsMCwwLDAtLjM2Mi4xMDYuMzM5LjMzOSwwLDAsMC0uMTI0LjI3cTAsLjI4Mi40NTEuNDQ2bC43MzYuMjU5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2Y2ZjZmNlxcXCIvPjxwYXRoIGQ9XFxcIk0xNS4yNjQsMTYuMzMzYTIuODIyLDIuODIyLDAsMCwwLS4xNzItMSwyLjIzOSwyLjIzOSwwLDAsMC0uNDkyLS43ODcsMi4yOCwyLjI4LDAsMCwwLS43NzctLjUxNywyLjczNywyLjczNywwLDAsMC0xLjAyNi0uMzE0LDIuOCwyLjgsMCwwLDAtMS4xOC4zNjEsMi4yNTYsMi4yNTYsMCwwLDAtLjgzLjY0NiwyLjc2NSwyLjc2NSwwLDAsMC0uNDg3Ljk2OSw0LjQsNC40LDAsMCwwLS4xNiwxLjIxNiw1LjY4MSw1LjY4MSwwLDAsMCwuMTMsMS4yNTcsMi42MjgsMi42MjgsMCwwLDAsLjQ0NSwxLDIuMTA3LDIuMTA3LDAsMCwwLC44MTguNjU3LDIuOTM1LDIuOTM1LDAsMCwwLDEuMjUxLjI3NywzLjk1MiwzLjk1MiwwLDAsMCwyLjMyNC0uNzEyLDEuODY1LDEuODY1LDAsMCwwLS40ODQtMS4wODEsNi4xODgsNi4xODgsMCwwLDEtLjg1Ny4yNjIsMy4yMDgsMy4yMDgsMCwwLDEtLjY1Ni4wNzksMS4wMTcsMS4wMTcsMCwwLDEtLjgxNS0uMjksMS4xODcsMS4xODcsMCwwLDEtLjI3MS0uNzdoMy4wODNBNC40NDcsNC40NDcsMCwwLDAsMTUuMjY0LDE2LjMzM1ptLTMuMjQ4LjA4MWEyLjQzMywyLjQzMywwLDAsMSwuMjE4LTEsLjYzMi42MzIsMCwwLDEsLjU1OS0uMjY0LjY2LjY2LDAsMCwxLC41ODIuMjgyLDEuNzQ5LDEuNzQ5LDAsMCwxLC4xOTQuODU2di4xM0gxMi4wMTZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjZmNmY2XFxcIi8+PHBhdGggZD1cXFwiTTI5LjE4LDE3LjJhMS42MDUsMS42MDUsMCwwLDAtLjUzLDEuMjY1djIuMDUxYTEuODEsMS44MSwwLDAsMS0uNjgzLDEuNTU3LDIuOCwyLjgsMCwwLDEtMS42NTQuNTQ5bC0uMzczLDBWMjEuNTk0YTEuMjQxLDEuMjQxLDAsMCwwLC41OTUtLjMzNCwxLjM2OSwxLjM2OSwwLDAsMCwuNDE5LTEuMDQ3VjE4LjU1NmEyLjU0NSwyLjU0NSwwLDAsMSwuMjU3LTEuMzIzLDIuNSwyLjUsMCwwLDEsMS4yLS44MzgsMi41MjgsMi41MjgsMCwwLDEtMS4zMjQtMS4xNzksMi45NTYsMi45NTYsMCwwLDEtLjEzNS0xLjE2NVYxMi41MzNhMS40NTgsMS40NTgsMCwwLDAtLjM2Ni0xLjA1NCwxLjE1MiwxLjE1MiwwLDAsMC0uNjQ4LS4zMTR2LS45NmMuNDQ1LDAsLjY2OSwwLC45MjgsMGExLjY3NiwxLjY3NiwwLDAsMSwxLjAyMy40NDIsMiwyLDAsMCwxLC42NzMsMS4wMDksMi4zMywyLjMzLDAsMCwxLC4wODYuN3YxLjc1N2ExLjg0NiwxLjg0NiwwLDAsMCwuNSwxLjM4MywyLjExMywyLjExMywwLDAsMCwuODU0LjQ3OXYuNzk0YTEuOTQzLDEuOTQzLDAsMCwwLS44Mi40MjZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjZmNmY2O3N0cm9rZTojNDA0MDQwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjI1cHhcXFwiLz48cGF0aCBkPVxcXCJNNS41OTQsMTAuMjA2SDUuMjZhMS42NzMsMS42NzMsMCwwLDAtMS4wMjMuNDQyLDEuNzEsMS43MSwwLDAsMC0uNjczLDEuMDA5LDMuNTMxLDMuNTMxLDAsMCwwLS4wMzguN3YxLjc1N0ExLjg2NywxLjg2NywwLDAsMSwyLjk4MSwxNS41LDIuODQ3LDIuODQ3LDAsMCwxLDIsMTUuOTc3di43OTNhMi41NTIsMi41NTIsMCwwLDEsLjk0Ny40MjYsMS42MzgsMS42MzgsMCwwLDEsLjU3NywxLjI2NXYyLjA1MUExLjc4MSwxLjc4MSwwLDAsMCw0LjE2LDIyLjA3YTIuOCwyLjgsMCwwLDAsMS42NTQuNTVsLjQyMSwwVjIxLjU5NGExLjQ3LDEuNDcsMCwwLDEtLjY0My0uMzM0LDEuMzU1LDEuMzU1LDAsMCwxLS4zNzEtMS4wNDdWMTguNTU3YTIuNTE2LDIuNTE2LDAsMCwwLS4zMDUtMS4zMjMsMi41LDIuNSwwLDAsMC0xLjItLjgzOCwyLjUyOSwyLjUyOSwwLDAsMCwxLjMyNC0xLjE3OCwyLjg1NywyLjg1NywwLDAsMCwuMTgzLTEuMTY1VjEyLjUzNEExLjQ2MiwxLjQ2MiwwLDAsMSw1LjU0LDExLjQ4YTEuMzEzLDEuMzEzLDAsMCwxLC41NzUtLjI3MWwuNDI4LDBWMTAuMjA2SDUuNTk0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2Y2ZjZmNjtzdHJva2U6IzQwNDA0MDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yNXB4XFxcIi8+PHBhdGggZD1cXFwiTTkuNTM3LDE4LjUyOWgtLjMyYy0uMzQ4LDAtLjQ3OS0uMTgzLS40NzktLjU1MVYxMS4yMTlhMS4yNTYsMS4yNTYsMCwwLDAtLjI2OC0uODU2Yy0uMTUtLjE2NC0uNDExLS4xNjItLjc4My0uMTYySDYuOTY0bC0uMDg1LDB2OC4xMDZhMS44NzUsMS44NzUsMCwwLDAsLjM1MiwxLjI0LDEuNDQxLDEuNDQxLDAsMCwwLDEuMTQ1LjM5Myw3Ljg1OSw3Ljg1OSwwLDAsMCwxLjI2OS0uMTE4LDIuMjMsMi4yMywwLDAsMCwuMDM2LS41MDksMi4yNzgsMi4yNzgsMCwwLDAtLjE0Mi0uNzgyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2Y2ZjZmNlxcXCIvPlwiLFxuXHRcIkxpcXVpZFwiOiBcIjxwYXRoIGQ9XFxcIk0yOS45ODgsMjIuMzcybC0uNzQ4LjA0OGE1LjIwOSw1LjIwOSwwLDAsMS0yLjk5LS42NzEsNy44LDcuOCwwLDAsMC03LjgsMCw1LjI3NSw1LjI3NSwwLDAsMS01LjMuMDFBNy4yNjIsNy4yNjIsMCwwLDAsOS4yNjMsMjAuN2E3LjIyOSw3LjIyOSwwLDAsMC0zLjk0LDEuMDYsNC43NTEsNC43NTEsMCwwLDEtMi40Ny43bC0uODM4LDBjMCwuODg5LS4wMDksMS43MzktLjAxNSwyLjUxNWwuODYxLDBhNy4yMzcsNy4yMzcsMCwwLDAsMy43NS0xLjA1Miw0Ljc2Myw0Ljc2MywwLDAsMSwyLjY1OS0uNyw0LjgzNSw0LjgzNSwwLDAsMSwyLjYzNC43MTgsNy43OTQsNy43OTQsMCwwLDAsNy44LDAsNS4yODcsNS4yODcsMCwwLDEsNS4zMTksMCw3LjcwOSw3LjcwOSwwLDAsMCw0LjQuOTg5TDMwLDI0Ljg4OEMyOS45OTUsMjQuMSwyOS45OTEsMjMuMjQ5LDI5Ljk4OCwyMi4zNzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA0OTk5XFxcIi8+PHBhdGggZD1cXFwiTTI5Ljk4MywxNS41ODFsLS43NDMuMDQ3YTUuMjI2LDUuMjI2LDAsMCwxLTIuOTktLjY3MSw3LjgsNy44LDAsMCwwLTcuOCwwLDUuMjc4LDUuMjc4LDAsMCwxLTUuMy4wMUE3LjMxMiw3LjMxMiwwLDAsMCw5LjI2MywxMy45MWE3LjMsNy4zLDAsMCwwLTMuOTQxLDEuMDYsNC43NDIsNC43NDIsMCwwLDEtMi40NjkuN2wtLjgyOCwwYzAsLjg0OSwwLDEuNjkzLDAsMi41MTVsLjg0LDBhNy4yMzcsNy4yMzcsMCwwLDAsMy43NS0xLjA1Miw0LjcsNC43LDAsMCwxLDIuNjU5LS43LDQuOCw0LjgsMCwwLDEsMi42MzQuNzE4LDcuNzk0LDcuNzk0LDAsMCwwLDcuOCwwLDUuMjg3LDUuMjg3LDAsMCwxLDUuMzE5LDAsNy43MDksNy43MDksMCwwLDAsNC40Ljk4OWwuNTY4LS4wMzdDMjkuOTgzLDE3LjI2OSwyOS45ODMsMTYuNDI0LDI5Ljk4MywxNS41ODFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA0OTk5XFxcIi8+PHBhdGggZD1cXFwiTTI5LjI0LDkuMTM3YTUuMjU0LDUuMjU0LDAsMCwxLTIuOTktLjY3MSw3LjgsNy44LDAsMCwwLTcuOCwwLDUuMjc1LDUuMjc1LDAsMCwxLTUuMy4wMDlBNy4xNiw3LjE2LDAsMCwwLDkuMjYzLDcuNDJhNy4xNTksNy4xNTksMCwwLDAtMy45NCwxLjA1OSw0LjczOCw0LjczOCwwLDAsMS0yLjQ2OS43bC0uODM0LDBjMCwuODIsMCwxLjY2NCwwLDIuNTE3bC44MzYsMGE3LjIzNyw3LjIzNywwLDAsMCwzLjc1LTEuMDUyLDQuNzM4LDQuNzM4LDAsMCwxLDIuNjU5LS43MDYsNC44MTQsNC44MTQsMCwwLDEsMi42MzQuNzE5LDcuNzkxLDcuNzkxLDAsMCwwLDcuOCwwLDUuMjkzLDUuMjkzLDAsMCwxLDUuMzE5LDAsNy43MzIsNy43MzIsMCwwLDAsNC40Ljk4OGwuNTY4LS4wMzdjMC0uODU5LDAtMS43LjAwNy0yLjUxNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDQ5OTlcXFwiLz5cIixcblx0XCJMaXNwXCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiMTkyNS43ODVcXFwiIHkxPVxcXCItMTM4My4wNzVcXFwiIHgyPVxcXCIyMzAyLjM1MVxcXCIgeTI9XFxcIi0xODY4LjU1N1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgwLjA0OCwgMCwgMCwgLTAuMDQ1LCAtODIuNTM5LCAtNTQuNjUpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjODM4MWM1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjU2NlxcXCIgc3RvcC1jb2xvcj1cXFwiIzdlNTViM1xcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjk5NlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2E1MmVjYlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjk5MlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiMjIxNC4xODdcXFwiIHkxPVxcXCItMTc1MC4yMjVcXFwiIHgyPVxcXCIxOTMwLjk3NFxcXCIgeTI9XFxcIi0xNDA4LjM0MlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgwLjA1NCwgMCwgMCwgLTAuMDU0LCAtOTUuMTg4LCAtNjguNDg3KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzQxMWY1ZFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzViMmE4NVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfZW1hY3M8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yOS4zNjMsMTZBMTMuMzY0LDEzLjM2NCwwLDEsMSwxNiwyLjUsMTMuNDMyLDEzLjQzMiwwLDAsMSwyOS4zNjMsMTZaXFxcIiBzdHlsZT1cXFwic3Ryb2tlLXdpZHRoOjAuNzVweDtmaWxsOnVybCgjYSk7c3Ryb2tlOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNMTEuNDA2LDI1LjQ4M2ExOC4xNTcsMTguMTU3LDAsMCwwLDIuNTg3LS4wNDgsNDEuNzI4LDQxLjcyOCwwLDAsMCw0LjUtLjYzOSwzMC42NzEsMzAuNjcxLDAsMCwwLDMuMTMyLS44MzljMS4xNDItLjQyMSwxLjc2NC0uNzc4LDIuMDQzLTEuMjg0YS42Mi42MiwwLDAsMC0uNDQxLS42OTJjLTEuMzQ3LS41NjUtMi45MDgtLjQ2My02LS41MjgtMy40MjctLjExOC00LjU2Ny0uNjkxLTUuMTc0LTEuMTUzLS41ODItLjQ2OS0uMjktMS43NjUsMi4yMDYtMi45MDdhNTQuMjY2LDU0LjI2NiwwLDAsMSw2LjE4NC0xLjczYy0xLjY1OS0uODItNC43NTMtMi4yNjItNS4zODktMi41NzMtLjU1OC0uMjczLTEuNDUxLS42ODQtMS42NDQtMS4xODItLjIxOS0uNDc4LjUxOC0uODg5LjkzLTEuMDA3YTIwLjMsMjAuMywwLDAsMSw0LjktLjY0Nyw0LjMwOCw0LjMwOCwwLDAsMCwxLS4wNjlBMS43NjcsMS43NjcsMCwwLDAsMjEuODc5LDcuOWEyLjc3NSwyLjc3NSwwLDAsMC0zLjI4Ni0xLjgxQzE3LjIyLDYuMzM4LDEzLjkwOCw3LjMsMTMuOTA4LDcuM2M0LjA5My0uMDM1LDQuNzc5LjAzMyw1LjA4NS40NjEuMTgxLjI1My0uMDgyLjYtMS4xNzQuNzc3LTEuMTg5LjE5NC0zLjY1OS40MjgtMy42NTkuNDI4LTIuMzcuMTQxLTQuMDQuMTUtNC41NCwxLjIxLS4zMjcuNjkzLjM0OSwxLjMuNjQ1LDEuNjg4YTEyLjcyOCwxMi43MjgsMCwwLDAsNC4yMjUsMi43Yy40MzguMjA4LDEuNzIzLjYsMS43MjMuNmExMS41MiwxMS41MiwwLDAsMC04LjEsMi4yODdjLTEuODA3LDEuNjcyLTEuMDA4LDMuNjY1LDIuNjk1LDQuODkxYTEyLjc1NSwxMi43NTUsMCwwLDAsNi41MzQuNzcyYzEuOTIyLS4xLDIuMjI0LS4wNDIsMi4yNDQuMTE2LjAyNy4yMjItMi4xMzQuNzczLTIuNzI0Ljk0NC0xLjUuNDMzLTUuNDM2LDEuMzA3LTUuNDU2LDEuMzEyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcIkxpdmVTY3JpcHRcIjogXCI8cG9seWdvbiBwb2ludHM9XFxcIjUuNTA0IDIuMDA3IDguOTg2IDIgOC45ODYgMjEuNzQ2IDEwLjc1OSAxOS45ODcgMTAuNzU5IDMuNzU1IDEyLjQ5NyAzLjc1NSAxMi40OTcgMTguMjQgMTQuMjUzIDE2LjQ4NyAxNC4yNTMgMy43NTUgMTUuOTk3IDMuNzU1IDE1Ljk5NyAxNC43MjkgMTcuNzM1IDEyLjk2MiAxNy43MzUgMy43NTUgMTkuNDYxIDMuNzU1IDE5LjQ2MSAxMS4yMjUgMjEuMjQ1IDkuNDYxIDIxLjI0NSAzLjc1NSAyMi45NzIgMy43NTUgMjIuOTcyIDcuNzIzIDI0LjczOCA1Ljk3NSAyNC43MzkgMy43NTUgMjYuNDgzIDMuNzU1IDI2LjQ4MyA1LjQ4MiAyOC4yMDkgNS40ODIgMjguMjA5IDcuMjY3IDI1LjkxMSA3LjI2OCAyNC4xODQgOC45OTMgMjguMjA5IDguOTkzIDI4LjIwOSAxMC43MTkgMjIuNDM4IDEwLjcxOSAyMC42OTggMTIuNTA0IDI4LjIwOSAxMi41MDQgMjguMjA5IDE0LjIzIDE4Ljk2MSAxNC4yMyAxNy4yMDUgMTYuMDE0IDI4LjIwOSAxNi4wMTQgMjguMjA5IDE3Ljc0MSAxNS40NTUgMTcuNzQxIDEzLjcxNSAxOS40OTYgMjguMjA5IDE5LjQ5NiAyOC4yMDkgMjEuMjUyIDExLjk4IDIxLjI1MiAxMC4yNDIgMjIuOTc4IDI5Ljk4MiAyMi45NzggMjkuOTg5IDI2LjQ4OSA4Ljk4NiAyNi40ODkgOC45ODYgMzAgNS41MDQgMzAgNS41MDQgMjYuNDg5IDIuMDExIDI2LjQ4OSAyLjAxMSAyMi45NzggNS41MDQgMjIuOTc4IDUuNTAzIDIgNS41MDQgMi4wMDdcXFwiIHN0eWxlPVxcXCJmaWxsOiMzMTdlYWNcXFwiLz5cIixcblx0XCJMb2cgZmlsZVwiOiBcIjxwYXRoIGQ9XFxcIk0yOS40LDI3LjZIMi41VjQuNUgyOS40Wm0tMjUuOS0xSDI4LjRWNS41SDMuNVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCIyLjVcXFwiIHk9XFxcIjUuNVxcXCIgd2lkdGg9XFxcIjI2LjlcXFwiIGhlaWdodD1cXFwiMS45XFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiMTEuMzMzXFxcIiB5PVxcXCI5LjVcXFwiIHdpZHRoPVxcXCI4LjE2N1xcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiMTEuMzMzXFxcIiB5PVxcXCIxMi4wODNcXFwiIHdpZHRoPVxcXCIxMi41XFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCIxMS4zMzNcXFwiIHk9XFxcIjE0Ljc1XFxcIiB3aWR0aD1cXFwiMTAuNjE3XFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCIxMS4zMzNcXFwiIHk9XFxcIjE3LjU4M1xcXCIgd2lkdGg9XFxcIjE0LjE2N1xcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiMTEuMzMzXFxcIiB5PVxcXCIyMC41XFxcIiB3aWR0aD1cXFwiOS44MzRcXFwiIGhlaWdodD1cXFwiMVxcXCIgc3R5bGU9XFxcImZpbGw6IzAwYmQwMlxcXCIvPjxyZWN0IHg9XFxcIjExLjVcXFwiIHk9XFxcIjIzLjA4M1xcXCIgd2lkdGg9XFxcIjEyLjE2N1xcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiNS41XFxcIiB5PVxcXCI5LjVcXFwiIHdpZHRoPVxcXCI0LjMzM1xcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiNS41XFxcIiB5PVxcXCIxMi4wODNcXFwiIHdpZHRoPVxcXCI0LjMzM1xcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiNS41XFxcIiB5PVxcXCIxMi4wODNcXFwiIHdpZHRoPVxcXCI0LjMzM1xcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiNS41XFxcIiB5PVxcXCIxNC42NjdcXFwiIHdpZHRoPVxcXCI0LjMzM1xcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiNS41XFxcIiB5PVxcXCIxNy4yNVxcXCIgd2lkdGg9XFxcIjQuMzMzXFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCI1LjVcXFwiIHk9XFxcIjIwLjVcXFwiIHdpZHRoPVxcXCI0LjMzM1xcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiNS41XFxcIiB5PVxcXCIyMy4wODNcXFwiIHdpZHRoPVxcXCI0LjMzM1xcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+XCIsXG5cdFwiTE9MQ09ERVwiOiBcIjxwYXRoIGQ9XFxcIk0yMS4zLDMuNzNhMy45NCwzLjk0LDAsMCwxLDEuMDQxLS42Miw4LjQzNSw4LjQzNSwwLDAsMSwuNTU2LDMuMzg1LDI0Ljg2NSwyNC44NjUsMCwwLDEtLjY0Myw1LjAxOWMtLjM2OC0uMTgtLjczNi0uMzY0LTEuMS0uNTU0YTExLjc1NCwxMS43NTQsMCwwLDAsLjI3My0zLjc0NywzLjA4LDMuMDgsMCwwLDAtLjI1NS0uODY1LDUuMTQyLDUuMTQyLDAsMCwwLTIuMDE2LDIuMDdjLS4zMTktLjI0LS42NTItLjQ1OS0uOTg1LS42NzZBMTUuNzE2LDE1LjcxNiwwLDAsMSwyMS4zLDMuNzNaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWRlZGVkXFxcIi8+PHBhdGggZD1cXFwiTTE5LjQ1MSw4LjZhNC41NzQsNC41NzQsMCwwLDEsMS41MDktMS41NjMsNi42ODUsNi42ODUsMCwwLDEsLjA5LDIuNjcxQzIwLjUxNyw5LjM0MywxOS45NzUsOC45ODcsMTkuNDUxLDguNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZGVkZWRcXFwiLz48cGF0aCBkPVxcXCJNMTYuNDYxLDEwLjA3NmMtLjAzOC0xLjEzNC0uMDMxLTIuMjY5LS4wMjYtMy40LS45LjQ5My0xLjc1OCwxLjA3MS0yLjY0OCwxLjU4OS0uNDUzLjI3LS45MDguNTM2LTEuMzYuODA4LjIyNC0uMTYzLjQ1Ny0uMzEyLjY5LS40NjItLjg2MS0xLjIyNC0xLjk3MS0yLjUtMy41My0yLjc0OGExMC45NjQsMTAuOTY0LDAsMCwwLS4zNjUsNS4xNDdjLjMxOC0uMTk1LjYzMy0uNC45NjItLjU3Mi0uNDc0LjMxOS0uOTY0LjYxNS0xLjQ0Ni45Mi0uOTU3LjYtMS45MjIsMS4xOTItMi44OTIsMS43NzdhMS4yMzIsMS4yMzIsMCwwLDAtLjM5MS4zMmMtLjEsMS4zOTUtLjM0LDQuMzkyLS4zNCw0LjM5Mi0uMjU0LDMuNjY4LS41MjIsNy4zMzYtLjgyNiwxMSw0LjA2Mi4zNDMsOC4xMTguNzQyLDEyLjE3OSwxLjA3NkMxNi40NTgsMjMuMywxNi40NzIsMTYuNjksMTYuNDYxLDEwLjA3NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZGVkZWRcXFwiLz48cGF0aCBkPVxcXCJNMjEuMSwyLjk3N0E1Ljg4NCw1Ljg4NCwwLDAsMSwyMi43MDYsMmExMC4wNjQsMTAuMDY0LDAsMCwxLC43NzIsNC42MDYsMjQuNTkxLDI0LjU5MSwwLDAsMS0uNTA4LDQuNDU5YzEuMi44NDYsMi40MzMsMS42NDUsMy42MTgsMi41MDlxLjQ0LDYuMzguOTA3LDEyLjc1OGMuMDY2LjgzOS4wOTQsMS42OC4yMTYsMi41MTMtMy4wMjkuMjc5LTYuMDU3LjU5MS05LjA4NS44ODZhMTkuMTM3LDE5LjEzNywwLDAsMC0yLjE1OC4yN3YtLjA4M2MtLjAxLTYuNjE0LDAtMTMuMjI3LS4wMDctMTkuODQxLS4wMzgtMS4xMzQtLjAzMS0yLjI2OS0uMDI2LTMuNHYtLjFjLjQwNi4yOTIuODI2LjU2MiwxLjI0My44MzlBMTYuMjc0LDE2LjI3NCwwLDAsMSwyMS4xLDIuOTc3Wm0uMi43NTJhMTUuNzE2LDE1LjcxNiwwLDAsMC0zLjEyOCw0LjAxMWMuMzM0LjIxNy42NjYuNDM3Ljk4NS42NzZhNS4xNDIsNS4xNDIsMCwwLDEsMi4wMTYtMi4wNywzLjA4LDMuMDgsMCwwLDEsLjI1NS44NjUsMTEuNzU0LDExLjc1NCwwLDAsMS0uMjczLDMuNzQ3Yy4zNjQuMTkuNzMxLjM3NCwxLjEuNTU0YTI0Ljg2NSwyNC44NjUsMCwwLDAsLjY0My01LjAxOSw4LjQzNSw4LjQzNSwwLDAsMC0uNTU2LTMuMzg1QTMuOTQsMy45NCwwLDAsMCwyMS4zLDMuNzNaTTE5LjQ1MSw4LjZjLjUyNC4zODMsMS4wNjYuNzM5LDEuNiwxLjEwOGE2LjY4NSw2LjY4NSwwLDAsMC0uMDktMi42NzFBNC41NzQsNC41NzQsMCwwLDAsMTkuNDUxLDguNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4ZDI3MDFcXFwiLz48cGF0aCBkPVxcXCJNOS4yMTksNS4wNjJhMy41ODEsMy41ODEsMCwwLDEsMi4yMDUuNzQ4QTEyLjksMTIuOSwwLDAsMSwxMy43ODgsOC4yNmMtLjQ1My4yNy0uOTA4LjUzNi0xLjM2LjgwOC4yMjQtLjE2My40NTctLjMxMi42OS0uNDYyLS44NjEtMS4yMjQtMS45NzEtMi41LTMuNTMtMi43NDhhMTAuOTY0LDEwLjk2NCwwLDAsMC0uMzY1LDUuMTQ3Yy4zMTgtLjE5NS42MzMtLjQuOTYyLS41NzItLjQ3NC4zMTktLjk2NC42MTUtMS40NDYuOTJBMTQuMSwxNC4xLDAsMCwxLDkuMjE5LDUuMDYyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC41MDcsOC40NzZhMi40NTUsMi40NTUsMCwwLDEsMS41MTcuODhsLS4zNi4yQTIuNjksMi42OSwwLDAsMCwxMC43MzksOWEzLjMxOCwzLjMxOCwwLDAsMC0uMTY1LDEuMjgxbC0uMzQ0LjExQTcuMDIxLDcuMDIxLDAsMCwxLDEwLjUwNyw4LjQ3NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4ZDI3MDFcXFwiLz48cGF0aCBkPVxcXCJNMTIuMTM5LDEwLjY5M2EuNDg3LjQ4NywwLDAsMSwuNTQyLjAxLDEuNTUyLDEuNTUyLDAsMCwxLC4wNjIuNmMtLjAzOS43ODQuMDI0LDEuNTczLS4wNzYsMi4zNTRhMS4wMTMsMS4wMTMsMCwwLDEtMS4wMTIuODg2Yy0uMjMzLS4wNS0uMjc4LS4zNDEtLjI3OC0uNTQxLDAtLjY3NS4xLTEuMzQ3LjA2Ni0yLjAyNEExLjMsMS4zLDAsMCwxLDEyLjEzOSwxMC42OTNabS4xNSwxLjA4NGEuODkxLjg5MSwwLDAsMCwuMjUxLS44NjZDMTIuMjE4LDExLjA2MSwxMS45LDExLjUwNywxMi4yODksMTEuNzc3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk0xNC41LDEzLjcyOGExNy42NzEsMTcuNjcxLDAsMCwxLDEuOTI4LS44MjJjLS4wMjQuMDY0LS4wNjkuMTkxLS4wOTIuMjU1LS42NDkuMzU4LTEuMzYuNi0yLjAyMS45MzhhMTIuMTE4LDEyLjExOCwwLDAsMC0zLjIzOCwyLjI0OEE3LjIsNy4yLDAsMCwxLDEwLDE3LjM4MWE0LjE2Niw0LjE2NiwwLDAsMSwuOTgtMS4yNDZBMTIuNzI3LDEyLjcyNywwLDAsMSwxNC41LDEzLjcyOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4ZDI3MDFcXFwiLz48cGF0aCBkPVxcXCJNNy42MjgsMTMuMjMxYS45ODkuOTg5LDAsMCwxLC41OTQtLjE1MiwxOC4xMTQsMTguMTE0LDAsMCwxLS4xLDIuNjU0LjcxMy43MTMsMCwwLDEtLjg5Mi42NTgsMjEuMSwyMS4xLDAsMCwxLC4wODItMi4yMjZBMS4zODMsMS4zODMsMCwwLDEsNy42MjgsMTMuMjMxWm0uMTc5LjgzMWMuMjY4LS4xMTIuMzE5LS40MTMuNDEyLS42NTRDNy44MiwxMy4zMTIsNy43NzUsMTMuNzgzLDcuODA3LDE0LjA2MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4ZDI3MDFcXFwiLz48cGF0aCBkPVxcXCJNMTAuODIzLDE3LjA5NGExMy45MzQsMTMuOTM0LDAsMCwxLDQuNjEyLTEuOTY4Yy0uMDEuMDY4LS4wMjkuMjA2LS4wMzkuMjc0YTE0LjI3MywxNC4yNzMsMCwwLDAtNC40NzUsMS45MTQsMi42MjYsMi42MjYsMCwwLDEtLjY4MS4zNDNDMTAuMywxNy4zNTYsMTAuNiwxNy4yNDksMTAuODIzLDE3LjA5NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4ZDI3MDFcXFwiLz48cGF0aCBkPVxcXCJNNS4yNjQsMTcuNTlBNS4xNDQsNS4xNDQsMCwwLDEsOCwxNy4xYTEuNSwxLjUsMCwwLDEsMS4xNDIuNjY1QTYuODU0LDYuODU0LDAsMCwwLDcuNiwxNy4yNzhhNi45NjcsNi45NjcsMCwwLDAtMi40ODQuNTY0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC41NzgsMTcuNzI1YTkuNTksOS41OSwwLDAsMSwzLjYxLS41NjZjLjI0LjAyMS4zMjEuMi4zMTMuNDI0YTMuMjM4LDMuMjM4LDAsMCwwLTEuOTU2LS4wOSwyMS42ODgsMjEuNjg4LDAsMCwwLTIuNTU3LjY1OEM5Ljk5NSwxNy44MjksMTAuMzQ1LDE3LjgwOSwxMC41NzgsMTcuNzI1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk05LjI2OCwxNy42NzZjLjE0OS0uMTc2LjUzMy0uMzMyLjY2NC0uMDYyYTEuMywxLjMsMCwwLDEtLjUxNi45OTNDOS4yNjgsMTguMzM3LDguOTczLDE3Ljk1Miw5LjI2OCwxNy42NzZaXFxcIiBzdHlsZT1cXFwiZmlsbDojOGQyNzAxXFxcIi8+PHBhdGggZD1cXFwiTTUuNzQ0LDE4LjYyOWE1LjksNS45LDAsMCwxLDMuMTgyLS42MThjLS4xODIuMjM1LS40OTMuMTc4LS43NTEuMjA4YTUuNjYzLDUuNjYzLDAsMCwwLTEuNzIuMzNjLS4zNDQuMTI4LS42NjUuMzEtMS4wMi40MDlBLjYuNiwwLDAsMSw1Ljc0NCwxOC42MjlaXFxcIiBzdHlsZT1cXFwiZmlsbDojOGQyNzAxXFxcIi8+PHBhdGggZD1cXFwiTTYuOSwxOS4xMTRhOS42NzYsOS42NzYsMCwwLDEsMi4yLS44NTRjLS4xLjMtLjQ0MS4zMzgtLjcuNDQ0YTcuODM5LDcuODM5LDAsMCwwLTIuNTY0LDEuNDE1QzUuOTM4LDE5LjU4NCw2LjQ4OCwxOS4zNjksNi45LDE5LjExNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4ZDI3MDFcXFwiLz48cGF0aCBkPVxcXCJNMTEuNjM1LDE5LjdhMy4xMSwzLjExLDAsMCwwLDEuOTEtMS4zODNjLjM0Ny0uMS4yNzMuMjc1LjI2LjQ5NGEyLjA1NiwyLjA1NiwwLDAsMS0uOTUsMS4wMzYsMTIuMzY1LDEyLjM2NSwwLDAsMS0xLjgyNyw2LjQxOUEyLjM0MiwyLjM0MiwwLDAsMSw4Ljg3OSwyNy41YTIuMjUxLDIuMjUxLDAsMCwxLTEuNTM1LTEuNDksMTAuODk0LDEwLjg5NCwwLDAsMS0uNjktNC42NjVjLS4xNTctLjExMi0uMzY5LS4xNzktLjQ2LS4zNjItLjEzLS4yLjAxMS0uNDI1LjA0Ny0uNjMxLjE5LjE1MS4zNDUuMzkyLjYwNi40MmEzLjYxNywzLjYxNywwLDAsMCwxLjg2My0uNCwxLjU4OCwxLjU4OCwwLDAsMCwuNzA5LS42NjIsMy44ODEsMy44ODEsMCwwLDAsLjQzMS4yNjZBNC4yOCw0LjI4LDAsMCwwLDExLjYzNSwxOS43Wm0tMi4yLjgzNWE0LjEzMiw0LjEzMiwwLDAsMS0yLjQ2Mi44MDksMTEuMDQ5LDExLjA0OSwwLDAsMCwuMzU4LDMuNTI2LDMuMjI2LDMuMjI2LDAsMCwxLC45LTEuMjgyLDIuMDU1LDIuMDU1LDAsMCwxLDIuMy0uMiwyLjMsMi4zLDAsMCwxLC44ODQsMS4xNzIsMTQuNjU5LDE0LjY1OSwwLDAsMCwxLjAwNS00LjQ4OUE1LjE2Nyw1LjE2NywwLDAsMSw5LjQzNSwyMC41MzJabS0uMzI5LDMuMjZhMi4yNzMsMi4yNzMsMCwwLDAtMS41LDEuNDM0Yy0uMTIzLjI2OS4xLjUxNy4yMjUuNzM4LjMzMS40NjIuNzk1LDEsMS40MzEuODkzYTIuODY4LDIuODY4LDAsMCwwLDEuNzY5LTEuNkExLjYsMS42LDAsMCwwLDkuMTA2LDIzLjc5MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4ZDI3MDFcXFwiLz5cIixcblx0XCJMdWFcIjogXCI8cGF0aCBkPVxcXCJNMTYuNSwzMGwtLjAxMS0uMzIxYy40LS4wMTQuOC0uMDQ1LDEuMTktLjA5NGwuMDM5LjMxOUMxNy4zMTIsMjkuOTUyLDE2LjksMjkuOTg0LDE2LjUsMzBabS0xLjIyMi0uMDExYy0uNC0uMDIxLS44MTQtLjA2MS0xLjIxNi0uMTE4bC4wNDUtLjMxOGMuMzkzLjA1NS43OTMuMDk0LDEuMTg4LjExNVpNMTguOTIsMjkuN2wtLjA2Ny0uMzE0Yy4zODctLjA4My43NzYtLjE4NCwxLjE1NS0uM2wuMDk0LjMwN0MxOS43MTQsMjkuNTExLDE5LjMxNiwyOS42MTUsMTguOTIsMjkuN1ptLTYuMDYzLS4wNTNjLS40LS4wOTEtLjc5MS0uMi0xLjE3Ny0uMzI2bC4xLS4zMDZjLjM3Ny4xMjIuNzY0LjIzLDEuMTUuMzE5Wm04LjQtLjY2NS0uMTIxLS4zYy4zNjQtLjE0OC43MjgtLjMxNCwxLjA4LS40OTNsLjAwNiwwLC4xNDUuMjg2LDAsMEMyMiwyOC42NjEsMjEuNjI2LDI4LjgzMSwyMS4yNTMsMjguOTgyWm0tMTAuNzE4LS4wODhjLS4zNzQtLjE1OC0uNzQ1LS4zMzUtMS4xLS41MjRsLjE1LS4yODRjLjM1LjE4Ni43MTMuMzU4LDEuMDc4LjUxMlptMTIuODkzLTEuMDIxLS4xNy0uMjczYy4zMzctLjIxLjY2OC0uNDM3Ljk4NC0uNjc1bC4xOTMuMjU3QzI0LjExMSwyNy40MjUsMjMuNzcyLDI3LjY1OCwyMy40MjgsMjcuODczWk04LjM3OSwyNy43NTFjLS4zNDEtLjIyLS42NzYtLjQ1OS0xLS43MDhsLjItLjI1M2MuMzEyLjI0My42NC40NzYuOTcyLjY5MVptMTctMS4zNDYtLjIxNS0uMjM5Yy4yOTQtLjI2NS41OC0uNTQ2Ljg1MS0uODM2bC4yMzUuMjE5QzI1Ljk3MiwyNS44NDYsMjUuNjc5LDI2LjEzNCwyNS4zNzgsMjYuNFpNNi40NTQsMjYuMjUyYy0uMy0uMjc2LS41ODUtLjU2OS0uODU2LS44N2wuMjM5LS4yMTVjLjI2NS4yOTQuNTQ3LjU4LjgzNi44NVpNMjcuMDQxLDI0LjYybC0uMjUzLS4yYy4yNDQtLjMxMi40NzYtLjYzOS42OTItLjk3MmwuMjcuMTc1QzI3LjUyOSwyMy45NjYsMjcuMjksMjQuMywyNy4wNDEsMjQuNjJaTTQuODIsMjQuNDM5Yy0uMjQ0LS4zMjQtLjQ3Ni0uNjYyLS42OTItMS4wMDdsLjI3Mi0uMTdjLjIxLjMzNy40MzguNjY4LjY3Ni45ODRabTIzLjU0Ny0xLjg2Ny0uMjg0LS4xNTFjLjE4Ni0uMzUuMzU4LS43MTMuNTEzLTEuMDc4bC4zLjEyNUMyOC43MzUsMjEuODQzLDI4LjU1OCwyMi4yMTQsMjguMzY4LDIyLjU3MlptLTI0Ljg0MS0uMi0uMDA2LS4wMTJjLS4xODMtLjM1OS0uMzUyLS43MjgtLjUtMS4xbC4zLS4xMjFjLjE0Ny4zNjIuMzEyLjcyNC40OTEsMS4wNzRsLjAwNi4wMTJaTTI5LjMyLDIwLjMyNWwtLjMwNi0uMWMuMTIyLS4zNzcuMjMtLjc2NC4zMTktMS4xNWwuMzEzLjA3MkMyOS41NTUsMTkuNTQzLDI5LjQ0NiwxOS45MzksMjkuMzIsMjAuMzI1Wk0yLjYwOCwyMC4xMDdjLS4xMi0uMzg4LS4yMjMtLjc4Ni0uMzA4LTEuMTgybC4zMTQtLjA2N2MuMDgzLjM4Ny4xODQuNzc2LjMsMS4xNTVaTTI5Ljg3LDE3Ljk0NmwtLjMxOC0uMDQ1Yy4wNTYtLjM5My4wOTQtLjc5My4xMTUtMS4xODhsLjMyMS4wMTdDMjkuOTY3LDE3LjEzNSwyOS45MjcsMTcuNTQ0LDI5Ljg3LDE3Ljk0NlpNMi4xLDE3LjcyYy0uMDUtLjQtLjA4Mi0uODEyLS4xLTEuMjE4bC4zMjEtLjAxMWMuMDE0LjQuMDQ2LjguMDk0LDEuMTlabTI3LjU4Mi0yLjJjLS4wMTQtLjQtLjA0NS0uOC0uMDkzLTEuMTlsLjMxOS0uMDM5Yy4wNDkuNC4wODIuODEzLjEsMS4yMThaTTIuMzMxLDE1LjMsMi4wMSwxNS4yOGMuMDIxLS40MDUuMDYxLS44MTQuMTE3LTEuMjE2bC4zMTguMDQ1QzIuMzksMTQuNSwyLjM1MiwxNC45LDIuMzMxLDE1LjNabTI3LjA1Ny0yLjE0NGMtLjA4My0uMzg3LS4xODQtLjc3Ni0uMy0xLjE1NUwyOS40LDExLjljLjExOS4zODguMjIzLjc4Ni4zMDcsMS4xODNaTTIuNjYzLDEyLjkzNGwtLjMxMy0uMDcyYy4wOTEtLjQuMi0uNzkxLjMyNi0xLjE3N2wuMzA2LjFDMi44NTksMTIuMTYxLDIuNzUyLDEyLjU0OCwyLjY2MywxMi45MzRabTI2LjAyNi0yLjA2MmMtLjE0OS0uMzY2LS4zMTUtLjczMi0uNS0xLjA4NmwuMjg2LS4xNDZjLjE4NS4zNjMuMzU1LjczNi41MDcsMS4xMTFaTTMuNCwxMC42NjVsLS4zLS4xMjVjLjE1OC0uMzc0LjMzNC0uNzQ1LjUyNC0xLjFsLjI4NC4xNUMzLjcyNCw5LjkzNywzLjU1MiwxMC4zLDMuNCwxMC42NjVaTTQuNTEzLDguNTU3bC0uMjctLjE3NGMuMjItLjM0MS40NTgtLjY3Ni43MDctMWwuMjU0LjJDNC45NjEsNy45LDQuNzI4LDguMjI0LDQuNTEzLDguNTU3Wk01Ljk3Nyw2LjY3NmwtLjIzNS0uMjE5Yy4yNzYtLjMuNTY5LS41ODUuODctLjg1N2wuMjE1LjIzOUM2LjUzMyw2LjEsNi4yNDcsNi4zODYsNS45NzcsNi42NzZabTEuNzctMS42LS4xOTMtLjI1N2MuMzIzLS4yNDQuNjYyLS40NzcsMS4wMDctLjY5MmwuMTcuMjcyQzguMzk0LDQuNjE0LDguMDYzLDQuODQxLDcuNzQ3LDUuMDc5Wm0xNS43MDUtLjU1OC0uMDE4LS4wMTIuMTc1LS4yNy4wMTguMDExWm0tMS4wNDctLjYxNmMtLjM1LS4xODYtLjcxMy0uMzU4LTEuMDc4LS41MTJsLjEyNS0uM2MuMzc0LjE1OC43NDUuMzM0LDEuMS41MjRaTTkuNzY5LDMuODE1bC0uMTQ2LS4yODYuMDE4LS4wMDljLjM1Ni0uMTgxLjcyNC0uMzQ5LDEuMDkzLS41bC4xMjEuM2MtLjM2MS4xNDctLjcyLjMxMS0xLjA2OC40ODhabTEwLjQ0LS44MzhjLS4zNzctLjEyMi0uNzY0LS4yMjktMS4xNTEtLjMxN2wuMDcyLS4zMTNjLjQuMDkxLjc5Mi4yLDEuMTc4LjMyNVptLTguMjI5LS4wNi0uMDk0LS4zMDdjLjM4OC0uMTE5Ljc4Ni0uMjIzLDEuMTgyLS4zMDhsLjA2Ny4zMTRDMTIuNzQ3LDIuNywxMi4zNTksMi44LDExLjk4LDIuOTE3Wm01LjktLjQ3M2MtLjM5My0uMDU1LS43OTMtLjA5Mi0xLjE4OC0uMTEzbC4wMTYtLjMyMWMuNDA1LjAyMS44MTQuMDU5LDEuMjE2LjExNVptLTMuNTcyLS4wMjYtLjA0LS4zMTljLjQtLjA1LjgxMi0uMDgzLDEuMjE4LS4xbC4wMTIuMzIxQzE1LjEwNiwyLjMzNywxNC43MDUsMi4zNjksMTQuMzEyLDIuNDE4WlxcXCIgc3R5bGU9XFxcImZpbGw6Z3JheVxcXCIvPjxjaXJjbGUgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTUuOTk4XFxcIiByPVxcXCIxMC43MDhcXFwiIHN0eWxlPVxcXCJmaWxsOm5hdnlcXFwiLz48Y2lyY2xlIGN4PVxcXCIyMC40MzVcXFwiIGN5PVxcXCIxMS41NjJcXFwiIHI9XFxcIjMuMTM2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PGNpcmNsZSBjeD1cXFwiMjYuNzA4XFxcIiBjeT1cXFwiNS4yOVxcXCIgcj1cXFwiMy4xMzdcXFwiIHN0eWxlPVxcXCJmaWxsOm5hdnlcXFwiLz48cGF0aCBkPVxcXCJNMTMuMSwyMS4zNTJ2LS43OUg5LjYyOVYxNC4zMjZoLS45djcuMDI2SDEzLjFcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTcuOTE2LDIxLjM1MlYxNi4zaC0uOHYyLjc4NWMwLDEuMDMxLS41NCwxLjcwNi0xLjM3OCwxLjcwNkEuOTUuOTUsMCwwLDEsMTQuNywxOS44VjE2LjNoLS44djMuODE3YzAsLjgzOC42MjYsMS4zNzgsMS42MDksMS4zNzhhMS44NjMsMS44NjMsMCwwLDAsMS42ODctLjkyNXYuNzgxaC43MjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMjMuNzkxLDIxLjMzM3YtLjYwN2EuNjY0LjY2NCwwLDAsMS0uMTczLjAxOWMtLjI3OSwwLS40MzQtLjE0NS0uNDM0LS40VjE3LjUzNmMwLS45LS42NTUtMS4zNzgtMS45LTEuMzc4LTEuMjI0LDAtMS45NzYuNDcyLTIuMDI0LDEuNjM4aC44MWMuMDY3LS42MTcuNDM0LS45LDEuMTg1LS45LjcyMywwLDEuMTI4LjI3LDEuMTI4Ljc1MnYuMjEyYzAsLjMzNy0uMi40ODItLjgzOC41NTlhNS43NjMsNS43NjMsMCwwLDAtMS42MTkuMzA4LDEuMzI3LDEuMzI3LDAsMCwwLS44ODcsMS4zMTFjMCwuOTE2LjYzNiwxLjQ1NSwxLjY1OCwxLjQ1NWEyLjM2MywyLjM2MywwLDAsMCwxLjcxNS0uNzQyLjg1NS44NTUsMCwwLDAsLjgyOS42NjUsMS45NjcsMS45NjcsMCwwLDAsLjU0OS0uMDg3bS0xLjQwNy0xLjcyNWExLjM2NiwxLjM2NiwwLDAsMS0xLjUxMywxLjE4NWMtLjYyNiwwLS45OTMtLjIyMi0uOTkzLS43NzEsMC0uNTMuMzU3LS43NjEsMS4yMTQtLjg4N2E0LDQsMCwwLDAsMS4yOTEtLjI3OXYuNzUyXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdFwiTWFya2Rvd25cIjogXCI8cmVjdCB4PVxcXCIyLjVcXFwiIHk9XFxcIjcuOTU1XFxcIiB3aWR0aD1cXFwiMjdcXFwiIGhlaWdodD1cXFwiMTYuMDkxXFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojNzU1ODM4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI1LjkwOSAyMC42MzYgNS45MDkgMTEuMzY0IDguNjM2IDExLjM2NCAxMS4zNjQgMTQuNzczIDE0LjA5MSAxMS4zNjQgMTYuODE4IDExLjM2NCAxNi44MTggMjAuNjM2IDE0LjA5MSAyMC42MzYgMTQuMDkxIDE1LjMxOCAxMS4zNjQgMTguNzI3IDguNjM2IDE1LjMxOCA4LjYzNiAyMC42MzYgNS45MDkgMjAuNjM2XFxcIiBzdHlsZT1cXFwiZmlsbDojNzU1ODM4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMi45NTUgMjAuNjM2IDE4Ljg2NCAxNi4xMzYgMjEuNTkxIDE2LjEzNiAyMS41OTEgMTEuMzY0IDI0LjMxOCAxMS4zNjQgMjQuMzE4IDE2LjEzNiAyNy4wNDUgMTYuMTM2IDIyLjk1NSAyMC42MzZcXFwiIHN0eWxlPVxcXCJmaWxsOiM3NTU4MzhcXFwiLz5cIixcblx0XCJNQVRMQUJcIjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIxNi44MDNcXFwiIHkxPVxcXCIxNi42MzFcXFwiIHgyPVxcXCIxNS4wMTNcXFwiIHkyPVxcXCIyMi40MTFcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTEsIDAsIDMyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzUxMlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yM1xcXCIgc3RvcC1jb2xvcj1cXFwiIzUyM1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zNlxcXCIgc3RvcC1jb2xvcj1cXFwiIzUzNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41MVxcXCIgc3RvcC1jb2xvcj1cXFwiIzY0NVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42NlxcXCIgc3RvcC1jb2xvcj1cXFwiIzU2OFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC44NFxcXCIgc3RvcC1jb2xvcj1cXFwiIzI5ZFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiMjkuNzFcXFwiIHkxPVxcXCIxOC45ODNcXFwiIHgyPVxcXCIxMS43MVxcXCIgeTI9XFxcIjE0LjU2M1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMC4wODFcXFwiIHN0b3AtY29sb3I9XFxcIiNjMzNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMTg5XFxcIiBzdG9wLWNvbG9yPVxcXCIjZGU1MjM5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjMxM1xcXCIgc3RvcC1jb2xvcj1cXFwiI2YwNmUzZVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40MjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmYTgwNDJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZlODY0M1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41OFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZhN2Y0MlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42OTZcXFwiIHN0b3AtY29sb3I9XFxcIiNlZjZjM2VcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuODMzXFxcIiBzdG9wLWNvbG9yPVxcXCIjZGM0YzM3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjkxNlxcXCIgc3RvcC1jb2xvcj1cXFwiI2NmMzYzM1xcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfbWF0bGFiPC90aXRsZT48cGF0aCBkPVxcXCJNMiwxNy41NWw3Ljk3LTMuMjJhMjAuNywyMC43LDAsMCwxLDIuNzItMi45NWMuNjYtLjM1LDEuOS0uMTYsNC4xNy0yLjk4LDIuMi0yLjc1LDIuOS01LjEsMy45My01LjEsMS42MywwLDIuODMsMy41Miw0LjY1LDguODVBMTE1LjYyOSwxMTUuNjI5LDAsMCwwLDMwLDI0LjEyYy0xLjktMS43Ny0zLjUyLTMuNjgtNS4zNy0zLjYzLTEuNzIuMDQtMy42MywyLjA4LTUuNzIsNC43LTEuNjYsMi4xLTMuODYsMy41NC00LjcyLDMuNTEsMCwwLTIuMjItNi4yOC00LjA4LTcuM2EyLjY0MSwyLjY0MSwwLDAsMC0yLjM5LjJMMiwxNy41NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM0OWRcXFwiLz48cGF0aCBkPVxcXCJNMTkuOCw0LjAyYy0uNjcuOS0xLjQ4LDIuNTUtMi45NCw0LjM4LTIuMjcsMi44Mi0zLjUsMi42My00LjE3LDIuOThhMTkuNjc0LDE5LjY3NCwwLDAsMC0yLjcyLDIuOTVsMy4zLDIuNDFjMi44LTMuODIsNC4zLTcuOTYsNS40Ny0xMC42NEExMy41NzksMTMuNTc5LDAsMCwxLDE5LjgsNC4wMlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMjAuOCwzLjNjLTIuMTgsMC0zLjY3LDExLjQ4LTExLjcyLDE3Ljg5LDIuMjYtLjM3LDQuMjIsNS4yNCw1LjEyLDcuNTEsNC0uNjgsNy4yLTguMzMsMTAuNDMtOC4yMSwxLjg1LjA3LDMuNDcsMS44Niw1LjM3LDMuNjNDMjUuNjYsMTUsMjMuNjMsMy4zLDIwLjgsMy4zWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPlwiLFxuXHRcIk1BWFNjcmlwdFwiOiBcIjxwYXRoIGQ9XFxcIk0xNC40LDcuNTY4LDIwLjIxMiwySDcuMjczTDQuODQ4LDcuNTM2bDkuNTU3LjAzMlpNNC44NDgsNy41MzZsNi44NDQsMi42TDE0LjQsNy41NjhtLS4wMTMsMy42MjItMi43LTEuMDUzTDUuMjYzLDE2LjFsNi4yODYsNS44MjMsMi44MDgtMS4xTDE0LjQsNy41NjhtMCwwLDEyLjgsOC4zNzZMMjAuMjEyLDJNMjcuMiwxNS45NDQsMTQuMzkxLDExLjE5bS0uMDM1LDkuNjM2LS4wMzIsMy42ODVNMjAuMjI4LDMwbC04LjY3OS04LjA3M0w0LjgsMjQuNDY0LDcuMjU3LDMwWm0wLDBMMjcuMiwxNS45NDQsMTQuMzI1LDI0LjUxMk0yNy4yLDE1Ljk0NCwxNC4zNTcsMjAuODI2XFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMWQxZDFiO3N0cm9rZS1taXRlcmxpbWl0OjIyLjkyNTU4NDc5MzA5MDgyO3N0cm9rZS13aWR0aDowLjAyODM0OTk5OTMzODM4ODQ0M3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNC4zOTEgMTEuMTkgMjcuMiAxNS45NDQgMTQuNDA1IDcuNTY4IDE0LjM5MSAxMS4xOSAxNC4zOTEgMTEuMTlcXFwiIHN0eWxlPVxcXCJmaWxsOiMxODFiMTc7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI3LjIgMTUuOTQ0IDE0LjM1NyAyMC44MjYgMTQuMzI1IDI0LjUwOSAxNC4zMjYgMjQuNTExIDI3LjIgMTUuOTQ0IDI3LjIgMTUuOTQ0XFxcIiBzdHlsZT1cXFwiZmlsbDojMWExZDFhO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNC40MDUgNy41NjggMjcuMiAxNS45NDQgMjAuMjEyIDIgMTQuNDA1IDcuNTY4IDE0LjQwNSA3LjU2OFxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNWY1ZTtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjcuMiAxNS45NDQgMTQuMzI2IDI0LjUxMSAyMC4yMjggMzAgMjcuMiAxNS45NDQgMjcuMiAxNS45NDRcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDQyNDI7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE0LjM1NyAyMC44MjYgMjcuMiAxNS45NDQgMTQuMzkxIDExLjE5IDE0LjM1NyAyMC44MjYgMTQuMzU3IDIwLjgyNlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNTE1MjtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTQuMzU3IDIwLjgyNiAxNC4zOTEgMTEuMTkgMTEuNjkyIDEwLjEzNyA1LjI2MyAxNi4xMDQgMTEuNTQ5IDIxLjkyNyAxNC4zNTcgMjAuODI2IDE0LjM1NyAyMC44MjZcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDY5NmI7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjExLjY5MiAxMC4xMzcgMTQuMzkxIDExLjE5IDE0LjQwNSA3LjU2OCAxMS42OTIgMTAuMTM3IDExLjY5MiAxMC4xMzdcXFwiIHN0eWxlPVxcXCJmaWxsOiMxYjI3MjU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE0LjM1NyAyMC44MjYgMTEuNTQ5IDIxLjkyNyAxNC4zMjUgMjQuNTA5IDE0LjM1NyAyMC44MjYgMTQuMzU3IDIwLjgyNlxcXCIgc3R5bGU9XFxcImZpbGw6IzFjMjYyNDtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTQuMzI1IDI0LjUxMiA0LjggMjQuNDY0IDcuMjU3IDMwIDIwLjIyOCAzMCAxNC4zMjYgMjQuNTExIDE0LjMyNSAyNC41MTIgMTQuMzI1IDI0LjUxMlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNjQ2NjtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiNC44NDggNy41MzYgMTQuNDA1IDcuNTY4IDIwLjIxMiAyIDcuMjczIDIgNC44NDggNy41MzYgNC44NDggNy41MzZcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDc2N2E7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE0LjQwNSA3LjU2OCA0Ljg0OCA3LjUzNiAxMS42OTIgMTAuMTM3IDE0LjQwNSA3LjU2OCAxNC40MDUgNy41NjhcXFwiIHN0eWxlPVxcXCJmaWxsOiMxZTM5Mzg7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjExLjU0OSAyMS45MjcgNC44IDI0LjQ2NCAxNC4zMjUgMjQuNTEyIDE0LjMyNSAyNC41MDkgMTEuNTQ5IDIxLjkyNyAxMS41NDkgMjEuOTI3XFxcIiBzdHlsZT1cXFwiZmlsbDojMjAzMDJlO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+XCIsXG5cdFwiTUVMXCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiLTYxMS4zNDhcXFwiIHkxPVxcXCItNjcuNDg4XFxcIiB4Mj1cXFwiLTYwMC4yNzJcXFwiIHkyPVxcXCItNjUuMzM1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEuNDM3LCAwLCAwLCAtMS40MzcsIDg5NC40MTcsIC04Mi4yOTIpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMGY2MDY3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjVcXFwiIHN0b3AtY29sb3I9XFxcIiMwNWFiYWNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM1OGJlYzRcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIi02MDMuNTk0XFxcIiB5MT1cXFwiLTc3LjY5OVxcXCIgeDI9XFxcIi02MDIuMDExXFxcIiB5Mj1cXFwiLTU5LjYwNFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLjQzNywgMCwgMCwgLTEuNDM3LCA4OTQuNDE3LCAtODIuMjkyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzExN2M4M1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41XFxcIiBzdG9wLWNvbG9yPVxcXCIjMjFiNWI1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjN2VkNGQ0XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImNcXFwiIHgxPVxcXCItNjEyLjc1N1xcXCIgeTE9XFxcIi01OS45MDZcXFwiIHgyPVxcXCItNjE2LjkzNFxcXCIgeTI9XFxcIi03Mi43NlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLjQzNywgMCwgMCwgLTEuNDM3LCA4OTQuNDE3LCAtODIuMjkyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzlhY2NkM1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41XFxcIiBzdG9wLWNvbG9yPVxcXCIjNzJhZWIzXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMzE3ZDdmXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCItNjIxLjg1MVxcXCIgeTE9XFxcIi03NC41NzlcXFwiIHgyPVxcXCItNjE0Ljg0XFxcIiB5Mj1cXFwiLTcyLjMwMVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLjQzNywgMCwgMCwgLTEuNDM3LCA4OTQuNDE3LCAtODIuMjkyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzIxNjI2ZVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41XFxcIiBzdG9wLWNvbG9yPVxcXCIjMTU3Yzg0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMDNhM2E1XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImVcXFwiIHgxPVxcXCItNjE2LjM2OVxcXCIgeTE9XFxcIi02NC40NjlcXFwiIHgyPVxcXCItNjI1LjM0XFxcIiB5Mj1cXFwiLTcyLjgzNVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLjQzNywgMCwgMCwgLTEuNDM3LCA4OTQuNDE3LCAtODIuMjkyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzBiN2M4MVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41XFxcIiBzdG9wLWNvbG9yPVxcXCIjMDY4ZDkwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMTZiMWIxXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImZcXFwiIHgxPVxcXCItNjA4LjA3MlxcXCIgeTE9XFxcIi03NC42NzhcXFwiIHgyPVxcXCItNjAzLjQ4OFxcXCIgeTI9XFxcIi03MC45NjZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMS40MzcsIDAsIDAsIC0xLjQzNywgODk0LjQxNywgLTgyLjI5MilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiMwYThhOGZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzBmN2M4MlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzFhNTk2NFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJnXFxcIiB4MT1cXFwiLTYwMS4xMzRcXFwiIHkxPVxcXCItNzAuMTEzXFxcIiB4Mj1cXFwiLTYwNi4wMDhcXFwiIHkyPVxcXCItNjcuMDY3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEuNDM3LCAwLCAwLCAtMS40MzcsIDg5NC40MTcsIC04Mi4yOTIpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMjU2YTc3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjVcXFwiIHN0b3AtY29sb3I9XFxcIiMwZDk0OTlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMwNmEwYTJcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX21heWE8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yMS42LDMuNDYySDMwTDE4Ljc2NywyNC4yMTFzLTEuODkzLTUuNS0yLjcwNi03LjQ1OVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0yMy42NjksMjkuMTE4SDMwVjMuNDYyQzI5Ljk5NSwxNi44NjksMjQuMzYsMjkuMTE4LDIzLjY2OSwyOS4xMThaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTE4Ljc2NywyNC4yMTFIMTMuNTQxTDIsMy40NjJjMi4wNDctLjI2LDYuMTM1LS42MTEsOC4xNi0uNzc2WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk04LjY5MywxNi4wMTlDNi45NiwyMi44NjYsMS45OTUsMjkuMzIsMiwyOS4zMTRjNS43NTIsMCw2Ljk5MS0uODM1LDYuOTkxLTEuMjc2VjE2LjU0QzguODksMTYuMzcsOC43OTQsMTYuMTk0LDguNjkzLDE2LjAxOVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMiwzLjQ2MlYyOS4zMTRjMy4xNDctNS4yLDQuOTgxLTguNiw2LjYtMTMuNDVDNC42LDguNzk0LDIsMy40NjIsMiwzLjQ2MlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZSlcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCIyMy4yMzMgMjguMTAyIDIzLjY2OSAyOS4xMTggMjMuNjY5IDE1LjY0NyAyMy4yMzMgMTYuMzc1XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2YpXFxcIi8+PHBhdGggZD1cXFwiTTIzLjY0NywxNS42NzN2MTMuNGwuMDE2LjA0M2MuNDUyLDAsNi4zMzItMTQuNSw2LjMzMi0yNS42NTZDMjkuOTk1LDMuNDYyLDI2LjQwNiwxMC45NDcsMjMuNjQ3LDE1LjY3M1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZylcXFwiLz5cIixcblx0XCJNb25nb0RCXCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiLTY0NS43MzJcXFwiIHkxPVxcXCI4MzkuMTg4XFxcIiB4Mj1cXFwiLTY1NC41OVxcXCIgeTI9XFxcIjgzOS4yNVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgtMC45NzcsIC0wLjMyMywgLTAuMjksIDAuODc3LCAtMzc1Ljk0NCwgLTkyOC4yODcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwLjIzMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzk5OTg3NVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41NjNcXFwiIHN0b3AtY29sb3I9XFxcIiM5Yjk5NzdcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNjgzXFxcIiBzdG9wLWNvbG9yPVxcXCIjYTA5ZjdlXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjc2OFxcXCIgc3RvcC1jb2xvcj1cXFwiI2E5YTg4OVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC44MzdcXFwiIHN0b3AtY29sb3I9XFxcIiNiN2I2OWFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuODk2XFxcIiBzdG9wLWNvbG9yPVxcXCIjYzljN2IwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk0OFxcXCIgc3RvcC1jb2xvcj1cXFwiI2RlZGRjYlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45OTRcXFwiIHN0b3AtY29sb3I9XFxcIiNmOGY2ZWJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmYmY5ZWZcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIi02NDQuMjg3XFxcIiB5MT1cXFwiODIzLjQwNVxcXCIgeDI9XFxcIi02NTcuMDI4XFxcIiB5Mj1cXFwiODQ1LjQ3NlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgtMC45NzcsIC0wLjMyMywgLTAuMjksIDAuODc3LCAtMzc1Ljk0NCwgLTkyOC4yODcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNDhhNTQ3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjM2Y5MTQzXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImNcXFwiIHgxPVxcXCItNjQzLjM4NlxcXCIgeTE9XFxcIjgzOS40ODVcXFwiIHgyPVxcXCItNjUyLjQxOFxcXCIgeTI9XFxcIjgzMy40MTdcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoLTAuOTc3LCAtMC4zMjMsIC0wLjI5LCAwLjg3NywgLTM3NS45NDQsIC05MjguMjg3KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzQxYTI0N1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zNTJcXFwiIHN0b3AtY29sb3I9XFxcIiM0YmE3NGJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTU2XFxcIiBzdG9wLWNvbG9yPVxcXCIjNjdiNTU0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNjliNjU1XFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9tb25nbzwvdGl0bGU+PHBhdGggZD1cXFwiTTE2LjYyLDMwbC0uNzUxLS4yNDlzLjEtMy44LTEuMjc1LTQuMDY3Yy0uOS0xLjA0OC4xMzMtNDQuNzQxLDMuNDIzLS4xNDlhMi43MTIsMi43MTIsMCwwLDAtMS4zMzMsMS41MjNBMTQuMSwxNC4xLDAsMCwwLDE2LjYyLDMwWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy4wMjYsMjYuMzI5YTEzLjIyMywxMy4yMjMsMCwwLDAsNS0xMy4yMjVDMjAuNTU2LDYuNjE5LDE3LjA3NSw0LjQ4NywxNi43LDMuNjczYTkuNzkyLDkuNzkyLDAsMCwxLS44MjUtMS42bC4yNzcsMTguMDY5UzE1LjU3OCwyNS42NjQsMTcuMDI2LDI2LjMyOVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNMTUuNDg3LDI2LjU2OVM5LjM2NiwyMi40LDkuNzIsMTUuMDI1QTE1LjU0LDE1LjU0LDAsMCwxLDE1LjIzOSwzLjM3NywxLjcyNSwxLjcyNSwwLDAsMCwxNS44NDYsMmMuMzgxLjgyLjMxOSwxMi4yNDMuMzU5LDEzLjU3OUMxNi4zNiwyMC43NzYsMTUuOTE2LDI1LjU4OCwxNS40ODcsMjYuNTY5WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPlwiLFxuXHRcIm5naW54XCI6IFwiPHBhdGggZD1cXFwiTTE1Ljk0OCwyaC4wNjVhMTAuNDE4LDEwLjQxOCwwLDAsMSwuOTcyLjUyOFEyMi40MTQsNS42NSwyNy44NDMsOC43NzRhLjc5Mi43OTIsMCwwLDEsLjQxNC43ODhjLS4wMDgsNC4zODksMCw4Ljc3Ny0uMDA1LDEzLjE2NGEuODEzLjgxMywwLDAsMS0uMzU2LjUwN3EtNS43NzMsMy4zMjQtMTEuNTQ3LDYuNjQ0YS41ODcuNTg3LDAsMCwxLS42NTcuMDM3UTkuOTEyLDI2LjYsNC4xNDMsMjMuMjc0YS43LjcsMCwwLDEtLjQtLjY2NnEwLTYuNTgyLDAtMTMuMTYzYS42OTMuNjkzLDAsMCwxLC4zODctLjY3UTkuNTUyLDUuNjU3LDE0Ljk3NCwyLjUzNWMuMzIyLS4xODQuNjM4LS4zNzkuOTc0LS41MzVcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMTk2MzlcXFwiLz48cGF0aCBkPVxcXCJNOC43NjcsMTAuNTM4cTAsNS40MjksMCwxMC44NTlhMS41MDksMS41MDksMCwwLDAsLjQyNywxLjA4NywxLjY0NywxLjY0NywwLDAsMCwyLjA2LjIwNiwxLjU2NCwxLjU2NCwwLDAsMCwuNjg1LTEuMjkzYzAtMi42Mi0uMDA1LTUuMjQsMC03Ljg2cTMuNTgzLDQuMjksNy4xODEsOC41NjhhMi44MzMsMi44MzMsMCwwLDAsMi42Ljc4MiwxLjU2MSwxLjU2MSwwLDAsMCwxLjI1MS0xLjM3MXEuMDA4LTUuNTQxLDAtMTEuMDgxYTEuNTgyLDEuNTgyLDAsMCwwLTMuMTUyLDBjMCwyLjY2Mi0uMDE2LDUuMzIxLDAsNy45ODItMi4zNDYtMi43NjYtNC42NjMtNS41NTYtNy04LjMzMkEyLjgxNywyLjgxNywwLDAsMCwxMC4xNyw5LjAzMywxLjU3OSwxLjU3OSwwLDAsMCw4Ljc2NywxMC41MzhaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdFwiTmltXCI6IFwiPHBhdGggZD1cXFwiTTE2LjExMSw2LjQwNXMtMS4wNzMuODQ3LTIuMTY3LDEuNjlhMTUuMzYxLDE1LjM2MSwwLDAsMC00LjUyNy42NTFjLTEuMS0uNy0yLjA3LTEuNDY5LTIuMDctMS40NjlTNi41Miw4LjcsNiw5LjUzNWExMS4zODIsMTEuMzgyLDAsMCwwLTIuMjM2LDEuNDgyQzIuOTYxLDEwLjcsMi4wMywxMC4zMSwyLDEwLjNjMS4wNjMsMi4xNDUsMS43NzgsNC4yOTIsMy43MjIsNS41ODMsMy4xLTQuODg5LDE3LjQ4LTQuNDM5LDIwLjYzOS0uMDI4QzI4LjQsMTQuNzg3LDI5LjIsMTIuNSwzMCwxMC4zOGMtLjA4OC4wMjktMS4xODEuMzk1LTEuODg5LjY2NWExMS40ODksMTEuNDg5LDAsMCwwLTEuOTg2LTEuNTFjLS41MzctLjk4NC0xLjMxOS0yLjMxMy0xLjMxOS0yLjMxM3MtLjkyNy42ODktMiwxLjQ0YTIxLjI2NSwyMS4yNjUsMCwwLDAtNC42ODEtLjUxMmMtMS0uODI2LTIuMDE0LTEuNzQ2LTIuMDE0LTEuNzQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2YzZDQwMFxcXCIvPjxwYXRoIGQ9XFxcIk0zLjEsMTQuODU0bDIuNTU0LDYuMTg1YzQuNDM1LDUuODUsMTUuNzU5LDYuMjU3LDIwLjcuMTEzLDEuMTY4LTIuNjMzLDIuNzQ1LTYuMzMzLDIuNzQ1LTYuMzMzYTEzLjM3OSwxMy4zNzksMCwwLDEtNC42LDMuODY5LDEyLjIxNywxMi4yMTcsMCwwLDEtMi45ODMuNzkzbC01LjQ2NS0yLjgzMi01LjUsMi43NzVhMTUuNjc5LDE1LjY3OSwwLDAsMS0yLjk4My0uNzY0QTE0LjA3NiwxNC4wNzYsMCwwLDEsMy4xLDE0Ljg1NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmU5NTNcXFwiLz5cIixcblx0XCJOaXhcIjogXCI8cGF0aCBkPVxcXCJNMTMsMTEuMTE1LDYuMTgzLDIzLjc2LDQuNTksMjAuODdsMS44MzktMy4zODctMy42NTEtLjAxTDIsMTYuMDI5bC44LTEuNDc3LDUuMi4wMTgsMS44NjgtMy40NDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojN2ViYWU0O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTEzLjUyNywyMS4yMjNoMTMuNjRsLTEuNTQxLDIuOTIyLTMuNjU4LS4wMTEsMS44MTcsMy4zODktLjc3OSwxLjQ0OS0xLjU5MywwLTIuNTg0LTQuODI1LTMuNzIyLS4wMDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojN2ViYWU0O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTIxLjQ2NywxNS42ODIsMTQuNjQ3LDMuMDM3bDMuMTM0LS4wMzJMMTkuNiw2LjRsMS44MzQtMy4zNzloMS41NTdMMjMuNzg2LDQuNSwyMS4xNzQsOS4zMDdsMS44NTQsMy40NTVaXFxcIiBzdHlsZT1cXFwiZmlsbDojN2ViYWU0O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTEwLjU0MiwxNi4zMjRsNi44MjEsMTIuNjQ1TDE0LjIyOSwyOWwtMS44MjEtMy40LTEuODM0LDMuMzhIOS4wMTZsLS44LTEuNDc2TDEwLjgzMSwyMi43LDguOTc2LDE5LjI0M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM1Mjc3YzM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTguNDY0LDEwLjc1MUg0LjgyM0w2LjM2NSw3LjgyOWwzLjY1OC4wMTFMOC4yMDcsNC40NTEsOC45ODYsM2wxLjU5MiwwLDIuNTg0LDQuODI1LDMuNzIyLjAwOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1Mjc3YzM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTksMjAuODg4LDI1LjgxNyw4LjI0NGwxLjU5MywyLjg5TDI1LjU3MSwxNC41MmwzLjY1MS4wMUwzMCwxNS45NzlsLS44LDEuNDc3LTUuMi0uMDE4LTEuODY4LDMuNDQ3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzUyNzdjMztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPlwiLFxuXHRcIk5TSVNcIjogXCI8cGF0aCBkPVxcXCJNMjcuNDM1LDE2LjAzNywyMi4wMTIsMjEuNDZsNS40MjMsNS40MjNcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDU3N2JcXFwiLz48cGF0aCBkPVxcXCJNMjYuODg0LDE1LjVIMTYuMDQ4bDUuNDIzLDUuNDIzXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA3OWFhXFxcIi8+PHBhdGggZD1cXFwiTTI2Ljg4NCwxNC43MTIsMjEuNDYxLDkuMjg5bC01LjQyMyw1LjQyM1xcXCIgc3R5bGU9XFxcImZpbGw6IzAwOTZkM1xcXCIvPjxwYXRoIGQ9XFxcIk0yMC41MjgsOS4xMzFIOS42ODNsNS40MjMsNS40MjNNMjcuNDM1LDMuMzI1LDIyLjAxMiw4Ljc0OGw1LjQyMyw1LjQyM1xcXCIgc3R5bGU9XFxcImZpbGw6IzAxYjBmMFxcXCIvPjxwYXRoIGQ9XFxcIk0yMC41MjgsOC4zNTYsMTUuMTA1LDIuOTMzLDkuNjgzLDguMzU2XFxcIiBzdHlsZT1cXFwiZmlsbDojMjdiY2YzXFxcIi8+PHBhdGggZD1cXFwiTTE0LjE3MiwyLjc3NUgzLjMyN0w4Ljc0OSw4LjJcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZmM5ZjVcXFwiLz48cGF0aCBkPVxcXCJNNC41NjgsMTUuOTYzLDkuOTkxLDEwLjU0LDQuNTY4LDUuMTE3XFxcIiBzdHlsZT1cXFwiZmlsbDojNzkyMDFiXFxcIi8+PHBhdGggZD1cXFwiTTEwLjU0MSwxMS4wOTEsNS4xMTksMTYuNTEzSDE1Ljk2NFxcXCIgc3R5bGU9XFxcImZpbGw6I2E0MmQyNlxcXCIvPjxwYXRoIGQ9XFxcIk01LjExOSwxNy4yODhsNS40MjMsNS40MjMsNS40MjMtNS40MjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNjYzM4MmZcXFwiLz48cGF0aCBkPVxcXCJNNC41NjgsMTcuODI5VjI4LjY3NWw1LjQyMy01LjQyM0w4LjQsMjEuNjY1bTEzLjkxNiwxLjJMMTYuOSwxNy40NDdsLTUuNDIzLDUuNDIzXFxcIiBzdHlsZT1cXFwiZmlsbDojZjA0NTNmXFxcIi8+PHBhdGggZD1cXFwiTTExLjQ3NSwyMy42NDQsMTYuOSwyOS4wNjdsNS40MjMtNS40MjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmMjYyNWRcXFwiLz48cGF0aCBkPVxcXCJNMTcuODQsMjkuMjI1SDI4LjY4NUwyMy4yNjMsMjMuOFxcXCIgc3R5bGU9XFxcImZpbGw6I2Y0N2Y3ZFxcXCIvPjxwYXRoIGQ9XFxcIk0yOS44ODksMjkuMzM3bC0xLjY4LTEuNjhWMi4zOTJhLjM3NC4zNzQsMCwwLDAtLjI0My0uMzU1QS4yNjMuMjYzLDAsMCwwLDI3LjgyNywyYS4zNTkuMzU5LDAsMCwwLS4yNzEuMTEyTDIxLjQ3MSw4LjIsMTUuMzg1LDIuMTEyLDE1LjMsMi4wMzdoLS4wMzdBLjMwNy4zMDcsMCwwLDAsMTUuMTA1LDJIMi40YS40MzQuNDM0LDAsMCwwLS4yODkuMTEyQS4zOC4zOCwwLDAsMCwyLDIuMzkyYS4zNTkuMzU5LDAsMCwwLC4xMTIuMjcxbDEuNjgsMS42OFYyOS42MTdhLjM3NC4zNzQsMCwwLDAsLjI0My4zNTVBLjM4Ny4zODcsMCwwLDAsNC4xODUsMzBhLjM1OS4zNTksMCwwLDAsLjI3MS0uMTEyTDEwLjU0MSwyMy44bDYuMDg1LDYuMDg1LjA4NC4wNzVoLjAzN0EuMjU0LjI1NCwwLDAsMCwxNi45LDMwSDI5LjYwOWEuMzk1LjM5NSwwLDAsMCwuMjgtLjY2M1pNMjcuNDM1LDMuMzI1VjE0LjE3MUwyMi4wMTIsOC43NDhsNS40MjMtNS40MjNaTTkuOTkxLDEwLjU0LDQuNTY4LDE1Ljk2M1Y1LjExN0w5Ljk5MSwxMC41NFpNOS42ODMsOS4xMzFIMjAuNTI4bC01LjQyMyw1LjQyM0w5LjY4Myw5LjEzMVptLjg1OSwxLjk2LDUuNDIzLDUuNDIzSDUuMTE5bDUuNDIzLTUuNDIzWk0xNi45LDE3LjQ0N2w1LjQyMyw1LjQyM0gxMS40NzVMMTYuOSwxNy40NDdaTTE2LjA0OCwxNS41SDI2Ljg5M2wtNS40MjMsNS40MjNMMTYuMDQ4LDE1LjVabTUuOTY0LDUuOTY0LDUuNDIzLTUuNDIzVjI2Ljg4M0wyMi4wMTIsMjEuNDZabTQuODcyLTYuNzQ4SDE2LjA0OGw1LjQyMy01LjQyMyw1LjQxMyw1LjQyM1pNMjAuNTI4LDguMzU2SDkuNjgzbDUuNDIzLTUuNDIzLDUuNDIzLDUuNDIzWk0zLjMyNywyLjc3NUgxNC4xNzJMOC43NDksOC4yWm0xLjI0MSwyNS45VjE3LjgyOUw4LjQsMjEuNjY1bDEuNTg3LDEuNTg3TDQuNTY4LDI4LjY3NVptLjU1MS0xMS4zODdIMTUuOTY0bC01LjQyMyw1LjQyM0w1LjExOSwxNy4yODhaTTE2LjksMjkuMDY3bC01LjQyMy01LjQyM0gyMi4zMkwxNi45LDI5LjA2N1ptLjk0My4xNTlMMjMuMjYzLDIzLjhsNS40MjMsNS40MjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojNDY0MDQ5XFxcIi8+XCIsXG5cdFwiT2JqZWN0IFBhc2NhbFwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjE2XFxcIiB5MT1cXFwiLTAuNDQzXFxcIiB4Mj1cXFwiMTZcXFwiIHkyPVxcXCIyMi4wNDJcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMDIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmYwYzE1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWEwYzBmXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9kZWxwaGk8L3RpdGxlPjxjaXJjbGUgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHI9XFxcIjE0XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTI3LjU0NSwxNi4yNDNINC45MjRhLjkxNC45MTQsMCwwLDAtMS4wOTIuODJxLjAzMy40MjkuMS44NDlhMTIuNCwxMi40LDAsMCwwLDI0LjUzMiwwcS4wNzUtLjUuMTA4LTEuMDIxQzI4LjQ3OCwxNi41MjMsMjguMjExLDE2LjIwNywyNy41NDUsMTYuMjQzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmNjQ0M1xcXCIvPjxwb2x5bGluZSBwb2ludHM9XFxcIjE4LjQ4IDExLjY0IDIzLjcwNyA3LjI2NiAxOS43ODcgNS44OCAxNiAxMS4wNTNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCIxNS42OCAxMS4wMjYgMTguNjQgNS44OCAxNC44NTMgNS44OCAxMy4zMDcgMTEuMjkzXFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiMTMuMDQgMTEuMzczIDEzLjYgNi43MDYgMTAuNTg3IDcuOTYgMTEuMDEzIDEyLjc2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiMTAuNzQ3IDEzIDkuNzg3IDguNzYgNy43MDcgMTAuODQgOS42NTMgMTQuNjhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjM4NyAxNS4wNTMgNy40OTMgMTIuMzc2IDYuNjQgMTQuNDY2IDkuMDQgMTYuNTE3XFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiOS4wNCAxNi43NTcgNi42NCAxNS4yMTMgNi40OCAxNy40IDkuMiAxOC4zMzNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjIyNyAxOC44NDYgNi42NCAxOC4wNCA3LjIyNyAxOS44IDkuNTQ3IDE5LjhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjcwNyAyMC4wOTMgNy43MDcgMjAuMzg2IDguNjI3IDIxLjc0NiAxMC4yNjcgMjFcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMjAuMDIzLDEzLjA4OWE2LjYxLDYuNjEsMCwwLDAtNC41My0yQTYuMjkzLDYuMjkzLDAsMCwwLDExLjMsMjIuMDdsNC45NDEuMTI5LTIuMDgtNC4xNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZWU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTYuNSwyMi4zNjZsLTUuMjY3LS4xMzgtLjA0NC0uMDM5YTYuNDUzLDYuNDUzLDAsMCwxLDQuMy0xMS4yNjQsNi43ODcsNi43ODcsMCwwLDEsNC42NDMsMi4wNWwuMTIzLjEyMy01LjksNC45ODJabS01LjE0LS40NTUsNC42MTYuMTIxTDEzLjk2MSwxOGw1LjgyNS00LjkxOWE2LjQzLDYuNDMsMCwwLDAtNC4yOTItMS44MzUsNi4xMzMsNi4xMzMsMCwwLDAtNC4xMzEsMTAuNjY3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlNGIyZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4wMTMsMjAuNDkzYy00LjE3My01LjgxMywyLjEwOS04LjE3MiwyLjQ3OC04LjQ1My40NTEtLjM0NC03LjU5LDEuNzg1LTMuMjI2LDguODhaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjA0ZTMxO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMC43MiAxMi42IDEzLjUyIDE3LjU2NyAxMy43MzMgMTguNTczIDIxLjQ2NyAxNy4wMjYgMjAuNzIgMTIuNlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlZTtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwYXRoIGQ9XFxcIk0xMy42MSwxOC43NjEsMTMuMzQxLDE3LjVsNy40OTUtNS4xNy44MTQsNC44MjhabS4wODktMS4xMjMuMTU4Ljc0N0wyMS4yODMsMTYuOSwyMC42LDEyLjg3NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZTRiMmVcXFwiLz48cGF0aCBkPVxcXCJNMTUuNzIzLDIxLjMxOWMtMy45My0uNjY4LTQuMjgzLjQyOC00LjI4My40MjhMMTAuMjY3LDI0LjQ0czEuMTItLjkwNyw1LjQ5MywwbC43Ni0xLjM4OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkZDBjMTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTIyLDIxLjZjLS4wMi0uMi0xLjEtLjMxOS0xLjY3Ny0uMTIzLS43MzIuMjQ5LTEuMjE5LDEuMTQyLTEuMDQ1LDEuMjEzYTEuOTc1LDEuOTc1LDAsMCwxLDEuMTI1LS45ODZDMTMuNDQ3LDIxLjQ5MywxNC4xNDIsMjEuOCwxNC4xMjIsMjEuNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZjZlNGY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTUuNTIsMTguNjA2YTExLjEsMTEuMSwwLDAsMCwxLjU0NywxLjQ4Nyw2LjksNi45LDAsMCwxLDIuNzIsNC4xMDdjLS4xMDcsMS4wNjctMS45NzMsMS43Ni0xLjk3MywxLjc2bC0zLjMwNy03LjE5NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZWU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTcuNzMsMjYuMTYxbC0zLjQ1Ny03LjUyMSwxLjMyLS4yMDguMDU3LjA4MWExMC44NjksMTAuODY5LDAsMCwwLDEuNTEyLDEuNDUxLDcsNywwLDAsMSwyLjc4Miw0LjIwN2wwLC4wMjIsMCwuMDIyYy0uMTE1LDEuMTUzLTIsMS44NjQtMi4wNzcsMS44OTRabS0yLjk5LTcuMjcsMy4xNTUsNi44NjNjLjQxNC0uMTc4LDEuNjMtLjc2MywxLjczLTEuNTQ4YTYuNzkzLDYuNzkzLDAsMCwwLTIuNjQ4LTMuOTgxbC0uMDEtLjAwN2ExMS45NCwxMS45NCwwLDAsMS0xLjUxNy0xLjQzOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZTRiMmVcXFwiLz48cGF0aCBkPVxcXCJNMjgsMTIuNzQyYy4wMjUuMzk0LjAzNC43OTIuMDI1LDEuMTk0YTEzLjk0NiwxMy45NDYsMCwwLDEtMTkuOSwxMi4zQTEyLjg2LDEyLjg2LDAsMCwwLDI4LDEyLjc0MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYWUwZGY7ZmlsbC1ydWxlOmV2ZW5vZGQ7b3BhY2l0eTowLjJcXFwiLz48cGF0aCBkPVxcXCJNMi4zODMsMTMuODkzQTEzLjk0MSwxMy45NDEsMCwwLDEsMjUuNyw1Ljgzcy01LjAwOSw1Ljk3OS0xMC41ODQsNy45MDdTMi4zODMsMTMuODkzLDIuMzgzLDEzLjg5M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYWUwZGY7b3BhY2l0eTowLjJcXFwiLz48cGF0aCBkPVxcXCJNMy42MTgsMTguNjk0Yy0uMDQ0LS4zOTItLjA3Mi0uNzktLjA4My0xLjE5MUMzLjMyOSw5LjgwNywxMC4wMTIsNC4yLDE3LjcwOCwzLjk5MWExNC4yLDE0LjIsMCwwLDEsNS43MTksMS40NTgsMTMuMTI4LDEzLjEyOCwwLDAsMC03LjE4OC0yLjM2OWMtNy4xLjE5LTEzLjMwNiw1LjMtMTMuMTE2LDEyLjRBMTIuODczLDEyLjg3MywwLDAsMCwzLjYxOCwxOC42OTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWFlMGRmO2ZpbGwtcnVsZTpldmVub2RkO29wYWNpdHk6MC4yXFxcIi8+XCIsXG5cdFwiT2JqZWN0aXZlLUNcIjogXCI8cGF0aCBkPVxcXCJNMTEuMjksMTUuOTc2YTguODkyLDguODkyLDAsMCwwLDEuMDM5LDQuNTU3LDQuODE4LDQuODE4LDAsMCwwLDUuNTc5LDIuMTMsMy43ODksMy43ODksMCwwLDAsMi43MzQtMy4xODFjLjA5NS0uNTM1LjEtLjU0LjEtLjU0LDEuNTM3LjIyMiw0LjAxNC41ODIsNS41NS44bC0uMS4zODlBOS45NTgsOS45NTgsMCwwLDEsMjMuOCwyNC45YTguMzUsOC4zNSwwLDAsMS00Ljc0NywyLjM3OCwxMi45MjUsMTIuOTI1LDAsMCwxLTcuMzIyLS43MjUsOC45OCw4Ljk4LDAsMCwxLTUuMTA2LTUuNTI0QTE0LjM1MywxNC4zNTMsMCwwLDEsNi42NDIsMTAuOWE5LjMyMyw5LjMyMywwLDAsMSw3LjkyOS02LjI0LDExLjgxMiwxMS44MTIsMCwwLDEsNS45LjQ5MSw4LjQ2Nyw4LjQ2NywwLDAsMSw1LjQ1Niw2LjFjLjA4My4zMTEuMS4zNjkuMS4zNjktMS43MDkuMzExLTMuODIxLjcwNS01LjUxOCwxLjA3NUMyMC4xODYsMTEsMTkuMzg3LDkuNjY2LDE3LjY3OCw5LjI1YTQuNjU2LDQuNjU2LDAsMCwwLTUuODUzLDMuMTU4LDkuMjgsOS4yOCwwLDAsMC0uMzQxLDEuMjczQTEwLjg5LDEwLjg5LDAsMCwwLDExLjI5LDE1Ljk3NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIuMDMzIDMwIDIuMDMzIDIgNy45NjcgMiA3Ljk2NyA0LjIyNyA0LjcyMyA0LjIyNyA0LjcyMyAyNy43NzMgNy45NjcgMjcuNzczIDcuOTY3IDMwIDIuMDMzIDMwXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyOS45NjcgMjkuOTk5IDI0LjAzMyAyOS45OTkgMjQuMDMzIDI3Ljc3MSAyNy4yNzcgMjcuNzcxIDI3LjI3NyA0LjIyNiAyNC4wMzMgNC4yMjYgMjQuMDMzIDEuOTk5IDI5Ljk2NyAxLjk5OSAyOS45NjcgMjkuOTk5XFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+XCIsXG5cdFwiT0NhbWxcIjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCItNzQ1LjYyM1xcXCIgeTE9XFxcIi05Mi43NlxcXCIgeDI9XFxcIi03NDUuNjIzXFxcIiB5Mj1cXFwiLTg1LjEwOFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSg3NTggMTEzLjI4KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2YyOTEwNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2VjNjgxM1xcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiLTc0MS45OVxcXCIgeTE9XFxcIi0xMDkuNDc3XFxcIiB4Mj1cXFwiLTc0MS45OVxcXCIgeTI9XFxcIi04NS4wOTlcXFwiIHhsaW5rOmhyZWY9XFxcIiNhXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiLTc1Mi4xMTFcXFwiIHkxPVxcXCItOTMuOTE4XFxcIiB4Mj1cXFwiLTc1Mi4xMTFcXFwiIHkyPVxcXCItODUuMjg0XFxcIiB4bGluazpocmVmPVxcXCIjYVxcXCIvPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX29jYW1sPC90aXRsZT48cGF0aCBkPVxcXCJNMTYuNTcxLDI1LjI0NmE0LjI4LDQuMjgsMCwwLDAtLjAzOS0uNzA5Yy0uMDU5LS4yLS4yLS4yMTctLjMtLjM3NGEzLjUwNywzLjUwNywwLDAsMS0uNTMyLTEuNDc3Yy0uMDItLjQ1My0uMi0uODg2LS4yMTctMS4zMzktLjAyLS4yMTcuMDItLjQ1MywwLS42NjlhMS45NjMsMS45NjMsMCwwLDAtLjAzOS0uMzE1LDEuMTMzLDEuMTMzLDAsMCwwLS4wMzktLjJsLjA1OS0uMTM4YTIuNzIsMi43MiwwLDAsMSwuNjUtLjAzOWMuMjU2LDAsLjUxMi4wMi43NjguMDJhNy45NjEsNy45NjEsMCwwLDAsMS41MzYtLjA1OSwzLjcyMiwzLjcyMiwwLDAsMCwxLjk0OS0uODQ3LDQuOTQ2LDQuOTQ2LDAsMCwwLDEuNTM2LTIuMDA4Yy4xNzctLjM5NC4xNzctMS4wODMuNTUxLTEuNC40MzMtLjM3NCwxLjE4MS0uMzM1LDEuNjkzLS41NzFhMS4xODcsMS4xODcsMCwwLDEsLjgwNy0uMTM4Yy4yMTcuMDM5LjYzLjMxNS43MjktLjA1OS0uMDc5LS4wMzktLjEtLjEzOC0uMTM4LS4xNzcuNDE0LS4wMzksMC0xLS4xNTgtMS4yQTIuMjI1LDIuMjI1LDAsMCwwLDI0LjI1LDEzYTMuNTA5LDMuNTA5LDAsMCwwLTEuNTM2LS4yMTdjLS44ODYuMTc3LS44MjctLjMzNS0xLjMzOS0uMzM1LS42MywwLTEuNzMzLjAzOS0xLjkzLjYzYTEuNTQsMS41NCwwLDAsMS0uMzM1LjUxMmMtLjEzOC4xNzcuMDIuMzU0LS4wMzkuNTcxLS4wNzkuMjE3LS4xNzcuOTg1LS4yNzYsMS4yNi0uMTc3LjQ1My0uMzk0LDEuMDI0LS43ODgsMS4wMjRhMy4xNTIsMy4xNTIsMCwwLDEtMS40MzctLjA3OWMtLjI3Ni0uMS0uNzI5LS4yNTYtLjk0NS0uMzM1LTEuMDI0LS40MzMtMS4yLS45MDYtMS4yLS45MDZhMy4wMjYsMy4wMjYsMCwwLDEtLjUxMi0uODY2Yy0uMTE4LS40MTQtLjMxNS0uNzY4LS4zOTQtMXMtLjMtLjU5MS0uNDUzLS45ODVhMi42NjcsMi42NjcsMCwwLDAtLjcwOS0xLjA2M2MtLjMxNS0uMjc2LS42MS0uNzI5LTEuMjYtLjU5MWExLjY0MSwxLjY0MSwwLDAsMC0uODY2LjMxNWMtLjIxNy4xNzctLjMuNTcxLS40OTIuODg2LS4xMTguMTc3LS4zMTUuNzA5LS41MTIsMS4xNjJhMS45MjksMS45MjksMCwwLDEtLjMzNS42NWMtLjExOC4wNzktLjI1Ni4yLS40MTQuMTM4YS45MjQuOTI0LDAsMCwxLS4zMTUtLjIsNS4zMzQsNS4zMzQsMCwwLDEtLjcwOS0xLjEyMiwxMS4xLDExLjEsMCwwLDAtLjc4OC0xLjI0MSwxLjAxNiwxLjAxNiwwLDAsMC0uOTg1LS41NTFjLTEuMDI0LDAtMS4xLjU3MS0xLjU1NiwxLjQxOGE1LjU3NCw1LjU3NCwwLDAsMS0uNjY5LDEuNGMtLjIzNi4yNTYtLjk0NSwxLjMzOS0xLjQ1NywxLjUxNkgydjcuNjJjLjAzOS0uMS4wNTktLjIuMS0uMjc2LjItLjQxNC42NS0uODA3LjkwNi0xLjIyMWEzLjUsMy41LDAsMCwwLC4zNzQtLjcwOSwzLjc0MywzLjc0MywwLDAsMSwuMjM2LS43MDkuNzk0Ljc5NCwwLDAsMSwuNTcxLS4zMzVjLjM1NC0uMDU5LjY1LjQ5MiwxLjA4My43MDkuMi4wNzksMS4wNjMuMzk0LDEuMzE5LjQ1My40MzMuMS45MDYuMiwxLjMzOS4yNzYuMjM2LjAzOS40NTMuMDc5LjcwOS4xYTcuMyw3LjMsMCwwLDEsMS4wODMuMSwyLjI3NywyLjI3NywwLDAsMC0uODA3LDEuMjIxYy0uMTU4LjQzMy0uMjc2LjkyNS0uNDczLDEuMzM5LS4yMTcuNDczLS42NjkuNjY5LS42MSwxLjIyMWEyLjY2OCwyLjY2OCwwLDAsMSwuMDIuNjg5LDQuMDA5LDQuMDA5LDAsMCwxLS4yMTcuNjg5Yy0uMS4zMTUtLjIxNywxLjM1OS0uMzU0LDEuNjc0bC45MDYtLjExOGgwQTEwLjY5MiwxMC42OTIsMCwwLDAsOC40LDI2LjM4OGEzLjczNywzLjczNywwLDAsMSwuNzI5LTEuMjhjLjMzNS0uMzc0LjMxNS0uODQ3LjUxMi0xLjNhMTIuNDg4LDEyLjQ4OCwwLDAsMSwuNzY4LTEuM2MuNDkyLS44MDcuODA3LTEuODEyLDEuODUxLTIuMDI4YTMuMywzLjMsMCwwLDEsMS4wMjQuNzA5LDQuNDUyLDQuNDUyLDAsMCwxLC44ODYsMS4xLDEyLjg1MSwxMi44NTEsMCwwLDEsLjg4NiwyLjY3OCwxLjIyNywxLjIyNywwLDAsMCwuMzk0LjcwOSw1LjQ2Miw1LjQ2MiwwLDAsMSwuNDMzLjcyOWMuMDc5LjE3Ny4yLjU3MS4zLjc4OGE2LjI2Nyw2LjI2NywwLDAsMSwuMzE1LjgyN2wuODQ3LS4wMmguMDJ2LS4wMkE5Ljc1NCw5Ljc1NCwwLDAsMSwxNi41NzEsMjUuMjQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4yMTcsMjcuMjM1Yy0uMS0uMi0uMjE3LS42MS0uMy0uNzg4YTUuNDYyLDUuNDYyLDAsMCwwLS40MzMtLjcyOSwxLjExOSwxLjExOSwwLDAsMS0uMzk0LS43MDksMTIuNDg3LDEyLjQ4NywwLDAsMC0uODg2LTIuNjc4LDQuNDUyLDQuNDUyLDAsMCwwLS44ODYtMS4xLDMuMywzLjMsMCwwLDAtMS4wMjQtLjcwOWMtMS4wNDQuMi0xLjM1OSwxLjIyMS0xLjg1MSwyLjAyOGExMi40ODgsMTIuNDg4LDAsMCwwLS43NjgsMS4zYy0uMi40MzMtLjE3Ny45MjUtLjUxMiwxLjNhMy40NDMsMy40NDMsMCwwLDAtLjcyOSwxLjI4Yy0uMDM5LjEtLjExOCwxLjA4My0uMjE3LDEuMzE5aDBsMS41MzYtLjFjMS40MzcuMSwxLjAyNC42NSwzLjI0OS41MzJsMy41MjUtLjExOGgwQTYuMjY3LDYuMjY3LDAsMCwwLDE2LjIxNywyNy4yMzVaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTI2LjQ1NiwzLjhINS41NDRBMy41MjEsMy41MjEsMCwwLDAsMi4wMiw3LjMyOHY3LjY3OWgwYy41MTItLjE3NywxLjIyMS0xLjI2LDEuNDU3LTEuNTE2YTUuOTEzLDUuOTEzLDAsMCwwLC42NjktMS40Yy40NTMtLjgyNy41MzItMS40MTgsMS41NTYtMS40MThhMS4wMTYsMS4wMTYsMCwwLDEsLjk4NS41NTEsOS41NDcsOS41NDcsMCwwLDEsLjc4OCwxLjI0MSw0Ljg0OSw0Ljg0OSwwLDAsMCwuNzA5LDEuMTIyLDIsMiwwLDAsMCwuMzE1LjJjLjE1OC4wNTkuMy0uMDU5LjQxNC0uMTM4QTEuOTI5LDEuOTI5LDAsMCwwLDkuMjQ2LDEzYy4yLS40NTMuMzk0LS45NjUuNTEyLTEuMTYyLjItLjMxNS4yNzYtLjcwOS40OTItLjg4NmExLjU5LDEuNTksMCwwLDEsLjg2Ni0uMzE1Yy42NS0uMTM4Ljk0NS4zMTUsMS4yNi41OTFhMy4yODUsMy4yODUsMCwwLDEsLjcwOSwxLjA2M2MuMTU4LjM5NC4zNTQuNzY4LjQ1My45ODVhOC45NDYsOC45NDYsMCwwLDEsLjM5NCwxLDMuNzEzLDMuNzEzLDAsMCwwLC41MTIuODY2cy4xNzcuNDczLDEuMi45MDZhOC43NDksOC43NDksMCwwLDAsLjk0NS4zMzUsMy4xNTIsMy4xNTIsMCwwLDAsMS40MzcuMDc5Yy4zOTQsMCwuNjEtLjU3MS43ODgtMS4wMjQuMS0uMjc2LjIxNy0xLjA0NC4yNzYtMS4yNnMtLjEtLjM3NC4wMzktLjU3MWMuMTU4LS4yMTcuMjU2LS4yMzYuMzM1LS41MTIuMi0uNjEsMS4zLS42MywxLjkzLS42My41MzIsMCwuNDUzLjUxMiwxLjMzOS4zMzVhMy4yNDMsMy4yNDMsMCwwLDEsMS41MzYuMjE3LDIuMjI1LDIuMjI1LDAsMCwxLDEuMTQyLjU1MWMuMTU4LjIuNTcxLDEuMTYyLjE1OCwxLjIuMDM5LjAzOS4wNzkuMTM4LjEzOC4xNzctLjEuMzc0LS40OTIuMS0uNzI5LjA1OWExLjE4NywxLjE4NywwLDAsMC0uODA3LjEzOGMtLjUxMi4yMTctMS4yNDEuMi0xLjY5My41NzEtLjM3NC4zMTUtLjM3NCwxLS41NTEsMS40YTUuMTY3LDUuMTY3LDAsMCwxLTEuNTM2LDIuMDA4LDMuOSwzLjksMCwwLDEtMS45NDkuODQ3LDcuOTYxLDcuOTYxLDAsMCwxLTEuNTM2LjA1OWMtLjI1Ni0uMDItLjUxMi0uMDItLjc2OC0uMDItLjE1OCwwLS42NjktLjAyLS42NS4wMzlsLS4wNTkuMTM4YS43LjcsMCwwLDAsLjAzOS4yYy4wMi4xMTguMDIuMjE3LjAzOS4zMTUsMCwuMjE3LS4wMi40NTMsMCwuNjY5LjAyLjQ1My4yLjg2Ni4yMTcsMS4zMzlhMy4yNiwzLjI2LDAsMCwwLC41MzIsMS40NzdjLjEuMTU4LjIzNi4xNzcuMy4zNzRhNC4xNjMsNC4xNjMsMCwwLDEsLjAzOS43MDksOS42ODUsOS42ODUsMCwwLDAsLjgyNywyLjc1N3YuMDJoMGMuNTEyLS4wNzksMS4wNDQtLjI3NiwxLjcxMy0uMzc0LDEuMjQxLS4xNzcsMi45NTQtLjEsNC4wNTYtLjIsMi44LS4yNTYsNC4zMTIsMS4xNDIsNi44MTMuNTcxVjcuMzI4QTMuNTUxLDMuNTUxLDAsMCwwLDI2LjQ1NiwzLjhaTTE2LjAyLDIwLjM0M1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNOC40NzgsMjMuNTczYy4yLS40MzMuMzE1LS45MDYuNDczLTEuMzM5YTIuMjc3LDIuMjc3LDAsMCwxLC44MDctMS4yMjEsNy4zLDcuMywwLDAsMC0xLjA4My0uMWMtLjIzNi0uMDItLjQ3My0uMDU5LS43MDktLjEtLjQzMy0uMDc5LS45MjUtLjE3Ny0xLjMzOS0uMjc2LS4yNTYtLjA1OS0xLjE0Mi0uMzc0LTEuMzE5LS40NTMtLjQ1My0uMi0uNzQ4LS43NjgtMS4wODMtLjcwOWEuNzk0Ljc5NCwwLDAsMC0uNTcxLjMzNSwzLjc0MywzLjc0MywwLDAsMC0uMjM2LjcwOWMtLjEuMjM2LS4yNTYuNDczLS4zNzQuNzA5YTEyLjI4OSwxMi4yODksMCwwLDAtLjkyNSwxLjJjLS4wMzkuMS0uMDU5LjItLjEuM3Y0Ljc0NWE1LjQsNS40LDAsMCwxLC43MjkuMTU4LDguNzcsOC43NywwLDAsMCw0LjM3MS4zNTRsLjE3Ny0uMDJoMGMuMTM4LS4zMTUuMjU2LTEuMzU5LjM1NC0xLjY3NGE1LjQ5NCw1LjQ5NCwwLDAsMCwuMjE3LS42ODksMi42NjgsMi42NjgsMCwwLDAtLjAyLS42ODlDNy44MDksMjQuMjQyLDguMjYyLDI0LjA0NSw4LjQ3OCwyMy41NzNaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2MpXFxcIi8+XCIsXG5cdFwiT2N0YXZlXCI6IFwiPGRlZnMgaWQ9XFxcImRlZnMyODc0XFxcIj4gPHJhZGlhbEdyYWRpZW50IGN4PVxcXCIxODIuOTgzN1xcXCIgY3k9XFxcIjM5NS4wNDg3MVxcXCIgcj1cXFwiMTQ4Ljk1MzA5XFxcIiBmeD1cXFwiMTgyLjk4MzdcXFwiIGZ5PVxcXCIzOTUuMDQ4NzFcXFwiIGlkPVxcXCJyYWRpYWxHcmFkaWVudDMwMzNcXFwiIHhsaW5rOmhyZWY9XFxcIiNsaW5lYXJHcmFkaWVudDM3NTVcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuMjI5MTQzMzQsLTAuMjQ5MDE0NzksMC43NjQzNTcyLDAuODMwNjQyNjgsLTI3Mi44NTMzNywtMTU5LjY5NDgyKVxcXCIgLz4gPGxpbmVhckdyYWRpZW50IGlkPVxcXCJsaW5lYXJHcmFkaWVudDM3NTVcXFwiPiA8c3RvcCBpZD1cXFwic3RvcDM3NTdcXFwiIHN0eWxlPVxcXCJzdG9wLWNvbG9yOiMwMDhjYmU7c3RvcC1vcGFjaXR5OjFcXFwiIG9mZnNldD1cXFwiMFxcXCIgLz4gPHN0b3AgaWQ9XFxcInN0b3AzNzU5XFxcIiBzdHlsZT1cXFwic3RvcC1jb2xvcjojYjJmZmZmO3N0b3Atb3BhY2l0eToxXFxcIiBvZmZzZXQ9XFxcIjFcXFwiIC8+IDwvbGluZWFyR3JhZGllbnQ+IDwvZGVmcz4gPGcgaWQ9XFxcImxheWVyMVxcXCIgdHJhbnNmb3JtPVxcXCJzY2FsZSgwLjExMjk2KSB0cmFuc2xhdGUoLTIzMy4zNTU0NCwtMzkwLjcxODAyKVxcXCI+IDxnIHRyYW5zZm9ybT1cXFwibWF0cml4KDguNDUxOTcyMywwLDAsOC40NTE5NzIzLC0yNzguNDUwMTIsLTQwMy44Mjk3NSlcXFwiIGlkPVxcXCJnMzAyNVxcXCI+IDxwYXRoIGQ9XFxcIm0gNjYuNDMyMTAzLDk3LjQ4ODY3OSBjIC01LjE5NTg0LDUuNjQ2NDMxIC0zLjkzNjYxLDE2LjE2OTAzMSAyLjgxMTA3LDIzLjUwMTg3MSA2Ljc0NzY4LDcuMzMyODUgMTYuNDI4OTgsOC42OTk1NSAyMS42MjQ4MywzLjA1MzEyIDUuMTk1ODUsLTUuNjQ2NDMgMy45NDAyLC0xNi4xNjk0NiAtMi44MDc0OSwtMjMuNTAyMyAtNi43NDc2OCwtNy4zMzI4NjEgLTE2LjQzMjU2LC04LjY5OTEzMSAtMjEuNjI4NDEsLTMuMDUyNjkxIHogbSA0LjcxMTQ5LDIuMzQ1NTMgYyA0LjA4MjU2LC00LjQzNjU5IDExLjU4OSwtMy40NzE1MiAxNi43Njc0MSwyLjE1NTk2MSA1LjE3ODQyLDUuNjI3NSA2LjA2NjQ3LDEzLjc4NDkxIDEuOTgzOTEsMTguMjIxNSAtNC4wODI1Niw0LjQzNjU4IC0xMS41OTA5NywzLjQ3MzY5IC0xNi43NjkzOSwtMi4xNTM4MSAtNS4xNzg0MiwtNS42Mjc1IC02LjA2NDQ5LC0xMy43ODcwNCAtMS45ODE5MywtMTguMjIzNjUxIHpcXFwiIGlkPVxcXCJwYXRoNTg3NFxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDMwMzMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lXFxcIiAvPiA8cmVjdCB3aWR0aD1cXFwiNC4zNDk4NTRcXFwiIGhlaWdodD1cXFwiNC4zNDk4NTRcXFwiIHJ4PVxcXCIwLjc2OTU4OTY2XFxcIiByeT1cXFwiMC43Njk1ODk2NlxcXCIgeD1cXFwiODUuMzgxNTYxXFxcIiB5PVxcXCI5OS40OTM4ODFcXFwiIGlkPVxcXCJyZWN0NTg3NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmN2YyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6I2Q0NTUwMDtzdHJva2Utd2lkdGg6MC43NDQwMzc5OTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZVxcXCIgLz4gPHJlY3Qgd2lkdGg9XFxcIjEwLjI0NTQzNlxcXCIgaGVpZ2h0PVxcXCIxMC4yNDU0MzZcXFwiIHJ4PVxcXCIxLjgxMjY1NDVcXFwiIHJ5PVxcXCIxLjgxMjY1NDVcXFwiIHg9XFxcIjYwLjkyNjU5XFxcIiB5PVxcXCIxMDUuMjI0NVxcXCIgaWQ9XFxcInJlY3Q1ODc4XFxcIiBzdHlsZT1cXFwiZmlsbDojZmY3ZjJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZDQ1NTAwO3N0cm9rZS13aWR0aDowLjc0NDAzNzk5O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lXFxcIiAvPiA8cmVjdCB3aWR0aD1cXFwiNi4xODk3NTMxXFxcIiBoZWlnaHQ9XFxcIjYuMTg5NzUzMVxcXCIgcng9XFxcIjEuMDk1MTEwMlxcXCIgcnk9XFxcIjEuMDk1MTEwMlxcXCIgeD1cXFwiODcuNDA0NzM5XFxcIiB5PVxcXCIxMTguNjM3MDVcXFwiIGlkPVxcXCJyZWN0NTg4MFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmN2YyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6I2Q0NTUwMDtzdHJva2Utd2lkdGg6MC43NDQwMzc5OTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZVxcXCIgLz4gPC9nPiA8L2c+XCIsXG5cdFwiT3BlbkNMXCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiMjkuNjYyXFxcIiB5MT1cXFwiMTguMDI2XFxcIiB4Mj1cXFwiMjEuNDE5XFxcIiB5Mj1cXFwiMjAuMjM0XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCJyZWRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZjZhNmFcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIjI0LjU4OFxcXCIgeTE9XFxcIjkuNzQ4XFxcIiB4Mj1cXFwiMTguNzc2XFxcIiB5Mj1cXFwiMTUuNTZcXFwiIHhsaW5rOmhyZWY9XFxcIiNhXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiMTguNDY2XFxcIiB5MT1cXFwiNi42MTlcXFwiIHgyPVxcXCIxNS45MjRcXFwiIHkyPVxcXCIxMy42MDNcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNjZmE0MGNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNlZGQ0ODBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZFxcXCIgeDE9XFxcIjEzLjE3XFxcIiB5MT1cXFwiNi41MVxcXCIgeDI9XFxcIjEzLjE3XFxcIiB5Mj1cXFwiMTIuOTk3XFxcIiB4bGluazpocmVmPVxcXCIjY1xcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZVxcXCIgeDE9XFxcIjguODA4XFxcIiB5MT1cXFwiOC40ODZcXFwiIHgyPVxcXCIxMC45ODhcXFwiIHkyPVxcXCIxMy4xNjFcXFwiIHhsaW5rOmhyZWY9XFxcIiNjXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJmXFxcIiB4MT1cXFwiNS41MDVcXFwiIHkxPVxcXCIxMS40NzdcXFwiIHgyPVxcXCI4LjU0NlxcXCIgeTI9XFxcIjE0LjUxOVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzExYTExOVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzM3YWUzZFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJnXFxcIiB4MT1cXFwiMy42MzlcXFwiIHkxPVxcXCIxNC4yODVcXFwiIHgyPVxcXCI2Ljg4M1xcXCIgeTI9XFxcIjE2LjE1OFxcXCIgeGxpbms6aHJlZj1cXFwiI2ZcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImhcXFwiIHgxPVxcXCIyLjI2NVxcXCIgeTE9XFxcIjE3Ljc5OVxcXCIgeDI9XFxcIjUuMzc5XFxcIiB5Mj1cXFwiMTguOTMzXFxcIiB4bGluazpocmVmPVxcXCIjZlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaVxcXCIgeDE9XFxcIjJcXFwiIHkxPVxcXCIyMS42MTRcXFwiIHgyPVxcXCI0LjgzM1xcXCIgeTI9XFxcIjIxLjYxNFxcXCIgeGxpbms6aHJlZj1cXFwiI2ZcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImpcXFwiIHgxPVxcXCIyMC42NjJcXFwiIHkxPVxcXCIxOC45NDlcXFwiIHgyPVxcXCIxOC4wMjZcXFwiIHkyPVxcXCIxNy40MjhcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzY0NjQ2NFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2NiY2JjYlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJrXFxcIiB4MT1cXFwiMTYuMDIxXFxcIiB5MT1cXFwiMjUuMjY0XFxcIiB4Mj1cXFwiMTYuMDIxXFxcIiB5Mj1cXFwiMjIuNjkxXFxcIiB4bGluazpocmVmPVxcXCIjalxcXCIvPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX29wZW5jbDwvdGl0bGU+PHBhdGggZD1cXFwiTTI3LjgyOCwxMy41NzRhMTQuNjc2LDE0LjY3NiwwLDAsMSwuODM1LDEuNTQyQTE0Ljk2NCwxNC45NjQsMCwwLDEsMjkuOTIsMjIuOUgyMi4xMzNhMTAuMzc3LDEwLjM3NywwLDAsMC0uOTY3LTQuNDI0WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy43NTMsMTQuNDNhMTAuMDc0LDEwLjA3NCwwLDAsMSwyLjc3MiwyLjg3OGw2LjI3My01LjJhMTUuNTQsMTUuNTQsMCwwLDAtNC45ODgtNC4xNVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNMTQuNzgxLDEzLjA4NmE4LjgyNyw4LjgyNywwLDAsMSwyLjM3Ni45NjZMMjAuNjY2LDcuNDNhMTIuNywxMi43LDAsMCwwLTQuNjQ1LS45NTJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2MpXFxcIi8+PHBhdGggZD1cXFwiTTE0LjM2NCwxM2wuNjEyLTYuNDg4YTEyLjQ2LDEyLjQ2LDAsMCwwLTMuNjExLjgxM2wuNTA3LDUuNjM4QTcuMjE5LDcuMjE5LDAsMCwxLDE0LjM2NCwxM1xcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNkKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC45NDgsMTMuMTc5bC0uNjgzLTUuMzczQTE0LjU4OCwxNC41ODgsMCwwLDAsNy43NzMsOS4zNzlsMS43NCw0LjQyYTcuNTE4LDcuNTE4LDAsMCwxLDEuNDM1LS42MTlcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZSlcXFwiLz48cGF0aCBkPVxcXCJNOC44NiwxNC4yMDYsNi40NzQsMTAuNTExYy0uNDUzLjQ0LS43OS44Mi0xLjAwNiwxLjA3NHEtLjIyNy4yNjctLjQzNi41MzhMNy40OCwxNS4zODdhOC44Nyw4Ljg3LDAsMCwxLDEuMzgtMS4xODJcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZilcXFwiLz48cGF0aCBkPVxcXCJNNy4wNDYsMTUuODc1LDQuMzM1LDEzLjExMmExNC4yNTksMTQuMjU5LDAsMCwwLTEuMjUsMi40MjlsMy4wMDcsMS43MWE5LjgyNiw5LjgyNiwwLDAsMSwuOTU0LTEuMzc2XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2cpXFxcIi8+PHBhdGggZD1cXFwiTTUuNTI3LDE4LjM5M2wtMi43Ny0xLjk0NWExNS40NTIsMTUuNDUyLDAsMCwwLS42MywyLjgzbDIuOTA2LjYwN2ExMC4zNDMsMTAuMzQzLDAsMCwxLC40OTQtMS40OTJcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaClcXFwiLz48cGF0aCBkPVxcXCJNNC44MzMsMjAuOWExMC42ODQsMTAuNjg0LDAsMCwwLS4xLDJIMi4wOTNhMTQuMzMzLDE0LjMzMywwLDAsMS0uMDY0LTIuNTczWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpKVxcXCIvPjxwYXRoIGQ9XFxcIk0yMi41NTEsMTIuNDc4LDE0Ljc1MSwyMy4xQTEuNTQ0LDEuNTQ0LDAsMCwxLDE3LjUsMjQuNDI4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNqKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wMjEsMjUuNTIyYTEuNTQ0LDEuNTQ0LDAsMSwxLDEuMDkyLS40NTJBMS41MzMsMS41MzMsMCwwLDEsMTYuMDIxLDI1LjUyMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NDY0NjRcXFwiLz48cGF0aCBkPVxcXCJNMTcuMzA4LDIzLjk3OGExLjI4NywxLjI4NywwLDEsMS0uMzc3LS45MUExLjI4MywxLjI4MywwLDAsMSwxNy4zMDgsMjMuOTc4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNrKVxcXCIvPlwiLFxuXHRcIlBhc2NhbFwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjE2XFxcIiB5MT1cXFwiLTAuNDQzXFxcIiB4Mj1cXFwiMTZcXFwiIHkyPVxcXCIyMi4wNDJcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMDIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmYwYzE1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWEwYzBmXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9kZWxwaGk8L3RpdGxlPjxjaXJjbGUgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHI9XFxcIjE0XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTI3LjU0NSwxNi4yNDNINC45MjRhLjkxNC45MTQsMCwwLDAtMS4wOTIuODJxLjAzMy40MjkuMS44NDlhMTIuNCwxMi40LDAsMCwwLDI0LjUzMiwwcS4wNzUtLjUuMTA4LTEuMDIxQzI4LjQ3OCwxNi41MjMsMjguMjExLDE2LjIwNywyNy41NDUsMTYuMjQzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmNjQ0M1xcXCIvPjxwb2x5bGluZSBwb2ludHM9XFxcIjE4LjQ4IDExLjY0IDIzLjcwNyA3LjI2NiAxOS43ODcgNS44OCAxNiAxMS4wNTNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCIxNS42OCAxMS4wMjYgMTguNjQgNS44OCAxNC44NTMgNS44OCAxMy4zMDcgMTEuMjkzXFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiMTMuMDQgMTEuMzczIDEzLjYgNi43MDYgMTAuNTg3IDcuOTYgMTEuMDEzIDEyLjc2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiMTAuNzQ3IDEzIDkuNzg3IDguNzYgNy43MDcgMTAuODQgOS42NTMgMTQuNjhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjM4NyAxNS4wNTMgNy40OTMgMTIuMzc2IDYuNjQgMTQuNDY2IDkuMDQgMTYuNTE3XFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiOS4wNCAxNi43NTcgNi42NCAxNS4yMTMgNi40OCAxNy40IDkuMiAxOC4zMzNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjIyNyAxOC44NDYgNi42NCAxOC4wNCA3LjIyNyAxOS44IDkuNTQ3IDE5LjhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjcwNyAyMC4wOTMgNy43MDcgMjAuMzg2IDguNjI3IDIxLjc0NiAxMC4yNjcgMjFcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMjAuMDIzLDEzLjA4OWE2LjYxLDYuNjEsMCwwLDAtNC41My0yQTYuMjkzLDYuMjkzLDAsMCwwLDExLjMsMjIuMDdsNC45NDEuMTI5LTIuMDgtNC4xNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZWU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTYuNSwyMi4zNjZsLTUuMjY3LS4xMzgtLjA0NC0uMDM5YTYuNDUzLDYuNDUzLDAsMCwxLDQuMy0xMS4yNjQsNi43ODcsNi43ODcsMCwwLDEsNC42NDMsMi4wNWwuMTIzLjEyMy01LjksNC45ODJabS01LjE0LS40NTUsNC42MTYuMTIxTDEzLjk2MSwxOGw1LjgyNS00LjkxOWE2LjQzLDYuNDMsMCwwLDAtNC4yOTItMS44MzUsNi4xMzMsNi4xMzMsMCwwLDAtNC4xMzEsMTAuNjY3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlNGIyZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4wMTMsMjAuNDkzYy00LjE3My01LjgxMywyLjEwOS04LjE3MiwyLjQ3OC04LjQ1My40NTEtLjM0NC03LjU5LDEuNzg1LTMuMjI2LDguODhaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjA0ZTMxO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMC43MiAxMi42IDEzLjUyIDE3LjU2NyAxMy43MzMgMTguNTczIDIxLjQ2NyAxNy4wMjYgMjAuNzIgMTIuNlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlZTtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwYXRoIGQ9XFxcIk0xMy42MSwxOC43NjEsMTMuMzQxLDE3LjVsNy40OTUtNS4xNy44MTQsNC44MjhabS4wODktMS4xMjMuMTU4Ljc0N0wyMS4yODMsMTYuOSwyMC42LDEyLjg3NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZTRiMmVcXFwiLz48cGF0aCBkPVxcXCJNMTUuNzIzLDIxLjMxOWMtMy45My0uNjY4LTQuMjgzLjQyOC00LjI4My40MjhMMTAuMjY3LDI0LjQ0czEuMTItLjkwNyw1LjQ5MywwbC43Ni0xLjM4OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkZDBjMTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTIyLDIxLjZjLS4wMi0uMi0xLjEtLjMxOS0xLjY3Ny0uMTIzLS43MzIuMjQ5LTEuMjE5LDEuMTQyLTEuMDQ1LDEuMjEzYTEuOTc1LDEuOTc1LDAsMCwxLDEuMTI1LS45ODZDMTMuNDQ3LDIxLjQ5MywxNC4xNDIsMjEuOCwxNC4xMjIsMjEuNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZjZlNGY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTUuNTIsMTguNjA2YTExLjEsMTEuMSwwLDAsMCwxLjU0NywxLjQ4Nyw2LjksNi45LDAsMCwxLDIuNzIsNC4xMDdjLS4xMDcsMS4wNjctMS45NzMsMS43Ni0xLjk3MywxLjc2bC0zLjMwNy03LjE5NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZWU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTcuNzMsMjYuMTYxbC0zLjQ1Ny03LjUyMSwxLjMyLS4yMDguMDU3LjA4MWExMC44NjksMTAuODY5LDAsMCwwLDEuNTEyLDEuNDUxLDcsNywwLDAsMSwyLjc4Miw0LjIwN2wwLC4wMjIsMCwuMDIyYy0uMTE1LDEuMTUzLTIsMS44NjQtMi4wNzcsMS44OTRabS0yLjk5LTcuMjcsMy4xNTUsNi44NjNjLjQxNC0uMTc4LDEuNjMtLjc2MywxLjczLTEuNTQ4YTYuNzkzLDYuNzkzLDAsMCwwLTIuNjQ4LTMuOTgxbC0uMDEtLjAwN2ExMS45NCwxMS45NCwwLDAsMS0xLjUxNy0xLjQzOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZTRiMmVcXFwiLz48cGF0aCBkPVxcXCJNMjgsMTIuNzQyYy4wMjUuMzk0LjAzNC43OTIuMDI1LDEuMTk0YTEzLjk0NiwxMy45NDYsMCwwLDEtMTkuOSwxMi4zQTEyLjg2LDEyLjg2LDAsMCwwLDI4LDEyLjc0MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYWUwZGY7ZmlsbC1ydWxlOmV2ZW5vZGQ7b3BhY2l0eTowLjJcXFwiLz48cGF0aCBkPVxcXCJNMi4zODMsMTMuODkzQTEzLjk0MSwxMy45NDEsMCwwLDEsMjUuNyw1Ljgzcy01LjAwOSw1Ljk3OS0xMC41ODQsNy45MDdTMi4zODMsMTMuODkzLDIuMzgzLDEzLjg5M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYWUwZGY7b3BhY2l0eTowLjJcXFwiLz48cGF0aCBkPVxcXCJNMy42MTgsMTguNjk0Yy0uMDQ0LS4zOTItLjA3Mi0uNzktLjA4My0xLjE5MUMzLjMyOSw5LjgwNywxMC4wMTIsNC4yLDE3LjcwOCwzLjk5MWExNC4yLDE0LjIsMCwwLDEsNS43MTksMS40NTgsMTMuMTI4LDEzLjEyOCwwLDAsMC03LjE4OC0yLjM2OWMtNy4xLjE5LTEzLjMwNiw1LjMtMTMuMTE2LDEyLjRBMTIuODczLDEyLjg3MywwLDAsMCwzLjYxOCwxOC42OTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWFlMGRmO2ZpbGwtcnVsZTpldmVub2RkO29wYWNpdHk6MC4yXFxcIi8+XCIsXG5cdFwiUGVybFwiOiBcIjxwYXRoIGQ9XFxcIk0yOS4yNSwxMy44YTYuODg4LDYuODg4LDAsMCwwLS43NDItMi4yNjgsMS4wMTEsMS4wMTEsMCwwLDAtLjE3Mi0uMjMzLDkuNDcxLDkuNDcxLDAsMCwxLTEuNzI1LTIuNCw4LjYzMiw4LjYzMiwwLDAsMC0xLjM5NS0yLjM4MkE2LjkwNiw2LjkwNiwwLDAsMSwyNC4xLDQuNjQ0LDQuNTcyLDQuNTcyLDAsMCwwLDIxLjk5LDEuNzI3YTEuMDA5LDEuMDA5LDAsMCwwLS4xLS4wNTQsOC44ODYsOC44ODYsMCwwLDAtMS4zLS40NjgsMS4wMjIsMS4wMjIsMCwwLDAtLjI2My0uMDM1LDEuMDA5LDEuMDA5LDAsMCwwLS4yLjAyMSw1LjYwNyw1LjYwNywwLDAsMS0uODA3LjEwN2MtLjA1LDAtLjEtLjAwNi0uMTQ5LS4wMDZhMi44NDIsMi44NDIsMCwwLDAtMS40MTYuNDUzYy0uMDk0LjA1Mi0uMTg4LjEwNi0uMjg0LjE0OXEtLjA0MS4wMTgtLjA3OC4wMzlBMS42MzcsMS42MzcsMCwwLDEsMTcuMDY2LDJhMy4xMDksMy4xMDksMCwwLDAtLjc3Mi4xOTQsMSwxLDAsMCwwLS41MDguNDgzLDIuMTg0LDIuMTg0LDAsMCwxLS40NjkuNUE0LjM4Miw0LjM4MiwwLDAsMCwxNC41NTUsNGEuOTY0Ljk2NCwwLDAsMC0uMTE2LjIzNCw0LjY4Nyw0LjY4NywwLDAsMS0xLjU3NCwyLjIsNi40NzEsNi40NzEsMCwwLDAtLjguNjEzLDIuNzM0LDIuNzM0LDAsMCwwLS42MjctMS42MzRjLS4wMTctLjAxOS0uMDM1LS4wMzgtLjA1My0uMDU2bDAtLjAxNGEyLjM3OCwyLjM3OCwwLDAsMC0uMTM1LS41ODYsMSwxLDAsMCwwLS4xMzItLjIzNkE1LjE2Nyw1LjE2NywwLDAsMCw5LjUxMSwzLjExM2EuOTg4Ljk4OCwwLDAsMC0uMzQ2LS4xMTksMS41LDEuNSwwLDAsMS0uMTQ4LS4wNzcsMi4wNiwyLjA2LDAsMCwwLTEtLjMxMSwxLjQ3NiwxLjQ3NiwwLDAsMC0uNjgxLjE2Ni45ODcuOTg3LDAsMCwwLS4yNzQuMjA2LDEuMzI4LDEuMzI4LDAsMCwxLS4xMjUuMDYzLDEuOSwxLjksMCwwLDAtLjkwOC43NzgsMi41MzksMi41MzksMCwwLDAtLjU0MS4xMDYsMS42NTYsMS42NTYsMCwwLDEtLjM4My4wNTcsMi4zLDIuMywwLDAsMC0xLjUuNTQ1bC0uMTA2LjFhMi41MzMsMi41MzMsMCwwLDAtMSwyLjUyNSwxLjA4LDEuMDgsMCwwLDAsLjA2OC4xNjVBMi4yOTQsMi4yOTQsMCwwLDAsNC40NDYsOC40NzhjLS4xLjIzOC0uMi40NzMtLjMxNC43YTEuMDA5LDEuMDA5LDAsMCwwLS4wODcuMjkzQTExLjA1MiwxMS4wNTIsMCwwLDAsNCwxMi4wMzljMCwuMDIsMCwuMDQuMDA3LjA2YTUuMjc4LDUuMjc4LDAsMCwxLC4wNDEuNTQ3LDIuOTI2LDIuOTI2LDAsMCwwLC45MzEsMi40Yy4wMTcuMDE0LjAzNC4wMjYuMDUyLjAzOWwuMDA4LjAzMWEyLjgsMi44LDAsMCwwLC4xNTEuNDQ3LDEuMTg1LDEuMTg1LDAsMCwwLC42MzIuNjE3LDEuMjg5LDEuMjg5LDAsMCwwLC4yNDguNTcxLDEsMSwwLDAsMCwuMzMyLjI3OSwyLjQ1MywyLjQ1MywwLDAsMCwuNDY1LjE3NmwuMDY0LjAxOGEuOTc2Ljk3NiwwLDAsMCwuMTkyLjE3MUE1Ljg3OSw1Ljg3OSwwLDAsMSw3Ljg3MywxOGExLjEzLDEuMTMsMCwwLDAsMS4zNTEuNDI3LDEuNSwxLjUsMCwwLDAsLjc2NS4yMTUsMS40MjEsMS40MjEsMCwwLDAsLjYyNC0uMTQ1bC4xMTQtLjAyNmMuMDI0LjQwOC4wMzMuODE3LjAyOCwxLjIyM2ExLjA0MywxLjA0MywwLDAsMCwuMDI2LjI0MiwxMC43NDQsMTAuNzQ0LDAsMCwxLC4yNjYsMS44MjguOTMxLjkzMSwwLDAsMCwuMDMxLjIsOC40OTIsOC40OTIsMCwwLDEsLjI2OCwxLjgxNWMwLC4wMzEsMCwuMDYzLjAwOC4wOTRhNi4wODMsNi4wODMsMCwwLDEtLjYxLDMuNTc1Ljk5NC45OTQsMCwwLDAtLjA4OS4yNjEsMS4wOTMsMS4wOTMsMCwwLDAtLjIzNC4wNzlsLS4wNS4wMjJhMi4wMTMsMi4wMTMsMCwwLDAtMS4yLDEuMDY1LDEuMzIyLDEuMzIyLDAsMCwwLC4wNzQsMS4wNTQsMSwxLDAsMCwwLC4zMjQuMzcxLDMuNTQ3LDMuNTQ3LDAsMCwwLDMuNTA5LjMsMS41NDYsMS41NDYsMCwwLDAsLjgyOS0xLjY1M2wtLjAwNS0uMDY3YS45ODkuOTg5LDAsMCwwLC4wNTYtLjE1OCwxMS4xODYsMTEuMTg2LDAsMCwwLC4yODgtMi4wNjgsOC45MzksOC45MzksMCwwLDEsLjI1OS0xLjgyMiw0LjcyNyw0LjcyNywwLDAsMCwuMzg5LTEuNTg4bC4wNDIuMDQ4YTEyLjY2MSwxMi42NjEsMCwwLDAsMS4yNTUsMS4xMjksMTAuMywxMC4zLDAsMCwxLDEuMS45ODlsLS4wMTEuMDM4YS41MzIuNTMyLDAsMCwxLS4zNDIuMzU5bC0uMDQ5LjAxN2ExLjkyMSwxLjkyMSwwLDAsMC0xLjE4NCwxLjMzNCwxLjMxMywxLjMxMywwLDAsMCwuNDUyLDEuMjM0LDEsMSwwLDAsMCwuNDQxLjIyMiw0LjkwOCw0LjkwOCwwLDAsMCwyLjczNS0uMTgxLDEuNTU2LDEuNTU2LDAsMCwwLC4yNjYtLjEyNCwxLjQxMSwxLjQxMSwwLDAsMCwuOTcuMzcyLDIuMzI2LDIuMzI2LDAsMCwwLDEtLjI3NGMuMDQ5LS4wMjMuMS0uMDQ1LjE0LS4wNjJhMSwxLDAsMCwwLC42MzctLjg2NCw0LjU1Myw0LjU1MywwLDAsMC0uNDY4LTIuMzQzLDEuNTYsMS41NiwwLDAsMC0uNTEtLjYsMTAuOCwxMC44LDAsMCwxLDEuMy0yLjE1LDIuMTkzLDIuMTkzLDAsMCwwLC40NTEtMi4wMjYsMi41MTksMi41MTksMCwwLDEtLjA0My0uMzk0LDEuMDQ2LDEuMDQ2LDAsMCwwLDAtLjE0OCw1Ljc1Niw1Ljc1NiwwLDAsMSwuMDEyLTEuMjc5LDcuMTYxLDcuMTYxLDAsMCwwLC45NTEsMS43OTMsNy44OTIsNy44OTIsMCwwLDEsLjEzMywxLjEsMTAuNzMzLDEwLjczMywwLDAsMCwuMTMzLDEuMTg2LDkuMzYsOS4zNiwwLDAsMS0uMjI0LDMuOSwxLDEsMCwwLDAtLjAzMi4zNGgwYS45OC45OCwwLDAsMC0uMS4xNzksMi4yMzgsMi4yMzgsMCwwLDAtLjMxMiwxLjIzNSwxLjAwNywxLjAwNywwLDAsMCwuMDM5LjIsMS4zMTUsMS4zMTUsMCwwLDAsMS4zMjguOTYzYy4wODYsMCwuMTc3LS4wMDYuMjY4LS4wMTRsLjAxOSwwLC4wMzguMDEzYTIuMTA5LDIuMTA5LDAsMCwwLDIuNTE3LTEuMDg4LDEsMSwwLDAsMCwuMDU4LS43MzUsNS4yODUsNS4yODUsMCwwLDEtLjIwOC0xLjAyNywxLjAxMSwxLjAxMSwwLDAsMC0uMDQ2LS4yMTcsNi40Nyw2LjQ3LDAsMCwxLS4yMjEtMy4yMiwxLjExMiwxLjExMiwwLDAsMCwuMDE1LS4xMTQsMy45MDcsMy45MDcsMCwwLDEsLjA3NC0uNDQzLDIuNzM4LDIuNzM4LDAsMCwwLS4xOTMtMi4xLDQuMzM5LDQuMzM5LDAsMCwxLC4wMjEtLjQ3NmMuMDExLS4xNDcuMDIzLS4zLjAyNy0uNDYzYTEuNTksMS41OSwwLDAsMCwuODYyLS44NTEsMTIuODMsMTIuODMsMCwwLDAsLjk0Ny0yLjIzLDEuNzE5LDEuNzE5LDAsMCwwLC4xNzItMS4xODUsMS4yMzQsMS4yMzQsMCwwLDAsLjExMS0uMjUxQTEuNDY3LDEuNDY3LDAsMCwwLDI5LjI1LDEzLjhaTTE4Ljg2MywyMi43NjhjLS4wMjYsMC0uMDUzLS4wMDgtLjA4LS4wMWwtLjAyNCwwYTIuNzQ4LDIuNzQ4LDAsMCwxLS4yMzYtLjMyM2MtLjA1OS0uMDg4LS4xMTgtLjE3NS0uMTc4LS4yNThhMi4yNTMsMi4yNTMsMCwwLDAsLjIwOC0uMjM0LDEuMjU1LDEuMjU1LDAsMCwwLC42MjktLjMyMUEzLjE4NiwzLjE4NiwwLDAsMSwxOC44NjMsMjIuNzY4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VkZWRlZFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4yODksMi4zYy0uNTQ4LS4wNjUtLjk2MS4zLTEuNDE5LjUwNi0uMzY4LjIwNi0uODE1LjE1Mi0xLjE4NS4zMDktLjI4Mi41NzktLjk0MS45MDgtMS4zLDEuNDQzYTUuNyw1LjcsMCwwLDEtMS45NDIsMi42OTQsNS40NjQsNS40NjQsMCwwLDAtMi4zNjgsMy4zOTRjLS4xNDUuMy0uMTIyLjc0Ni0uMjc3LDEtLjUxMS4xNDMtLjIzOS0uNTE2LS4zLS44MjUtLjA3NC0uNDcuMzQxLS43Ny4zNzMtMS4yMjZhMS44MzQsMS44MzQsMCwwLDAsLjIwOS0xLjA1M2MtLjA1Ni0uODE0LjE4OS0xLjgwNy0uMzkzLTIuNDc3LS4zNDktLjItLjIzOS0uNjIzLS4zNjYtLjk0N2E0LjIxNCw0LjIxNCwwLDAsMC0xLjMtMS4xMzljLS40MTktLjA0MS0uODA2LS41NDItMS4yMzItLjMyMy0uMjY2LjMwOS0uNzYzLjMwNS0uOTIyLjcxMy0uMS41MTYtLjY4OC4zNzQtMS4wNjguNS0uNDg4LjE4NS0xLjExOC4wMDYtMS41MTguMzgyLS40MTEuNDEtMS4wMzQuOTYxLS44MzUsMS42MDYuNDU3Ljg4MiwxLjY0NS40MzgsMi4zMTcuOTc0QTE3Ljk5LDE3Ljk5LDAsMCwxLDUuMDM2LDkuNjFhMTAuMDUxLDEwLjA1MSwwLDAsMC0uMDQ0LDIuMzMyYy4xMjMuNzczLS4wODMsMS43NzIuNjA2LDIuMzE5LjM4LjEzNy4zNTcuNTcyLjUuODg3LjEzNC4yOS40MjctLjExMy41NDMuMTkzLjMzOC4xODQuMDM3LjU2MS4yMi44LjI2My4xMzcuNjM5LjEyOC44MjIuNDI2YTYuODQ0LDYuODQ0LDAsMCwxLC45NzUuODA2Yy4yMy40NjcuNTMxLS40NTQuNzgzLS4xMDkuMTcuMjg1LjUwNi41MjIuODE5LjI4NWEyLjk5MywyLjk5MywwLDAsMCwxLjMyNC0uNTU2LDE4LjAzMywxOC4wMzMsMCwwLDEsLjE3MSwyLjcxOCwxMS43MzMsMTEuNzMzLDAsMCwxLC4yOSwyLDkuNDA5LDkuNDA5LDAsMCwxLC4zLDIuMDMsNy4xMTEsNy4xMTEsMCwwLDEtLjcwOSw0LjE2LDEuMDEyLDEuMDEyLDAsMCwxLS44MDcuOGMtLjI5MS4xMy0uOS4zNjYtLjY5Mi43NzZhMi41NDksMi41NDksMCwwLDAsMi41Mi4yMTRjLjUxLS4yNDMuMDczLS44NTguMzM0LTEuMjI2LjM0My0xLjMuMTc0LTIuNjkxLjU3NS0zLjk4NWEzLjc2MiwzLjc2MiwwLDAsMCwuMy0yLjFjLjA3OS0uNDQtLjEwNS0uOTY5LjE4Ny0xLjMyOWExLjgxMywxLjgxMywwLDAsMSwuNDgzLTEuMiwxNC43NjIsMTQuNzYyLDAsMCwwLC4xNDQtMi4wMjYsMy4yMTQsMy4yMTQsMCwwLDEsMS4yNjctLjEyN2MuMDE4LjM3NS0uMjcyLjgxMi0uMTksMS4yMzRBMS45NDgsMS45NDgsMCwwLDEsMTUuNSwyMC4zYTIuODQ5LDIuODQ5LDAsMCwwLC4xNjgsMi4zMDhjLjc4Mi44MzksMS44LDEuNDMyLDIuNTM2LDIuMzI3LjMxNC4yMDUuMi41MTcuMDM4Ljc4NGExLjUyOCwxLjUyOCwwLDAsMS0uOTg3LDEuMDM0Yy0uMzA4LjEyMS0uODA2LjU2Ni0uNDQyLjg4MmEzLjkwNiwzLjkwNiwwLDAsMCwyLjE3OC0uMTQ0Yy40NzYtLjE3MS4zLS43MzguNDg4LTEuMDg4LjMuMjMzLjQyMy43NjUuNzExLDEuMDY5LjMuNDMzLjgwNy4wNzMsMS4xNTYtLjA2MmEzLjU0OSwzLjU0OSwwLDAsMC0uMzcyLTEuODQyYy0uMTY3LS4zNzgtLjgtLjM4NS0uNzctLjg1MmExMS43NjEsMTEuNzYxLDAsMCwxLDEuNzEyLTNjLjUxLS40NzkuMTMtMS4xOTEuMTU4LTEuOEE2Ljc2NSw2Ljc2NSwwLDAsMSwyMy4xNTgsMTUuNWExNS44ODksMTUuODg5LDAsMCwwLC42OTIsMi4xNCw2LjIzLDYuMjMsMCwwLDAsMS4xLDIuMjQ2Yy4yMzcuODExLjE3NiwxLjcxLjMzMSwyLjU1MWExMC40NCwxMC40NCwwLDAsMS0uMjQyLDQuMzQ3Yy4wNC41MTgtLjQ1Ny45LS40MTUsMS40MDguMTQuNDY5LjcuMDkzLjk5LjI5YTEuMTEsMS4xMSwwLDAsMCwxLjMyNC0uNTcyLDYuMjEyLDYuMjEyLDAsMCwxLS4yNDctMS4yMjMsNy40NTQsNy40NTQsMCwwLDEtLjI1NS0zLjcxOWMuMDQ2LS42NjkuNDU3LTEuNS0uMDczLTIuMDcyLS4xNDgtLjYxOS4xLTEuMjg1LS4wNDktMS45MTVhMTIuODc3LDEyLjg3NywwLDAsMS0uMTIyLTQuOTMzYy4wOTMtLjIyNy4wMTMtLjY0OS4yNDctLjc3NWExLjg1MSwxLjg1MSwwLDAsMSwuMzE1LDEuMjMyLDMuNywzLjcsMCwwLDEsLjA3OSwyLjA4MWMtLjQyNC41MzEtLjE2MywxLjI0OC0uMTA5LDEuODUuMDY4LjQyMi41MTYuMTE4LjU4OS0uMTQ0YTExLjg1MSwxMS44NTEsMCwwLDAsLjk0NC0yLjI0MWMuMjY5LS4zNTYuMDE0LS43NywwLTEuMTQyLjQxMy0uMDQ5LjI1Ni0uNTA2LjAzNS0uN2E1LjkzLDUuOTMsMCwwLDAtLjY2Ny0yLjIsMTAuNDY0LDEwLjQ2NCwwLDAsMS0xLjk0MS0yLjcyM2MtLjUyOC0xLjYzOS0yLjA0Mi0yLjcyNi0yLjU1Ni00LjM3OWEzLjU1NiwzLjU1NiwwLDAsMC0xLjY1Mi0yLjMxN0E3Ljg4MSw3Ljg4MSwwLDAsMCwyMC4zMiwyLjE3LDYuNSw2LjUsMCwwLDEsMTkuMjg5LDIuM1ptLjQsMTQuNjZhMzguOTA3LDM4LjkwNywwLDAsMSwuNSw0LjI5MSw0LjE3NSw0LjE3NSwwLDAsMS0uNzYsMi41MTdjLS4xMi40MjUtLjQ4Ni4wMTItLjc1MS0uMDE2LS42NDMtLjAxOC0uODgyLS42ODMtMS4yMzItMS4xMDctLjM2LS4zNDQtLjEtLjguMTMzLTEuMTMxLjI1Mi0uMTc5LjM1LS41NzkuNzA4LS41NDguNC0uMDA3LjMxNi0uNDg3LjI2LS43NDMuMjM4LS4zNjIuMDkyLS44OTIuMzI4LTEuMjgzLjQxOS0uMTgyLjI5NC0uODIuNDQyLTEuMTguMTE1LS4yNTYuMDE3LS43NDkuMzM0LS44NTQuMDM3LS4wMDYuMDQ5LjAxMi4wNDIuMDUyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzNhM2M1YlxcXCIvPlwiLFxuXHRcIlBIUFwiOiBcIjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiYVxcXCIgY3g9XFxcIi0xNi4xMTRcXFwiIGN5PVxcXCIyMC41MzJcXFwiIHI9XFxcIjE4LjM4NFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgyNi41MiAtOS4zMDcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjVcXFwiIHN0b3AtY29sb3I9XFxcIiM0YzZiOTZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMyMzFmMjBcXFwiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3BocDwvdGl0bGU+PGVsbGlwc2UgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHJ4PVxcXCIxNFxcXCIgcnk9XFxcIjcuMzY1XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PGVsbGlwc2UgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHJ4PVxcXCIxMy40NTNcXFwiIHJ5PVxcXCI2LjgxOFxcXCIgc3R5bGU9XFxcImZpbGw6IzYyODBiNlxcXCIvPjxwYXRoIGQ9XFxcIk0xOC43MjUsMTguMmwuNjY3LTMuNDM0YTEuNzUyLDEuNzUyLDAsMCwwLS4zNzItMS43MTksMi45MjksMi45MjksMCwwLDAtMi0uNTI1SDE1Ljg2N2wuMzMxLTEuN2EuMjE5LjIxOSwwLDAsMC0uMjE1LS4yNmgtMS42YS4yMTkuMjE5LDAsMCwwLS4yMTUuMTc3bC0uNzA5LDMuNjQ2YTIuMDUxLDIuMDUxLDAsMCwwLS40NzctMS4wNTQsMi43ODMsMi43ODMsMCwwLDAtMi4yLS44MDdINy43YS4yMTkuMjE5LDAsMCwwLS4yMTUuMTc3bC0xLjQzNCw3LjM4YS4yMTkuMjE5LDAsMCwwLC4yMTUuMjZINy44NjlhLjIxOS4yMTksMCwwLDAsLjIxNS0uMTc3bC4zNDctMS43ODVoMS4yYTUuMTY3LDUuMTY3LDAsMCwwLDEuNTY4LS4yLDMuMDY4LDMuMDY4LDAsMCwwLDEuMTUtLjY4OSwzLjUzOCwzLjUzOCwwLDAsMCwuNjgtLjg0NGwtLjI4NywxLjQ3NWEuMjE5LjIxOSwwLDAsMCwuMjE1LjI2aDEuNmEuMjE5LjIxOSwwLDAsMCwuMjE1LS4xNzdsLjc4Ny00LjA1MWgxLjA5NGMuNDY2LDAsLjYuMDkzLjY0LjEzM3MuMS4xNjUuMDI1LjU2OWwtLjYzNSwzLjI2NWEuMjE5LjIxOSwwLDAsMCwuMjE1LjI2aDEuNjJBLjIxOS4yMTksMCwwLDAsMTguNzI1LDE4LjJaTTExLjMzLDE1LjM2NmExLjc0OSwxLjc0OSwwLDAsMS0uNTYxLDEuMDkyLDIuMTcxLDIuMTcxLDAsMCwxLTEuMzE1LjMyMUg4Ljc0MmwuNTE1LTIuNjUxaC45MjFjLjY3NywwLC45NDkuMTQ1LDEuMDU5LjI2NkExLjE4MSwxLjE4MSwwLDAsMSwxMS4zMywxNS4zNjZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTI1LjU0NiwxMy4zMzJhMi43ODMsMi43ODMsMCwwLDAtMi4yLS44MDdIMjAuMjU1YS4yMTkuMjE5LDAsMCwwLS4yMTUuMTc3bC0xLjQzNCw3LjM4YS4yMTkuMjE5LDAsMCwwLC4yMTUuMjZoMS42MDhhLjIxOS4yMTksMCwwLDAsLjIxNS0uMTc3bC4zNDctMS43ODVoMS4yYTUuMTY3LDUuMTY3LDAsMCwwLDEuNTY4LS4yLDMuMDY4LDMuMDY4LDAsMCwwLDEuMTUtLjY4OSwzLjQyNSwzLjQyNSwwLDAsMCwxLjA3Ni0xLjkyN0EyLjUxMiwyLjUxMiwwLDAsMCwyNS41NDYsMTMuMzMyWm0tMS42NjcsMi4wMzRhMS43NDksMS43NDksMCwwLDEtLjU2MSwxLjA5MkEyLjE3MSwyLjE3MSwwLDAsMSwyMiwxNi43NzhIMjEuMjlsLjUxNS0yLjY1MWguOTIxYy42NzcsMCwuOTQ5LjE0NSwxLjA1OS4yNjZBMS4xODEsMS4xODEsMCwwLDEsMjMuODc5LDE1LjM2NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTAuMTc4LDEzLjkwOGExLjY0NSwxLjY0NSwwLDAsMSwxLjIyMS4zMzgsMS4zNCwxLjM0LDAsMCwxLC4xNDUsMS4xNjEsMS45NDUsMS45NDUsMCwwLDEtLjY0MiwxLjIyM0EyLjM2MSwyLjM2MSwwLDAsMSw5LjQ1NCwxN0g4LjQ3NmwuNi0zLjA4OVpNNi4yNjEsMjAuMTI0SDcuODY5bC4zODEtMS45NjJIOS42MjdhNC45MzEsNC45MzEsMCwwLDAsMS41LS4xOTEsMi44NCwyLjg0LDAsMCwwLDEuMDctLjY0MiwzLjIwNywzLjIwNywwLDAsMCwxLjAxLTEuODA4LDIuMywyLjMsMCwwLDAtLjM4NS0yLjA0NCwyLjU2OCwyLjU2OCwwLDAsMC0yLjAzNS0uNzMySDcuN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDAwMDRcXFwiLz48cGF0aCBkPVxcXCJNMTQuMzg3LDEwLjc4MmgxLjZMMTUuNiwxMi43NDRoMS40MjFhMi43NjcsMi43NjcsMCwwLDEsMS44NS40NjgsMS41NDgsMS41NDgsMCwwLDEsLjMwNSwxLjUxNmwtLjY2NywzLjQzNEgxNi44OWwuNjM1LTMuMjY1YS44ODYuODg2LDAsMCwwLS4wOC0uNzYsMS4xMjEsMS4xMjEsMCwwLDAtLjgtLjJIMTUuMzdsLS44MjIsNC4yMjhoLTEuNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDAwMDRcXFwiLz48cGF0aCBkPVxcXCJNMjIuNzI3LDEzLjkwOGExLjY0NSwxLjY0NSwwLDAsMSwxLjIyMS4zMzgsMS4zNCwxLjM0LDAsMCwxLC4xNDUsMS4xNjEsMS45NDUsMS45NDUsMCwwLDEtLjY0MiwxLjIyM0EyLjM2MSwyLjM2MSwwLDAsMSwyMiwxN2gtLjk3OGwuNi0zLjA4OVpNMTguODEsMjAuMTI0aDEuNjA4bC4zODEtMS45NjJoMS4zNzdhNC45MzEsNC45MzEsMCwwLDAsMS41LS4xOTEsMi44NCwyLjg0LDAsMCwwLDEuMDctLjY0MiwzLjIwNywzLjIwNywwLDAsMCwxLjAxLTEuODA4LDIuMywyLjMsMCwwLDAtLjM4NS0yLjA0NCwyLjU2OCwyLjU2OCwwLDAsMC0yLjAzNS0uNzMySDIwLjI0NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDAwMDRcXFwiLz5cIixcblx0XCJQTC9TUUxcIjogXCI8cGF0aCBkPVxcXCJNOC41NjIsMTUuMjU2QTIxLjE1OSwyMS4xNTksMCwwLDAsMTYsMTYuNDQ5YTIxLjE1OSwyMS4xNTksMCwwLDAsNy40MzgtMS4xOTRjMS44NjQtLjcyNywyLjUyNS0xLjUzNSwyLjUyNS0yVjkuN2ExMC4zNTcsMTAuMzU3LDAsMCwxLTIuMDg0LDEuMDc2QTIyLjI5MywyMi4yOTMsMCwwLDEsMTYsMTIuMDc4YTIyLjM2LDIyLjM2LDAsMCwxLTcuODc5LTEuM0ExMC4yOCwxMC4yOCwwLDAsMSw2LjAzNyw5Ljd2My41NUM2LjAzNywxMy43MjQsNi43LDE0LjUyOCw4LjU2MiwxNS4yNTZaXFxcIiBzdHlsZT1cXFwiZmlsbDpyZWRcXFwiLz48cGF0aCBkPVxcXCJNOC41NjIsMjEuOTYxYTE1LjYxMSwxNS42MTEsMCwwLDAsMi42Ljc0MUEyNC45LDI0LjksMCwwLDAsMTYsMjMuMTU1YTI0LjksMjQuOSwwLDAsMCw0LjgzOC0uNDUyLDE1LjYxNCwxNS42MTQsMCwwLDAsMi42LS43NDFjMS44NjQtLjcyNywyLjUyNS0xLjUzNSwyLjUyNS0ydi0zLjM5YTEwLjcwNiwxMC43MDYsMCwwLDEtMS42OTIuODI1QTIzLjQ5LDIzLjQ5LDAsMCwxLDE2LDE4Ljc0YTIzLjQ5LDIzLjQ5LDAsMCwxLTguMjcxLTEuMzQ4LDEwLjgyOSwxMC44MjksMCwwLDEtMS42OTItLjgyNVYxOS45NkM2LjAzNywyMC40MjYsNi43LDIxLjIzMSw4LjU2MiwyMS45NjFaXFxcIiBzdHlsZT1cXFwiZmlsbDpyZWRcXFwiLz48cGF0aCBkPVxcXCJNMTYsMzBjNS41LDAsOS45NjMtMS43NDQsOS45NjMtMy44OTRWMjMuMjY5YTEwLjUsMTAuNSwwLDAsMS0xLjUzNS43NjJsLS4xNTcuMDYzQTIzLjQ4NywyMy40ODcsMCwwLDEsMTYsMjUuNDQ1YTIzLjQyMiwyMy40MjIsMCwwLDEtOC4yNzEtMS4zNTFjLS4wNTQtLjAyLS4xMDYtLjA0My0uMTU3LS4wNjNhMTAuNSwxMC41LDAsMCwxLTEuNTM1LS43NjJ2Mi44MzdDNi4wMzcsMjguMjU2LDEwLjUsMzAsMTYsMzBaXFxcIiBzdHlsZT1cXFwiZmlsbDpyZWRcXFwiLz48ZWxsaXBzZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCI1Ljg5NFxcXCIgcng9XFxcIjkuOTYzXFxcIiByeT1cXFwiMy44OTRcXFwiIHN0eWxlPVxcXCJmaWxsOnJlZFxcXCIvPlwiLFxuXHRcIlBsYWluIHRleHRcIjogXCI8cGF0aCBkPVxcXCJNMjIuMDM4LDJINi4zNzVhMS43NTUsMS43NTUsMCwwLDAtMS43NSwxLjc1djI0LjVBMS43NTUsMS43NTUsMCwwLDAsNi4zNzUsMzBoMTkuMjVhMS43NTUsMS43NTUsMCwwLDAsMS43NS0xLjc1VjYuODU2Wm0uNTI1LDIuODQ0LDEuNjYzLDEuNTMxSDIyLjU2M1pNNi4zNzUsMjguMjVWMy43NUgyMC44MTNWOC4xMjVoNC44MTNWMjguMjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+PHJlY3QgeD1cXFwiOC4xMjVcXFwiIHk9XFxcIjE1LjA5N1xcXCIgd2lkdGg9XFxcIjEzLjA3NlxcXCIgaGVpZ2h0PVxcXCIxLjc1XFxcIiBzdHlsZT1cXFwiZmlsbDojODI5ZWMyXFxcIi8+PHJlY3QgeD1cXFwiOC4xMjVcXFwiIHk9XFxcIjI0LjQzOVxcXCIgd2lkdGg9XFxcIjkuNzYyXFxcIiBoZWlnaHQ9XFxcIjEuNzVcXFwiIHN0eWxlPVxcXCJmaWxsOiM4MjllYzJcXFwiLz48cmVjdCB4PVxcXCI4LjEyNVxcXCIgeT1cXFwiMTkuNzYzXFxcIiB3aWR0aD1cXFwiMTUuNzVcXFwiIGhlaWdodD1cXFwiMS43NVxcXCIgc3R5bGU9XFxcImZpbGw6IzgyOWVjMlxcXCIvPjxyZWN0IHg9XFxcIjguMTI1XFxcIiB5PVxcXCIxMC4yM1xcXCIgd2lkdGg9XFxcIjE1Ljc1XFxcIiBoZWlnaHQ9XFxcIjEuNzVcXFwiIHN0eWxlPVxcXCJmaWxsOiM4MjllYzJcXFwiLz5cIixcblx0XCJQbGFudFVNTFwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi0zMy40MjNcXFwiIHkxPVxcXCItMjUwLjkxMVxcXCIgeDI9XFxcIi0zMy4zNTNcXFwiIHkyPVxcXCItMjUwLjg1OFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgzNy4xMzQsIDI2LjAwMSwgMTMuNTc1LCAtMTkuMzg3LCA0NjczLjQ3MywgLTM5ODIuMDE5KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzc2NzY3NlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiLTMyLjEwN1xcXCIgeTE9XFxcIi0yNDIuNTYzXFxcIiB4Mj1cXFwiLTMyLjAyOFxcXCIgeTI9XFxcIi0yNDIuNTg2XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDgxLjA4MSwgNTYuNzc0LCAxNy4zMDYsIC0yNC43MTUsIDY4MDQuMDIxLCAtNDE0OS42NDQpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMDA3OWI5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImNcXFwiIHgxPVxcXCItMzMuMjgyXFxcIiB5MT1cXFwiLTI0My40MjNcXFwiIHgyPVxcXCItMzMuMjI0XFxcIiB5Mj1cXFwiLTI0My40NTVcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoNjAuMDAzLCA0Mi4wMTUsIDM0LjE4NCwgLTQ4LjgyLCAxMDM0My4wMDUsIC0xMDQ2OS4wODQpXFxcIiB4bGluazpocmVmPVxcXCIjYlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZFxcXCIgeDE9XFxcIjEyLjM1NlxcXCIgeTE9XFxcIjI2LjI2OFxcXCIgeDI9XFxcIjE0LjAxMVxcXCIgeTI9XFxcIjI2LjI2OFxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzU5NTk1OVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4wODdcXFwiIHN0b3AtY29sb3I9XFxcIiM2ZTZlNmVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjQyXFxcIiBzdG9wLWNvbG9yPVxcXCIjOGM4YzhjXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQwNVxcXCIgc3RvcC1jb2xvcj1cXFwiI2E0YTRhNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41NzdcXFwiIHN0b3AtY29sb3I9XFxcIiNiNWI1YjVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzY1XFxcIiBzdG9wLWNvbG9yPVxcXCIjYmZiZmJmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYzJjMmMyXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImVcXFwiIHgxPVxcXCIxOC4yOTFcXFwiIHkxPVxcXCIyNi4xNzFcXFwiIHgyPVxcXCIxOS45NDZcXFwiIHkyPVxcXCIyNi4xNzFcXFwiIHhsaW5rOmhyZWY9XFxcIiNkXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJmXFxcIiB4MT1cXFwiMjQuNDRcXFwiIHkxPVxcXCIyNi4xNzFcXFwiIHgyPVxcXCIyNi4wOTZcXFwiIHkyPVxcXCIyNi4xNzFcXFwiIHhsaW5rOmhyZWY9XFxcIiNkXFxcIi8+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfcGxhbnR1bWw8L3RpdGxlPjxwb2x5Z29uIHBvaW50cz1cXFwiMjAuMzA1IDE3Ljg3MiAyNy4xNiAyMi40MTggMjEuNzIgMjUuNDkzIDE0Ljg2MSAyMC45OTkgMjAuMzA1IDE3Ljg3MlxcXCIgc3R5bGU9XFxcImZpbGw6IzFjMGE0MlxcXCIvPjxwYXRoIGQ9XFxcIk0yMS43MTYsMjUuNjE5bC0uMDU1LS4wMzYtNy4wMDUtNC41OSw1LjY1My0zLjI0Nyw3LjA1Niw0LjY4Wm0tNi42NS00LjYxMyw2LjY1OCw0LjM2Miw1LjIzMS0yLjk1N0wyMC4zLDE4WlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjYuNDAxIDExLjkwOSAyOS40MTggMTMuNTkyIDI3LjA3IDE1LjA4OCAyNC4yMTMgMTMuMjQ3IDI2LjQwMSAxMS45MDlcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMjcuMDY5LDE1LjIxNWwtMy4wNTgtMS45NywyLjM4Ny0xLjQ2LDMuMjI4LDEuOFptLTIuNjU0LTEuOTY2TDI3LjA3LDE0Ljk2LDI5LjIwOCwxMy42bC0yLjgtMS41NjVaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNC40OTggMTcuODA3IDIxLjM1NCAyMi4zNTQgMTUuOTE0IDI1LjQyOSA5LjA1NSAyMC45MzUgMTQuNDk4IDE3LjgwN1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYmQzZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNS45MSwyNS41NTRsLS4wNTUtLjAzNkw4Ljg1LDIwLjkyOSwxNC41LDE3LjY4MWw3LjA1Niw0LjY4Wk05LjI2LDIwLjk0MSwxNS45MTgsMjUuM2w1LjIzMS0yLjk1Ny02LjY1NC00LjQxM1pcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjcuOTkgMTcuOTY2IDE0Ljk1NCAyMi4zNjYgOS41NzcgMjUuNTA0IDIuMjE4IDIwLjg0OSA3Ljk5IDE3Ljk2NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ExMWY0MFxcXCIvPjxwYXRoIGQ9XFxcIk05LjU3NSwyNS42MjksMiwyMC44MzhsNi0zLDcuMTY0LDQuNTI3Wk0yLjQzNiwyMC44Niw5LjU4LDI1LjM3OGw1LjE2OC0zLjAxNkw3Ljk4NCwxOC4wODlaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyLjExMSAyMS4wMjEgOS40NDMgMjUuNTE1IDkuNDQzIDI5LjA2MyAyLjExMSAyNC4zMzIgMi4xMTEgMjEuMDIxXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTkuNTUsMjkuMjYsMiwyNC4zOTFWMjAuODI5TDkuNTUsMjUuNDU1Wk0yLjIxOCwyNC4yNzRsNy4xMTgsNC41OTJWMjUuNTc1TDIuMjE4LDIxLjIxM1pcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI0LjA3MSAxMy4zNDMgMjcuMDA5IDE1LjIyMiAyNy4wMDkgMjIuMTMxIDI0LjA3MSAyMC4yNDcgMjQuMDcxIDEzLjM0M1xcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk0yNy4wNjMsMjIuMjI5bC0zLjA0NS0xLjk1M1YxMy4yNDVsMy4wNDUsMS45NDdabS0yLjkzOC0yLjAxMiwyLjgzMSwxLjgxNVYxNS4yNTFsLTIuODMxLTEuODFaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNy4xNDkgMjIuNTI2IDI3LjE0OSAxNS4xOTQgMjkuNTE0IDEzLjc3NSAyOS41MTQgMjkuMTQ5IDI4LjMzMSAyOS4xNDkgOS42NDYgMjkuMTQ5IDkuNjQ2IDI1LjYwMSAxNS4wODYgMjIuNTI2IDE1Ljc4NSAyNS42MDEgMTUuNzk2IDI1LjYwMSAyMS40NzIgMjIuNTI2IDIxLjg5MSAyNS42MDEgMjEuOTQ1IDI1LjYwMSAyNy4xNDkgMjIuNTI2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTI5LjYyMSwyOS4yNTZIOS41MzlWMjUuNTM4bDUuNjItMy4xNzcuNywzLjA4Myw1LjctMy4wODcuNDIyLDMuMSw1LjA2MS0yLjk5MVYxNS4xMzNsMi41OC0xLjU0OFpNOS43NTMsMjkuMDQxSDI5LjQwN1YxMy45NjRsLTIuMTUxLDEuMjl2Ny4zMzJsLS4wNTMuMDMxLTUuMjI5LDMuMDlIMjEuOGwtLjQxMS0zLjAxNC01LjU2NCwzLjAxNEgxNS43bC0uNjg2LTMuMDE4LTUuMjYsMi45NzNaXFxcIi8+PHJlY3QgeD1cXFwiMTIuMzU2XFxcIiB5PVxcXCIyNS40NFxcXCIgd2lkdGg9XFxcIjEuNjU2XFxcIiBoZWlnaHQ9XFxcIjEuNjU2XFxcIiByeD1cXFwiMC4yMTVcXFwiIHJ5PVxcXCIwLjIxNVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNkKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMy44LDI3LjJIMTIuNTdhLjMyMi4zMjIsMCwwLDEtLjMyMi0uMzIyVjI1LjY1NWEuMzIyLjMyMiwwLDAsMSwuMzIyLS4zMjJIMTMuOGEuMzIyLjMyMiwwLDAsMSwuMzIyLjMyMnYxLjIyNkEuMzIyLjMyMiwwLDAsMSwxMy44LDI3LjJaTTEyLjU3LDI1LjU0N2EuMTA4LjEwOCwwLDAsMC0uMTA3LjEwN3YxLjIyNmEuMTA4LjEwOCwwLDAsMCwuMTA3LjEwN0gxMy44YS4xMDguMTA4LDAsMCwwLC4xMDctLjEwN1YyNS42NTVhLjEwOC4xMDgsMCwwLDAtLjEwNy0uMTA3WlxcXCIvPjxyZWN0IHg9XFxcIjE4LjI5MVxcXCIgeT1cXFwiMjUuMzQzXFxcIiB3aWR0aD1cXFwiMS42NTZcXFwiIGhlaWdodD1cXFwiMS42NTZcXFwiIHJ4PVxcXCIwLjIxNVxcXCIgcnk9XFxcIjAuMjE1XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2UpXFxcIi8+PHBhdGggZD1cXFwiTTE5LjczMiwyNy4xMDZIMTguNTA1YS4zMjIuMzIyLDAsMCwxLS4zMjItLjMyMlYyNS41NThhLjMyMi4zMjIsMCwwLDEsLjMyMi0uMzIyaDEuMjI2YS4zMjIuMzIyLDAsMCwxLC4zMjIuMzIydjEuMjI2QS4zMjIuMzIyLDAsMCwxLDE5LjczMiwyNy4xMDZabS0xLjIyNi0xLjY1NmEuMTA4LjEwOCwwLDAsMC0uMTA3LjEwN3YxLjIyNmEuMTA4LjEwOCwwLDAsMCwuMTA3LjEwN2gxLjIyNmEuMTA4LjEwOCwwLDAsMCwuMTA3LS4xMDdWMjUuNTU4YS4xMDguMTA4LDAsMCwwLS4xMDctLjEwN1pcXFwiLz48cmVjdCB4PVxcXCIyNC40NFxcXCIgeT1cXFwiMjUuMzQzXFxcIiB3aWR0aD1cXFwiMS42NTZcXFwiIGhlaWdodD1cXFwiMS42NTZcXFwiIHJ4PVxcXCIwLjIxNVxcXCIgcnk9XFxcIjAuMjE1XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2YpXFxcIi8+PHBhdGggZD1cXFwiTTI1Ljg4MSwyNy4xMDZIMjQuNjU1YS4zMjIuMzIyLDAsMCwxLS4zMjItLjMyMlYyNS41NThhLjMyMi4zMjIsMCwwLDEsLjMyMi0uMzIyaDEuMjI2YS4zMjIuMzIyLDAsMCwxLC4zMjIuMzIydjEuMjI2QS4zMjIuMzIyLDAsMCwxLDI1Ljg4MSwyNy4xMDZabS0xLjIyNi0xLjY1NmEuMTA4LjEwOCwwLDAsMC0uMTA3LjEwN3YxLjIyNmEuMTA4LjEwOCwwLDAsMCwuMTA3LjEwN2gxLjIyNmEuMTA4LjEwOCwwLDAsMCwuMTA3LS4xMDdWMjUuNTU4YS4xMDguMTA4LDAsMCwwLS4xMDctLjEwN1pcXFwiLz48cGF0aCBkPVxcXCJNMjcuMjE1LDExLjIzYy0uMDUyLjA2OS0uNDE3LS4yNjItLjY1My0uNTI2YTQuNDA4LDQuNDA4LDAsMCwxLS41MTYtLjczQTIuNiwyLjYsMCwwLDEsMjUuNyw5LjJhMi4zNTgsMi4zNTgsMCwwLDEtLjA1Mi0uNjgyLDIuOTU5LDIuOTU5LDAsMCwxLC4xMjktLjc0OSwzLjE0MiwzLjE0MiwwLDAsMSwuNzg3LTEuMjA3LDE1LjUzMiwxNS41MzIsMCwwLDAsMS4yODMtMS40LDMuMDYyLDMuMDYyLDAsMCwwLC40NzktLjkyNywzLjk3OSwzLjk3OSwwLDAsMCwuMTUxLS44NTVjLjAxOS0uMzY0LS4wMjUtLjU5My4wMjMtLjYxM3MuMjE1LjI3NC4yODcuNTY0YTMuMTY3LDMuMTY3LDAsMCwxLS40NTgsMi4xLDYuOSw2LjksMCwwLDEtMS4wOTQsMS40NDgsMi44LDIuOCwwLDAsMC0uODQ5LDEuMjM0QTIuNDY2LDIuNDY2LDAsMCwwLDI2LjMsOC44YTMuNDY1LDMuNDY1LDAsMCwwLC40NzYsMS41NDJDMjcuMDY0LDEwLjkxNCwyNy4yNTYsMTEuMTc1LDI3LjIxNSwxMS4yM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYTJkMmVcXFwiLz48cGF0aCBkPVxcXCJNMjcuMTkzLDExLjI2NmMtLjEyNCwwLS40OTItLjM2NS0uNjUxLS41NDRhNC40NzgsNC40NzgsMCwwLDEtLjUyLS43MzQsMi42MjgsMi42MjgsMCwwLDEtLjM0Ni0uNzgxLDIuMzc1LDIuMzc1LDAsMCwxLS4wNTMtLjY5LDIuOTc4LDIuOTc4LDAsMCwxLC4xMy0uNzU2LDMuMjA4LDMuMjA4LDAsMCwxLC43OTMtMS4yMTZjLjI5NC0uMzMxLjUtLjUyOC42NTktLjY4NmE0LjM5Myw0LjM5MywwLDAsMCwuNjIyLS43MTEsMy4wNTIsMy4wNTIsMCwwLDAsLjQ3Ni0uOTE5LDMuOTUxLDMuOTUxLDAsMCwwLC4xNS0uODQ5Yy4wMDgtLjE1OSwwLS4yOTQsMC0uMzkzLDAtLjE1OS0uMDA2LS4yMjUuMDM4LS4yNDNhLjA1LjA1LDAsMCwxLC4wNDMsMCwxLjIyNiwxLjIyNiwwLDAsMSwuMjguNTc5LDMuMTY3LDMuMTY3LDAsMCwxLS40NiwyLjEyMSw2LjkyOCw2LjkyOCwwLDAsMS0xLjEsMS40NTNjLS4wNTUuMDYtLjEwOS4xMTYtLjE2Mi4xNzFhMi4zLDIuMywwLDAsMC0uNjgxLDEuMDUyLDIuNDcsMi40NywwLDAsMC0uMDgyLjY3MywzLjQ1OCwzLjQ1OCwwLDAsMCwuNDczLDEuNTNjLjExNC4yMzEuMjE1LjQxNS4yODkuNTQ5LjEyOS4yMzUuMTc4LjMyMy4xNDIuMzY5aDBhLjA1MS4wNTEsMCwwLDEtLjA0LjAyWk0yOC41MTIsMi44YS44NjMuODYzLDAsMCwwLDAsLjE5YzAsLjEuMDA3LjIzNiwwLC40YTQuMDIxLDQuMDIxLDAsMCwxLS4xNTIuODYxLDMuMTA2LDMuMTA2LDAsMCwxLS40ODMuOTM0LDQuNDM3LDQuNDM3LDAsMCwxLS42MjkuNzE5Yy0uMTYyLjE1OC0uMzY0LjM1NC0uNjU3LjY4M2EzLjE2OCwzLjE2OCwwLDAsMC0uNzgyLDEuMiwyLjkzMywyLjkzMywwLDAsMC0uMTI4Ljc0MywyLjMyNSwyLjMyNSwwLDAsMCwuMDUyLjY3NSwyLjU5LDIuNTksMCwwLDAsLjM0MS43NjcsNC40MjIsNC40MjIsMCwwLDAsLjUxMy43MjUsMi4wMzUsMi4wMzUsMCwwLDAsLjYxMS41MjYsMS4xODMsMS4xODMsMCwwLDAtLjE0Ny0uMzFjLS4wNzQtLjEzNC0uMTc1LS4zMTgtLjI5LS41NTFBMy41LDMuNSwwLDAsMSwyNi4yNzgsOC44YTIuNTMsMi41MywwLDAsMSwuMDg0LS42ODgsMi4zNzUsMi4zNzUsMCwwLDEsLjY5NC0xLjA3NWMuMDUyLS4wNTUuMTA2LS4xMTEuMTYxLS4xNzFhNi44NzksNi44NzksMCwwLDAsMS4wOS0xLjQ0MiwzLjExOSwzLjExOSwwLDAsMCwuNDU2LTIuMDgzQTEuMjgxLDEuMjgxLDAsMCwwLDI4LjUxMiwyLjhaXFxcIi8+PHBhdGggZD1cXFwiTTI5Ljk3Miw2LjA4N2MtLjAxOS0uMDg4LS40MzItLjA0LS43NjYuMDczYTIuNiwyLjYsMCwwLDAtMS4wNTkuNzIyLDIuOCwyLjgsMCwwLDAtLjkxNiwxLjg1NSwyLjk3MiwyLjk3MiwwLDAsMCwuMjU4LDEuMDZjLjIyMS41NzIuNDU1Ljc3My40NDQsMS4yMjUtLjAwNy4zLS4xMTQuNDg0LS4wNDguNTQ5cy4zMTQtLjEuNDYyLS4zMTNhMS44LDEuOCwwLDAsMCwuMjU5LTEuMDIyYy0uMDQ2LS44MTUtLjYtMS4wMTUtLjYwOC0xLjhhMS44NTgsMS44NTgsMCwwLDEsLjEyOS0uNjc2QzI4LjU3LDYuNTA5LDMwLjAwOCw2LjI1MiwyOS45NzIsNi4wODdaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWEyZDJlXFxcIi8+PHBhdGggZD1cXFwiTTI3LjkzNCwxMS42MTdhLjA5NC4wOTQsMCwwLDEtLjA2OS0uMDI2Yy0uMDQ2LS4wNDYtLjAzLS4xMjItLjAwNS0uMjM3YTEuNzE4LDEuNzE4LDAsMCwwLC4wNDUtLjMzMSwxLjM3NCwxLjM3NCwwLDAsMC0uMjE0LS43Miw1LDUsMCwwLDEtLjIyOC0uNDk1LDIuOTgsMi45OCwwLDAsMS0uMjU5LTEuMDcsMi44MSwyLjgxLDAsMCwxLC45MjMtMS44NzQsMi42NCwyLjY0LDAsMCwxLDEuMDctLjcyOSwxLjQ4MiwxLjQ4MiwwLDAsMSwuNzY2LS4xQS4wNjUuMDY1LDAsMCwxLDMwLDYuMDgxaDBjLjAxNS4wNy0uMDkyLjEyMS0uMzA2LjIyNGEyLjczLDIuNzMsMCwwLDAtMS41NDIsMS40NjMsMS44MjcsMS44MjcsMCwwLDAtLjEyNy42NjcsMS42NDUsMS42NDUsMCwwLDAsLjI5MS44ODUsMS44ODksMS44ODksMCwwLDEsLjMxNy45MTQsMS44MTQsMS44MTQsMCwwLDEtLjI2NCwxLjAzOS44MDkuODA5LDAsMCwxLS40MjEuMzQyWm0xLjg4OS01LjU0OWEyLjExNywyLjExNywwLDAsMC0uNjA4LjExNywyLjU4OCwyLjU4OCwwLDAsMC0xLjA0OC43MTUsMi43NjQsMi43NjQsMCwwLDAtLjkwOSwxLjgzNywyLjkzNSwyLjkzNSwwLDAsMCwuMjU2LDEuMDUsNC45NTUsNC45NTUsMCwwLDAsLjIyNS40OSwxLjQzMywxLjQzMywwLDAsMSwuMjIuNzQ1LDEuNzY1LDEuNzY1LDAsMCwxLS4wNDcuMzQxYy0uMDE5LjA5MS0uMDM1LjE2My0uMDA5LjE4OGEuMDQ2LjA0NiwwLDAsMCwuMDM4LjAxLjc2OS43NjksMCwwLDAsLjM4Mi0uMzIsMS43OTMsMS43OTMsMCwwLDAsLjI1NC0xLjAwNSwxLjg0NCwxLjg0NCwwLDAsMC0uMzEtLjg5LDEuNzExLDEuNzExLDAsMCwxLS4zLS45MTEsMS44NzcsMS44NzcsMCwwLDEsLjEzLS42ODZBMi43NzYsMi43NzYsMCwwLDEsMjkuNjcsNi4yNTdjLjEyNi0uMDYxLjI4My0uMTM2LjI3Ny0uMTY0bC0uMDA4LS4wMDdBLjI2NC4yNjQsMCwwLDAsMjkuODIzLDYuMDY4WlxcXCIvPlwiLFxuXHRcIlBvd2VyUXVlcnlcIjogXCI8cGF0aCBkPVxcXCJNMzAsMjUuNTgzSDI1Ljc1N1YxNS4zNzhhOC4yNzEsOC4yNzEsMCwwLDAtLjgzMi00LjI2MUEzLjA2MSwzLjA2MSwwLDAsMCwyMi4xMTgsOS44YTMuMzgzLDMuMzgzLDAsMCwwLTIuODI2LDEuNjY0LDYuNzkxLDYuNzkxLDAsMCwwLTEuMTYxLDMuOTg3VjI1LjU4M0gxMy44NjlWMTUuMDMxcTAtNS4yMzEtMy42OTQtNS4yMzFhMy4zMzIsMy4zMzIsMCwwLDAtMi44MjYsMS41NzMsNi45MzUsNi45MzUsMCwwLDAtMS4xMDYsNC4wNzhWMjUuNTgzSDJWNi44NTZINi4yNDNWOS44MThoLjA3M2E2LjQ4OCw2LjQ4OCwwLDAsMSw1LjkwNy0zLjQsNS41NjksNS41NjksMCwwLDEsMy4zOTMsMS4wN0E1LjMyOCw1LjMyOCwwLDAsMSwxNy42LDEwLjI5NGE2LjY4Myw2LjY4MywwLDAsMSw2LjIxOC0zLjg3N1EzMCw2LjQxNywzMCwxNC4wNDNaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2ZjZmNmXFxcIi8+XCIsXG5cdFwiUG93ZXJTaGVsbFwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjIzLjMyNVxcXCIgeTE9XFxcIi0xMTguNTQzXFxcIiB4Mj1cXFwiNy4yNlxcXCIgeTI9XFxcIi0xMDQuMTkzXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEsIDAsIDAsIC0xLCAwLCAtOTYpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNTM5MWZlXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjM2U2ZGJmXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCI3LjFcXFwiIHkxPVxcXCItMTA0LjAwMlxcXCIgeDI9XFxcIjIzLjAwMVxcXCIgeTI9XFxcIi0xMTguMjkyXFxcIiB4bGluazpocmVmPVxcXCIjYVxcXCIvPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3Bvd2Vyc2hlbGw8L3RpdGxlPjxwYXRoIGQ9XFxcIk0zLjE3NCwyNi41ODlhMS4xNTQsMS4xNTQsMCwwLDEtLjkyOC0uNDIzLDEuMjM0LDEuMjM0LDAsMCwxLS4yMS0xLjA1Mkw2LjIzMyw2Ljc4QTEuOCwxLjgsMCwwLDEsNy45MTQsNS40MUgyOC44MjZhMS4xNTcsMS4xNTcsMCwwLDEsLjkyOC40MjMsMS4yMzUsMS4yMzUsMCwwLDEsLjIxLDEuMDUybC00LjIsMTguMzM1YTEuOCwxLjgsMCwwLDEtMS42ODEsMS4zN0gzLjE3NFpcXFwiIHN0eWxlPVxcXCJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNNy45MTQsNS42NDZIMjguODI2YS45MTMuOTEzLDAsMCwxLC45MDgsMS4xODdsLTQuMiwxOC4zMzRhMS41NzUsMS41NzUsMCwwLDEtMS40NTEsMS4xODdIMy4xNzRhLjkxMy45MTMsMCwwLDEtLjkwOC0xLjE4N2w0LjItMTguMzM0QTEuNTc0LDEuNTc0LDAsMCwxLDcuOTE0LDUuNjQ2WlxcXCIgc3R5bGU9XFxcImZpbGwtcnVsZTpldmVub2RkO2ZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wNCwyMS41NDRoNS4wODZhMS4xMTgsMS4xMTgsMCwwLDEsMCwyLjIzNEgxNi4wNGExLjExOCwxLjExOCwwLDAsMSwwLTIuMjM0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzJjNTU5MTtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4zMzksMTYuNTc4YTEuNzYyLDEuNzYyLDAsMCwxLS41OTEuNkw5LjMwOSwyMy45NTNhMS4yMjQsMS4yMjQsMCwwLDEtMS40MzgtMS45NzdsOC41MTItNi4xNjR2LS4xMjZMMTEuMDM1LDEwYTEuMjI0LDEuMjI0LDAsMCwxLDEuNzgyLTEuNjcybDYuNDE4LDYuODI3QTEuMTY2LDEuMTY2LDAsMCwxLDE5LjMzOSwxNi41NzhaXFxcIiBzdHlsZT1cXFwiZmlsbDojMmM1NTkxO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTE5LjEsMTYuMzQyYTEuNzQ5LDEuNzQ5LDAsMCwxLS41OS42TDkuMDc0LDIzLjcxOGExLjIyNSwxLjIyNSwwLDAsMS0xLjQzOS0xLjk3N2w4LjUxMy02LjE2NFYxNS40NUwxMC44LDkuNzYxYTEuMjI0LDEuMjI0LDAsMCwxLDEuNzgzLTEuNjcyTDE5LDE0LjkxNkExLjE2MiwxLjE2MiwwLDAsMSwxOS4xLDE2LjM0MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTUuOSwyMS40MTJoNS4wODZhMS4wNTksMS4wNTksMCwxLDEsMCwyLjExOEgxNS45YTEuMDU5LDEuMDU5LDAsMSwxLDAtMi4xMThaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+XCIsICBcblx0XCJQcm9jZXNzaW5nXCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiMTZcXFwiIHkxPVxcXCIzXFxcIiB4Mj1cXFwiMTZcXFwiIHkyPVxcXCIyOVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzFjNGM3MFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzBjMmI0MlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfcHJvY2Vzc2luZ2xhbmc8L3RpdGxlPjxwYXRoIGQ9XFxcIk0xNS45MjIsMTkuOTYyYTEzLDEzLDAsMCwxLTEuNjQ3LS4wNzd2NS41NTJhMjcuNzYsMjcuNzYsMCwwLDEsMy4zMzIuNDYxVjI5SDUuOTY4VjI1LjlBMjcuOTg4LDI3Ljk4OCwwLDAsMSw5LjMsMjUuNDM4VjYuNzE1YTI4LjIxNSwyOC4yMTUsMCwwLDEtMy4zMzEtLjQ2di0zLjFIOC45NTVDMTAuMTgsMy4xNTMsMTMuNTQ5LDMsMTYuMjMsM2M2LjMxOCwwLDkuOCwyLjk0OCw5LjgsOEMyNi4wMzEsMTYuMDE4LDIyLjIsMTkuOTYyLDE1LjkyMiwxOS45NjJaTTE2LDcuMDU4Yy0uNjEzLDAtMS4xNDksMC0xLjcyMy4wMzh2OC42MTVhOS42OTQsOS42OTQsMCwwLDAsMS40NTUuMTE1YzMuMDI1LS4wMzgsNS4xMy0xLjcyMyw1LjEzLTQuNTE5QzIwLjg2Miw4LjcsMTkuNDA3LDcuMDU4LDE2LDcuMDU4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPlwiLFxuXHRcIlByb2xvZ1wiOiBcIjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiYVxcXCIgY3g9XFxcIjEzNDEuMjVcXFwiIGN5PVxcXCItMzM5Ni44NjZcXFwiIHI9XFxcIjE4LjI5OVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMTMyNy4wNzcgMzQwNS45MzUpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjE4MVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZiZmJmYlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zNjVcXFwiIHN0b3AtY29sb3I9XFxcIiNlZmVmZjBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTUyXFxcIiBzdG9wLWNvbG9yPVxcXCIjZGFkYmRjXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjczOFxcXCIgc3RvcC1jb2xvcj1cXFwiI2JlYmZjMlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC44MjRcXFwiIHN0b3AtY29sb3I9XFxcIiNhZWIwYjNcXFwiLz48L3JhZGlhbEdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiYlxcXCIgY3g9XFxcIjYuNjc4XFxcIiBjeT1cXFwiODQuNzRcXFwiIHI9XFxcIjE1LjU1NFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMS44ODQgLTg2LjE1NCkgc2NhbGUoMS4wNzIgMS4xNjYpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmFmZGZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjA3OVxcXCIgc3RvcC1jb2xvcj1cXFwiI2VlZjVmYVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yMlxcXCIgc3RvcC1jb2xvcj1cXFwiI2NmZGZlY1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40MDdcXFwiIHN0b3AtY29sb3I9XFxcIiM5ZGJiZDVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNjMxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNTg4YWI1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjc0NVxcXCIgc3RvcC1jb2xvcj1cXFwiIzMyNmZhNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43OTlcXFwiIHN0b3AtY29sb3I9XFxcIiMyYjY2OThcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuODk3XFxcIiBzdG9wLWNvbG9yPVxcXCIjMTc0ZTc4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5NFxcXCIgc3RvcC1jb2xvcj1cXFwiIzAwMzE1MlxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJjXFxcIiBjeD1cXFwiMTEuMjQxXFxcIiBjeT1cXFwiLTkuODk3XFxcIiByPVxcXCIxNi41OTRcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMCAyMi42MzEpIHNjYWxlKDEgMS4wNjIpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZkNTQwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjY2N1xcXCIgc3RvcC1jb2xvcj1cXFwiI2VjMWMyNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45OTRcXFwiIHN0b3AtY29sb3I9XFxcIiM3NjAwMDBcXFwiLz48L3JhZGlhbEdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiZFxcXCIgY3g9XFxcIjEyLjI4NlxcXCIgY3k9XFxcIjI2LjEyN1xcXCIgcj1cXFwiMi4wODNcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNkZGRmZTBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMTc0XFxcIiBzdG9wLWNvbG9yPVxcXCIjZDlkYmRjXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjM1MVxcXCIgc3RvcC1jb2xvcj1cXFwiI2NkY2ZkMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41MzFcXFwiIHN0b3AtY29sb3I9XFxcIiNiOGJhYmJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzExXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWM5ZTlmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjg5MVxcXCIgc3RvcC1jb2xvcj1cXFwiIzc4Nzk3YlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzVlNWY2MVxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJlXFxcIiBjeD1cXFwiMTkuMDY0XFxcIiBjeT1cXFwiMjYuMTI3XFxcIiByPVxcXCIyLjA4M1xcXCIgeGxpbms6aHJlZj1cXFwiI2RcXFwiLz48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImZcXFwiIGN4PVxcXCIxNS40MzRcXFwiIGN5PVxcXCIxNi4xOTFcXFwiIHI9XFxcIjIuNjg3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDAgMC40NjEpXFxcIiB4bGluazpocmVmPVxcXCIjZFxcXCIvPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3Byb2xvZzwvdGl0bGU+PGcgc3R5bGU9XFxcImlzb2xhdGlvbjppc29sYXRlXFxcIj48Y2lyY2xlIGN4PVxcXCIxNlxcXCIgY3k9XFxcIjE2XFxcIiByPVxcXCIxNFxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTYuNjAyIDE0LjkyKSByb3RhdGUoLTQyLjI2NSlcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMTkuOTM4LDYuMzA5YTkuNzg1LDkuNzg1LDAsMCwwLTYuNS0yLjMzOUM4LjU2NCwzLjk3LDMuNzc0LDcuNywzLjQwNSwxNC45NjFjLS40LDcuOCw0Ljc1LDEyLjg2MiwxMiwxMi44NjIsMTAuNzMzLDAsMTYuNjcyLTkuNzgsMTAuMDI3LTIwLjM4OCw0LjY3MSwxMC42LS41MjcsMTcuMjc5LTcuMjM2LDE3LjI3OS01LjQ0MSwwLTkuNjEtMy42NTEtOS42MS0xMC4zNDVDOC41ODIsNC43MDksMTUuODIzLDQuMDM5LDE5LjkzOCw2LjMwOVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNMjIuNywxMC40MTVjLS4yOTMtLjk0LS42NDUtMi43ODguNjM0LTMuODZhMy43MjksMy43MjksMCwwLDAtMy44NDQsMS41MzRBOS4xNjUsOS4xNjUsMCwwLDAsMTIsOC4xLDMuNzI5LDMuNzI5LDAsMCwwLDguMTUyLDYuNTU1YzEuMzA5LDEuMS45MSwzLjAwNS42MTQsMy45MjNBMTAuNTE3LDEwLjUxNywwLDAsMCw2LjEsMTcuNTI0YzAsMi4xNzQsMS40LDQuNjQ1LDEuNjc1LDcuOTU1bDEuNzY4LTEuNTMyYTExLjc0MywxMS43NDMsMCwwLDAsNi4yMTIsMS40MzMsMTEuNzQxLDExLjc0MSwwLDAsMCw2LjIxMi0xLjQzM2wxLjc2OSwxLjUzMmMuMjgtMy4zMSwxLjY3NS01Ljc4MSwxLjY3NS03Ljk1NUExMC41MTIsMTAuNTEyLDAsMCwwLDIyLjcsMTAuNDE1WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC43MjIsMjcuODY3YTEuNjIxLDEuNjIxLDAsMSwxLDMuMjQsMGMwLC4wMTgsMCwuMDM1LDAsLjA1M2EyLjIzNCwyLjIzNCwwLDEsMC0zLjIyOC4xMjZDMTAuNzI1LDI3Ljk4NywxMC43MjIsMjcuOTI3LDEwLjcyMiwyNy44NjdaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2QpXFxcIi8+PHBhdGggZD1cXFwiTTIwLjYyOSwyNy44NjdhMS42MjEsMS42MjEsMCwxLDAtMy4yNCwwYzAsLjAxOCwwLC4wMzUsMCwuMDUzYTIuMjM0LDIuMjM0LDAsMSwxLDMuMjI4LjEyNkExLjY3OCwxLjY3OCwwLDAsMCwyMC42MjksMjcuODY3WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNlKVxcXCIvPjxnIHN0eWxlPVxcXCJvcGFjaXR5OjAuNTM7bWl4LWJsZW5kLW1vZGU6bXVsdGlwbHlcXFwiPjxwYXRoIGQ9XFxcIk04LjM0NiwxOC40Yy0uMTMyLjY2Ny0uOTcxLjg3Ny0uOTcxLjg3N0ExLjM1OSwxLjM1OSwwLDAsMSw2LjgwOSwxOC4xYTIuOTI5LDIuOTI5LDAsMCwwLC40NDMsMS43OTNBMi45MjcsMi45MjcsMCwwLDAsOC4zNDYsMTguNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNMTAuMDA4LDE4LjczN2MtLjEzMi42NjctLjk3Mi44NzctLjk3Mi44NzdhMS4zNiwxLjM2LDAsMCwxLS41NjYtMS4xODIsMi45MjksMi45MjksMCwwLDAsLjQ0NCwxLjc5M0EyLjkyNiwyLjkyNiwwLDAsMCwxMC4wMDgsMTguNzM3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjxwYXRoIGQ9XFxcIk04LjgzMywyMC4yNDljLS4xMzIuNjY3LS45NzEuODc3LS45NzEuODc3QTEuMzU5LDEuMzU5LDAsMCwxLDcuMywxOS45NDRhMi45MjksMi45MjksMCwwLDAsLjQ0MywxLjc5M0EyLjkyNSwyLjkyNSwwLDAsMCw4LjgzMywyMC4yNDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PHBhdGggZD1cXFwiTTEwLjUsMjAuNTgzYy0uMTMyLjY2Ny0uOTcxLjg3Ny0uOTcxLjg3N2ExLjM2LDEuMzYsMCwwLDEtLjU2Ni0xLjE4MkEyLjkyOSwyLjkyOSwwLDAsMCw5LjQsMjIuMDcyLDIuOTI3LDIuOTI3LDAsMCwwLDEwLjUsMjAuNTgzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjxwYXRoIGQ9XFxcIk05LjMyOCwyMi4xMjFjLS4xMzIuNjY3LS45NzIuODc3LS45NzIuODc3YTEuMzYsMS4zNiwwLDAsMS0uNTY1LTEuMTgyLDIuOTI5LDIuOTI5LDAsMCwwLC40NDMsMS43OTNBMi45MjYsMi45MjYsMCwwLDAsOS4zMjgsMjIuMTIxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjxwYXRoIGQ9XFxcIk0xMS42NjQsMTkuMDdjLS4xMzIuNjY3LS45NzIuODc3LS45NzIuODc3YTEuMzU5LDEuMzU5LDAsMCwxLS41NjUtMS4xODIsMi45MywyLjkzLDAsMCwwLC40NDMsMS43OTNBMi45MjcsMi45MjcsMCwwLDAsMTEuNjY0LDE5LjA3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjwvZz48ZyBzdHlsZT1cXFwib3BhY2l0eTowLjUzO21peC1ibGVuZC1tb2RlOm11bHRpcGx5XFxcIj48cGF0aCBkPVxcXCJNMjMuMTU3LDE4LjRjLjEzMi42NjcuOTcxLjg3Ny45NzEuODc3YTEuMzU5LDEuMzU5LDAsMCwwLC41NjYtMS4xODIsMi45MywyLjkzLDAsMCwxLS40NDMsMS43OTNBMi45MjcsMi45MjcsMCwwLDEsMjMuMTU3LDE4LjRaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PHBhdGggZD1cXFwiTTIxLjQ5NSwxOC43MzdjLjEzMi42NjcuOTcyLjg3Ny45NzIuODc3YTEuMzYsMS4zNiwwLDAsMCwuNTY1LTEuMTgyLDIuOTMxLDIuOTMxLDAsMCwxLS40NDQsMS43OTNBMi45MjYsMi45MjYsMCwwLDEsMjEuNDk1LDE4LjczN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNMjIuNjY5LDIwLjI0OWMuMTMyLjY2Ny45NzEuODc3Ljk3MS44NzdhMS4zNiwxLjM2LDAsMCwwLC41NjYtMS4xODIsMi45MjksMi45MjksMCwwLDEtLjQ0MywxLjc5M0EyLjkyNiwyLjkyNiwwLDAsMSwyMi42NjksMjAuMjQ5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjxwYXRoIGQ9XFxcIk0yMS4wMDgsMjAuNTgzYy4xMzIuNjY3Ljk3MS44NzcuOTcxLjg3N2ExLjM1OSwxLjM1OSwwLDAsMCwuNTY1LTEuMTgyLDIuOTI4LDIuOTI4LDAsMCwxLS40NDMsMS43OTNBMi45MjcsMi45MjcsMCwwLDEsMjEuMDA4LDIwLjU4M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNMjIuMTc1LDIyLjEyMWMuMTMyLjY2Ny45NzIuODc3Ljk3Mi44NzdhMS4zNiwxLjM2LDAsMCwwLC41NjUtMS4xODIsMi45MjgsMi45MjgsMCwwLDEtLjQ0NCwxLjc5M0EyLjkyNywyLjkyNywwLDAsMSwyMi4xNzUsMjIuMTIxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS44MzgsMTkuMDdjLjEzMi42NjcuOTcyLjg3Ny45NzIuODc3YTEuMzU5LDEuMzU5LDAsMCwwLC41NjUtMS4xODIsMi45MjgsMi45MjgsMCwwLDEtLjQ0MywxLjc5M0EyLjkyOCwyLjkyOCwwLDAsMSwxOS44MzgsMTkuMDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PC9nPjxjaXJjbGUgY3g9XFxcIjExLjMzOVxcXCIgY3k9XFxcIjE0LjA3NFxcXCIgcj1cXFwiMy44MTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48Y2lyY2xlIGN4PVxcXCIxMi4xM1xcXCIgY3k9XFxcIjE0LjQ0NlxcXCIgcj1cXFwiMS44NjFcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZGJmYzFcXFwiLz48Y2lyY2xlIGN4PVxcXCIxMi4xM1xcXCIgY3k9XFxcIjE0LjQ0NlxcXCIgcj1cXFwiMS4xOTFcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48Y2lyY2xlIGN4PVxcXCIxMS42MDNcXFwiIGN5PVxcXCIxNC4wMjdcXFwiIHI9XFxcIjAuMzU3XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PGNpcmNsZSBjeD1cXFwiMjAuMTEyXFxcIiBjeT1cXFwiMTQuMDc0XFxcIiByPVxcXCIzLjgxNlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxjaXJjbGUgY3g9XFxcIjIwLjkwM1xcXCIgY3k9XFxcIjE0LjQ0NlxcXCIgcj1cXFwiMS44NjFcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZGJmYzFcXFwiLz48Y2lyY2xlIGN4PVxcXCIyMC45MDNcXFwiIGN5PVxcXCIxNC40NDZcXFwiIHI9XFxcIjEuMTkxXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PGNpcmNsZSBjeD1cXFwiMjAuMzc1XFxcIiBjeT1cXFwiMTQuMDI3XFxcIiByPVxcXCIwLjM1N1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNS43MDYsMjEuNTJjMC0xLjQxMiwyLjE1Ny0zLjQxMywyLjE1Ny00Ljg4N2EyLjE1NywyLjE1NywwLDAsMC00LjMxMywwQzEzLjU1LDE4LjEwNywxNS43MDYsMjAuMTA4LDE1LjcwNiwyMS41MlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZilcXFwiLz48L2c+XCIsXG5cdFwiUHJvdG9jb2wgQnVmZmVyc1wiOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiMTUuOTk2IDMuMjIgMjYuOTY2IDkuNyAyNi45NTQgMjIuMyAxNiAyOC43OCA1LjAzOCAyMi40MDggNS4wMzQgOS42MjggMTUuOTk2IDMuMjJcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTYsMiwzLjk4Nyw5LjAybDAsMTRMMTYsMzBsMTItNy4xLjAxMy0xMy44Wk0yNi45NTQsMjIuMywxNiwyOC43OCw1LjAzOCwyMi40MDhsMC0xMi43OEwxNiwzLjIyLDI2Ljk2Niw5LjdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMTcxYzFlXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNS41NjkgMTMuNjU0IDE5Ljk0NiAxNi45NjQgMTkuOTQzIDI0Ljg5IDI1LjU5IDIxLjU2NSAyNS41NjkgMTMuNjU0XFxcIiBzdHlsZT1cXFwiZmlsbDojMWVhOGZmXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMy4yODIgMTIuMzAzIDI1LjU2OSAxMy42NTQgMTkuOTQ2IDE2Ljk2NCAxOS45NDMgMjQuODkgMTcuMzI3IDIzLjM3IDE3LjM0OCAxNS44NzUgMjMuMjgyIDEyLjMwM1xcXCIgc3R5bGU9XFxcImZpbGw6IzUwYmZmZlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjIuNTEyIDEwLjM1IDIyLjUxNCAxMS44MTYgMTYuNDExIDE1LjQ5OCAxNi40MTggMjMuNTk3IDE0Ljk5OCAyNC40MzEgMTQuOTk0IDE0Ljg1NiAyMi41MTIgMTAuMzVcXFwiIHN0eWxlPVxcXCJmaWxsOiM5N2ZmMjdcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIwLjAwOCA4Ljg3MSAyMi41MTIgMTAuMzUgMTQuOTk0IDE0Ljg1NiAxNC45OTggMjQuNDMxIDEyLjE5NCAyMi44MDEgMTIuMTg5IDEzLjQxMyAyMC4wMDggOC44NzFcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmZmNzJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE5LjIyNiA2LjYwNiAxOS4yMjYgOC4zNzQgMTEuMjEgMTMuMDc0IDExLjIxIDIzLjE3MiA5LjgwOCAyMy45ODggOS44MzUgMTIuMjc3IDE5LjIyNiA2LjYwNlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmMjc0YlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTYuMTYgNC43ODQgNi41MyAxMC4zOTQgNi41MjkgMjIuMDcxIDkuODI3IDIzLjk4OCA5LjgzNSAxMi4yNzcgMTkuMjM1IDYuNjA2IDE2LjE2IDQuNzg0XFxcIiBzdHlsZT1cXFwiZmlsbDojZmY1Yzc3XFxcIi8+XCIsXG5cdFwiUHVnXCI6IFwiPHBhdGggZD1cXFwiTTI1LjUxNCwxMi44NDZjLS4wNTItLjkzOC4yMDktMS44MjUtLjIwOS0yLjU1NC0xLjA0My0xLjgyNS0zLjY0OS0yLjg2Ny04Ljg2My0yLjg2N1Y3LjM3Mmgwdi4wNTJjLTUuNzM1LDAtOC4xODUsMS4wNDMtOS4yMjcsMi44NjdhNS42LDUuNiwwLDAsMC0uNDY5LDIuNTU0LDkuNTQ2LDkuNTQ2LDAsMCwwLS4yNjEsMi40NWMuMTU2LDEuMTQ3LjI2MSwyLjI5NC40MTcsMy4zMzYuMTU2Ljg4NiwxLjQwOCwxLjU2NCwxLjU2NCwyLjQuMzEzLDIuMjQyLDIuMjk0LDMuMjg0LDguMDI4LDMuMjg0di4yNjFoLS4xdi0uMjYxYzUuMjEzLDAsNy40LTEuMDQzLDcuNzE2LTMuMjg0LjEtLjgzNCwxLjE0Ny0xLjUxMiwxLjMtMi40LjE1Ni0xLjA0My4yMDktMi4xOS4zNjUtMy4zMzZBMTEuNzc0LDExLjc3NCwwLDAsMCwyNS41MTQsMTIuODQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VmY2NhM1xcXCIvPjxwYXRoIGQ9XFxcIk0xNi4xODIsMTMuNjhhMy4yNDEsMy4yNDEsMCwwLDEsMi4xOSwxLjE0N2MuNzMuNjI2LDEuOTI5LDEuMDQzLDIuNDUsMS42MTZhNC43MTUsNC43MTUsMCwwLDEsMS40MDgsMS45ODEsOC45LDguOSwwLDAsMSwuMzEzLDIuMjQyYzAsLjI2MS4xNTYuMjA5LjU3MywwYTkuMDIsOS4wMiwwLDAsMCwyLjE5LTEuODc3Yy0uMTU2Ljg4Ni0xLjI1MSwxLjY2OC0xLjM1NSwyLjUtLjMxMywyLjI0Mi0yLjUsMy4zMzYtNy44NzIsMy4zMzZoLjMxM1xcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS41MTksMTEuOTA4Yy4yMDkuNjc4Ljg4NiwzLjAyNC0uNDY5LDIuMjQyYTIuNTU3LDIuNTU3LDAsMCwxLC45MzgsMS41NjQsMS44MzEsMS44MzEsMCwwLDAsMS4zLDEuNDA4LDMuNDc5LDMuNDc5LDAsMCwwLDIuNTU0LS42MjYsMi45NTYsMi45NTYsMCwwLDAsLjY3OC0zLjI4NCwyLjQzLDIuNDMsMCwwLDAtMi4xMzctMS42MTZDMjEuNCwxMS4zMzQsMTkuMzEsMTEuMTI2LDE5LjUxOSwxMS45MDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2NhYzhkXFxcIi8+PGNpcmNsZSBjeD1cXFwiMjIuMTc4XFxcIiBjeT1cXFwiMTQuNDFcXFwiIHI9XFxcIjEuOTI5XFxcIi8+PGNpcmNsZSBjeD1cXFwiMjEuNjU2XFxcIiBjeT1cXFwiMTMuNTI0XFxcIiByPVxcXCIwLjUyMVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4yMDYsMTQuMzA2YTE3LjY4LDE3LjY4LDAsMCwxLDIuNzExLDIuMzQ2Yy45MzgsMS4yLjkzOCwxLjQwOC45MzgsMS40MDhsLS42NzguMzEzYTcuMSw3LjEsMCwwLDAtMi4xMzctMi41Yy0xLjItLjY3OC0xLjM1NS0xLjI1MS0xLjM1NS0xLjI1MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZmNjYTNcXFwiLz48cGF0aCBkPVxcXCJNMTYuMjM1LDEzLjY4YTMuNjA1LDMuNjA1LDAsMCwwLTIuMzQ2LDEuMTQ3Yy0uNzMuNjI2LTIuMDMzLDEuMDQzLTIuNSwxLjYxNmE0LjgwNiw0LjgwNiwwLDAsMC0xLjQ2LDEuOTgxLDguOSw4LjksMCwwLDAtLjMxMywyLjI0MmMwLC4yNjEuMDUyLjMxMy0uNjI2LDBBNy45NzIsNy45NzIsMCwwLDEsNi44LDE4Ljc4OWMuMTU2Ljg4NiwxLjI1MSwxLjY2OCwxLjM1NSwyLjUuMzEzLDIuMTksMi41LDMuMjg0LDcuODcyLDMuMjg0aC4zNjVcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMjEuMjM5LDE3LjI3N2E2LjU1Miw2LjU1MiwwLDAsMC01LjEwOS0yLjYwN2gwYTYuNjM4LDYuNjM4LDAsMCwwLTUuMTA5LDIuNjA3LDMuODYxLDMuODYxLDAsMCwwLTEuMDQzLDMuMThjMCw0LjY0LDEuNjE2LDMuMjMyLDIuNzExLDMuODA2YTcuNDY2LDcuNDY2LDAsMCwwLDMuMzg5LjMxM2gwYTcuNCw3LjQsMCwwLDAsMy4zODktLjMxM2MxLjA5NS0uNTczLDIuNzExLjgzNCwyLjcxMS0zLjgwNkEzLjM4NiwzLjM4NiwwLDAsMCwyMS4yMzksMTcuMjc3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzU2MzMyYlxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wMjYsMTUuOTc0YTkuNTQ5LDkuNTQ5LDAsMCwxLS40NjksMi41NTRsLjU3My0uMTU2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzQ0MjgyM1xcXCIvPjxwYXRoIGQ9XFxcIk0xNi4xODIsMTUuOTc0YTkuNTQ5LDkuNTQ5LDAsMCwwLC40NjksMi41NTRsLS41NzMtLjE1NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM0NDI4MjNcXFwiLz48cGF0aCBkPVxcXCJNMTQuMzU4LDE1LjQ1M2MtLjIwOS0uNTIxLjU3My0xLjM1NSwxLjgyNS0xLjM1NXMyLjAzMy44MzQsMS44MjUsMS4zNTUtMS4wNDMuNjc4LTEuODI1LjY3OEMxNS4zNDgsMTYuMTMsMTQuNTY2LDE1Ljk3NCwxNC4zNTgsMTUuNDUzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzU2MzMyYlxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4xODIsMTUuOTc0YzAtLjEuNzMtLjEsMS4xNDctLjM2NSwwLDAtLjgzNC4yNjEtLjk5MS4xNTZhLjY1Ni42NTYsMCwwLDEtLjIwOS0uMzY1LjY1Ni42NTYsMCwwLDEtLjIwOS4zNjVjLS4xNTYuMS0xLjA5NS0uMTU2LTEuMDk1LS4xNTZhOC4wNTgsOC4wNTgsMCwwLDEsMS4yLjM2NXYuNDE3YTEwLjQ5MiwxMC40OTIsMCwwLDAsLjEsMi4wMzNjLjE1Ni4yMDkuMS0xLjQ2LjEtMi4wMzNBMS4zLDEuMywwLDAsMSwxNi4xODIsMTUuOTc0WlxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4xODIsMTguOTQ1YTMuMzUsMy4zNSwwLDAsMSwxLjYxNi42NzgsMy4xMjEsMy4xMjEsMCwwLDAtMS42MTYtMS4wOTUsMy4wMzYsMy4wMzYsMCwwLDAtMS44MjUsMS4yQTMuMzEyLDMuMzEyLDAsMCwxLDE2LjE4MiwxOC45NDVaXFxcIiBzdHlsZT1cXFwiZmlsbDojN2Y0YTQxXFxcIi8+PHBhdGggZD1cXFwiTTE2LjA3OCwyMi44YTguOSw4LjksMCwwLDEtMi40LS40NjljLS4xNTYtLjA1Mi0uMzEzLjA1Mi0uNDY5LDBhNi4xNzIsNi4xNzIsMCwwLDEtMy4xOC0yLjEzN3YuMjA5YzAsNC42NCwxLjYxNiwzLjIzMiwyLjcxMSwzLjgwNmE3LjQ2Niw3LjQ2NiwwLDAsMCwzLjM4OS4zMTNoMGE3LjQsNy40LDAsMCwwLDMuMzg5LS4zMTNjMS4wOTUtLjU3MywyLjcxMS44MzQsMi43MTEtMy44MDZ2LS40NjlBNS45MTQsNS45MTQsMCwwLDEsMTksMjIuMjgyYy0uMTU2LjA1Mi0uNDE3LS4wNTItLjU3My0uMDUyQTcuMDQ1LDcuMDQ1LDAsMCwxLDE2LjA3OCwyMi44WlxcXCIgc3R5bGU9XFxcImZpbGw6IzQ0MjgyM1xcXCIvPjxwYXRoIGQ9XFxcIk0xMy45NDEsMjAuM3MtLjU3MywxLjY2OC0uMTU2LDIuNGwtLjUyMS0uMjA5QTE1LjQzMywxNS40MzMsMCwwLDEsMTMuOTQxLDIwLjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojNDQyODIzXFxcIi8+PHBhdGggZD1cXFwiTTE4LjMyLDIwLjNzLjU3MywxLjY2OC4xNTYsMi40TDE5LDIyLjQ5MUExMC42MjksMTAuNjI5LDAsMCwwLDE4LjMyLDIwLjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojNDQyODIzXFxcIi8+PHBhdGggZD1cXFwiTTEyLjU4NSwxMS45MDhjLS4yMDkuNjc4LS44ODYsMy4wMjQuNDY5LDIuMjQyYTIuNTU3LDIuNTU3LDAsMCwwLS45MzgsMS41NjQsMS44MzEsMS44MzEsMCwwLDEtMS4zLDEuNDA4QTMuNDc5LDMuNDc5LDAsMCwxLDguMjU4LDE2LjVhMi45NTYsMi45NTYsMCwwLDEtLjY3OC0zLjI4NCwyLjQzLDIuNDMsMCwwLDEsMi4xMzctMS42MTZDMTAuNzA5LDExLjMzNCwxMi43OTQsMTEuMTI2LDEyLjU4NSwxMS45MDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2NhYzhkXFxcIi8+PHBhdGggZD1cXFwiTTE2LjEzLDE4LjUyOGEzLjM5MywzLjM5MywwLDAsMSwyLjQ1LDIuODY3di0uMWEzLjA1MSwzLjA1MSwwLDAsMC0yLjQ1LTIuOTE5LDMsMywwLDAsMC0yLjQ1LDIuOTE5di4xQTMuNDYzLDMuNDYzLDAsMCwxLDE2LjEzLDE4LjUyOFpcXFwiLz48ZWxsaXBzZSBjeD1cXFwiMTYuNTQ2XFxcIiBjeT1cXFwiMTUuMTM4XFxcIiByeD1cXFwiMC4xNTZcXFwiIHJ5PVxcXCIwLjMxM1xcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTMuMjU2IDQuNjExKSByb3RhdGUoLTE0LjQ2KVxcXCIgc3R5bGU9XFxcImZpbGw6IzMzMTcxMlxcXCIvPjxlbGxpcHNlIGN4PVxcXCIxNS42MDlcXFwiIGN5PVxcXCIxNS4xNDZcXFwiIHJ4PVxcXCIwLjMxM1xcXCIgcnk9XFxcIjAuMTU2XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMy40ODIgMjUuNTY3KSByb3RhdGUoLTcyLjc2NSlcXFwiIHN0eWxlPVxcXCJmaWxsOiMzMzE3MTJcXFwiLz48Y2lyY2xlIGN4PVxcXCIxMC4wMzFcXFwiIGN5PVxcXCIxNC40MVxcXCIgcj1cXFwiMS45MjlcXFwiLz48Y2lyY2xlIGN4PVxcXCIxMC41NTJcXFwiIGN5PVxcXCIxMy41MjRcXFwiIHI9XFxcIjAuNTIxXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTE2LjcsMTQuNDFzLS41MjEuMjA5LS42MjYuMjYxYTIuNDkyLDIuNDkyLDAsMCwxLS42MjYtLjI2MUgxNi43WlxcXCIgc3R5bGU9XFxcImZpbGw6IzdmNGE0MVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi45LDE0LjMwNmExNy42OCwxNy42OCwwLDAsMC0yLjcxMSwyLjM0NmMtLjkzOCwxLjItLjkzOCwxLjQwOC0uOTM4LDEuNDA4bC42NzguMzEzYTcuMSw3LjEsMCwwLDEsMi4xMzctMi41YzEuMi0uNjc4LDEuMzU1LTEuMjUxLDEuMzU1LTEuMjUxWlxcXCIgc3R5bGU9XFxcImZpbGw6I2VmY2NhM1xcXCIvPjxwYXRoIGQ9XFxcIk05LjA5MiwxMC44MTNhNC41MTksNC41MTksMCwwLDEtMS45MjksMi4yOTRBMi4xOSwyLjE5LDAsMCwwLDkuMDkyLDEwLjgxM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMjIuOTA4LDEwLjgxM2E0LjUxOSw0LjUxOSwwLDAsMCwxLjkyOSwyLjI5NEEyLjE5LDIuMTksMCwwLDEsMjIuOTA4LDEwLjgxM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMTkuMzEsMTMuODM2YTUuMTYsNS4xNiwwLDAsMC0zLjA3Ni0xLjQwOGguMTU2YTMuODUyLDMuODUyLDAsMCwwLTMuMDI0LDEuNDA4LDQuODMyLDQuODMyLDAsMCwxLDMuMDI0LTEuMDQzaDBBNS43ODUsNS43ODUsMCwwLDEsMTkuMzEsMTMuODM2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxwYXRoIGQ9XFxcIk0xNy43NDYsMTAuOTY5YTIuNDU1LDIuNDU1LDAsMCwwLTEuNTY0LS45MzhoLjE1NmExLjc4NiwxLjc4NiwwLDAsMC0xLjUxMi45MzgsMi4xODcsMi4xODcsMCwwLDEsMS41MTItLjY3OGgwQTEuODk0LDEuODk0LDAsMCwxLDE3Ljc0NiwxMC45NjlaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2NhYzhkXFxcIi8+PHBhdGggZD1cXFwiTTEwLjAzMSwxNy43NDZhMi41NDUsMi41NDUsMCwwLDEtMS43NzMuMjA5SDguMDVhMy42OCwzLjY4LDAsMCwxLS44ODYtMS41MTJBMi4yNywyLjI3LDAsMCwwLDEwLjAzMSwxNy43NDZaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2NhYzhkXFxcIi8+PHBhdGggZD1cXFwiTTIyLjEyNiwxNy43NDZhMi41NDUsMi41NDUsMCwwLDAsMS43NzMuMjA5SDIzLjY5YTEuNzQ5LDEuNzQ5LDAsMCwwLDEuMDk1LTEuNTEyQTIuMDIsMi4wMiwwLDAsMSwyMi4xMjYsMTcuNzQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxwYXRoIGQ9XFxcIk0xMS4yMywxMC43MDlhNC43NSw0Ljc1LDAsMCwxLDIuMjQyLjFjLjkzOC4zMTMuMjA5LDEuNTY0LjM2NSwxLjYxNmEyLjg2NSwyLjg2NSwwLDAsMSwyLjI0Mi0uNzNjMS43NzMuMSwxLjk4MS44ODYsMi4yNDIuNzMuMjYxLS4xLS4yNjEtMi4xOSwyLjQ1LTEuNzIsMCwwLTIuNzYzLS43My0yLjY1OSwxLjI1MWEzLjY3NSwzLjY3NSwwLDAsMC0zLjg1OC0uMVMxNC44MjcsOS45MjcsMTEuMjMsMTAuNzA5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxwYXRoIGQ9XFxcIk0xMC41LDhzLTIuNCwyLjk3Mi0yLjcxMSw0LjExOGMtLjM2NSwxLjE0Ny0uNjI2LDUuOTQzLS45MzgsNi42MjFMNS43NTYsMTQuMDQ1bDIuMDMzLTQuOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMjEuNjU2LDhzMi40LDIuOTcyLDIuNzExLDQuMTE4Yy4zNjUsMS4xNDcuNjI2LDUuOTQzLjkzOCw2LjYyMUwyNi40LDE0LjA0NWwtMi4wMzMtNC45WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxwYXRoIGQ9XFxcIk0yMS41LDhhMTEuNjE3LDExLjYxNywwLDAsMSwzLjI4NCw0LjU4OGMuNzMsMi40NS40MTcsNS40NzQuOTkxLDUuODM5LjgzNC41MjEsMS43Mi0yLjYwNywyLjAzMy0yLjkxOS40NjktLjUyMSwyLjA4NS0xLjg3NywyLjE5LTIuMTM3cy0zLjIzMi0zLjkxLTQuNzQ0LTQuNjRDMjMuNTg1LDcuODkzLDIxLjQsNy43ODksMjEuNSw4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzU2MzMyYlxcXCIvPjxwYXRoIGQ9XFxcIk0yMy42OSw5LjNhMTUuMzc5LDE1LjM3OSwwLDAsMSwyLjk3Miw4LjY1NGwxLjItMi40NUExNi41NjQsMTYuNTY0LDAsMCwwLDIzLjY5LDkuM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM0NDI4MjNcXFwiLz48cGF0aCBkPVxcXCJNMTAuNSw4YTExLjYxNywxMS42MTcsMCwwLDAtMy4yODQsNC41ODhjLS43MywyLjQ1LS40MTcsNS40NzQtLjk5MSw1LjgzOS0uODM0LjUyMS0xLjcyLTIuNjA3LTIuMDMzLTIuOTE5LS40NjktLjUyMS0yLjA4NS0xLjg3Ny0yLjE5LTIuMTM3czMuMjMyLTMuOTEsNC43NDQtNC42NEM4LjQxNSw3Ljg5MywxMC42LDcuNzg5LDEwLjUsOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1NjMzMmJcXFwiLz48cGF0aCBkPVxcXCJNOC4zMSw5LjNhMTUuMzc5LDE1LjM3OSwwLDAsMC0yLjk3Miw4LjY1NEw0LjE0LDE1LjVBMTYuNTY0LDE2LjU2NCwwLDAsMSw4LjMxLDkuM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM0NDI4MjNcXFwiLz48cGF0aCBkPVxcXCJNNi42NDIsMTguMDA3YTQuMTE4LDQuMTE4LDAsMCwwLC41NzMsMS41NjRjLjM2NS4zNjUuMS0uMzEzLjEtLjMxM3MtLjM2NS0uMjA5LS4zMTMtMS43MlM2LjY0MiwxOC4wMDcsNi42NDIsMTguMDA3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxwYXRoIGQ9XFxcIk0yNS40MSwxOC4wMDdhNC4xMTgsNC4xMTgsMCwwLDEtLjU3MywxLjU2NGMtLjM2NS4zNjUtLjEtLjMxMy0uMS0uMzEzcy4zNjUtLjIwOS4zMTMtMS43MkMyNC45OTMsMTYuMDc4LDI1LjQxLDE4LjAwNywyNS40MSwxOC4wMDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2NhYzhkXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTMuODg5XFxcIiBjeT1cXFwiMTcuMTIxXFxcIiByPVxcXCIwLjE1NlxcXCIgc3R5bGU9XFxcImZpbGw6IzQ0MjgyM1xcXCIvPjxjaXJjbGUgY3g9XFxcIjEyLjg0NlxcXCIgY3k9XFxcIjE4LjIxNlxcXCIgcj1cXFwiMC4xNTZcXFwiIHN0eWxlPVxcXCJmaWxsOiM0NDI4MjNcXFwiLz48Y2lyY2xlIGN4PVxcXCIxMi41MzNcXFwiIGN5PVxcXCIxNy4xMjFcXFwiIHI9XFxcIjAuMTU2XFxcIiBzdHlsZT1cXFwiZmlsbDojNDQyODIzXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTguMTY0XFxcIiBjeT1cXFwiMTcuMTIxXFxcIiByPVxcXCIwLjE1NlxcXCIgc3R5bGU9XFxcImZpbGw6IzQ0MjgyM1xcXCIvPjxjaXJjbGUgY3g9XFxcIjE5LjE1NFxcXCIgY3k9XFxcIjE4LjIxNlxcXCIgcj1cXFwiMC4xNTZcXFwiIHN0eWxlPVxcXCJmaWxsOiM0NDI4MjNcXFwiLz48Y2lyY2xlIGN4PVxcXCIxOS40NjdcXFwiIGN5PVxcXCIxNy4xMjFcXFwiIHI9XFxcIjAuMTU2XFxcIiBzdHlsZT1cXFwiZmlsbDojNDQyODIzXFxcIi8+XCIsXG5cdFwiUHVwcGV0XCI6IFwiPHBhdGggZD1cXFwiTTI1LjA4OSwxMS44MjJIMTguN0wxNS4yNjcsOC4zODhWMkg2LjkxMXY4LjM1N0gxMy4zbDMuNDIyLDMuNDIyaDB2NC40MzFoMGwtMy40MzQsMy40MzRINi45MTFWMzBoOC4zNTdWMjMuNjEyaDBMMTguNywyMC4xNzhoNi4zODhaTTkuNyw0Ljc4NmgyLjc4NlY3LjU3MUg5LjdaTTEyLjQ4MiwyNy4ySDkuN1YyNC40MTdoMi43ODZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZhZTFhXFxcIi8+XCIsXG5cdFwiUHVyZVNjcmlwdFwiOiBcIjxyZWN0IHdpZHRoPVxcXCIzMlxcXCIgaGVpZ2h0PVxcXCIzMlxcXCIgc3R5bGU9XFxcImZpbGw6IzE2MTcxYlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjEuODkyIDIyLjEzNiAxOS43MDYgMjAuMDk1IDEwLjEwNyAyMC4wOTUgMTIuMjkzIDIyLjEzNiAyMS44OTIgMjIuMTM2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxMi4yOTMgMTQuOTggMTAuMTA3IDE3LjAyMSAxOS43MDYgMTcuMDIxIDIxLjg5MiAxNC45OCAxMi4yOTMgMTQuOThcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIxLjg5MSAxMS45MDYgMTkuNzA2IDkuODY0IDEwLjEwNyA5Ljg2NCAxMi4yOTMgMTEuOTA2IDIxLjg5MSAxMS45MDZcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNOS4xLDEzLjkyNiw3LjY1MiwxMi40ODIsMi4zLDE3LjgzNmExLjAyMywxLjAyMywwLDAsMCwwLDEuNDQzbDUuMzU0LDUuMzU0TDkuMSwyMy4xOSw0LjQ2NCwxOC41NThaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTI5LjcsMTIuNzIxLDI0LjM0OCw3LjM2NiwyMi45LDguODFsNC42Myw0LjYzMkwyMi45LDE4LjA3NWwxLjQ0MywxLjQ0M0wyOS43LDE0LjE2NWExLjAyMSwxLjAyMSwwLDAsMCwwLTEuNDQ0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcIlB5dGhvblwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi0xMzMuMjY4XFxcIiB5MT1cXFwiLTIwMi45MVxcXCIgeDI9XFxcIi0xMzMuMTk4XFxcIiB5Mj1cXFwiLTIwMi44NFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgyNTI0My4wNjEgMzg1MTkuMTcpIHNjYWxlKDE4OS4zOCAxODkuODEpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMzg3ZWI4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMzY2OTk0XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCItMTMzLjU3NVxcXCIgeTE9XFxcIi0yMDMuMjAzXFxcIiB4Mj1cXFwiLTEzMy40OTVcXFwiIHkyPVxcXCItMjAzLjEzM1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgyNTMwOS4wNjEgMzg1ODMuNDIpIHNjYWxlKDE4OS4zOCAxODkuODEpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZlMDUyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZjMzMxXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9weXRob248L3RpdGxlPjxwYXRoIGQ9XFxcIk0xNS44ODUsMi4xYy03LjEsMC02LjY1MSwzLjA3LTYuNjUxLDMuMDdWOC4zNmg2Ljc1MnYxSDYuNTQ1UzIsOC44LDIsMTYuMDA1czQuMDEzLDYuOTEyLDQuMDEzLDYuOTEySDguMzNWMTkuNTU2cy0uMTMtNC4wMTMsMy45LTQuMDEzaDYuNzYyczMuNzcyLjA2LDMuNzcyLTMuNjUyVjUuOHMuNTcyLTMuNzEyLTYuODQyLTMuNzEyaDBaTTEyLjE1Myw0LjIzN2ExLjIxNCwxLjIxNCwwLDEsMS0xLjE4MywxLjI0NHYtLjAyYTEuMjE0LDEuMjE0LDAsMCwxLDEuMjE0LTEuMjE0aDBaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTE2LjA4NSwyOS45MWM3LjEsMCw2LjY1MS0zLjA4LDYuNjUxLTMuMDhWMjMuNjVIMTUuOTg1di0xaDkuNDdTMzAsMjMuMTU4LDMwLDE1Ljk5NXMtNC4wMTMtNi45MTItNC4wMTMtNi45MTJIMjMuNjRWMTIuNHMuMTMsNC4wMTMtMy45LDQuMDEzSDEyLjk3NVM5LjIsMTYuMzU2LDkuMiwyMC4wNjhWMjYuMnMtLjU3MiwzLjcxMiw2Ljg0MiwzLjcxMmguMDRabTMuNzMyLTIuMTQ3QTEuMjE0LDEuMjE0LDAsMSwxLDIxLDI2LjUxOXYuMDNhMS4yMTQsMS4yMTQsMCwwLDEtMS4yMTQsMS4yMTRoLjAzWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPlwiLFxuXHRcIlEgKGtkYisgZGF0YWJhc2UpXCI6IFwiPHBhdGggZD1cXFwiTTIwLjA5MiwyOVYxOS42ODJBNi45NTMsNi45NTMsMCwwLDEsMTcuNywyMS42NDVhNi43NDMsNi43NDMsMCwwLDEtMy4wODkuNzI0QTYuNTU3LDYuNTU3LDAsMCwxLDkuNDEzLDIwLDExLjA4MSwxMS4wODEsMCwwLDEsNywxMi40NzUsMTAuMDMzLDEwLjAzMywwLDAsMSw5LjI2NCw1LjUsNy4yNTEsNy4yNTEsMCwwLDEsMTQuODc0LDNhNi4yNjYsNi4yNjYsMCwwLDEsMy4yLjc4NSw3LjMyOSw3LjMyOSwwLDAsMSwyLjQsMi4zNzNWMy40MTlIMjVWMjlabS4xNTctMTYuNTQyYTYuNDkyLDYuNDkyLDAsMCwwLTEuMTYtNC4yMzIsMy42MzQsMy42MzQsMCwwLDAtMi45MDUtMS4zODcsMy43NDIsMy43NDIsMCwwLDAtMi45NzUsMS40MTMsNi44ODEsNi44ODEsMCwwLDAtMS4yLDQuNDg1LDYuNzY3LDYuNzY3LDAsMCwwLDEuMTUyLDQuNDA2QTMuNTkzLDMuNTkzLDAsMCwwLDE2LjAwOSwxOC41YTMuNzg2LDMuNzg2LDAsMCwwLDIuOTY2LTEuNTE4QTYuODg5LDYuODg5LDAsMCwwLDIwLjI0OSwxMi40NThaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWU3OGIzXFxcIi8+XCIsXG5cdFwiUSNcIjogXCI8cGF0aCBkPVxcXCJNMTkuNDUxLDYuMjE4aDIuNjM4VjguODU2aDIuNjM3VjYuMjE4aDIuNjM3VjguODU2SDMwVjExLjVIMjcuMzY0djIuNjM2SDMwVjE2Ljc3SDI3LjM2NHYyLjYzN0gyNC43MjdWMTYuNzY5SDIyLjA5MWwwLDIuNjM3SDE5LjQ1M1YxNi43NjhIMTYuODE1VjE0LjEyN2gyLjYzOFYxMS41SDE2LjgxNVY4Ljg1M2gyLjYzOVptMi42MzgsNy45MTRoMi42MzdWMTEuNUgyMi4wODlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzNjXFxcIi8+PHBhdGggZD1cXFwiTTE0LjAxOCwyMS41MjRhMTEuNDM2LDExLjQzNiwwLDAsMCwxLjU3Mi02LjE5MiwxMC44NzcsMTAuODc3LDAsMCwwLTEuODU4LTYuNkE1Ljg4OSw1Ljg4OSwwLDAsMCw4LjgwOCw2LjE1M2E1LjkyMSw1LjkyMSwwLDAsMC00Ljk0LDIuNTgxQTEwLjg0MiwxMC44NDIsMCwwLDAsMiwxNS4zMzNhMTAuODUzLDEwLjg1MywwLDAsMCwxLjg2OCw2LjU5Miw1LjkxOCw1LjkxOCwwLDAsMCw0Ljk0MSwyLjU4OCw1Ljc0Myw1Ljc0MywwLDAsMCwzLjI2LS45ODdsMi4zMDYsMi4zMjEsMS41NzctMi40Wm0tNS4xNy0xLjIxOCwxLjExNywxLjEyMWEzLjIyOSwzLjIyOSwwLDAsMS0xLjE3NC4yMTcsMy4zMzUsMy4zMzUsMCwwLDEtMi44MzctMS41OTMsOC4xMjUsOC4xMjUsMCwwLDEtMS4xOC00LjcxOSw4LjEsOC4xLDAsMCwxLDEuMTg0LTQuNzI0LDMuMzcyLDMuMzcyLDAsMCwxLDIuODctMS41ODgsMy4zMSwzLjMxLDAsMCwxLDIuODE5LDEuNTg1LDguMTc4LDguMTc4LDAsMCwxLDEuMTcyLDQuNzI2LDkuMTEzLDkuMTEzLDAsMCwxLS44MzMsNC4xNWwtMS41Ni0xLjU3MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMzM2NcXFwiLz5cIixcblx0XCJRTUxcIjogXCI8cGF0aCBkPVxcXCJNMjcuMyw1SDUuODg2TDIsOC45NThWMjZIMjYuMTE0TDMwLDIyLjA0MlY1Wk0xNi45LDIzLjA3bC0xLjgyOC44NTJMMTMuNSwyMS4zMzFhMy45NjgsMy45NjgsMCwwLDEtMS4wODIuMTA2Yy0xLjg0NSwwLTMuMTIzLS41LTMuODUtMS40OWE4LjAzLDguMDMsMCwwLDEtMS4wODItNC43LDguMzUxLDguMzUxLDAsMCwxLDEuMS00Ljc3Myw0LjM3OSw0LjM3OSwwLDAsMSwzLjgzMy0xLjU2MWMxLjgyOCwwLDMuMDg3LjUxNSwzLjgzMywxLjU0NGE4LjM1MSw4LjM1MSwwLDAsMSwxLjEsNC43NzMsMTAuODA5LDEwLjgwOSwwLDAsMS0uNDUyLDMuNDQsMy45LDMuOSwwLDAsMS0xLjQ3MywyWm01Ljg0OC0xLjY3YTIuNzM1LDIuNzM1LDAsMCwxLTIuMTY4LS42OTJBNC4xOTIsNC4xOTIsMCwwLDEsMjAsMTguMVYxNEgxOVYxMmgxVjloMnYzaDJ2MkgyMnYzLjlhMy45MDcsMy45MDcsMCwwLDAsLjE2OCwxLjQzN2MuMTEyLjIzMS4zOTMuMzU1Ljg2LjM1NWwxLjUzMy0uMDUzLjA5MywxLjU0NEExMi41MTksMTIuNTE5LDAsMCwxLDIyLjc0OCwyMS40Wk0xMi40MTYsMTAuNjE0YTIuNCwyLjQsMCwwLDAtMi4yODksMS4xLDcuNjU3LDcuNjU3LDAsMCwwLS42LDMuNTEzLDcuMTMxLDcuMTMxLDAsMCwwLC42LDMuNDQyQTIuNDQsMi40NCwwLDAsMCwxMi40MzMsMTkuN2EyLjQxNywyLjQxNywwLDAsMCwyLjI4OS0xLjAxMSw3LjM0Myw3LjM0MywwLDAsMCwuNTg2LTMuNDQyLDcuNjkyLDcuNjkyLDAsMCwwLS42LTMuNTMxQTIuNCwyLjQsMCwwLDAsMTIuNDE2LDEwLjYxNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM0MWNkNTJcXFwiLz5cIixcblx0XCJSXCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiLTEzNC44MTFcXFwiIHkxPVxcXCItMTAzLjI4NFxcXCIgeDI9XFxcIi0xMzQuNzcyXFxcIiB5Mj1cXFwiLTEwMy4zMjNcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoNzIxLjA5NCwgMCwgMCwgLTQ4Mi45MzcsIDk3MjEzLjU5NSwgLTQ5ODc0LjUxMilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNjYmNlZDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM4NDgzOGJcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIi0xMzUuMzc4XFxcIiB5MT1cXFwiLTEwMi45ODVcXFwiIHgyPVxcXCItMTM1LjMzOVxcXCIgeTI9XFxcIi0xMDMuMDI0XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDM5OCwgMCwgMCwgLTQwNi4xMjQsIDUzODkzLCAtNDE4MTIuODM2KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzI3NmRjM1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzE2NWNhYVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfcjwvdGl0bGU+PHBhdGggZD1cXFwiTTE2LDIzLjk1NmMtNy43MzIsMC0xNC00LjItMTQtOS4zNzZTOC4yNjgsNS4yLDE2LDUuMiwzMCw5LjQsMzAsMTQuNTgsMjMuNzMyLDIzLjk1NiwxNiwyMy45NTZaTTE4LjE0Myw4Ljg3QzEyLjI2Niw4Ljg3LDcuNSwxMS43NCw3LjUsMTUuMjhzNC43NjQsNi40MSwxMC42NDEsNi40MSwxMC4yMTQtMS45NjIsMTAuMjE0LTYuNDFTMjQuMDIsOC44NywxOC4xNDMsOC44N1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMjMuMzIxLDE5LjcyNmExMC41NDUsMTAuNTQ1LDAsMCwxLDEuMzQuNSwyLjU5MSwyLjU5MSwwLDAsMSwuNjguNDg1LDEuODM1LDEuODM1LDAsMCwxLC4zMTEuNDQ3bDMuMzM5LDUuNjMtNS40LDAtMi41MjQtNC43NGE2LjEsNi4xLDAsMCwwLS44MzUtMS4xNDUuODc5Ljg3OSwwLDAsMC0uNjQxLS4yOTFIMTguMzExdjYuMTczbC00Ljc3NiwwVjExLjAyNmg5LjU5MVMyNy41LDExLjEsMjcuNSwxNS4yNjEsMjMuMzIxLDE5LjcyNiwyMy4zMjEsMTkuNzI2Wm0tMi4wNzctNS4yOC0yLjg5MSwwdjIuNjgxaDIuODkzYTEuMzIzLDEuMzIzLDAsMCwwLDEuMzQtMS4zNjRBMS4yNDcsMS4yNDcsMCwwLDAsMjEuMjQ0LDE0LjQ0N1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz5cIixcblx0XCJSYWNrZXRcIjogXCI8Y2lyY2xlIGN4PVxcXCIxNlxcXCIgY3k9XFxcIjE2XFxcIiByPVxcXCIxNFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0yNy4wMTYsMjQuNjQxYTE0LDE0LDAsMCwwLTE1LjgtMjEuOEMxNi45LDUuODIyLDI0LjQxMywxNS41NDksMjcuMDE2LDI0LjY0MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMzZTViYTlcXFwiLz48cGF0aCBkPVxcXCJNMTMuOTk1LDEwLjkzYTI0LjMsMjQuMywwLDAsMC03LjIyLTUuNDZBMTQsMTQsMCwwLDAsNS40NjMsMjUuMjE3LDM5LjU2LDM5LjU2LDAsMCwxLDEzLjk5NSwxMC45M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM5ZjFkMjBcXFwiLz48cGF0aCBkPVxcXCJNMTYuNTc1LDE0LjFBMzIuNjQ1LDMyLjY0NSwwLDAsMCw5LjQzLDI4LjM2NWExNC4wMTYsMTQuMDE2LDAsMCwwLDEzLjMtLjA4OUEzOC42NDIsMzguNjQyLDAsMCwwLDE2LjU3NSwxNC4xWlxcXCIgc3R5bGU9XFxcImZpbGw6IzlmMWQyMFxcXCIvPlwiLFxuXHRcIlJhem9yIEMjXCI6IFwiPHBhdGggZD1cXFwiTTIzLjg0NCwyNy42OTJhMTYuMzMyLDE2LjMzMiwwLDAsMS02LjY0NSwxLjNxLTYuMzY0LDAtMTAuMDEzLTMuMjQzYTExLjMsMTEuMywwLDAsMS0zLjY0OS04LjlBMTMuNzE2LDEzLjcxNiwwLDAsMSw3LjMyMiw2Ljk1MSwxMi43MTYsMTIuNzE2LDAsMCwxLDE2LjksMy4wMDhhMTEuNjc2LDExLjY3NiwwLDAsMSw4LjQyNSwzLjAwNiw5Ljk5NCw5Ljk5NCwwLDAsMSwzLjE0Miw3LjUzMywxMC4xODcsMTAuMTg3LDAsMCwxLTIuMzE4LDcuMTE0LDcuNTMyLDcuNTMyLDAsMCwxLTUuODE3LDIuNTQ3LDIuNjEzLDIuNjEzLDAsMCwxLTEuODQ1LS42NDIsMi4zMjMsMi4zMjMsMCwwLDEtLjc2NC0xLjYsNC45LDQuOSwwLDAsMS00LjE0OCwyLjI0Myw0LjYsNC42LDAsMCwxLTMuNTA3LTEuNDc5LDUuNzA2LDUuNzA2LDAsMCwxLTEuMzg0LTQuMDYzLDkuOTEzLDkuOTEzLDAsMCwxLDIuMi02LjM1N3EyLjItMi43NjMsNC44LTIuNzYzYTUuMDYzLDUuMDYzLDAsMCwxLDQuMjU2LDEuNzE2bC4zMTEtMS4zMzhoMi40MDVsLTIuMDgxLDkuMDhhMTAuNzE2LDEwLjcxNiwwLDAsMC0uMzUyLDIuMjQzcTAsLjk3Mi43NDQuOTcyYTQuODE5LDQuODE5LDAsMCwwLDMuODc3LTIuMDQ3LDguOTMsOC45MywwLDAsMCwxLjYyMS01LjY4MSw3Ljk4LDcuOTgsMCwwLDAtMi42NzUtNi4xNzUsOS44ODcsOS44ODcsMCwwLDAtNi45MTktMi40MzJBMTAuNiwxMC42LDAsMCwwLDguNzEzLDguMzUyYTEyLjA2NiwxMi4wNjYsMCwwLDAtMy4yLDguNDk1LDkuNTYxLDkuNTYxLDAsMCwwLDMuMDYsNy41NzNxMy4wNiwyLjcsOC41ODYsMi43YTEzLjc1NywxMy43NTcsMCwwLDAsNS42NzUtMS4wNTRaTTE5LjQ2NiwxMi4yNWEzLjk3NywzLjk3NywwLDAsMC0zLjYtMS43MTZxLTEuODI0LDAtMy4yNjMsMi4yM2E4LjcyNiw4LjcyNiwwLDAsMC0xLjQzOSw0LjgyNHEwLDMuNjM1LDIuOTA1LDMuNjM1QTMuNzcxLDMuNzcxLDAsMCwwLDE2LjcyLDIwLjA0YTYuMzA5LDYuMzA5LDAsMCwwLDEuNy0zLjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzY4ODMyXFxcIi8+XCIsXG5cdFwiUmVhY3QgSlNYXCI6IFwiPGNpcmNsZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNS45NzRcXFwiIHI9XFxcIjIuNVxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZDhmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNiwyMS43MDZhMjguMzg1LDI4LjM4NSwwLDAsMS04Ljg4LTEuMiwxMS4zLDExLjMsMCwwLDEtMy42NTctMS45NThBMy41NDMsMy41NDMsMCwwLDEsMiwxNS45NzRjMC0xLjY1MywxLjgxNi0zLjI3Myw0Ljg1OC00LjMzM0EyOC43NTUsMjguNzU1LDAsMCwxLDE2LDEwLjI5M2EyOC42NzQsMjguNjc0LDAsMCwxLDkuMDIyLDEuMzI0LDExLjM3NiwxMS4zNzYsMCwwLDEsMy41MzgsMS44NjZBMy4zOTEsMy4zOTEsMCwwLDEsMzAsMTUuOTc0YzAsMS43MTgtMi4wMywzLjQ1OS01LjMsNC41NDFBMjguOCwyOC44LDAsMCwxLDE2LDIxLjcwNlptMC0xMC4yMTdhMjcuOTQ4LDI3Ljk0OCwwLDAsMC04Ljc0OSwxLjI4MmMtMi44Ljk3Ny00LjA1NSwyLjMxMy00LjA1NSwzLjIsMCwuOTI4LDEuMzQ5LDIuMzg3LDQuMzExLDMuNEEyNy4yMSwyNy4yMSwwLDAsMCwxNiwyMC41MWEyNy42LDI3LjYsMCwwLDAsOC4zMjUtMS4xM0MyNy40LDE4LjM2MSwyOC44LDE2LjksMjguOCwxNS45NzRhMi4zMjcsMi4zMjcsMCwwLDAtMS4wMS0xLjU3MywxMC4xOTQsMTAuMTk0LDAsMCwwLTMuMTYxLTEuNjU0QTI3LjQ2MiwyNy40NjIsMCwwLDAsMTYsMTEuNDg5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZDhmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xMC4zMiwyOC40NDNhMi42MzksMi42MzksMCwwLDEtMS4zMzYtLjMyOGMtMS40MzItLjgyNi0xLjkyOC0zLjIwOC0xLjMyNy02LjM3M2EyOC43NTUsMjguNzU1LDAsMCwxLDMuNC04LjU5M2gwQTI4LjY3NiwyOC42NzYsMCwwLDEsMTYuNzEsNS45OTVhMTEuMzc2LDExLjM3NiwwLDAsMSwzLjM4NC0yLjEzMywzLjM5MSwzLjM5MSwwLDAsMSwyLjg3OCwwYzEuNDg5Ljg1OCwxLjk4MiwzLjQ4NiwxLjI4Nyw2Ljg1OWEyOC44MDYsMjguODA2LDAsMCwxLTMuMzE2LDguMTMzLDI4LjM4NSwyOC4zODUsMCwwLDEtNS40NzYsNy4wOTMsMTEuMywxMS4zLDAsMCwxLTMuNTIzLDIuMTg5QTQuOTI2LDQuOTI2LDAsMCwxLDEwLjMyLDI4LjQ0M1ptMS43NzMtMTQuN2EyNy45NDgsMjcuOTQ4LDAsMCwwLTMuMjYsOC4yMTljLS41NTMsMi45MTUtLjAyMiw0LjY2OC43NSw1LjExNC44LjQ2MywyLjc0Mi4wMjQsNS4xLTIuMDM2YTI3LjIwOSwyNy4yMDksMCwwLDAsNS4yMjctNi43OSwyNy42LDI3LjYsMCwwLDAsMy4xODEtNy43NzZjLjY1NC0zLjE3NS4wODktNS4xMTktLjcxMy01LjU4MWEyLjMyNywyLjMyNywwLDAsMC0xLjg2OC4wODlBMTAuMTk0LDEwLjE5NCwwLDAsMCwxNy41LDYuOWEyNy40NjQsMjcuNDY0LDAsMCwwLTUuNCw2Ljg0OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGQ4ZmZcXFwiLz48cGF0aCBkPVxcXCJNMjEuNjc3LDI4LjQ1NmMtMS4zNTUsMC0zLjA3Ni0uODItNC44NjgtMi4zNjFhMjguNzU2LDI4Ljc1NiwwLDAsMS01Ljc0Ny03LjIzN2gwYTI4LjY3NiwyOC42NzYsMCwwLDEtMy4zNzQtOC40NzEsMTEuMzc2LDExLjM3NiwwLDAsMS0uMTU4LTRBMy4zOTEsMy4zOTEsMCwwLDEsOC45NjQsMy45YzEuNDg3LS44NjEsNC4wMS4wMjQsNi41ODUsMi4zMWEyOC44LDI4LjgsMCwwLDEsNS4zOSw2LjkzNCwyOC4zODQsMjguMzg0LDAsMCwxLDMuNDEsOC4yODcsMTEuMywxMS4zLDAsMCwxLC4xMzcsNC4xNDYsMy41NDMsMy41NDMsMCwwLDEtMS40OTQsMi41NTVBMi41OSwyLjU5LDAsMCwxLDIxLjY3NywyOC40NTZabS05LjU4LTEwLjJhMjcuOTQ5LDI3Ljk0OSwwLDAsMCw1LjQ5Miw2LjkyOWMyLjI0OSwxLjkzNSw0LjAzMywyLjM1MSw0LjgsMS45LjgtLjQ2NSwxLjM5LTIuMzYzLjc4Mi01LjQzNEEyNy4yMTIsMjcuMjEyLDAsMCwwLDE5LjksMTMuNzQsMjcuNiwyNy42LDAsMCwwLDE0Ljc1NSw3LjFjLTIuNDI0LTIuMTUyLTQuMzktMi42MzMtNS4xOTEtMi4xNjlhMi4zMjcsMi4zMjcsMCwwLDAtLjg1NSwxLjY2MiwxMC4xOTQsMTAuMTk0LDAsMCwwLC4xNTMsMy41NjUsMjcuNDY1LDI3LjQ2NSwwLDAsMCwzLjIzNiw4LjFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBkOGZmXFxcIi8+XCIsXG5cdFwiUmVhY3QgVFNYXCI6IFwiPGNpcmNsZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNS45NzRcXFwiIHI9XFxcIjIuNVxcXCIgc3R5bGU9XFxcImZpbGw6IzAwN2FjY1xcXCIvPjxwYXRoIGQ9XFxcIk0xNiwyMS43MDZhMjguMzg1LDI4LjM4NSwwLDAsMS04Ljg4LTEuMiwxMS4zLDExLjMsMCwwLDEtMy42NTctMS45NThBMy41NDMsMy41NDMsMCwwLDEsMiwxNS45NzRjMC0xLjY1MywxLjgxNi0zLjI3Myw0Ljg1OC00LjMzM0EyOC43NTUsMjguNzU1LDAsMCwxLDE2LDEwLjI5M2EyOC42NzQsMjguNjc0LDAsMCwxLDkuMDIyLDEuMzI0LDExLjM3NiwxMS4zNzYsMCwwLDEsMy41MzgsMS44NjZBMy4zOTEsMy4zOTEsMCwwLDEsMzAsMTUuOTc0YzAsMS43MTgtMi4wMywzLjQ1OS01LjMsNC41NDFBMjguOCwyOC44LDAsMCwxLDE2LDIxLjcwNlptMC0xMC4yMTdhMjcuOTQ4LDI3Ljk0OCwwLDAsMC04Ljc0OSwxLjI4MmMtMi44Ljk3Ny00LjA1NSwyLjMxMy00LjA1NSwzLjIsMCwuOTI4LDEuMzQ5LDIuMzg3LDQuMzExLDMuNEEyNy4yMSwyNy4yMSwwLDAsMCwxNiwyMC41MWEyNy42LDI3LjYsMCwwLDAsOC4zMjUtMS4xM0MyNy40LDE4LjM2MSwyOC44LDE2LjksMjguOCwxNS45NzRhMi4zMjcsMi4zMjcsMCwwLDAtMS4wMS0xLjU3MywxMC4xOTQsMTAuMTk0LDAsMCwwLTMuMTYxLTEuNjU0QTI3LjQ2MiwyNy40NjIsMCwwLDAsMTYsMTEuNDg5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwN2FjY1xcXCIvPjxwYXRoIGQ9XFxcIk0xMC4zMiwyOC40NDNhMi42MzksMi42MzksMCwwLDEtMS4zMzYtLjMyOGMtMS40MzItLjgyNi0xLjkyOC0zLjIwOC0xLjMyNy02LjM3M2EyOC43NTUsMjguNzU1LDAsMCwxLDMuNC04LjU5M2gwQTI4LjY3NiwyOC42NzYsMCwwLDEsMTYuNzEsNS45OTVhMTEuMzc2LDExLjM3NiwwLDAsMSwzLjM4NC0yLjEzMywzLjM5MSwzLjM5MSwwLDAsMSwyLjg3OCwwYzEuNDg5Ljg1OCwxLjk4MiwzLjQ4NiwxLjI4Nyw2Ljg1OWEyOC44MDYsMjguODA2LDAsMCwxLTMuMzE2LDguMTMzLDI4LjM4NSwyOC4zODUsMCwwLDEtNS40NzYsNy4wOTMsMTEuMywxMS4zLDAsMCwxLTMuNTIzLDIuMTg5QTQuOTI2LDQuOTI2LDAsMCwxLDEwLjMyLDI4LjQ0M1ptMS43NzMtMTQuN2EyNy45NDgsMjcuOTQ4LDAsMCwwLTMuMjYsOC4yMTljLS41NTMsMi45MTUtLjAyMiw0LjY2OC43NSw1LjExNC44LjQ2MywyLjc0Mi4wMjQsNS4xLTIuMDM2YTI3LjIwOSwyNy4yMDksMCwwLDAsNS4yMjctNi43OSwyNy42LDI3LjYsMCwwLDAsMy4xODEtNy43NzZjLjY1NC0zLjE3NS4wODktNS4xMTktLjcxMy01LjU4MWEyLjMyNywyLjMyNywwLDAsMC0xLjg2OC4wODlBMTAuMTk0LDEwLjE5NCwwLDAsMCwxNy41LDYuOWEyNy40NjQsMjcuNDY0LDAsMCwwLTUuNCw2Ljg0OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDdhY2NcXFwiLz48cGF0aCBkPVxcXCJNMjEuNjc3LDI4LjQ1NmMtMS4zNTUsMC0zLjA3Ni0uODItNC44NjgtMi4zNjFhMjguNzU2LDI4Ljc1NiwwLDAsMS01Ljc0Ny03LjIzN2gwYTI4LjY3NiwyOC42NzYsMCwwLDEtMy4zNzQtOC40NzEsMTEuMzc2LDExLjM3NiwwLDAsMS0uMTU4LTRBMy4zOTEsMy4zOTEsMCwwLDEsOC45NjQsMy45YzEuNDg3LS44NjEsNC4wMS4wMjQsNi41ODUsMi4zMWEyOC44LDI4LjgsMCwwLDEsNS4zOSw2LjkzNCwyOC4zODQsMjguMzg0LDAsMCwxLDMuNDEsOC4yODcsMTEuMywxMS4zLDAsMCwxLC4xMzcsNC4xNDYsMy41NDMsMy41NDMsMCwwLDEtMS40OTQsMi41NTVBMi41OSwyLjU5LDAsMCwxLDIxLjY3NywyOC40NTZabS05LjU4LTEwLjJhMjcuOTQ5LDI3Ljk0OSwwLDAsMCw1LjQ5Miw2LjkyOWMyLjI0OSwxLjkzNSw0LjAzMywyLjM1MSw0LjgsMS45LjgtLjQ2NSwxLjM5LTIuMzYzLjc4Mi01LjQzNEEyNy4yMTIsMjcuMjEyLDAsMCwwLDE5LjksMTMuNzQsMjcuNiwyNy42LDAsMCwwLDE0Ljc1NSw3LjFjLTIuNDI0LTIuMTUyLTQuMzktMi42MzMtNS4xOTEtMi4xNjlhMi4zMjcsMi4zMjcsMCwwLDAtLjg1NSwxLjY2MiwxMC4xOTQsMTAuMTk0LDAsMCwwLC4xNTMsMy41NjUsMjcuNDY1LDI3LjQ2NSwwLDAsMCwzLjIzNiw4LjFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA3YWNjXFxcIi8+XCIsXG5cdFwiUmVhc29uXCI6IFwiPHBvbHlsaW5lIHBvaW50cz1cXFwiMiAyIDMwIDIgMzAgMzAgMiAzMCAyIDJcXFwiIHN0eWxlPVxcXCJmaWxsOiNkZDRiMzlcXFwiLz48cGF0aCBkPVxcXCJNOS4wNTEsMTcuNTI3cTIuNTM3LDAsNS4wNzIsMEE0Ljk0Nyw0Ljk0NywwLDAsMSwxNy4xLDE4LjVhMy4yOSwzLjI5LDAsMCwxLDEuMTI4LDIuMjY3LDQuMTE3LDQuMTE3LDAsMCwxLS43NzgsMy4wMjIsMy42LDMuNiwwLDAsMS0xLjEzNy45MDVsMi4yNDcsMy41NDktMy4wNjEsMC0xLjYtMy4wNDMtMi4xNTQsMCwwLDMuMDMySDkuMDUxVjE3LjUyN20yLjY5LDIuMTI4LDAsMy40MzgsMS45ODksMGEyLjE4NCwyLjE4NCwwLDAsMCwxLjQ2OC0uNDUyLDEuODE0LDEuODE0LDAsMCwwLC40ODItMS41NDQsMS40NjksMS40NjksMCwwLDAtLjcwNS0xLjE4LDIuNzY4LDIuNzY4LDAsMCwwLTEuNDM3LS4yNjlDMTIuOTQsMTkuNjU0LDExLjc0MSwxOS42NTUsMTEuNzQxLDE5LjY1NVptOC4zODQtMi4xM2g4LjM1djIuMTNoLTUuNjZWMjEuOGw1LjExLDB2Mi4xMTlIMjIuODJWMjYuMWg1LjgyNHYyLjE0MkgyMC4xMjVWMTcuNTI1WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcIlJlZ29cIjogXCI8ZGVmcz48Y2xpcFBhdGggaWQ9XFxcImFcXFwiPjxwYXRoIGQ9XFxcIk03LjA1NSwxNi4yNDFjMy40MTUtMTAuMjIsMTQuNzU5LTkuNDczLDE3LjkyNCwwbC4xLDUuODkzYTE1LjU2MiwxNS41NjIsMCwwLDAtOS4wMzYsNy4yNDZBMTcuNjQxLDE3LjY0MSwwLDAsMCw3LjAzLDIyLjM0NlpcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmVcXFwiLz48L2NsaXBQYXRoPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3JlZ288L3RpdGxlPjxwYXRoIGQ9XFxcIk03LjAzLDE2LjI0MWwyLjYtNC41NTljLTIuNDE4LS4zMTItMi42MDYtMy40MzEtLjgtOS4wNjJDMy44MDksOC44NTMsMi40MiwxMC4yMjgsNy4wMywxNi4yNDFaXFxcIiBzdHlsZT1cXFwiZmlsbDojYmZiZmJmO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTI0Ljk3LDE2LjI0MWwtMi41OTUtNC41NTljMi40MTgtLjMxMiwyLjYwNi0zLjQzMS44LTkuMDYyQzI4LjE5MSw4Ljg1MywyOS41OCwxMC4yMjgsMjQuOTcsMTYuMjQxWlxcXCIgc3R5bGU9XFxcImZpbGw6I2JmYmZiZjtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwYXRoIGQ9XFxcIk03LjA1NSwxNi4yNDFjMy40MTUtMTAuMjIsMTQuNzU5LTkuNDczLDE3LjkyNCwwbC4xLDUuODkzYTE1LjU2MiwxNS41NjIsMCwwLDAtOS4wMzYsNy4yNDZBMTcuNjQxLDE3LjY0MSwwLDAsMCw3LjAzLDIyLjM0NlpcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmVcXFwiLz48ZyBzdHlsZT1cXFwiY2xpcC1wYXRoOnVybCgjYSlcXFwiPjxyZWN0IHg9XFxcIjE2LjA1M1xcXCIgeT1cXFwiNy45NjJcXFwiIHdpZHRoPVxcXCI5LjU0OVxcXCIgaGVpZ2h0PVxcXCIyMS44OTlcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzYzNjdcXFwiLz48cmVjdCB4PVxcXCI1LjMyMlxcXCIgeT1cXFwiNy45NjJcXFwiIHdpZHRoPVxcXCIxMC43MzJcXFwiIGhlaWdodD1cXFwiMjEuODk5XFxcIiBzdHlsZT1cXFwiZmlsbDojNzg5MjlhXFxcIi8+PC9nPjxjaXJjbGUgY3g9XFxcIjE2LjA0XFxcIiBjeT1cXFwiMTYuMjQxXFxcIiByPVxcXCIxLjE2NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcIlJlU2NyaXB0XCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiMTEuNDIxXFxcIiB5MT1cXFwiLTIyMS43MDVcXFwiIHgyPVxcXCIyMS41MDlcXFwiIHkyPVxcXCItMjQ4Ljc5MlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLCAwLCAwLCAtMSwgMCwgLTIxOClcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNlODRmNGZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDA5XFxcIiBzdG9wLWNvbG9yPVxcXCIjZGI0NjQ2XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5OVxcXCIgc3RvcC1jb2xvcj1cXFwiI2NiMzkzOVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfcmVzY3JpcHQ8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yLDEwLjk3YzAtMy43MzgsMC01LjYuOTUyLTYuOTE2YTQuOTkyLDQuOTkyLDAsMCwxLDEuMS0xLjFDNS4zNjQsMiw3LjIzMywyLDEwLjk2OSwySDIxLjAzYzMuNzM4LDAsNS42MDUsMCw2LjkxNi45NTFhNC45OTIsNC45OTIsMCwwLDEsMS4xLDEuMUMzMCw1LjM2NCwzMCw3LjIzMiwzMCwxMC45N1YyMS4wM2MwLDMuNzM3LDAsNS42MDUtLjk1Miw2LjkxNmE0Ljk2Niw0Ljk2NiwwLDAsMS0xLjEsMS4xQzI2LjYzNiwzMCwyNC43NjgsMzAsMjEuMDMsMzBIMTAuOTY5Yy0zLjczNiwwLTUuNiwwLTYuOTE1LS45NTJhNC45NjYsNC45NjYsMCwwLDEtMS4xLTEuMUMyLDI2LjYzNiwyLDI0Ljc2NywyLDIxLjAzWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0yMC45NzQsMTUuNTU0YTMuMzI1LDMuMzI1LDAsMSwwLTMuMzI0LTMuMzI1QTMuMzI1LDMuMzI1LDAsMCwwLDIwLjk3NCwxNS41NTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTkuMzE2LDExLjgwOWE0LjY3Niw0LjY3NiwwLDAsMSwuMjA2LTEuOTg3QTEuODg2LDEuODg2LDAsMCwxLDEwLjM0NSw5YTQuNyw0LjcsMCwwLDEsMS45ODctLjIwNWgyLjY0VjIxLjA0NWE0LjY4Niw0LjY4NiwwLDAsMS0uMTQ0LDEuNjY0LDEuODkyLDEuODkyLDAsMCwxLTEuMDIsMS4wMiw0LjcyLDQuNzIsMCwwLDEtMS42NjQuMTQzLDQuNzE3LDQuNzE3LDAsMCwxLTEuNjY0LS4xNDMsMS44OTIsMS44OTIsMCwwLDEtMS4wMi0xLjAyLDQuNzIsNC43MiwwLDAsMS0uMTQzLTEuNjY0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcInJlU1QgKHJlU3RydWN0dXJlZFRleHQpXCI6IFwiPHBhdGggZD1cXFwiTTE2LDMwQTEzLjg1OSwxMy44NTksMCwwLDEsMi4yODYsMTYsMTQuMTQ5LDE0LjE0OSwwLDAsMSw2LjMsNi4xLDEzLjUxNywxMy41MTcsMCwwLDEsMjUuNyw2LjEsMTQuMTQ5LDE0LjE0OSwwLDAsMSwyOS43MTQsMTYsMTMuODU5LDEzLjg1OSwwLDAsMSwxNiwzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjZTNmMzFcXFwiLz48cGF0aCBkPVxcXCJNMTEuODY5LDIzLjAxNWgtLjRhNC4yNjMsNC4yNjMsMCwwLDEtMS4wNDgtLjExMywxLjM4NywxLjM4NywwLDAsMS0uNzY3LS41NDgsMi4yLDIuMiwwLDAsMS0uNDA5LTEuMDI2QTEzLjI4LDEzLjI4LDAsMCwxLDkuMTU5LDE5LjZhMTIuNzgsMTIuNzgsMCwwLDAtLjA4LTEuNjg3LDEuNzczLDEuNzczLDAsMCwwLS40MDUtLjkyNCwxLjMyNSwxLjMyNSwwLDAsMC0xLjAyNi0uMzkxVjE1LjRhMS4zMjUsMS4zMjUsMCwwLDAsMS4wMjYtLjM5MSwxLjc3MywxLjc3MywwLDAsMCwuNDA1LS45MjQsMTIuNzgsMTIuNzgsMCwwLDAsLjA4LTEuNjg3LDEzLjI4LDEzLjI4LDAsMCwxLC4wODQtMS43MzEsMi4yLDIuMiwwLDAsMSwuNDA5LTEuMDI2LDEuMzg3LDEuMzg3LDAsMCwxLC43NjctLjU0OCw0LjI2Myw0LjI2MywwLDAsMSwxLjA0OC0uMTEzaC40djEuMTRoLS4yMjZxLS43NiwwLS45MzEuNGE3LjcyLDcuNzIsMCwwLDAtLjE3MiwyLjE3LDQuODc2LDQuODc2LDAsMCwxLS40MTYsMi4zMTZBMi4xMTcsMi4xMTcsMCwwLDEsOC44NTksMTZhMi4wODksMi4wODksMCwwLDEsMS4yNjQuOTg2QTQuODc2LDQuODc2LDAsMCwxLDEwLjU0LDE5LjNhNy43Miw3LjcyLDAsMCwwLC4xNzIsMi4xN3EuMTcyLjQuOTMxLjRoLjIyNlptMS42LTMuMTQxaDEuMDM1VjE2LjQyaDEuNDU5bDEuOTcsMy40NTRoMS4xODRMMTcuMDQsMTYuMzA4YTIuMjQzLDIuMjQzLDAsMCwwLDEuODMzLTIuMzE5YzAtMS43LTEuMi0yLjI5NC0yLjg1NS0yLjI5NEgxMy40NzRabTEuMDM1LTQuM1YxMi41M2gxLjM1OWMxLjI3MiwwLDEuOTcuMzg2LDEuOTcsMS40NTlzLS43LDEuNTgzLTEuOTcsMS41ODNabTUuNTU3LTYuNTkxaC40YTQuMjYzLDQuMjYzLDAsMCwxLDEuMDQ4LjExMywxLjM4NywxLjM4NywwLDAsMSwuNzY3LjU0OCwyLjIsMi4yLDAsMCwxLC40MDksMS4wMjYsMTMuMjgsMTMuMjgsMCwwLDEsLjA4NCwxLjczMSwxMi43OCwxMi43OCwwLDAsMCwuMDgsMS42ODcsMS43NzMsMS43NzMsMCwwLDAsLjQwNS45MjQsMS4zMjUsMS4zMjUsMCwwLDAsMS4wMjYuMzkxdjEuMTkxYTEuMzI1LDEuMzI1LDAsMCwwLTEuMDI2LjM5MSwxLjc3MywxLjc3MywwLDAsMC0uNDA1LjkyNCwxMi43OCwxMi43OCwwLDAsMC0uMDgsMS42ODcsMTMuMjgsMTMuMjgsMCwwLDEtLjA4NCwxLjczMSwyLjIsMi4yLDAsMCwxLS40MDksMS4wMjYsMS4zODcsMS4zODcsMCwwLDEtLjc2Ny41NDgsNC4yNjMsNC4yNjMsMCwwLDEtMS4wNDguMTEzaC0uNHYtMS4xNGguMjI2cS43NiwwLC45MzEtLjRBNy43Miw3LjcyLDAsMCwwLDIxLjQsMTkuM2E0Ljg3Niw0Ljg3NiwwLDAsMSwuNDE2LTIuMzE2QTIuMDg5LDIuMDg5LDAsMCwxLDIzLjA3NSwxNmEyLjExNywyLjExNywwLDAsMS0xLjI2NC0uOTk0LDQuODc2LDQuODc2LDAsMCwxLS40MTYtMi4zMTYsNy43Miw3LjcyLDAsMCwwLS4xNzItMi4xN3EtLjE3Mi0uNC0uOTMxLS40aC0uMjI2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcIlJvYm90IEZyYW1ld29ya1wiOiBcIjxjaXJjbGUgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHI9XFxcIjE0XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTEwLjM4NywxNC42YTIuNzI3LDIuNzI3LDAsMCwxLDUuNDUzLDAsLjk5Ljk5LDAsMSwxLTEuOTgsMCwuNzQ2Ljc0NiwwLDAsMC0xLjQ5MiwwLC45OS45OSwwLDEsMS0xLjk4LDBtMTEuMyw0LjU4NmEuOTkxLjk5MSwwLDAsMS0uOTkyLjk5MkgxMS41MDhhLjk5Mi45OTIsMCwwLDEsMC0xLjk4NGg5LjE4NGEuOTk0Ljk5NCwwLDAsMSwuOTkyLjk5Mk0xNy4zOTEsMTUuMTZhLjk5Mi45OTIsMCwwLDEsLjI3LTEuMzc1bDIuMjkzLTEuNTUxYS45ODkuOTg5LDAsMSwxLDEuMTA5LDEuNjM3bC0yLjMsMS41NTFhLjk2NS45NjUsMCwwLDEtLjU1MS4xNzIuOTk0Ljk5NCwwLDAsMS0uODI0LS40MzRtNi4yODksNi4wOTRhLjcwNy43MDcsMCwwLDEtLjIwNy41bC0xLjcwNywxLjcwN2EuNzA3LjcwNywwLDAsMS0uNS4yMDdIMTAuOGEuNzA3LjcwNywwLDAsMS0uNS0uMjA3TDguNiwyMS43NTRhLjcwNy43MDcsMCwwLDEtLjIwNy0uNVYxMC44YS43MDcuNzA3LDAsMCwxLC4yMDctLjVMMTAuMyw4LjU5NGEuNzA3LjcwNywwLDAsMSwuNS0uMjA3SDIxLjI2NmEuNzA3LjcwNywwLDAsMSwuNS4yMDdMMjMuNDczLDEwLjNhLjcwNy43MDcsMCwwLDEsLjIwNy41Wk0yNS4xMjksOS4xNiwyMi45LDYuOTNBMS44MDcsMS44MDcsMCwwLDAsMjEuNjI5LDYuNEgxMC40MzhhMS44MDcsMS44MDcsMCwwLDAtMS4yNzMuNTI3TDYuOTM4LDkuMTZhMS44LDEuOCwwLDAsMC0uNTI3LDEuMjdWMjEuNjIxYTEuOCwxLjgsMCwwLDAsLjUyNywxLjI3M2wyLjIyNywyLjIzYTEuODEsMS44MSwwLDAsMCwxLjI3My41MjNIMjEuNjI5YTEuOCwxLjgsMCwwLDAsMS4yNzMtLjUyM2wyLjIyNy0yLjIzYTEuNzg0LDEuNzg0LDAsMCwwLC41MjctMS4yNzNWMTAuNDM0YTEuNzg0LDEuNzg0LDAsMCwwLS41MjctMS4yNzNcXFwiLz5cIixcblx0XCJSdWJ5XCI6IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiLTIzNS45NTdcXFwiIHkxPVxcXCItMzA4LjU3OVxcXCIgeDI9XFxcIi0yMzUuOTg2XFxcIiB5Mj1cXFwiLTMwOC41MjdcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMjAyLjkzNSwgMCwgMCwgLTIwMi43OCwgNDc5MTAuNDYxLCAtNjI1NDEuMTYpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmI3NjU1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZTQyYjFlXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjOTAwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOTAwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCItMjM1LjU3MVxcXCIgeTE9XFxcIi0zMDkuMDg3XFxcIiB4Mj1cXFwiLTIzNS42OTdcXFwiIHkyPVxcXCItMzA5LjA0MVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg2MC4zMDgsIDAsIDAsIC0xMTEuNzc4LCAxNDIzNi4zNTEsIC0zNDUyNS4zOTUpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjODcxMTAxXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjOTExMjA5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOTExMjA5XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImNcXFwiIHgxPVxcXCItMjM1Ljg5NlxcXCIgeTE9XFxcIi0zMTMuMzYyXFxcIiB4Mj1cXFwiLTIzNS45MzdcXFwiIHkyPVxcXCItMzEzLjEyOVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxODguMzIsIDAsIDAsIC0yMS45ODYsIDQ0NDQ3LjMwMiwgLTY4NTYuODgyKVxcXCIgeGxpbms6aHJlZj1cXFwiI2JcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCItMjMzLjUxNVxcXCIgeTE9XFxcIi0zMDkuMDgyXFxcIiB4Mj1cXFwiLTIzMy40OTdcXFwiIHkyPVxcXCItMzA5LjE2MVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg2NS4yMjIsIDAsIDAsIC05Ny4xLCAxNTIzNy44MDIsIC0yOTk5MS44MTQpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjIzXFxcIiBzdG9wLWNvbG9yPVxcXCIjZTU3MjUyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQ2XFxcIiBzdG9wLWNvbG9yPVxcXCIjZGUzYjIwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjYTYwMDAzXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYTYwMDAzXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImVcXFwiIHgxPVxcXCItMjM1LjMxNFxcXCIgeTE9XFxcIi0zMDkuNTM0XFxcIiB4Mj1cXFwiLTIzNS4zMVxcXCIgeTI9XFxcIi0zMDkuNjA3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEwNS4zMiwgMCwgMCwgLTEwNi44MjUsIDI0Nzk4LjkyNSwgLTMzMDUzLjE1MilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjNcXFwiIHN0b3AtY29sb3I9XFxcIiNlNDcxNGVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTZcXFwiIHN0b3AtY29sb3I9XFxcIiNiZTFhMGRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiNhODBkMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNhODBkMDBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZlxcXCIgeDE9XFxcIi0yMzUuODgyXFxcIiB5MT1cXFwiLTMxMS44NTFcXFwiIHgyPVxcXCItMjM1Ljg2OVxcXCIgeTI9XFxcIi0zMTEuOTM1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDk0LjMyMSwgMCwgMCwgLTY2LjQxOCwgMjIyNzEuNDk5LCAtMjA3MDcuMDA0KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xOFxcXCIgc3RvcC1jb2xvcj1cXFwiI2U0NjM0MlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40XFxcIiBzdG9wLWNvbG9yPVxcXCIjYzgyNDEwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjYTgwZDAwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYTgwZDAwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImdcXFwiIHgxPVxcXCItMjM1LjQxMlxcXCIgeTE9XFxcIi0zMjEuMDc0XFxcIiB4Mj1cXFwiLTIzNS4zMzNcXFwiIHkyPVxcXCItMzIwLjk1OFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg3MC43NjcsIDAsIDAsIC0yNC4zMDEsIDE2Njc4LjExNiwgLTc3OTguNjQ3KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41NFxcXCIgc3RvcC1jb2xvcj1cXFwiI2M4MWYxMVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45OVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JmMDkwNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JmMDkwNVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJoXFxcIiB4MT1cXFwiLTIyMy44MjFcXFwiIHkxPVxcXCItMzEwLjExNlxcXCIgeDI9XFxcIi0yMjMuNzk2XFxcIiB5Mj1cXFwiLTMxMC4xOFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxOC4xNzcsIDAsIDAsIC03Mi42NDUsIDQwNzEuMDE3LCAtMjI1MTAuMjMzKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2RlNDAyNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45OVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JmMTkwYlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JmMTkwYlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpXFxcIiB4MT1cXFwiLTIzNS41NjFcXFwiIHkxPVxcXCItMzA5LjI1OFxcXCIgeDI9XFxcIi0yMzUuNDI0XFxcIiB5Mj1cXFwiLTMwOS4xMTZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMTU4LjE2MiwgMCwgMCwgLTE1Ny45MzcsIDM3MjU2LjMxMywgLTQ4ODE5LjM4MilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNiZDAwMTJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMDdcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMTdcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjdcXFwiIHN0b3AtY29sb3I9XFxcIiNjODJmMWNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzNcXFwiIHN0b3AtY29sb3I9XFxcIiM4MjBjMDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDZcXFwiIHN0b3AtY29sb3I9XFxcIiNhMzE2MDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzJcXFwiIHN0b3AtY29sb3I9XFxcIiNiMzEzMDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiNlODI2MDlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNlODI2MDlcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwialxcXCIgeDE9XFxcIi0yMzUuNDI0XFxcIiB5MT1cXFwiLTMwOS4xNDNcXFwiIHgyPVxcXCItMjM1LjQ3NlxcXCIgeTI9XFxcIi0zMDkuMTI2XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEyNy4wNzQsIDAsIDAsIC05Ny40MDksIDI5OTMyLjIyOSwgLTMwMDg2Ljk0NylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM4YzBjMDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTRcXFwiIHN0b3AtY29sb3I9XFxcIiM5OTBjMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiNhODBkMGVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNhODBkMGVcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwia1xcXCIgeDE9XFxcIi0yMzUuODM5XFxcIiB5MT1cXFwiLTMwOS42MDRcXFwiIHgyPVxcXCItMjM1LjkwMVxcXCIgeTI9XFxcIi0zMDkuNTU1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDk0LjAxMSwgMCwgMCwgLTEwNS42MDMsIDIyMTk4Ljc0MywgLTMyNjc2Ljg1NilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM3ZTExMGJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiM5ZTBjMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM5ZTBjMDBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwibFxcXCIgeDE9XFxcIi0yMzUuODU0XFxcIiB5MT1cXFwiLTMxMS4yNFxcXCIgeDI9XFxcIi0yMzUuODkxXFxcIiB5Mj1cXFwiLTMxMS4yMDJcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoNzkuNzAyLCAwLCAwLCAtODEuNzkxLCAxODgyNy4zOTcsIC0yNTQ0Ny45MDUpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNzkxMzBkXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjOWUxMjBiXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWUxMjBiXFxcIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9XFxcIm1cXFwiIGN4PVxcXCItMjM1Ljg4MlxcXCIgY3k9XFxcIi0zMTIuNTQzXFxcIiByPVxcXCIwLjA3NlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg5My4xMTMsIDAsIDAsIC00OC42NTUsIDIxOTg2LjA3MywgLTE1MTkzLjYxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2E4MGQwMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45OVxcXCIgc3RvcC1jb2xvcj1cXFwiIzdlMGUwOFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzdlMGUwOFxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJuXFxcIiBjeD1cXFwiLTIzNS4yODJcXFwiIGN5PVxcXCItMzA5LjcwNFxcXCIgcj1cXFwiMC4wOTdcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoOTcuNDM0LCAwLCAwLCAtNzUuODQ4LCAyMjkzNy4wNTcsIC0yMzQ2Ny44NClcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNhMzBjMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiM4MDBlMDhcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM4MDBlMDhcXFwiLz48L3JhZGlhbEdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwib1xcXCIgeDE9XFxcIi0yMzEuMjQxXFxcIiB5MT1cXFwiLTMwOS40MzVcXFwiIHgyPVxcXCItMjMxLjI5OVxcXCIgeTI9XFxcIi0zMDkuMzM3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDQwLjEzNywgMCwgMCwgLTgxLjE0MywgOTI4Ni45OTgsIC0yNTA3OC41ODkpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjOGIyMTE0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQzXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWUxMDBhXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjYjMxMDBjXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYjMxMDBjXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcInBcXFwiIHgxPVxcXCItMjM1Ljg5OFxcXCIgeTE9XFxcIi0zMTcuNDY2XFxcIiB4Mj1cXFwiLTIzNS44MzFcXFwiIHkyPVxcXCItMzE3LjUzN1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg3OC4wOTksIDAsIDAsIC0zMi42MjQsIDE4NDQ3LjM2MSwgLTEwMzUzLjU1MylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNiMzEwMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDRcXFwiIHN0b3AtY29sb3I9XFxcIiM5MTBmMDhcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiM3OTFjMTJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM3OTFjMTJcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3J1Ynk8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yMy42OTMsMjAuNDY5LDcuNzA3LDI5Ljk2MWwyMC43LTEuNEwzMCw3LjY4NVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMjguNDQsMjguNTQyLDI2LjY2MSwxNi4yNjNsLTQuODQ2LDYuNFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNMjguNDY0LDI4LjU0MiwxNS40MywyNy41MTksNy43NzYsMjkuOTM0WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk03Ljc5NCwyOS45MzcsMTEuMDUsMTkuMjcsMy44ODUsMjAuOFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMjEuODEzLDIyLjdsLTMtMTEuNzM1TDEwLjI0MywxOVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZSlcXFwiLz48cGF0aCBkPVxcXCJNMjkuMzIsMTEuMTI3bC04LjEtNi42MTktMi4yNTcsNy4zWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNmKVxcXCIvPjxwYXRoIGQ9XFxcIk0yNS41MywyLjE0OCwyMC43NjMsNC43ODJsLTMuMDA3LTIuNjdaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2cpXFxcIi8+PHBhdGggZD1cXFwiTTIsMjQuMzhsMi0zLjY0MkwyLjM4MiwxNi40WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNoKVxcXCIvPjxwYXRoIGQ9XFxcIk0yLjI3NCwxNi4yNjMsMy45LDIwLjg3M2w3LjA2Mi0xLjU4NEwxOS4wMjQsMTEuOCwyMS4zLDQuNTY5bC0zLjU4My0yLjUzLTYuMDkxLDIuMjhDOS43MDYsNi4xLDUuOTgyLDkuNjM1LDUuODQ4LDkuN3MtMi40NTksNC40NjQtMy41NzQsNi41NjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTcuOTgxLDcuOTgxQzEyLjE0LDMuODU4LDE3LjUsMS40MjEsMTkuNTU5LDMuNXMtLjEyNCw3LjEyMS00LjI4MywxMS4yNDRTNS44MjEsMjEuNDM0LDMuNzY1LDE5LjM1OCwzLjgyMiwxMi4xLDcuOTgxLDcuOTgxWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpKVxcXCIvPjxwYXRoIGQ9XFxcIk03Ljc5NCwyOS45MzNsMy4yMzEtMTAuNywxMC43MjksMy40NDdjLTMuODc5LDMuNjM4LTguMTk0LDYuNzEzLTEzLjk2LDcuMjU0WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNqKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4wMzgsMTEuNzc0bDIuNzU0LDEwLjkxYzMuMjQtMy40MDcsNi4xNDktNy4wNyw3LjU3My0xMS42bC0xMC4zMjguNjkxWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNrKVxcXCIvPjxwYXRoIGQ9XFxcIk0yOS4zMzcsMTEuMTM5YzEuMS0zLjMyNywxLjM1Ny04LjEtMy44NDEtOC45ODVMMjEuMjMxLDQuNTA5bDguMTA2LDYuNjI5WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNsKVxcXCIvPjxwYXRoIGQ9XFxcIk0yLDI0LjMzMmMuMTUzLDUuNDksNC4xMTQsNS41NzIsNS44LDUuNjJsLTMuOS05LjFMMiwyNC4zMzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojOWUxMjA5XFxcIi8+PHBhdGggZD1cXFwiTTE5LjA1MywxMS43OTFjMi40OSwxLjUzMSw3LjUwOSw0LjYsNy42MSw0LjY2MWExNy41NTIsMTcuNTUyLDAsMCwwLDIuNjE5LTUuMzQzbC0xMC4yMjkuNjgzWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNtKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS4wMjEsMTkuMjMybDQuMzE5LDguMzMyYTI3LjkyNCwyNy45MjQsMCwwLDAsNi4zODUtNC44OGwtMTAuNy0zLjQ1MlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjbilcXFwiLz48cGF0aCBkPVxcXCJNMy44ODcsMjAuODYxbC0uNjEyLDcuMjg3YzEuMTU1LDEuNTc3LDIuNzQzLDEuNzE0LDQuNDA5LDEuNTkxLTEuMjA1LTMtMy42MTQtOS0zLjgtOC44NzhaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI28pXFxcIi8+PHBhdGggZD1cXFwiTTIxLjIwNiw0LjUyOGw4LjU4LDEuMmMtLjQ1OC0xLjk0LTEuODY0LTMuMTkyLTQuMjYxLTMuNTg0bC00LjMxOSwyLjM4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNwKVxcXCIvPlwiLFxuXHRcIlJ1c3RcIjogXCI8ZGVmcz48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImFcXFwiIGN4PVxcXCItNDkyLjAzNVxcXCIgY3k9XFxcIi04ODMuMzdcXFwiIHI9XFxcIjEzLjk5OFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgwLjg2NiwgLTAuNSwgLTAuMywgLTAuNTIsIDE3Ny4xMDYsIC02ODkuMDMzKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzdkN2Q3ZFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yNjdcXFwiIHN0b3AtY29sb3I9XFxcIiM3ZTdjN2FcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDVcXFwiIHN0b3AtY29sb3I9XFxcIiM4MTc4NzFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNjA4XFxcIiBzdG9wLWNvbG9yPVxcXCIjODY3MTYyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjc1M1xcXCIgc3RvcC1jb2xvcj1cXFwiIzhkNjg0Y1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC44ODZcXFwiIHN0b3AtY29sb3I9XFxcIiM5NjVjMzBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNhMDRmMTJcXFwiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3J1c3Q8L3RpdGxlPjxwYXRoIGQ9XFxcIk0xNS4xMjQsNS4zYS44MzIuODMyLDAsMSwxLC44MzIuODMyaDBhLjgzMS44MzEsMCwwLDEtLjgzMi0uODMyTTUuMiwxMi44MzRhLjgzMi44MzIsMCwxLDEsLjgzMi44MzJoMGEuODMyLjgzMiwwLDAsMS0uODMyLS44MzJtMTkuODU2LjAzOWEuODMyLjgzMiwwLDEsMSwuODMyLjgzMi44MzEuODMxLDAsMCwxLS44MzItLjgzMmgwTTcuNjA1LDE0LjAxM2EuNzYuNzYsMCwwLDAsLjM4Ni0xbC0uMzY5LS44MzVIOS4wNzR2Ni41NDVINi4xNDRhMTAuMjQ3LDEwLjI0NywwLDAsMS0uMzMyLTMuOTExWm02LjA3NC4xNjFWMTIuMjQ1aDMuNDU4Yy4xNzksMCwxLjI2MS4yMDYsMS4yNjEsMS4wMTYsMCwuNjcyLS44My45MTMtMS41MTMuOTEzWk04Ljk1OCwyNC41NjFhLjgzMi44MzIsMCwxLDEsLjgzMi44MzIuODMxLjgzMSwwLDAsMS0uODMyLS44MzJoMG0xMi4zMzEuMDM5YS44MzIuODMyLDAsMSwxLC44MzIuODMyLjgzMi44MzIsMCwwLDEtLjgzMi0uODMyaDBtLjI1Ny0xLjg4N2EuNzU4Ljc1OCwwLDAsMC0uOS41ODRsLS40MTgsMS45NDlhMTAuMjQ5LDEwLjI0OSwwLDAsMS04LjU0NS0uMDQxbC0uNDE3LTEuOTQ5YS43NTkuNzU5LDAsMCwwLS45LS41ODNoMGwtMS43MjEuMzdhMTAuMjMzLDEwLjIzMywwLDAsMS0uODktMS4wNDloOC4zNzRjLjA5NSwwLC4xNTgtLjAxNy4xNTgtLjFWMTguOTI4YzAtLjA4Ni0uMDYzLS4xLS4xNTgtLjFoLTIuNDVWMTYuOTQ3aDIuNjQ5YTEuNjY1LDEuNjY1LDAsMCwxLDEuNjI5LDEuNDEyYy4xMDUuNDEzLjMzNiwxLjc1Ny40OTQsMi4xODcuMTU3LjQ4My44LDEuNDQ3LDEuNDgyLDEuNDQ3aDQuMzIzYTEwLjI0MywxMC4yNDMsMCwwLDEtLjk0OSwxLjFabTQuNjUtNy44MjFhMTAuMjYxLDEwLjI2MSwwLDAsMSwuMDIyLDEuNzc5SDI1LjE2N2MtLjEwNSwwLS4xNDguMDY5LS4xNDguMTcydi40ODNjMCwxLjEzNi0uNjQxLDEuMzg0LTEuMiwxLjQ0Ny0uNTM1LjA2LTEuMTI4LS4yMjQtMS4yLS41NTFhMy42MTYsMy42MTYsMCwwLDAtMS42NzEtMi44MDhjMS4wMy0uNjU0LDIuMS0xLjYxOSwyLjEtMi45MTFBMy4yOTIsMy4yOTIsMCwwLDAsMjEuNDQsOS44YTQuNTU5LDQuNTU5LDAsMCwwLTIuMi0uNzI0SDguMzY3QTEwLjI0NiwxMC4yNDYsMCwwLDEsMTQuMSw1Ljg0bDEuMjgyLDEuMzQ0YS43NTguNzU4LDAsMCwwLDEuMDcyLjAyNmgwbDEuNDM0LTEuMzcyYTEwLjI0OCwxMC4yNDgsMCwwLDEsNy4wMTUsNWwtLjk4MiwyLjIxN2EuNzYxLjc2MSwwLDAsMCwuMzg2LDFabTIuNDQ4LjAzNi0uMDMzLS4zNDMsMS4wMTEtLjk0M2EuNDIuNDIsMCwwLDAtLjAxMy0uNTk1LjQyOC40MjgsMCwwLDAtLjEyMS0uMDgxTDI4LjIsMTIuNDgzbC0uMS0uMzM0LjgwNi0xLjEyYS40MjIuNDIyLDAsMCwwLS4xMy0uNTgxLjQzLjQzLDAsMCwwLS4xMzMtLjA1NWwtMS4zNjMtLjIyMi0uMTY0LS4zMDYuNTczLTEuMjU3YS40MTkuNDE5LDAsMCwwLS4yMzYtLjU0NC40MjYuNDI2LDAsMCwwLS4xNDYtLjAyOWwtMS4zODMuMDQ4TDI1LjcsNy44MTlsLjMxOC0xLjM0N2EuNDIxLjQyMSwwLDAsMC0uMzQzLS40ODcuNDM1LjQzNSwwLDAsMC0uMTQ0LDBMMjQuMTgzLDYuM2wtLjI2Ni0uMjE5TDIzLjk2Niw0LjdhLjQyMS40MjEsMCwwLDAtLjQzMS0uNDExLjQyNi40MjYsMCwwLDAtLjE0MS4wMjhsLTEuMjU3LjU3My0uMzA2LS4xNjQtLjIyMi0xLjM2M2EuNDIxLjQyMSwwLDAsMC0uNS0uMzE4LjQzLjQzLDAsMCwwLS4xMzMuMDU1bC0xLjEyMS44MDYtLjMzMy0uMS0uNDgzLTEuMjkzYS40MjEuNDIxLDAsMCwwLS41NTUtLjIxNS40NDIuNDQyLDAsMCwwLS4xMi4wOEwxNy40MTgsMy4zOWwtLjM0My0uMDMzTDE2LjM0NywyLjE4YS40MjEuNDIxLDAsMCwwLS42ODgsMGwtLjcyOCwxLjE3Ny0uMzQzLjAzMy0uOTQzLTEuMDEyYS40MjEuNDIxLDAsMCwwLS41OTUuMDE1LjQ0Mi40NDIsMCwwLDAtLjA4LjEyTDEyLjQ4MywzLjhsLS4zMzMuMS0xLjEyLS44YS40MjIuNDIyLDAsMCwwLS41ODEuMTMuNDMuNDMsMCwwLDAtLjA1NS4xMzNsLS4yMjIsMS4zNjMtLjMwNi4xNjRMOC42MDgsNC4zMTdhLjQyMS40MjEsMCwwLDAtLjU0NC4yMzkuNDQ0LjQ0NCwwLDAsMC0uMDI4LjE0NGwuMDQ4LDEuMzgzTDcuODE4LDYuMyw2LjQ3MSw1Ljk4NGEuNDIxLjQyMSwwLDAsMC0uNDg3LjM0My40MzUuNDM1LDAsMCwwLDAsLjE0NEw2LjMsNy44MTlsLS4yMTguMjY1TDQuNyw4LjAzNmEuNDIyLjQyMiwwLDAsMC0uMzgzLjU3M0w0Ljg5LDkuODY2bC0uMTY0LjMwNi0xLjM2My4yMjJhLjQyLjQyLDAsMCwwLS4zMTguNS40My40MywwLDAsMCwuMDU1LjEzM2wuODA2LDEuMTItLjEuMzM0LTEuMjkzLjQ4M2EuNDIxLjQyMSwwLDAsMC0uMjE1LjU1NS40MTQuNDE0LDAsMCwwLC4wODEuMTIxbDEuMDExLjk0My0uMDMzLjM0My0xLjE3Ny43MjhhLjQyMS40MjEsMCwwLDAsMCwuNjg4bDEuMTc3LjcyOC4wMzMuMzQzLTEuMDExLjk0M2EuNDIxLjQyMSwwLDAsMCwuMDE1LjU5NS40MzYuNDM2LDAsMCwwLC4xMTkuMDhsMS4yOTMuNDgzLjEuMzM0TDMuMSwyMC45NzJhLjQyMS40MjEsMCwwLDAsLjEzMS41ODEuNDMuNDMsMCwwLDAsLjEzMy4wNTVsMS4zNjMuMjIyLjE2NC4zMDctLjU3MywxLjI1N2EuNDIyLjQyMiwwLDAsMCwuMjQuNTQ1LjQzOC40MzgsMCwwLDAsLjE0My4wMjhsMS4zODMtLjA0OC4yMTkuMjY2LS4zMTcsMS4zNDhhLjQyLjQyLDAsMCwwLC4zNDEuNDg2LjQuNCwwLDAsMCwuMTQ2LDBMNy44MTgsMjUuN2wuMjY2LjIxOEw4LjAzNSwyNy4zYS40MTkuNDE5LDAsMCwwLC40MjkuNDEuNDEzLjQxMywwLDAsMCwuMTQzLS4wMjhsMS4yNTctLjU3My4zMDYuMTY0LjIyMiwxLjM2MmEuNDIxLjQyMSwwLDAsMCwuNS4zMTkuNDA3LjQwNywwLDAsMCwuMTMzLS4wNTVsMS4xMi0uODA3LjMzNC4xLjQ4MywxLjI5MmEuNDIyLjQyMiwwLDAsMCwuNTU2LjIxNC40MzYuNDM2LDAsMCwwLC4xMTktLjA4bC45NDMtMS4wMTEuMzQzLjAzNC43MjgsMS4xNzdhLjQyMi40MjIsMCwwLDAsLjU4OC4xLjQxMy40MTMsMCwwLDAsLjEtLjFsLjcyOC0xLjE3Ny4zNDMtLjAzNC45NDMsMS4wMTFhLjQyMS40MjEsMCwwLDAsLjU5NS0uMDE1LjQzNi40MzYsMCwwLDAsLjA4LS4xMTlsLjQ4My0xLjI5Mi4zMzQtLjEsMS4xMi44MDdhLjQyMS40MjEsMCwwLDAsLjU4MS0uMTMxLjQzLjQzLDAsMCwwLC4wNTUtLjEzM2wuMjIyLTEuMzYyLjMwNi0uMTY0LDEuMjU3LjU3M2EuNDIxLjQyMSwwLDAsMCwuNTQ0LS4yMzkuNDM4LjQzOCwwLDAsMCwuMDI4LS4xNDNsLS4wNDgtMS4zODQuMjY1LS4yMTgsMS4zNDcuMzE3YS40MjEuNDIxLDAsMCwwLC40ODctLjM0LjQ0Ny40NDcsMCwwLDAsMC0uMTQ2TDI1LjcsMjQuMTgzbC4yMTgtLjI2NiwxLjM4My4wNDhhLjQyMS40MjEsMCwwLDAsLjQxLS40MzEuNC40LDAsMCwwLS4wMjgtLjE0MmwtLjU3My0xLjI1Ny4xNjQtLjMwNywxLjM2My0uMjIyYS40MjEuNDIxLDAsMCwwLC4zMTktLjUuNDM0LjQzNCwwLDAsMC0uMDU2LS4xMzVsLS44MDYtMS4xMi4xLS4zMzQsMS4yOTMtLjQ4M2EuNDIuNDIsMCwwLDAsLjIxNS0uNTU0LjQxNC40MTQsMCwwLDAtLjA4MS0uMTIxbC0xLjAxMS0uOTQzLjAzMy0uMzQzLDEuMTc3LS43MjhhLjQyMS40MjEsMCwwLDAsMC0uNjg4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPlwiLFxuXHRcIlNBU1wiOiBcIjxwYXRoIGQ9XFxcIk0xNi4wMTgsMzBBMTQsMTQsMCwxLDEsMzAsMTYuMiwxNCwxNCwwLDAsMSwxNi4wMTgsMzBaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDAyYmI1XFxcIi8+PHBhdGggZD1cXFwiTTkuMTcsMjIuNjNjLjAyNi4wNjEuMDQ2LjEyNC4wNzcuMTgzLDIuMjE1LDQuMjA2LDcuNzM4LDQuNjE2LDEwLjc1NiwyLjQ1NGE2LjAxNyw2LjAxNywwLDAsMCwxLjczMS04LjU4MywxNS43LDE1LjcsMCwwLDAtMS4zMTgtMS43MzFjLS44ODEtMS4wNjctMS43NTUtMi4xNC0yLjYzNi0zLjIwNy0uMzY2LS40NDMtLjc2Ny0uODM1LTEuNDE2LS42ODNhMS4zOTMsMS4zOTMsMCwwLDAtLjgxNiwyLjMxMWMuODg4LDEuMTA2LDEuODE5LDIuMTc3LDIuNywzLjI4NmEzLjg3NCwzLjg3NCwwLDAsMSwuNTg5LDQuNCw1LjQyMyw1LjQyMywwLDAsMS01LDMuMTM0QTYuNiw2LjYsMCwwLDEsOS4xNywyMi42M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMjIuNDk0LDkuNjA5Yy4wOC0uMjQ4LS4wNjYtLjM3LS4xNDEtLjUwOUE3LjQ3Nyw3LjQ3NywwLDAsMCwxMi42LDYuMjM3Yy0zLjMsMS42My01LjEsNS4zNTItMi42MzcsOS4xNDdhNTYuNTMsNTYuNTMsMCwwLDAsNC4xMzUsNS4xMiwxLjAxMiwxLjAxMiwwLDAsMCwuNzA5LjM0NSwxLjM4NCwxLjM4NCwwLDAsMCwxLjQyOC0uNzY1LDEuMjQ3LDEuMjQ3LDAsMCwwLS4xNzMtMS41MDdjLS44NzYtMS4wNTEtMS43NjktMi4wODgtMi42MTUtMy4xNjJhNC4xMyw0LjEzLDAsMCwxLC4zMjMtNS43NzFBNi4wNTQsNi4wNTQsMCwwLDEsMTkuOTg0LDguMTMsNS4xOSw1LjE5LDAsMCwxLDIyLjQ5NCw5LjYwOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0XCJTYXNzIChTYXNzKVwiOiBcIjxwYXRoIGQ9XFxcIk0yNi4xMSwxNy41NzJhNS44LDUuOCwwLDAsMC0yLjUzNy41ODgsNS4zNDUsNS4zNDUsMCwwLDEtLjU2OC0xLjMxNCwzLjUzLDMuNTMsMCwwLDEtLjA1MS0xLjEsOS44MTEsOS44MTEsMCwwLDEsLjMzMi0xLjE5MmMtLjAwNS0uMDUxLS4wNjEtLjI5Mi0uNjI0LS4zcy0xLjA0OC4xMDctMS4xLjI1NmE2LjE3MSw2LjE3MSwwLDAsMC0uMjM1LjgzNCwxOS42ODYsMTkuNjg2LDAsMCwxLTEuNzEzLDMuMjk0LDMuMTg2LDMuMTg2LDAsMCwxLS40NC0yLjA2Niw5LjgxMSw5LjgxMSwwLDAsMSwuMzMyLTEuMTkyYy0uMDA1LS4wNTEtLjA2MS0uMjkyLS42MjQtLjNzLTEuMDQ4LjEwNy0xLjEuMjU2LS4xMTguNS0uMjM1LjgzNC0xLjQ4MywzLjM4Ni0xLjg0MSw0LjE3M2MtLjE4NC40LS4zNDMuNzI2LS40NTUuOTQ2aDBhLjIzMy4yMzMsMCwwLDEtLjAyLjA0MWMtLjEuMTg5LS4xNTMuMjkyLS4xNTMuMjkydi4wMDVjLS4wNzcuMTM4LS4xNTkuMjY2LS4yLjI2NmExLjcxMSwxLjcxMSwwLDAsMSwuMDEtLjg2OWMuMi0xLjA1OS42OS0yLjcwNS42ODUtMi43NjIsMC0uMDMxLjA5Mi0uMzE3LS4zMTctLjQ2NWEuNTA4LjUwOCwwLDAsMC0uNTc4LjFjLS4wMzYsMC0uMDYxLjA4Ny0uMDYxLjA4N3MuNDQ1LTEuODUxLS44NDktMS44NTFhMy44NTUsMy44NTUsMCwwLDAtMi40NzUsMS42ODNjLS4zNDguMTg5LTEuMDg5LjU5My0xLjg4MiwxLjAyOC0uMy4xNjktLjYxNC4zMzgtLjkwNS41LS4wMi0uMDItLjA0MS0uMDQ2LS4wNjEtLjA2NkM2Ljg3LDE3LjYsMy45NzUsMTYuNDE2LDQuMSwxNC4xNzFjLjA0Ni0uODE4LjMyNy0yLjk2Niw1LjU1OS01LjU3NSw0LjMwNi0yLjEyMiw3LjczMy0xLjUzNCw4LjMyNi0uMjMuODQ5LDEuODYyLTEuODM2LDUuMzE5LTYuMjg1LDUuODJhMy4zNTEsMy4zNTEsMCwwLDEtMi44MTMtLjcxMWMtLjIzNS0uMjU2LS4yNzEtLjI3MS0uMzU4LS4yMi0uMTQzLjA3Ny0uMDUxLjMwNywwLC40NGEyLjYyNiwyLjYyNiwwLDAsMCwxLjYwNiwxLjI2Myw4LjU1LDguNTUsMCwwLDAsNS4yMTctLjUxN2MyLjctMS4wNDMsNC44LTMuOTQzLDQuMTg0LTYuMzcyLS42MTktMi40NjUtNC43MS0zLjI3OC04LjU4Mi0xLjlBMTkuNSwxOS41LDAsMCwwLDQuMzU5LDkuOTUyYy0yLjEzMywxLjk5NS0yLjQ3LDMuNzI4LTIuMzMyLDQuNDU1LjUsMi41NzgsNC4wNTEsNC4yNTUsNS40NzIsNS41LS4wNzIuMDQxLS4xMzguMDc3LS4xOTQuMTA3LS43MTEuMzUzLTMuNDIxLDEuNzctNC4xLDMuMjY4LS43NjcsMS43LjEyMywyLjkxNS43MTEsMy4wNzlhNC4zNzQsNC4zNzQsMCwwLDAsNC43MS0xLjkwOEE0LjcyNSw0LjcyNSwwLDAsMCw5LjA0OSwyMC4xYS4xMDcuMTA3LDAsMCwwLS4wMi0uMDMxbC41NTctLjMyN2MuMzYzLS4yMTUuNzIxLS40MTQsMS4wMjgtLjU3OGE2Ljc0LDYuNzQsMCwwLDAtLjM2MywxLjg2MiwzLjg4NiwzLjg4NiwwLDAsMCwuODM0LDIuNy45MjEuOTIxLDAsMCwwLC42NzUuMjJjLjYsMCwuODc1LS41LDEuMTc2LTEuMDk0LjM2OC0uNzI2LjctMS41Ny43LTEuNTdzLS40MTQsMi4yODEuNzExLDIuMjgxYy40MDksMCwuODIzLS41MzIsMS4wMDgtLjh2LjAwNXMuMDEtLjAxNS4wMzEtLjA1MWwuMDY2LS4xMDd2LS4wMWMuMTY0LS4yODYuNTMyLS45MzYsMS4wNzktMi4wMTUuNzA2LTEuMzkxLDEuMzg2LTMuMTMsMS4zODYtMy4xM2E4Ljg4OCw4Ljg4OCwwLDAsMCwuMjcxLDEuMTMsMTAuNjQzLDEwLjY0MywwLDAsMCwuNTgzLDEuMzA5Yy0uMTY0LjIzLS4yNjYuMzU4LS4yNjYuMzU4bC4wMDUuMDA1Yy0uMTMzLjE3NC0uMjc2LjM2My0uNDM1LjU0N2ExNi4zLDE2LjMsMCwwLDAtMS4zMTQsMS42NDcuNDQ3LjQ0NywwLDAsMCwuMTIzLjYsMS4xMTYsMS4xMTYsMCwwLDAsLjY4NS4xMTMsMy4xNDcsMy4xNDcsMCwwLDAsMS4wMjgtLjIzNSwzLjQ1LDMuNDUsMCwwLDAsLjg4NS0uNDY1LDEuOTgsMS45OCwwLDAsMCwuODQ5LTEuNzQ0LDMuNTIxLDMuNTIxLDAsMCwwLS4zMjItMS4yMzNjLjA1MS0uMDcyLjEtLjE0My4xNDgtLjIxNWEyMy40MjgsMjMuNDI4LDAsMCwwLDEuNTM0LTIuNjQ5LDguODg4LDguODg4LDAsMCwwLC4yNzEsMS4xMyw3LjU3LDcuNTcsMCwwLDAsLjUsMS4xMjVBNC44NjEsNC44NjEsMCwwLDAsMjAuOTY1LDIwLjhjLS4zMjIuOTMxLS4wNzIsMS4zNS40LDEuNDQ3YTEuNDI1LDEuNDI1LDAsMCwwLC43NDctLjE1MywzLjQsMy40LDAsMCwwLC45NDYtLjQ4NiwyLjEyNiwyLjEyNiwwLDAsMCwxLjA0My0xLjcyOSwzLjI2OCwzLjI2OCwwLDAsMC0uMjM1LTEuMDIzLDUuMzU2LDUuMzU2LDAsMCwxLDIuNzE2LS4zMTJjMi40MzQuMjg2LDIuOTE1LDEuODA1LDIuODIzLDIuNDQ1YTEuNjE4LDEuNjE4LDAsMCwxLS43NzIsMS4wOTRjLS4xNjkuMTA3LS4yMjUuMTQzLS4yMS4yMi4wMi4xMTMuMS4xMDcuMjQ1LjA4N0ExLjksMS45LDAsMCwwLDMwLDIwLjdjLjA3Ny0xLjUtMS4zNTUtMy4xNDUtMy44ODctMy4xM1pNNy4zMywyMy45Yy0uODA4Ljg4LTEuOTMzLDEuMjEyLTIuNDE5LjkzMS0uNTIyLS4zLS4zMTctMS42LjY3NS0yLjUzMmExMi44ODQsMTIuODg0LDAsMCwxLDEuOS0xLjQxN2MuMTE4LS4wNzIuMjkyLS4xNzQuNS0uM2wuMDU2LS4wMzFoMGwuMTIzLS4wNzdBMy40OTMsMy40OTMsMCwwLDEsNy4zMywyMy45Wm01Ljg4MS00Yy0uMjgxLjY4NS0uODY5LDIuNDQtMS4yMjcsMi4zNDItLjMwNy0uMDgyLS41LTEuNDEyLS4wNjEtMi43MjZhNi4xOTMsNi4xOTMsMCwwLDEsLjk1Ni0xLjc1NGMuNDQtLjQ5MS45MjYtLjY1NSwxLjA0My0uNDU1YTkuMDYyLDkuMDYyLDAsMCwxLS43MTEsMi41OTNabTQuODUzLDIuMzIyYy0uMTE4LjA2MS0uMjMuMS0uMjgxLjA3Mi0uMDM2LS4wMi4wNTEtLjEuMDUxLS4xcy42MDktLjY1NS44NDktLjk1MWMuMTM4LS4xNzQuMy0uMzc4LjQ3Ni0uNjA5VjIwLjdjMCwuNzgyLS43NTcsMS4zMDktMS4wOTQsMS41MjRabTMuNzQ0LS44NTRjLS4wODctLjA2MS0uMDcyLS4yNjYuMjItLjkwNWEzLjQwOCwzLjQwOCwwLDAsMSwuODM0LTEuMDc0LDEuNDQ4LDEuNDQ4LDAsMCwxLC4wODIuNDcxLDEuNTQ3LDEuNTQ3LDAsMCwxLTEuMTM1LDEuNTA5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NkNjc5OVxcXCIvPlwiLFxuXHRcIlNhc3MgKFNDU1MpXCI6IFwiPHBhdGggZD1cXFwiTTE2LjE3MSwxOC43Yy0uNDgxLjIyMS0xLjAwOC41MDktMi4wNjMsMS4wODgtLjQuMjI1LS44MTguNDUtMS4yMDcuNjYyLS4wMjctLjAyNy0uMDU1LS4wNjEtLjA4Mi0uMDg5LTIuMDg3LTIuMjMtNS45NDctMy44MDUtNS43ODMtNi44LjA2MS0xLjA5MS40MzYtMy45NTUsNy40MTMtNy40MzMsNS43NDItMi44MywxMC4zMTEtMi4wNDYsMTEuMS0uMzA3QzI2LjY4Myw4LjMsMjMuMSwxMi45MTMsMTcuMTcsMTMuNTgyYTQuNDY5LDQuNDY5LDAsMCwxLTMuNzUxLS45NDhjLS4zMTQtLjM0MS0uMzYxLS4zNjEtLjQ3Ny0uMjkzLS4xOTEuMS0uMDY4LjQwOSwwLC41ODZhMy41LDMuNSwwLDAsMCwyLjE0MSwxLjY4NCwxMS40LDExLjQsMCwwLDAsNi45NTYtLjY4OWMzLjU5NC0xLjM5MSw2LjQtNS4yNTgsNS41NzgtOC41LS44MjUtMy4yODctNi4yODEtNC4zNzEtMTEuNDQzLTIuNTM3YTI2LDI2LDAsMCwwLTguNzksNS4wNDdjLTIuODQ0LDIuNjYtMy4yOTQsNC45NzItMy4xMSw1Ljk0LjY2MiwzLjQzNyw1LjQsNS42NzQsNy4zLDcuMzMxLS4xLjA1NS0uMTg0LjEtLjI1OS4xNDMtLjk0OC40NzEtNC41NjIsMi4zNi01LjQ2Myw0LjM1OC0xLjAyMywyLjI2NC4xNjQsMy44ODcuOTQ4LDQuMTA1YTUuODMyLDUuODMyLDAsMCwwLDYuMjgxLTIuNTQ0LDYuMyw2LjMsMCwwLDAsLjU1OS01LjgsNS4wMyw1LjAzLDAsMCwxLC43MTYtLjQ3N2MuNDg0LS4yODYuOTQ1LS41NjgsMS4zNTQtLjc4NmwwLDBhMTAuNDc1LDEwLjQ3NSwwLDAsMSw0LjQ3NS0uOTg5YzMuMjQ2LjM4MiwzLjg4NywyLjQwNywzLjc2NCwzLjI2YTIuMTU3LDIuMTU3LDAsMCwxLTEuMDMsMS40NTljLS4yMjUuMTQzLS4zLjE5MS0uMjguMjkzLjAyNy4xNS4xMzYuMTQzLjMyNy4xMTZhMi41MzUsMi41MzUsMCwwLDAsMS43NjYtMi4yNTdjLjEtMi0xLjgwNy00LjE5NC01LjE4My00LjE3NGE3Ljc1Myw3Ljc1MywwLDAsMC0yLjk0Ni41ODdxLS4yMjUuMDkzLS40MzcuMlptLTQuODI1LDcuODM5Yy0xLjA3OCwxLjE3My0yLjU3OCwxLjYxNi0zLjIyNiwxLjI0MS0uNy0uNC0uNDIzLTIuMTM1LjktMy4zNzZhMTcuMTgsMTcuMTgsMCwwLDEsMi41My0xLjg4OWMuMTU3LS4xLjM4OS0uMjMyLjY2OC0uNC4wNDgtLjAyNy4wNzUtLjA0MS4wNzUtLjA0MWwuMTY0LS4xQTQuNjU4LDQuNjU4LDAsMCwxLDExLjM0NiwyNi41MzlaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2Q2Nzk5XFxcIi8+XCIsXG5cdFwiU2NhbGFcIjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCItMTM0LjkwN1xcXCIgeTE9XFxcIjIwNC41NzJcXFwiIHgyPVxcXCItMTM0Ljg5NlxcXCIgeTI9XFxcIjIwNC41NzJcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMTUzOCwgMCwgMCwgLTk2MS4yNSwgMjA3NDk1LCAxOTY2NjEpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZTYyZDJhXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjZcXFwiIHN0b3AtY29sb3I9XFxcIiNkZjNmM2RcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOFxcXCIgc3RvcC1jb2xvcj1cXFwiI2RmM2YzZFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2U2MmQyYVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiLTEzNC45MDdcXFwiIHkxPVxcXCIyMDMuNzgxXFxcIiB4Mj1cXFwiLTEzNC44OTZcXFwiIHkyPVxcXCIyMDMuNzgxXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDE1MzgsIDAsIDAsIC05NjEuMjUsIDIwNzQ5NSwgMTk1ODkyKVxcXCIgeGxpbms6aHJlZj1cXFwiI2FcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImNcXFwiIHgxPVxcXCItMTM0LjkwN1xcXCIgeTE9XFxcIjIwNS4zNjNcXFwiIHgyPVxcXCItMTM0Ljg5NlxcXCIgeTI9XFxcIjIwNS4zNjNcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMTUzOCwgMCwgMCwgLTk2MS4yNSwgMjA3NDk1LCAxOTc0MzApXFxcIiB4bGluazpocmVmPVxcXCIjYVxcXCIvPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3NjYWxhPC90aXRsZT48cGF0aCBkPVxcXCJNNy4zODQsMTkuMjMxdjIuMTU0YzAsLjM2Myw3LjgzMy45NzEsMTIuOTM3LDIuMTU0LDIuNDY1LS41NzEsNC4yOTUtMS4yNzcsNC4yOTUtMi4xNTRWMTkuMjMxYzAtLjg3Ny0xLjgzLTEuNTgyLTQuMjk1LTIuMTU0LTUuMSwxLjE4My0xMi45MzcsMS43OTEtMTIuOTM3LDIuMTU0XFxcIiBzdHlsZT1cXFwiZmlsbDojN2YwYzFkXFxcIi8+PHBhdGggZD1cXFwiTTcuMzg0LDEwLjYxNXYyLjE1NGMwLC4zNjMsNy44MzMuOTcxLDEyLjkzNywyLjE1NCwyLjQ2NS0uNTcxLDQuMjk1LTEuMjc3LDQuMjk1LTIuMTU0VjEwLjYxNWMwLS44NzctMS44My0xLjU4Mi00LjI5NS0yLjE1NC01LjEsMS4xODMtMTIuOTM3LDEuNzkxLTEyLjkzNywyLjE1NFxcXCIgc3R5bGU9XFxcImZpbGw6IzdmMGMxZFxcXCIvPjxwYXRoIGQ9XFxcIk03LjM4NCwxNC45MjN2Ni40NjJjMC0uNTM4LDE3LjIzMi0xLjYxNSwxNy4yMzItNC4zMDhWMTAuNjE1YzAsMi42OTItMTcuMjMyLDMuNzY5LTE3LjIzMiw0LjMwOFxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk03LjM4NCw2LjMwOFYxMi43N2MwLS41MzgsMTcuMjMyLTEuNjE1LDE3LjIzMi00LjMwOFYyYzAsMi42OTItMTcuMjMyLDMuNzY5LTE3LjIzMiw0LjMwOFxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk03LjM4NCwyMy41MzhWMzBjMC0uNTM4LDE3LjIzMi0xLjYxNSwxNy4yMzItNC4zMDhWMTkuMjMxYzAsMi42OTItMTcuMjMyLDMuNzY5LTE3LjIzMiw0LjMwOFxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPlwiLFxuXHRcIlNoZWxsIHNlc3Npb25cIjogXCI8cGF0aCBkPVxcXCJNMjkuNCwyNy42SDIuNVY0LjVIMjkuNFptLTI1LjktMUgyOC40VjUuNUgzLjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDliNDAwXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI2LjA3NyAxOS4zMTYgNS41MjIgMTguNDg0IDEwLjM2NiAxNS4yNTUgNS40NzkgMTEuMTg0IDYuMTIgMTAuNDE2IDEyLjAzNSAxNS4zNDQgNi4wNzcgMTkuMzE2XFxcIiBzdHlsZT1cXFwiZmlsbDojZDliNDAwXFxcIi8+PHJlY3QgeD1cXFwiMTIuN1xcXCIgeT1cXFwiMTguMlxcXCIgd2lkdGg9XFxcIjcuOFxcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojZDliNDAwXFxcIi8+PHJlY3QgeD1cXFwiMi41XFxcIiB5PVxcXCI1LjVcXFwiIHdpZHRoPVxcXCIyNi45XFxcIiBoZWlnaHQ9XFxcIjEuOVxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPlwiLFxuXHRcIlNoZWxsXCI6IFwiPHBhdGggZD1cXFwiTTI5LjQsMjcuNkgyLjVWNC41SDI5LjRabS0yNS45LTFIMjguNFY1LjVIMy41WlxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiNi4wNzcgMTkuMzE2IDUuNTIyIDE4LjQ4NCAxMC4zNjYgMTUuMjU1IDUuNDc5IDExLjE4NCA2LjEyIDEwLjQxNiAxMi4wMzUgMTUuMzQ0IDYuMDc3IDE5LjMxNlxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPjxyZWN0IHg9XFxcIjEyLjdcXFwiIHk9XFxcIjE4LjJcXFwiIHdpZHRoPVxcXCI3LjhcXFwiIGhlaWdodD1cXFwiMVxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPjxyZWN0IHg9XFxcIjIuNVxcXCIgeT1cXFwiNS41XFxcIiB3aWR0aD1cXFwiMjYuOVxcXCIgaGVpZ2h0PVxcXCIxLjlcXFwiIHN0eWxlPVxcXCJmaWxsOiNkOWI0MDBcXFwiLz5cIixcblx0XCJTbWFydHlcIjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIxMy44NTlcXFwiIHkxPVxcXCIyOS4yMTlcXFwiIHgyPVxcXCIxOC4xMDZcXFwiIHkyPVxcXCIyOS4yMTlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMDM0XFxcIiBzdG9wLWNvbG9yPVxcXCIjNjM2MzYxXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjE3OFxcXCIgc3RvcC1jb2xvcj1cXFwiIzZjNmQ3MFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yMTlcXFwiIHN0b3AtY29sb3I9XFxcIiM2ZjcxNzVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzA5XFxcIiBzdG9wLWNvbG9yPVxcXCIjNjE2MzY2XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQ4MVxcXCIgc3RvcC1jb2xvcj1cXFwiIzNjM2QzZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43MTZcXFwiIHN0b3AtY29sb3I9XFxcIiMwMTAxMDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzE5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNjM2YTZlXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCIxNS4xNzhcXFwiIHkxPVxcXCIyOS43MzRcXFwiIHgyPVxcXCIxNi43ODdcXFwiIHkyPVxcXCIyOS43MzRcXFwiIHhsaW5rOmhyZWY9XFxcIiNhXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiMTUuMjc3XFxcIiB5MT1cXFwiMjkuODgxXFxcIiB4Mj1cXFwiMTYuNjg4XFxcIiB5Mj1cXFwiMjkuODgxXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwLjAzNFxcXCIgc3RvcC1jb2xvcj1cXFwiIzliOWI5OFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xMzFcXFwiIHN0b3AtY29sb3I9XFxcIiNhNGE1YTdcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjE5XFxcIiBzdG9wLWNvbG9yPVxcXCIjYWViMWI4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjM1MlxcXCIgc3RvcC1jb2xvcj1cXFwiIzlmYTRhYlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42MDVcXFwiIHN0b3AtY29sb3I9XFxcIiM3ODgxODhcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzE5XFxcIiBzdG9wLWNvbG9yPVxcXCIjNjU3MDc2XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOGI5NDlhXFxcIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImRcXFwiIGN4PVxcXCItOC40NTZcXFwiIGN5PVxcXCItMTYuNjE2XFxcIiByPVxcXCIxOS4zODNcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMzQuMDQyIDM3LjA2Mykgc2NhbGUoMS4wNTQpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwLjAzNFxcXCIgc3RvcC1jb2xvcj1cXFwiIzcwNzA2ZVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xMTJcXFwiIHN0b3AtY29sb3I9XFxcIiM2MTYyNjFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjE5XFxcIiBzdG9wLWNvbG9yPVxcXCIjNDY0NzRhXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQwOFxcXCIgc3RvcC1jb2xvcj1cXFwiIzQ4NDk0Y1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40ODdcXFwiIHN0b3AtY29sb3I9XFxcIiM0ZTUwNTNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTQ0XFxcIiBzdG9wLWNvbG9yPVxcXCIjNWE1YzVmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjU5MlxcXCIgc3RvcC1jb2xvcj1cXFwiIzZhNmU3MVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42MzNcXFwiIHN0b3AtY29sb3I9XFxcIiM3Zjg1ODhcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNjY3XFxcIiBzdG9wLWNvbG9yPVxcXCIjOTc5ZWExXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjcxOVxcXCIgc3RvcC1jb2xvcj1cXFwiIzNkNDQ0N1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzY1NmM3MFxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJlXFxcIiB4MT1cXFwiMTYuMTI2XFxcIiB5MT1cXFwiMjguMTA4XFxcIiB4Mj1cXFwiMTYuMDVcXFwiIHkyPVxcXCIyNi44OTNcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMDM0XFxcIiBzdG9wLWNvbG9yPVxcXCIjOWI5Yjk4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjEwOVxcXCIgc3RvcC1jb2xvcj1cXFwiI2E1YTZhN1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yMTlcXFwiIHN0b3AtY29sb3I9XFxcIiNiYWJjYzRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzExXFxcIiBzdG9wLWNvbG9yPVxcXCIjYWJhZWI1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQ4N1xcXCIgc3RvcC1jb2xvcj1cXFwiIzg0ODk4ZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43MTlcXFwiIHN0b3AtY29sb3I9XFxcIiM0ODUwNTRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM4Yjk0OWFcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZlxcXCIgeDE9XFxcIjE2LjAxM1xcXCIgeTE9XFxcIjI2LjU0MlxcXCIgeDI9XFxcIjE1Ljg5NVxcXCIgeTI9XFxcIjI0LjYzNVxcXCIgeGxpbms6aHJlZj1cXFwiI2VcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImdcXFwiIHgxPVxcXCIxNi4wMjNcXFwiIHkxPVxcXCIyNS41NDZcXFwiIHgyPVxcXCIxNS44ODdcXFwiIHkyPVxcXCIyMy4zNTVcXFwiIHhsaW5rOmhyZWY9XFxcIiNlXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJoXFxcIiB4MT1cXFwiMTYuMDEzXFxcIiB5MT1cXFwiMjcuNjI3XFxcIiB4Mj1cXFwiMTUuODk1XFxcIiB5Mj1cXFwiMjUuNzJcXFwiIHhsaW5rOmhyZWY9XFxcIiNlXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJqXFxcIiB4MT1cXFwiMTMuNjhcXFwiIHkxPVxcXCIyOC44MDVcXFwiIHgyPVxcXCIxOC4yODRcXFwiIHkyPVxcXCIyOC44MDVcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMDM0XFxcIiBzdG9wLWNvbG9yPVxcXCIjNTQ1NDUzXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjA3MVxcXCIgc3RvcC1jb2xvcj1cXFwiIzYxNjI2MlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xNDNcXFwiIHN0b3AtY29sb3I9XFxcIiM4NDg1ODlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjE5XFxcIiBzdG9wLWNvbG9yPVxcXCIjYWViMWI4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjM1MlxcXCIgc3RvcC1jb2xvcj1cXFwiIzlmYTRhYlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42MDVcXFwiIHN0b3AtY29sb3I9XFxcIiM3ODgxODhcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzE5XFxcIiBzdG9wLWNvbG9yPVxcXCIjNjU3MDc2XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNTA1NjU5XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImtcXFwiIHgxPVxcXCIxMi4xNTlcXFwiIHkxPVxcXCIyNS44MTNcXFwiIHgyPVxcXCIxOS40NzVcXFwiIHkyPVxcXCIyNS44MTNcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNlNWUxZGZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNkZGRhZDZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMDM4XFxcIiBzdG9wLWNvbG9yPVxcXCIjY2VjY2M5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjExMlxcXCIgc3RvcC1jb2xvcj1cXFwiI2E3YTlhOFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yMTJcXFwiIHN0b3AtY29sb3I9XFxcIiM2OTcwNzJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjY0XFxcIiBzdG9wLWNvbG9yPVxcXCIjNDY1MDU0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjMwM1xcXCIgc3RvcC1jb2xvcj1cXFwiIzYzNmM2ZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zOThcXFwiIHN0b3AtY29sb3I9XFxcIiNhNWFhYWNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDc4XFxcIiBzdG9wLWNvbG9yPVxcXCIjZDVkN2Q5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjUzOVxcXCIgc3RvcC1jb2xvcj1cXFwiI2YzZjRmNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41NzNcXFwiIHN0b3AtY29sb3I9XFxcIiNmZWZlZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNjJcXFwiIHN0b3AtY29sb3I9XFxcIiNmNGY1ZjZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjZGFkY2RmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjhcXFwiIHN0b3AtY29sb3I9XFxcIiNiMGI0YjlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuODc2XFxcIiBzdG9wLWNvbG9yPVxcXCIjOGI5Mjk4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZDFkM2Q0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYTdhOWFjXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImxcXFwiIHgxPVxcXCIxMi4xNTlcXFwiIHkxPVxcXCIyNC43MjhcXFwiIHgyPVxcXCIxOS40NzVcXFwiIHkyPVxcXCIyNC43MjhcXFwiIHhsaW5rOmhyZWY9XFxcIiNrXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJtXFxcIiB4MT1cXFwiMTIuMTU5XFxcIiB5MT1cXFwiMjMuNTQ4XFxcIiB4Mj1cXFwiMTkuNDc1XFxcIiB5Mj1cXFwiMjMuNTQ4XFxcIiB4bGluazpocmVmPVxcXCIja1xcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiblxcXCIgeDE9XFxcIjEyLjE1OVxcXCIgeTE9XFxcIjI2Ljg5OFxcXCIgeDI9XFxcIjE5LjQ3NVxcXCIgeTI9XFxcIjI2Ljg5OFxcXCIgeGxpbms6aHJlZj1cXFwiI2tcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcIm9cXFwiIHgxPVxcXCIxMi4xNTlcXFwiIHkxPVxcXCIyNS45NjdcXFwiIHgyPVxcXCIxOS40NzVcXFwiIHkyPVxcXCIyNS45NjdcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNlNWUxZGZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNkZGU4ZDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNkMmYzYmFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMDM2XFxcIiBzdG9wLWNvbG9yPVxcXCIjYzVlNGIxXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjEwNVxcXCIgc3RvcC1jb2xvcj1cXFwiI2E0YmQ5OFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xOTlcXFwiIHN0b3AtY29sb3I9XFxcIiM2ZTdmNzFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjY0XFxcIiBzdG9wLWNvbG9yPVxcXCIjNDY1MDU0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjMwM1xcXCIgc3RvcC1jb2xvcj1cXFwiIzYzNmM2ZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zOThcXFwiIHN0b3AtY29sb3I9XFxcIiNhNWFhYWNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDc4XFxcIiBzdG9wLWNvbG9yPVxcXCIjZDVkN2Q5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjUzOVxcXCIgc3RvcC1jb2xvcj1cXFwiI2YzZjRmNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41NzNcXFwiIHN0b3AtY29sb3I9XFxcIiNmZWZlZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNjJcXFwiIHN0b3AtY29sb3I9XFxcIiNmNGY1ZjZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjZGFkY2RmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjhcXFwiIHN0b3AtY29sb3I9XFxcIiNiMGI0YjlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuODc2XFxcIiBzdG9wLWNvbG9yPVxcXCIjOGI5Mjk4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZDFkM2Q0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYTdhOWFjXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcInBcXFwiIHgxPVxcXCIxMi4xNTlcXFwiIHkxPVxcXCIyNC44ODNcXFwiIHgyPVxcXCIxOS40NzVcXFwiIHkyPVxcXCIyNC44ODNcXFwiIHhsaW5rOmhyZWY9XFxcIiNvXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJxXFxcIiB4MT1cXFwiMTIuMTU5XFxcIiB5MT1cXFwiMjcuMDVcXFwiIHgyPVxcXCIxOS40NzVcXFwiIHkyPVxcXCIyNy4wNVxcXCIgeGxpbms6aHJlZj1cXFwiI29cXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcInJcXFwiIHgxPVxcXCIxMS45MDJcXFwiIHkxPVxcXCIyMy4yMDFcXFwiIHgyPVxcXCIxOS44ODRcXFwiIHkyPVxcXCIyMy4yMDFcXFwiIHhsaW5rOmhyZWY9XFxcIiNlXFxcIi8+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJzXFxcIiBjeD1cXFwiLTE2Ljk4M1xcXCIgY3k9XFxcIi0yMi45NDhcXFwiIHI9XFxcIjEwLjcxOFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgzNC4wNDIgMzcuMDYzKSBzY2FsZSgxLjA1NClcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZmZDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTA1XFxcIiBzdG9wLWNvbG9yPVxcXCIjZmYwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjU2OFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZkZjcwMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42NjRcXFwiIHN0b3AtY29sb3I9XFxcIiNmNmUyMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzgyXFxcIiBzdG9wLWNvbG9yPVxcXCIjZWJiZjAwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjkwNlxcXCIgc3RvcC1jb2xvcj1cXFwiI2RlOTIwMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2RhOTgxOVxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfc21hcnR5PC90aXRsZT48cGF0aCBkPVxcXCJNMTMuODU5LDI4Ljc3NmEuMjQyLjI0MiwwLDAsMCwuMTI4LjE5MSwxMiwxMiwwLDAsMCwxLjM5Mi42MjIsNC4zLDQuMywwLDAsMCwuNTc4LjA3MmguMDUyYTQuMyw0LjMsMCwwLDAsLjU3OC0uMDcyLDEyLjAxNCwxMi4wMTQsMCwwLDAsMS4zOTItLjYyMi4yNDMuMjQzLDAsMCwwLC4xMjgtLjE5MWwtMi4xMzcuMTkyWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wMTQsMzBhMS4xMjMsMS4xMjMsMCwwLDAsLjY4OC0uMjQ3LjE3NS4xNzUsMCwwLDAsLjA4NS0uMTI2di0uMTA1YTMuMjM1LDMuMjM1LDAsMCwwLS43NzMtLjA1M2gtLjA2M2EzLjIzNywzLjIzNywwLDAsMC0uNzczLjA1M3YuMTA1YS4xNzUuMTc1LDAsMCwwLC4wODUuMTI2LDEuMTIyLDEuMTIyLDAsMCwwLC42ODguMjQ3WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNS45NTEsMjkuODA3YTQuNzMyLDQuNzMyLDAsMCwxLS42NzQtLjA0NCwxLjEwNSwxLjEwNSwwLDAsMCwuNjc0LjIzN2guMDYzYTEuMTA2LDEuMTA2LDAsMCwwLC42NzUtLjIzNyw0LjczMyw0LjczMywwLDAsMS0uNjc1LjA0NFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYylcXFwiLz48cGF0aCBkPVxcXCJNMTkuODA5LDI2LjgzOGExLDEsMCwwLDAtLjIzNC4zODljLS4wMzYuMTgxLS4xLjU4NS0xLjMyNiwxLjQwNmwtLjAyNS4wMTdhLjQzNS40MzUsMCwwLDEtLjA4Ni4wMzcsOS45NjgsOS45NjgsMCwwLDEtMi4xNTUuMjA5LDkuOTY4LDkuOTY4LDAsMCwxLTIuMTU2LS4yMDkuNDM2LjQzNiwwLDAsMS0uMDg1LS4wMzZsLS4wMjUtLjAxN2E0LjU3OSw0LjU3OSwwLDAsMS0xLjEyLS45NTdjLS4xNjQtLjIxOS0uMzczLS4yNTctLjM5LS4zNDVhMjEuMDU1LDIxLjA1NSwwLDAsMCwzLjg1NS4wNTcsMTMuMDQ5LDEzLjA0OSwwLDAsMCwzLjc2MS0uNjU0QS42OTIuNjkyLDAsMCwxLDE5LjgwOSwyNi44MzhaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2QpXFxcIi8+PHBhdGggZD1cXFwiTTE5Ljc3MiwyNi44OGEuOTg1Ljk4NSwwLDAsMS0uMjQ2LjEyOWMtLjA3Ni4wMjgtLjI0NS4wNzgtLjI0NS4wNzhhMjUuMTUsMjUuMTUsMCwwLDEtNi40NTguNDM2Yy0uMTM2LS4wMDktLjMyLS4wMjgtLjMyLS4wMjhhMS4wNjIsMS4wNjIsMCwwLDEtLjE0LS4wMjgsMS4wMTYsMS4wMTYsMCwwLDEsLjE0LjEwN2MuMTYuMDEzLjMxOS4wMTkuMzE5LjAxOWEyNi44NjQsMjYuODY0LDAsMCwwLDYuNzQzLS4zMjNsLjAwOS0uMDQyQS44ODUuODg1LDAsMCwxLDE5Ljc3MiwyNi44OFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZSlcXFwiLz48cGF0aCBkPVxcXCJNMTkuNDM5LDI1LjM4MnMuMjQ1LS4wNy4yNDUtLjE2MmEuMTE0LjExNCwwLDAsMC0uMDEzLS4wNjUuMjE0LjIxNCwwLDAsMS0uMDYxLS4xNDQuNDM3LjQzNywwLDAsMSwuMTE5LS4yNywxLjA2OSwxLjA2OSwwLDAsMS0uMi4xYy0uMDc2LjAyOC0uMjQ1LjA3OC0uMjQ1LjA3OGEyNS4xNTEsMjUuMTUxLDAsMCwxLTYuNDU4LjQzNmMtLjEzNi0uMDA5LS4zMi0uMDI4LS4zMi0uMDI4YTEuMDU1LDEuMDU1LDAsMCwxLS4xODEtLjA0MS4zNzcuMzc3LDAsMCwxLC4wNzguMjE3LjcxNi43MTYsMCwwLDEtLjI1NC40MzIuNjczLjY3MywwLDAsMSwuMzY4LS4wNzlBMjYuMiwyNi4yLDAsMCwwLDE5LjQzOSwyNS4zODJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2YpXFxcIi8+PHBhdGggZD1cXFwiTTE5LjQzOSwyNC4yMjlzLjI0NS0uMDc4LjI0NS0uMTgyYS4xNDMuMTQzLDAsMCwwLS4wMTMtLjA3My4yNTQuMjU0LDAsMCwxLS4wNjEtLjE2Mi41MTQuNTE0LDAsMCwxLC4xMTktLjMsMS4wMjYsMS4wMjYsMCwwLDEtLjIuMTExYy0uMDc2LjAzMi0uMjQ1LjA4OC0uMjQ1LjA4OGEyMi41MDcsMjIuNTA3LDAsMCwxLTYuNDU4LjQ4OWMtLjEzNi0uMDEtLjMyLS4wMzItLjMyLS4wMzJhLjk1My45NTMsMCwwLDEtLjE4MS0uMDQ2LjQ1NS40NTUsMCwwLDEsLjA3OC4yNDMuODI1LjgyNSwwLDAsMS0uMjU0LjQ4NC42MTQuNjE0LDAsMCwxLC4zNjgtLjA4OUMxMy4wMTQsMjQuNzU4LDE2LjkzNSwyNS4wNDEsMTkuNDM5LDI0LjIyOVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZylcXFwiLz48cGF0aCBkPVxcXCJNMTkuNDM5LDI2LjQ2N3MuMjQ1LS4wNy4yNDUtLjE2M2EuMTE1LjExNSwwLDAsMC0uMDEzLS4wNjUuMjE0LjIxNCwwLDAsMS0uMDYxLS4xNDQuNDM1LjQzNSwwLDAsMSwuMTE5LS4yNywxLjA3LDEuMDcsMCwwLDEtLjIuMWMtLjA3Ni4wMjgtLjI0NS4wNzgtLjI0NS4wNzhhMjUuMTYyLDI1LjE2MiwwLDAsMS02LjQ1OC40MzZjLS4xMzYtLjAwOS0uMzItLjAyOC0uMzItLjAyOGExLjA0MiwxLjA0MiwwLDAsMS0uMTgxLS4wNDEuMzc3LjM3NywwLDAsMSwuMDc4LjIxNy43MTcuNzE3LDAsMCwxLS4yNTQuNDMyLjY3LjY3LDAsMCwxLC4zNjgtLjA3OUEyNi4yMDcsMjYuMjA3LDAsMCwwLDE5LjQzOSwyNi40NjdaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2gpXFxcIi8+PHBhdGggZD1cXFwiTTE5LjQzOSwyNi40NjdzLjI0NS0uMDcuMjQ1LS4xNjNhLjExNS4xMTUsMCwwLDAtLjAxMy0uMDY1LjIxNC4yMTQsMCwwLDEtLjA2MS0uMTQ0LjQzNS40MzUsMCwwLDEsLjExOS0uMjcsMS4wNywxLjA3LDAsMCwxLS4yLjFjLS4wNzYuMDI4LS4yNDUuMDc4LS4yNDUuMDc4YTI1LjE2OCwyNS4xNjgsMCwwLDEtNi40NTguNDM2Yy0uMTM2LS4wMDktLjMyLS4wMjgtLjMyLS4wMjhhMS4wNDIsMS4wNDIsMCwwLDEtLjE4MS0uMDQxLjM3Ni4zNzYsMCwwLDEsLjA3OC4yMTcuNzE3LjcxNywwLDAsMS0uMjU0LjQzMi42Ny42NywwLDAsMSwuMzY4LS4wNzlBMjYuMjA3LDI2LjIwNywwLDAsMCwxOS40MzksMjYuNDY3WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNoKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC4yMjQsMjguNjVhLjQzNS40MzUsMCwwLDEtLjA4Ni4wMzcsOS45NjgsOS45NjgsMCwwLDEtMi4xNTUuMjA5LDkuOTY4LDkuOTY4LDAsMCwxLTIuMTU2LS4yMDkuNDM2LjQzNiwwLDAsMS0uMDg1LS4wMzZsLS4wMjUtLjAxNy0uMDI5LS4wMTlhLjExMi4xMTIsMCwwLDAsMCwuMDczYy4wMjQuMDczLjE0Ny4xLjE0Ny4xYTkuOTQzLDkuOTQzLDAsMCwwLDIuMTUuMjA5LDkuOTQyLDkuOTQyLDAsMCwwLDIuMTUtLjIwOXMuMTI2LS4wMjkuMTQ3LS4xYS4xMTguMTE4LDAsMCwwLDAtLjA3M2wtLjAyOS4wMTlaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2opXFxcIi8+PHBhdGggZD1cXFwiTTE5Ljk0NCwyNS41cy4wNDEuMjUyLS40MTguNDIzYy0uMDc2LjAyOC0uMjQ1LjA3OC0uMjQ1LjA3OGEyNS4xNjIsMjUuMTYyLDAsMCwxLTYuNDU4LjQzNmMtLjEzNi0uMDA5LS4zMi0uMDI4LS4zMi0uMDI4LS4yNzYtLjAzOC0uNDY3LS4xNi0uNDU1LS4zMDgsMCwwLS4wMzMtLjI0OS40NjYtLjI0OWEyNi4yLDI2LjIsMCwwLDAsNi45MjUtLjQ3MnMuMjQ1LS4wNy4yNDUtLjE2MmEuMTExLjExMSwwLDAsMC0uMDEzLS4wNjZTMTkuOTQ0LDI1LjMxMiwxOS45NDQsMjUuNVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaylcXFwiLz48cGF0aCBkPVxcXCJNMTkuOTQ0LDI0LjQxNnMuMDQxLjI1Mi0uNDE4LjQyM2MtLjA3Ni4wMjgtLjI0NS4wNzgtLjI0NS4wNzhhMjUuMTUxLDI1LjE1MSwwLDAsMS02LjQ1OC40MzZjLS4xMzYtLjAwOS0uMzItLjAyOC0uMzItLjAyOC0uMjc2LS4wMzgtLjQ2Ny0uMTYtLjQ1NS0uMzA4LDAsMC0uMDMzLS4yNDguNDY2LS4yNDhhMjYuMTkzLDI2LjE5MywwLDAsMCw2LjkyNS0uNDcycy4yNDUtLjA3LjI0NS0uMTYyYS4xMS4xMSwwLDAsMC0uMDEzLS4wNjVTMTkuOTQ0LDI0LjIyNywxOS45NDQsMjQuNDE2WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNsKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS44OTMsMjQuNDA2di0uMDIxYy0uMDEyLjA3Ni0uMDc4LjIzNi0uNDE3LjM1NS0uMDc2LjAyNi0uMjQ1LjA3My0uMjQ1LjA3M2EyMi4zNzIsMjIuMzcyLDAsMCwxLTUuMS41aDBhMjIuMTU1LDIyLjE1NSwwLDAsMCw1LjEtLjQ0MXMuMTY5LS4wNDcuMjQ1LS4wNzNDMTkuOTMzLDI0LjY0MywxOS44OTMsMjQuNDA2LDE5Ljg5MywyNC40MDZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTE5Ljg5MywyNS40OTFWMjUuNDdjLS4wMTIuMDc2LS4wNzguMjM2LS40MTcuMzU1LS4wNzYuMDI3LS4yNDUuMDczLS4yNDUuMDczYTIyLjM4LDIyLjM4LDAsMCwxLTUuMS41aDBhMjIuMTcxLDIyLjE3MSwwLDAsMCw1LjEtLjQ0MXMuMTY5LS4wNDcuMjQ1LS4wNzNDMTkuOTMzLDI1LjcyOCwxOS44OTMsMjUuNDkxLDE5Ljg5MywyNS40OTFaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTE5Ljk0NCwyMy4wMzRzLjA0MS4zMjktLjQxOC41NTJjLS4wNzYuMDM3LS4yNDUuMS0uMjQ1LjFhMTkuNDA5LDE5LjQwOSwwLDAsMS02LjQ1OC41NjljLS4xMzYtLjAxMi0uMzItLjAzNy0uMzItLjAzNy0uMjc2LS4wNS0uNDY3LS4yMDktLjQ1NS0uNCwwLDAtLjAzMy0uMzI0LjQ2Ni0uMzI0YTE4LjI4MywxOC4yODMsMCwwLDAsNi45MjUtLjQ2MSwxLjAxNCwxLjAxNCwwLDAsMCwuNDQ0LS4yMzhBLjUzLjUzLDAsMCwxLDE5Ljk0NCwyMy4wMzRaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI20pXFxcIi8+PHBhdGggZD1cXFwiTTE5Ljk0NCwyNi41ODZzLjA0MS4yNTItLjQxOC40MjNjLS4wNzYuMDI4LS4yNDUuMDc4LS4yNDUuMDc4YTI1LjE1LDI1LjE1LDAsMCwxLTYuNDU4LjQzNmMtLjEzNi0uMDA5LS4zMi0uMDI4LS4zMi0uMDI4LS4yNzYtLjAzOC0uNDY3LS4xNi0uNDU1LS4zMDgsMCwwLS4wMzMtLjI0OC40NjYtLjI0OGEyNi4yMDcsMjYuMjA3LDAsMCwwLDYuOTI1LS40NzJzLjI0NS0uMDcuMjQ1LS4xNjNhLjExMS4xMTEsMCwwLDAtLjAxMy0uMDY1UzE5Ljk0NCwyNi40LDE5Ljk0NCwyNi41ODZaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI24pXFxcIi8+PHBhdGggZD1cXFwiTTE5Ljg5MywyNi41NzZ2LS4wMjFjLS4wMTIuMDc2LS4wNzguMjM2LS40MTcuMzU1LS4wNzYuMDI2LS4yNDUuMDczLS4yNDUuMDczYTIyLjM3MiwyMi4zNzIsMCwwLDEtNS4xLjVoMGEyMi4xNjMsMjIuMTYzLDAsMCwwLDUuMS0uNDQxcy4xNjktLjA0Ny4yNDUtLjA3M0MxOS45MzMsMjYuODEzLDE5Ljg5MywyNi41NzYsMTkuODkzLDI2LjU3NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTkuODkzLDIzLjMyMVYyMy4zYy0uMDEyLjA3Ni0uMDc4LjIzNi0uNDE3LjM1NS0uMDc2LjAyNy0uMjQ1LjA3My0uMjQ1LjA3M2EyMi4zNzIsMjIuMzcyLDAsMCwxLTUuMS41aDBhMjIuMTU2LDIyLjE1NiwwLDAsMCw1LjEtLjQ0MXMuMTY5LS4wNDcuMjQ1LS4wNzNDMTkuOTMzLDIzLjU1OCwxOS44OTMsMjMuMzIxLDE5Ljg5MywyMy4zMjFaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTEyLjQxNywyNS44ODFzLS4yMzYsMC0uMjQxLjA4LjI0Ni4wODUuMjQ2LjA4NS4xNzUsMCwuMy4wMDVjLjYxOS0uMDEzLDEuOTkzLS4wMzgsMy40MzctLjE2NkMxNC4zODQsMjUuOTU4LDEyLjcyMywyNS44ODMsMTIuNDE3LDI1Ljg4MVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjbylcXFwiLz48cGF0aCBkPVxcXCJNMTIuNDE3LDI0LjhzLS4yMzYsMC0uMjQxLjA4LjI0Ni4wODUuMjQ2LjA4NS4xNzUsMCwuMy4wMDVjLjYxOS0uMDEyLDEuOTkzLS4wMzgsMy40MzctLjE2NkMxNC4zODQsMjQuODc0LDEyLjcyMywyNC44LDEyLjQxNywyNC44WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNwKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi40MTcsMjYuOTY1cy0uMjM2LDAtLjI0MS4wOC4yNDYuMDg1LjI0Ni4wODUuMTc1LDAsLjMuMDA1Yy42MTktLjAxMiwxLjk5My0uMDM4LDMuNDM3LS4xNjZDMTQuMzg0LDI3LjA0MiwxMi43MjMsMjYuOTY2LDEyLjQxNywyNi45NjVaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI3EpXFxcIi8+PHBhdGggZD1cXFwiTTExLjk2NSwyMi43NzlzLS4yNzQuMzE1LjMxOS43MTFjMCwwLDUuNzc1LjU4Nyw3LjYtLjY5NUMxOS44ODQsMjIuNzk1LDEzLjYyMywyMy4zMiwxMS45NjUsMjIuNzc5WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNyKVxcXCIvPjxwYXRoIGQ9XFxcIk0yMC4wMzUsMjIuNzc5YTQuNDQ5LDQuNDQ5LDAsMCwwLC44MS0xLjE1NSwzLjM4NiwzLjM4NiwwLDAsMCwuMi0xLjExNSw2LjczMyw2LjczMywwLDAsMSwuNjMyLTIuOTFjLjUzNC0xLjAxNCwyLjgxLTQuNDQ3LDIuODEtNy40NjJBOC4wMTIsOC4wMTIsMCwwLDAsMTYsMmE4LjAxMiw4LjAxMiwwLDAsMC04LjQ4Myw4LjEzNmMwLDMuMDE1LDIuMjc2LDYuNDQ4LDIuODEsNy40NjJhNi43MzEsNi43MzEsMCwwLDEsLjYzMiwyLjkxLDMuMzg0LDMuMzg0LDAsMCwwLC4yLDEuMTE1LDQuNDUzLDQuNDUzLDAsMCwwLC44MSwxLjE1NSwxMy44NjYsMTMuODY2LDAsMCwwLDMuOTg3LjM3QTE1LjE1MSwxNS4xNTEsMCwwLDAsMjAuMDM1LDIyLjc3OVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjcylcXFwiLz5cIixcblx0XCJTb2xpZGl0eSAoRXRoZXJldW0pXCI6IFwiPHBhdGggZD1cXFwiTTIwLjQ3NywybC00LjUsOGgtOWw0LjUtOGg5XFxcIiBzdHlsZT1cXFwiZmlsbDojYzFjMWMxO29wYWNpdHk6MC40NTtpc29sYXRpb246aXNvbGF0ZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS41MiwzMGw0LjUtOGg5bC00LjUsOGgtOVxcXCIgc3R5bGU9XFxcImZpbGw6I2MxYzFjMTtvcGFjaXR5OjAuNDU7aXNvbGF0aW9uOmlzb2xhdGVcXFwiLz48cGF0aCBkPVxcXCJNMTUuOTc1LDEwaDlsLTQuNS04aC05WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MxYzFjMTtvcGFjaXR5OjAuNjtpc29sYXRpb246aXNvbGF0ZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wMjIsMjJoLTlsNC41LDhoOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMWMxYzE7b3BhY2l0eTowLjY7aXNvbGF0aW9uOmlzb2xhdGVcXFwiLz48cGF0aCBkPVxcXCJNMTEuNDc3LDE4bDQuNS04LTQuNS04LTQuNSw4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MxYzFjMTtvcGFjaXR5OjAuODtpc29sYXRpb246aXNvbGF0ZVxcXCIvPjxwYXRoIGQ9XFxcIk0yMC41MiwxNGwtNC41LDgsNC41LDgsNC41LThaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzFjMWMxO29wYWNpdHk6MC44O2lzb2xhdGlvbjppc29sYXRlXFxcIi8+XCIsXG5cdFwiU29sdXRpb24gZmlsZVwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjE2XFxcIiB5MT1cXFwiLTE4Mi4wNzJcXFwiIHgyPVxcXCIxNlxcXCIgeTI9XFxcIi0yMDkuOTI4XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEsIDAsIDAsIC0xLCAwLCAtMTgwKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9zbG48L3RpdGxlPjxwYXRoIGQ9XFxcIk02LjA0NSwyMy45OTFhMS4xNjYsMS4xNjYsMCwwLDEtMS4yMDguMTkxTDIuNzE4LDIzLjNBMS4xNjgsMS4xNjgsMCwwLDEsMiwyMi4yMjJWOS43NzhBMS4xNjUsMS4xNjUsMCwwLDEsMi43MTgsOC43bDIuMTE5LS44ODNhMS4xNjksMS4xNjksMCwwLDEsMS4yMDguMTkxbC40NzYuNDA4QS42NDYuNjQ2LDAsMCwwLDUuNSw4Ljk0MlYyMy4wNThhLjY0Ni42NDYsMCwwLDAsMS4wMjEuNTI1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzUyMjE4YVxcXCIvPjxwYXRoIGQ9XFxcIk0yLjcxOCwyMy4zQTEuMTY5LDEuMTY5LDAsMCwxLDIsMjIuMjIydi0uMWEuNjc0LjY3NCwwLDAsMCwxLjE3NC40NTJMMjEuMjUsMi41ODNhMS43NDMsMS43NDMsMCwwLDEsMS45OS0uMzM4bDUuNzY5LDIuNzc4QTEuNzQ5LDEuNzQ5LDAsMCwxLDMwLDYuNnYuMDY3YTEuMSwxLjEsMCwwLDAtMS44LS44NTRMNi41MjEsMjMuNTgzbC0uNDc2LjQwOGExLjE2NiwxLjE2NiwwLDAsMS0xLjIwOC4xOTFaXFxcIiBzdHlsZT1cXFwiZmlsbDojNmMzM2FmXFxcIi8+PHBhdGggZD1cXFwiTTIuNzE4LDguN0ExLjE2OCwxLjE2OCwwLDAsMCwyLDkuNzc4di4xYS42NzQuNjc0LDAsMCwxLDEuMTc0LS40NTJMMjEuMjUsMjkuNDE2YTEuNzQzLDEuNzQzLDAsMCwwLDEuOTkuMzM4bDUuNzY5LTIuNzc4QTEuNzQ3LDEuNzQ3LDAsMCwwLDMwLDI1LjR2LS4wNjhhMS4xLDEuMSwwLDAsMS0xLjguODU1TDYuNTIxLDguNDE3bC0uNDc2LS40MDhhMS4xNjYsMS4xNjYsMCwwLDAtMS4yMDgtLjE5MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4NTRjYzdcXFwiLz48cGF0aCBkPVxcXCJNMjMuMjQsMjkuNzU1YTEuNzQzLDEuNzQzLDAsMCwxLTEuOTktLjMzOEExLjAyNSwxLjAyNSwwLDAsMCwyMywyOC42OTJWMy4zMDhhMS4wMjUsMS4wMjUsMCwwLDAtMS43NS0uNzI1LDEuNzQzLDEuNzQzLDAsMCwxLDEuOTktLjMzOGw1Ljc2OCwyLjc3NEExLjc0OSwxLjc0OSwwLDAsMSwzMCw2LjZWMjUuNDA1YTEuNzUxLDEuNzUxLDAsMCwxLS45OTEsMS41NzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojYjE3OWYxXFxcIi8+PGcgc3R5bGU9XFxcIm9wYWNpdHk6MC4yNVxcXCI+PHBhdGggZD1cXFwiTTIyLjA5MywyOS44ODNhMS43NCwxLjc0LDAsMCwwLDEuMTQ3LS4xMjhsNS43NjgtMi43NzRBMS43NDksMS43NDksMCwwLDAsMzAsMjUuNFY2LjZhMS43NSwxLjc1LDAsMCwwLS45OTItMS41NzdMMjMuMjQsMi4yNDVhMS43NDIsMS43NDIsMCwwLDAtMS45OS4zMzlsLTkuMywxMC4yODRMNi41MjEsOC40MTZsLS40NzYtLjQwOGExLjE2OCwxLjE2OCwwLDAsMC0xLjIwNy0uMTkxTDIuNzE5LDguN0ExLjE2NywxLjE2NywwLDAsMCwyLDkuNjg5YzAsLjAyOSwwLC4wNTksMCwuMDg4VjIyLjIyMWMwLC4wMywwLC4wNTksMCwuMDg4YTEuMTY3LDEuMTY3LDAsMCwwLC43MTUuOTg5bDIuMTE5Ljg4M2ExLjIyNiwxLjIyNiwwLDAsMCwuMTU1LjA1MiwxLjE2NSwxLjE2NSwwLDAsMCwxLjA1Mi0uMjQzbC40NzYtLjQwOCw1LjQzLTQuNDUyLDkuMywxMC4yODVBMS43MzMsMS43MzMsMCwwLDAsMjIuMDkzLDI5Ljg4M1pNMjMsMTAuMDcyLDE1Ljc3LDE2LDIzLDIxLjkyN1pNNS41LDEybDMuNjE5LDRMNS41LDIwWlxcXCIgc3R5bGU9XFxcImZpbGwtcnVsZTpldmVub2RkO2ZpbGw6dXJsKCNhKVxcXCIvPjwvZz5cIixcblx0XCJTUEFSUUxcIjogXCI8cGF0aCBkPVxcXCJNMjYuMjg0LDIwLjM2MWMtLjE2NS0uMDg0LS4zNTktLjE2NC0uNTIzLS4yNDhIMjUuOXMtMS4xNTgtLjUtMS4yNC00LjE3NmMtLjExMS0zLjY1NSwxLjEtNC4yODksMS4xLTQuMjg5YTQuOTYsNC45NiwwLDAsMCwyLjE3Ni0yLjE0Myw1LjEyMiw1LjEyMiwwLDAsMC0yLjEyMi02LjkyNyw1LjM0Miw1LjM0MiwwLDAsMC03LjEzOCwyLjE0Niw1LjA2Nyw1LjA2NywwLDAsMC0uNTIzLDMuMjE0TDE4LjEsNy44NTVzLjMsMS4zMTktMi44MzksMy4yNzJjLTMuMTE1LDEuOTUtNC41NDkuOTYyLTQuNTQ5Ljk2MmwuMDgyLjEzOGEyLjEzMSwyLjEzMSwwLDAsMC0uMjczLS4xNjcsNS4xMTcsNS4xMTcsMCwxLDAsLjgyNSw4LjUybC0uMDI1LjA1NXMxLjEyOS0uOTMzLDQuNDA3LjgyN2MyLjU5MiwxLjM3NCwyLjk3OSwyLjc0OCwzLjAzMywzLjI0YTUuMSw1LjEsMCwwLDAsMi43LDQuNyw1LjEyNCw1LjEyNCwwLDEsMCw0LjgyNS05LjA0MVptLTUuNzkuNjg1Yy0uNDEyLjEzOC0xLjYuMy00LjA3Ny0xLjAxNy0yLjctMS40NTQtMy4xMTUtMi42NjQtMy4xNjktMy4wMjFhNS40MDYsNS40MDYsMCwwLDAtLjA1Ny0xLjMxOWwuMDI5LjAyNlMxMywxNC41MzQsMTYuMDg0LDEyLjYzOWMyLjc1Ny0xLjcwNSw0LjAyNi0xLjM3NCw0LjI0NS0xLjI5M2EyLjgzLDIuODMsMCwwLDAsLjQ3LjI3Nyw0LjA4Miw0LjA4MiwwLDAsMCwuOTY0LjM4M2MuMzg3LjM1NywxLjA3NiwxLjM3NCwxLjE1OCw0LjFzLS43MTcsMy43NjQtMS4xNTgsNC4xMjFBNS4wNCw1LjA0LDAsMCwwLDIwLjQ5NCwyMS4wNDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMGM0NzljXFxcIi8+PHBhdGggZD1cXFwiTTIwLjEzNSw0LjIyOWEzLjg2MSwzLjg2MSwwLDAsMC0uMDgyLDUuMzg2Yy0uNzE3LS42ODUtLjY4OC0yLjExNy4wMjktMy40NjJhLjY3My42NzMsMCwwLDEsLjc0Ni0uMjc3Yy4wMjUsMCwuMDU0LjAyOS4wODIuMDI5YS45OTMuOTkzLDAsMCwwLC4yNzYuMDI2QTEuMDU2LDEuMDU2LDAsMCwwLDIyLjIsNC44MDVhLjkzNC45MzQsMCwwLDAtLjMtLjY4NWMxLjM4LS45MDcsMi45NS0xLjAxNywzLjYxLS40MTJoLjAyOUEzLjgyNiwzLjgyNiwwLDAsMCwyMC4xMzUsNC4yMjlaTTUuMTQ1LDEzLjg0NmEzLjg1OSwzLjg1OSwwLDAsMC0uMDgyLDUuMzg5Yy0uNzE3LS42ODktLjY5Mi0yLjExNy4wMjUtMy40NjVhLjY2OC42NjgsMCwwLDEsLjc0Ni0uMjczYy4wMjUsMCwuMDU0LjAyOS4wODIuMDI5YTEsMSwwLDAsMCwuMjc2LjAyNkExLjA1NiwxLjA1NiwwLDAsMCw3LjIxLDE0LjQyNWEuOTQ1Ljk0NSwwLDAsMC0uMy0uNjg5YzEuMzc3LS45MDcsMi45NDctMS4wMTcsMy42MS0uNDEyaC4wMjVBMy44NTIsMy44NTIsMCwwLDAsNS4xNDUsMTMuODQ2Wm0xNS44NzIsOC4xNjNhMy44NjUsMy44NjUsMCwwLDAtLjA4Miw1LjM4OWMtLjcxNy0uNjg5LS42ODgtMi4xMTcuMDI5LTMuNDY1YS42NjguNjY4LDAsMCwxLC43NDYtLjI3M2MuMDI1LDAsLjA1NC4wMjYuMDgyLjAyNmEuODg3Ljg4NywwLDAsMCwuMjc2LjAyOSwxLjA1NywxLjA1NywwLDAsMCwxLjAxOC0xLjEyNi45MzYuOTM2LDAsMCwwLS4zLS42ODljMS4zOC0uOTA3LDIuOTUtMS4wMTcsMy42MS0uNDEyaC4wMjlBMy44MjksMy44MjksMCwwLDAsMjEuMDE3LDIyLjAwOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0XCJTUUZcIjogXCI8cGF0aCBkPVxcXCJNMjUsMjMuNUg3YTUuMDE1LDUuMDE1LDAsMCwxLTUtNXYtNmE1LjAxNSw1LjAxNSwwLDAsMSw1LTVIMjVhNS4wMTUsNS4wMTUsMCwwLDEsNSw1djZhNS4wMTUsNS4wMTUsMCwwLDEtNSw1WlxcXCIvPjxwYXRoIGQ9XFxcIk03LDE5LjQ2MWE0LjgxLDQuODEsMCwwLDEtMS40MTQtLjIsNS4wNTIsNS4wNTIsMCwwLDEtMS4xMTEtLjQ3MmwtLjQuNDMyaC0uNUwzLjUsMTYuMDUySDRhOC40NjIsOC40NjIsMCwwLDAsLjQzMS45NTMsNC42MzgsNC42MzgsMCwwLDAsLjYwNi45LDMuMTc3LDMuMTc3LDAsMCwwLC44LjY3NSwxLjk4NSwxLjk4NSwwLDAsMCwxLjAyOS4yNiwxLjY3MiwxLjY3MiwwLDAsMCwxLjIxNi0uNDExQTEuMzgyLDEuMzgyLDAsMCwwLDguNSwxNy4zOTFhMS4xNTYsMS4xNTYsMCwwLDAtLjM1OS0uODYyLDIuOTQ1LDIuOTQ1LDAsMCwwLTEuMTExLS42cS0uNDktLjE2Ny0uOS0uMzF0LS43NzMtLjI5MmEyLjU4LDIuNTgsMCwwLDEtMS4yMzktMS4wMDcsMi43MywyLjczLDAsMCwxLS40MDUtMS40NjUsMi40MDYsMi40MDYsMCwwLDEsLjIxLS45ODYsMi42MDgsMi42MDgsMCwwLDEsLjYxMi0uODUsMi45NjcsMi45NjcsMCwwLDEsLjk4NS0uNTc1LDMuNzIyLDMuNzIyLDAsMCwxLDEuMzA2LS4yMjMsMy45ODQsMy45ODQsMCwwLDEsMS4yODguMiw1LjE1MSw1LjE1MSwwLDAsMSwuOTQ0LjQwOGwuMzU2LS4zN2guNTA3bC4wNDcsMi45ODhoLS41cS0uMTc1LS40ODMtLjQxMS0uOTg3YTQuMzMyLDQuMzMyLDAsMCwwLS41LS44MzksMi4zLDIuMywwLDAsMC0uNjU5LS41NzMsMS43MjksMS43MjksMCwwLDAtLjg3NS0uMjE0QTEuNDM3LDEuNDM3LDAsMCwwLDYsMTEuMjEyYTEuMjMzLDEuMjMzLDAsMCwwLS40LjkzNCwxLjE0MSwxLjE0MSwwLDAsMCwuMzQ3Ljg2LDIuOTUxLDIuOTUxLDAsMCwwLDEuMDgyLjU4OHEuNDMxLjE1NC44OC4zMDl0LjguM2EyLjg4NSwyLjg4NSwwLDAsMSwxLjI4Ni45NTUsMi41MTIsMi41MTIsMCwwLDEsLjQ0LDEuNTEyLDIuNjMyLDIuNjMyLDAsMCwxLS45MjcsMS45ODUsMy4zNjcsMy4zNjcsMCwwLDEtMS4wNzkuNkE0LjM5MSw0LjM5MSwwLDAsMSw3LDE5LjQ2MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz48cGF0aCBkPVxcXCJNMTguOTIxLDExLjQzNGE0LjMzOCw0LjMzOCwwLDAsMSwuOTcxLDEuNDMyLDQuODM0LDQuODM0LDAsMCwxLC4zNTksMS45MTQsNC45NTgsNC45NTgsMCwwLDEtLjcyLDIuNjgsNC4wMzYsNC4wMzYsMCwwLDEtMi4wMzgsMS42NjEsMi4xNTEsMi4xNTEsMCwwLDAsLjQyLDEuMjcyLDEuMTY4LDEuMTY4LDAsMCwwLC45NS41MzcsMy41NjMsMy41NjMsMCwwLDAsLjU5Mi0uMDQzcS4yNTQtLjA0My40NTgtLjF2LjU0M2E1Ljc1Myw1Ljc1MywwLDAsMS0uOTg1LjMsNi4wNTQsNi4wNTQsMCwwLDEtMS4zNy4xNTEsMi4yMDYsMi4yMDYsMCwwLDEtMS42MTItLjYyMSwyLjU3NCwyLjU3NCwwLDAsMS0uNzA4LTEuNzMyQTQuNTc5LDQuNTc5LDAsMCwxLDEzLjcsMTlhNC4xODYsNC4xODYsMCwwLDEtMS4yNTMtLjkzMiw0LjM4OCw0LjM4OCwwLDAsMS0uODQyLTEuMzc3LDQuNzY5LDQuNzY5LDAsMCwxLS4zMTItMS43NTMsNS4yMzcsNS4yMzcsMCwwLDEsLjM0Ny0xLjk0OCw0LjUsNC41LDAsMCwxLC45NTMtMS41LDQuMTE5LDQuMTE5LDAsMCwxLDEuNDI1LS45NDIsNC44Niw0Ljg2LDAsMCwxLDMuNS0uMDA5QTQuMjQ3LDQuMjQ3LDAsMCwxLDE4LjkyMSwxMS40MzRabS0xLjUsNi4yNjZhNC44NTcsNC44NTcsMCwwLDAsLjM3OS0xLjI3Myw5Ljk4MSw5Ljk4MSwwLDAsMCwuMTE3LTEuNjA2LDEwLjUzNCwxMC41MzQsMCwwLDAtLjEtMS40OCw0LjkzNiw0LjkzNiwwLDAsMC0uMzQ3LTEuMjgyLDIuNDEsMi40MSwwLDAsMC0uNjY1LS45LDEuNTcxLDEuNTcxLDAsMCwwLTEuMDMyLS4zNCwxLjczLDEuNzMsMCwwLDAtMS42LDEuMDYsNi42MzQsNi42MzQsMCwwLDAtLjU0OCwyLjk5Myw5LjU4Myw5LjU4MywwLDAsMCwuMTIsMS41NTEsNC44LDQuOCwwLDAsMCwuMzc2LDEuMjczLDIuMjg2LDIuMjg2LDAsMCwwLC42NjUuODU2LDEuNTkxLDEuNTkxLDAsMCwwLC45OTEuMzA2LDEuNjExLDEuNjExLDAsMCwwLC45OTEtLjMwOUEyLjEzNSwyLjEzNSwwLDAsMCwxNy40MjMsMTcuN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz48cGF0aCBkPVxcXCJNMjguNSwxMi44aC0uNDU1YTMuOTMsMy45MywwLDAsMC0uNi0xLjA4NiwxLjM4NSwxLjM4NSwwLDAsMC0uODEyLS42M2MtLjExNi0uMDE2LS4yNzItLjAzMS0uNDY1LS4wNDNzLS4zNzMtLjAxOS0uNTM1LS4wMTlIMjQuMzQ5djMuNDMzaC44MjJhMS45NjksMS45NjksMCwwLDAsLjYwNi0uMDgzLDEuMDU0LDEuMDU0LDAsMCwwLC40NTUtLjMsMS41OTEsMS41OTEsMCwwLDAsLjI4My0uNTE2LDIuNjM1LDIuNjM1LDAsMCwwLC4xNjYtLjYyMWguNDQzdjMuNjg2aC0uNDQzYTIuNDcxLDIuNDcxLDAsMCwwLS4xODEtLjY3NiwyLjA5NCwyLjA5NCwwLDAsMC0uMjY4LS41MjgsMS4wMTIsMS4wMTIsMCwwLDAtLjQzMS0uMjkzLDEuODQyLDEuODQyLDAsMCwwLS42My0uMWgtLjgyMnYyLjlhLjg0Mi44NDIsMCwwLDAsLjA3OS4zOC41OC41OCwwLDAsMCwuMy4yNTYsMS44NywxLjg3LDAsMCwwLC4zNTMuMXEuMjI0LjA0Ni40NDYuMDcxdi40ODJoLTQuNDZ2LS40ODJsLjQ0OS0uMDUyYTEuNTI1LDEuNTI1LDAsMCwwLC4zOTEtLjA4My41NDcuNTQ3LDAsMCwwLC4yOTItLjI0MS44NDIuODQyLDAsMCwwLC4wODItLjR2LTYuMThhLjg2Ny44NjcsMCwwLDAtLjA3My0uMzY3LjU3NS41NzUsMCwwLDAtLjMtLjI2MiwyLjM0MSwyLjM0MSwwLDAsMC0uNDMxLS4xMzZxLS4yNjgtLjA2Mi0uNDA4LS4wOHYtLjQ4MkgyOC41WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPlwiLFxuXHRcIlNRRjogU3RhdHVzIFF1byBGdW5jdGlvbiAoQXJtYSAzKVwiOiBcIjxwYXRoIGQ9XFxcIk0yNSwyMy41SDdhNS4wMTUsNS4wMTUsMCwwLDEtNS01di02YTUuMDE1LDUuMDE1LDAsMCwxLDUtNUgyNWE1LjAxNSw1LjAxNSwwLDAsMSw1LDV2NmE1LjAxNSw1LjAxNSwwLDAsMS01LDVaXFxcIi8+PHBhdGggZD1cXFwiTTcsMTkuNDYxYTQuODEsNC44MSwwLDAsMS0xLjQxNC0uMiw1LjA1Miw1LjA1MiwwLDAsMS0xLjExMS0uNDcybC0uNC40MzJoLS41TDMuNSwxNi4wNTJINGE4LjQ2Miw4LjQ2MiwwLDAsMCwuNDMxLjk1Myw0LjYzOCw0LjYzOCwwLDAsMCwuNjA2LjksMy4xNzcsMy4xNzcsMCwwLDAsLjguNjc1LDEuOTg1LDEuOTg1LDAsMCwwLDEuMDI5LjI2LDEuNjcyLDEuNjcyLDAsMCwwLDEuMjE2LS40MTFBMS4zODIsMS4zODIsMCwwLDAsOC41LDE3LjM5MWExLjE1NiwxLjE1NiwwLDAsMC0uMzU5LS44NjIsMi45NDUsMi45NDUsMCwwLDAtMS4xMTEtLjZxLS40OS0uMTY3LS45LS4zMXQtLjc3My0uMjkyYTIuNTgsMi41OCwwLDAsMS0xLjIzOS0xLjAwNywyLjczLDIuNzMsMCwwLDEtLjQwNS0xLjQ2NSwyLjQwNiwyLjQwNiwwLDAsMSwuMjEtLjk4NiwyLjYwOCwyLjYwOCwwLDAsMSwuNjEyLS44NSwyLjk2NywyLjk2NywwLDAsMSwuOTg1LS41NzUsMy43MjIsMy43MjIsMCwwLDEsMS4zMDYtLjIyMywzLjk4NCwzLjk4NCwwLDAsMSwxLjI4OC4yLDUuMTUxLDUuMTUxLDAsMCwxLC45NDQuNDA4bC4zNTYtLjM3aC41MDdsLjA0NywyLjk4OGgtLjVxLS4xNzUtLjQ4My0uNDExLS45ODdhNC4zMzIsNC4zMzIsMCwwLDAtLjUtLjgzOSwyLjMsMi4zLDAsMCwwLS42NTktLjU3MywxLjcyOSwxLjcyOSwwLDAsMC0uODc1LS4yMTRBMS40MzcsMS40MzcsMCwwLDAsNiwxMS4yMTJhMS4yMzMsMS4yMzMsMCwwLDAtLjQuOTM0LDEuMTQxLDEuMTQxLDAsMCwwLC4zNDcuODYsMi45NTEsMi45NTEsMCwwLDAsMS4wODIuNTg4cS40MzEuMTU0Ljg4LjMwOXQuOC4zYTIuODg1LDIuODg1LDAsMCwxLDEuMjg2Ljk1NSwyLjUxMiwyLjUxMiwwLDAsMSwuNDQsMS41MTIsMi42MzIsMi42MzIsMCwwLDEtLjkyNywxLjk4NSwzLjM2NywzLjM2NywwLDAsMS0xLjA3OS42QTQuMzkxLDQuMzkxLDAsMCwxLDcsMTkuNDYxWlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPjxwYXRoIGQ9XFxcIk0xOC45MjEsMTEuNDM0YTQuMzM4LDQuMzM4LDAsMCwxLC45NzEsMS40MzIsNC44MzQsNC44MzQsMCwwLDEsLjM1OSwxLjkxNCw0Ljk1OCw0Ljk1OCwwLDAsMS0uNzIsMi42OCw0LjAzNiw0LjAzNiwwLDAsMS0yLjAzOCwxLjY2MSwyLjE1MSwyLjE1MSwwLDAsMCwuNDIsMS4yNzIsMS4xNjgsMS4xNjgsMCwwLDAsLjk1LjUzNywzLjU2MywzLjU2MywwLDAsMCwuNTkyLS4wNDNxLjI1NC0uMDQzLjQ1OC0uMXYuNTQzYTUuNzUzLDUuNzUzLDAsMCwxLS45ODUuMyw2LjA1NCw2LjA1NCwwLDAsMS0xLjM3LjE1MSwyLjIwNiwyLjIwNiwwLDAsMS0xLjYxMi0uNjIxLDIuNTc0LDIuNTc0LDAsMCwxLS43MDgtMS43MzJBNC41NzksNC41NzksMCwwLDEsMTMuNywxOWE0LjE4Niw0LjE4NiwwLDAsMS0xLjI1My0uOTMyLDQuMzg4LDQuMzg4LDAsMCwxLS44NDItMS4zNzcsNC43NjksNC43NjksMCwwLDEtLjMxMi0xLjc1Myw1LjIzNyw1LjIzNywwLDAsMSwuMzQ3LTEuOTQ4LDQuNSw0LjUsMCwwLDEsLjk1My0xLjUsNC4xMTksNC4xMTksMCwwLDEsMS40MjUtLjk0Miw0Ljg2LDQuODYsMCwwLDEsMy41LS4wMDlBNC4yNDcsNC4yNDcsMCwwLDEsMTguOTIxLDExLjQzNFptLTEuNSw2LjI2NmE0Ljg1Nyw0Ljg1NywwLDAsMCwuMzc5LTEuMjczLDkuOTgxLDkuOTgxLDAsMCwwLC4xMTctMS42MDYsMTAuNTM0LDEwLjUzNCwwLDAsMC0uMS0xLjQ4LDQuOTM2LDQuOTM2LDAsMCwwLS4zNDctMS4yODIsMi40MSwyLjQxLDAsMCwwLS42NjUtLjksMS41NzEsMS41NzEsMCwwLDAtMS4wMzItLjM0LDEuNzMsMS43MywwLDAsMC0xLjYsMS4wNiw2LjYzNCw2LjYzNCwwLDAsMC0uNTQ4LDIuOTkzLDkuNTgzLDkuNTgzLDAsMCwwLC4xMiwxLjU1MSw0LjgsNC44LDAsMCwwLC4zNzYsMS4yNzMsMi4yODYsMi4yODYsMCwwLDAsLjY2NS44NTYsMS41OTEsMS41OTEsMCwwLDAsLjk5MS4zMDYsMS42MTEsMS42MTEsMCwwLDAsLjk5MS0uMzA5QTIuMTM1LDIuMTM1LDAsMCwwLDE3LjQyMywxNy43WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPjxwYXRoIGQ9XFxcIk0yOC41LDEyLjhoLS40NTVhMy45MywzLjkzLDAsMCwwLS42LTEuMDg2LDEuMzg1LDEuMzg1LDAsMCwwLS44MTItLjYzYy0uMTE2LS4wMTYtLjI3Mi0uMDMxLS40NjUtLjA0M3MtLjM3My0uMDE5LS41MzUtLjAxOUgyNC4zNDl2My40MzNoLjgyMmExLjk2OSwxLjk2OSwwLDAsMCwuNjA2LS4wODMsMS4wNTQsMS4wNTQsMCwwLDAsLjQ1NS0uMywxLjU5MSwxLjU5MSwwLDAsMCwuMjgzLS41MTYsMi42MzUsMi42MzUsMCwwLDAsLjE2Ni0uNjIxaC40NDN2My42ODZoLS40NDNhMi40NzEsMi40NzEsMCwwLDAtLjE4MS0uNjc2LDIuMDk0LDIuMDk0LDAsMCwwLS4yNjgtLjUyOCwxLjAxMiwxLjAxMiwwLDAsMC0uNDMxLS4yOTMsMS44NDIsMS44NDIsMCwwLDAtLjYzLS4xaC0uODIydjIuOWEuODQyLjg0MiwwLDAsMCwuMDc5LjM4LjU4LjU4LDAsMCwwLC4zLjI1NiwxLjg3LDEuODcsMCwwLDAsLjM1My4xcS4yMjQuMDQ2LjQ0Ni4wNzF2LjQ4MmgtNC40NnYtLjQ4MmwuNDQ5LS4wNTJhMS41MjUsMS41MjUsMCwwLDAsLjM5MS0uMDgzLjU0Ny41NDcsMCwwLDAsLjI5Mi0uMjQxLjg0Mi44NDIsMCwwLDAsLjA4Mi0uNHYtNi4xOGEuODY3Ljg2NywwLDAsMC0uMDczLS4zNjcuNTc1LjU3NSwwLDAsMC0uMy0uMjYyLDIuMzQxLDIuMzQxLDAsMCwwLS40MzEtLjEzNnEtLjI2OC0uMDYyLS40MDgtLjA4di0uNDgySDI4LjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+XCIsXG5cdFwiU1FMXCI6IFwiPHBhdGggZD1cXFwiTTguNTYyLDE1LjI1NkEyMS4xNTksMjEuMTU5LDAsMCwwLDE2LDE2LjQ0OWEyMS4xNTksMjEuMTU5LDAsMCwwLDcuNDM4LTEuMTk0YzEuODY0LS43MjcsMi41MjUtMS41MzUsMi41MjUtMlY5LjdhMTAuMzU3LDEwLjM1NywwLDAsMS0yLjA4NCwxLjA3NkEyMi4yOTMsMjIuMjkzLDAsMCwxLDE2LDEyLjA3OGEyMi4zNiwyMi4zNiwwLDAsMS03Ljg3OS0xLjNBMTAuMjgsMTAuMjgsMCwwLDEsNi4wMzcsOS43djMuNTVDNi4wMzcsMTMuNzI0LDYuNywxNC41MjgsOC41NjIsMTUuMjU2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZGE0NFxcXCIvPjxwYXRoIGQ9XFxcIk04LjU2MiwyMS45NjFhMTUuNjExLDE1LjYxMSwwLDAsMCwyLjYuNzQxQTI0LjksMjQuOSwwLDAsMCwxNiwyMy4xNTVhMjQuOSwyNC45LDAsMCwwLDQuODM4LS40NTIsMTUuNjE0LDE1LjYxNCwwLDAsMCwyLjYtLjc0MWMxLjg2NC0uNzI3LDIuNTI1LTEuNTM1LDIuNTI1LTJ2LTMuMzlhMTAuNzA2LDEwLjcwNiwwLDAsMS0xLjY5Mi44MjVBMjMuNDksMjMuNDksMCwwLDEsMTYsMTguNzRhMjMuNDksMjMuNDksMCwwLDEtOC4yNzEtMS4zNDgsMTAuODI5LDEwLjgyOSwwLDAsMS0xLjY5Mi0uODI1VjE5Ljk2QzYuMDM3LDIwLjQyNiw2LjcsMjEuMjMxLDguNTYyLDIxLjk2MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmRhNDRcXFwiLz48cGF0aCBkPVxcXCJNMTYsMzBjNS41LDAsOS45NjMtMS43NDQsOS45NjMtMy44OTRWMjMuMjY5YTEwLjUsMTAuNSwwLDAsMS0xLjUzNS43NjJsLS4xNTcuMDYzQTIzLjQ4NywyMy40ODcsMCwwLDEsMTYsMjUuNDQ1YTIzLjQyMiwyMy40MjIsMCwwLDEtOC4yNzEtMS4zNTFjLS4wNTQtLjAyLS4xMDYtLjA0My0uMTU3LS4wNjNhMTAuNSwxMC41LDAsMCwxLTEuNTM1LS43NjJ2Mi44MzdDNi4wMzcsMjguMjU2LDEwLjUsMzAsMTYsMzBaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZkYTQ0XFxcIi8+PGVsbGlwc2UgY3g9XFxcIjE2XFxcIiBjeT1cXFwiNS44OTRcXFwiIHJ4PVxcXCI5Ljk2M1xcXCIgcnk9XFxcIjMuODk0XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZkYTQ0XFxcIi8+XCIsXG5cdFwiU3F1aXJyZWxcIjogXCI8cGF0aCBkPVxcXCJNMTIuOTY2LDI3LjNhMTguOTI2LDE4LjkyNiwwLDAsMS01LjcwNy0uOTE1Yy0xLjgzMi0uNTkyLTQuMDQ0LTEuNTQtNC45MzEtMy42NDVhLjU1Ny41NTcsMCwwLDEtLjAyNS0uMDczLDEyLjIxNCwxMi4yMTQsMCwwLDEsLjc2My03LjUzMWMxLjUyMi00LjAwOCwzLjcxLTYuNzM5LDYuNS04LjExNmExMC40MjIsMTAuNDIyLDAsMCwxLDcuNi0uNTUsMTAuNDI2LDEwLjQyNiwwLDAsMSw2LjA0LDQuNjM5LDExLjA1NywxMS4wNTcsMCwwLDEsMS4wNTgsMi4zMjYsMTAuNjYsMTAuNjYsMCwwLDEtNS4zNzgsMTIuNjg5bC0uMDIuMDA5QTE0LjgzMiwxNC44MzIsMCwwLDEsMTIuOTY2LDI3LjNaXFxcIi8+PHBhdGggZD1cXFwiTTIyLjcyLDExLjM5M2ExMC4xNDQsMTAuMTQ0LDAsMCwwLTEyLjktMy44NjlDNi43LDkuMDYxLDQuNzg0LDEyLjIsMy41OTMsMTUuMzM0YTExLjksMTEuOSwwLDAsMC0uNzQ2LDcuMTg3Yy43ODMsMS44NiwyLjc3OSwyLjc0NCw0LjU4MiwzLjMyN2ExNi4yMDYsMTYuMjA2LDAsMCwwLDExLjIxMy0uMjMyQTEwLjExLDEwLjExLDAsMCwwLDIzLjcyNywxMy42LDEwLjQ4OCwxMC40ODgsMCwwLDAsMjIuNzIsMTEuMzkzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2EwNWEyY1xcXCIvPjxwYXRoIGQ9XFxcIk0xNS43ODIsNi43MkE4LjI2Myw4LjI2MywwLDAsMSwxNy42NCw4LjA4NCw5LjY1LDkuNjUsMCwwLDEsMTkuMDgsOS44YTkuMzE3LDkuMzE3LDAsMCwxLTEuNTMxLDExLjkyMUExNC45MzMsMTQuOTMzLDAsMCwxLDcuNjU2LDI0LjdhNy41ODEsNy41ODEsMCwwLDEtNC4xMzUtMS4xLDguNDU0LDguNDU0LDAsMCwwLDMuOTA3LDIuMjQxLDE2LjIwOCwxNi4yMDgsMCwwLDAsMTEuMjE0LS4yMzNBMTAuMTEyLDEwLjExMiwwLDAsMCwyMy43MjcsMTMuNmExMC40ODcsMTAuNDg3LDAsMCwwLTEuMDA3LTIuMjExQTkuOTczLDkuOTczLDAsMCwwLDE1Ljc4Miw2LjcyWlxcXCIgc3R5bGU9XFxcImZpbGwtb3BhY2l0eTowLjMxMzcyNTUwMTI5ODkwNDRcXFwiLz48cGF0aCBkPVxcXCJNMjMuNDc2LDEzLjM4OWwtMS4wNjItMi44OTUuMTUyLS4yMzZBNi44NzUsNi44NzUsMCwwLDEsMjcuNTA5LDcuN2EyLjE3NywyLjE3NywwLDAsMSwxLjg3OS41ODgsMy4zNzYsMy4zNzYsMCwwLDEsLjEsMy43MjljLS4zNDMuMjkyLS43NTEuMTI0LTEuMjIyLS4wN2EyLjgyMSwyLjgyMSwwLDAsMC0yLjEzMy0uMjcsMTAuMiwxMC4yLDAsMCwwLTIuMDQ3LDEuMjA5WlxcXCIvPjxwYXRoIGQ9XFxcIk0yMy4wMzksMTAuNTYzYzEuMjIzLTEuOSw1LjEwNy0yLjkxNSw1LjkxMi0xLjkyM2EyLjk3LDIuOTcsMCwwLDEsLjE3NywyLjk0NWMtLjI0NS4yMDctMS44MzctMS4wNTktMy4yMjUtLjQyM0ExMC41NzQsMTAuNTc0LDAsMCwwLDIzLjczLDEyLjQ1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzUwMmQxNlxcXCIvPjxwYXRoIGQ9XFxcIk0yOS40LDkuNzI3YS44LjgsMCwwLDEtLjIuNDY5Yy0uMjI5LjE2Mi0xLjktLjUwNi0zLjIzOC4wNTZhMTIuNDM5LDEyLjQzOSwwLDAsMC0yLjA3MSwxLjA3TDIzLjIsMTAuMzRjLS4wNTcuMDc0LS4xMTYuMTQ3LS4xNjUuMjIzbC42OTIsMS44ODZBMTAuNTc3LDEwLjU3NywwLDAsMSwyNS45LDExLjE2MmMxLjM4OC0uNjM2LDIuOTguNjMxLDMuMjI1LjQyM0EyLjg0NiwyLjg0NiwwLDAsMCwyOS40LDkuNzI3WlxcXCIgc3R5bGU9XFxcImZpbGwtb3BhY2l0eTowLjMxMzcyNTUwMTI5ODkwNDRcXFwiLz48cGF0aCBkPVxcXCJNMjEuMzgyLDI1LjE4YTIuMjM2LDIuMjM2LDAsMCwxLTEuMTQ3LS4zMjMuNTYzLjU2MywwLDAsMS0uMDgyLS44ODhjLjczNy0uNjg0LjYwNy0yLjE3My0uNDEtNC42ODlhMzYuNTI2LDM2LjUyNiwwLDAsMC01LjEyMy04LjgyNWwtLjM1LS40M2MtMS41MTItMS44NjUtMi4zNTgtMi44MTUtMy41NTQtMi4zYS41NjIuNTYyLDAsMCwxLS40MTMuMDE2LjU3MS41NzEsMCwwLDEtLjM3Ny0uNTkyLDIuMTE5LDIuMTE5LDAsMCwxLDEuNDYxLTJjNC43MTYtMS40ODEsMTAuMjYuODE0LDEyLjkwNSw1LjM0NGExMS4yLDExLjIsMCwwLDEtMS40MzEsMTMuOTkxQTEuOTE5LDEuOTE5LDAsMCwxLDIxLjM4MiwyNS4xOFpcXFwiLz48cGF0aCBkPVxcXCJNMjMuODEyLDEwLjc4M2MtMi40NDQtNC4xOTItNy43My02LjUyOC0xMi4yNy01LjA5My0xLjAwNy4yNDgtMS4wNjUsMS41MzUtMS4wNTIsMS41MTcsMS43NzYtLjc2NywyLjk1My45MTksNC41NjYsMi44OWEzNi45LDM2LjksMCwwLDEsNS4yMDksOC45NzFjLjg5LDIuMiwxLjQsNC4yNjcuMjcsNS4zMTJhMS41LDEuNSwwLDAsMCwxLjkwOS0uMjc0QTEwLjY0NiwxMC42NDYsMCwwLDAsMjMuODEyLDEwLjc4M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MDJkMTZcXFwiLz48cGF0aCBkPVxcXCJNMjMuNjQ5LDEwLjM0NmE5LjMxNCw5LjMxNCwwLDAsMS0yLjUxOCw3LjcyNWMtLjQ1NS40ODYtLjg3My4xNzctMS4yNjMuMDYzLjEzOC4zMTMuMjcxLjYyNi40LjkzNi44OSwyLjIsMS40LDQuMjY2LjI3MSw1LjMxMmExLjUsMS41LDAsMCwwLDEuOTA5LS4yNzRDMjYuMDg5LDIwLjE4MywyNi4zNTcsMTQuOTE5LDIzLjY0OSwxMC4zNDZaXFxcIiBzdHlsZT1cXFwiZmlsbC1vcGFjaXR5OjAuMzEzNzI1NTAxMjk4OTA0NFxcXCIvPlwiLFxuXHRcIlN0YW5cIjogXCI8dGl0bGU+ZmlsZV90eXBlX3N0YW48L3RpdGxlPjxwYXRoIGQ9XFxcIk0xNiwyQTE0LDE0LDAsMCwwLDUuNjg4LDI1LjQ2OWMxLjctLjUxNCwzLjQxMS0uOTkyLDQuODA2LTEuMzU3LDQuMDM3LTEuMDU0LDEwLjk0OC0yLjgzNiwxMS45NDYtNS4wODItLjI4Ljc4LTEuMjE4LDIuODctMS4yMTgsMi44Ny0xLjI3OSwxLjI0Ny03LjA5LDIuNjMxLTEwLjkxNywzLjM2Ny0xLjIyLjIzNS0yLjYxNC41MDctNC4wMjYuODA2QTE0LDE0LDAsMCwwLDI4LjQ2Nyw5LjYyOGMtMi41MjYuNDA4LTEwLjUsMS44NTQtMTIuNTM5LDIuMzE1LTIuMjU1LjUwOS02Ljc4OSwxLjQzMy03LjY5NCwyLjk5M0M4LjgsMTMuNSwxMC40OTIsOS43NDQsMTAuNDkyLDkuNzQ0YzEuMjE2LTIsNi42LTMuNDI1LDEwLjM1OC00LjQ2My44NzYtLjI0MiwxLjkyMi0uNTM5LDMuMDIzLS44NThBMTMuOTM0LDEzLjkzNCwwLDAsMCwxNiwyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2IyMDAxZFxcXCIvPjxwYXRoIGQ9XFxcIk04LjIyMywxNC45ODdjLS4yNTIsMS4xNzUsMy41MiwyLjMxMyw2LjkyMSwzLjM4OWEyNi4zNjIsMjYuMzYyLDAsMCwxLDUuNjY3LDIuMTkyLDMuMDg1LDMuMDg1LDAsMCwwLDEuNjYyLTEuNjE0Yy4zNzctMS40ODktMy4wMTMtMy4zOTMtNS4yNzQtNC4yMjlhMzMuMzM3LDMzLjMzNywwLDAsMS00LjQwNy0yLjA0MmMtNC4zMTYsMS4xNDMtNC41NjksMi4zLTQuNTY5LDIuM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM1OTA4MTVcXFwiLz5cIixcblx0XCJTdGF0YSBBZG9cIjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIxNlxcXCIgeTE9XFxcIjJcXFwiIHgyPVxcXCIxNlxcXCIgeTI9XFxcIjMwXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjOGFhN2MwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjM2M2ZThmXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9zdGF0YTwvdGl0bGU+PHJlY3QgeD1cXFwiMlxcXCIgeT1cXFwiMlxcXCIgd2lkdGg9XFxcIjI4XFxcIiBoZWlnaHQ9XFxcIjI4XFxcIiByeD1cXFwiMS41NTZcXFwiIHJ5PVxcXCIxLjU1NlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxyZWN0IHg9XFxcIjEzLjE3MVxcXCIgeT1cXFwiNi4wMTVcXFwiIHdpZHRoPVxcXCI1Ljc1NlxcXCIgaGVpZ2h0PVxcXCI1Ljc1NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxyZWN0IHg9XFxcIjIwLjMyNlxcXCIgeT1cXFwiNi4wMTVcXFwiIHdpZHRoPVxcXCI1Ljc1NlxcXCIgaGVpZ2h0PVxcXCI1Ljc1NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxyZWN0IHg9XFxcIjIwLjMyNlxcXCIgeT1cXFwiMTMuMTcxXFxcIiB3aWR0aD1cXFwiNS43NTZcXFwiIGhlaWdodD1cXFwiNS43NTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cmVjdCB4PVxcXCIxMy4xNzFcXFwiIHk9XFxcIjEzLjE3MVxcXCIgd2lkdGg9XFxcIjUuNzU2XFxcIiBoZWlnaHQ9XFxcIjUuNzU2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHJlY3QgeD1cXFwiNi4wMTVcXFwiIHk9XFxcIjEzLjE3MVxcXCIgd2lkdGg9XFxcIjUuNzU2XFxcIiBoZWlnaHQ9XFxcIjUuNzU2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHJlY3QgeD1cXFwiNi4wMTVcXFwiIHk9XFxcIjIwLjMyNlxcXCIgd2lkdGg9XFxcIjUuNzU2XFxcIiBoZWlnaHQ9XFxcIjUuNzU2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHJlY3QgeD1cXFwiMTMuMTcxXFxcIiB5PVxcXCIyMC4zMjZcXFwiIHdpZHRoPVxcXCI1Ljc1NlxcXCIgaGVpZ2h0PVxcXCI1Ljc1NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcIlN0eWx1c1wiOiBcIjx0aXRsZT5maWxlX3R5cGVfc3R5bHVzPC90aXRsZT48cGF0aCBkPVxcXCJNNi4zMTUsMjAuNzc2Yy43MjYtLjg2OS44MTItMS43NjYuMjQ5LTMuNDMyLS4zNTYtMS4wNTQtLjk0Ny0xLjg2NS0uNTEzLTIuNTIxLjQ2My0uNywxLjQ0NS0uMDIxLjYyNy45MTFsLjE2NC4xMTRjLjk4My4xMTQsMS40NjctMS4yMzIuNzMzLTEuNjE2LTEuOTM3LTEuMDExLTMuNjMxLjkzMy0yLjg4NCwzLjE4My4zMi45NTQuNzY5LDEuOTY1LjQwNiwyLjc3QTEuNzk0LDEuNzk0LDAsMCwxLDMuNzczLDIxLjNjLS44NDcuMDQzLS4yODUtMS45LjY5MS0yLjM4NS4wODUtLjA0My4yMDYtLjEuMDkzLS4yNDJhMi4xMzQsMi4xMzQsMCwwLDAtMi4zMTQsMS4yQzEuMDYxLDIyLjEyMSw0LjQ4NSwyMi45NTQsNi4zMTUsMjAuNzc2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPjxwYXRoIGQ9XFxcIk0yNy40NjIsMTQuMTRjLjI3OC42ODQuNywxLjM2LjQ0OSwxLjk1OC0uMjA2LjUxMy0uNDc3LjcyNi0uNzc2Ljc3Ni0uNDIuMDcxLS4zMDYtMS4yNDYuNDEzLTEuNjM4LjA2NC0uMDM2LjE1Ny0uMjA2LjA3MS0uMzA2YTEuNjM2LDEuNjM2LDAsMCwwLTEuNy45NjFjLS44LDEuNjg3LDEuODIzLDIuMTUsMy4xMTIuNDkxLjUxMy0uNjYyLjUzNC0xLjMxNy4wNDMtMi41MDYtLjMxMy0uNzU1LS43OS0xLjMxNy0uNDkxLTEuODE2LjMyLS41MjcsMS4wODktLjA3MS41MTMuNjM0bC4xMjguMDcxYy43NDguMDQzLDEuMDU0LS45NTQuNDg0LTEuMkExLjgzNCwxLjgzNCwwLDAsMCwyNy40NjIsMTQuMTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+PHBhdGggZD1cXFwiTTE3Ljk1LDEyLjMzOGMtLjUyLS40MTMtMS45NzkuMjc4LTIuMzkyLDEuM2ExNi4yMTMsMTYuMjEzLDAsMCwxLTIuMDQzLDQuMDM3Yy0uOC44NzYtLjg3Ni4yLS44LS4zMDZBMTUuMzI3LDE1LjMyNywwLDAsMSwxNC43LDEyLjY1MmMtLjIzNS0uMzQ5LTEuNzczLS4zLTIuODQxLDEuMzYtLjQuNjI3LTEuMzEsMi43MTMtMi4zMjEsNC4zNTgtLjIyMS4zNTYtLjUuMTA3LS4yODUtLjcyNmEzOS44LDM5LjgsMCwwLDEsMS44NzMtNS42ODIsMzkuMDcyLDM5LjA3MiwwLDAsMSw2LjkyMS0uODE5Yy4yNjMtLjA3MS40NDEtLjMwNiwwLS4zMmE0Ni43NzgsNDYuNzc4LDAsMCwwLTYuNTkzLjQ0MSw0LjkyMyw0LjkyMywwLDAsMSwxLjQ0NS0xLjk0NCwxLjc4NywxLjc4NywwLDAsMC0yLjI2NC43MTksMTIuMjg3LDEyLjI4NywwLDAsMC0uODE5LDEuNDUzLDI0LjE5NCwyNC4xOTQsMCwwLDAtMy45OC44NjJjLS43ODMuMy0uNywxLjI0Ni0uMjIxLDEuMDY4YTMxLjYzMSwzMS42MzEsMCwwLDEsMy44MTYtMS4xLDMwLjI5MiwzMC4yOTIsMCwwLDAtMS44NjUsNS42ODJjLS40NDEsMi40OTIsMS4xLDIuNDc4LDEuODU4LDEuNS44MTktMS4wNzUsMi41MjgtNC44NTYsMi43OTEtNS4yNTUuMDc4LS4xMzUuMTg1LS4wNjQuMTI4LjA1Ny0xLjkwOCwzLjgwOS0xLjc0NCw1LjI4My0uMiw0Ljk1NmE0LjkyOSw0LjkyOSwwLDAsMCwyLjIxNC0xLjk2NWMuMDY0LS4xNS4yLS4xMzUuMTcxLS4wNzEtMS4yMSwzLjE0LTIuNzQ4LDUuNjgyLTMuNzgxLDYuNDc5LS45NC43MTktMS42MzgtLjg0LDEuNjg3LTMuMDc2LjQ5MS0uMzM1LjI2My0uNzktLjI5Mi0uNjM0aDBhMjkuNzkzLDI5Ljc5MywwLDAsMC04Ljc4NiwzLjMyNWMtLjE2NC4xMTQtLjMxMy4yMDYtLjMwNi40NDEuMDA3LjEzNS4yNDIuMDg1LjM1Ni4wMTRBMjIuNzcxLDIyLjc3MSwwLDAsMSwxMS4xLDIwLjlhLjE1OC4xNTgsMCwwLDAsLjExNC4wMDdjLjEyMS0uMDI4LjExNC4wMzYuMDM2LjA4NS0uMTc4LjEtLjM1Ni4xOTItLjQuMjA2LTEuNzY2LjY5MS0yLjgzNCwyLjIxNC0yLjQ1NiwyLjk5LjMyLjY2OSwyLjA1MS40MjcsMi44NjktLjAxNCwyLjAwOC0xLjA4OSwzLjQ2OC0zLjIyNSw0LjQ2NC02LjE3M0MxNi42LDE1LjM4NiwxNy42OTMsMTIuNDI0LDE3Ljk1LDEyLjMzOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz48cGF0aCBkPVxcXCJNMjkuNjIsMTguMzY5YTQ4LjE0NSw0OC4xNDUsMCwwLDAtMTMuNDI5Ljk2OGMtLjkyNi4yNDItLjY2OS43MzMtLjIuNjQxLjAwNywwLC4yMDYtLjA1LjIxNC0uMDVhNDIuMjc5LDQyLjI3OSwwLDAsMSwxMi4zNzUtLjI0MkMyOS4wMTQsMTkuNzY1LDMwLjMxNywxOC40NjIsMjkuNjIsMTguMzY5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPjxwYXRoIGQ9XFxcIk0xOC44NjEsMTcuOTg1Yy45MTEtLjQ1NiwyLjI2NC0zLjI3NSwzLjE1NC00LjgyLjA2NC0uMTE0LjE3OC0uMDIxLjExNC4wNTctMi4yNSwzLjg3My0xLjMsNC4zMjItLjQwNiw0LjI2NSwxLjE4OS0uMDcxLDIuMjg2LTEuNzgsMi41MjgtMi4xNjUuMS0uMTUuMTU3LS4wMjguMS4wNzgtLjA1Ny4xNzgtLjI2My40OTEtLjQ1Ni45MTktLjI3MS42MDUuMDE0Ljg0LjI0OS45NDcuMzcuMTc4LDEuMzgxLjA2NCwxLjUzOC0uNTU1LTEuMDExLS4wMjEsMS40MS00Ljc5MiwxLjY1OS01LjA4NGExLjcxOCwxLjcxOCwwLDAsMC0yLjIuOTc1Yy0xLjAxOCwyLjAxNS0xLjg3MywzLjYzOC0yLjQwNywzLjY2Ny0xLjA0LjA1NywxLjItNC40OTMsMS41NTktNC42MzUtLjIyMS0uMzItMS42MzgtLjE4NS0yLjQyOCwxLjA0LS4yODUuNDQxLTIuMDIyLDMuNTE3LTIuNDQ5LDQuMDIzLS43NTUuOS0uODEyLjEyOC0uNi0uNzY5YTEwLjU2OSwxMC41NjksMCwwLDEsLjM0OS0xLjEzMiw1LjMyNCw1LjMyNCwwLDAsMSwxLjM2LTEuODQ0YzIuMi0yLjQ0MiwzLjQ2LTQuNDIyLDIuOTYyLTUuMi0uNDQxLS42OTEtMS45MTUtLjM4NC0yLjg2MiwxLjA0LTEuNzQ0LDIuNjEzLTMuMzU0LDYuMTk1LTMuNTYsNy44MzJTMTguMDU2LDE4LjM4MywxOC44NjEsMTcuOTg1Wm0uOTI2LTQuNzkyYy4wNzgtLjE3OC4xMjgtLjIyOC4yNjMtLjUyN2gwQTI0LjkzNCwyNC45MzQsMCwwLDEsMjIuNDkyLDguMjhjLjQyLS40NDEsMS4wMTEuMTU3LS4wNTcsMS43OTRhMTYuNDYyLDE2LjQ2MiwwLDAsMS0yLjExNSwyLjY0MnYuMDA3Yy0uMi4yMjEtLjM3Ny40MDYtLjQ1Ni41MTNDMTkuODA4LDEzLjMwNywxOS43NDQsMTMuMjkyLDE5Ljc4NywxMy4xOTNaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+XCIsXG5cdFwiU1ZHXCI6IFwiPHBhdGggZD1cXFwiTTcuNjc0LDE0LjQ4OGEyLjIxOCwyLjIxOCwwLDEsMCwwLDMuMTM3SDI0LjMyNmEyLjIxOCwyLjIxOCwwLDEsMCwwLTMuMTM3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYjEzYjtzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6My43MzAwMDAwMTkwNzM0OXB4XFxcIi8+PHBhdGggZD1cXFwiTTExLjIyMiw5LjA2QTIuMjE4LDIuMjE4LDAsMSwwLDksMTEuMjc4TDIwLjc3OCwyMy4wNTJBMi4yMTgsMi4yMTgsMCwxLDAsMjMsMjAuODM0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYjEzYjtzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6My43MzAwMDAwMTkwNzM0OXB4XFxcIi8+PHBhdGggZD1cXFwiTTE3LjU2OCw3LjczYTIuMjE4LDIuMjE4LDAsMSwwLTMuMTM3LDBWMjQuMzgyYTIuMjE4LDIuMjE4LDAsMSwwLDMuMTM3LDBaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZiMTNiO3N0cm9rZTojMDAwO3N0cm9rZS13aWR0aDozLjczMDAwMDAxOTA3MzQ5cHhcXFwiLz48cGF0aCBkPVxcXCJNMjMsMTEuMjc4QTIuMjE4LDIuMjE4LDAsMSwwLDIwLjc3OCw5LjA2TDksMjAuODM0YTIuMjE4LDIuMjE4LDAsMSwwLDIuMjE4LDIuMjE4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYjEzYjtzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6My43MzAwMDAwMTkwNzM0OXB4XFxcIi8+PHBhdGggZD1cXFwiTTcuNjc0LDE0LjQ4OGEyLjIxOCwyLjIxOCwwLDEsMCwwLDMuMTM3SDI0LjMyNmEyLjIxOCwyLjIxOCwwLDEsMCwwLTMuMTM3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYjEzYlxcXCIvPjxwYXRoIGQ9XFxcIk0xMS4yMjIsOS4wNkEyLjIxOCwyLjIxOCwwLDEsMCw5LDExLjI3OEwyMC43NzgsMjMuMDUyQTIuMjE4LDIuMjE4LDAsMSwwLDIzLDIwLjgzNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmIxM2JcXFwiLz48cGF0aCBkPVxcXCJNMTcuNTY4LDcuNzNhMi4yMTgsMi4yMTgsMCwxLDAtMy4xMzcsMFYyNC4zODJhMi4yMTgsMi4yMTgsMCwxLDAsMy4xMzcsMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmIxM2JcXFwiLz48cGF0aCBkPVxcXCJNMjMsMTEuMjc4QTIuMjE4LDIuMjE4LDAsMSwwLDIwLjc3OCw5LjA2TDksMjAuODM0YTIuMjE4LDIuMjE4LDAsMSwwLDIuMjE4LDIuMjE4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYjEzYlxcXCIvPjxwYXRoIGQ9XFxcIk0yLDE2LjA1NkgzMFYyNS45NWE0LjAzNSw0LjAzNSwwLDAsMS00LjEwNiw0LjEwNkg2LjEwNkE0LjAzNSw0LjAzNSwwLDAsMSwyLDI1Ljk1WlxcXCIvPjxwYXRoIGQ9XFxcIk02LjIsMjMuMDQ1QTMuNjI4LDMuNjI4LDAsMSwxLDEyLjQsMjAuNDhIMTAuMjdBMS41LDEuNSwwLDEsMCw3LjcsMjEuNTQxaDBhMS42LDEuNiwwLDAsMCwxLjA2Mi40NDFoMGE0LjExOCw0LjExOCwwLDAsMSwyLjU2NiwxLjA2M2gwYTMuNjI4LDMuNjI4LDAsMSwxLTYuMTk0LDIuNTY1SDcuMjY0QTEuNSwxLjUsMCwxLDAsOS44MywyNC41NWgwYTEuOTQ4LDEuOTQ4LDAsMCwwLTEuMDYzLS40NGgwQTQuNDY1LDQuNDY1LDAsMCwxLDYuMiwyMy4wNDVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTE5LjY1MSwxNi44NTIsMTcuMDg1LDI5LjI0SDE0Ljk2TDEyLjQsMTYuODUySDE0LjUybDEuNSw3LjI1NSwxLjUtNy4yNTVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTIzLjI4LDIxLjk4M2gzLjYyOHYzLjYyOGgwYTMuNjI4LDMuNjI4LDAsMSwxLTcuMjU3LDBoMFYyMC40OGgwYTMuNjI4LDMuNjI4LDAsMCwxLDcuMjU3LDBIMjQuNzgzYTEuNSwxLjUsMCwxLDAtMy4wMDUsMHY1LjEzaDBhMS41LDEuNSwwLDAsMCwzLjAwNSwwaDB2LTEuNWgtMS41VjIxLjk4M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0XCJTd2lmdFwiOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi0xMzQuNDk0XFxcIiB5MT1cXFwiLTE3MS44MlxcXCIgeDI9XFxcIi0xMzQuNDk3XFxcIiB5Mj1cXFwiLTE3MS44OVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgyNDAsIDAsIDAsIC0yMDUuNiwgMzIyOTUsIC0zNTMxMi41ODUpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZjg4NTM1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmQyMjIxXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9zd2lmdDwvdGl0bGU+PHBhdGggZD1cXFwiTTE5LjQyMiw0LjAwN3M2LjIxNywzLjU1NCw3Ljg0NCw5LjJjMS40NjYsNS4xLjI5Miw3LjUzNC4yOTIsNy41MzRhOC45MTUsOC45MTUsMCwwLDEsMS43NDIsMi44LDQuODI1LDQuODI1LDAsMCwxLC4yOSw0LjQ1M3MtLjEtMi4wOC0zLjItMi41MTFjLTIuODQxLS40LTMuODc0LDIuMzY2LTkuMywyLjIzMkExOC40MzUsMTguNDM1LDAsMCwxLDIsMTkuMzU0QzQuNjUxLDIwLjgsOC4xMjQsMjMuMDQ1LDEyLjQ0OSwyMi43czUuMjI4LTEuNjc0LDUuMjI4LTEuNjc0QTY2LjksNjYuOSwwLDAsMSw0Ljg5MSw3LjY0M2MzLjQsMi44NDUsMTEuODIyLDguNTA3LDExLjYyNiw4LjM2M0E3NS44MjYsNzUuODI2LDAsMCwxLDguMDkyLDYuMjRTMjAuNzI4LDE2LjYyOSwyMS43NDUsMTYuNTYzYy40MTgtLjg2MSwyLjU3OS01LjMxOC0yLjMyNC0xMi41NTdaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+XCIsXG5cdFwiU3lzdGVtZCBjb25maWd1cmF0aW9uIGZpbGVcIjogXCI8cGF0aCBkPVxcXCJNMiwxMnY4SDUuMjU2VjE4Ljc2OUgzLjNWMTMuMjMxSDUuMjU2VjEyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0yNi43NDQsMTJ2MS4yMzFIMjguN3Y1LjUzOEgyNi43NDRWMjBIMzBWMTJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTE3LjYyOCwxNmw1LjIxLTIuNzY5djUuNTM4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzMwZDQ3NVxcXCIvPjxlbGxpcHNlIGN4PVxcXCIxMi4wOTNcXFwiIGN5PVxcXCIxNlxcXCIgcng9XFxcIjIuOTNcXFwiIHJ5PVxcXCIyLjc2OVxcXCIgc3R5bGU9XFxcImZpbGw6IzMwZDQ3NVxcXCIvPlwiLFxuXHRcIlQ0IHRlbXBsYXRpbmdcIjogXCI8cGF0aCBkPVxcXCJNMTkuNTQ1LDYuMDM1SDEzLjI3VjI0SDguM1Y2LjAzNUgyLjA1NVYyaDE3LjQ5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzFlODhlNVxcXCIvPjxwYXRoIGQ9XFxcIk0yNy41NjcsMTBWMjIuNjA4aDIuNFYyNS45aC0yLjRWMzBIMjMuNTUxVjI1LjlIMTQuODM0VjIyLjQ1NXExLjE1OC0xLjMsMi40LTIuODM4dDIuNC0zLjE3M3ExLjE1OC0xLjYzMiwyLjE1NS0zLjI4NUEzMi45MjUsMzIuOTI1LDAsMCwwLDIzLjQ4MSwxMFpNMTguNzgxLDIyLjYwOGg0Ljc3VjE1LjYyMXEtLjQ4OC45MDctMS4wNiwxLjgzNHQtMS4yLDEuODI3cS0uNjI4LjktMS4yNjksMS43NDNUMTguNzgxLDIyLjYwOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMxZTg4ZTVcXFwiLz5cIixcblx0XCJUNCBUZXh0IFRlbXBsYXRlcyAoQyMpXCI6IFwiPHBhdGggZD1cXFwiTTE5LjU0NSw2LjAzNUgxMy4yN1YyNEg4LjNWNi4wMzVIMi4wNTVWMmgxNy40OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMxZTg4ZTVcXFwiLz48cGF0aCBkPVxcXCJNMjcuNTY3LDEwVjIyLjYwOGgyLjRWMjUuOWgtMi40VjMwSDIzLjU1MVYyNS45SDE0LjgzNFYyMi40NTVxMS4xNTgtMS4zLDIuNC0yLjgzOHQyLjQtMy4xNzNxMS4xNTgtMS42MzIsMi4xNTUtMy4yODVBMzIuOTI1LDMyLjkyNSwwLDAsMCwyMy40ODEsMTBaTTE4Ljc4MSwyMi42MDhoNC43N1YxNS42MjFxLS40ODguOTA3LTEuMDYsMS44MzR0LTEuMiwxLjgyN3EtLjYyOC45LTEuMjY5LDEuNzQzVDE4Ljc4MSwyMi42MDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWU4OGU1XFxcIi8+XCIsXG5cdFwiVDQgVGV4dCBUZW1wbGF0ZXMgKFZCKVwiOiBcIjxwYXRoIGQ9XFxcIk0xOS41NDUsNi4wMzVIMTMuMjdWMjRIOC4zVjYuMDM1SDIuMDU1VjJoMTcuNDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWU4OGU1XFxcIi8+PHBhdGggZD1cXFwiTTI3LjU2NywxMFYyMi42MDhoMi40VjI1LjloLTIuNFYzMEgyMy41NTFWMjUuOUgxNC44MzRWMjIuNDU1cTEuMTU4LTEuMywyLjQtMi44Mzh0Mi40LTMuMTczcTEuMTU4LTEuNjMyLDIuMTU1LTMuMjg1QTMyLjkyNSwzMi45MjUsMCwwLDAsMjMuNDgxLDEwWk0xOC43ODEsMjIuNjA4aDQuNzdWMTUuNjIxcS0uNDg4LjkwNy0xLjA2LDEuODM0dC0xLjIsMS44MjdxLS42MjguOS0xLjI2OSwxLjc0M1QxOC43ODEsMjIuNjA4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzFlODhlNVxcXCIvPlwiLFxuXHRcIlRjbFwiOiBcIjxwYXRoIGQ9XFxcIk0yMS45NDIsMi44NzZjLjA0LDIuNDY4LS4wMzMsNC45MS0yLjE2OSw3LjIzbC0uMDc5LjA4OWguMTE5bC44NzMuMDEzYy0xLjQxOCwyLjk1LTIuMzQxLDUuODkyLTQuMzgsOC44M2wtLjA3My4xMDYuMTI2LS4wMjMsMS4wNzgtLjJhNS44NTEsNS44NTEsMCwwLDEtMy40ODQsMy42NWMtLjM5LTUuNDU1LDIuMzMzLTEwLjI3LDQuNjQ1LTE1LjA3MWwuMDA3LS4wMTMtLjA4Ni0uMDZjLTMuNzg2LDQuMjMzLTUuNDkxLDEwLjItNi4xMzYsMTUuMTI3YTQuNTgyLDQuNTgyLDAsMCwxLTIuMTQ1LTIuOTg4bC45LjM3Ny4wOTMuMDQtLjAyLS4xYy0uNjgxLTMuMDI4LjM3Ni01LjIsMS40LTguMDU2bC43MzcuNDkzLjA4Ni4wNiwwLS4xYy0uMDU4LTIuMzIsMS41LTQuNjQ5LDMuNTc3LTYuNzI3bC4yODguNzcuMDQuMS4wNTYtLjEuNjMxLTEuMDUxLDAtLjAwN0E2LjEsNi4xLDAsMCwxLDIxLjk0MiwyLjg3NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjM2IxNWZcXFwiLz48cGF0aCBkPVxcXCJNMjEuOTQ4LDIuODc1YTYuMTMxLDYuMTMxLDAsMCwwLTMuOTI2LDIuMzg4bDAsLjAwNy0uNjMxLDEuMDUxLS4wNTYuMS0uMDQtLjFMMTcsNS41NDRjLTIuMDcyLDIuMDc4LTMuNjM1LDQuNDA3LTMuNTc3LDYuNzI3bDAsLjEtLjA4Ni0uMDYtLjczNy0uNDkzYy0xLjAyNSwyLjg1Ni0yLjA4Myw1LjAyOS0xLjQsOC4wNTZsLjAyLjEtLjA5My0uMDQtLjg4Ni0uMzc0YzAsLjAxOC4wMDcuMDM1LjAxLjA1M2E0LjUzMyw0LjUzMywwLDAsMCwyLjEyNiwyLjkzMmMuMDUtLjM4MS4xMDUtLjc3MS4xNjktMS4xNjQtMS41NDMtMy42MTQtLjItNi4yNzEuNDA3LTguNjYxbC45MzkuNTQyYy0uMTMtMi4yMzgsMS4xODQtNC42NTEsMi44OTMtNi43NTdsLjUuODczQzE4LjU1NSw0Ljc2OSwxOS41NiwzLjcyLDIxLjk0OCwyLjg3NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZmYxY2I7c3Ryb2tlOiNlZmYxY2JcXFwiLz48cGF0aCBkPVxcXCJNMjIuNTE4LDJsLS4wNTYuMDFjLTIuMDgyLjM2My00LjEyMSwxLjEyOC01LjAxNSwyLjk1OWwtLjM3Ny0uNjU4LS4wMzMtLjA2LS4wNS4wNWEyMC44NSwyMC44NSwwLDAsMC0yLjkzOSwzLjVBNS45MzksNS45MzksMCwwLDAsMTIuODM1LDExbC0uNTMyLS42NjQtLjA1My0uMDY2LS4wMzYuMDc2YTI3LjUzNSwyNy41MzUsMCwwLDAtMS42OTMsNC43LDYuNzMsNi43MywwLDAsMC0uMTU5LDMuNzE5bC0uODc2LS41MDktLjA3My0uMDQzLS4wMDcuMDg2YTUuNTI5LDUuNTI5LDAsMCwwLDIuMDE3LDQuODQzbC0uOTcyLjI0MS0uMi4wNS4yLjA1M2E0LjI1OCw0LjI1OCwwLDAsMSwxLjQ1NS42LDEuMzI1LDEuMzI1LDAsMCwxLC41MTYsMS4zVjI4LjFsLjAxLjAxMywxLjIxNywxLjc0NS4xLjEzOVYyNS43MTlhMy40NjYsMy40NjYsMCwwLDEsLjYyMS0xLjQ4NEExLjYzOSwxLjYzOSwwLDAsMSwxNS41LDIzLjdsLjE4Mi0uMDIzLS4xNjUtLjA3Ni0uNjQxLS4zYTkuMTEyLDkuMTEyLDAsMCwwLDMuNjkzLTUuMzIybC4wMi0uMDg2LS4wODMuMDIzLS43OTMuMjE1YTExLjY2OSwxMS42NjksMCwwLDAsMi4wODktMy41QzIwLjUxMiwxMywyMS4xOCwxMS4xNjYsMjEuNzI4LDkuN2wuMDMtLjA3OS0uMDgzLjAwNy0uNjEyLjA0M2E2LjY1NSw2LjY1NSwwLDAsMCwxLjM4Mi0zLjUyNywxNy4wMzksMTcuMDM5LDAsMCwwLC4wNzktNC4wODZabS0uNTc1Ljg3NmMuMDQsMi40NjgtLjAzMyw0LjkxLTIuMTY5LDcuMjNsLS4wNzkuMDg5aC4xMTlsLjg3My4wMTNjLTEuNDE4LDIuOTUtMi4zNDEsNS44OTItNC4zOCw4LjgzbC0uMDczLjEwNi4xMjYtLjAyMywxLjA3OC0uMmE1Ljg1MSw1Ljg1MSwwLDAsMS0zLjQ4NCwzLjY1Yy0uMzktNS40NTUsMi4zMzMtMTAuMjcsNC42NDUtMTUuMDcxbC4wMDctLjAxMy0uMDg2LS4wNmMtMy43ODYsNC4yMzMtNS40OTEsMTAuMi02LjEzNiwxNS4xMjdhNC41ODIsNC41ODIsMCwwLDEtMi4xNDUtMi45ODhsLjkuMzc3LjA5My4wNC0uMDItLjFjLS42ODEtMy4wMjguMzc2LTUuMiwxLjQtOC4wNTZsLjczNy40OTMuMDg2LjA2LDAtLjFjLS4wNTgtMi4zMiwxLjUtNC42NDksMy41NzctNi43MjdsLjI4OC43Ny4wNC4xLjA1Ni0uMS42MzEtMS4wNTEsMC0uMDA3QTYuMSw2LjEsMCwwLDEsMjEuOTQyLDIuODc2WlxcXCIvPlwiLFxuXHRcIlRlbXBsYXRlIFRvb2xraXQgMlwiOiBcIjxwYXRoIGQ9XFxcIk04LjkwNywyMy4wMjFIOC44NzhhMy4zMDUsMy4zMDUsMCwwLDEtMi4wMTEtLjY2MUEyLjU2MSwyLjU2MSwwLDAsMSw1LjgzLDIwLjMzNFYxNi4xSDQuMjg4YTMuMDUsMy4wNSwwLDAsMS0yLjczOC0xLjY5LDMuMywzLjMsMCwwLDEsLjQ0MS0zLjUzLDIuMjY1LDIuMjY1LDAsMCwxLDEuODE1LS45aDkuNjVhMy4wNSwzLjA1LDAsMCwxLDIuNzM4LDEuNjksMy4zLDMuMywwLDAsMS0uNDQxLDMuNTMsMi4yNjUsMi4yNjUsMCwwLDEtMS44MTUuOUgxMS45NTV2NC4yMzFhMi41NjEsMi41NjEsMCwwLDEtMS4wMzcsMi4wMjZBMy4zMDUsMy4zMDUsMCwwLDEsOC45MDcsMjMuMDIxWk00LjI2NCwxMS42MzZhMS4zOSwxLjM5LDAsMCwwLTEuMzg4LDEuMzg4di4wMzNhMS4zOSwxLjM5LDAsMCwwLDEuMzg4LDEuMzg4SDcuNDg3djUuODgxYzAsLjU3Mi42MjQsMS4wMzcsMS4zOSwxLjAzN2guMDI5Yy43NjcsMCwxLjM5LS40NjUsMS4zOS0xLjAzN1YxNC40NDZoMy4yMjNhMS4zOSwxLjM5LDAsMCwwLDEuMzg4LTEuMzg4di0uMDMzYTEuMzksMS4zOSwwLDAsMC0xLjM4OC0xLjM4OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMTVkOWFcXFwiLz48cGF0aCBkPVxcXCJNMTQuOTgxLDEyLjk1M3YuMDMzYTEuNTMzLDEuNTMzLDAsMCwxLTEuNTMzLDEuNTMzSDEwLjM3djUuNzM3YTEuMzkzLDEuMzkzLDAsMCwxLTEuNTM1LDEuMTgxSDguODA2YTEuMzkzLDEuMzkzLDAsMCwxLTEuNTM1LTEuMTgxVjE0LjUxOEg0LjE5MkExLjUzMywxLjUzMywwLDAsMSwyLjY2LDEyLjk4NnYtLjAzM0ExLjUzMywxLjUzMywwLDAsMSw0LjE5MiwxMS40Mmg5LjI1N0ExLjUzMywxLjUzMywwLDAsMSwxNC45ODEsMTIuOTUzWm0tNC4yMjMsOS4yMjJhMi40MTgsMi40MTgsMCwwLDAsLjk4LTEuOTEyVjE1Ljg4OGgyLjEyN2EyLjExNCwyLjExNCwwLDAsMCwxLjctLjg0NiwyLjk5MiwyLjk5MiwwLDAsMC0yLjE4LTQuOTlIMy43MzVhMi4xMTQsMi4xMTQsMCwwLDAtMS43Ljg0NiwyLjk5MiwyLjk5MiwwLDAsMCwyLjE4LDQuOTlINS45djQuMzc1YTIuNDE4LDIuNDE4LDAsMCwwLC45OCwxLjkxMiwzLjE2LDMuMTYsMCwwLDAsMS45MjMuNjMxaC4wMjlBMy4xNiwzLjE2LDAsMCwwLDEwLjc1OCwyMi4xNzRaXFxcIiBzdHlsZT1cXFwiZmlsbDojM2JjZWZjXFxcIi8+PHBhdGggZD1cXFwiTTIzLjYwNywyMy4wMjFoLS4wMjlhMy4zMDUsMy4zMDUsMCwwLDEtMi4wMTEtLjY2MSwyLjU2MSwyLjU2MSwwLDAsMS0xLjAzNy0yLjAyNlYxNi4xSDE4Ljk4OGEzLjA1LDMuMDUsMCwwLDEtMi43MzgtMS42OSwzLjMsMy4zLDAsMCwxLC40NDEtMy41MywyLjI2NSwyLjI2NSwwLDAsMSwxLjgxNS0uOWg5LjY1YTMuMDUsMy4wNSwwLDAsMSwyLjczOCwxLjY5LDMuMywzLjMsMCwwLDEtLjQ0MSwzLjUzLDIuMjY1LDIuMjY1LDAsMCwxLTEuODE1LjlIMjYuNjU1djQuMjMxYTIuNTYxLDIuNTYxLDAsMCwxLTEuMDM3LDIuMDI2QTMuMzA1LDMuMzA1LDAsMCwxLDIzLjYwNywyMy4wMjFaTTE4Ljk2NCwxMS42MzZhMS4zOSwxLjM5LDAsMCwwLTEuMzg4LDEuMzg4di4wMzNhMS4zOSwxLjM5LDAsMCwwLDEuMzg4LDEuMzg4aDMuMjIzdjUuODgxYzAsLjU3Mi42MjQsMS4wMzcsMS4zOSwxLjAzN2guMDI5Yy43NjcsMCwxLjM5LS40NjUsMS4zOS0xLjAzN1YxNC40NDZoMy4yMjNhMS4zOSwxLjM5LDAsMCwwLDEuMzg4LTEuMzg4di0uMDMzYTEuMzksMS4zOSwwLDAsMC0xLjM4OC0xLjM4OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMTVkOWFcXFwiLz48cGF0aCBkPVxcXCJNMjkuNjgxLDEyLjk1M3YuMDMzYTEuNTMzLDEuNTMzLDAsMCwxLTEuNTMzLDEuNTMzSDI1LjA3djUuNzM3YTEuMzkzLDEuMzkzLDAsMCwxLTEuNTM1LDEuMTgxaC0uMDI5YTEuMzkzLDEuMzkzLDAsMCwxLTEuNTM1LTEuMTgxVjE0LjUxOEgxOC44OTJhMS41MzMsMS41MzMsMCwwLDEtMS41MzMtMS41MzN2LS4wMzNhMS41MzMsMS41MzMsMCwwLDEsMS41MzMtMS41MzNoOS4yNTdBMS41MzMsMS41MzMsMCwwLDEsMjkuNjgxLDEyLjk1M1ptLTQuMjIzLDkuMjIyYTIuNDE4LDIuNDE4LDAsMCwwLC45OC0xLjkxMlYxNS44ODhoMi4xMjdhMi4xMTQsMi4xMTQsMCwwLDAsMS43LS44NDYsMi45OTIsMi45OTIsMCwwLDAtMi4xOC00Ljk5aC05LjY1YTIuMTE0LDIuMTE0LDAsMCwwLTEuNy44NDYsMi45OTIsMi45OTIsMCwwLDAsMi4xOCw0Ljk5SDIwLjZ2NC4zNzVhMi40MTgsMi40MTgsMCwwLDAsLjk4LDEuOTEyLDMuMTYsMy4xNiwwLDAsMCwxLjkyMy42MzFoLjAyOUEzLjE2LDMuMTYsMCwwLDAsMjUuNDU4LDIyLjE3NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMzYmNlZmNcXFwiLz5cIixcblx0XCJUZVhcIjogXCI8cGF0aCBkPVxcXCJNMTEuMzMzLDEzLjEyMmMtLjEyOC0xLjU2Mi0uMjQxLTIuNzU2LTIuMjg3LTIuNzU2SDcuOTF2OC40aDIuMTQ1di42MTFsLTMuMDgzLS4wMjktMy4wODIuMDI5di0uNjExSDYuMDM0di04LjRINC44ODRjLTIuMDQ2LDAtMi4xNTksMS4yMDgtMi4yODcsMi43NTZIMmwuMjg0LTMuMzY3aDkuMzYybC4yODQsMy4zNjdoLS42WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4yODksMjIuNTNIMTAuNDFWMjEuOTJoMS41MDZWMTMuNDY3SDEwLjQxdi0uNjExaDguNjM3bC40MTIsMy4zNjdoLS42Yy0uMjEzLTEuODMzLS42ODItMi43NTYtMi44NTUtMi43NTZIMTMuNzkxVjE3LjJoLjgzOGMxLjM2NCwwLDEuNTA1LS42LDEuNTA1LTEuNjYyaC42djMuOTM1aC0uNmMwLTEuMDgtLjE0Mi0xLjY2Mi0xLjUwNS0xLjY2MmgtLjgzOHY0LjEwNmgyLjIxNmMyLjQ3MiwwLDMtMS4xMDgsMy4zLTMuMjI1aC42WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPjxwYXRoIGQ9XFxcIk0yNy43MjcsMTkuMTg2Yy0uNTQsMC0xLjk2LDAtMi40MTUuMDI5VjE4LjZoMS4xNzlsLTIuNTU3LTMuNTUyLTIuNTI5LDMuMzgxQTQuMSw0LjEsMCwwLDAsMjIuNywxOC42di42MTFjLS4zNTUtLjAyOS0xLjU3Ni0uMDI5LTIuMDE3LS4wMjktLjQsMC0xLjU0OCwwLTEuODc1LjAyOVYxOC42aC4zODNhNy40NTksNy40NTksMCwwLDAsLjgyNC0uMDQzYy41LS4wNDMuNTQtLjA4NS42NjctLjI1NkwyMy41MzYsMTQuNWwtMy4xNTMtNC40MThIMTlWOS40N2MuMzg0LjAyOCwxLjc5LjAyOCwyLjI3My4wMjguNTgyLDAsMS45MTgsMCwyLjQyOS0uMDI4di42MTFIMjIuNTI4bDIuMTE3LDIuOTU1LDIuMDc0LTIuNzg0YTQuMSw0LjEsMCwwLDAtMS4yOTMtLjE3VjkuNDdjLjM1Ni4wMjgsMS41OTEuMDI4LDIuMDMyLjAyOC40LDAsMS41MzQsMCwxLjg2MS0uMDI4di42MTFoLS4zNjlhNS4yNjQsNS4yNjQsMCwwLDAtLjgzOC4wNDNjLS40NjkuMDQzLS41MjYuMDcxLS42NjcuMjU2bC0yLjQsMy4yMUwyOC42MzYsMTguNkgzMHYuNjExQzI5LjY0NSwxOS4xODYsMjguMTgyLDE5LjE4NiwyNy43MjcsMTkuMTg2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPlwiLFxuXHRcIlRleHRpbGVcIjogXCI8cGF0aCBkPVxcXCJNMjguNjgxLDI2LjA3NUgzLjMxOUExLjMxNywxLjMxNywwLDAsMSwyLDI0Ljc1NlY3LjI0NEExLjMxNywxLjMxNywwLDAsMSwzLjMxOSw1LjkyNUgyOC42ODFBMS4zMTcsMS4zMTcsMCwwLDEsMzAsNy4yNDRWMjQuNzZBMS4zMTYsMS4zMTYsMCwwLDEsMjguNjgxLDI2LjA3NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmU3YWNcXFwiLz48cGF0aCBkPVxcXCJNNi4wNjYsMTIuODQ4YTQuOTg3LDQuOTg3LDAsMCwxLDEuNTA4LS42NTlWMTAuNjY0YTMuNywzLjcsMCwwLDEsLjc0My0uMzMsNy44NjksNy44NjksMCwwLDEsMS4zMjctLjM0N2guNjQydjIuMzkxaDIuNDg0VjEzLjZIMTAuMjg2djQuODQ4YTMuMTcyLDMuMTcyLDAsMCwwLC4yOSwxLjYwOSwxLjA3LDEuMDcsMCwwLDAsLjk3MS40NDgsNy4xMjcsNy4xMjcsMCwwLDAsLjc2LS4wNDgsMy4zMzgsMy4zMzgsMCwwLDAsLjc4Mi0uMThsLjEzMi42MmEyLjM4OCwyLjM4OCwwLDAsMS0uNS4zNTYsNS40NTcsNS40NTcsMCwwLDEtLjc1Mi4zNTYsNS44MzcsNS44MzcsMCwwLDEtLjkyMy4yODFBNC43NjksNC43NjksMCwwLDEsMTAsMjJhMi4zODUsMi4zODUsMCwwLDEtMS44MjQtLjYzNywyLjk0NywyLjk0NywwLDAsMS0uNi0yLjA2MlYxMy41OTFINi4wNjZaXFxcIi8+PHBhdGggZD1cXFwiTTE0LjYwNywyMC40NTNhMS40NDcsMS40NDcsMCwwLDEsLjQzMS0xLjA5LDEuNTkxLDEuNTkxLDAsMCwxLDEuMTQ3LS40MTMsMS42NDksMS42NDksMCwwLDEsMS4xNjUuNDEzLDEuNDIyLDEuNDIyLDAsMCwxLC40NTMsMS4wOSwxLjM2OSwxLjM2OSwwLDAsMS0uNDUzLDEuMDgxLDEuNjkyLDEuNjkyLDAsMCwxLTEuMTY1LjQsMS42MSwxLjYxLDAsMCwxLTEuMTQ3LS40QTEuNDI3LDEuNDI3LDAsMCwxLDE0LjYwNywyMC40NTNaXFxcIi8+XCIsXG5cdFwiVE9NTFwiOiBcIjxwYXRoIGQ9XFxcIk0yMi43Niw2LjgzdjMuMjVoLTVWMjUuMTdIMTQuMjZWMTAuMDhoLTVWNi44M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM3ZjdmN2ZcXFwiLz48cGF0aCBkPVxcXCJNMiwySDguMlY1LjA5SDUuMzR2MjEuOEg4LjJWMzBIMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZmJmYmZcXFwiLz48cGF0aCBkPVxcXCJNMzAsMzBIMjMuOFYyNi45MWgyLjg2VjUuMTFIMjMuOFYySDMwWlxcXCIgc3R5bGU9XFxcImZpbGw6I2JmYmZiZlxcXCIvPlwiLFxuXHRcIlRTQ29uZmlnXCI6IFwiPHBhdGggZD1cXFwiTTIzLjgyNyw4LjI0M0E0LjQyNCw0LjQyNCwwLDAsMSwyNi4wNSw5LjUyNGE1Ljg1Myw1Ljg1MywwLDAsMSwuODUyLDEuMTQzYy4wMTEuMDQ1LTEuNTM0LDEuMDgzLTIuNDcxLDEuNjYyLS4wMzQuMDIzLS4xNjktLjEyNC0uMzIyLS4zNWEyLjAxNCwyLjAxNCwwLDAsMC0xLjY3LTFjLTEuMDc3LS4wNzQtMS43NzEuNDktMS43NjYsMS40MzNhMS4zLDEuMywwLDAsMCwuMTUzLjY2NmMuMjM3LjQ5LjY3Ny43ODQsMi4wNTksMS4zODMsMi41NDQsMS4xLDMuNjM2LDEuODE3LDQuMzEsMi44NDNhNS4xNTgsNS4xNTgsMCwwLDEsLjQxNiw0LjMzMyw0Ljc2NCw0Ljc2NCwwLDAsMS0zLjkzMiwyLjgxNSwxMC45LDEwLjksMCwwLDEtMi43MDgtLjAyOCw2LjUzMSw2LjUzMSwwLDAsMS0zLjYxNi0xLjg4NCw2LjI3OCw2LjI3OCwwLDAsMS0uOTI2LTEuMzcxLDIuNjU1LDIuNjU1LDAsMCwxLC4zMjctLjIwOGMuMTU4LS4wOS43NTYtLjQzNCwxLjMyLS43NjFsMS4wMjQtLjYuMjE0LjMxMmE0Ljc3MSw0Ljc3MSwwLDAsMCwxLjM1LDEuMjkyLDMuMywzLjMsMCwwLDAsMy40NTgtLjE3NSwxLjU0NSwxLjU0NSwwLDAsMCwuMi0xLjk3NGMtLjI3Ni0uNC0uODQtLjcyNy0yLjQ0My0xLjQyMmE4LjgsOC44LDAsMCwxLTMuMzQ5LTIuMDU1LDQuNjg3LDQuNjg3LDAsMCwxLS45NzYtMS43NzcsNy4xMTYsNy4xMTYsMCwwLDEtLjA2Mi0yLjI2OCw0LjMzMiw0LjMzMiwwLDAsMSwzLjY0NC0zLjM3NEE5LDksMCwwLDEsMjMuODI3LDguMjQzWk0xNS40ODQsOS43MjZsLjAxMSwxLjQ1NGgtNC42M1YyNC4zMjhINy42VjExLjE4M0gyLjk3VjkuNzU1YTEzLjk4NiwxMy45ODYsMCwwLDEsLjA0LTEuNDY2Yy4wMTctLjAyMywyLjgzMi0uMDM0LDYuMjQ1LS4wMjhsNi4yMTEuMDE3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwN2FjY1xcXCIvPjxwYXRoIGQ9XFxcIk0yNy4wNzUsMjUuMTA3bC4zNjMtLjM2MWMxLjY4LjA1NSwxLjcwNiwwLDEuNzgtLjE3N2wuNDYyLTEuMTI0LjAzNC0uMTA3LS4wMzgtLjA5M2MtLjAyLS4wNDktLjA4MS0uMi0xLjEzLTEuMnYtLjUyNmMxLjIxMS0xLjE2NiwxLjE4NS0xLjIyNiwxLjExNi0xLjRsLS40Ni0xLjEzNmMtLjA2OS0uMTctLjEtLjIzNy0xLjc2My0uMTkxbC0uMzY0LS4zNjdhOC4xMzgsOC4xMzgsMCwwLDAtLjA1Ny0xLjY1N2wtLjA0Ny0uMTA2LTEuMi0uNTI1Yy0uMTc3LS4wODEtLjIzOS0uMTEtMS4zNzIsMS4xMjRsLS41MDktLjAwOGMtMS4xNjctMS4yNDUtMS4yMjItMS4yMjMtMS40LTEuMTUybC0xLjExNS40NTJjLS4xNzUuMDcxLS4yMzYuMS0uMTY5LDEuNzlsLS4zNi4zNTljLTEuNjgtLjA1NS0xLjcsMC0xLjc3OC4xNzdMMTguNjA2LDIwbC0uMDM2LjEwOC4wMzguMDk0Yy4wMi4wNDguMDc4LjE5NCwxLjEzLDEuMnYuNTI1Yy0xLjIxMSwxLjE2Ni0xLjE4NCwxLjIyNi0xLjExNSwxLjRsLjQ1OSwxLjEzN2MuMDcuMTc0LjEuMjM2LDEuNzYzLjE5MmwuMzYzLjM3N2E4LjE2OSw4LjE2OSwwLDAsMCwuMDU1LDEuNjU0bC4wNDcuMTA3LDEuMjA4LjUyOGMuMTc2LjA3My4yMzYuMSwxLjM2Ni0xLjEzbC41MDkuMDA2YzEuMTY4LDEuMjQ3LDEuMjI4LDEuMjIzLDEuNCwxLjE1NGwxLjExMy0uNDVDMjcuMDgyLDI2LjgyNywyNy4xNDMsMjYuOCwyNy4wNzUsMjUuMTA3Wm0tNC43ODgtMi42MzJhMiwyLDAsMSwxLDIuNjE4LDEuMTRBMi4wMjMsMi4wMjMsMCwwLDEsMjIuMjg3LDIyLjQ3NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiM5OWI4YzRcXFwiLz5cIixcblx0XCJUd2lnXCI6IFwiPHBhdGggZD1cXFwiTTQuNTc0LDUuNDYzYy4yNjIuNCwyLjUtMS42MDgsNC40NTQtMS4xNjEsMi4wNjEuNDcyLDQuMDE0LDMuNzI0LDQuODQ4LDEzLjdhNDAuMTgsNDAuMTgsMCwwLDEsMy41NDEsMy42MXEuNTMuNjE0LDEuMDEzLDEuMjJhMTEuODQ3LDExLjg0NywwLDAsMSwuMjI5LTEuNCwxMi4zLDEyLjMsMCwwLDEsMS45ODEtNC40QTE5LjE1MSwxOS4xNTEsMCwwLDAsMTcuMjcyLDcuOWMtMS4wMy0xLjQ0NS00LjYtNi40NzgtOC41NDYtNS44NDNDNi4xODIsMi40NjUsNC4zLDUuMDU0LDQuNTc0LDUuNDYzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzYzYmY2YVxcXCIvPjxwYXRoIGQ9XFxcIk0yNC40LDMwYy0uMzItMi41NjctLjQ0OC00Ljc2LS41LTYuNDQ5LS4wOTQtMy4yMzIuMS00LjU0MS45LTUuNzU2LjE5My0uMjk1LDEuMjg4LTEuOTc1LDIuNTgtMS44NjMsMS40NjYuMTI4LDIuMjEzLDIuNDE0LDIuMzYyLDIuMzM3LjE3NS0uMDktLjM2LTMuNTQzLTIuNTMyLTQuNDMxLTIuNi0xLjA2My02LjMxMiwyLjA3LTcuOCw1LjE1NGExMi4yMjMsMTIuMjIzLDAsMCwwLS44NTcsMi44MSwzMi41NTUsMzIuNTU1LDAsMCwwLS43MSw4LjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojNzRkNzRkXFxcIi8+PHBhdGggZD1cXFwiTTIuMjM4LDEzLjkzNWMuMTQ1LS40NDcsMi40NjgtLjI1OSw0LjU0LjI5MywyLjUuNjY2LDcsMi4zNDQsMTEuNjUxLDguNjA2QTEyLjU0NCwxMi41NDQsMCwwLDEsMjAuMjc5LDMwSDEwLjM4NmEyMS44NzUsMjEuODc1LDAsMCwwLS4xNzUtNC42MiwxNC45LDE0LjksMCwwLDAtMi40NTktNy4xNThDNS40NDEsMTUuMTU5LDIuMDU1LDE0LjUsMi4yMzgsMTMuOTM1WlxcXCIgc3R5bGU9XFxcImZpbGw6Izc4ZGM1MFxcXCIvPjxwYXRoIGQ9XFxcIk0xNy4zLDIxLjMyM2ExLjc1MywxLjc1MywwLDEsMS0uNTEzLTEuMjRBMS43NDgsMS43NDgsMCwwLDEsMTcuMywyMS4zMjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTIxLjk3NSwyMS4zMjNhMS43NTMsMS43NTMsMCwxLDEtLjUxMy0xLjI0QTEuNzQ4LDEuNzQ4LDAsMCwxLDIxLjk3NSwyMS4zMjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdFwiVHlwZVNjcmlwdFwiOiBcIjxyZWN0IHg9XFxcIjJcXFwiIHk9XFxcIjJcXFwiIHdpZHRoPVxcXCIyOFxcXCIgaGVpZ2h0PVxcXCIyOFxcXCIgcng9XFxcIjEuMzEyXFxcIiBzdHlsZT1cXFwiZmlsbDojMzE3OGM2XFxcIi8+PHBhdGggZD1cXFwiTTE4LjI0NSwyMy43NTl2My4wNjhhNi40OTIsNi40OTIsMCwwLDAsMS43NjQuNTc1LDExLjU2LDExLjU2LDAsMCwwLDIuMTQ2LjE5Miw5Ljk2OCw5Ljk2OCwwLDAsMCwyLjA4OC0uMjExLDUuMTEsNS4xMSwwLDAsMCwxLjczNS0uNywzLjU0MiwzLjU0MiwwLDAsMCwxLjE4MS0xLjI2Niw0LjQ2OSw0LjQ2OSwwLDAsMCwuMTg2LTMuMzk0LDMuNDA5LDMuNDA5LDAsMCwwLS43MTctMS4xMTcsNS4yMzYsNS4yMzYsMCwwLDAtMS4xMjMtLjg3NywxMi4wMjcsMTIuMDI3LDAsMCwwLTEuNDc3LS43MzRxLS42LS4yNDktMS4wOC0uNDg0YTUuNSw1LjUsMCwwLDEtLjgxMy0uNDc5LDIuMDg5LDIuMDg5LDAsMCwxLS41MTYtLjUxOCwxLjA5MSwxLjA5MSwwLDAsMS0uMTgxLS42MTgsMS4wMzksMS4wMzksMCwwLDEsLjE2Mi0uNTcxLDEuNCwxLjQsMCwwLDEsLjQ1OS0uNDM2LDIuNDM5LDIuNDM5LDAsMCwxLC43MjYtLjI4Myw0LjIxMSw0LjIxMSwwLDAsMSwuOTU2LS4xLDUuOTQyLDUuOTQyLDAsMCwxLC44MDguMDU4LDYuMjkyLDYuMjkyLDAsMCwxLC44NTYuMTc3LDUuOTk0LDUuOTk0LDAsMCwxLC44MzYuMyw0LjY1Nyw0LjY1NywwLDAsMSwuNzUxLjQyMlYxMy45YTcuNTA5LDcuNTA5LDAsMCwwLTEuNTI1LS40LDEyLjQyNiwxMi40MjYsMCwwLDAtMS45LS4xMjksOC43NjcsOC43NjcsMCwwLDAtMi4wNjQuMjM1LDUuMjM5LDUuMjM5LDAsMCwwLTEuNzE2LjczMywzLjY1NSwzLjY1NSwwLDAsMC0xLjE3MSwxLjI3MSwzLjczMSwzLjczMSwwLDAsMC0uNDMxLDEuODQ1LDMuNTg4LDMuNTg4LDAsMCwwLC43ODksMi4zNCw2LDYsMCwwLDAsMi4zOTUsMS42MzlxLjYzLjI2LDEuMTc1LjUwOWE2LjQ1OCw2LjQ1OCwwLDAsMSwuOTQyLjUxNywyLjQ2MywyLjQ2MywwLDAsMSwuNjI2LjU4NSwxLjIsMS4yLDAsMCwxLC4yMy43MTksMS4xLDEuMSwwLDAsMS0uMTQ0LjU1MiwxLjI2OSwxLjI2OSwwLDAsMS0uNDM1LjQ0MSwyLjM4MSwyLjM4MSwwLDAsMS0uNzI2LjI5Miw0LjM3Nyw0LjM3NywwLDAsMS0xLjAxOC4xMDUsNS43NzMsNS43NzMsMCwwLDEtMS45NjktLjM1QTUuODc0LDUuODc0LDAsMCwxLDE4LjI0NSwyMy43NTlabS01LjE1NC03LjYzOGg0VjEzLjU5NEg1LjkzOHYyLjUyN0g5LjkyVjI3LjM3NWgzLjE3MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz5cIixcblx0XCJUeXBvU2NyaXB0XCI6IFwiPHBhdGggZD1cXFwiTTIzLjA5MywyMS4zYTMuODQ3LDMuODQ3LDAsMCwxLTEuMTguMTY1Yy0zLjU1NSwwLTguNzc4LTEyLjQyNC04Ljc3OC0xNi41NTksMC0xLjUyMy4zNjItMi4wMzEuODctMi40NjZDOS42NTMsMi45NDMsNC40Myw0LjUzOSwyLjc2MSw2LjU3YTQuMDQ4LDQuMDQ4LDAsMCwwLS41OCwyLjMyMUMyLjE4MSwxNS4zNDgsOS4wNzIsMzAsMTMuOTMzLDMwYzIuMjQ4LDAsNi4wNDEtMy43LDkuMTYtOC43XFxcIiBzdHlsZT1cXFwiZmlsbDojZmY4NzAwXFxcIi8+PHBhdGggZD1cXFwiTTIwLjgyMywyYzQuNSwwLDksLjcyNSw5LDMuMjY0LDAsNS4xNTEtMy4yNjQsMTEuMzg5LTQuOTMzLDExLjM4OS0yLjk3NCwwLTYuNjczLTguMjY5LTYuNjczLTEyLjQsMC0xLjg4Ni43MjUtMi4yNDksMi42MTEtMi4yNDlcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZjg3MDBcXFwiLz5cIixcblx0XCJWXCI6IFwiPHBhdGggZD1cXFwiTTIwLjQ2NywyOS4yODgsMjkuOTUyLDIuOTEzYS41LjUsMCwwLDAtLjU2Ni0uNzI4TDIxLjkyNywyLjlhMS40NjQsMS40NjQsMCwwLDAtMS4xNDEuOUwxMi4wMDcsMjkuMDA2YS41NzMuNTczLDAsMCwwLC41NzguODEzaDcuMjZhLjY1Ny42NTcsMCwwLDAsLjU3Ny0uNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzZiOGFcXFwiLz48cGF0aCBkPVxcXCJNMi42MTQsMi4xODVsNy40NTkuNzE5YTEuNDY2LDEuNDY2LDAsMCwxLDEuMTQyLjlMMjAuMTgsMjkuNDEzYS4yODYuMjg2LDAsMCwxLS4yODkuNDA2SDEyLjU4NWExLjMxMSwxLjMxMSwwLDAsMS0xLjE1Mi0uODFMMi4wNDgsMi45MTNBLjUuNSwwLDAsMSwyLjYxNCwyLjE4NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1ZDg3YmZcXFwiLz5cIixcblx0XCJWYWxhXCI6IFwiPHBhdGggZD1cXFwiTTEyLjUwOSwxNy4xOTNjLS4xNjUtNi44MzYtLjMyNS0xMi40NTUtLjM1Ny0xMi40ODdBNy45MTYsNy45MTYsMCwwLDAsOS44NzksNS44NzQsNy42MDYsNy42MDYsMCwwLDAsNy4zMjQsOS4xODhhOC40MjIsOC40MjIsMCwwLDAtLjU4NywzLjU0Myw0LjY2NSw0LjY2NSwwLDAsMCwuMiwxLjk2MiwzLjQxNywzLjQxNywwLDAsMSwuMTgyLjU2Yy0uMDEyLjAwOS0uMzM4LS4wMTgtLjcyNC0uMDYxLTEuODY4LS4yMDctMi43ODYtMS4wNS0zLTIuNzU3QTYuMzEyLDYuMzEyLDAsMCwxLDQuODUsNy43MTlhMTUuMTM0LDE1LjEzNCwwLDAsMSw4LjQxNC01LjE2MywxMi44OTEsMTIuODkxLDAsMCwxLDIuNTQyLS4yMzVsMS43NDgtLjA1LjA1OSwyLjUwNmMuMDMyLDEuMzc4LjEsNi4zNTguMTYxLDExLjA2N3MtLjI1Miw4LjI5LS4yMTksOC40QzE5LjUsMTcuODc5LDIyLDEzLjA3MywyNC4zNjcsNi4yNTNsMS40MjctMy45ODNIMjguNTRjLS4wMjIuMDYzLTIuNzUxLDYuNS01LjUxNCwxMy45MTZsLTUuNDczLDEzLjU1SDEyLjk3NkMxMi45NzYsMjcuOTA2LDEyLjUzNSwxOC40ODYsMTIuNTA5LDE3LjE5M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM0MDM3NTdcXFwiLz48cGF0aCBkPVxcXCJNMTcuNzMyLDMwSDEyLjcxM3YtLjI2M2MwLTEuMTM3LS4xNy01LjE5Mi0uMzA3LTguNDUyLS4wODEtMS45MjktLjE1LTMuNi0uMTYxLTQuMDg3LS4xNTYtNi40NzktLjI4Ni0xMS0uMzM2LTEyLjE2M2ExMS42NzQsMTEuNjc0LDAsMCwwLTEuODc0LDEuMDQ5LDcuMzQ4LDcuMzQ4LDAsMCwwLTIuNDY2LDMuMkE4LjE0Niw4LjE0NiwwLDAsMCw3LDEyLjczMSw0LjM3LDQuMzcsMCwwLDAsNy4xODUsMTQuNmMuMjE1LjU2OS4yNzMuNzIzLjEuODU5LS4wOTMuMDczLS4xMDcuMDg0LS45MTYtLjAwNy0xLjk3Ni0uMjE5LTMtMS4xNjctMy4yMzQtMi45ODZBNi41NjgsNi41NjgsMCwwLDEsNC42NCw3LjU2MSwxNS40MzksMTUuNDM5LDAsMCwxLDEzLjIsMi4zLDEzLjE3NiwxMy4xNzYsMCwwLDEsMTUuOCwyLjA1OEwxNy44MTEsMmwuMDY1LDIuNzdjLjAzMiwxLjM5Mi4xMDYsNi40NjEuMTYxLDExLjA3LjAzMSwyLjYxNi0uMDUyLDQuOTE1LS4xMjQsNi40My45MzEtMi43NjMsMS45NTgtNS4yNywzLjAzMy03LjksMS4wNDMtMi41NDcsMi4xMjItNS4xOCwzLjE3My04LjIwN2wxLjQ5MS00LjE2aDMuM2wtLjEyNS4zNTFjMCwuMDA3LS4wMzEuMDc2LS4wODQuMi0xLjEsMi42MjItMy4yNTksNy44ODktNS40MywxMy43MTdabS00LjQ5NS0uNTI2aDQuMTRsNS40MDctMTMuMzg2YzIuMTI0LTUuNyw0LjI0My0xMC44NzYsNS4zNjItMTMuNTU1SDI1Ljk3OUwyNC42MTQsNi4zNDJjLTEuMDU1LDMuMDM4LTIuMTM3LDUuNjc4LTMuMTgzLDguMjMxLTEuMzExLDMuMi0yLjU1LDYuMjI2LTMuNjI2LDkuNzQ3bC0uMjU1LjgzMS0uMjQ4LS44MzNhMy4yNzQsMy4yNzQsMCwwLDEsLjAyMS0uODM5Yy4wNzQtMS4zNS4yMjktNC4xNTguMTg4LTcuNjMzLS4wNTUtNC42MDctLjEyOS05LjY3NC0uMTYxLTExLjA2NEwxNy4zLDIuNTQxbC0xLjQ4NC4wNDNhMTIuNzI5LDEyLjcyOSwwLDAsMC0yLjQ5LjIyOEExNC44ODcsMTQuODg3LDAsMCwwLDUuMDYsNy44NzdhNi4wNzEsNi4wNzEsMCwwLDAtMS40LDQuNTI0Yy4yLDEuNTgsMS4wMjgsMi4zMzYsMi43NywyLjUyOWwuMzMzLjAzNWMtLjAxOS0uMDU0LS4wNDEtLjExNC0uMDY2LS4xNzlhNC44OTMsNC44OTMsMCwwLDEtLjIxOS0yLjA1NSw4LjcsOC43LDAsMCwxLC42LTMuNjM4LDcuODgzLDcuODgzLDAsMCwxLDIuNjQ0LTMuNDNjLjAyMi0uMDE2LDIuMjMyLTEuNTI1LDIuNjE1LTEuMTQyLjA5Mi4wOTIuMTMxLjEzMS40MzMsMTIuNjY2aDBjLjAxLjQ4NS4wOCwyLjE0OS4xNiw0LjA3NkMxMy4wNiwyNC4zMTMsMTMuMjE3LDI4LjA2LDEzLjIzNywyOS40NzRaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzhjOGM4XFxcIi8+XCIsXG5cdFwiVkIuTmV0XCI6IFwiPHBhdGggZD1cXFwiTTYuNjcsNy44MzYsOSwxOC45MTUsMTEuMzM2LDcuODM2SDE2TDExLjMzNiwyNC4xNjRINi42NzJMMiw3LjgzNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDUxOWFcXFwiLz48cGF0aCBkPVxcXCJNMTguMzMxLDcuODM2aDcuNmE0LjA4LDQuMDgsMCwwLDEsMi45LDEuNzQ5LDMuNzgsMy43OCwwLDAsMSwuNTcxLDIuMDQsMy45ODUsMy45ODUsMCwwLDEtLjU3MSwyLjAzNCw0LjEwOCw0LjEwOCwwLDAsMS0yLjM0MSwxLjc2Myw0LjEsNC4xLDAsMCwxLDIuOTI5LDEuNzU2LDMuOCwzLjgsMCwwLDEsLjU4LDIuMSw0LjY2Myw0LjY2MywwLDAsMS0uNTc5LDIuNTQ2LDUuMDQ3LDUuMDQ3LDAsMCwxLTMuNSwyLjMzOEgxOC4zMzFaTTIzLDE0LjI1MmgxLjE2NmExLjc1NCwxLjc1NCwwLDAsMCwwLTMuNUgyM1ptMCw3SDI0LjM5YTIuMDQ3LDIuMDQ3LDAsMCwwLDAtNC4wODlIMjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA1MTlhXFxcIi8+XCIsXG5cdFwiVkJBXCI6IFwiPHBvbHlnb24gcG9pbnRzPVxcXCIxMC40NTcgMTEuMDkyIDE2LjAxNCAxMy44MzkgMTYuMDE0IDE4LjMwNyAxMC40NTcgMTUuMzgyIDEwLjQ1NyAxMS4wOTJcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NDgzYzBcXFwiLz48cGF0aCBkPVxcXCJNMTYuMiwxOC42MTNsLTUuOTI2LTMuMTJWMTAuOEwxNi4yLDEzLjcyNFpNMTAuNjQyLDE1LjI3LDE1LjgzLDE4VjEzLjk1M2wtNS4xODgtMi41NjRaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi4zNzEgMTMuODM5IDE2LjM3MSAxOC4zMDcgMjEuMzE1IDE1LjgxNCAyMS4zMTUgMTEuMzU0IDE2LjM3MSAxMy44MzlcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NDgzYzBcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTg2LDE4LjYwN1YxMy43MjVsNS4zMTMtMi42N3Y0Ljg3M1ptLjM2OS00LjY1NXY0LjA1NUwyMS4xMywxNS43VjExLjY1M1pcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjEwLjcwMyAxMC43OTcgMTYuMTg2IDEzLjU4IDIxLjA4MiAxMS4wNjQgMTUuNzc3IDguMzg5IDEwLjcwMyAxMC43OTdcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NDgzYzBcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTg3LDEzLjc4OGwtNS45LTMsNS41LTIuNjA4LDUuNzA5LDIuODc5Wk0xMS4xMjIsMTAuOGw1LjA2NCwyLjU3LDQuNDktMi4zMDgtNC45LTIuNDcxWlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTguOTU3IDE1LjgyOSAyNC41MTUgMTguNTc1IDI0LjUxNSAyMy4wNDMgMTguOTU3IDIwLjExOCAxOC45NTcgMTUuODI5XFxcIiBzdHlsZT1cXFwiZmlsbDojOTUyNzgxXFxcIi8+PHBhdGggZD1cXFwiTTI0LjcsMjMuMzQ5bC01LjkyNi0zLjEydi00LjdMMjQuNywxOC40NlptLTUuNTU3LTMuMzQzLDUuMTg4LDIuNzMxVjE4LjY4OWwtNS4xODgtMi41NjRaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNC44NzEgMTguNTc1IDI0Ljg3MSAyMy4wNDMgMjkuODE1IDIwLjU1IDI5LjgxNSAxNi4wOSAyNC44NzEgMTguNTc1XFxcIiBzdHlsZT1cXFwiZmlsbDojOTUyNzgxXFxcIi8+PHBhdGggZD1cXFwiTTI0LjY4NywyMy4zNDNWMTguNDYxTDMwLDE1Ljc5MXY0Ljg3M1ptLjM2OS00LjY1NXY0LjA1NWw0LjU3NS0yLjMwOFYxNi4zODlaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxOS4yMDMgMTUuNTQ2IDI0LjY4NyAxOC4zMjkgMjkuNTgzIDE1LjgxMiAyNC4zNjQgMTMuMzQ2IDE5LjIwMyAxNS41NDZcXFwiIHN0eWxlPVxcXCJmaWxsOiM5NTI3ODFcXFwiLz48cGF0aCBkPVxcXCJNMjQuNjg3LDE4LjUzNmwtNS45Mi0zLjAwNSw1LjYtMi4zODdMMzAsMTUuODA1Wk0xOS42NCwxNS41Nmw1LjA0NiwyLjU2MSw0LjQ3OS0yLjMtNC44MDYtMi4yN1pcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIuMTkgMTUuNDk2IDcuNzQ4IDE4LjI0MyA3Ljc0OCAyMi43MTEgMi4xOSAxOS43ODYgMi4xOSAxNS40OTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNkODdiMzBcXFwiLz48cGF0aCBkPVxcXCJNNy45MzIsMjMuMDE3LDIuMDA2LDE5LjlWMTUuMmw1LjkyNiwyLjkyOVpNMi4zNzUsMTkuNjc0bDUuMTg4LDIuNzMxVjE4LjM1N0wyLjM3NSwxNS43OTNaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI4LjEwNCAxOC4yNDMgOC4xMDQgMjIuNzExIDEzLjA0OCAyMC4yMTggMTMuMDQ4IDE1Ljc1OCA4LjEwNCAxOC4yNDNcXFwiIHN0eWxlPVxcXCJmaWxsOiNkODdiMzBcXFwiLz48cGF0aCBkPVxcXCJNNy45MiwyMy4wMTFWMTguMTI5bDUuMzEzLTIuNjd2NC44NzNabS4zNjktNC42NTV2NC4wNTVMMTIuODY0LDIwLjFWMTYuMDU3WlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMi40MzYgMTUuMjEzIDcuOTIgMTcuOTk3IDEyLjgxNiAxNS40OCA3LjU5NyAxMy4wMTQgMi40MzYgMTUuMjEzXFxcIiBzdHlsZT1cXFwiZmlsbDojZDg3YjMwXFxcIi8+PHBhdGggZD1cXFwiTTcuOTIsMTguMiwyLDE1LjJsNS42LTIuMzg3LDUuNjMyLDIuNjYxWk0yLjg3MywxNS4yMjhsNS4wNDYsMi41NjEsNC40NzktMi4zLTQuODA2LTIuMjdaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxMC44NzUgMTYuMjk2IDE2LjQzMiAxOS4wNDIgMTYuNDMyIDIzLjUxMSAxMC44NzUgMjAuNTg1IDEwLjg3NSAxNi4yOTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMGQ0MDBcXFwiLz48cGF0aCBkPVxcXCJNMTYuNjE3LDIzLjgxNiwxMC42OTEsMjAuN1YxNmw1LjkyNiwyLjkyOVpNMTEuMDYsMjAuNDc0bDUuMTg4LDIuNzMxVjE5LjE1N0wxMS4wNiwxNi41OTNaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi43ODkgMTkuMDQyIDE2Ljc4OSAyMy41MTEgMjEuNzMzIDIxLjAxNyAyMS43MzMgMTYuNTU3IDE2Ljc4OSAxOS4wNDJcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMGQ0MDBcXFwiLz48cGF0aCBkPVxcXCJNMTYuNiwyMy44MTFWMTguOTI5bDUuMzEzLTIuNjd2NC44NzNabS4zNjktNC42NTV2NC4wNTVMMjEuNTQ5LDIwLjlWMTYuODU3WlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTEuMTIxIDE2LjAwMSAxNi42MDUgMTguNzg0IDIxLjUwMSAxNi4yNjcgMTYuMTk2IDEzLjU5MyAxMS4xMjEgMTYuMDAxXFxcIiBzdHlsZT1cXFwiZmlsbDojZTBkNDAwXFxcIi8+PHBhdGggZD1cXFwiTTE2LjYwNSwxOC45OTFsLTUuOS0zLDUuNS0yLjYwOCw1LjcwOSwyLjg3OVpNMTEuNTQsMTYuMDA2bDUuMDY0LDIuNTcsNC40OS0yLjMwOC00LjktMi40NzFaXFxcIi8+XCIsXG5cdFwiVmVsb2NpdHlcIjogXCI8cGF0aCBkPVxcXCJNMTYuMjQ1LDI0LjE4N0E4LjM1Miw4LjM1MiwwLDEsMSwyNC42LDE1LjgzNSw4LjM2Miw4LjM2MiwwLDAsMSwxNi4yNDUsMjQuMTg3Wm0wLTE0Ljc2MmE2LjQxLDYuNDEsMCwxLDAsNi40MSw2LjQxQTYuNDE3LDYuNDE3LDAsMCwwLDE2LjI0NSw5LjQyNVpcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI5LjEzMiA4LjU1MSAyNS40NTEgNi41MzEgMjUuNDUxIDcuNDc0IDE1LjgyMSA3LjQ3NCAxNS44MjEgOS40MjQgMjUuNDUxIDkuNDI0IDI1LjQ1MSAxMC41NzEgMjkuMTMyIDguNTUxXFxcIiBzdHlsZT1cXFwiZmlsbDojMjYyNjkyXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI4Ljk4NCAyIDYuOTY0IDUuNjg3IDcuOTA2IDUuNjg3IDcuOTA2IDE1LjMyOCA5Ljg1NyAxNS4zMjggOS44NTcgNS42ODcgMTEuMDA0IDUuNjg3IDguOTg0IDJcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNjI2OTNcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIzLjcwNSAzMCAyMS42ODUgMjYuMjQzIDIyLjYyOCAyNi4yNDMgMjIuNjI4IDE2LjQxNyAyNC41NzggMTYuNDE3IDI0LjU3OCAyNi4yNDMgMjUuNzI1IDI2LjI0MyAyMy43MDUgMzBcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNjI2OTNcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIuODY4IDIzLjMyIDYuNjM0IDIxLjMgNi42MzQgMjIuMjQyIDE2LjQ4NCAyMi4yNDIgMTYuNDg0IDI0LjE5MiA2LjYzNCAyNC4xOTIgNi42MzQgMjUuMzQgMi44NjggMjMuMzJcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNjI2OTJcXFwiLz5cIixcblx0XCJWZXJpbG9nXCI6IFwiPHBhdGggZD1cXFwiTTI5LjAwNywxNy40aC4wMzdhMS40NDksMS40NDksMCwwLDAsLjkzOC0uMzE2LDEuNDczLDEuNDczLDAsMCwwLC41MTktMS4wMzFWMTUuOWExLjQxMywxLjQxMywwLDAsMC0xLjM3Ni0xLjNoLS4wMDljLS42ODcsMC0xLjM3NCwwLTIuMDYyLDBIMjUuNVYxMS45NTZsMy41MTMsMGguMDM0QTEuNDExLDEuNDExLDAsMCwwLDMwLjUsMTAuNmwwLS4wOSwwLS4wMzJhMS40MTIsMS40MTIsMCwwLDAtLjY0Ni0xLjEsMS40NTUsMS40NTUsMCwwLDAtLjgzNS0uMjI1SDI1LjQ1NmEyLjk2LDIuOTYsMCwwLDAtLjI3OC0xLjAzNCwyLjkwOSwyLjkwOSwwLDAsMC0xLjctMS40NjEsMi42ODQsMi42ODQsMCwwLDAtLjYyOS0uMTNWNC45NDdjMC0uNjksMC0xLjM4LDAtMi4wNjNBMS40MTQsMS40MTQsMCwwLDAsMjEuNDgxLDEuNWgtLjExNmExLjQsMS40LDAsMCwwLTEuMzE5LDEuMzg4cTAsMS4xNTQsMCwyLjMwNlY2LjVIMTcuNFY0Ljk4MWMwLS43LDAtMS40LDAtMi4wODdBMS40MSwxLjQxLDAsMCwwLDE2LjA1MywxLjVIMTUuOWExLjQwOCwxLjQwOCwwLDAsMC0xLjMsMS4zODNjMCwuNjg4LDAsMS4zNzYsMCwyLjA2NFY2LjUwOHEtMS4zMTksMC0yLjYzOSwwVjQuODg4YzAtLjY2NiwwLTEuMzMyLDAtMS45ODlhMS4zNjYsMS4zNjYsMCwwLDAtLjQtLjk3NSwxLjQsMS40LDAsMCwwLS45ODQtLjQyNEgxMC41QTEuNDEsMS40MSwwLDAsMCw5LjE1OSwyLjg4MWMwLC42ODMsMCwxLjM2NiwwLDIuMDQ5djEuNmEyLjkzMywyLjkzMywwLDAsMC0yLjQ2NiwxLjksMi44NzgsMi44NzgsMCwwLDAtLjE2MS43MjZINC45NTdjLS42OTMsMC0xLjM4NiwwLTIuMDczLDBIMi44NzZBMS40MTMsMS40MTMsMCwwLDAsMS41LDEwLjV2LjA5NWExLjQxNywxLjQxNywwLDAsMCwuNTc1LDEuMDkxLDEuNDYzLDEuNDYzLDAsMCwwLC44ODcuMjczaC4wMTdsMy41MjIsMFYxNC42SDQuOTQ4Yy0uNjg2LDAtMS4zNzUsMC0yLjA1NywwQTEuNDI4LDEuNDI4LDAsMCwwLDEuNSwxNS45MTNWMTYuMWExLjQsMS40LDAsMCwwLDEuMzg2LDEuM2MuNzExLDAsMS40MjMsMCwyLjEzNSwwSDYuNVYyMC4wNWwtLjI5MiwwYy0uNjEzLS4wMDctMS4yMjYsMC0xLjgzOCwwSDMuMDg3YTEuNjMzLDEuNjMzLDAsMCwwLS45MTguMjExQTEuNDM3LDEuNDM3LDAsMCwwLDEuNSwyMS40VjIxLjVhMS40MTcsMS40MTcsMCwwLDAsMS4zNzUsMS4zMzdoLjAwNXEuNjQ1LDAsMS4yOSwwSDYuNTQ2YTIuODMyLDIuODMyLDAsMCwwLDEuOTc4LDIuNSwyLjcxMiwyLjcxMiwwLDAsMCwuNjMxLjEyOHYxLjYyYzAsLjY3OCwwLDEuMzU0LDAsMi4wMjVhMS40LDEuNCwwLDEsMCwyLjgtLjA5MmwwLTMuNTI3SDE0LjZ2My41MTZBMS40MTQsMS40MTQsMCwwLDAsMTUuOTQ3LDMwLjVIMTYuMWExLjQxMSwxLjQxMSwwLDAsMCwxLjMtMS4zODVxLjAwNi0xLjA2NiwwLTIuMTMxVjI1LjVoMi42NDRWMjkuMUExLjQyMywxLjQyMywwLDAsMCwyMS40LDMwLjVoLjExOWExLjQwOCwxLjQwOCwwLDAsMCwxLjE2LS43NDEsMS42NDMsMS42NDMsMCwwLDAsLjE2Ny0uODMzVjI1LjQ3NGEyLjY3MSwyLjY3MSwwLDAsMCwuNjItLjEyOCwyLjkyOCwyLjkyOCwwLDAsMCwxLjg4Ni0xLjg4OCwyLjgzNCwyLjgzNCwwLDAsMCwuMTIzLS42MTNoMS41ODFjLjY4NywwLDEuMzc1LDAsMi4wNTcsMGguMDA4QTEuNDIyLDEuNDIyLDAsMCwwLDMwLjUsMjEuNDgxdi0uMTE4YTEuNDA5LDEuNDA5LDAsMCwwLTEuMzgyLTEuMzE4aDBjLS43MTgsMC0xLjQzNiwwLTIuMTU0LDBIMjUuNVYxNy40WlxcXCIgc3R5bGU9XFxcImZpbGw6I2M1YzVjNTtvcGFjaXR5OjAuM1xcXCIvPjxwYXRoIGQ9XFxcIk0xMC41MTUsMmguMDU2YS45MS45MSwwLDAsMSwuODg2Ljg5M2MuMDA2LDEuMTA4LDAsMi4yMTYsMCwzLjMyNC0uNiwwLTEuMiwwLTEuOCwwLDAtMS4xMTEsMC0yLjIyMiwwLTMuMzMzQS45MDcuOTA3LDAsMCwxLDEwLjUxNSwyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzFhMzQ4ZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNS45MzcsMmguMTE2YS45MTIuOTEyLDAsMCwxLC44NDYuODg5Yy4wMDYsMS4xMDksMCwyLjIxOSwwLDMuMzI5SDE1LjFjMC0xLjExLDAtMi4yMiwwLTMuMzNBLjkxMS45MTEsMCwwLDEsMTUuOTM3LDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTIxLjM5MiwyaC4wODlhLjkwNy45MDcsMCwwLDEsLjg1OS44ODFjLjAwNywxLjExMiwwLDIuMjI1LDAsMy4zMzdoLTEuOGMwLTEuMTA5LDAtMi4yMTcsMC0zLjMyNkEuOTEyLjkxMiwwLDAsMSwyMS4zOTIsMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMxYTM0OGZcXFwiLz48cGF0aCBkPVxcXCJNMiwxMC41MThhLjkwOC45MDgsMCwwLDEsLjg4Mi0uODU5YzEuMTEyLS4wMDcsMi4yMjMsMCwzLjMzNCwwcTAsLjksMCwxLjhjLTEuMDc5LDAtMi4xNTgsMC0zLjIzNywwYS45ODMuOTgzLDAsMCwxLS42LS4xNzNBLjkyNC45MjQsMCwwLDEsMiwxMC41NzFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTI1Ljc4Niw5LjY1NWgzLjIzM2ExLDEsMCwwLDEsLjU2MS4xNDMuOTI0LjkyNCwwLDAsMSwuNDIuNzE2di4wNThhLjkzMy45MzMsMCwwLDEtLjMuNjUxLjk1Ny45NTcsMCwwLDEtLjY3Ny4yMzRjLTEuMDc5LDAtMi4xNTgsMC0zLjIzNywwUTI1Ljc4NiwxMC41NTYsMjUuNzg2LDkuNjU1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzFhMzQ4ZlxcXCIvPjxwYXRoIGQ9XFxcIk0yLDE1Ljk0NGEuOTEzLjkxMywwLDAsMSwuODg4LS44NDJjMS4xMDktLjAwNywyLjIxOSwwLDMuMzI4LDBxMCwuOSwwLDEuOGMtMS4xMDksMC0yLjIxNywwLTMuMzI2LDBBLjkxNS45MTUsMCwwLDEsMiwxNi4wNjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTI1Ljc4NiwxNS4xYzEuMTA5LDAsMi4yMTgsMCwzLjMyNiwwYS45MTQuOTE0LDAsMCwxLC44ODkuODM1di4xMTdhLjk0Ni45NDYsMCwwLDEtLjMzMS42NDEuOTczLjk3MywwLDAsMS0uNjUxLjIwN0gyNS43ODZRMjUuNzg1LDE2LDI1Ljc4NiwxNS4xWlxcXCIgc3R5bGU9XFxcImZpbGw6IzFhMzQ4ZlxcXCIvPjxwYXRoIGQ9XFxcIk0yLjQzMywyMC42NzhhMS4xMjEsMS4xMjEsMCwwLDEsLjY0My0uMTM2YzEuMDQzLjAwNiwyLjA4Ni0uMDA2LDMuMTI5LjAwNi4wMjguNiwwLDEuMi4wMTIsMS44LTEuMTEsMC0yLjIyMSwwLTMuMzMxLDBBLjkxMS45MTEsMCwwLDEsMiwyMS40ODNWMjEuNEEuOTI1LjkyNSwwLDAsMSwyLjQzMywyMC42NzhaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTI1Ljc4NiwyMC41NDNjMS4xMDgsMCwyLjIxNiwwLDMuMzI0LDBhLjkxNC45MTQsMCwwLDEsLjg5Ljg0N3YuMDlhLjkxMS45MTEsMCwwLDEtLjg4OC44NTljLTEuMTA5LjAwNy0yLjIxOCwwLTMuMzI2LDBDMjUuNzg2LDIxLjc0MywyNS43ODUsMjEuMTQzLDI1Ljc4NiwyMC41NDNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTkuNjU2LDI1Ljc4MWgxLjhjMCwxLjA4MSwwLDIuMTYyLDAsMy4yNDNhLjk1Ny45NTcsMCwwLDEtLjIzNS42NzcuOTMxLjkzMSwwLDAsMS0uNjUzLjNoLS4wNTJhLjkwNy45MDcsMCwwLDEtLjg2LS44ODJDOS42NTEsMjguMDA2LDkuNjU4LDI2Ljg5NCw5LjY1NiwyNS43ODFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTE1LjEsMjUuNzgxaDEuOGMwLDEuMTEsMCwyLjIyLDAsMy4zM2EuOTE0LjkxNCwwLDAsMS0uODM2Ljg4OWgtLjExNmEuOTQuOTQsMCwwLDEtLjYxOS0uMzA2Ljk2Mi45NjIsMCwwLDEtLjIyOC0uNjczUTE1LjEsMjcuNCwxNS4xLDI1Ljc4MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMxYTM0OGZcXFwiLz48cGF0aCBkPVxcXCJNMjAuNTQ3LDI5LjEwNmMwLTEuMTA4LDAtMi4yMTcsMC0zLjMyNWgxLjhjMCwxLjA0OCwwLDIuMSwwLDMuMTQ0YTEuMTc4LDEuMTc4LDAsMCwxLS4xMDUuNTkuOTIuOTIsMCwwLDEtLjc1Ni40ODRIMjEuNEEuOTExLjkxMSwwLDAsMSwyMC41NDcsMjkuMTA2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzFhMzQ4ZlxcXCIvPjxwYXRoIGQ9XFxcIk0yNC43MzIsOC4zNDlBMi40MjksMi40MjksMCwwLDAsMjMuMzEsNy4xMzEsMy4yNDUsMy4yNDUsMCwwLDAsMjIuMjU0LDdjLTQuMy4wMDgtOC42LS4wMTEtMTIuOTA1LjAxQTIuNDM2LDIuNDM2LDAsMCwwLDcuMTU3LDguNjA2LDMuNjExLDMuNjExLDAsMCwwLDcsOS45MzRxMCw2LjI1LDAsMTIuNWEyLjY3MywyLjY3MywwLDAsMCwuMjY4LDEuMjE5QTIuNDMxLDIuNDMxLDAsMCwwLDguNjg4LDI0Ljg3LDMuNzU2LDMuNzU2LDAsMCwwLDkuOTI3LDI1SDIyLjA3YTMuNzYyLDMuNzYyLDAsMCwwLDEuMjQzLS4xMjdBMi40MjksMi40MjksMCwwLDAsMjQuODc1LDIzLjMsMy44LDMuOCwwLDAsMCwyNSwyMi4wNzFxMC02LjI1LDAtMTIuNUEyLjY4NiwyLjY4NiwwLDAsMCwyNC43MzIsOC4zNDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTcuNSw4LjMwN2wuMDg0LS4ycS45NjgsMCwxLjkzNS4wMjRoLjM5NHEuMTc5LDAsLjM5NC0uMDEyLjc3Ni0uMDM2LDIuODA3LS4wMzYuNDA2LDAsLjc4OC4wMDZ0Ljc0MS4wMThhLjIzNC4yMzQsMCwwLDEsLjEwOC4xMDhsLS4wMjQuMTkxcS0uMDcyLjExOS0uMzU4LjExOWgtLjFhMTAuMywxMC4zLDAsMCwwLTEuMS4wNTQsMi4xNzksMi4xNzksMCwwLDAtMSwuMjQ1LjQzMi40MzIsMCwwLDAtLjE1NS4zNDYsNC4wNSw0LjA1LDAsMCwwLC4zOTQsMS40bDEuODE4LDQuMjE3LjYzNCwxLjRxLjkyMSwyLjIyMiwxLjgxOSw0LjUzOS4xLjI1MS4xNzkuNDU0bC44LTEuOTU5cS42Mi0xLjQ4MSwxLjI1Mi0zLjE1NGwuODIzLTIuMjQ2cS4wMjQtLjA3Mi4xMzEtLjQ3OGExNy4wMjYsMTcuMDI2LDAsMCwwLDEuMTU3LTQsLjU2MS41NjEsMCwwLDAtLjE2MS0uMzY0LDEuMTY1LDEuMTY1LDAsMCwwLS41Mi0uMyw3LjcyMyw3LjcyMywwLDAsMC0uOTMyLS4xNDNsLS44ODQtLjEwOGEuMzM3LjMzNywwLDAsMS0uMTA4LS4ybC4wMzYtLjEsMy44Ny0uMDM2SDIzLjZhMy4xLDMuMSwwLDAsMSwuODg1LjA4NGwuMDEyLjFhLjY0MS42NDEsMCwwLDEtLjA3Mi4yNTEsMi40NDksMi40NDksMCwwLDEtLjUyNi4xMTksMy42LDMuNiwwLDAsMC0xLjI0NC4yODEsMS44MTUsMS44MTUsMCwwLDAtLjUuNjg3bC0zLjEzNCw3Ljc2NXEtMS40NjYsMy41LTIuMDg2LDUuNDIzbC0uMzQ1LDEuMDM5YS41MzEuNTMxLDAsMCwxLS4yNjMuMSwxLjM4MywxLjM4MywwLDAsMS0uMy0uMDM2cS0xLjQyMi0zLjY3Ni0yLjMxOC01LjY4MUwxMC4wNTUsOS45MmEzLjI0NywzLjI0NywwLDAsMC0uNTkxLS44OSw1LjQ2Myw1LjQ2MywwLDAsMC0xLjM3OS0uNDI0LDQuMzQ3LDQuMzQ3LDAsMCwxLS40NjYtLjExOUEuMzI2LjMyNiwwLDAsMSw3LjUsOC4zMDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzVjMmZmXFxcIi8+XCIsXG5cdFwiVkhETFwiOiBcIjxwYXRoIGQ9XFxcIk0yLDJIMzBWMzBIMlptMS42ODkuMDY3QTEuNjI0LDEuNjI0LDAsMCwwLDIuMDYzLDMuNjkyVjI4LjMxNEExLjYyNSwxLjYyNSwwLDAsMCwzLjY4OSwyOS45NEgyOC4zMTZhMS42MjUsMS42MjUsMCwwLDAsMS42MjYtMS42MjZWMy42OTJhMS42MjQsMS42MjQsMCwwLDAtMS42MjYtMS42MjVaTTMuMDA4LDI4LjA3OWEuOTExLjkxMSwwLDAsMCwuOTExLjkxMkgyOC4wODNhLjkxMS45MTEsMCwwLDAsLjkxMS0uOTEyVjMuOTE5YS45MS45MSwwLDAsMC0uOTExLS45MTFIMy45MTlhLjkxLjkxLDAsMCwwLS45MTEuOTExWlxcXCIgc3R5bGU9XFxcImZpbGw6IzBkOWIzNVxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjUuNTIgNS41MDIgMTguODU4IDI2LjQ5MSAxMy4xNTQgMjYuNDkxIDYuNDkyIDUuNTAyIDEwLjUwOCA1LjUwMiAxNi4wMjkgMjIuNzk1IDIxLjUwNCA1LjUwMiAyNS41MiA1LjUwMlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcInZpbVwiOiBcIjxkZWZzPjxjbGlwUGF0aCBpZD1cXFwiYVxcXCI+PHBvbHlnb24gcG9pbnRzPVxcXCIyIDIgMzAgMiAzMCAzMCAyIDMwIDIgMiAyIDJcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7Y2xpcC1ydWxlOmV2ZW5vZGRcXFwiLz48L2NsaXBQYXRoPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3ZpbTwvdGl0bGU+PHBvbHlnb24gcG9pbnRzPVxcXCIyOS45ODkgMTUuODU2IDE1Ljg1NiAyLjAxMSAyLjAxMSAxNi4xMzYgMTUuODU2IDI5Ljk4OSAyOS45ODkgMTUuODU2IDI5Ljk4OSAxNS44NTZcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjA7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48ZyBzdHlsZT1cXFwiY2xpcC1wYXRoOnVybCgjYSlcXFwiPjxwb2x5Z29uIHBvaW50cz1cXFwiMjkuOTg5IDE1Ljg1NiAxNS44NTYgMi4wMTEgMi4wMTEgMTYuMTM2IDE1Ljg1NiAyOS45ODkgMjkuOTg5IDE1Ljg1NiAyOS45ODkgMTUuODU2XFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PC9nPjxwb2x5Z29uIHBvaW50cz1cXFwiMjguNTc1IDE1Ljg1NiAyOS40MjIgMTUuODU2IDE1Ljg1NiAyOS40MjIgMTUuODU2IDI4LjU3NSAyOC41NzUgMTUuODU2IDI4LjU3NSAxNS44NTZcXFwiIHN0eWxlPVxcXCJmaWxsOiMyOTY5NWQ7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI4LjU3NSAxNS44NTYgMjkuNDIyIDE1Ljg1NiAxNS44NTYgMjkuNDIyIDE1Ljg1NiAyOC41NzUgMjguNTc1IDE1Ljg1NiAyOC41NzUgMTUuODU2XFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyLjU3OCAxNi4xMzYgMy40MjUgMTYuMTM2IDE1Ljg1NiAyOC41NzUgMTUuODU2IDI5LjQyMiAyLjU3OCAxNi4xMzYgMi41NzggMTYuMTM2XFxcIiBzdHlsZT1cXFwiZmlsbDojMzE3MzY3O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyLjU3OCAxNi4xMzYgMy40MjUgMTYuMTM2IDE1Ljg1NiAyOC41NzUgMTUuODU2IDI5LjQyMiAyLjU3OCAxNi4xMzYgMi41NzggMTYuMTM2XFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNS44NTYgMy40MTggMTUuODU2IDIuNTc4IDIuNTc4IDE2LjEzNiAzLjQyNSAxNi4xMzYgMTUuODU2IDMuNDE4IDE1Ljg1NiAzLjQxOFxcXCIgc3R5bGU9XFxcImZpbGw6IzYwYzJhYztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTUuODU2IDMuNDE4IDE1Ljg1NiAyLjU3OCAyLjU3OCAxNi4xMzYgMy40MjUgMTYuMTM2IDE1Ljg1NiAzLjQxOCAxNS44NTYgMy40MThcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE1Ljg1NiAyLjU3OCAxNS44NTYgMy40MTggMjguNTc1IDE1Ljg1NiAyOS40MjIgMTUuODU2IDE1Ljg1NiAyLjU3OCAxNS44NTYgMi41NzhcXFwiIHN0eWxlPVxcXCJmaWxsOiM0M2I1NGE7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE1Ljg1NiAyLjU3OCAxNS44NTYgMy40MTggMjguNTc1IDE1Ljg1NiAyOS40MjIgMTUuODU2IDE1Ljg1NiAyLjU3OCAxNS44NTYgMi41NzhcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE1Ljg1NiAyOC41NzUgMjguNTc1IDE1Ljg1NiAxNS44NTYgMy40MTggMy40MjUgMTYuMTM2IDE1Ljg1NiAyOC41NzUgMTUuODU2IDI4LjU3NVxcXCIgc3R5bGU9XFxcImZpbGw6IzNjODM3NjtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTUuODU2IDI4LjU3NSAyOC41NzUgMTUuODU2IDE1Ljg1NiAzLjQxOCAzLjQyNSAxNi4xMzYgMTUuODU2IDI4LjU3NSAxNS44NTYgMjguNTc1XFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxOC40OTggNi4yNDYgMTkuMzQ1IDcuMSAxMy41MDIgMTMuMDI4IDEzLjUwMiA3LjEgMTQuMDY5IDcuMSAxNC45MTYgNi4yNDYgMTQuOTE2IDMuOTkyIDE0LjA2OSAzLjEzOCA0LjY1MiAzLjEzOCAzLjgwNSAzLjk5MiAzLjgwNSA2LjI0NiA0LjY1MiA3LjEgNS4zMTIgNy4xIDUuMzEyIDI2LjMxNCA2LjM0NiAyNy4xNjEgOS4yNjcgMjcuMTYxIDI5LjUxNiA2LjI0NiAyOS41MTYgMy45OTIgMjguNjY5IDMuMTM4IDE5LjQzOCAzLjEzOCAxOC40OTggMy45OTIgMTguNDk4IDYuMjQ2IDE4LjQ5OCA2LjI0NlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMDtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTguNDk4IDYuMjQ2IDE5LjM0NSA3LjEgMTMuNTAyIDEzLjAyOCAxMy41MDIgNy4xIDE0LjA2OSA3LjEgMTQuOTE2IDYuMjQ2IDE0LjkxNiAzLjk5MiAxNC4wNjkgMy4xMzggNC42NTIgMy4xMzggMy44MDUgMy45OTIgMy44MDUgNi4yNDYgNC42NTIgNy4xIDUuMzEyIDcuMSA1LjMxMiAyNi4zMTQgNi4zNDYgMjcuMTYxIDkuMjY3IDI3LjE2MSAyOS41MTYgNi4yNDYgMjkuNTE2IDMuOTkyIDI4LjY2OSAzLjEzOCAxOS40MzggMy4xMzggMTguNDk4IDMuOTkyIDE4LjQ5OCA2LjI0NiAxOC40OTggNi4yNDZcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjQuOTMyIDYuNTMzIDQuMzY1IDUuOTY2IDQuMzY1IDQuMjcyIDQuOTMyIDMuNzA1IDEzLjc4OSAzLjY5OCAxNC4zNDkgNC4yNzIgMTMuNzg5IDQuNTQ0IDEzLjUwMiA0LjI3MiA0LjkzMiA1LjY3OSA0LjkzMiA2LjUzMyA0LjkzMiA2LjUzM1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZjtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiNC45MzIgNi41MzMgNC4zNjUgNS45NjYgNC4zNjUgNC4yNzIgNC45MzIgMy43MDUgMTMuNzg5IDMuNjk4IDE0LjM0OSA0LjI3MiAxMy43ODkgNC41NDQgMTMuNTAyIDQuMjcyIDQuOTMyIDUuNjc5IDQuOTMyIDYuNTMzIDQuOTMyIDYuNTMzXFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI2LjYyNiAyNi41OTQgNS45NjYgMjYuMDI3IDUuOTY2IDYuNTI2IDYuNjI2IDUuOTY2IDYuNjI2IDI2LjU5NCA2LjYyNiAyNi41OTRcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjYuNjI2IDI2LjU5NCA1Ljk2NiAyNi4wMjcgNS45NjYgNi41MjYgNi42MjYgNS45NjYgNi42MjYgMjYuNTk0IDYuNjI2IDI2LjU5NFxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjAuNzU5IDYuNTMzIDIxLjMyNiA1Ljk2NiAyMS4zMjYgNy4xIDExLjkwMiAxNi43MDMgMTIuOTQyIDE0LjQ0MiAyMC43NTkgNi41MzMgMjAuNzU5IDYuNTMzXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMC43NTkgNi41MzMgMjEuMzI2IDUuOTY2IDIxLjMyNiA3LjEgMTEuOTAyIDE2LjcwMyAxMi45NDIgMTQuNDQyIDIwLjc1OSA2LjUzMyAyMC43NTkgNi41MzNcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjYuODIgNS42ODYgNi42MjYgNS45NjYgNS45NjYgNi41MzMgNC45MzIgNi41MzMgNC45MzIgNS4zOTkgNi44MiA1LjY4NiA2LjgyIDUuNjg2XFxcIiBzdHlsZT1cXFwiZmlsbDojOTI5NDk3O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI2LjgyIDUuNjg2IDYuNjI2IDUuOTY2IDUuOTY2IDYuNTMzIDQuOTMyIDYuNTMzIDQuOTMyIDUuMzk5IDYuODIgNS42ODYgNi44MiA1LjY4NlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTIuOTQyIDYuNTMzIDEyLjk0MiAxNC40NDIgMTEuOTAyIDE2LjY5NiAxMS45MDIgNS45NTggMTMuNTAyIDUuOTU4IDEzLjc4OSA1LjY3OCAxMy41MDIgNC4yNzIgMTQuMzQ5IDQuMjcyIDE0LjM0OSA1Ljk2NiAxMy43ODkgNi41MzMgMTIuOTQyIDYuNTMzIDEyLjk0MiA2LjUzM1xcXCIgc3R5bGU9XFxcImZpbGw6IzkyOTQ5NztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTIuOTQyIDYuNTMzIDEyLjk0MiAxNC40NDIgMTEuOTAyIDE2LjY5NiAxMS45MDIgNS45NTggMTMuNTAyIDUuOTU4IDEzLjc4OSA1LjY3OCAxMy41MDIgNC4yNzIgMTQuMzQ5IDQuMjcyIDE0LjM0OSA1Ljk2NiAxMy43ODkgNi41MzMgMTIuOTQyIDYuNTMzIDEyLjk0MiA2LjUzM1xcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTkuNjI1IDYuNTMzIDE5LjA2NSA1Ljk2NiAxOS4wNjUgNC4yNzIgMTkuNzE4IDMuNzA1IDI4LjI5NSAzLjcwNSAyOC45NTYgNC4yNzIgMjguMDA4IDUuMTE5IDE5LjYyNSA1LjY3OSAxOS42MjUgNi41MzMgMTkuNjI1IDYuNTMzXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxOS42MjUgNi41MzMgMTkuMDY1IDUuOTY2IDE5LjA2NSA0LjI3MiAxOS43MTggMy43MDUgMjguMjk1IDMuNzA1IDI4Ljk1NiA0LjI3MiAyOC4wMDggNS4xMTkgMTkuNjI1IDUuNjc5IDE5LjYyNSA2LjUzMyAxOS42MjUgNi41MzNcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI4Ljk1NiA1Ljk2NiA5LjA3NCAyNi41OTQgNi42MjYgMjYuNTk0IDYuNjI2IDI1Ljc0NyA4LjQyIDI1Ljc0NyAyOC4yOTUgNS4zOTkgMjguMDA4IDQuMjcyIDI4Ljk1NiA0LjI3MiAyOC45NTYgNS45NjYgMjguOTU2IDUuOTY2XFxcIiBzdHlsZT1cXFwiZmlsbDojOTI5NDk3O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyOC45NTYgNS45NjYgOS4wNzQgMjYuNTk0IDYuNjI2IDI2LjU5NCA2LjYyNiAyNS43NDcgOC40MiAyNS43NDcgMjguMjk1IDUuMzk5IDI4LjAwOCA0LjI3MiAyOC45NTYgNC4yNzIgMjguOTU2IDUuOTY2IDI4Ljk1NiA1Ljk2NlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjEuNTEyIDUuNjg2IDIxLjMxOSA1Ljk2NiAyMC43NTkgNi41MzMgMTkuNjI1IDYuNTMzIDE5LjYyNSA1LjM5OSAyMS41MTIgNS42ODYgMjEuNTEyIDUuNjg2XFxcIiBzdHlsZT1cXFwiZmlsbDojOTI5NDk3O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMS41MTIgNS42ODYgMjEuMzE5IDUuOTY2IDIwLjc1OSA2LjUzMyAxOS42MjUgNi41MzMgMTkuNjI1IDUuMzk5IDIxLjUxMiA1LjY4NiAyMS41MTIgNS42ODZcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjExLjkwMiAxNi42OTYgMTEuOTAyIDUuOTU4IDEzLjUwMiA1Ljk1OCAxMy43ODkgNS42NzkgMTMuNzg5IDQuNTQ0IDEzLjUwMiA0LjI2NSA1LjIxMiA0LjI2NSA0LjkzMiA0LjU0NCA0LjkzMiA1LjY3OSA1LjIxMiA1Ljk1OCA2LjYyNiA1Ljk1OCA2LjYyNiAyNS43NDcgNi45OTIgMjYuMDI3IDguNjA3IDI2LjAyNyAyOC4zODkgNS4zOTkgMjguMzg5IDQuNTg4IDI4LjEwMiA0LjI2NSAxOS45MTIgNC4yNjUgMTkuNjI1IDQuNTQ0IDE5LjYyNSA1LjY4NiAxOS45MTIgNS45NjYgMjEuMzI2IDUuOTY2IDIxLjMyNiA3LjEgMTEuOTAyIDE2LjY5NiAxMS45MDIgMTYuNjk2XFxcIiBzdHlsZT1cXFwiZmlsbDojZDBkMmQzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxMS45MDIgMTYuNjk2IDExLjkwMiA1Ljk1OCAxMy41MDIgNS45NTggMTMuNzg5IDUuNjc5IDEzLjc4OSA0LjU0NCAxMy41MDIgNC4yNjUgNS4yMTIgNC4yNjUgNC45MzIgNC41NDQgNC45MzIgNS42NzkgNS4yMTIgNS45NTggNi42MjYgNS45NTggNi42MjYgMjUuNzQ3IDYuOTkyIDI2LjAyNyA4LjYwNyAyNi4wMjcgMjguMzg5IDUuMzk5IDI4LjM4OSA0LjU4OCAyOC4xMDIgNC4yNjUgMTkuOTEyIDQuMjY1IDE5LjYyNSA0LjU0NCAxOS42MjUgNS42ODYgMTkuOTEyIDUuOTY2IDIxLjMyNiA1Ljk2NiAyMS4zMjYgNy4xIDExLjkwMiAxNi42OTYgMTEuOTAyIDE2LjY5NlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTcuMDQxIDE2LjcxMSAxNy43MDEgMTYuMTQ0IDE5LjM5NSAxNi4xNDQgMTkuODY5IDE2LjcxMSAxOS4zMDIgMTguNDA1IDE4LjY0OSAxOC45NzIgMTYuOTU1IDE4Ljk3MiAxNi40NzQgMTguNDA1IDE3LjA0MSAxNi43MTEgMTcuMDQxIDE2LjcxMVxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMDtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTcuMDQxIDE2LjcxMSAxNy43MDEgMTYuMTQ0IDE5LjM5NSAxNi4xNDQgMTkuODY5IDE2LjcxMSAxOS4zMDIgMTguNDA1IDE4LjY0OSAxOC45NzIgMTYuOTU1IDE4Ljk3MiAxNi40NzQgMTguNDA1IDE3LjA0MSAxNi43MTEgMTcuMDQxIDE2LjcxMVxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTcuNjA4IDI2LjAzNCAxOS4zMDkgMjAuOTUzIDE4Ljc0MiAyMC45NTMgMTkuMzA5IDE5LjI1MSAyMS44NDMgMTkuMjUxIDIyLjQxIDE5LjgxOSAyMi43OSAxOS44MTkgMjMuMzUgMTkuMjUxIDI1LjIzOCAxOS4yNTEgMjUuODA1IDE5LjgxOSAyNi4xNzggMTkuODE5IDI2Ljc0NSAxOS4yNTEgMjguODEyIDE5LjI1MSAyOS41NjYgMjAuMzg2IDI4LjMzMSAyNC40MDUgMjguODkxIDI0LjQwNSAyOC4zNDYgMjYuMDM0IDI0Ljk1MSAyNi4wMzQgMjYuMjc4IDIyLjA3OSAyNS40MzEgMjIuMDc5IDI0LjY0OSAyNC4zOTEgMjUuMjA5IDI0LjM5MSAyNC42NzggMjYuMDM0IDIxLjI4MyAyNi4wMzQgMjIuNjAzIDIyLjA3OSAyMS43NTYgMjIuMDc5IDIwLjk2NyAyNC40MDUgMjEuNTM0IDI0LjQwNSAyMS4wMDMgMjYuMDM0IDE3LjYwOCAyNi4wMzQgMTcuNjA4IDI2LjAzNFxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMDtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTcuNjA4IDI2LjAzNCAxOS4zMDkgMjAuOTUzIDE4Ljc0MiAyMC45NTMgMTkuMzA5IDE5LjI1MSAyMS44NDMgMTkuMjUxIDIyLjQxIDE5LjgxOSAyMi43OSAxOS44MTkgMjMuMzUgMTkuMjUxIDI1LjIzOCAxOS4yNTEgMjUuODA1IDE5LjgxOSAyNi4xNzggMTkuODE5IDI2Ljc0NSAxOS4yNTEgMjguODEyIDE5LjI1MSAyOS41NjYgMjAuMzg2IDI4LjMzMSAyNC40MDUgMjguODkxIDI0LjQwNSAyOC4zNDYgMjYuMDM0IDI0Ljk1MSAyNi4wMzQgMjYuMjc4IDIyLjA3OSAyNS40MzEgMjIuMDc5IDI0LjY0OSAyNC4zOTEgMjUuMjA5IDI0LjM5MSAyNC42NzggMjYuMDM0IDIxLjI4MyAyNi4wMzQgMjIuNjAzIDIyLjA3OSAyMS43NTYgMjIuMDc5IDIwLjk2NyAyNC40MDUgMjEuNTM0IDI0LjQwNSAyMS4wMDMgMjYuMDM0IDE3LjYwOCAyNi4wMzQgMTcuNjA4IDI2LjAzNFxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjguNTU0IDE5LjgxOSAyOC45OTIgMjAuNDQzIDI3LjU5OSAyNC45MDcgMjguMTU5IDI0LjkwNyAyNy45NzIgMjUuNDY3IDI1LjcxMSAyNS40NjcgMjcuMDMyIDIxLjUxMiAyNS4wNTEgMjEuNTEyIDIzLjkyNCAyNC45MDcgMjQuNDg0IDI0LjkwNyAyNC4yOTcgMjUuNDY3IDIyLjAzNiAyNS40NjcgMjMuMzU3IDIxLjUxMiAyMS4zNzYgMjEuNTEyIDIwLjI0OSAyNC45MDcgMjAuODE2IDI0LjkwNyAyMC42MjIgMjUuNDY3IDE4LjM2MSAyNS40NjcgMjAuMDYzIDIwLjM4NiAxOS40OTUgMjAuMzg2IDE5LjY4MiAxOS44MTkgMjEuNzU2IDE5LjgxOSAyMi4zMjMgMjAuMzg2IDIyLjg4MyAyMC4zODYgMjMuNDUgMTkuODE5IDI1LjE0NCAxOS44MTkgMjUuNzExIDIwLjM4NiAyNi4yNzggMjAuMzg2IDI2Ljg0NSAxOS44MTkgMjguNTU0IDE5LjgxOSAyOC41NTQgMTkuODE5XFxcIiBzdHlsZT1cXFwiZmlsbDojZDBkMmQzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyOC41NTQgMTkuODE5IDI4Ljk5MiAyMC40NDMgMjcuNTk5IDI0LjkwNyAyOC4xNTkgMjQuOTA3IDI3Ljk3MiAyNS40NjcgMjUuNzExIDI1LjQ2NyAyNy4wMzIgMjEuNTEyIDI1LjA1MSAyMS41MTIgMjMuOTI0IDI0LjkwNyAyNC40ODQgMjQuOTA3IDI0LjI5NyAyNS40NjcgMjIuMDM2IDI1LjQ2NyAyMy4zNTcgMjEuNTEyIDIxLjM3NiAyMS41MTIgMjAuMjQ5IDI0LjkwNyAyMC44MTYgMjQuOTA3IDIwLjYyMiAyNS40NjcgMTguMzYxIDI1LjQ2NyAyMC4wNjMgMjAuMzg2IDE5LjQ5NSAyMC4zODYgMTkuNjgyIDE5LjgxOSAyMS43NTYgMTkuODE5IDIyLjMyMyAyMC4zODYgMjIuODgzIDIwLjM4NiAyMy40NSAxOS44MTkgMjUuMTQ0IDE5LjgxOSAyNS43MTEgMjAuMzg2IDI2LjI3OCAyMC4zODYgMjYuODQ1IDE5LjgxOSAyOC41NTQgMTkuODE5IDI4LjU1NCAxOS44MTlcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cGF0aCBkPVxcXCJNMTkuMDIyLDE5LjI1MSwxNy4yOTIsMjQuNGguNTg5bC0uNTYsMS42MzdIMTMuOTMzbDEuNjk0LTUuMDgySDE1LjA2bDMuOTYyLTEuN1ptLTMuOTYyLDEuNy41NjctMS43aDMuNGwtMy45NjIsMS43WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMDtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4wMjIsMTkuMjUxLDE3LjI5MiwyNC40aC41ODlsLS41NiwxLjYzN0gxMy45MzNsMS42OTQtNS4wODJIMTUuMDZsMy45NjItMS43Wm0tMy45NjIsMS43LjU2Ny0xLjdoMy40bC0zLjk2MiwxLjdaXFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi45NDcgMjUuNDY3IDE3LjEzNCAyNC45MDcgMTYuNTY3IDI0LjkwNyAxOC4yNjggMTkuODE5IDE1LjkxNCAxOS44MTkgMTUuNzIgMjAuMzg2IDE2LjM4IDIwLjM4NiAxNC42ODYgMjUuNDY3IDE2Ljk0NyAyNS40NjcgMTYuOTQ3IDI1LjQ2N1xcXCIgc3R5bGU9XFxcImZpbGw6I2QwZDJkMztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTYuOTQ3IDI1LjQ2NyAxNy4xMzQgMjQuOTA3IDE2LjU2NyAyNC45MDcgMTguMjY4IDE5LjgxOSAxNS45MTQgMTkuODE5IDE1LjcyIDIwLjM4NiAxNi4zOCAyMC4zODYgMTQuNjg2IDI1LjQ2NyAxNi45NDcgMjUuNDY3IDE2Ljk0NyAyNS40NjdcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE4LjgyOCAxOC4xMjUgMTkuMjA4IDE2Ljk5MSAxOS4wMjIgMTYuNzExIDE3Ljg4OCAxNi43MTEgMTcuNTE0IDE2Ljk5MSAxNy4xMzQgMTguMTI1IDE3LjMyOCAxOC40MDUgMTguNDYyIDE4LjQwNSAxOC44MjggMTguMTI1IDE4LjgyOCAxOC4xMjVcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMGQyZDM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE4LjgyOCAxOC4xMjUgMTkuMjA4IDE2Ljk5MSAxOS4wMjIgMTYuNzExIDE3Ljg4OCAxNi43MTEgMTcuNTE0IDE2Ljk5MSAxNy4xMzQgMTguMTI1IDE3LjMyOCAxOC40MDUgMTguNDYyIDE4LjQwNSAxOC44MjggMTguMTI1IDE4LjgyOCAxOC4xMjVcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz5cIixcblx0XCJWaXN1YWwgQmFzaWNcIjogXCI8cGF0aCBkPVxcXCJNNi42Nyw3LjgzNiw5LDE4LjkxNSwxMS4zMzYsNy44MzZIMTZMMTEuMzM2LDI0LjE2NEg2LjY3MkwyLDcuODM2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNTE5YVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC4zMzEsNy44MzZoNy42YTQuMDgsNC4wOCwwLDAsMSwyLjksMS43NDksMy43OCwzLjc4LDAsMCwxLC41NzEsMi4wNCwzLjk4NSwzLjk4NSwwLDAsMS0uNTcxLDIuMDM0LDQuMTA4LDQuMTA4LDAsMCwxLTIuMzQxLDEuNzYzLDQuMSw0LjEsMCwwLDEsMi45MjksMS43NTYsMy44LDMuOCwwLDAsMSwuNTgsMi4xLDQuNjYzLDQuNjYzLDAsMCwxLS41NzksMi41NDYsNS4wNDcsNS4wNDcsMCwwLDEtMy41LDIuMzM4SDE4LjMzMVpNMjMsMTQuMjUyaDEuMTY2YTEuNzU0LDEuNzU0LDAsMCwwLDAtMy41SDIzWm0wLDdIMjQuMzlhMi4wNDcsMi4wNDcsMCwwLDAsMC00LjA4OUgyM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDUxOWFcXFwiLz5cIixcblx0XCJXZWJBc3NlbWJseVwiOiBcIjxwYXRoIGQ9XFxcIk0xOS4xNTMsMi4zNVYyLjVhMy4yLDMuMiwwLDEsMS02LjQsMGgwVjIuMzVIMlYzMC4yNjlIMjkuOTE5VjIuMzVaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU0ZmYwXFxcIi8+PHBhdGggZD1cXFwiTTguNDg1LDE3LjRoMS44NUwxMS42LDI0LjEyM2guMDIzTDEzLjE0LDE3LjRoMS43MzFsMS4zNzEsNi44MWguMDI3bDEuNDQtNi44MWgxLjgxNWwtMi4zNTgsOS44ODVIMTUuMzI5bC0xLjM2LTYuNzI4aC0uMDM2bC0xLjQ1Niw2LjcyOGgtMS44N1ptMTMuMTI0LDBoMi45MTdsMi45LDkuODg1SDI1LjUxNWwtLjYzLTIuMkgyMS41NjJsLS40ODYsMi4ySDE5LjIxN1ptMS4xMSwyLjQzNy0uODA3LDMuNjI3aDIuNTEyTDIzLjUsMTkuODMyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHRcIldvbGZyYW0gbGFuZ3VhZ2VcIjogXCI8cGF0aCBkPVxcXCJNMzAsMjAuNTUsMjUuOTQsMTYsMzAsMTEuNDVsLTUuOTQ4LTEuMjk0LjU5NS02LjA2N0wxOS4wNzEsNi41NDMsMTUuOTkzLDEuMjc5LDEyLjkyOSw2LjU0Myw3LjM1Myw0LjA4OWwuNTk1LDYuMDY3TDIsMTEuNDUsNi4wNTksMTYsMiwyMC41NWw1Ljk0OCwxLjI5NC0uNTk1LDYuMDY3LDUuNTc2LTIuNDU0LDMuMDc4LDUuMjY0LDMuMDYzLTUuMjY0LDUuNTkxLDIuNDU0LS42MS02LjA2N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMTBcXFwiLz48cGF0aCBkPVxcXCJNMTkuMzUzLDExLjQ1YTYuOTY4LDYuOTY4LDAsMCwxLTMuNDIuODYyLDUuNDQ2LDUuNDQ2LDAsMCwxLTMuMjEyLS44NjJBNy4xLDcuMSwwLDAsMSwxMi41LDE0LjhhNi4yMjUsNi4yMjUsMCwwLDEtMS44NzQsMi45MTQsNy40NTQsNy40NTQsMCwwLDEsMy4xMzgsMS4xOSw5LjY1OSw5LjY1OSwwLDAsMSwyLjIxNiwyLjcyMSw4LjE5NCw4LjE5NCwwLDAsMSwyLjE0MS0yLjY5MSw3LjYwNSw3LjYwNSwwLDAsMSwzLjI0Mi0xLjIsMTIuNTYyLDEyLjU2MiwwLDAsMS0xLjkzMy0yLjk0NEE2LjcxOCw2LjcxOCwwLDAsMSwxOS4zNTMsMTEuNDVabS0xLjksNi41NDNhNS4yMzMsNS4yMzMsMCwwLDAtMS40NTcsMS42MzYsNi4yMzYsNi4yMzYsMCwwLDAtMS41LTEuNjIxLDUuMTkxLDUuMTkxLDAsMCwwLTEuOTQ4LS44NDgsNi44MzksNi44MzksMCwwLDAsMS4xMTUtMi4wMDcsNi4xOCw2LjE4LDAsMCwwLC4yMjMtMi4wODIsNi4zMTcsNi4zMTcsMCwwLDAsMi4wODIuNDQ2LDYuNTUyLDYuNTUyLDAsMCwwLDIuMTcxLS40NjEsNC41MjEsNC41MjEsMCwwLDAsLjA3NCwyLjE1Niw2LjcxLDYuNzEsMCwwLDAsMS4yNDksMS45MzNBNy4wMzEsNy4wMzEsMCwwLDAsMTcuNDUsMTcuOTkzWm00LjIzOC00LjAxNWMtLjM1Ny0xLjE3NS42NTQtNi43MDYuNjU0LTYuNzA2UzE4LjU1LDkuODQ0LDE1Ljg4OCw5Ljg0NHMtNi4yMy0yLjU3Mi02LjIzLTIuNTcyLDEuMTc1LDQuMDE1LjQ2MSw2LjU4Ny00LjM4Nyw1LjQ3Mi00LjM4Nyw1LjQ3Miw0Ljc4OC4yODMsNi42LDEuNSwzLjY1OCw1Ljk0OCwzLjY1OCw1Ljk0OCwyLjQ1NC01LjIsMy40OC01Ljk0OCw2LjgtMS41LDYuOC0xLjUtNC4yMjMtNC4xNzgtNC41OC01LjM1M1ptLTIuODQsNS45NjNhOS40NDQsOS40NDQsMCwwLDAtMi44NCw0LjE3OHMtMS40MTMtMy4xNTItMi45NzQtNC4yMjNTOC4zLDE4LjU0Myw4LjMsMTguNTQzczIuNDU0LTIuMTcxLDMuMDQ4LTQuMWExMS45MjMsMTEuOTIzLDAsMCwwLS4xLTQuOTUyLDExLjMsMTEuMywwLDAsMCw0LjY2OSwxLjYyMWMyLjAzNywwLDQuODQ4LTEuNjIxLDQuODQ4LTEuNjIxcy0uODE4LDMuMDMzLS4xNjQsNC45MjIsMy4xMDgsNC4xMzQsMy4xMDgsNC4xMzRhMTAuNTU3LDEwLjU1NywwLDAsMC00Ljg2MiwxLjRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdFwiWE1MXCI6IFwiPHBhdGggZD1cXFwiTTIwLjQyLDIxLjE1N2wyLjIxMSwyLjIxMUwzMCwxNiwyMi42MzEsOC42MzEsMjAuNDIsMTAuODQzLDI1LjU4LDE2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2YxNjYyYVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS41OCwxMC44NDMsOS4zNjksOC42MzEsMiwxNmw3LjM2OSw3LjM2OSwyLjIxMS0yLjIxMUw2LjQyLDE2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2YxNjYyYVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy40MTEsNy42NzdsMS42LjQzNy00LjQyLDE2LjIwOS0xLjYtLjQzNyw0LjQyLTE2LjIwOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmMTY2MmFcXFwiLz5cIixcblx0XCJYUXVlcnlcIjogXCI8cGF0aCBkPVxcXCJNMjAuNDIsMjEuMTU3bDIuMjExLDIuMjExTDMwLDE2LDIyLjYzMSw4LjYzMSwyMC40MiwxMC44NDMsMjUuNTgsMTZaTTExLjU4LDEwLjg0Myw5LjM2OSw4LjYzMSwyLDE2bDcuMzY5LDcuMzY5LDIuMjExLTIuMjExTDYuNDIsMTZabTUuODMxLTMuMTY2LDEuNi40MzctNC40MiwxNi4yMDktMS42LS40MzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjE2NjJhXFxcIi8+PHBhdGggZD1cXFwiTTIwLjMzMiwxOC40NjJhMy4zNTQsMy4zNTQsMCwwLDEsLjk3NS0xLjQyMyw0LjAxNCw0LjAxNCwwLDAsMSwxLjYxNy0uOEE5LjExOCw5LjExOCwwLDAsMSwyNS4xMzgsMTZhNS40NzIsNS40NzIsMCwwLDEsMy42ODEsMS4wMzlBMy41LDMuNSwwLDAsMSwzMCwxOS44MDhhNC40Nyw0LjQ3LDAsMCwxLS4yNCwxLjQ5MSwzLjEyNCwzLjEyNCwwLDAsMS0uODM4LDEuMjM5bC0xLjY3NSwxLjZhMS41MTIsMS41MTIsMCwwLDAtLjQyNC43ODksNS4zMDcsNS4zMDcsMCwwLDAtLjEsMS4xSDIzdi0uNTRhNi4zMiw2LjMyLDAsMCwxLC4yMDctMS43NzgsMi44ODYsMi44ODYsMCwwLDEsLjc4LTEuMjRsMS4zNTItMS4yODlhMS44NCwxLjg0LDAsMCwwLC41NjMtLjg5NCwzLjY4MiwzLjY4MiwwLDAsMCwuMS0uOCwxLjUsMS41LDAsMCwwLS4yNTItLjkuOS45LDAsMCwwLS43NzktLjM0NiwxLjI1NSwxLjI1NSwwLDAsMC0uNDgzLjA4Ni43MjQuNzI0LDAsMCwwLS4zNDQuMzM3LDIuMzQ3LDIuMzQ3LDAsMCwwLS4yMTcuNzIxLDcuNjE0LDcuNjE0LDAsMCwwLS4wODEsMS4yNEgyMEE2LjE1NSw2LjE1NSwwLDAsMSwyMC4zMzIsMTguNDYyWm02LjQ1Nyw4LjVWMzBIMjIuOTM2VjI2Ljk2MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmY2JhMDBcXFwiLz5cIixcblx0XCJZQU1MXCI6IFwiPHBhdGggZD1cXFwiTTIsMTIuMjE4Yy43NTUsMCwxLjUxLS4wMDgsMi4yNjQsMGwuMDUzLjAzOFE1LjcsMTMuNjM4LDcuMDc4LDE1LjAxNGMuODkxLS45MDYsMS44LTEuNzk0LDIuNy0yLjcuMDUzLS4wNTIuMTEtLjExMy4xOTItLjEuNjA4LDAsMS4yMTUsMCwxLjgyMywwYTEuNCwxLjQsMCwwLDEsLjM1My4wMTljLS43LjY3LTEuMzc3LDEuMzY5LTIuMDY5LDIuMDVMNS41NDUsMTguOGMtLjMzMS4zMjQtLjY0OC42NjMtLjk4OS45NzUtLjc1NC4wMjItMS41MTEuMDA3LTIuMjY2LjAwNywxLjIyMy0xLjIwOSwyLjQzMS0yLjQzMywzLjY1OC0zLjYzN0M0LjYyNywxNC44NDEsMy4zMTgsMTMuNTI1LDIsMTIuMjE4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZTg4NVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi43LDEyLjIxOGMuNjEzLDAsMS4yMjYsMCwxLjgzOSwwcTAsMy43ODMsMCw3LjU2NmMtLjYxMSwwLTEuMjIyLjAxMi0xLjgzMi0uMDA4LDAtMS42NjQsMC0zLjMyOSwwLTQuOTk0LTEuNiwxLjYwNy0zLjIwOSwzLjItNC44MTEsNC44LS4wODkuMDgtLjE2Ni4yMTctLjMwNS4xOTQtLjgyNC0uMDA2LTEuNjQ5LDAtMi40NzQsMFE4LjkxNiwxNiwxMi43LDEyLjIxOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmU4ODVcXFwiLz48cGF0aCBkPVxcXCJNMTQuOTU4LDEyLjIyYy40Ny0uMDA5LjkzOSwwLDEuNDA5LDAsLjgzNi44NTMsMS42OSwxLjY4OSwyLjUzNiwyLjUzMnExLjI2OC0xLjI2NywyLjUzOS0yLjUzMi43LDAsMS40LDAtLjAwOCwzLjc4NCwwLDcuNTY3Yy0uNDcxLDAtLjk0My4wMDYtMS40MTQsMHEuMDA4LTIuMzg3LDAtNC43NzNjLS44NDQuODQzLTEuNjc2LDEuNy0yLjUyNiwyLjUzNi0uODU2LS44MzUtMS42ODctMS42OTUtMi41MzItMi41NDEsMCwxLjU5NC0uMDA2LDMuMTg4LjAwNiw0Ljc4MS0uNDcyLDAtLjk0My4wMDUtMS40MTUsMFExNC45NTgsMTYsMTQuOTU4LDEyLjIyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZTg4NVxcXCIvPjxwYXRoIGQ9XFxcIk0yMy4yNTksMTIuMjE3Yy40NzIsMCwuOTQ0LS4wMDcsMS40MTYsMHEtLjAwNywzLjA4MywwLDYuMTY2YzEuMjYsMCwyLjUyMSwwLDMuNzgyLDAsLjA2My4wMDYuMTQ0LS4wMTIuMTkxLjA0NS40NDguNDU0LjkwNy45LDEuMzUzLDEuMzU0cS0zLjM3MS4wMDctNi43NDEsMFEyMy4yNjcsMTYsMjMuMjU5LDEyLjIxN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmU4ODVcXFwiLz5cIixcblx0XCJZQU5HXCI6IFwiPHBhdGggZD1cXFwiTTguODc3LDIzLjE1OWMwLTUuNTM1LDMuOTkyLTcuMTY4LDcuODk0LTcuMTY4LDMuMzU3LDAsNS45ODgtMy44MTEsNS45ODgtNi42MjQsMC0zLjYyMS0yLjQ4Ny01LjgzMS00Ljg4Mi03LjEyQTEzLjg4MSwxMy44ODEsMCwxLDAsMTQuNSwyOS44QzEwLjQ5MSwyOC4yNDgsOC44NzcsMjUuMzI0LDguODc3LDIzLjE1OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTQuNDgyLDI5LjkxN0ExNCwxNCwwLDAsMSwxNiwyYTE0LjE1NCwxNC4xNTQsMCwwLDEsMS44OTMuMTMxbC4wNC4wMTNjMi4yNTUsMS4yMTMsNC45NDQsMy40NTIsNC45NDQsNy4yMjMsMCwyLjcxNS0yLjU2NCw2Ljc0MS02LjEwNiw2Ljc0MS0yLjksMC03Ljc3Ni45MTYtNy43NzYsNy4wNSwwLDIuMDIyLDEuNDUxLDQuOTQ2LDUuNTQyLDYuNTMxWk0xNiwyLjIzNkExMy43NjUsMTMuNzY1LDAsMCwwLDEzLjYzNywyOS41NmMtMy41ODEtMS42ODQtNC44NzctNC40NDctNC44NzctNi40LDAtNi41NzYsNS42LTcuMjg2LDguMDEyLTcuMjg2LDMuNDA2LDAsNS44Ny0zLjg4Niw1Ljg3LTYuNTA2LDAtMy42NDUtMi42MDYtNS44Mi00LjgtNy4wMDZBMTMuOTI4LDEzLjkyOCwwLDAsMCwxNiwyLjIzNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNMjkuODgyLDE2YTEzLjg4MiwxMy44ODIsMCwwLDAtMTItMTMuNzUyYzIuNCwxLjI4OSw0Ljg4MiwzLjUsNC44ODIsNy4xMiwwLDIuODEzLTIuNjMxLDYuNjI0LTUuOTg4LDYuNjI0LTMuOSwwLTcuODk0LDEuNjMzLTcuODk0LDcuMTY4LDAsMi4xNjYsMS42MTMsNS4wODksNS42MTgsNi42NDFBMTMuODc1LDEzLjg3NSwwLDAsMCwyOS44ODIsMTZaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PHBhdGggZD1cXFwiTTE2LDMwYTE0LjIsMTQuMiwwLDAsMS0xLjUxOC0uMDgzbC0uMDMtLjAwN2MtNC4yLTEuNjI4LTUuNjkzLTQuNjU0LTUuNjkzLTYuNzUsMC02LjU3Niw1LjYtNy4yODYsOC4wMTItNy4yODYsMy40MDYsMCw1Ljg3LTMuODg2LDUuODctNi41MDYsMC0zLjY1NS0yLjYyMS01LjgzMy00LjgyLTcuMDE2bC4wNzItLjIyMUExNCwxNCwwLDAsMSwxNiwzMFptLTEuNDc3LS4zMTZBMTMuNzU2LDEzLjc1NiwwLDAsMCwyOS43NjQsMTYsMTMuODA3LDEzLjgwNywwLDAsMCwxOC41LDIuNDY2YzIuMTE1LDEuMjcyLDQuMzc3LDMuNDQxLDQuMzc3LDYuOSwwLDIuNzE1LTIuNTY0LDYuNzQxLTYuMTA2LDYuNzQxLTIuOSwwLTcuNzc2LjkxNi03Ljc3Niw3LjA1QzksMjUuMTc4LDEwLjQ0MywyOC4xLDE0LjUyMywyOS42ODRaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTUuOTQzXFxcIiBjeT1cXFwiMjIuNzg3XFxcIiByPVxcXCIxLjUwNlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxjaXJjbGUgY3g9XFxcIjE2LjAwN1xcXCIgY3k9XFxcIjkuMTQyXFxcIiByPVxcXCIxLjUwNlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPlwiLFxuXHRcIlppZ1wiOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiNS43MzMgMTkuNzMxIDUuNzMzIDEyLjI2NCA4LjUzMyAxMi4yNjQgOC41MzMgOC41MzEgMiA4LjUzMSAyIDIzLjQ2NCA1LjU0NyAyMy40NjQgOC45MDcgMTkuNzMxIDUuNzMzIDE5LjczMVxcXCIgc3R5bGU9XFxcImZpbGw6I2Y3YTQxZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjYuNDUzIDguNTMxIDIzLjA5MyAxMi4yNjQgMjYuMjY3IDEyLjI2NCAyNi4yNjcgMTkuNzMxIDIzLjQ2NyAxOS43MzEgMjMuNDY3IDIzLjQ2NCAzMCAyMy40NjQgMzAgOC41MzEgMjYuNDUzIDguNTMxXFxcIiBzdHlsZT1cXFwiZmlsbDojZjdhNDFkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNi44NzUgNi43MDcgMjAuNTEzIDguNTMxIDkuNDY3IDguNTMxIDkuNDY3IDEyLjI2NCAxNi44NDcgMTIuMjY0IDUuMTE1IDI1LjI5MyAxMS40OTcgMjMuNDY0IDIyLjUzMyAyMy40NjQgMjIuNTMzIDE5LjczMSAxNS4xNDggMTkuNzMxIDI2Ljg3NSA2LjcwN1xcXCIgc3R5bGU9XFxcImZpbGw6I2Y3YTQxZFxcXCIvPlwiXG59O1xuZXhwb3J0IGNvbnN0IExBTkdVQUdFX0NPTE9VUlMgOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHtcblx0XCIuZ2l0aWdub3JlXCI6IFwiI2RkNGMzNVwiLFxuXHRcIi5oZ2lnbm9yZVwiOiBcIiNiZmJmYmZcIixcblx0XCIubnBtaWdub3JlXCI6IFwiI2NiMzgzN1wiLFxuXHRcIi5wcm9wZXJ0aWVzXCI6IFwiIzk5YjhjNFwiLFxuXHRcIjY1MDIgQXNzZW1ibHlcIjogXCIjMDAwMGJmXCIsXG5cdFwiQWN0aW9uU2NyaXB0XCI6IFwiI2M0MTcxOFwiLFxuXHRcIkFkYVwiOiBcIiMwZjIzYzNcIixcblx0XCJBTFwiOiBcIiMyZWE5OGVcIixcblx0XCJBTlRMUjRcIjogXCIjZTQ0YTMyXCIsXG5cdFwiQXBhY2hlIENvbmZpZ3VyYXRpb25cIjogXCIjYzkyMDM3XCIsXG5cdFwiQXBleFwiOiBcIiMwZjliZDdcIixcblx0XCJBUExcIjogXCIjZDJkMmQyXCIsXG5cdFwiQXBwbGVTY3JpcHRcIjogXCIjYThjMmFiXCIsXG5cdFwiQXJkdWlub1wiOiBcIiMyZDkwOTRcIixcblx0XCJBUk0gQXNzZW1ibHlcIjogXCIjMDAwMGJmXCIsXG5cdFwiQXNjaWlEb2NcIjogXCIjZTQwMDQ2XCIsXG5cdFwiQVNQLk5FVCAoQyMpXCI6IFwiIzMzYTlkY1wiLFxuXHRcIkF1dG9Ib3RrZXlcIjogXCIjZDhkOGQ4XCIsXG5cdFwiQXV0b0l0XCI6IFwiIzVkODNhY1wiLFxuXHRcIkF2cm8gSURMXCI6IFwiIzAwNDBmZlwiLFxuXHRcIkFXS1wiOiBcIiNkMmQyZDJcIixcblx0XCJCYXRjaFwiOiBcIiNkOWI0MDBcIixcblx0XCJDI1wiOiBcIiMzNjg4MzJcIixcblx0XCJDXCI6IFwiIzAwNWY5MVwiLFxuXHRcIkMrK1wiOiBcIiM5ODRjOTNcIixcblx0XCJDbG9qdXJlXCI6IFwiIzkxZGM0N1wiLFxuXHRcIkNNYWtlXCI6IFwiIzAxYTMwMFwiLFxuXHRcIkNPQk9MXCI6IFwiIzAwNWNhNVwiLFxuXHRcIkNvZmZlZVNjcmlwdFwiOiBcIiM2ZjRlMzdcIixcblx0XCJDcnlzdGFsXCI6IFwiI2M4YzhjOFwiLFxuXHRcIkNTU1wiOiBcIiMxNTcyYjZcIixcblx0XCJDU1ZcIjogXCIjYzJjMmMyXCIsXG5cdFwiRFwiOiBcIiNiMDM5MzFcIixcblx0XCJEYXJ0XCI6IFwiIzU4YjZmMFwiLFxuXHRcIkRoYWxsXCI6IFwiI2I3YjdiN1wiLFxuXHRcIkRpZmZcIjogXCIjYzAwMDAwXCIsXG5cdFwiRGphbmdvL0ppbmphMlwiOiBcIiNmZjAwMDBcIixcblx0XCJEb2NrZXJcIjogXCIjMDA5NmU2XCIsXG5cdFwiRE9UIChHcmFwaHZpeilcIjogXCIjNGVkMWY4XCIsXG5cdFwiRWRpdG9yQ29uZmlnXCI6IFwiI2UzZTNmOFwiLFxuXHRcIkVKU1wiOiBcIiM5MGE5M2FcIixcblx0XCJFbGl4aXJcIjogXCIjNDUyNDU5XCIsXG5cdFwiRWxtXCI6IFwiIzhjZDYzNlwiLFxuXHRcIkVSQlwiOiBcIiM5MjFhMWVcIixcblx0XCJFcmxhbmdcIjogXCIjYTIwMDNlXCIsXG5cdFwiRiNcIjogXCIjMzc4YmJhXCIsXG5cdFwiRmlyZXN0b3JlIHNlY3VyaXR5IHJ1bGVzXCI6IFwiI2Y2ODIwY1wiLFxuXHRcIkZsb3dcIjogXCIjZmZiMDQ3XCIsXG5cdFwiRm9ydHJhblwiOiBcIiM3MzRmOTZcIixcblx0XCJGcmVlTWFya2VyIFRlbXBsYXRlIExhbmd1YWdlXCI6IFwiIzAwNTBiMlwiLFxuXHRcIkdhbWVNYWtlciBMYW5ndWFnZVwiOiBcIiM4YmMzNGFcIixcblx0XCJHLWNvZGVcIjogXCIjYmEwMDAwXCIsXG5cdFwiR0RTY3JpcHRcIjogXCIjNDc4Y2JmXCIsXG5cdFwiR2l0XCI6IFwiI2RkNGMzNVwiLFxuXHRcIkdMU0xcIjogXCIjNDM4NmI1XCIsXG5cdFwiR28gbW9kdWxlXCI6IFwiI2NlMzI2MlwiLFxuXHRcIkdvXCI6IFwiIzAwYWNkN1wiLFxuXHRcIkdyYWRsZVwiOiBcIiMwMDY1MzNcIixcblx0XCJHcmFwaFFMXCI6IFwiI2UxMDA5OFwiLFxuXHRcIkdyb292eVwiOiBcIiM2Mzk4YWFcIixcblx0XCJIYW1sXCI6IFwiI2VjZGZhN1wiLFxuXHRcIkhhbmRsZWJhcnNcIjogXCIjYzE5NzcwXCIsXG5cdFwiSGFza2VsbFwiOiBcIiNDMDQ1MDRcIixcblx0XCJIYXhlXCI6IFwiI2Y2ODcxMlwiLFxuXHRcIkhMU0xcIjogXCIjMDAwMGZmXCIsXG5cdFwiSFRNTFwiOiBcIiNlNDRmMjZcIixcblx0XCJIVFRQXCI6IFwiIzNiNjFhNlwiLFxuXHRcIklkcmlzXCI6IFwiIzhhMDgxOVwiLFxuXHRcIkluaVwiOiBcIiM5OWI4YzRcIixcblx0XCJJb1wiOiBcIiNjMmMyYzJcIixcblx0XCJKYXZhXCI6IFwiIzUzODJhMVwiLFxuXHRcIkphdmFTY3JpcHRcIjogXCIjZjVkZTE5XCIsXG5cdFwiSlNPTlwiOiBcIiNmNWRlMTlcIixcblx0XCJKU09ONVwiOiBcIiM5MDkwOTBcIixcblx0XCJKdWxpYVwiOiBcIiM0MDYzZDhcIixcblx0XCJLb3RsaW5cIjogXCIjOWQ0YjlkXCIsXG5cdFwiS3VzdG9cIjogXCIjNTliNGQ5XCIsXG5cdFwiTGFUZVhcIjogXCIjY2ZjZmNmXCIsXG5cdFwiTGVzc1wiOiBcIiMyYTRmODRcIixcblx0XCJMaXF1aWRcIjogXCIjMDA0OTk5XCIsXG5cdFwiTGlzcFwiOiBcIiM4MzgxYzVcIixcblx0XCJMaXZlU2NyaXB0XCI6IFwiIzMxN2VhY1wiLFxuXHRcIkxvZyBmaWxlXCI6IFwiIzAwYmQwMlwiLFxuXHRcIkxPTENPREVcIjogXCIjOGQyNzAxXCIsXG5cdFwiTHVhXCI6IFwiIzA1MDA4MFwiLFxuXHRcIk1hcmtkb3duXCI6IFwiIzc1NTgzOFwiLFxuXHRcIk1BVExBQlwiOiBcIiNlZjZjM2VcIixcblx0XCJNQVhTY3JpcHRcIjogXCIjMDA2OTZiXCIsXG5cdFwiTUVMXCI6IFwiIzA2YTBhMlwiLFxuXHRcIk1vbmdvREJcIjogXCIjNDFhMjQ3XCIsXG5cdFwibmdpbnhcIjogXCIjMDE5NjM5XCIsXG5cdFwiTmltXCI6IFwiI2ZmZTk1M1wiLFxuXHRcIk5peFwiOiBcIiM1Mjc3YzNcIixcblx0XCJOU0lTXCI6IFwiI2E0MmQyNlwiLFxuXHRcIk9iamVjdCBQYXNjYWxcIjogXCIjRkY2MzQ0XCIsXG5cdFwiT2JqZWN0aXZlLUNcIjogXCIjYzJjMmMyXCIsXG5cdFwiT0NhbWxcIjogXCIjZjI5MTA0XCIsXG5cdFwiT2N0YXZlXCI6IFwiIzc3Y2NlMVwiLFxuXHRcIk9wZW5DTFwiOiBcIiNGRjFDMUFcIixcblx0XCJQYXNjYWxcIjogXCIjRkY2MzQ0XCIsXG5cdFwiUGVybFwiOiBcIiMzYTNjNWJcIixcblx0XCJQSFBcIjogXCIjNGM2Yjk2XCIsXG5cdFwiUEwvU1FMXCI6IFwiI2ZmMDAwMFwiLFxuXHRcIlBsYWluIHRleHRcIjogXCIjYzJjMmMyXCIsXG5cdFwiUGxhbnRVTUxcIjogXCIjQTExRjQxXCIsXG5cdFwiUG93ZXJRdWVyeVwiOiBcIiNjZmNmY2ZcIixcblx0XCJQb3dlclNoZWxsXCI6IFwiIzUzOTFmZVwiLFxuXHRcIlByb2Nlc3NpbmdcIjogXCIjMWM0YzcwXCIsXG5cdFwiUHJvbG9nXCI6IFwiI2VjMWMyNFwiLFxuXHRcIlByb3RvY29sIEJ1ZmZlcnNcIjogXCIjOTdmZjI3XCIsXG5cdFwiUHVnXCI6IFwiIzQ0MjgyM1wiLFxuXHRcIlB1cHBldFwiOiBcIiNmZmFlMWFcIixcblx0XCJQdXJlU2NyaXB0XCI6IFwiIzE2MTcxYlwiLFxuXHRcIlB5dGhvblwiOiBcIiMzNjcxQTFcIixcblx0XCJRIChrZGIrIGRhdGFiYXNlKVwiOiBcIiMxZTc4YjNcIixcblx0XCJRI1wiOiBcIiMzMzMzY2NcIixcblx0XCJRTUxcIjogXCIjNDFjZDUyXCIsXG5cdFwiUlwiOiBcIiMyNzZkYzNcIixcblx0XCJSYWNrZXRcIjogXCIjOWYxZDIwXCIsXG5cdFwiUmF6b3IgQyNcIjogXCIjMzY4ODMyXCIsXG5cdFwiUmVhY3QgSlNYXCI6IFwiIzAwZDhmZlwiLFxuXHRcIlJlYWN0IFRTWFwiOiBcIiMwMDdhY2NcIixcblx0XCJSZWFzb25cIjogXCIjZGQ0YjM5XCIsXG5cdFwiUmVnb1wiOiBcIiM3ODkyOWFcIixcblx0XCJSZVNjcmlwdFwiOiBcIiNlODRmNGZcIixcblx0XCJyZVNUIChyZVN0cnVjdHVyZWRUZXh0KVwiOiBcIiNjZTNmMzFcIixcblx0XCJSb2JvdCBGcmFtZXdvcmtcIjogXCJcIixcblx0XCJSdWJ5XCI6IFwiI2IzMTMwMVwiLFxuXHRcIlJ1c3RcIjogXCIjYTA0ZjEyXCIsXG5cdFwiU0FTXCI6IFwiIzAwMmJiNVwiLFxuXHRcIlNhc3MgKFNhc3MpXCI6IFwiI2NkNjc5OVwiLFxuXHRcIlNhc3MgKFNDU1MpXCI6IFwiI2NkNjc5OVwiLFxuXHRcIlNjYWxhXCI6IFwiI2U2MmQyYSBcIixcblx0XCJTaGVsbCBzZXNzaW9uXCI6IFwiI2Q5YjQwMFwiLFxuXHRcIlNoZWxsXCI6IFwiI2Q5YjQwMFwiLFxuXHRcIlNtYXJ0eVwiOiBcIiNmNmUyMDBcIixcblx0XCJTb2xpZGl0eSAoRXRoZXJldW0pXCI6IFwiI2MxYzFjMVwiLFxuXHRcIlNvbHV0aW9uIGZpbGVcIjogXCIjODU0Y2M3XCIsXG5cdFwiU1BBUlFMXCI6IFwiIzBjNDc5Y1wiLFxuXHRcIlNRRlwiOiBcIiNjMmMyYzJcIixcblx0XCJTUUY6IFN0YXR1cyBRdW8gRnVuY3Rpb24gKEFybWEgMylcIjogXCIjYzJjMmMyXCIsXG5cdFwiU1FMXCI6IFwiI2ZmZGE0NFwiLFxuXHRcIlNxdWlycmVsXCI6IFwiI2EwNWEyY1wiLFxuXHRcIlN0YW5cIjogXCIjYjIwMDFkXCIsXG5cdFwiU3RhdGEgQWRvXCI6IFwiIzNjNmU4ZlwiLFxuXHRcIlN0eWx1c1wiOiBcIiNjMmMyYzJcIixcblx0XCJTVkdcIjogXCIjZmZiMTNiXCIsXG5cdFwiU3dpZnRcIjogXCIjRkE1RDJEXCIsXG5cdFwiU3lzdGVtZCBjb25maWd1cmF0aW9uIGZpbGVcIjogXCIjMzBkNDc1XCIsXG5cdFwiVDQgdGVtcGxhdGluZ1wiOiBcIiMxZTg4ZTVcIixcblx0XCJUNCBUZXh0IFRlbXBsYXRlcyAoQyMpXCI6IFwiIzFlODhlNVwiLFxuXHRcIlQ0IFRleHQgVGVtcGxhdGVzIChWQilcIjogXCIjMWU4OGU1XCIsXG5cdFwiVGNsXCI6IFwiI2VmZjFjYlwiLFxuXHRcIlRlbXBsYXRlIFRvb2xraXQgMlwiOiBcIiMzYmNlZmNcIixcblx0XCJUZVhcIjogXCIjY2ZjZmNmXCIsXG5cdFwiVGV4dGlsZVwiOiBcIiNmZmU3YWNcIixcblx0XCJUT01MXCI6IFwiI2JmYmZiZlwiLFxuXHRcIlRTQ29uZmlnXCI6IFwiIzAwN2FjY1wiLFxuXHRcIlR3aWdcIjogXCIjNzhkYzUwXCIsXG5cdFwiVHlwZVNjcmlwdFwiOiBcIiMzMTc4YzZcIixcblx0XCJUeXBvU2NyaXB0XCI6IFwiI2ZmODcwMFwiLFxuXHRcIlZcIjogXCIjNWQ4N2JmXCIsXG5cdFwiVmFsYVwiOiBcIiM0MDM3NTdcIixcblx0XCJWQi5OZXRcIjogXCIjMDA1MTlhXCIsXG5cdFwiVkJBXCI6IFwiI2Q4N2IzMFwiLFxuXHRcIlZlbG9jaXR5XCI6IFwiIzI2MjY5MlwiLFxuXHRcIlZlcmlsb2dcIjogXCIjMWEzNDhmXCIsXG5cdFwiVkhETFwiOiBcIiMwZDliMzVcIixcblx0XCJ2aW1cIjogXCIjNDNiNTRhXCIsXG5cdFwiVmlzdWFsIEJhc2ljXCI6IFwiIzAwNTE5YVwiLFxuXHRcIldlYkFzc2VtYmx5XCI6IFwiIzY1NGZmMFwiLFxuXHRcIldvbGZyYW0gbGFuZ3VhZ2VcIjogXCIjZDAxMDAwXCIsXG5cdFwiWE1MXCI6IFwiI2YxNjYyYVwiLFxuXHRcIlhRdWVyeVwiOiBcIiNmMTY2MmFcIixcblx0XCJZQU1MXCI6IFwiI2ZmZTg4NVwiLFxuXHRcIllBTkdcIjogXCIjMjMxZjIwXCIsXG5cdFwiWmlnXCI6IFwiI2Y3YTQxZFwiXG59O1xuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZywgTm90aWNlLCBUZXh0Q29tcG9uZW50LCBEcm9wZG93bkNvbXBvbmVudCwgU2xpZGVyQ29tcG9uZW50LCBUb2dnbGVDb21wb25lbnQsIEV4dHJhQnV0dG9uQ29tcG9uZW50IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgUGlja3IgZnJvbSBcIkBzaW1vbndlcC9waWNrclwiO1xuaW1wb3J0IHsgQ29sb3JUcmFuc2xhdG9yIH0gZnJvbSBcImNvbG9ydHJhbnNsYXRvclwiO1xuXG5pbXBvcnQgQ29kZVN0eWxlclBsdWdpbiBmcm9tIFwiLi9tYWluXCI7XG5pbXBvcnQgeyBDb2xvdXIsIENTUywgSEVYLCBEaXNwbGF5LCBDb2RlU3R5bGVyU2V0dGluZ3MsIENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIFBBUkFNRVRFUlMsIERFRkFVTFRfU0VUVElOR1MsIExBTkdVQUdFX05BTUVTLCBMQU5HVUFHRV9JQ09OU19EQVRBIH0gZnJvbSBcIi4vU2V0dGluZ3NcIjtcblxuY29uc3QgRElTUExBWV9PUFRJT05TOiBSZWNvcmQ8RGlzcGxheSxzdHJpbmc+ID0ge1xuXHRcIm5vbmVcIjogXCJOZXZlclwiLFxuXHRcImlmX2hlYWRlcl9zaG93blwiOiBcIklmIEhlYWRlciBTaG93blwiLFxuXHRcImFsd2F5c1wiOiBcIkFsd2F5c1wiLFxufTtcblxuZXhwb3J0IGNsYXNzIFNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbjtcblx0cGlja3JzOiBSZWNvcmQ8c3RyaW5nLFBpY2tyUmVzZXR0YWJsZT47XG5cdGRpc2FibGVhYmxlQ29tcG9uZW50czogUmVjb3JkPHN0cmluZyxBcnJheTxUb2dnbGVDb21wb25lbnQgfCBTbGlkZXJDb21wb25lbnQgfCBUZXh0Q29tcG9uZW50IHwgRXh0cmFCdXR0b25Db21wb25lbnQ+PjtcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luKSB7XG5cdFx0c3VwZXIoYXBwLCBwbHVnaW4pO1xuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHRcdHRoaXMucGlja3JzID0ge307XG5cdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgQnVpbGRzIHRoZSBodG1sIHBhZ2UgdGhhdCBpcyBzaG93ZWQgaW4gdGhlIHNldHRpbmdzLlxuXHQgKi9cblx0ZGlzcGxheSgpIHtcblx0XHRjb25zdCB7Y29udGFpbmVyRWx9ID0gdGhpcztcblx0XHRjb250YWluZXJFbC5lbXB0eSgpO1xuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwge3RleHQ6IFwiU2V0dGluZ3MgZm9yIHRoZSBDb2RlIFN0eWxlciBQbHVnaW4uXCJ9KTtcblxuXHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzID0ge1xuXHRcdFx0XCJsaW5lTnVtYmVyc1wiOiBbXSxcblx0XHRcdFwid3JhcExpbmVzXCI6IFtdLFxuXHRcdFx0XCJoZWFkZXJMYW5ndWFnZVRhZ3NcIjogW10sXG5cdFx0XHRcImhlYWRlckxhbmd1YWdlSWNvbnNcIjogW10sXG5cdFx0XHRcImVkaXRvckFjdGl2ZUxpbmVIaWdobGlnaHRcIjogW10sXG5cdFx0XHRcImNvZGVibG9ja0FjdGl2ZUxpbmVIaWdobGlnaHRcIjogW10sXG5cdFx0XHRcImdyYWRpZW50SGlnaGxpZ2h0aW5nXCI6IFtdLFxuXHRcdFx0XCJsYW5ndWFnZUJvcmRlckNvbG91clwiOiBbXSxcblx0XHR9O1xuXG5cdFx0Ly8gPT09PT09PT09PSBHZW5lcmFsID09PT09PT09PT1cblxuXHRcdGxldCBpZ25vcmVUaW1lb3V0OiBOb2RlSlMuVGltZW91dCA9IHNldFRpbWVvdXQoKCk9Pnt9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSWdub3JlIENvZGVibG9ja3NcIilcblx0XHRcdC5zZXREZXNjKFwiRGVmaW5lIGxhbmd1YWdlcyBpbiBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IHdoaWNoIHRoZSBwbHVnaW4gc2hvdWxkIGNvbXBsZXRlbHkgaWdub3JlLiBZb3UgY2FuIHVzZSBhIHdpbGRjYXJkICgqKSBlaXRoZXIgYXQgdGhlIGJlZ2lubmluZywgb3IgYXQgdGhlIGVuZC4gRm9yIGV4YW1wbGU6IGFkLSogd2lsbCBleGNsdWRlIGNvZGVibG9ja3Mgd2hlcmUgdGhlIGxhbmd1YWdlIHN0YXJ0cyB3aXRoIGFkLSBlLmcuOiBhZC1pbmZvLCBhZC1lcnJvciBldGMuXCIpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiZS5nLiBkYXRhdmlldywgZGF0YXZpZXdqcyBldGMuXCIpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5leGNsdWRlZENvZGVibG9ja3MpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5leGNsdWRlZENvZGVibG9ja3MgPSB2YWx1ZTtcblx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KGlnbm9yZVRpbWVvdXQpO1xuXHRcdFx0XHRcdGlnbm9yZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpPT50aGlzLnBsdWdpbi5yZXJlbmRlclByZXZpZXcoKSwxMDAwKTtcblx0XHRcdFx0fSkpO1xuXHRcdC8vVE9ETyAoQG1heXVyYW5rdikgUmUtcmVuZGVyIChMUClcblx0XHRsZXQgZXhjbHVkZVRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0ID0gc2V0VGltZW91dCgoKT0+e30pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJFeGNsdWRlIExhbmd1YWdlc1wiKVxuXHRcdFx0LnNldERlc2MoXCJEZWZpbmUgbGFuZ3VhZ2VzIGluIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgd2hpY2ggdGhlIHBsdWdpbiBzaG91bGQgbm90IGRlY29yYXRlLiBZb3UgY2FuIHVzZSBhIHdpbGRjYXJkICgqKSBlaXRoZXIgYXQgdGhlIGJlZ2lubmluZywgb3IgYXQgdGhlIGVuZC4gRm9yIGV4YW1wbGU6IGFkLSogd2lsbCBleGNsdWRlIGNvZGVibG9ja3Mgd2hlcmUgdGhlIGxhbmd1YWdlIHN0YXJ0cyB3aXRoIGFkLSBlLmcuOiBhZC1pbmZvLCBhZC1lcnJvciBldGMuXCIpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiZS5nLiBhZC0qLCBweXRob24gZXRjLlwiKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZXhjbHVkZWRMYW5ndWFnZXMpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5leGNsdWRlZExhbmd1YWdlcyA9IHZhbHVlO1xuXHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQoZXhjbHVkZVRpbWVvdXQpO1xuXHRcdFx0XHRcdGV4Y2x1ZGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKT0+dGhpcy5wbHVnaW4ucmVyZW5kZXJQcmV2aWV3KCksMTAwMCk7XG5cdFx0XHRcdH0pKTtcblx0XHQvL1RPRE8gKEBtYXl1cmFua3YpIFJlLXJlbmRlciAoTFApXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIlN0eWxlIENvZGUgb24gRXhwb3J0XCIpXG5cdFx0XHQuc2V0RGVzYyhcIklmIGVuYWJsZWQsIHN0eWxpbmcgd2lsbCBiZSBhcHBsaWVkIHdoZW4gZXhwb3J0aW5nIHRvIFBERi5cIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGVjb3JhdGVQcmludClcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmRlY29yYXRlUHJpbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7ICAgICAgICAgXG5cdFx0XHRcdH0pKTtcblxuXHRcdC8vID09PT09PT09PT0gVGhlbWVzID09PT09PT09PT1cblx0XHRjb250YWluZXJFbC5jcmVhdGVFbChcImgzXCIsIHt0ZXh0OiBcIlRoZW1lIFNldHRpbmdzXCJ9KTtcblxuXHRcdGxldCB0aGVtZURyb3Bkb3duOiBEcm9wZG93bkNvbXBvbmVudDtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiU2VsZWN0IFRoZW1lXCIpXG5cdFx0XHQuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PiB7XG5cdFx0XHRcdHRoZW1lRHJvcGRvd24gPSBkcm9wZG93bjtcblx0XHRcdFx0dGhpcy51cGRhdGVEcm9wZG93bih0aGVtZURyb3Bkb3duLHRoaXMucGx1Z2luLnNldHRpbmdzKTtcblx0XHRcdFx0dGhlbWVEcm9wZG93bi5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lID0gc3RydWN0dXJlZENsb25lKHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXSk7XG5cdFx0XHRcdFx0dGhpcy5kaXNwbGF5KCk7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuYWRkRXh0cmFCdXR0b24oYnV0dG9uID0+IHtcblx0XHRcdFx0YnV0dG9uLnNldFRvb2x0aXAoXCJVcGRhdGUgdGhlbWVcIik7XG5cdFx0XHRcdGJ1dHRvbi5zZXRJY29uKFwic2F2ZVwiKTtcblx0XHRcdFx0YnV0dG9uLm9uQ2xpY2soKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lIGluIERFRkFVTFRfU0VUVElOR1MudGhlbWVzKVxuXHRcdFx0XHRcdFx0bmV3IE5vdGljZShcIllvdSBjYW5ub3QgdXBkYXRlIHRoZSBkZWZhdWx0IHRoZW1lc1wiKTsgLy9OT1NPTkFSXG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0gPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lKTtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlQWx0ZXJuYXRpdmVIaWdobGlnaHRzKGFsdGVybmF0aXZlSGlnaGxpZ2h0c0NvbnRhaW5lcik7XG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKGAke3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWV9IHRoZW1lIHNhdmVkIHN1Y2Nlc3NmdWxseSFgKTsgLy9OT1NPTkFSXG5cdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuYWRkRXh0cmFCdXR0b24oYnV0dG9uID0+IHtcblx0XHRcdFx0YnV0dG9uLnNldFRvb2x0aXAoXCJEZWxldGUgdGhlbWVcIik7XG5cdFx0XHRcdGJ1dHRvbi5zZXRJY29uKFwidHJhc2hcIik7XG5cdFx0XHRcdGJ1dHRvbi5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZS50cmltKCkubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRcdFx0bmV3IE5vdGljZShcIlNlbGVjdCBhIHRoZW1lIGZpcnN0IHRvIGRlbGV0ZVwiKTsgLy9OT1NPTkFSXG5cdFx0XHRcdFx0ZWxzZSBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZSBpbiBERUZBVUxUX1NFVFRJTkdTLnRoZW1lcylcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJZb3UgY2Fubm90IGRlbGV0ZSB0aGUgZGVmYXVsdCB0aGVtZXNcIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXTtcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYCR7dGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZX0gdGhlbWUgZGVsZXRlZCBzdWNjZXNzZnVsbHkhYCk7IC8vTk9TT05BUlxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZSA9IFwiRGVmYXVsdFwiO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lID0gc3RydWN0dXJlZENsb25lKHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXSk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZURyb3Bkb3duKHRoZW1lRHJvcGRvd24sdGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuXHRcdFx0XHRcdFx0dGhpcy5kaXNwbGF5KCk7XG5cdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdGxldCBuZXdUaGVtZU5hbWU6IFRleHRDb21wb25lbnQ7XG5cdFx0bGV0IG5ld1RoZW1lRGVmYXVsdDogVG9nZ2xlQ29tcG9uZW50O1xuXHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld1RoZW1lID0gXCJcIjtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiQWRkIE5ldyBUaGVtZVwiKVxuXHRcdFx0LnNldERlc2MoXCJDcmVhdGUgYSBuZXcgdGhlbWUgZnJvbSB0aGUgY3VycmVudCBzZXR0aW5ncy5cIilcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4ge25ld1RoZW1lTmFtZSA9IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiTmV3IHRoZW1lIG5hbWVcIilcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld1RoZW1lKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3VGhlbWUgPSB2YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmFkZEV4dHJhQnV0dG9uKGJ1dHRvbiA9PiB7XG5cdFx0XHRcdGJ1dHRvbi5zZXRUb29sdGlwKFwiU2F2ZSB0aGVtZVwiKTtcblx0XHRcdFx0YnV0dG9uLnNldEljb24oXCJwbHVzXCIpO1xuXHRcdFx0XHRidXR0b24ub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld1RoZW1lLnRyaW0oKS5sZW5ndGggPT09IDApXG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKFwiU2V0IGEgbmFtZSBmb3IgeW91ciB0aGVtZVwiKTsgLy9OT1NPTkFSXG5cdFx0XHRcdFx0ZWxzZSBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3VGhlbWUgaW4gREVGQVVMVF9TRVRUSU5HUy50aGVtZXMpXG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKFwiWW91IGNhbid0IG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB0aGVtZXNcIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld1RoZW1lIGluIHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lcykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3VGhlbWVdID0gc3RydWN0dXJlZENsb25lKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZSk7XG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYCR7dGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3VGhlbWV9IHRoZW1lIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IWApOyAvL05PU09OQVJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdUaGVtZV0gPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lKTtcblx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZShgJHt0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdUaGVtZX0gdGhlbWUgc2F2ZWQgc3VjY2Vzc2Z1bGx5IWApOyAvL05PU09OQVJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWUgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdUaGVtZTtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlRHJvcGRvd24odGhlbWVEcm9wZG93bix0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUFsdGVybmF0aXZlSGlnaGxpZ2h0cyhhbHRlcm5hdGl2ZUhpZ2hsaWdodHNDb250YWluZXIpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3VGhlbWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0bmV3VGhlbWVOYW1lLnNldFZhbHVlKFwiXCIpO1xuXHRcdFx0XHRcdFx0bmV3VGhlbWVEZWZhdWx0LnNldFZhbHVlKGZhbHNlKTtcblx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0XG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoXCJoNFwiLCB7dGV4dDogXCJDb2RlYmxvY2sgQXBwZWFyYW5jZVwifSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkNvZGVibG9jayBCYWNrZ3JvdW5kIENvbG91clwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImNvZGVibG9ja19iYWNrZ3JvdW5kXCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uY29kZWJsb2NrLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uY29kZWJsb2NrLmJhY2tncm91bmRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJDb2RlYmxvY2sgVGV4dCBDb2xvdXJcIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJjb2RlYmxvY2tfdGV4dFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmNvZGVibG9jay50ZXh0Q29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmNvZGVibG9jay50ZXh0Q29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiVW53cmFwIGNvZGVibG9jayBsaW5lc1wiKVxuXHRcdFx0LnNldERlc2MoXCJDaG9vc2Ugd2hldGhlciB0byB1bndyYXAgbGluZXMgaW4gcmVhZGluZyBtb2RlXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2sudW53cmFwTGluZXMpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLnVud3JhcExpbmVzID0gdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCF2YWx1ZSlcblx0XHRcdFx0XHRcdHdyYXBMaW5lc0FjdGl2ZVRvZ2dsZS5zZXRWYWx1ZShmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJ3cmFwTGluZXNcIl0uZm9yRWFjaChjb21wb25lbnQgPT4ge2NvbXBvbmVudC5zZXREaXNhYmxlZCghdmFsdWUpO30pO1xuXHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTsgIFxuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnJlcmVuZGVyUHJldmlldygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkNvZGVibG9jayBDdXJ2YXR1cmVcIilcblx0XHRcdC5zZXREZXNjKFwiRGV0ZXJtaW5lcyBob3cgcm91bmRlZCB0aGUgY29kZWJsb2NrcyBhcHBlYXIgaW4gcGl4ZWxzLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHtcblx0XHRcdFx0bGV0IHJlc2V0dGFibGVTbGlkZXI6IFNsaWRlckNvbXBvbmVudDtcblx0XHRcdFx0c2V0dGluZy5hZGRTbGlkZXIoKHNsaWRlcikgPT4ge3Jlc2V0dGFibGVTbGlkZXIgPSBzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDAsMjUsMSlcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmNvZGVibG9jay5jdXJ2YXR1cmUpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmN1cnZhdHVyZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpOyAgICBcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge2J1dHRvblxuXHRcdFx0XHRcdC5zZXRJY29uKFwicmVzZXRcIilcblx0XHRcdFx0XHQuc2V0VG9vbHRpcChcIlJlc3RvcmUgZGVmYXVsdCBjdXJ2YXR1cmVcIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmN1cnZhdHVyZSA9IHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXS5zZXR0aW5ncy5jb2RlYmxvY2suY3VydmF0dXJlO1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmN1cnZhdHVyZSk7XG5cdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0XHRcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbChcImg0XCIsIHt0ZXh0OiBcIkd1dHRlciBBcHBlYXJhbmNlXCJ9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiRW5hYmxlIExpbmUgTnVtYmVyc1wiKVxuXHRcdFx0LnNldERlc2MoXCJJZiBkaXNhYmxlZCwgdGhlIGJlbG93IHNldHRpbmdzIGFyZSBkaXNhYmxlZCB0b28uXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2subGluZU51bWJlcnMpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmxpbmVOdW1iZXJzID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJsaW5lTnVtYmVyc1wiXS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7Y29tcG9uZW50LnNldERpc2FibGVkKCF2YWx1ZSk7fSk7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpOyAgICAgICAgIFxuXHRcdFx0XHR9KSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkd1dHRlciBCYWNrZ3JvdW5kIENvbG91clwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImd1dHRlcl9iYWNrZ3JvdW5kXCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uZ3V0dGVyLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uZ3V0dGVyLmJhY2tncm91bmRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHRcdCgpID0+ICF0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmxpbmVOdW1iZXJzLFxuXHRcdFx0KTt9KTtcblx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImxpbmVOdW1iZXJzXCJdLnB1c2godGhpcy5waWNrcnNbXCJndXR0ZXJfYmFja2dyb3VuZFwiXS5yZXNldEJ1dHRvbik7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkxpbmUgTnVtYmVyIENvbG91clwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImxpbmVfbnVtYmVyXCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uZ3V0dGVyLnRleHRDb2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uZ3V0dGVyLnRleHRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHRcdCgpID0+ICF0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmxpbmVOdW1iZXJzLFxuXHRcdFx0KTt9KTtcblx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImxpbmVOdW1iZXJzXCJdLnB1c2godGhpcy5waWNrcnNbXCJsaW5lX251bWJlclwiXS5yZXNldEJ1dHRvbik7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkhpZ2hsaWdodCBMaW5lIE51bWJlcnNcIilcblx0XHRcdC5zZXREZXNjKFwiSWYgZW5hYmxlZCwgaGlnaGxpZ2h0cyB3aWxsIGFsc28gaGlnaGxpZ2h0IHRoZSBsaW5lIG51bWJlcnMuXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7Y29uc3QgaGlnaGxpZ2h0TGluZU51bWJlcnNUb2dnbGUgPSB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5ndXR0ZXIuaGlnaGxpZ2h0KVxuXHRcdFx0XHQuc2V0RGlzYWJsZWQoIXRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2subGluZU51bWJlcnMpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuZ3V0dGVyLmhpZ2hsaWdodCA9IHZhbHVlO1xuXHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImxpbmVOdW1iZXJzXCJdLnB1c2goaGlnaGxpZ2h0TGluZU51bWJlcnNUb2dnbGUpO1xuXHRcdFx0fSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkluZGljYXRlIEN1cnJlbnQgTGluZSBOdW1iZXJcIilcblx0XHRcdC5zZXREZXNjKFwiSWYgZW5hYmxlZCwgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIgaW4gY29kZWJsb2NrcyB3aWxsIGJlIGluZGljYXRlZCB3aXRoIGEgc2VwYXJhdGUgY29sb3VyLlwiKVxuXHRcdFx0LnNldENsYXNzKFwiY29kZS1zdHlsZXItc3BhY2VkXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7Y29uc3QgaW5kaWNhdGVDdXJyZW50TGluZU51bWJlclRvZ2dsZSA9IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmd1dHRlci5hY3RpdmVMaW5lKVxuXHRcdFx0XHQuc2V0RGlzYWJsZWQoIXRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2subGluZU51bWJlcnMpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuZ3V0dGVyLmFjdGl2ZUxpbmUgPSB2YWx1ZTtcblx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJsaW5lTnVtYmVyc1wiXS5wdXNoKGluZGljYXRlQ3VycmVudExpbmVOdW1iZXJUb2dnbGUpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJhY3RpdmVfbGluZV9udW1iZXJcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5ndXR0ZXIuYWN0aXZlVGV4dENvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5ndXR0ZXIuYWN0aXZlVGV4dENvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdFx0KCkgPT4gIXRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2subGluZU51bWJlcnMsXG5cdFx0XHQpO30pO1xuXHRcdFxuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDRcIiwge3RleHQ6IFwiSGVhZGVyIEFwcGVhcmFuY2VcIn0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJIZWFkZXIgQmFja2dyb3VuZCBDb2xvdXJcIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJoZWFkZXJfYmFja2dyb3VuZFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhlYWRlci5iYWNrZ3JvdW5kQ29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhlYWRlci5iYWNrZ3JvdW5kQ29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSGVhZGVyIEZvbnQgU2l6ZVwiKVxuXHRcdFx0LnNldERlc2MoXCJTZXQgdGhlIGZvbnQgc2l6ZSBmb3IgaGVhZGVyIGxhbmd1YWdlIHRhZ3MgYW5kIHRpdGxlcy5cIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7XG5cdFx0XHRcdGxldCByZXNldHRhYmxlU2xpZGVyOiBTbGlkZXJDb21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkU2xpZGVyKChzbGlkZXIpID0+IHtyZXNldHRhYmxlU2xpZGVyID0gc2xpZGVyXG5cdFx0XHRcdFx0LnNldExpbWl0cyg2LDMyLDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIuZm9udFNpemUpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmZvbnRTaXplID0gdmFsdWU7XG5cdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7ICAgIFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7YnV0dG9uXG5cdFx0XHRcdFx0LnNldEljb24oXCJyZXNldFwiKVxuXHRcdFx0XHRcdC5zZXRUb29sdGlwKFwiUmVzdG9yZSBkZWZhdWx0IGZvbnQgc2l6ZVwiKVxuXHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIuZm9udFNpemUgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uc2V0dGluZ3MuaGVhZGVyLmZvbnRTaXplO1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmZvbnRTaXplKTtcblx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSGVhZGVyIFRpdGxlIFRleHQgU3R5bGluZ1wiKVxuXHRcdFx0LnNldERlc2MoXCJTdHlsZSB0aGUgaGVhZGVyIHRpdGxlIHRleHQgdXNpbmcgYm9sZCBhbmQgaXRhbGljIHRvZ2dsZXMsIGJ5IHNldHRpbmcgYSBmb250IG9yIGJ5IHNldHRpbmcgYSB0ZXh0IGNvbG91ci5cIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHt0b2dnbGVcblx0XHRcdFx0LnNldFRvb2x0aXAoXCJUb2dnbGUgYm9sZCB0aXRsZSB0ZXh0XCIpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLnRpdGxlLnRleHRCb2xkKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci50aXRsZS50ZXh0Qm9sZCA9IHZhbHVlO1xuXHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge3RvZ2dsZVxuXHRcdFx0XHQuc2V0VG9vbHRpcChcIlRvZ2dsZSBpdGFsaWMgdGl0bGUgdGV4dFwiKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci50aXRsZS50ZXh0SXRhbGljKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci50aXRsZS50ZXh0SXRhbGljID0gdmFsdWU7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHt0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIkZvbnRcIilcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIudGl0bGUudGV4dEZvbnQpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLnRpdGxlLnRleHRGb250ID0gdmFsdWU7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge3RoaXMuY3JlYXRlUGlja3IoXG5cdFx0XHRcdHRoaXMucGx1Z2luLGNvbnRhaW5lckVsLHNldHRpbmcsXG5cdFx0XHRcdFwiaGVhZGVyX3RpdGxlX3RleHRcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oZWFkZXIudGl0bGUudGV4dENvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oZWFkZXIudGl0bGUudGV4dENvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdCk7fSk7XG5cdFx0bGV0IGNvbGxhcHNlUGxhY2Vob2xkZXJUaW1lb3V0OiBOb2RlSlMuVGltZW91dCA9IHNldFRpbWVvdXQoKCk9Pnt9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiQ29sbGFwc2UgUGxhY2Vob2xkZXIgVGV4dFwiKVxuXHRcdFx0LnNldERlc2MoXCJUaXRsZSBwbGFjZWhvbGRlciB0ZXh0IGZvciBjb2xsYXBzZWQgY29kZSB3aGVuIG5vIHRpdGxlIHBhcmFtZXRlciBpcyBzZXQuXCIpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKFwiQ29sbGFwc2VkIENvZGVcIilcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIuY29sbGFwc2VQbGFjZWhvbGRlcilcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIuY29sbGFwc2VQbGFjZWhvbGRlciA9IHZhbHVlO1xuXHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQoY29sbGFwc2VQbGFjZWhvbGRlclRpbWVvdXQpO1xuXHRcdFx0XHRcdGNvbGxhcHNlUGxhY2Vob2xkZXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKT0+dGhpcy5wbHVnaW4ucmVyZW5kZXJQcmV2aWV3KCksMTAwMCk7XG5cdFx0XHRcdH0pKTtcblx0XHQvL1RPRE8gKEBtYXl1cmFua3YpIFJlLXJlbmRlciAoTFApXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkhlYWRlciBTZXBhcmF0b3IgQ29sb3VyXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkNvbG91ciBvZiB0aGUgbGluZSBzZXBhcmF0aW5nIHRoZSBjb2RlYmxvY2sgaGVhZGVyIGFuZCB0aGUgY29kZWJsb2NrLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImhlYWRlcl9zZXBhcmF0b3JcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oZWFkZXIubGluZUNvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oZWFkZXIubGluZUNvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdCk7fSk7XG5cdFx0XHRcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbChcImg1XCIsIHt0ZXh0OiBcIkhlYWRlciBMYW5ndWFnZSBUYWcgQXBwZWFyYW5jZVwifSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkRpc3BsYXkgSGVhZGVyIExhbmd1YWdlIFRhZ3NcIilcblx0XHRcdC5zZXREZXNjKFwiRGV0ZXJtaW5lIHdoZW4gdG8gc2hvdyBsYW5ndWFnZSB0YWdzIGluIHRoZSBoZWFkZXIuIFxcXCJUaXRsZSBPbmx5XFxcIiB3aWxsIG9ubHkgc2hvdyBsYW5ndWFnZSB0YWdzIHdoZW4gdGhlIHRpdGxlIHBhcmFtZXRlciBpcyBzZXQuIElmIHNldCB0byBcXFwiTm9uZVxcXCIsIHRoZSBiZWxvdyBzZXR0aW5ncyBhcmUgZGlzYWJsZWQgdG9vLlwiKVxuXHRcdFx0LmFkZERyb3Bkb3duKChkcm9wZG93bikgPT4gZHJvcGRvd25cblx0XHRcdFx0LmFkZE9wdGlvbnMoRElTUExBWV9PUFRJT05TKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy5kaXNwbGF5KVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlOiBEaXNwbGF5KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy5kaXNwbGF5ID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJoZWFkZXJMYW5ndWFnZVRhZ3NcIl0uZm9yRWFjaChjb21wb25lbnQgPT4ge2NvbXBvbmVudC5zZXREaXNhYmxlZCh2YWx1ZT09PVwibm9uZVwiKTt9KTtcblx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSGVhZGVyIExhbmd1YWdlIFRhZyBCYWNrZ3JvdW5kIENvbG91clwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImhlYWRlcl9sYW5ndWFnZV90YWdfYmFja2dyb3VuZFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhlYWRlci5sYW5ndWFnZVRhZy5iYWNrZ3JvdW5kQ29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhlYWRlci5sYW5ndWFnZVRhZy5iYWNrZ3JvdW5kQ29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0XHQoKSA9PiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLmRpc3BsYXkgPT09IFwibm9uZVwiLFxuXHRcdFx0KTt9KTtcblx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImhlYWRlckxhbmd1YWdlVGFnc1wiXS5wdXNoKHRoaXMucGlja3JzW1wiaGVhZGVyX2xhbmd1YWdlX3RhZ19iYWNrZ3JvdW5kXCJdLnJlc2V0QnV0dG9uKTtcblx0XHRsZXQgbGFuZ3VhZ2VUYWdzQm9sZFRvZ2dsZTogVG9nZ2xlQ29tcG9uZW50O1xuXHRcdGxldCBsYW5ndWFnZVRhZ3NJdGFsaWNUb2dnbGU6IFRvZ2dsZUNvbXBvbmVudDtcblx0XHRsZXQgbGFuZ3VhZ2VJY29uc0ZvbnRUZXh0OiBUZXh0Q29tcG9uZW50O1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJIZWFkZXIgTGFuZ3VhZ2UgVGFnIFRleHQgU3R5bGluZ1wiKVxuXHRcdFx0LnNldERlc2MoXCJTdHlsZSB0aGUgaGVhZGVyIGxhbmd1YWdlIHRhZyB0ZXh0IHVzaW5nIGJvbGQgYW5kIGl0YWxpYyB0b2dnbGVzLCBieSBzZXR0aW5nIGEgZm9udCBvciBieSBzZXR0aW5nIGEgdGV4dCBjb2xvdXIuXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7bGFuZ3VhZ2VUYWdzQm9sZFRvZ2dsZSA9IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VG9vbHRpcChcIlRvZ2dsZSBib2xkIGxhbmd1YWdlIHRhZyB0ZXh0XCIpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRCb2xkKVxuXHRcdFx0XHQuc2V0RGlzYWJsZWQodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy5kaXNwbGF5PT09XCJub25lXCIpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRCb2xkID0gdmFsdWU7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wiaGVhZGVyTGFuZ3VhZ2VUYWdzXCJdLnB1c2gobGFuZ3VhZ2VUYWdzQm9sZFRvZ2dsZSk7XG5cdFx0XHR9KVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge2xhbmd1YWdlVGFnc0l0YWxpY1RvZ2dsZSA9IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VG9vbHRpcChcIlRvZ2dsZSBpdGFsaWMgbGFuZ3VhZ2UgdGFnIHRleHRcIilcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcudGV4dEl0YWxpYylcblx0XHRcdFx0LnNldERpc2FibGVkKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcuZGlzcGxheT09PVwibm9uZVwiKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy50ZXh0SXRhbGljID0gdmFsdWU7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wiaGVhZGVyTGFuZ3VhZ2VUYWdzXCJdLnB1c2gobGFuZ3VhZ2VUYWdzSXRhbGljVG9nZ2xlKTtcblx0XHRcdH0pXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHtsYW5ndWFnZUljb25zRm9udFRleHQgPSB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIkZvbnRcIilcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcudGV4dEZvbnQpXG5cdFx0XHRcdC5zZXREaXNhYmxlZCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLmRpc3BsYXk9PT1cIm5vbmVcIilcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcudGV4dEZvbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJoZWFkZXJMYW5ndWFnZVRhZ3NcIl0ucHVzaChsYW5ndWFnZUljb25zRm9udFRleHQpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJoZWFkZXJfbGFuZ3VhZ2VfdGFnX3RleHRcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oZWFkZXIubGFuZ3VhZ2VUYWcudGV4dENvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oZWFkZXIubGFuZ3VhZ2VUYWcudGV4dENvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdFx0KCkgPT4gdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy5kaXNwbGF5ID09PSBcIm5vbmVcIixcblx0XHRcdCk7fSk7XG5cdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJoZWFkZXJMYW5ndWFnZVRhZ3NcIl0ucHVzaCh0aGlzLnBpY2tyc1tcImhlYWRlcl9sYW5ndWFnZV90YWdfdGV4dFwiXS5yZXNldEJ1dHRvbik7XG5cdFx0XG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoXCJoNVwiLCB7dGV4dDogXCJIZWFkZXIgTGFuZ3VhZ2UgSWNvbiBBcHBlYXJhbmNlXCJ9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiRGlzcGxheSBIZWFkZXIgTGFuZ3VhZ2UgSWNvbnNcIilcblx0XHRcdC5zZXREZXNjKFwiRGV0ZXJtaW5lIHdoZW4gdG8gc2hvdyBsYW5ndWFnZSBpY29ucyB3aGVyZSBhdmFpbGFibGUuIFxcXCJUaXRsZSBPbmx5XFxcIiB3aWxsIG9ubHkgc2hvdyBsYW5ndWFnZSB0YWdzIHdoZW4gdGhlIHRpdGxlIHBhcmFtZXRlciBpcyBzZXQuIElmIHNldCB0byBcXFwiTm9uZVxcXCIsIHRoZSBiZWxvdyBzZXR0aW5ncyBhcmUgZGlzYWJsZWQgdG9vLlwiKVxuXHRcdFx0LmFkZERyb3Bkb3duKChkcm9wZG93bikgPT4gZHJvcGRvd25cblx0XHRcdFx0LmFkZE9wdGlvbnMoRElTUExBWV9PUFRJT05TKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheSlcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZTogRGlzcGxheSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VJY29uLmRpc3BsYXkgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImhlYWRlckxhbmd1YWdlSWNvbnNcIl0uZm9yRWFjaChjb21wb25lbnQgPT4ge2NvbXBvbmVudC5zZXREaXNhYmxlZCh2YWx1ZT09PVwibm9uZVwiKTt9KTtcblx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRsZXQgbGFuZ3VhZ2VJY29uc0NvbG91cmVkVG9nZ2xlOiBUb2dnbGVDb21wb25lbnQ7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkxhbmd1YWdlIEljb25zIENvbG91cmVkXCIpXG5cdFx0XHQuc2V0RGVzYyhcIklmIGRpc2FibGVkLCBsYW5ndWFnZSBpY29ucyB3aWxsIGJlIGJsYWNrIGFuZCB3aGl0ZS5cIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHtsYW5ndWFnZUljb25zQ29sb3VyZWRUb2dnbGUgPSB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VJY29uLmRpc3BsYXlDb2xvdXIpXG5cdFx0XHRcdC5zZXREaXNhYmxlZCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlSWNvbi5kaXNwbGF5PT09XCJub25lXCIpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlSWNvbi5kaXNwbGF5Q29sb3VyID0gdmFsdWU7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wiaGVhZGVyTGFuZ3VhZ2VJY29uc1wiXS5wdXNoKGxhbmd1YWdlSWNvbnNDb2xvdXJlZFRvZ2dsZSk7XG5cdFx0XHR9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiTGFuZ3VhZ2UgSWNvbiBTaXplXCIpXG5cdFx0XHQuc2V0RGVzYyhcIlNldCB0aGUgc2l6ZSBvZiB0aGUgZGlzcGxheWVkIGxhbmd1YWdlIGljb25zLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHtcblx0XHRcdFx0bGV0IHJlc2V0dGFibGVTbGlkZXI6IFNsaWRlckNvbXBvbmVudDtcblx0XHRcdFx0c2V0dGluZy5hZGRTbGlkZXIoKHNsaWRlcikgPT4ge3Jlc2V0dGFibGVTbGlkZXIgPSBzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDEwLDQwLDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5pY29uU2l6ZSlcblx0XHRcdFx0XHQuc2V0RGlzYWJsZWQodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheT09PVwibm9uZVwiKVxuXHRcdFx0XHRcdC5zZXREeW5hbWljVG9vbHRpcCgpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmljb25TaXplID0gdmFsdWU7XG5cdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7ICAgIFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImhlYWRlckxhbmd1YWdlSWNvbnNcIl0ucHVzaChyZXNldHRhYmxlU2xpZGVyKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGxldCByZXNldEJ1dHRvbjogRXh0cmFCdXR0b25Db21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge3Jlc2V0QnV0dG9uID0gYnV0dG9uXG5cdFx0XHRcdFx0LnNldEljb24oXCJyZXNldFwiKVxuXHRcdFx0XHRcdC5zZXREaXNhYmxlZCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlSWNvbi5kaXNwbGF5PT09XCJub25lXCIpXG5cdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJSZXN0b3JlIGRlZmF1bHQgaWNvbiBzaXplXCIpXG5cdFx0XHRcdFx0Lm9uQ2xpY2soKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmljb25TaXplID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzW3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWVdLnNldHRpbmdzLmFkdmFuY2VkLmljb25TaXplO1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQuaWNvblNpemUpO1xuXHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImhlYWRlckxhbmd1YWdlSWNvbnNcIl0ucHVzaChyZXNldEJ1dHRvbik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0XG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoXCJoNFwiLCB7dGV4dDogXCJIaWdobGlnaHRpbmcgQXBwZWFyYW5jZVwifSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkVkaXRvciBBY3RpdmUgTGluZSBIaWdobGlnaHRcIilcblx0XHRcdC5zZXREZXNjKFwiSWYgZW5hYmxlZCwgaGlnaGxpZ2h0cyB0aGUgYWN0aXZlIGxpbmUgb3V0c2lkZSBjb2RlYmxvY2tzLlwiKVxuXHRcdFx0LnNldENsYXNzKFwiY29kZS1zdHlsZXItc3BhY2VkXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7cmV0dXJuIHRvZ2dsZVxuXHRcdFx0XHQuc2V0VG9vbHRpcChcIlRvZ2dsZSBlZGl0b3IgYWN0aXZlIGxpbmUgaGlnaGxpZ2h0aW5nXCIpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVFZGl0b3JMaW5lKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhpZ2hsaWdodHMuYWN0aXZlRWRpdG9yTGluZSA9IHZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wiZWRpdG9yQWN0aXZlTGluZUhpZ2hsaWdodFwiXS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7Y29tcG9uZW50LnNldERpc2FibGVkKCF2YWx1ZSk7fSk7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge3RoaXMuY3JlYXRlUGlja3IoXG5cdFx0XHRcdHRoaXMucGx1Z2luLGNvbnRhaW5lckVsLHNldHRpbmcsXG5cdFx0XHRcdFwiZWRpdG9yX2FjdGl2ZV9saW5lX2hpZ2hsaWdodFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhpZ2hsaWdodHMuYWN0aXZlRWRpdG9yTGluZUNvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oaWdobGlnaHRzLmFjdGl2ZUVkaXRvckxpbmVDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHRcdCgpID0+ICF0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVFZGl0b3JMaW5lLFxuXHRcdFx0KTt9KTtcblx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImVkaXRvckFjdGl2ZUxpbmVIaWdobGlnaHRcIl0ucHVzaCh0aGlzLnBpY2tyc1tcImVkaXRvcl9hY3RpdmVfbGluZV9oaWdobGlnaHRcIl0ucmVzZXRCdXR0b24pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJDb2RlYmxvY2sgQWN0aXZlIExpbmUgSGlnaGxpZ2h0XCIpXG5cdFx0XHQuc2V0RGVzYyhcIklmIGVuYWJsZWQsIGhpZ2hsaWdodHMgdGhlIGFjdGl2ZSBsaW5lIGluc2lkZSBjb2RlYmxvY2tzLlwiKVxuXHRcdFx0LnNldENsYXNzKFwiY29kZS1zdHlsZXItc3BhY2VkXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7cmV0dXJuIHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhpZ2hsaWdodHMuYWN0aXZlQ29kZWJsb2NrTGluZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oaWdobGlnaHRzLmFjdGl2ZUNvZGVibG9ja0xpbmUgPSB2YWx1ZTsgXG5cdFx0XHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJjb2RlYmxvY2tBY3RpdmVMaW5lSGlnaGxpZ2h0XCJdLmZvckVhY2goY29tcG9uZW50ID0+IHtjb21wb25lbnQuc2V0RGlzYWJsZWQoIXZhbHVlKTt9KTtcblx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJjb2RlYmxvY2tfYWN0aXZlX2xpbmVfaGlnaGxpZ2h0XCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGlnaGxpZ2h0cy5hY3RpdmVDb2RlYmxvY2tMaW5lQ29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhpZ2hsaWdodHMuYWN0aXZlQ29kZWJsb2NrTGluZUNvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdFx0KCkgPT4gIXRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oaWdobGlnaHRzLmFjdGl2ZUNvZGVibG9ja0xpbmUsXG5cdFx0XHQpO30pO1xuXHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wiY29kZWJsb2NrQWN0aXZlTGluZUhpZ2hsaWdodFwiXS5wdXNoKHRoaXMucGlja3JzW1wiY29kZWJsb2NrX2FjdGl2ZV9saW5lX2hpZ2hsaWdodFwiXS5yZXNldEJ1dHRvbik7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkRlZmF1bHQgSGlnaGxpZ2h0IENvbG91clwiKVxuXHRcdFx0LnNldERlc2MoXCJVc2VkIGJ5IHRoZSAnaGwnIHBhcmFtZXRlci5cIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJkZWZhdWx0X2hpZ2hsaWdodFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhpZ2hsaWdodHMuZGVmYXVsdENvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oaWdobGlnaHRzLmRlZmF1bHRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHRcdGxldCBuZXdIaWdobGlnaHRUZXh0OiBUZXh0Q29tcG9uZW50O1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJBZGQgQWx0ZXJuYXRpdmUgSGlnaGxpZ2h0XCIpXG5cdFx0XHQuc2V0RGVzYyhcIkRlZmluZSBhIG5ldyBhbHRlcm5hdGl2ZSBoaWdobGlnaHQgbmFtZS4gVGhlIGNvbG91ciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXIgaXQgaXMgYWRkZWQuXCIpXG5cdFx0XHQuYWRkVGV4dCh2YWx1ZSA9PiB7bmV3SGlnaGxpZ2h0VGV4dCA9IHZhbHVlXG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcImUuZy4gZXJyb3IsIHdhcm5cIilcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld0hpZ2hsaWdodCA9IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuYWRkQnV0dG9uKChidXR0b24pID0+IHtcblx0XHRcdFx0YnV0dG9uLnNldEJ1dHRvblRleHQoXCJBZGRcIik7XG5cdFx0XHRcdGJ1dHRvbi5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0LnRyaW0oKSA9PT0gXCJcIilcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJQbGVhc2UgZW50ZXIgYSBjb2xvdXIgbmFtZS5cIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdGVsc2UgaWYgKCEvXlteXFxkXVxcdyokLy50ZXN0KHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld0hpZ2hsaWdodCkpXG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKGBcIiR7dGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0fVwiIGlzIG5vdCBhIHZhbGlkIGNvbG91ciBuYW1lLmApOyAvL05PU09OQVJcblx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdIaWdobGlnaHQudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IFwiaGxcIilcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJDYW5ub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0IHBhcmFtZXRlci5cIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdGVsc2UgaWYgKFBBUkFNRVRFUlMuaW5jbHVkZXModGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJDYW5ub3QgdXNlIG90aGVyIGRlZmF1bHQgcGFyYW1ldGVycy5cIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld0hpZ2hsaWdodCBpbiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3Vycy5saWdodC5oaWdobGlnaHRzLmFsdGVybmF0aXZlSGlnaGxpZ2h0cylcblx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZShgQSBoaWdobGlnaHQgd2l0aCB0aGUgbmFtZSBcIiR7dGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0fVwiIGFscmVhZHkgZXhpc3RzLmApOyAvL05PU09OQVJcblx0XHRcdFx0XHRcdFx0Ly9UT0RPIChAbWF5dXJhbmt2KSBGdXR1cmU6IEZvY3VzIG9uIGV4aXN0aW5nIGhpZ2hsaWdodGVyIC0gYHJlbmRlck1hdGNoZXNgXG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3Q29sb3VyID0gZ2V0UmFuZG9tQ29sb3VyKCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5jb2xvdXJzLmxpZ2h0LmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzW3RoaXMucGx1Z2luLnNldHRpbmdzLm5ld0hpZ2hsaWdodF0gPSBuZXdDb2xvdXI7XG5cdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5jb2xvdXJzLmRhcmsuaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHNbdGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0XSA9IG5ld0NvbG91cjtcblx0XHRcdFx0XHRcdFx0dGhpcy51cGRhdGVBbHRlcm5hdGl2ZUhpZ2hsaWdodHMoYWx0ZXJuYXRpdmVIaWdobGlnaHRzQ29udGFpbmVyKTtcblx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZShgQWRkZWQgaGlnaGxpZ2h0IFwiJHt0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdIaWdobGlnaHR9XCIuYCk7IC8vTk9TT05BUlxuXHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdIaWdobGlnaHQgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRuZXdIaWdobGlnaHRUZXh0LnNldFZhbHVlKFwiXCIpO1xuXHRcdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnJlcmVuZGVyUHJldmlldygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRjb25zdCBhbHRlcm5hdGl2ZUhpZ2hsaWdodHNDb250YWluZXIgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoKTtcblx0XHR0aGlzLnVwZGF0ZUFsdGVybmF0aXZlSGlnaGxpZ2h0cyhhbHRlcm5hdGl2ZUhpZ2hsaWdodHNDb250YWluZXIpO1xuXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoXCJoNFwiLCB7dGV4dDogXCJJbmxpbmUgQ29kZSBBcHBlYXJhbmNlXCJ9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiU3ludGF4IEhpZ2hsaWdodCBJbmxpbmUgQ29kZVwiKVxuXHRcdFx0LnNldERlc2MoXCJJZiBlbmFibGVkLCBpbiByZWFkaW5nIG1vZGUsIGlubGluZSBjb2RlIHdpbGwgYmUgc3ludGF4IGhpZ2hsaWdodGVkIGJhc2VkIG9uIGEgbGFuZ3VhZ2Ugc2V0IHdpdGggYHtsYW5ndWFnZX0gaGlnaGxpZ2h0ZWRfaW5saW5lX2NvZGVgLiBTZWUgdGhlIFJFQURNRSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5zeW50YXhIaWdobGlnaHQpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnN5bnRheEhpZ2hsaWdodCA9IHZhbHVlO1xuXHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTsgICAgXG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4ucmVyZW5kZXJQcmV2aWV3KCk7XG5cdFx0XHRcdH0pKTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSW5saW5lIENvZGUgQmFja2dyb3VuZCBDb2xvdXJcIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJpbmxpbmVfYmFja2dyb3VuZFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmlubGluZS5iYWNrZ3JvdW5kQ29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmlubGluZS5iYWNrZ3JvdW5kQ29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSW5saW5lIENvZGUgVGV4dCBDb2xvdXJcIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJpbmxpbmVfdGV4dFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmlubGluZS50ZXh0Q29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmlubGluZS50ZXh0Q29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSW5saW5lIENvZGUgQWN0aXZlIFRleHQgQ29sb3VyXCIpXG5cdFx0XHQuc2V0RGVzYyhcIlRoZSB0ZXh0IGNvbG91ciB3aGVuIGVkaXRpbmcgaW5saW5lIGNvZGUuXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge3RoaXMuY3JlYXRlUGlja3IoXG5cdFx0XHRcdHRoaXMucGx1Z2luLGNvbnRhaW5lckVsLHNldHRpbmcsXG5cdFx0XHRcdFwiaW5saW5lX2FjdGl2ZV90ZXh0XCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaW5saW5lLmFjdGl2ZVRleHRDb2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaW5saW5lLmFjdGl2ZVRleHRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJJbmxpbmUgQ29kZSBGb250IFdlaWdodFwiKVxuXHRcdFx0LnNldERlc2MoXCJEZXRlcm1pbmVzIGhvdyBib2xkIGlubGluZSBjb2RlIGFwcGVhcnMuXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge1xuXHRcdFx0XHRsZXQgcmVzZXR0YWJsZVNsaWRlcjogU2xpZGVyQ29tcG9uZW50O1xuXHRcdFx0XHRzZXR0aW5nLmFkZFNsaWRlcigoc2xpZGVyKSA9PiB7cmVzZXR0YWJsZVNsaWRlciA9IHNsaWRlclxuXHRcdFx0XHRcdC5zZXRMaW1pdHMoMSw5LDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuZm9udFdlaWdodClcblx0XHRcdFx0XHQuc2V0RHluYW1pY1Rvb2x0aXAoKVxuXHRcdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuZm9udFdlaWdodCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpOyAgICBcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge2J1dHRvblxuXHRcdFx0XHRcdC5zZXRJY29uKFwicmVzZXRcIilcblx0XHRcdFx0XHQuc2V0VG9vbHRpcChcIlJlc3RvcmUgZGVmYXVsdCBmb250IHdlaWdodFwiKVxuXHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuZm9udFdlaWdodCA9IHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXS5zZXR0aW5ncy5pbmxpbmUuZm9udFdlaWdodDtcblx0XHRcdFx0XHRcdHJlc2V0dGFibGVTbGlkZXIuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5mb250V2VpZ2h0KTtcblx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSW5saW5lIENvZGUgQ3VydmF0dXJlXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkRldGVybWluZXMgaG93IHJvdW5kZWQgaW5saW5lIGNvZGUgYXBwZWFyIGluIHBpeGVscy5cIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7XG5cdFx0XHRcdGxldCByZXNldHRhYmxlU2xpZGVyOiBTbGlkZXJDb21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkU2xpZGVyKChzbGlkZXIpID0+IHtyZXNldHRhYmxlU2xpZGVyID0gc2xpZGVyXG5cdFx0XHRcdFx0LnNldExpbWl0cygwLDEyLDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuY3VydmF0dXJlKVxuXHRcdFx0XHRcdC5zZXREeW5hbWljVG9vbHRpcCgpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5jdXJ2YXR1cmUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTsgICAgXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZXR0aW5nLmFkZEV4dHJhQnV0dG9uKChidXR0b24pID0+IHtidXR0b25cblx0XHRcdFx0XHQuc2V0SWNvbihcInJlc2V0XCIpXG5cdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJSZXN0b3JlIGRlZmF1bHQgY3VydmF0dXJlXCIpXG5cdFx0XHRcdFx0Lm9uQ2xpY2soKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5jdXJ2YXR1cmUgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uc2V0dGluZ3MuaW5saW5lLmN1cnZhdHVyZTtcblx0XHRcdFx0XHRcdHJlc2V0dGFibGVTbGlkZXIuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5jdXJ2YXR1cmUpO1xuXHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJJbmxpbmUgQ29kZSBWZXJ0aWNhbCBQYWRkaW5nXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkRldGVybWluZXMgaG93IG11Y2ggdmVydGljYWwgaW5uZXIgcGFkZGluZyBpbiBwaXhlbHMgaW5saW5lIGNvZGUgaGFzLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHtcblx0XHRcdFx0bGV0IHJlc2V0dGFibGVTbGlkZXI6IFNsaWRlckNvbXBvbmVudDtcblx0XHRcdFx0c2V0dGluZy5hZGRTbGlkZXIoKHNsaWRlcikgPT4ge3Jlc2V0dGFibGVTbGlkZXIgPSBzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDAsMTAsMSlcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5wYWRkaW5nVmVydGljYWwpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnBhZGRpbmdWZXJ0aWNhbCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpOyAgICBcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge2J1dHRvblxuXHRcdFx0XHRcdC5zZXRJY29uKFwicmVzZXRcIilcblx0XHRcdFx0XHQuc2V0VG9vbHRpcChcIlJlc3RvcmUgZGVmYXVsdCB2ZXJ0aWNhbCBwYWRkaW5nXCIpXG5cdFx0XHRcdFx0Lm9uQ2xpY2soKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5wYWRkaW5nVmVydGljYWwgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uc2V0dGluZ3MuaW5saW5lLnBhZGRpbmdWZXJ0aWNhbDtcblx0XHRcdFx0XHRcdHJlc2V0dGFibGVTbGlkZXIuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5wYWRkaW5nVmVydGljYWwpO1xuXHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJJbmxpbmUgQ29kZSBIb3Jpem9udGFsIFBhZGRpbmdcIilcblx0XHRcdC5zZXREZXNjKFwiRGV0ZXJtaW5lcyBob3cgbXVjaCBob3Jpem9udGFsIGlubmVyIHBhZGRpbmcgaW4gcGl4ZWxzIGlubGluZSBjb2RlIGhhcy5cIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7XG5cdFx0XHRcdGxldCByZXNldHRhYmxlU2xpZGVyOiBTbGlkZXJDb21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkU2xpZGVyKChzbGlkZXIpID0+IHtyZXNldHRhYmxlU2xpZGVyID0gc2xpZGVyXG5cdFx0XHRcdFx0LnNldExpbWl0cygwLDEwLDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUucGFkZGluZ0hvcml6b250YWwpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnBhZGRpbmdIb3Jpem9udGFsID0gdmFsdWU7XG5cdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7ICAgIFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7YnV0dG9uXG5cdFx0XHRcdFx0LnNldEljb24oXCJyZXNldFwiKVxuXHRcdFx0XHRcdC5zZXRUb29sdGlwKFwiUmVzdG9yZSBkZWZhdWx0IGhvcml6b250YWwgcGFkZGluZ1wiKVxuXHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUucGFkZGluZ0hvcml6b250YWwgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uc2V0dGluZ3MuaW5saW5lLnBhZGRpbmdIb3Jpem9udGFsO1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnBhZGRpbmdIb3Jpem9udGFsKTtcblx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSW5saW5lIENvZGUgSG9yaXpvbnRhbCBNYXJnaW5cIilcblx0XHRcdC5zZXREZXNjKFwiRGV0ZXJtaW5lcyBob3cgbXVjaCBob3Jpem9udGFsIG91dGVyIG1hcmdpbiBpcyBhZGRlZCB0byB0aGUgaW5saW5lIGNvZGUgaW4gcGl4ZWxzLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHtcblx0XHRcdFx0bGV0IHJlc2V0dGFibGVTbGlkZXI6IFNsaWRlckNvbXBvbmVudDtcblx0XHRcdFx0c2V0dGluZy5hZGRTbGlkZXIoKHNsaWRlcikgPT4ge3Jlc2V0dGFibGVTbGlkZXIgPSBzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDAsOCwxKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLm1hcmdpbkhvcml6b250YWwpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLm1hcmdpbkhvcml6b250YWwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTsgICAgXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZXR0aW5nLmFkZEV4dHJhQnV0dG9uKChidXR0b24pID0+IHtidXR0b25cblx0XHRcdFx0XHQuc2V0SWNvbihcInJlc2V0XCIpXG5cdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJSZXN0b3JlIGRlZmF1bHQgaG9yaXpvbnRhbCBtYXJnaW5cIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLm1hcmdpbkhvcml6b250YWwgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uc2V0dGluZ3MuaW5saW5lLm1hcmdpbkhvcml6b250YWw7XG5cdFx0XHRcdFx0XHRyZXNldHRhYmxlU2xpZGVyLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUubWFyZ2luSG9yaXpvbnRhbCk7XG5cdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIklubGluZSBDb2RlIFRpdGxlIENvbG91clwiKVxuXHRcdFx0LnNldERlc2MoXCJUaGUgdGV4dCBjb2xvdXIgb2YgaW5saW5lIGNvZGUgdGl0bGVzLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcInRpdGxlX3RleHRcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5pbmxpbmUudGl0bGVUZXh0Q29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmlubGluZS50aXRsZVRleHRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJJbmxpbmUgQ29kZSBUaXRsZSBGb250IFdlaWdodFwiKVxuXHRcdFx0LnNldERlc2MoXCJEZXRlcm1pbmVzIGhvdyBib2xkIGlubGluZSBjb2RlIHRpdGxlcyBhcHBlYXIuXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge1xuXHRcdFx0XHRsZXQgcmVzZXR0YWJsZVNsaWRlcjogU2xpZGVyQ29tcG9uZW50O1xuXHRcdFx0XHRzZXR0aW5nLmFkZFNsaWRlcigoc2xpZGVyKSA9PiB7cmVzZXR0YWJsZVNsaWRlciA9IHNsaWRlclxuXHRcdFx0XHRcdC5zZXRMaW1pdHMoMSw5LDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUudGl0bGVGb250V2VpZ2h0KVxuXHRcdFx0XHRcdC5zZXREeW5hbWljVG9vbHRpcCgpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS50aXRsZUZvbnRXZWlnaHQgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTsgICAgXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZXR0aW5nLmFkZEV4dHJhQnV0dG9uKChidXR0b24pID0+IHtidXR0b25cblx0XHRcdFx0XHQuc2V0SWNvbihcInJlc2V0XCIpXG5cdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJSZXN0b3JlIGRlZmF1bHQgZm9udCB3ZWlnaHRcIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnRpdGxlRm9udFdlaWdodCA9IHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXS5zZXR0aW5ncy5pbmxpbmUudGl0bGVGb250V2VpZ2h0O1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnRpdGxlRm9udFdlaWdodCk7XG5cdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHQvLyA9PT09PT09PT09IEFkdmFuY2VkID09PT09PT09PT1cblx0XHRjb250YWluZXJFbC5jcmVhdGVFbChcImgzXCIsIHt0ZXh0OiBcIkFkdmFuY2VkIFNldHRpbmdzXCJ9KTtcblx0XHRcblxuXHRcdGxldCB3cmFwTGluZXNBY3RpdmVUb2dnbGU6IFRvZ2dsZUNvbXBvbmVudDtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiV3JhcCBMaW5lcyBvbiBDbGlja1wiKVxuXHRcdFx0LnNldERlc2MoXCJJZiBlbmFibGVkLCBpbiByZWFkaW5nIG1vZGUsIGhvbGRpbmcgY2xpY2sgb24gYSBjb2RlYmxvY2sgd2lsbCB3cmFwIHRoZSBsaW5lcyBmb3IgYmV0dGVyIHZpc2liaWxpdHkuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgXFxcIlVud3JhcCBMaW5lc1xcXCIgc2V0dGluZyBpcyBlbmFibGVkLlwiKVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4ge3dyYXBMaW5lc0FjdGl2ZVRvZ2dsZSA9IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmNvZGVibG9jay53cmFwTGluZXNBY3RpdmUpXG5cdFx0XHRcdC5zZXREaXNhYmxlZCghdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmNvZGVibG9jay51bndyYXBMaW5lcylcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2sud3JhcExpbmVzQWN0aXZlID0gdmFsdWU7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpOyBcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5yZXJlbmRlclByZXZpZXcoKTsgICBcblx0XHRcdFx0fSk7XG5cdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcIndyYXBMaW5lc1wiXS5wdXNoKHdyYXBMaW5lc0FjdGl2ZVRvZ2dsZSk7XG5cdFx0XHR9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiQnV0dG9uIENvbG91clwiKVxuXHRcdFx0LnNldERlc2MoXCJVc2VkIGZvciBVSSBidXR0b25zIGxpa2UgdGhlIGNvcHkgY29kZSBidXR0b24uXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge3RoaXMuY3JlYXRlUGlja3IoXG5cdFx0XHRcdHRoaXMucGx1Z2luLGNvbnRhaW5lckVsLHNldHRpbmcsXG5cdFx0XHRcdFwiZGVmYXVsdF9oaWdobGlnaHRcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5hZHZhbmNlZC5idXR0b25Db2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uYWR2YW5jZWQuYnV0dG9uQ29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiQnV0dG9uIEFjdGl2ZSBDb2xvdXJcIilcblx0XHRcdC5zZXREZXNjKFwiQ29sb3VyIGJ1dHRvbnMgdXNlIHdoZW4gYWN0aXZhdGVkLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImRlZmF1bHRfaGlnaGxpZ2h0XCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uYWR2YW5jZWQuYnV0dG9uQWN0aXZlQ29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmFkdmFuY2VkLmJ1dHRvbkFjdGl2ZUNvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdCk7fSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkdyYWRpZW50IEhpZ2hsaWdodGluZ1wiKVxuXHRcdFx0LnNldERlc2MoXCJJZiBlbmFibGVkLCBoaWdobGlnaHRzIGZhZGUgYXdheSB0byB0aGUgcmlnaHQuIFRoZSBzbGlkZXIgc2V0cyB0aGUgZ3JhZGllbnQgY29sb3VyIHN0b3AgYXMgYSBwZXJjZW50YWdlLlwiKVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQuZ3JhZGllbnRIaWdobGlnaHRzKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmdyYWRpZW50SGlnaGxpZ2h0cyA9IHZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wiZ3JhZGllbnRIaWdobGlnaHRpbmdcIl0uZm9yRWFjaChjb21wb25lbnQgPT4ge2NvbXBvbmVudC5zZXREaXNhYmxlZCghdmFsdWUpO30pO1xuXHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0fSkpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge1xuXHRcdFx0XHRsZXQgcmVzZXR0YWJsZVNsaWRlcjogU2xpZGVyQ29tcG9uZW50O1xuXHRcdFx0XHRzZXR0aW5nLmFkZFNsaWRlcigoc2xpZGVyKSA9PiB7cmVzZXR0YWJsZVNsaWRlciA9IHNsaWRlclxuXHRcdFx0XHRcdC5zZXRMaW1pdHMoMCwxMDAsMSlcblx0XHRcdFx0XHQuc2V0VmFsdWUoK3RoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHNDb2xvdXJTdG9wLnNsaWNlKDAsLTEpKVxuXHRcdFx0XHRcdC5zZXREaXNhYmxlZCghdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmdyYWRpZW50SGlnaGxpZ2h0cylcblx0XHRcdFx0XHQuc2V0RHluYW1pY1Rvb2x0aXAoKVxuXHRcdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHNDb2xvdXJTdG9wID0gYCR7dmFsdWV9JWA7XG5cdFx0XHRcdFx0XHQoYXN5bmMgKCkgPT4ge2F3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7ICAgIFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImdyYWRpZW50SGlnaGxpZ2h0aW5nXCJdLnB1c2gocmVzZXR0YWJsZVNsaWRlcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRsZXQgcmVzZXRCdXR0b246IEV4dHJhQnV0dG9uQ29tcG9uZW50O1xuXHRcdFx0XHRzZXR0aW5nLmFkZEV4dHJhQnV0dG9uKChidXR0b24pID0+IHtyZXNldEJ1dHRvbiA9IGJ1dHRvblxuXHRcdFx0XHRcdC5zZXRJY29uKFwicmVzZXRcIilcblx0XHRcdFx0XHQuc2V0RGlzYWJsZWQoIXRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHMpXG5cdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJSZXN0b3JlIGRlZmF1bHQgY29sb3VyIHN0b3BcIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQuZ3JhZGllbnRIaWdobGlnaHRzQ29sb3VyU3RvcCA9IHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXS5zZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHNDb2xvdXJTdG9wO1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSgrdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmdyYWRpZW50SGlnaGxpZ2h0c0NvbG91clN0b3Auc2xpY2UoMCwtMSkpO1xuXHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImdyYWRpZW50SGlnaGxpZ2h0aW5nXCJdLnB1c2gocmVzZXRCdXR0b24pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJMYW5ndWFnZSBDb2xvdXJlZCBCb3JkZXJzXCIpXG5cdFx0XHQuc2V0RGVzYyhcIklmIGVuYWJsZWQsIGxhbmd1YWdlcyB3aXRoIGljb25zIGRpc3BsYXkgYSBsZWZ0IGJvcmRlciB3aXRoIHRoZSBjb2xvdXIgb2YgdGhlIGljb24uIFRoZSBzbGlkZXIgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGJvcmRlci5cIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyQ29sb3VyKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyQ29sb3VyID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJsYW5ndWFnZUJvcmRlckNvbG91clwiXS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7Y29tcG9uZW50LnNldERpc2FibGVkKCF2YWx1ZSk7fSk7XG5cdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHR9KSlcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7XG5cdFx0XHRcdGxldCByZXNldHRhYmxlU2xpZGVyOiBTbGlkZXJDb21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkU2xpZGVyKChzbGlkZXIpID0+IHtyZXNldHRhYmxlU2xpZGVyID0gc2xpZGVyXG5cdFx0XHRcdFx0LnNldExpbWl0cygwLDIwLDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5sYW5ndWFnZUJvcmRlcldpZHRoKVxuXHRcdFx0XHRcdC5zZXREaXNhYmxlZCghdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyQ29sb3VyKVxuXHRcdFx0XHRcdC5zZXREeW5hbWljVG9vbHRpcCgpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyV2lkdGggPSB2YWx1ZTtcblx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTsgICAgXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wibGFuZ3VhZ2VCb3JkZXJDb2xvdXJcIl0ucHVzaChyZXNldHRhYmxlU2xpZGVyKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGxldCByZXNldEJ1dHRvbjogRXh0cmFCdXR0b25Db21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge3Jlc2V0QnV0dG9uID0gYnV0dG9uXG5cdFx0XHRcdFx0LnNldEljb24oXCJyZXNldFwiKVxuXHRcdFx0XHRcdC5zZXREaXNhYmxlZCghdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyQ29sb3VyKVxuXHRcdFx0XHRcdC5zZXRUb29sdGlwKFwiUmVzdG9yZSBkZWZhdWx0IGNvbG91ciBzdG9wXCIpXG5cdFx0XHRcdFx0Lm9uQ2xpY2soKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyV2lkdGggPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uc2V0dGluZ3MuYWR2YW5jZWQubGFuZ3VhZ2VCb3JkZXJXaWR0aDtcblx0XHRcdFx0XHRcdHJlc2V0dGFibGVTbGlkZXIuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyV2lkdGgpO1xuXHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImxhbmd1YWdlQm9yZGVyQ29sb3VyXCJdLnB1c2gocmVzZXRCdXR0b24pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJSZWRpcmVjdCBMYW5ndWFnZSBTZXR0aW5nc1wiKVxuXHRcdFx0LnNldERlc2MoXCJVc2UgdGhpcyB0ZXh0Ym94IHRvIHJlZGlyZWN0IHNwZWNpZmljIGxhbmd1YWdlIGNvbG91cnMgYW5kIGljb25zIGFzIGEgSlNPTiB3aXRoIGxhbmd1YWdlIG5hbWVzIGFzIGtleXMgYW5kIGVpdGhlciBhIGNvbG91ciBrZXksIGFuIGljb24ga2V5IG9yIGJvdGggYXMgdGhlIHZhbHVlIGZvciBhIGdpdmVuIGxhbmd1YWdlLiBDb2xvdXJzIHNob3VsZCBiZSBwYXNzZWQgYXMgQ1NTIGNvbG91cnMgYW5kIGljb25zIHNob3VsZCBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgdGhlIGluc2lkZSBvZiBhbiBzdmcgZWxlbWVudC4gVGhpcyBzZXR0aW5nIGlzIHRoZW1lIGluZGVwZW5kZW50LlwiKVxuXHRcdFx0LnNldENsYXNzKFwiY29kZS1zdHlsZXItc2V0dGluZy10ZXh0LWFyZWFcIilcblx0XHRcdC5hZGRUZXh0QXJlYSh0ZXh0QXJlYSA9PiB0ZXh0QXJlYVxuXHRcdFx0XHQuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW4uc2V0dGluZ3MucmVkaXJlY3RMYW5ndWFnZXMpPT09XCJ7fVwiP1wiXCI6SlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW4uc2V0dGluZ3MucmVkaXJlY3RMYW5ndWFnZXMsbnVsbCw0KSlcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKEpTT04uc3RyaW5naWZ5KHt0b21sOiB7Y29sb3VyOiBcIiMwMTIzNDVcIiwgaWNvbjogTEFOR1VBR0VfSUNPTlNfREFUQVtcIkFQTFwiXX19LG51bGwsNCkpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpPT57XG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5yZWRpcmVjdExhbmd1YWdlcyA9IHt9O1xuXHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5yZWRpcmVjdExhbmd1YWdlcyA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnJlZGlyZWN0TGFuZ3VhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKFwiSW52YWxpZCBKU09OXCIpOyAvL05PU09OQVJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pKTtcblx0XHQvL1RPRE8gKEBtYXl1cmFua3YpIFJlLXJlbmRlciAoVGVzdClcblxuXG5cdFx0Ly8gPT09PT09PT09PSBEb25hdGlvbiA9PT09PT09PT09XG5cdFx0Y29uc3QgZG9uYXRpb25EaXYgPSBjb250YWluZXJFbC5jcmVhdGVFbChcImRpdlwiLCB7IGNsczogXCJjb2RlLXN0eWxlci1kb25hdGlvblwiLCB9KTsgICAgXG5cdFx0Y29uc3QgZG9uYXRpb25UZXh0ID0gY3JlYXRlRWwoXCJwXCIsIHt0ZXh0OiBcIklmIHlvdSBsaWtlIHRoaXMgcGx1Z2luLCBhbmQgd291bGQgbGlrZSB0byBoZWxwIHN1cHBvcnQgY29udGludWVkIGRldmVsb3BtZW50LCB1c2UgdGhlIGJ1dHRvbiBiZWxvdyFcIn0pO1xuXHRcdGRvbmF0aW9uRGl2LmFwcGVuZENoaWxkKGRvbmF0aW9uVGV4dCk7XG5cdFx0Y29uc3QgZG9uYXRpb25CdXR0b24gPSBjcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vd3d3LmJ1eW1lYWNvZmZlZS5jb20vbWF5dXJhbmt2MlwifSk7XG5cdFx0ZG9uYXRpb25CdXR0b24uaW5uZXJIVE1MID0gXCI8aW1nIHNyYz1cXFwiaHR0cHM6Ly9pbWcuYnV5bWVhY29mZmVlLmNvbS9idXR0b24tYXBpLz90ZXh0PUJ1eSBtZSBhIGNvZmZlZSZlbW9qaT0mc2x1Zz1tYXl1cmFua3YyJmJ1dHRvbl9jb2xvdXI9ZTNlN2VmYTAmZm9udF9jb2xvdXI9MjYyNjI2JmZvbnRfZmFtaWx5PUludGVyJm91dGxpbmVfY29sb3VyPTI2MjYyNiZjb2ZmZWVfY29sb3VyPWEwNTIyZFxcXCIgaGVpZ2h0PVxcXCI0MnB4XFxcIj5cIjtcblx0XHRkb25hdGlvbkRpdi5hcHBlbmRDaGlsZChkb25hdGlvbkJ1dHRvbik7XG5cdH1cblxuXHQvLyBTZXR0aW5nIFBhcnNpbmdcblx0cmVkaXJlY3RMYW5ndWFnZXMoKSB7XG5cdFx0T2JqZWN0LmVudHJpZXModGhpcy5wbHVnaW4uc2V0dGluZ3MucmVkaXJlY3RMYW5ndWFnZXMpLmZvckVhY2goKFtsYW5ndWFnZU5hbWUsIGxhbmd1YWdlU2V0dGluZ3NdOiBbc3RyaW5nLCB7Y29sb3VyPzogQ29sb3VyLCBpY29uPzogc3RyaW5nfV0pPT57XG5cdFx0XHRpZiAoXCJpY29uXCIgaW4gbGFuZ3VhZ2VTZXR0aW5ncykge1xuXHRcdFx0XHRpZiAoTEFOR1VBR0VfTkFNRVNbbGFuZ3VhZ2VOYW1lXSBpbiB0aGlzLnBsdWdpbi5sYW5ndWFnZUljb25zKVxuXHRcdFx0XHRcdFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5wbHVnaW4ubGFuZ3VhZ2VJY29uc1tMQU5HVUFHRV9OQU1FU1tsYW5ndWFnZU5hbWVdXSk7XG5cdFx0XHRcdHRoaXMucGx1Z2luLmxhbmd1YWdlSWNvbnNbTEFOR1VBR0VfTkFNRVNbbGFuZ3VhZ2VOYW1lXV0gPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPiR7bGFuZ3VhZ2VTZXR0aW5ncy5pY29ufTwvc3ZnPmBdLCB7IHR5cGU6IFwiaW1hZ2Uvc3ZnK3htbFwiIH0pKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8vIFNldHRpbmcgQ3JlYXRpb25cblx0Y3JlYXRlUGlja3IocGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luLCBjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIHNldHRpbmc6IFNldHRpbmcsIGlkOiBzdHJpbmcsIGdldFJlbGV2YW50VGhlbWVDb2xvdXI6IChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycyk9PkNvbG91ciwgc2F2ZVJlbGV2YW50VGhlbWVDb2xvdXI6IChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKT0+dm9pZCwgZGlzYWJsZWQ/OiAoKT0+Ym9vbGVhbikge1xuXHRcdGNvbnN0IHBpY2tyOiBQaWNrclJlc2V0dGFibGUgPSBuZXcgUGlja3JSZXNldHRhYmxlKHBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLGdldFJlbGV2YW50VGhlbWVDb2xvdXIsc2F2ZVJlbGV2YW50VGhlbWVDb2xvdXIpO1xuXHRcdHBpY2tyXG5cdFx0XHQub24oXCJzaG93XCIsIChjb2xvdXI6IFBpY2tyLkhTVmFDb2xvciwgaW5zdGFuY2U6IFBpY2tyKSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZGlzYWJsZWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZGlzYWJsZWQoKSlcblx0XHRcdFx0XHRpbnN0YW5jZS5oaWRlKCk7XG5cdFx0XHRcdC8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gKGluc3RhbmNlLmdldFJvb3QoKSBhcyBhbnkpLmludGVyYWN0aW9uLnJlc3VsdC5zZWxlY3QoKSkpXG5cdFx0XHR9KVxuXHRcdFx0Lm9uKFwic2F2ZVwiLCAoY29sb3VyOiBQaWNrci5IU1ZhQ29sb3IsIGluc3RhbmNlOiBQaWNrclJlc2V0dGFibGUpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2F2ZWRDb2xvdXI6IENvbG91ciA9IGAjJHtjb2xvdXIudG9IRVhBKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSl9YDtcblx0XHRcdFx0aW5zdGFuY2UuaGlkZSgpO1xuXHRcdFx0XHRpbnN0YW5jZS5hZGRTd2F0Y2goc2F2ZWRDb2xvdXIpO1xuXHRcdFx0XHRpbnN0YW5jZS5zYXZlQ29sb3VyKHNhdmVkQ29sb3VyKTtcblx0XHRcdH0pXG5cdFx0XHQub24oXCJjYW5jZWxcIiwgKGluc3RhbmNlOiBQaWNrclJlc2V0dGFibGUpID0+IHtpbnN0YW5jZS5oaWRlKCk7fSk7XG5cdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7cGlja3IucmVzZXRCdXR0b24gPSBidXR0b25cblx0XHRcdC5zZXRJY29uKFwicmVzZXRcIilcblx0XHRcdC5zZXREaXNhYmxlZCh0eXBlb2YgZGlzYWJsZWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZGlzYWJsZWQoKSlcblx0XHRcdC5zZXRUb29sdGlwKFwiUmVzdG9yZSBkZWZhdWx0IGNvbG91clwiKVxuXHRcdFx0Lm9uQ2xpY2soKCkgPT4ge3BpY2tyLnJlc2V0Q29sb3VyKCk7fSk7XG5cdFx0fSk7XG5cdFx0dGhpcy5waWNrcnNbaWRdPXBpY2tyO1xuXHR9XG5cdFxuXHQvLyBTZXR0aW5nIFRhYiBVcGRhdGVzXG5cdHVwZGF0ZURyb3Bkb3duKGRyb3Bkb3duOiBEcm9wZG93bkNvbXBvbmVudCwgc2V0dGluZ3M6IENvZGVTdHlsZXJTZXR0aW5ncykge1xuXHRcdGRyb3Bkb3duLnNlbGVjdEVsLmVtcHR5KCk7XG5cdFx0T2JqZWN0LmtleXMoc2V0dGluZ3MudGhlbWVzKS5mb3JFYWNoKCh0aGVtZV9uYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGRyb3Bkb3duLmFkZE9wdGlvbih0aGVtZV9uYW1lLCB0aGVtZV9uYW1lKTsgICAgICAgICAgICBcblx0XHR9KTtcblx0XHRkcm9wZG93bi5zZXRWYWx1ZShzZXR0aW5ncy5zZWxlY3RlZFRoZW1lKTtcblx0fVxuXHR1cGRhdGVBbHRlcm5hdGl2ZUhpZ2hsaWdodHMoYWx0ZXJuYXRpdmVIaWdobGlnaHRzQ29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCkge1xuXHRcdGFsdGVybmF0aXZlSGlnaGxpZ2h0c0NvbnRhaW5lci5lbXB0eSgpO1xuXHRcdE9iamVjdC5rZXlzKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5jb2xvdXJzLmxpZ2h0LmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzKS5mb3JFYWNoKChhbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWUpID0+IHtcblx0XHRcdG5ldyBTZXR0aW5nKGFsdGVybmF0aXZlSGlnaGxpZ2h0c0NvbnRhaW5lcilcblx0XHRcdFx0LnNldE5hbWUoYWx0ZXJuYXRpdmVIaWdobGlnaHROYW1lKVxuXHRcdFx0XHQuc2V0RGVzYyhgVG8gaGlnaGxpZ2h0IGxpbmVzIHdpdGggdGhpcyBoaWdobGlnaHQsIHVzZSB0aGUgJHthbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWV9IHBhcmFtZXRlci5gKVxuXHRcdFx0XHQudGhlbigoc2V0dGluZykgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY3JlYXRlUGlja3IoXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbixhbHRlcm5hdGl2ZUhpZ2hsaWdodHNDb250YWluZXIsc2V0dGluZyxcblx0XHRcdFx0XHRcdGBhbHRlcm5hdGl2ZV9oaWdobGlnaHRfJHthbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWV9YCxcblx0XHRcdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gYWx0ZXJuYXRpdmVIaWdobGlnaHROYW1lIGluIHJlbGV2YW50VGhlbWVDb2xvdXJzLmxpZ2h0LmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzP3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzW2FsdGVybmF0aXZlSGlnaGxpZ2h0TmFtZV06dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLmNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHNbYWx0ZXJuYXRpdmVIaWdobGlnaHROYW1lXSxcblx0XHRcdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHNbYWx0ZXJuYXRpdmVIaWdobGlnaHROYW1lXSA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge2J1dHRvblxuXHRcdFx0XHRcdFx0LnNldEljb24oXCJ0cmFzaFwiKVxuXHRcdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJEZWxldGUgaGlnaGxpZ2h0XCIpXG5cdFx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3Vycy5saWdodC5oaWdobGlnaHRzLmFsdGVybmF0aXZlSGlnaGxpZ2h0c1thbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLmNvbG91cnMuZGFyay5oaWdobGlnaHRzLmFsdGVybmF0aXZlSGlnaGxpZ2h0c1thbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKGBSZW1vdmVkIGhpZ2hsaWdodCBcIiR7YWx0ZXJuYXRpdmVIaWdobGlnaHROYW1lfVwiLmApOyAvL05PU09OQVJcblx0XHRcdFx0XHRcdFx0dGhpcy51cGRhdGVBbHRlcm5hdGl2ZUhpZ2hsaWdodHMoYWx0ZXJuYXRpdmVIaWdobGlnaHRzQ29udGFpbmVyKTtcblx0XHRcdFx0XHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG5cbmNsYXNzIFBpY2tyUmVzZXR0YWJsZSBleHRlbmRzIFBpY2tyIHtcblx0c2F2ZUNvbG91cjogKHNhdmVDb2xvdXI6IENvbG91cik9PnZvaWQ7XG5cdHJlc2V0Q29sb3VyOiAoKT0+dm9pZDtcblx0Z2V0Q3VycmVudENvbG91cjogKGFjY2Vzc1RoZW1lOiBib29sZWFuKT0+dm9pZDtcblx0cmVzZXRCdXR0b246IEV4dHJhQnV0dG9uQ29tcG9uZW50O1xuXG5cdGNvbnN0cnVjdG9yKHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbiwgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBzZXR0aW5nOiBTZXR0aW5nLCBnZXRSZWxldmFudFRoZW1lQ29sb3VyOiAocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpPT5Db2xvdXIsIHNhdmVSZWxldmFudFRoZW1lQ29sb3VyOiAocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cik9PnZvaWQsIHRvb2x0aXA/OiBzdHJpbmcpIHtcblx0XHRjb25zdCBzZXR0aW5nczogUGlja3IuT3B0aW9ucyA9IHtcblx0XHRcdGVsOiBzZXR0aW5nLmNvbnRyb2xFbC5jcmVhdGVEaXYoe2NsczogXCJwaWNrZXJcIn0pLFxuXHRcdFx0dGhlbWU6IFwibmFub1wiLFxuXHRcdFx0ZGVmYXVsdDogZ2V0Q29sb3VyKGdldFJlbGV2YW50VGhlbWVDb2xvdXIocGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5jb2xvdXJzKSksXG5cdFx0XHRwb3NpdGlvbjogXCJsZWZ0LW1pZGRsZVwiLFxuXHRcdFx0bG9ja09wYWNpdHk6IGZhbHNlLFxuXHRcdFx0Y29tcG9uZW50czoge1xuXHRcdFx0XHRwcmV2aWV3OiB0cnVlLFxuXHRcdFx0XHRodWU6IHRydWUsXG5cdFx0XHRcdG9wYWNpdHk6IHRydWUsXG5cdFx0XHRcdGludGVyYWN0aW9uOiB7XG5cdFx0XHRcdFx0aGV4OiB0cnVlLFxuXHRcdFx0XHRcdHJnYmE6IHRydWUsXG5cdFx0XHRcdFx0aHNsYTogZmFsc2UsXG5cdFx0XHRcdFx0aW5wdXQ6IHRydWUsXG5cdFx0XHRcdFx0Y2FuY2VsOiB0cnVlLFxuXHRcdFx0XHRcdHNhdmU6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aTE4bjoge1xuXHRcdFx0XHRcInVpOmRpYWxvZ1wiOiBcIkNvbG91ciBwaWNrZXIgZGlhbG9nXCIsXG5cdFx0XHRcdFwiYnRuOnRvZ2dsZVwiOiAodHlwZW9mIHRvb2x0aXAgIT09IFwidW5kZWZpbmVkXCIpP3Rvb2x0aXA6XCJTZWxlY3QgY29sb3VyXCIsXG5cdFx0XHRcdFwiYnRuOnN3YXRjaFwiOiBcIkNvbG91ciBzd2F0Y2hcIixcblx0XHRcdFx0XCJidG46bGFzdC1jb2xvclwiOiBcIlVzZSBwcmV2aW91cyBjb2xvdXJcIixcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChjb250YWluZXJFbC5wYXJlbnRFbGVtZW50ICE9PSBudWxsKVxuXHRcdFx0c2V0dGluZ3MuY29udGFpbmVyID0gY29udGFpbmVyRWwucGFyZW50RWxlbWVudDtcblx0XHRzdXBlcihzZXR0aW5ncyk7XG5cdFx0dGhpcy5zYXZlQ29sb3VyID0gKHNhdmVDb2xvdXI6IENvbG91cikgPT4ge1xuXHRcdFx0c2F2ZVJlbGV2YW50VGhlbWVDb2xvdXIocGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5jb2xvdXJzLHNhdmVDb2xvdXIpO1xuXHRcdFx0KGFzeW5jICgpID0+IHthd2FpdCBwbHVnaW4uc2F2ZVNldHRpbmdzKCk7fSkoKTtcblx0XHR9O1xuXHRcdHRoaXMucmVzZXRDb2xvdXIgPSAoKSA9PiB7XG5cdFx0XHRjb25zdCByZXNldENvbG91cjogQ29sb3VyID0gZ2V0UmVsZXZhbnRUaGVtZUNvbG91cihwbHVnaW4uc2V0dGluZ3MudGhlbWVzW3BsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXS5jb2xvdXJzKTtcblx0XHRcdHRoaXMuc2V0Q29sb3IoZ2V0Q29sb3VyKHJlc2V0Q29sb3VyKSk7XG5cdFx0XHR0aGlzLnNhdmVDb2xvdXIocmVzZXRDb2xvdXIpO1xuXHRcdH07XG5cdH1cbn1cblxuLy8gQ29sb3VyIE1hbmFnZW1lbnRcbmZ1bmN0aW9uIGdldFJhbmRvbUNvbG91cigpOiBDb2xvdXIge1xuXHRjb25zdCBsZXR0ZXJzID0gXCIwMTIzNDU2Nzg5QUJDREVGXCI7XG5cdGxldCBjb2xvdXIgPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKylcblx0XHRjb2xvdXIgKz0gbGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNildO1xuXHRyZXR1cm4gYCMke2NvbG91cn1GRmA7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDc3MocG9zc2libGVDc3M6IHN0cmluZyk6IHBvc3NpYmxlQ3NzIGlzIENTUyB7XG5cdHJldHVybiBwb3NzaWJsZUNzcy5zdGFydHNXaXRoKFwiLS1cIikgJiYgdHlwZW9mIHBvc3NpYmxlQ3NzID09PSBcInN0cmluZ1wiO1xufVxuZnVuY3Rpb24gY2FsYyhjYWxjU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBzcGxpdFN0cmluZyA9IGNhbGNTdHJpbmcudHJpbSgpLnJlcGxhY2UoLyhcXGQqKSUvZyxcIiQxXCIpLnNwbGl0KFwiIFwiKTtcblx0Y29uc3Qgb3BlcmF0b3JzOiB7W2tleTogc3RyaW5nXTogKG51bTE6bnVtYmVyLCBudW0yOm51bWJlcikgPT4gbnVtYmVyfSA9IHtcblx0XHRcIitcIjogKG51bTE6bnVtYmVyLCBudW0yOm51bWJlcik6bnVtYmVyID0+IE1hdGgubWF4KG51bTErbnVtMiwwKSxcblx0XHRcIi1cIjogKG51bTE6bnVtYmVyICxudW0yOm51bWJlcik6bnVtYmVyID0+IE1hdGgubWF4KG51bTEtbnVtMiwwKSxcblx0fTtcblx0aWYgKHNwbGl0U3RyaW5nLmxlbmd0aCA9PT0gMylcblx0XHRpZiAoc3BsaXRTdHJpbmdbMV0gaW4gb3BlcmF0b3JzKVxuXHRcdFx0cmV0dXJuIGAke29wZXJhdG9yc1tzcGxpdFN0cmluZ1sxXV0ocGFyc2VGbG9hdChzcGxpdFN0cmluZ1swXSkscGFyc2VGbG9hdChzcGxpdFN0cmluZ1syXSkpfSVgO1xuXHRcblx0Y29uc29sZS53YXJuKFwiV2FybmluZzogQ291bGRuJ3QgcGFyc2UgY2FsYyBzdHJpbmdcIik7XG5cdHJldHVybiBjYWxjU3RyaW5nO1xufVxuZnVuY3Rpb24gZ2V0Q3NzVmFyaWFibGUoY3NzVmFyaWFibGU6IENTUyk6IEhFWCB7XG5cdGNvbnN0IHZhcmlhYmxlVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKGNzc1ZhcmlhYmxlKS50cmltKCk7XG5cdGlmICh0eXBlb2YgdmFyaWFibGVWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YXJpYWJsZVZhbHVlLnRyaW0oKS5zdGFydHNXaXRoKFwiI1wiKSlcblx0XHRyZXR1cm4gYCMke3ZhcmlhYmxlVmFsdWUudHJpbSgpLnN1YnN0cmluZygxKX1gO1xuXHRlbHNlIGlmICh2YXJpYWJsZVZhbHVlLnN0YXJ0c1dpdGgoXCJyZ2JcIikpXG5cdFx0cmV0dXJuIGAjJHtDb2xvclRyYW5zbGF0b3IudG9IRVhBKHZhcmlhYmxlVmFsdWUucmVwbGFjZSgvY2FsY1xcKCguKj8pXFwpL2csKG1hdGNoLGNhcHR1cmUpPT5jYWxjKGNhcHR1cmUpKSkuc3Vic3RyaW5nKDEpfWA7XG5cdGVsc2UgaWYgKHZhcmlhYmxlVmFsdWUuc3RhcnRzV2l0aChcImhzbFwiKSlcblx0XHRyZXR1cm4gYCMke0NvbG9yVHJhbnNsYXRvci50b0hFWEEodmFyaWFibGVWYWx1ZS5yZXBsYWNlKC9jYWxjXFwoKC4qPylcXCkvZywobWF0Y2gsY2FwdHVyZSk9PmNhbGMoY2FwdHVyZSkpKS5zdWJzdHJpbmcoMSl9YDtcblx0ZWxzZVxuXHRcdGNvbnNvbGUud2FybihgV2FybmluZzogQ291bGRuJ3QgZGV0ZXJtaW5lIGNvbG91ciBmb3JtYXQgLSAke3ZhcmlhYmxlVmFsdWV9YCk7XG5cdHJldHVybiBgIyR7Q29sb3JUcmFuc2xhdG9yLnRvSEVYQSh2YXJpYWJsZVZhbHVlKS5zdWJzdHJpbmcoMSl9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvdXIodGhlbWVDb2xvdXI6IENvbG91cik6IENvbG91ciB7XG5cdHJldHVybiBpc0Nzcyh0aGVtZUNvbG91cik/Z2V0Q3NzVmFyaWFibGUodGhlbWVDb2xvdXIpOnRoZW1lQ29sb3VyO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50TW9kZSgpIHtcblx0Y29uc3QgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpO1xuXHRpZiAoYm9keSAhPT0gbnVsbCl7XG5cdFx0aWYgKGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwidGhlbWUtbGlnaHRcIikpXG5cdFx0XHRyZXR1cm4gXCJsaWdodFwiO1xuXHRcdGVsc2UgaWYgKGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwidGhlbWUtZGFya1wiKSlcblx0XHRcdHJldHVybiBcImRhcmtcIjtcblx0fVxuXHRjb25zb2xlLndhcm4oXCJXYXJuaW5nOiBDb3VsZG4ndCBnZXQgY3VycmVudCB0aGVtZVwiKTtcblx0cmV0dXJuIFwibGlnaHRcIjtcbn1cbiIsICJ2YXIgdD1mdW5jdGlvbigpe3JldHVybiB0PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTEscj1hcmd1bWVudHMubGVuZ3RoO248cjtuKyspZm9yKHZhciBpIGluIGU9YXJndW1lbnRzW25dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gdH0sdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGUodCxlLG4pe2lmKG58fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgcixpPTAsbz1lLmxlbmd0aDtpPG87aSsrKSFyJiZpIGluIGV8fChyfHwocj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLDAsaSkpLHJbaV09ZVtpXSk7cmV0dXJuIHQuY29uY2F0KHJ8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpKX12YXIgbixyLGksbzshZnVuY3Rpb24odCl7dC5IRVg9XCJIRVhcIix0LlJHQj1cIlJHQlwiLHQuSFNMPVwiSFNMXCIsdC5DTVlLPVwiQ01ZS1wifShufHwobj17fSkpLGZ1bmN0aW9uKHQpe3QuQU5BTE9HT1VTPVwiQU5BTE9HT1VTXCIsdC5DT01QTEVNRU5UQVJZPVwiQ09NUExFTUVOVEFSWVwiLHQuU1BMSVRfQ09NUExFTUVOVEFSWT1cIlNQTElUX0NPTVBMRU1FTlRBUllcIix0LlRSSUFESUM9XCJUUklBRElDXCIsdC5URVRSQURJQz1cIlRFVFJBRElDXCIsdC5TUVVBUkU9XCJTUVVBUkVcIn0ocnx8KHI9e30pKSxmdW5jdGlvbih0KXt0LkFERElUSVZFPVwiQURESVRJVkVcIix0LlNVQlRSQUNUSVZFPVwiU1VCVFJBQ1RJVkVcIn0oaXx8KGk9e30pKSxmdW5jdGlvbih0KXt0LmJsYWNrPVwiIzAwMDAwMFwiLHQuc2lsdmVyPVwiI0MwQzBDMFwiLHQuZ3JheT1cIiM4MDgwODBcIix0LndoaXRlPVwiI0ZGRkZGRlwiLHQubWFyb29uPVwiIzgwMDAwMFwiLHQucmVkPVwiI0ZGMDAwMFwiLHQucHVycGxlPVwiIzgwMDA4MFwiLHQuZnVjaHNpYT1cIiNGRjAwRkZcIix0LmdyZWVuPVwiIzAwODAwMFwiLHQubGltZT1cIiMwMEZGMDBcIix0Lm9saXZlPVwiIzgwODAwMFwiLHQueWVsbG93PVwiI0ZGRkYwMFwiLHQubmF2eT1cIiMwMDAwODBcIix0LmJsdWU9XCIjMDAwMEZGXCIsdC50ZWFsPVwiIzAwODA4MFwiLHQuYXF1YT1cIiMwMEZGRkZcIix0Lm9yYW5nZT1cIiNGRkE1MDBcIix0LmFsaWNlYmx1ZT1cIiNGMEY4RkZcIix0LmFudGlxdWV3aGl0ZT1cIiNGQUVCRDdcIix0LmFxdWFtYXJpbmU9XCIjN0ZGRkQ0XCIsdC5henVyZT1cIiNGMEZGRkZcIix0LmJlaWdlPVwiI0Y1RjVEQ1wiLHQuYmlzcXVlPVwiI0ZGRTRDNFwiLHQuYmxhbmNoZWRhbG1vbmQ9XCIjRkZFQkNEXCIsdC5ibHVldmlvbGV0PVwiIzhBMkJFMlwiLHQuYnJvd249XCIjQTUyQTJBXCIsdC5idXJseXdvb2Q9XCIjREVCODg3XCIsdC5jYWRldGJsdWU9XCIjNUY5RUEwXCIsdC5jaGFydHJldXNlPVwiIzdGRkYwMFwiLHQuY2hvY29sYXRlPVwiI0QyNjkxRVwiLHQuY29yYWw9XCIjRkY3RjUwXCIsdC5jb3JuZmxvd2VyYmx1ZT1cIiM2NDk1RURcIix0LmNvcm5zaWxrPVwiI0ZGRjhEQ1wiLHQuY3JpbXNvbj1cIiNEQzE0M0NcIix0LmN5YW49XCIjMDBGRkZGXCIsdC5kYXJrYmx1ZT1cIiMwMDAwOEJcIix0LmRhcmtjeWFuPVwiIzAwOEI4QlwiLHQuZGFya2dvbGRlbnJvZD1cIiNCODg2MEJcIix0LmRhcmtncmF5PVwiI0E5QTlBOVwiLHQuZGFya2dyZWVuPVwiIzAwNjQwMFwiLHQuZGFya2dyZXk9XCIjQTlBOUE5XCIsdC5kYXJra2hha2k9XCIjQkRCNzZCXCIsdC5kYXJrbWFnZW50YT1cIiM4QjAwOEJcIix0LmRhcmtvbGl2ZWdyZWVuPVwiIzU1NkIyRlwiLHQuZGFya29yYW5nZT1cIiNGRjhDMDBcIix0LmRhcmtvcmNoaWQ9XCIjOTkzMkNDXCIsdC5kYXJrcmVkPVwiIzhCMDAwMFwiLHQuZGFya3NhbG1vbj1cIiNFOTk2N0FcIix0LmRhcmtzZWFncmVlbj1cIiM4RkJDOEZcIix0LmRhcmtzbGF0ZWJsdWU9XCIjNDgzRDhCXCIsdC5kYXJrc2xhdGVncmF5PVwiIzJGNEY0RlwiLHQuZGFya3NsYXRlZ3JleT1cIiMyRjRGNEZcIix0LmRhcmt0dXJxdW9pc2U9XCIjMDBDRUQxXCIsdC5kYXJrdmlvbGV0PVwiIzk0MDBEM1wiLHQuZGVlcHBpbms9XCIjRkYxNDkzXCIsdC5kZWVwc2t5Ymx1ZT1cIiMwMEJGRkZcIix0LmRpbWdyYXk9XCIjNjk2OTY5XCIsdC5kaW1ncmV5PVwiIzY5Njk2OVwiLHQuZG9kZ2VyYmx1ZT1cIiMxRTkwRkZcIix0LmZpcmVicmljaz1cIiNCMjIyMjJcIix0LmZsb3JhbHdoaXRlPVwiI0ZGRkFGMFwiLHQuZm9yZXN0Z3JlZW49XCIjMjI4QjIyXCIsdC5nYWluc2Jvcm89XCIjRENEQ0RDXCIsdC5naG9zdHdoaXRlPVwiI0Y4RjhGRlwiLHQuZ29sZD1cIiNGRkQ3MDBcIix0LmdvbGRlbnJvZD1cIiNEQUE1MjBcIix0LmdyZWVueWVsbG93PVwiI0FERkYyRlwiLHQuZ3JleT1cIiM4MDgwODBcIix0LmhvbmV5ZGV3PVwiI0YwRkZGMFwiLHQuaG90cGluaz1cIiNGRjY5QjRcIix0LmluZGlhbnJlZD1cIiNDRDVDNUNcIix0LmluZGlnbz1cIiM0QjAwODJcIix0Lml2b3J5PVwiI0ZGRkZGMFwiLHQua2hha2k9XCIjRjBFNjhDXCIsdC5sYXZlbmRlcj1cIiNFNkU2RkFcIix0LmxhdmVuZGVyYmx1c2g9XCIjRkZGMEY1XCIsdC5sYXduZ3JlZW49XCIjN0NGQzAwXCIsdC5sZW1vbmNoaWZmb249XCIjRkZGQUNEXCIsdC5saWdodGJsdWU9XCIjQUREOEU2XCIsdC5saWdodGNvcmFsPVwiI0YwODA4MFwiLHQubGlnaHRjeWFuPVwiI0UwRkZGRlwiLHQubGlnaHRnb2xkZW5yb2R5ZWxsb3c9XCIjRkFGQUQyXCIsdC5saWdodGdyYXk9XCIjRDNEM0QzXCIsdC5saWdodGdyZWVuPVwiIzkwRUU5MFwiLHQubGlnaHRncmV5PVwiI0QzRDNEM1wiLHQubGlnaHRwaW5rPVwiI0ZGQjZDMVwiLHQubGlnaHRzYWxtb249XCIjRkZBMDdBXCIsdC5saWdodHNlYWdyZWVuPVwiIzIwQjJBQVwiLHQubGlnaHRza3libHVlPVwiIzg3Q0VGQVwiLHQubGlnaHRzbGF0ZWdyYXk9XCIjNzc4ODk5XCIsdC5saWdodHNsYXRlZ3JleT1cIiM3Nzg4OTlcIix0LmxpZ2h0c3RlZWxibHVlPVwiI0IwQzRERVwiLHQubGlnaHR5ZWxsb3c9XCIjRkZGRkUwXCIsdC5saW1lZ3JlZW49XCIjMzJDRDMyXCIsdC5saW5lbj1cIiNGQUYwRTZcIix0Lm1hZ2VudGE9XCIjRkYwMEZGXCIsdC5tZWRpdW1hcXVhbWFyaW5lPVwiIzY2Q0RBQVwiLHQubWVkaXVtYmx1ZT1cIiMwMDAwQ0RcIix0Lm1lZGl1bW9yY2hpZD1cIiNCQTU1RDNcIix0Lm1lZGl1bXB1cnBsZT1cIiM5MzcwREJcIix0Lm1lZGl1bXNlYWdyZWVuPVwiIzNDQjM3MVwiLHQubWVkaXVtc2xhdGVibHVlPVwiIzdCNjhFRVwiLHQubWVkaXVtc3ByaW5nZ3JlZW49XCIjMDBGQTlBXCIsdC5tZWRpdW10dXJxdW9pc2U9XCIjNDhEMUNDXCIsdC5tZWRpdW12aW9sZXRyZWQ9XCIjQzcxNTg1XCIsdC5taWRuaWdodGJsdWU9XCIjMTkxOTcwXCIsdC5taW50Y3JlYW09XCIjRjVGRkZBXCIsdC5taXN0eXJvc2U9XCIjRkZFNEUxXCIsdC5tb2NjYXNpbj1cIiNGRkU0QjVcIix0Lm5hdmFqb3doaXRlPVwiI0ZGREVBRFwiLHQub2xkbGFjZT1cIiNGREY1RTZcIix0Lm9saXZlZHJhYj1cIiM2QjhFMjNcIix0Lm9yYW5nZXJlZD1cIiNGRjQ1MDBcIix0Lm9yY2hpZD1cIiNEQTcwRDZcIix0LnBhbGVnb2xkZW5yb2Q9XCIjRUVFOEFBXCIsdC5wYWxlZ3JlZW49XCIjOThGQjk4XCIsdC5wYWxldHVycXVvaXNlPVwiI0FGRUVFRVwiLHQucGFsZXZpb2xldHJlZD1cIiNEQjcwOTNcIix0LnBhcGF5YXdoaXA9XCIjRkZFRkQ1XCIsdC5wZWFjaHB1ZmY9XCIjRkZEQUI5XCIsdC5wZXJ1PVwiI0NEODUzRlwiLHQucGluaz1cIiNGRkMwQ0JcIix0LnBsdW09XCIjRERBMEREXCIsdC5wb3dkZXJibHVlPVwiI0IwRTBFNlwiLHQucm9zeWJyb3duPVwiI0JDOEY4RlwiLHQucm95YWxibHVlPVwiIzQxNjlFMVwiLHQuc2FkZGxlYnJvd249XCIjOEI0NTEzXCIsdC5zYWxtb249XCIjRkE4MDcyXCIsdC5zYW5keWJyb3duPVwiI0Y0QTQ2MFwiLHQuc2VhZ3JlZW49XCIjMkU4QjU3XCIsdC5zZWFzaGVsbD1cIiNGRkY1RUVcIix0LnNpZW5uYT1cIiNBMDUyMkRcIix0LnNreWJsdWU9XCIjODdDRUVCXCIsdC5zbGF0ZWJsdWU9XCIjNkE1QUNEXCIsdC5zbGF0ZWdyYXk9XCIjNzA4MDkwXCIsdC5zbGF0ZWdyZXk9XCIjNzA4MDkwXCIsdC5zbm93PVwiI0ZGRkFGQVwiLHQuc3ByaW5nZ3JlZW49XCIjMDBGRjdGXCIsdC5zdGVlbGJsdWU9XCIjNDY4MkI0XCIsdC50YW49XCIjRDJCNDhDXCIsdC50aGlzdGxlPVwiI0Q4QkZEOFwiLHQudG9tYXRvPVwiI0ZGNjM0N1wiLHQudHVycXVvaXNlPVwiIzQwRTBEMFwiLHQudmlvbGV0PVwiI0VFODJFRVwiLHQud2hlYXQ9XCIjRjVERUIzXCIsdC53aGl0ZXNtb2tlPVwiI0Y1RjVGNVwiLHQueWVsbG93Z3JlZW49XCIjOUFDRDMyXCIsdC5yZWJlY2NhcHVycGxlPVwiIzY2MzM5OVwifShvfHwobz17fSkpO3ZhciBhLGMsdT1PYmplY3Qua2V5cyhvKSxzPXtIRVg6W1wiclwiLFwiZ1wiLFwiYlwiLFwiYVwiXSxSR0I6W1wiclwiLFwiZ1wiLFwiYlwiLFwiYVwiXSxIU0w6W1wiaFwiLFwic1wiLFwibFwiLFwiYVwiXSxDTVlLOltcImNcIixcIm1cIixcInlcIixcImtcIixcImFcIl19LGQ9e0JHUjpuLlJHQixBQkdSOm4uUkdCLEhMUzpuLkhTTCxBSExTOm4uSFNMLENLTVk6bi5DTVlLLEFDS01ZOm4uQ01ZS307IWZ1bmN0aW9uKHQpe3QuTlVNQkVSPVwibnVtYmVyXCIsdC5CT09MRUFOPVwiYm9vbGVhblwifShhfHwoYT17fSkpO3ZhciBsLGYsaCxwPSgoYz17fSlbbi5IRVhdPS9eIyg/OihbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSk/fChbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSk/KSQvaSxjW24uUkdCXT0vXnJnYmE/XFxzKlxcKFxccyooPzooKD86XFxkKlxcLik/XFxkKyU/KVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCslPykoPzpcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKykpP3woKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KSg/OlxccypcXC9cXHMqKCg/OlxcZCpcXC4pP1xcZCslPykpPylcXHMqXFwpJC8sY1tuLkhTTF09L15oc2xhP1xccypcXChcXHMqKD86KC0/KD86XFxkKlxcLik/XFxkKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCspJVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrKSUoPzpcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKykpP3woLT8oPzpcXGQqXFwuKT9cXGQrKD86ZGVnfGdyYWR8cmFkfHR1cm4pPylcXHMqKCg/OlxcZCpcXC4pP1xcZCspJVxccyooKD86XFxkKlxcLik/XFxkKyklKD86XFxzKlxcL1xccyooKD86XFxkKlxcLik/XFxkKyU/KSk/KVxccypcXCkkLyxjW24uQ01ZS109L14oPzpkZXZpY2UtY215a3xjbXlrKVxccypcXChcXHMqKD86KCg/OlxcZCpcXC4pP1xcZCslPylcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCslPykoPzpcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKykpP3woKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyooKD86XFxkKlxcLik/XFxkKyU/KSg/OlxccypcXC9cXHMqKCg/OlxcZCpcXC4pP1xcZCslPykpPylcXHMqXFwpJC8sYyksZz0vXigtPyg/OlxcZCpcXC4pP1xcZCspKCg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pJC8sbT0vXihcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspJSQvLGI9L14weChbYS1mXFxkXXsxLDJ9KSQvaSxBPS9cXHsoXFxkKylcXH0vZyx5PS8sKCArfFxcZCspL2csRT0vICsvLEY9XCJUaGUgcHJvdmlkZWQgc3RyaW5nIGNvbG9yIGRvZXNuJ3QgaGF2ZSBhIGNvcnJlY3QgZm9ybWF0XCIsdj1cIlRoZSBwcm92aWRlZCBjb2xvciBvYmplY3QgZG9lc24ndCBoYXZlIHRoZSBwcm9wZXIga2V5cyBvciBmb3JtYXRcIjshZnVuY3Rpb24odCl7dC5OT05FPVwibm9uZVwiLHQuREVHUkVFUz1cImRlZ1wiLHQuR1JBRElBTlM9XCJncmFkXCIsdC5SQURJQU5TPVwicmFkXCIsdC5UVVJOUz1cInR1cm5cIn0obHx8KGw9e30pKSxmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5QRVJDRU5UPVwicGVyY2VudFwifShmfHwoZj17fSkpLGZ1bmN0aW9uKHQpe3QuREVWSUNFX0NNWUs9XCJkZXZpY2UtY215a1wiLHQuQ01ZSz1cImNteWtcIn0oaHx8KGg9e30pKTt2YXIgSCxCLEMsUyxSLE0sRD17ZGVjaW1hbHM6NixsZWdhY3lDU1M6ITEsc3BhY2VzQWZ0ZXJDb21tYXM6ITEsYW5nbGVzVW5pdDpsLk5PTkUscmdiVW5pdDpmLk5PTkUsY215a1VuaXQ6Zi5QRVJDRU5ULGFscGhhVW5pdDpmLk5PTkUsY215a0Z1bmN0aW9uOmguREVWSUNFX0NNWUt9LE89ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9LEw9ZnVuY3Rpb24odCl7cmV0dXJuK1wiXCIuY29uY2F0KHQpLnJlcGxhY2UobSxcIiQxXCIpfSxHPWZ1bmN0aW9uKHQpe3JldHVybiBtLnRlc3QoXCJcIi5jb25jYXQodCkpP0wodCk6TWF0aC5taW4oK3QsMTAwKX0saz1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodCs9dCkscGFyc2VJbnQodCwxNil9LGo9ZnVuY3Rpb24odCl7dmFyIGU9Syh0LDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiAxPT09ZS5sZW5ndGg/XCIweDBcIi5jb25jYXQoZSk6XCIweFwiLmNvbmNhdChlKX0sWD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksIWUmJm0udGVzdCh0KT9NYXRoLm1pbigyNTUqTCh0KS8xMDAsMjU1KTpiLnRlc3QodCk/KDM9PT10Lmxlbmd0aCYmKHQrPXQuc2xpY2UoLTEpKSxlP0sodCkvMjU1OksodCkpOk1hdGgubWluKCt0LGU/MToyNTUpfSxJPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1pbihtLnRlc3QodCk/TCh0KS8xMDA6K3QsMSl9LFk9ZnVuY3Rpb24odCl7cmV0dXJuIGUoW10sdCwhMCkuc29ydCgpLmpvaW4oXCJcIikudG9VcHBlckNhc2UoKX0sSz1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTYpO3ZhciBuPU1hdGgucG93KDEwLGUpO3JldHVybiBNYXRoLnJvdW5kKCt0Km4pL259LE49ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKHQsbikpfSxUPWZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKGcpLG49K2VbMV07c3dpdGNoKGVbMl0pe2Nhc2UgbC5SQURJQU5TOnQ9SygxODAqbi9NYXRoLlBJKTticmVhaztjYXNlIGwuVFVSTlM6dD1LKDM2MCpuKTticmVhaztjYXNlIGwuR1JBRElBTlM6dD1LKC45Km4pO2JyZWFrO2Nhc2UgbC5ERUdSRUVTOmRlZmF1bHQ6dD1ufX1yZXR1cm4odD4zNjB8fHQ8MCkmJih0LT0zNjAqTWF0aC5mbG9vcih0LzM2MCkpLHR9LFA9ZnVuY3Rpb24odCxlKXt2YXIgbjtzd2l0Y2goZSl7Y2FzZSBsLlJBRElBTlM6bj1LKGZ1bmN0aW9uKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfSh0KSk7YnJlYWs7Y2FzZSBsLlRVUk5TOm49Syh0LzM2MCk7YnJlYWs7Y2FzZSBsLkdSQURJQU5TOm49SygxMC85KnQpO2JyZWFrO2Nhc2UgbC5ERUdSRUVTOmNhc2UgbC5OT05FOmRlZmF1bHQ6bj10fXJldHVybiBufSxVPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO2Zvcih2YXIgcj1bXSxpPVtdLG89W10sYz1bXSx1PVtdLHM9T2JqZWN0LnZhbHVlcyhsKSxkPU9iamVjdC52YWx1ZXMoZiksYj1PYmplY3QudmFsdWVzKGgpLEE9e2xlZ2FjeUNTUzowLHNwYWNlc0FmdGVyQ29tbWFzOjAsY215a0Z1bmN0aW9uOjB9LEY9MCx2PWU7Rjx2Lmxlbmd0aDtGKyspe3ZhciBIPXZbRl07aWYoXCJzdHJpbmdcIj09dHlwZW9mIEgpe2lmKHIucHVzaChIKSxILmluY2x1ZGVzKFwiLFwiKSl7QS5sZWdhY3lDU1MrKzt2YXIgQj1ILm1hdGNoKHkpOzE9PT1uZXcgU2V0KEIpLnNpemUmJkUudGVzdChCWzBdLnNsaWNlKDEpKSYmQS5zcGFjZXNBZnRlckNvbW1hcysrfWlmKEgubWF0Y2gocC5IU0wpKXt2YXIgQz0oaz1ILm1hdGNoKHAuSFNMKSlbMV18fGtbNV0sUz1rWzhdLFI9Qy5tYXRjaChnKVsyXTtpLnB1c2goXCJcIj09PVI/bC5OT05FOlIpLHUucHVzaChtLnRlc3QoUykpO2NvbnRpbnVlfWlmKHAuUkdCLnRlc3QoSCkpe3ZhciBNPShrPUgubWF0Y2gocC5SR0IpKVsxXXx8a1s1XSxPPWtbMl18fGtbNl0sTD1rWzNdfHxrWzddLEc9a1s4XTtvLnB1c2gobS50ZXN0KE0pJiZtLnRlc3QoTykmJm0udGVzdChMKSksdS5wdXNoKG0udGVzdChHKSk7Y29udGludWV9aWYoSC5tYXRjaChwLkNNWUspKXt2YXIgayxqPShrPUgubWF0Y2gocC5DTVlLKSlbMV18fGtbNl0sWD1rWzJdfHxrWzddLEk9a1szXXx8a1s4XSxZPWtbNF18fGtbOV07Rz1rWzEwXTtjLnB1c2gobS50ZXN0KGopJiZtLnRlc3QoWCkmJm0udGVzdChJKSYmbS50ZXN0KFkpKSxILnN0YXJ0c1dpdGgoXCJjbXlrXCIpJiZBLmNteWtGdW5jdGlvbisrLHUucHVzaChtLnRlc3QoRykpfX19cmV0dXJue2RlY2ltYWxzOnR5cGVvZiB0LmRlY2ltYWxzPT09YS5OVU1CRVI/dC5kZWNpbWFsczpELmRlY2ltYWxzLGxlZ2FjeUNTUzp0eXBlb2YgdC5sZWdhY3lDU1M9PT1hLkJPT0xFQU4/dC5sZWdhY3lDU1M6Qm9vbGVhbihyLmxlbmd0aCYmQS5sZWdhY3lDU1M9PT1yLmxlbmd0aCl8fEQubGVnYWN5Q1NTLHNwYWNlc0FmdGVyQ29tbWFzOnR5cGVvZiB0LnNwYWNlc0FmdGVyQ29tbWFzPT09YS5CT09MRUFOP3Quc3BhY2VzQWZ0ZXJDb21tYXM6Qm9vbGVhbihyLmxlbmd0aCYmQS5zcGFjZXNBZnRlckNvbW1hcz09PXIubGVuZ3RoKXx8RC5zcGFjZXNBZnRlckNvbW1hcyxhbmdsZXNVbml0OnQuYW5nbGVzVW5pdCYmcy5pbmNsdWRlcyh0LmFuZ2xlc1VuaXQpP3QuYW5nbGVzVW5pdDoxPT09bmV3IFNldChpKS5zaXplP2lbMF06RC5hbmdsZXNVbml0LHJnYlVuaXQ6dC5yZ2JVbml0JiZkLmluY2x1ZGVzKHQucmdiVW5pdCk/dC5yZ2JVbml0OjE9PT1uZXcgU2V0KG8pLnNpemUmJm9bMF0/Zi5QRVJDRU5UOkQucmdiVW5pdCxjbXlrVW5pdDp0LmNteWtVbml0JiZkLmluY2x1ZGVzKHQuY215a1VuaXQpP3QuY215a1VuaXQ6MSE9PW5ldyBTZXQoYykuc2l6ZXx8Y1swXT9ELmNteWtVbml0OmYuTk9ORSxhbHBoYVVuaXQ6dC5hbHBoYVVuaXQmJmQuaW5jbHVkZXModC5hbHBoYVVuaXQpP3QuYWxwaGFVbml0OjE9PT1uZXcgU2V0KHUpLnNpemUmJnVbMF0/Zi5QRVJDRU5UOkQuYWxwaGFVbml0LGNteWtGdW5jdGlvbjp0LmNteWtGdW5jdGlvbiYmYi5pbmNsdWRlcyh0LmNteWtGdW5jdGlvbik/dC5jbXlrRnVuY3Rpb246Yy5sZW5ndGgmJmMubGVuZ3RoPT09QS5jbXlrRnVuY3Rpb24/aC5DTVlLOkQuY215a0Z1bmN0aW9ufX0sdz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG48MCYmKG4rPTYpLG4+PTYmJihuLT02KSxLKG48MT8yNTUqKChlLXQpKm4rdCk6bjwzPzI1NSplOm48ND8yNTUqKChlLXQpKig0LW4pK3QpOjI1NSp0KX0seD1mdW5jdGlvbih0LGUsbil7ZS89MTAwO3ZhciByPShuLz0xMDApPD0uNT9uKihlKzEpOm4rZS1uKmUsaT0yKm4tcjtyZXR1cm57cjp3KGksciwodC89NjApKzIpLGc6dyhpLHIsdCksYjp3KGkscix0LTIpfX0sVj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm57cjpLKDI1NSooMS10KSoocj0xLXIpKSxnOksoMjU1KigxLWUpKnIpLGI6SygyNTUqKDEtbikqcil9fSxxPWZ1bmN0aW9uKHQsZSxuKXt0Lz0yNTUsZS89MjU1LG4vPTI1NTt2YXIgcj0xLU1hdGgubWF4KHQsZSxuKSxpPTEtcixvPWkmJihpLWUpL2ksYT1pJiYoaS1uKS9pO3JldHVybntjOksoMTAwKihpJiYoaS10KS9pKSksbTpLKDEwMCpvKSx5OksoMTAwKmEpLGs6SygxMDAqcil9fSxfPWZ1bmN0aW9uKHQsZSxuLHIpe3ZvaWQgMD09PXImJihyPTEpLHQvPTI1NSxlLz0yNTUsbi89MjU1LHI9TWF0aC5taW4ociwxKTt2YXIgaT1NYXRoLm1heCh0LGUsbiksbz1NYXRoLm1pbih0LGUsbiksYT1pLW8sYz0wLHU9MCxzPShpK28pLzI7aWYoMCE9PWEpe3N3aXRjaChpKXtjYXNlIHQ6Yz0oZS1uKS9hJTY7YnJlYWs7Y2FzZSBlOmM9KG4tdCkvYSsyO2JyZWFrO2Nhc2UgbjpjPSh0LWUpL2ErNH0oYz1LKDYwKmMpKTwwJiYoYys9MzYwKSx1PWEvKDEtTWF0aC5hYnMoMipzLTEpKX1yZXR1cm57aDpjLHM6SygxMDAqdSksbDpLKDEwMCpzKSxhOnJ9fSwkPWZ1bmN0aW9uKHQsZSl7aWYodDwwJiYodCs9MzYwKSx0PjM2MCYmKHQtPTM2MCksMzYwPT09dHx8MD09PXQpcmV0dXJuIHQ7dmFyIG49W1swLDEyMF0sWzEyMCwxODBdLFsxODAsMjQwXSxbMjQwLDM2MF1dLHI9W1swLDYwXSxbNjAsMTIwXSxbMTIwLDI0MF0sWzI0MCwzNjBdXSxpPWU/cjpuLG89MCxhPTAsYz0wLHU9MDtyZXR1cm4oZT9uOnIpLmZpbmQoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQ+PWVbMF0mJnQ8ZVsxXSYmKG89ZVswXSxhPWVbMV0sYz1pW25dWzBdLHU9aVtuXVsxXSwhMCl9KSksYysodS1jKS8oYS1vKSoodC1vKX0sej1mdW5jdGlvbih0KXtyZXR1cm4gdD9cIiwgXCI6XCIsXCJ9LFE9ZnVuY3Rpb24odCxlKXt2YXIgbj1ZKE9iamVjdC5rZXlzKHQpKTtyZXR1cm4gc1tkW25dXS5yZWR1Y2UoKGZ1bmN0aW9uKG4scixpKXt2YXIgbz10W3JdO3JldHVybiB2b2lkIDAhPT1vJiZuLnB1c2goZShvLGkpKSxufSksW10pfSxXPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucmVwbGFjZShBLChmdW5jdGlvbih0LG4pe3JldHVyblwiXCIuY29uY2F0KGVbK24tMV0pfSkpfSxKPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5hbHBoYVVuaXQscj1lLmxlZ2FjeUNTUyxpPWUuZGVjaW1hbHM7cmV0dXJuIG4hPT1mLlBFUkNFTlR8fHI/Syh0LGkpOlwiXCIuY29uY2F0KEsoMTAwKnQsaSksXCIlXCIpfSxaPSgoSD17fSlbbi5IRVhdPWZ1bmN0aW9uKHQpe3ZhciBlPVEodCwoZnVuY3Rpb24odCl7cmV0dXJuIGU9Syh0KSwxPT09KG49SyhlLDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKS5sZW5ndGgmJihuPVwiMFwiLmNvbmNhdChuKSksbjt2YXIgZSxufSkpLG49ND09PWUubGVuZ3RoP1wiI3sxfXsyfXszfXs0fVwiOlwiI3sxfXsyfXszfVwiO3JldHVybiBXKG4sZSl9LEhbbi5SR0JdPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5kZWNpbWFscyxyPWUubGVnYWN5Q1NTLGk9ZS5zcGFjZXNBZnRlckNvbW1hcyxvPWUucmdiVW5pdCxhPXooaSksYz1RKHQsKGZ1bmN0aW9uKHQscil7cmV0dXJuIG89PT1mLlBFUkNFTlQmJnI8Mz9cIlwiLmNvbmNhdChmdW5jdGlvbih0LGUpe3JldHVybiBLKHQvMjU1KjEwMCxlKX0odCxuKSxcIiVcIik6Mz09PXI/Sih0LGUpOksodCxuKX0pKSx1PXI/ND09PWMubGVuZ3RoP1wicmdiYSh7MX1cIi5jb25jYXQoYSxcInsyfVwiKS5jb25jYXQoYSxcInszfVwiKS5jb25jYXQoYSxcIns0fSlcIik6XCJyZ2IoezF9XCIuY29uY2F0KGEsXCJ7Mn1cIikuY29uY2F0KGEsXCJ7M30pXCIpOjQ9PT1jLmxlbmd0aD9cInJnYih7MX0gezJ9IHszfSAvIHs0fSlcIjpcInJnYih7MX0gezJ9IHszfSlcIjtyZXR1cm4gVyh1LGMpfSxIW24uSFNMXT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuZGVjaW1hbHMscj1lLmxlZ2FjeUNTUyxpPWUuc3BhY2VzQWZ0ZXJDb21tYXMsbz1lLmFuZ2xlc1VuaXQsYT16KGkpLGM9USh0LChmdW5jdGlvbih0LHIpe2lmKDA9PT1yJiZvIT09bC5OT05FKXt2YXIgaT1LKFAodCxvKSxuKTtyZXR1cm5cIlwiLmNvbmNhdChpKS5jb25jYXQobyl9cmV0dXJuIDM9PT1yP0oodCxlKTpLKHQsbil9KSksdT1yPzQ9PT1jLmxlbmd0aD9cImhzbGEoezF9XCIuY29uY2F0KGEsXCJ7Mn0lXCIpLmNvbmNhdChhLFwiezN9JVwiKS5jb25jYXQoYSxcIns0fSlcIik6XCJoc2woezF9XCIuY29uY2F0KGEsXCJ7Mn0lXCIpLmNvbmNhdChhLFwiezN9JSlcIik6ND09PWMubGVuZ3RoP1wiaHNsKHsxfSB7Mn0lIHszfSUgLyB7NH0pXCI6XCJoc2woezF9IHsyfSUgezN9JSlcIjtyZXR1cm4gVyh1LGMpfSxIW24uQ01ZS109ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmRlY2ltYWxzLHI9ZS5sZWdhY3lDU1MsaT1lLnNwYWNlc0FmdGVyQ29tbWFzLG89ZS5jbXlrVW5pdCxhPWUuY215a0Z1bmN0aW9uLGM9eihpKSx1PVEodCwoZnVuY3Rpb24odCxyKXtyZXR1cm4gbz09PWYuUEVSQ0VOVCYmcjw0P1wiXCIuY29uY2F0KEsodCxuKSxcIiVcIik6ND09PXI/Sih0LGUpOksodC8xMDAsbil9KSkscz1yPzU9PT11Lmxlbmd0aD9cIlwiLmNvbmNhdChhLFwiKHsxfVwiKS5jb25jYXQoYyxcInsyfVwiKS5jb25jYXQoYyxcInszfVwiKS5jb25jYXQoYyxcIns0fVwiKS5jb25jYXQoYyxcIns1fSlcIik6XCJcIi5jb25jYXQoYSxcIih7MX1cIikuY29uY2F0KGMsXCJ7Mn1cIikuY29uY2F0KGMsXCJ7M31cIikuY29uY2F0KGMsXCJ7NH0pXCIpOjU9PT11Lmxlbmd0aD9cIlwiLmNvbmNhdChhLFwiKHsxfSB7Mn0gezN9IHs0fSAvIHs1fSlcIik6XCJcIi5jb25jYXQoYSxcIih7MX0gezJ9IHszfSB7NH0pXCIpO3JldHVybiBXKHMsdSl9LEgpLHR0PWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1tLnRlc3QodCk/TCh0KS8xMDA6K3QpLGlzTmFOKCt0KXx8dD4xPzE6Syh0KX0sZXQ9ZnVuY3Rpb24obixyLG8pe3JldHVybiByLnJlZHVjZSgoZnVuY3Rpb24ocixhKXtyZXR1cm4gZShlKFtdLHIsITApLFt0KHQoe30sbikse2g6bz09PWkuQURESVRJVkU/VChuLmgrYSk6VCgkKCQobi5oLCExKSthLCEwKSl9KV0sITEpfSksW3Qoe30sbildKX0sbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXQodCxbMzAsLTMwXSxlKX0scnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXQodCxbMTgwXSxlKX0saXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXQodCxbMTUwLC0xNTBdLGUpfSxvdD1mdW5jdGlvbih0LGUpe3JldHVybiBldCh0LFsxMjAsLTEyMF0sZSl9LGF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV0KHQsWzYwLC0xMjAsMTgwXSxlKX0sY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXQodCxbOTAsLTkwLDE4MF0sZSl9LHV0PWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3ZhciBlO2lmKE9iamVjdC5rZXlzKG4pLnNvbWUoKGZ1bmN0aW9uKG4pe2lmKHBbbl0udGVzdCh0KSlyZXR1cm4gZT1uLCEwfSkpLCFlJiZ+dS5pbmRleE9mKHQpJiYoZT1uLkhFWCksIWUpdGhyb3cgbmV3IEVycm9yKEYpO3JldHVybiBlfSh0KTpmdW5jdGlvbih0KXt2YXIgZSxyPSExLGk9WShPYmplY3Qua2V5cyh0KSk7aWYoZFtpXSYmKGU9ZFtpXSksZSYmZT09PW4uUkdCKXt2YXIgbz1PYmplY3QuZW50cmllcyh0KS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4hYi50ZXN0KFwiXCIuY29uY2F0KHRbMV0pKX0pKSxhPU9iamVjdC5lbnRyaWVzKHQpLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiEobS50ZXN0KFwiXCIuY29uY2F0KHRbMV0pKXx8IWIudGVzdChcIlwiLmNvbmNhdCh0WzFdKSkmJiFpc05hTigrdFsxXSkmJit0WzFdPD0yNTUpfSkpO28mJmEmJihyPSEwKSxvfHwoZT1uLkhFWCl9aWYoIWV8fHIpdGhyb3cgbmV3IEVycm9yKHYpO3JldHVybiBlfSh0KX0sc3Q9KChCPXt9KVtuLkhFWF09ZnVuY3Rpb24odCl7dmFyIGU9KH51LmluZGV4T2YodCk/b1t0XTp0KS5tYXRjaChwLkhFWCksbj17cjprKGVbMV18fGVbNV0pLGc6ayhlWzJdfHxlWzZdKSxiOmsoZVszXXx8ZVs3XSl9LHI9ZVs0XXx8ZVs4XTtyZXR1cm4gdm9pZCAwIT09ciYmKG4uYT1rKHIpLzI1NSksbn0sQltuLlJHQl09ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChwLlJHQiksbj1YKGVbMV18fGVbNV0pLHI9WChlWzJdfHxlWzZdKSxpPVgoZVszXXx8ZVs3XSksbz1lWzRdfHxlWzhdLGE9e3I6TWF0aC5taW4obiwyNTUpLGc6TWF0aC5taW4ociwyNTUpLGI6TWF0aC5taW4oaSwyNTUpfTtyZXR1cm4gdm9pZCAwIT09byYmKGEuYT10dChvKSksYX0sQltuLkhTTF09ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChwLkhTTCksbj1UKGVbMV18fGVbNV0pLHI9RyhlWzJdfHxlWzZdKSxpPUcoZVszXXx8ZVs3XSksbz1lWzRdfHxlWzhdLGE9eChuLHIsaSk7cmV0dXJuIHZvaWQgMCE9PW8mJihhLmE9dHQobykpLGF9LEJbbi5DTVlLXT1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHAuQ01ZSyksbj1JKGVbMV18fGVbNl0pLHI9SShlWzJdfHxlWzddKSxpPUkoZVszXXx8ZVs4XSksbz1JKGVbNF18fGVbOV0pLGE9ZVs1XXx8ZVsxMF0sYz1WKG4scixpLG8pO3JldHVybiB2b2lkIDAhPT1hJiYoYy5hPXR0KGEpKSxjfSxCKSxkdD0oKEM9e30pW24uSEVYXT1mdW5jdGlvbih0KXt2YXIgZT17cjpYKFwiXCIuY29uY2F0KHQucikpLGc6WChcIlwiLmNvbmNhdCh0LmcpKSxiOlgoXCJcIi5jb25jYXQodC5iKSl9O3JldHVybiBPKHQsXCJhXCIpJiYoZS5hPU1hdGgubWluKFgoXCJcIi5jb25jYXQodC5hKSwhMCksMSkpLGV9LENbbi5SR0JdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkhFWCh0KX0sQ1tuLkhTTF09ZnVuY3Rpb24odCl7dmFyIGU9RyhcIlwiLmNvbmNhdCh0LnMpKSxuPUcoXCJcIi5jb25jYXQodC5sKSkscj14KFQodC5oKSxlLG4pO3JldHVybiBPKHQsXCJhXCIpJiYoci5hPXR0KHQuYSkpLHJ9LENbbi5DTVlLXT1mdW5jdGlvbih0KXt2YXIgZT1JKFwiXCIuY29uY2F0KHQuYykpLG49SShcIlwiLmNvbmNhdCh0Lm0pKSxyPUkoXCJcIi5jb25jYXQodC55KSksaT1JKFwiXCIuY29uY2F0KHQuaykpLG89VihlLG4scixpKTtyZXR1cm4gTyh0LFwiYVwiKSYmKG8uYT10dCh0LmEpKSxvfSxDKSxsdD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT11dCh0KSksXCJzdHJpbmdcIj09dHlwZW9mIHQ/c3RbZV0odCk6ZHRbZV0odCl9LGZ0PSgoUz17fSlbbi5IRVhdPWZ1bmN0aW9uKHQpe3JldHVybntyOmoodC5yKSxnOmoodC5nKSxiOmoodC5iKX19LFMuSEVYQT1mdW5jdGlvbih0KXt2YXIgZT1mdC5IRVgodCk7cmV0dXJuIGUuYT1PKHQsXCJhXCIpP2ooMjU1KnQuYSk6XCIweEZGXCIsZX0sU1tuLlJHQl09ZnVuY3Rpb24odCxlKXt2YXIgbj1tdCh0LGUpO3JldHVybiBPKG4sXCJhXCIpJiZkZWxldGUgbi5hLG59LFMuUkdCQT1mdW5jdGlvbih0LGUpe3ZhciBuPWZ0LlJHQih0LGUpO3JldHVybiBuLmE9Tyh0LFwiYVwiKT9LKHQuYSk6MSxufSxTW24uSFNMXT1mdW5jdGlvbih0LGUpe3ZhciBuPV8odC5yLHQuZyx0LmIpO3JldHVybiBkZWxldGUgbi5hLGJ0KG4sZSl9LFMuSFNMQT1mdW5jdGlvbih0LGUpe3ZhciBuPWZ0LkhTTCh0LGUpO3JldHVybiBuLmE9Tyh0LFwiYVwiKT9LKHQuYSxlKToxLG59LFNbbi5DTVlLXT1mdW5jdGlvbih0LGUpe3JldHVybiBBdChxKHQucix0LmcsdC5iKSxlKX0sUy5DTVlLQT1mdW5jdGlvbih0LGUpe3ZhciBuPWZ0LkNNWUsodCxlKTtyZXR1cm4gbi5hPU8odCxcImFcIik/Syh0LmEsZSk6MSxufSxTKSxodD1mdW5jdGlvbihlLHIsaSxvKXt2YXIgYT11dChlKSxjPVwic3RyaW5nXCI9PXR5cGVvZiBlLHU9bHQoZSxhKSxzPVwic3RyaW5nXCI9PXR5cGVvZiBlJiZPKHUsXCJhXCIpfHxcInN0cmluZ1wiIT10eXBlb2YgZSYmTyhlLFwiYVwiKSxkPV8odS5yLHUuZyx1LmIsdS5hKTtzfHxkZWxldGUgZC5hO3ZhciBsPWk/ZC5sLyhyKzEpOigxMDAtZC5sKS8ocisxKSxmPUFycmF5KHIpLmZpbGwobnVsbCkubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiB0KHQoe30sZCkse2w6ZC5sK2wqKG4rMSkqKDEtMioraSl9KX0pKTtzd2l0Y2goYSl7Y2FzZSBuLkhFWDpkZWZhdWx0OnJldHVybiBmLm1hcCgoZnVuY3Rpb24oZSl7dmFyIG49eChlLmgsZS5zLGUubCk7cmV0dXJuIHMmJihuLmE9ZS5hKSxjP3M/Wi5IRVgodCh0KHt9LG4pLHthOksoMjU1Km4uYSl9KSk6Wi5IRVgobik6cz9mdC5IRVhBKG4pOmZ0LkhFWChuKX0pKTtjYXNlIG4uUkdCOnJldHVybiBmLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9eCh0LmgsdC5zLHQubCk7cmV0dXJuIHMmJihlLmE9dC5hKSxjP1ouUkdCKGUsbyk6cz9mdC5SR0JBKGUsby5kZWNpbWFscyk6ZnQuUkdCKGUsby5kZWNpbWFscyl9KSk7Y2FzZSBuLkhTTDpyZXR1cm4gZi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBjP1ouSFNMKGUsbyk6cz9mdC5IU0xBKHQodCh7fSx4KGUuaCxlLnMsZS5sKSkse2E6ZS5hfSksby5kZWNpbWFscyk6ZnQuSFNMKHgoZS5oLGUucyxlLmwpLG8uZGVjaW1hbHMpfSkpfX0scHQ9KChSPXtidWlsZEhhcm1vbnk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG89dXQodCksYT1sdCh0LG8pLGM9XyhhLnIsYS5nLGEuYixhLmEpLHU9XCJzdHJpbmdcIj09dHlwZW9mIHQmJk8oYSxcImFcIil8fFwic3RyaW5nXCIhPXR5cGVvZiB0JiZPKHQsXCJhXCIpLHM9XCJzdHJpbmdcIj09dHlwZW9mIHQ7c3dpdGNoKG8pe2Nhc2Ugbi5IRVg6ZGVmYXVsdDpyZXR1cm4gdT90aGlzLkhFWEEoYnQoYywwKSxlLHIscyk6dGhpcy5IRVgoYnQoYywwKSxlLHIscyk7Y2FzZSBuLkhTTDpyZXR1cm4gdT90aGlzLkhTTEEoYyxlLHIscyxpKTp0aGlzLkhTTChjLGUscixzLGkpO2Nhc2Ugbi5SR0I6cmV0dXJuIHU/dGhpcy5SR0JBKGMsZSxyLHMsaSk6dGhpcy5SR0IoYyxlLHIscyxpKX19fSlbbi5IRVhdPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBlKHQsbikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcj9aLkhFWCh4KHQuaCx0LnMsdC5sKSk6ZnQuSEVYKHgodC5oLHQucyx0LmwpKX0pKX0sUi5IRVhBPWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiBuKGUscikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaT9aLkhFWCh0KHQoe30seChlLmgsZS5zLGUubCkpLHthOjI1NSp0dChlLmEpfSkpOmZ0LkhFWEEodCh0KHt9LHgoZS5oLGUucyxlLmwpKSx7YTp0dChlLmEpfSkpfSkpfSxSW24uUkdCXT1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBlKHQsbikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcj9aLlJHQih4KHQuaCx0LnMsdC5sKSxpKTpmdC5SR0IoeCh0LmgsdC5zLHQubCksaS5kZWNpbWFscyl9KSl9LFIuUkdCQT1mdW5jdGlvbihlLG4scixpLG8pe3JldHVybiBuKGUscikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaT9aLlJHQih0KHQoe30seChlLmgsZS5zLGUubCkpLHthOnR0KGUuYSl9KSxvKTpmdC5SR0JBKHQodCh7fSx4KGUuaCxlLnMsZS5sKSkse2E6dHQoZS5hKX0pLG8uZGVjaW1hbHMpfSkpfSxSW24uSFNMXT1mdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiBlKHQsbikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcj9aLkhTTCh7aDp0Lmgsczp0LnMsbDp0Lmx9LGkpOmZ0LkhTTCh4KHQuaCx0LnMsdC5sKSxpLmRlY2ltYWxzKX0pKX0sUi5IU0xBPWZ1bmN0aW9uKGUsbixyLGksbyl7cmV0dXJuIG4oZSxyKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBpP1ouSFNMKHQodCh7fSxlKSx7YTp0dChlLmEpfSksbyk6ZnQuSFNMQSh0KHQoe30seChlLmgsZS5zLGUubCkpLHthOnR0KGUuYSl9KSxvLmRlY2ltYWxzKX0pKX0sUiksZ3Q9KChNPXttaXg6ZnVuY3Rpb24oZSxuKXt2YXIgcixvLGEsYyx1LHMsZCxsLGYsaCxwLGcsbSxiLEEseT1lLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dXQodCk7cmV0dXJuIGx0KHQsZSl9KSksRT1uPT09aS5TVUJUUkFDVElWRT95Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLGMsdSxzLGQsbCxmLGgscCxnPShlPXQucixuPXQuZyxyPXQuYixpPU1hdGgubWluKGUsbixyKSxvPU1hdGgubWluKDI1NS1lLDI1NS1uLDI1NS1yKSxhPWUtaSxjPW4taSx1PXItaSxzPU1hdGgubWluKGEsYyksZD1hLXMsbD0oYytzKS8yLGY9KHUrYy1zKS8yLGg9TWF0aC5tYXgoZCxsLGYpL01hdGgubWF4KGEsYyx1KSxwPWlzTmFOKGgpfHxoPT09MS8wfHxoPD0wPzE6aCx7cjpkL3Arbyx5OmwvcCtvLGI6Zi9wK299KTtyZXR1cm4gTyh0LFwiYVwiKSYmKGcuYT10LmEpLGd9KSk6bnVsbDtmdW5jdGlvbiBGKGUpe3ZhciByPW49PT1pLkFERElUSVZFP3tyOjAsZzowLGI6MCxhOjB9OntyOjAseTowLGI6MCxhOjB9O3JldHVybiBlLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXt2YXIgbz1PKHIsXCJhXCIpP3IuYToxLGE9e3I6TWF0aC5taW4oZS5yK3IucipvLDI1NSksYjpNYXRoLm1pbihlLmIrci5iKm8sMjU1KSxhOjEtKDEtbykqKDEtZS5hKX0sYz1cImdcImluIGU/ZS5nOmUueSx1PVwiZ1wiaW4gcj9yLmc6ci55O3JldHVybiB0KHQoe30sYSksbj09PWkuQURESVRJVkU/e2c6TWF0aC5taW4oYyt1Km8sMjU1KX06e3k6TWF0aC5taW4oYyt1Km8sMjU1KX0pfSkscil9aWYobj09PWkuQURESVRJVkUpcj1GKHkpO2Vsc2V7dmFyIHY9RihFKTtvPXYucixhPXYueSxjPXYuYix1PU1hdGgubWluKG8sYSxjKSxzPU1hdGgubWluKDI1NS1vLDI1NS1hLDI1NS1jKSxkPW8tdSxsPWEtdSxmPWMtdSxoPU1hdGgubWluKGwsZikscD1kK2wtaCxnPWwraCxtPTIqKGYtaCksYj1NYXRoLm1heChwLGcsbSkvTWF0aC5tYXgoZCxsLGYpLEE9aXNOYU4oYil8fGI9PT0xLzB8fGI8PTA/MTpiLChyPXtyOnAvQStzLGc6Zy9BK3MsYjptL0Erc30pLmE9di5hfXJldHVybntyOksoci5yKSxnOksoci5nKSxiOksoci5iKSxhOk4oci5hLDAsMSl9fX0pW24uSEVYXT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5taXgodCxlKTtyZXR1cm4gZGVsZXRlIHIuYSxuP1ouSEVYKHIpOmZ0LkhFWChyKX0sTS5IRVhBPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLm1peCh0LGUpO3JldHVybiByLmE9bj8yNTUqdHQoci5hKTp0dChyLmEpLG4/Wi5IRVgocik6ZnQuSEVYQShyKX0sTVtuLlJHQl09ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5taXgodCxlKTtyZXR1cm4gZGVsZXRlIGkuYSxuP1ouUkdCKGkscik6ZnQuUkdCKGksci5kZWNpbWFscyl9LE0uUkdCQT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLm1peCh0LGUpO3JldHVybiBuP1ouUkdCKGkscik6ZnQuUkdCQShpLHIuZGVjaW1hbHMpfSxNW24uSFNMXT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLm1peCh0LGUpLG89XyhpLnIsaS5nLGkuYik7cmV0dXJuIGRlbGV0ZSBpLmEsZGVsZXRlIG8uYSxuP1ouSFNMKG8scik6ZnQuSFNMKGksci5kZWNpbWFscyl9LE0uSFNMQT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLm1peCh0LGUpLG89XyhpLnIsaS5nLGkuYixpLmEpO3JldHVybiBuP1ouSFNMKG8scik6ZnQuSFNMQShpLHIuZGVjaW1hbHMpfSxNKSxtdD1mdW5jdGlvbihlLG4pe3ZhciByPUsoZS5yLG4pLGk9SyhlLmcsbiksbz1LKGUuYixuKTtyZXR1cm4gdCh7cjpyLGc6aSxiOm99LE8oZSxcImFcIik/e2E6SyhlLmEsbil9Ont9KX0sYnQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdCh7aDpLKGUuaCxuKSxzOksoZS5zLG4pLGw6SyhlLmwsbil9LE8oZSxcImFcIik/e2E6SyhlLmEsbil9Ont9KX0sQXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm57YzpLKHQuYyxlKSxtOksodC5tLGUpLHk6Syh0LnksZSksazpLKHQuayxlKX19LHl0PWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiByKGx0KHQsZSksbil9LEV0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7bjwxJiYobj01KTt2YXIgbz1mdW5jdGlvbih0LGUsbil7dmFyIHI9bi0xLGk9KGUuci10LnIpL3Isbz0oZS5nLXQuZykvcixhPShlLmItdC5iKS9yLGM9dHQodC5hKSx1PSh0dChlLmEpLWMpL3I7cmV0dXJuIEFycmF5KG4pLmZpbGwobnVsbCkubWFwKChmdW5jdGlvbihuLHMpe3JldHVybiAwPT09cz90OnM9PT1yP2U6e3I6Syh0LnIraSpzKSxnOksodC5nK28qcyksYjpLKHQuYithKnMpLGE6SyhjK3Uqcyl9fSkpfShsdCh0KSxsdChlKSxuKTtyZXR1cm4gby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQscil9KSl9LEZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9vcHRpb25zPVUoZSx0KSx0aGlzLnJnYj1sdCh0KSx0aGlzLnVwZGF0ZUhTTCgpLHRoaXMudXBkYXRlQ01ZSygpfXJldHVybiBuLnByb3RvdHlwZS51cGRhdGVSR0I9ZnVuY3Rpb24oKXt0aGlzLnJnYj10KHQoe30seCh0aGlzLmhzbC5oLHRoaXMuaHNsLnMsdGhpcy5oc2wubCkpLHthOnRoaXMuaHNsLmF9KX0sbi5wcm90b3R5cGUudXBkYXRlUkdCRnJvbUNNWUs9ZnVuY3Rpb24oKXt0aGlzLnJnYj10KHQoe30sVih0aGlzLmNteWsuYyx0aGlzLmNteWsubSx0aGlzLmNteWsueSx0aGlzLmNteWsuaykpLHthOnRoaXMucmdiLmF9KX0sbi5wcm90b3R5cGUudXBkYXRlSFNMPWZ1bmN0aW9uKCl7dGhpcy5oc2w9Xyh0aGlzLnJnYi5yLHRoaXMucmdiLmcsdGhpcy5yZ2IuYix0aGlzLnJnYi5hKX0sbi5wcm90b3R5cGUudXBkYXRlQ01ZSz1mdW5jdGlvbigpe3RoaXMuY215az1xKHRoaXMucmdiLnIsdGhpcy5yZ2IuZyx0aGlzLnJnYi5iKX0sbi5wcm90b3R5cGUudXBkYXRlUkdCQW5kQ01ZSz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVwZGF0ZVJHQigpLHRoaXMudXBkYXRlQ01ZSygpLHRoaXN9LG4ucHJvdG90eXBlLnVwZGF0ZUhTTEFuZENNWUs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cGRhdGVIU0woKSx0aGlzLnVwZGF0ZUNNWUsoKSx0aGlzfSxuLnByb3RvdHlwZS51cGRhdGVSR0JBbmRIU0w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cGRhdGVSR0JGcm9tQ01ZSygpLHRoaXMudXBkYXRlSFNMKCksdGhpc30sbi5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMuX29wdGlvbnM9dCh0KHt9LHRoaXMuX29wdGlvbnMpLGUpLHRoaXN9LG4ucHJvdG90eXBlLnNldEg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaHNsLmg9VCh0KSx0aGlzLnVwZGF0ZVJHQkFuZENNWUsoKX0sbi5wcm90b3R5cGUuc2V0Uz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oc2wucz1OKHQsMCwxMDApLHRoaXMudXBkYXRlUkdCQW5kQ01ZSygpfSxuLnByb3RvdHlwZS5zZXRMPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhzbC5sPU4odCwwLDEwMCksdGhpcy51cGRhdGVSR0JBbmRDTVlLKCl9LG4ucHJvdG90eXBlLnNldFI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmdiLnI9Tih0LDAsMjU1KSx0aGlzLnVwZGF0ZUhTTEFuZENNWUsoKX0sbi5wcm90b3R5cGUuc2V0Rz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZ2IuZz1OKHQsMCwyNTUpLHRoaXMudXBkYXRlSFNMQW5kQ01ZSygpfSxuLnByb3RvdHlwZS5zZXRCPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJnYi5iPU4odCwwLDI1NSksdGhpcy51cGRhdGVIU0xBbmRDTVlLKCl9LG4ucHJvdG90eXBlLnNldEE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaHNsLmE9dGhpcy5yZ2IuYT1OKHQsMCwxKSx0aGlzfSxuLnByb3RvdHlwZS5zZXRDPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNteWsuYz1OKHQsMCwxMDApLHRoaXMudXBkYXRlUkdCQW5kSFNMKCl9LG4ucHJvdG90eXBlLnNldE09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY215ay5tPU4odCwwLDEwMCksdGhpcy51cGRhdGVSR0JBbmRIU0woKX0sbi5wcm90b3R5cGUuc2V0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXlrLnk9Tih0LDAsMTAwKSx0aGlzLnVwZGF0ZVJHQkFuZEhTTCgpfSxuLnByb3RvdHlwZS5zZXRLPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNteWsuaz1OKHQsMCwxMDApLHRoaXMudXBkYXRlUkdCQW5kSFNMKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIm9wdGlvbnNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29wdGlvbnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiSFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLmhzbC5oLHRoaXMub3B0aW9ucy5kZWNpbWFscyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiU1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLmhzbC5zLHRoaXMub3B0aW9ucy5kZWNpbWFscyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiTFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLmhzbC5sLHRoaXMub3B0aW9ucy5kZWNpbWFscyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiUlwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLnJnYi5yLHRoaXMub3B0aW9ucy5kZWNpbWFscyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiR1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLnJnYi5nLHRoaXMub3B0aW9ucy5kZWNpbWFscyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiQlwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLnJnYi5iLHRoaXMub3B0aW9ucy5kZWNpbWFscyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiQVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLmhzbC5hLHRoaXMub3B0aW9ucy5kZWNpbWFscyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiQ1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLmNteWsuYyx0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIk1cIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5jbXlrLm0sdGhpcy5vcHRpb25zLmRlY2ltYWxzKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJZXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBLKHRoaXMuY215ay55LHRoaXMub3B0aW9ucy5kZWNpbWFscyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiS1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLmNteWsuayx0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkhFWE9iamVjdFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnQuSEVYKHRoaXMucmdiKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJIRVhBT2JqZWN0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiBmdC5IRVhBKHRoaXMucmdiKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJSR0JPYmplY3RcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJue3I6dGhpcy5SLGc6dGhpcy5HLGI6dGhpcy5CfX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJSR0JBT2JqZWN0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0KHQoe30sdGhpcy5SR0JPYmplY3QpLHthOnRoaXMuQX0pfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkhTTE9iamVjdFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57aDp0aGlzLkgsczp0aGlzLlMsbDp0aGlzLkx9fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkhTTEFPYmplY3RcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQodCh7fSx0aGlzLkhTTE9iamVjdCkse2E6dGhpcy5BfSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiQ01ZS09iamVjdFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57Yzp0aGlzLkMsbTp0aGlzLk0seTp0aGlzLlksazp0aGlzLkt9fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkNNWUtBT2JqZWN0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0KHQoe30sdGhpcy5DTVlLT2JqZWN0KSx7YTp0aGlzLkF9KX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJIRVhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFouSEVYKHtyOnRoaXMuUixnOnRoaXMuRyxiOnRoaXMuQn0pfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkhFWEFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFouSEVYKHtyOnRoaXMuUixnOnRoaXMuRyxiOnRoaXMuQixhOjI1NSp0aGlzLkF9KX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJSR0JcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFouUkdCKHtyOnRoaXMuUixnOnRoaXMuRyxiOnRoaXMuQn0sdGhpcy5vcHRpb25zKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJSR0JBXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBaLlJHQih7cjp0aGlzLlIsZzp0aGlzLkcsYjp0aGlzLkIsYTp0aGlzLkF9LHRoaXMub3B0aW9ucyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiSFNMXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBaLkhTTCh7aDp0aGlzLkgsczp0aGlzLlMsbDp0aGlzLkx9LHRoaXMub3B0aW9ucyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiSFNMQVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWi5IU0woe2g6dGhpcy5ILHM6dGhpcy5TLGw6dGhpcy5MLGE6dGhpcy5BfSx0aGlzLm9wdGlvbnMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkNNWUtcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFouQ01ZSyh7Yzp0aGlzLkMsbTp0aGlzLk0seTp0aGlzLlksazp0aGlzLkt9LHRoaXMub3B0aW9ucyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiQ01ZS0FcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFouQ01ZSyh7Yzp0aGlzLkMsbTp0aGlzLk0seTp0aGlzLlksazp0aGlzLkssYTp0aGlzLkF9LHRoaXMub3B0aW9ucyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksbi50b0hFWE9iamVjdD1mdW5jdGlvbih0KXt2YXIgZT11dCh0KTtyZXR1cm4geXQodCxlLDAsZnQuSEVYKX0sbi50b0hFWD1mdW5jdGlvbih0KXtyZXR1cm4gWi5IRVgobi50b0hFWE9iamVjdCh0KSl9LG4udG9IRVhBT2JqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPXV0KHQpO3JldHVybiB5dCh0LGUsMCxmdC5IRVhBKX0sbi50b0hFWEE9ZnVuY3Rpb24odCl7cmV0dXJuIFouSEVYKG4udG9IRVhBT2JqZWN0KHQpKX0sbi50b1JHQk9iamVjdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj11dCh0KTtyZXR1cm4geXQodCxuLGUuZGVjaW1hbHMsZnQuUkdCKX0sbi50b1JHQj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj11dCh0KSxyPVUoZSx0KSxpPXl0KHQsbiw2LGZ0LlJHQik7cmV0dXJuIFouUkdCKGkscil9LG4udG9SR0JBT2JqZWN0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXV0KHQpO3JldHVybiB5dCh0LG4sZS5kZWNpbWFscyxmdC5SR0JBKX0sbi50b1JHQkE9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dXQodCkscj1VKGUsdCksaT15dCh0LG4sNixmdC5SR0JBKTtyZXR1cm4gWi5SR0IoaSxyKX0sbi50b0hTTE9iamVjdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj11dCh0KTtyZXR1cm4geXQodCxuLGUuZGVjaW1hbHMsZnQuSFNMKX0sbi50b0hTTD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj11dCh0KSxyPVUoZSx0KSxpPXl0KHQsbiw2LGZ0LkhTTCk7cmV0dXJuIFouSFNMKGkscil9LG4udG9IU0xBT2JqZWN0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXV0KHQpO3JldHVybiB5dCh0LG4sZS5kZWNpbWFscyxmdC5IU0xBKX0sbi50b0hTTEE9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dXQodCkscj1VKGUsdCksaT15dCh0LG4sNixmdC5IU0xBKTtyZXR1cm4gWi5IU0woaSxyKX0sbi50b0NNWUtPYmplY3Q9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dXQodCk7cmV0dXJuIHl0KHQsbixlLmRlY2ltYWxzLGZ0LkNNWUspfSxuLnRvQ01ZSz1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj11dCh0KSxyPVUoZSx0KSxpPXl0KHQsbiw2LGZ0LkNNWUspO3JldHVybiBaLkNNWUsoaSxyKX0sbi50b0NNWUtBT2JqZWN0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXV0KHQpO3JldHVybiB5dCh0LG4sZS5kZWNpbWFscyxmdC5DTVlLQSl9LG4udG9DTVlLQT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj11dCh0KSxyPVUoZSx0KSxpPXl0KHQsbiw2LGZ0LkNNWUtBKTtyZXR1cm4gWi5DTVlLKGkscil9LG4uZ2V0QmxlbmRIRVhPYmplY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj01KSxFdCh0LGUsbiwwLGZ0LkhFWCl9LG4uZ2V0QmxlbmRIRVg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj01KSxuLmdldEJsZW5kSEVYT2JqZWN0KHQsZSxyKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBaLkhFWCh0KX0pKX0sbi5nZXRCbGVuZEhFWEFPYmplY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj01KSxFdCh0LGUsbiwwLGZ0LkhFWEEpfSxuLmdldEJsZW5kSEVYQT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPTUpLG4uZ2V0QmxlbmRIRVhBT2JqZWN0KHQsZSxyKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBaLkhFWCh0KX0pKX0sbi5nZXRCbGVuZFJHQk9iamVjdD1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49NSksdm9pZCAwPT09ciYmKHI9e30pLEV0KHQsZSxuLHIuZGVjaW1hbHMsZnQuUkdCKX0sbi5nZXRCbGVuZFJHQj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49NSksdm9pZCAwPT09ciYmKHI9e30pLEV0KHQsZSxuLDYsZnQuUkdCKS5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBaLlJHQihuLFUocix0LGUpKX0pKX0sbi5nZXRCbGVuZFJHQkFPYmplY3Q9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTUpLHZvaWQgMD09PXImJihyPXt9KSxFdCh0LGUsbixyLmRlY2ltYWxzLGZ0LlJHQkEpfSxuLmdldEJsZW5kUkdCQT1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49NSksdm9pZCAwPT09ciYmKHI9e30pLEV0KHQsZSxuLDYsZnQuUkdCQSkubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gWi5SR0IobixVKHIsdCxlKSl9KSl9LG4uZ2V0QmxlbmRIU0xPYmplY3Q9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTUpLHZvaWQgMD09PXImJihyPXt9KSxFdCh0LGUsbixyLmRlY2ltYWxzLGZ0LkhTTCl9LG4uZ2V0QmxlbmRIU0w9ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09biYmKG49NSksdm9pZCAwPT09ciYmKHI9e30pO3ZhciBpPVUocix0LGUpO3JldHVybiBFdCh0LGUsbiw2LGZ0LkhTTCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gWi5IU0wodCxpKX0pKX0sbi5nZXRCbGVuZEhTTEFPYmplY3Q9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTUpLHZvaWQgMD09PXImJihyPXt9KSxFdCh0LGUsbixyLmRlY2ltYWxzLGZ0LkhTTEEpfSxuLmdldEJsZW5kSFNMQT1mdW5jdGlvbih0LGUsbixyKXt2b2lkIDA9PT1uJiYobj01KSx2b2lkIDA9PT1yJiYocj17fSk7dmFyIGk9VShyLHQsZSk7cmV0dXJuIEV0KHQsZSxuLDYsZnQuSFNMQSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gWi5IU0wodCxpKX0pKX0sbi5nZXRNaXhIRVhPYmplY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9aS5BRERJVElWRSksZ3QuSEVYKHQsZSwhMSl9LG4uZ2V0TWl4SEVYPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWkuQURESVRJVkUpLGd0LkhFWCh0LGUsITApfSxuLmdldE1peEhFWEFPYmplY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9aS5BRERJVElWRSksZ3QuSEVYQSh0LGUsITEpfSxuLmdldE1peEhFWEE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9aS5BRERJVElWRSksZ3QuSEVYQSh0LGUsITApfSxuLmdldE1peFJHQk9iamVjdD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPWkuQURESVRJVkUpLHZvaWQgMD09PXImJihyPXt9KSxndC5SR0IodCxuLCExLFUuYXBwbHkodm9pZCAwLGUoW3JdLHQsITEpKSl9LG4uZ2V0TWl4UkdCPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49aS5BRERJVElWRSksdm9pZCAwPT09ciYmKHI9e30pLGd0LlJHQih0LG4sITAsVS5hcHBseSh2b2lkIDAsZShbcl0sdCwhMSkpKX0sbi5nZXRNaXhSR0JBT2JqZWN0PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49aS5BRERJVElWRSksdm9pZCAwPT09ciYmKHI9e30pLGd0LlJHQkEodCxuLCExLFUuYXBwbHkodm9pZCAwLGUoW3JdLHQsITEpKSl9LG4uZ2V0TWl4UkdCQT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPWkuQURESVRJVkUpLHZvaWQgMD09PXImJihyPXt9KSxndC5SR0JBKHQsbiwhMCxVLmFwcGx5KHZvaWQgMCxlKFtyXSx0LCExKSkpfSxuLmdldE1peEhTTE9iamVjdD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPWkuQURESVRJVkUpLHZvaWQgMD09PXImJihyPXt9KSxndC5IU0wodCxuLCExLFUuYXBwbHkodm9pZCAwLGUoW3JdLHQsITEpKSl9LG4uZ2V0TWl4SFNMPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49aS5BRERJVElWRSksdm9pZCAwPT09ciYmKHI9e30pLGd0LkhTTCh0LG4sITAsVS5hcHBseSh2b2lkIDAsZShbcl0sdCwhMSkpKX0sbi5nZXRNaXhIU0xBT2JqZWN0PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdm9pZCAwPT09biYmKG49aS5BRERJVElWRSksdm9pZCAwPT09ciYmKHI9e30pLGd0LkhTTEEodCxuLCExLFUuYXBwbHkodm9pZCAwLGUoW3JdLHQsITEpKSl9LG4uZ2V0TWl4SFNMQT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPWkuQURESVRJVkUpLHZvaWQgMD09PXImJihyPXt9KSxndC5IU0xBKHQsbiwhMCxVLmFwcGx5KHZvaWQgMCxlKFtyXSx0LCExKSkpfSxuLmdldFNoYWRlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSxodCh0LGUsITAsVShuLHQpKX0sbi5nZXRUaW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSxodCh0LGUsITEsVShuLHQpKX0sbi5nZXRIYXJtb255PWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB2b2lkIDA9PT1lJiYoZT1yLkNPTVBMRU1FTlRBUlkpLHZvaWQgMD09PW4mJihuPWkuQURESVRJVkUpLHZvaWQgMD09PW8mJihvPXt9KSxmdW5jdGlvbih0LGUsbixpKXt2YXIgbztyZXR1cm4obz17fSxvW3IuQU5BTE9HT1VTXT1wdC5idWlsZEhhcm1vbnkoZSxudCxuLGkpLG9bci5DT01QTEVNRU5UQVJZXT1wdC5idWlsZEhhcm1vbnkoZSxydCxuLGkpLG9bci5TUExJVF9DT01QTEVNRU5UQVJZXT1wdC5idWlsZEhhcm1vbnkoZSxpdCxuLGkpLG9bci5UUklBRElDXT1wdC5idWlsZEhhcm1vbnkoZSxvdCxuLGkpLG9bci5URVRSQURJQ109cHQuYnVpbGRIYXJtb255KGUsYXQsbixpKSxvW3IuU1FVQVJFXT1wdC5idWlsZEhhcm1vbnkoZSxjdCxuLGkpLG8pW3RdfShlLHQsbixVKG8sdCkpfSxufSgpO2V4cG9ydHtGdCBhcyBDb2xvclRyYW5zbGF0b3IsciBhcyBIYXJtb255LGkgYXMgTWl4fTtcbiIsICJpbXBvcnQgeyBBcHAgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IHsgQ29kZVN0eWxlclNldHRpbmdzLCBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBDb2RlU3R5bGVyVGhlbWVNb2RlQ29sb3VycywgQ29kZVN0eWxlclRoZW1lU2V0dGluZ3MsIENvbG91ciwgTEFOR1VBR0VfTkFNRVMsIExBTkdVQUdFX0NPTE9VUlMgfSBmcm9tIFwiLi9TZXR0aW5nc1wiO1xuaW1wb3J0IHsgaXNDc3MgfSBmcm9tIFwiLi9TZXR0aW5nc1RhYlwiO1xuXG5pbnRlcmZhY2UgVGhlbWVTdHlsZSB7XG5cdGJvcmRlcj86IHtcblx0XHRzaXplOiBudW1iZXI7XG5cdFx0c3R5bGU6IHN0cmluZztcblx0fSxcblx0ZXh0cmE/OiBzdHJpbmc7XG59XG5cbmNvbnN0IFNUWUxFX0lEID0gXCJjb2RlLXN0eWxlci1zdHlsZXNcIjtcbmNvbnN0IFRIRU1FX1NUWUxFUzogUmVjb3JkPHN0cmluZyxUaGVtZVN0eWxlPiA9IHtcblx0UHJpc206IHtcblx0XHRib3JkZXI6IHtcblx0XHRcdHNpemU6IDEsXG5cdFx0XHRzdHlsZTogXCIxcHggc29saWQgdmFyKC0td2luZG93LWJvcmRlci1jb2xvcilcIixcblx0XHR9LFxuXHR9LFxuXHRcIlNoaW1tZXJpbmcgRm9jdXNcIjoge1xuXHRcdGJvcmRlcjoge1xuXHRcdFx0c2l6ZTogMSxcblx0XHRcdHN0eWxlOiBcInZhcigtLXRoaW4tbXV0ZWQtYm9yZGVyKVwiLFxuXHRcdH0sXG5cdH0sXG5cdE1pbmltYWw6IHtcblx0XHRleHRyYTogYFxuXHRcdFx0Lm1hcmtkb3duLXNvdXJjZS12aWV3Lm1vZC1jbTYuaXMtcmVhZGFibGUtbGluZS13aWR0aCA6bm90KHByZS5jb2RlLXN0eWxlci1wcmUpID4gW2NsYXNzXj1cImNvZGUtc3R5bGVyLWhlYWRlci1jb250YWluZXJcIl0ge1xuXHRcdFx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdFx0fVxuXHRcdGAsXG5cdH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3R5bGluZyhzZXR0aW5nczogQ29kZVN0eWxlclNldHRpbmdzLCBhcHA6IEFwcCk6IHZvaWQge1xuXHRjb25zdCBjdXJyZW50VGhlbWUgPSBnZXRDdXJyZW50VGhlbWUoYXBwKTtcblx0bGV0IHN0eWxlVGFnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU1RZTEVfSUQpO1xuXHRpZiAoIXN0eWxlVGFnKSB7XG5cdFx0c3R5bGVUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdFx0c3R5bGVUYWcuaWQgPSBTVFlMRV9JRDtcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVUYWcpO1xuXHR9XG5cdHN0eWxlVGFnLmlubmVyVGV4dCA9IChzdHlsZVRoZW1lQ29sb3VycyhzZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3Vycykrc3R5bGVUaGVtZVNldHRpbmdzKHNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncyxjdXJyZW50VGhlbWUpK3N0eWxlTGFuZ3VhZ2VDb2xvdXJzKHNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncyxzZXR0aW5ncy5yZWRpcmVjdExhbmd1YWdlcyxjdXJyZW50VGhlbWUpKS50cmltKCkucmVwbGFjZSgvXFxzKy9nLFwiIFwiKTtcblx0YWRkVGhlbWVTZXR0aW5nc0NsYXNzZXMoc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzKTtcbn1cblxuZnVuY3Rpb24gc3R5bGVUaGVtZUNvbG91cnMgKHRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycyk6IHN0cmluZyB7XG5cdHJldHVybiBPYmplY3Qua2V5cyh0aGVtZUNvbG91cnMubGlnaHQuaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHMpLnJlZHVjZSgocmVzdWx0OiBzdHJpbmcsIGFsdGVybmF0aXZlSGlnaGxpZ2h0OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gcmVzdWx0ICsgYFxuXHRcdFx0Ym9keS5jb2RlLXN0eWxlciAuY29kZS1zdHlsZXItbGluZS1oaWdobGlnaHRlZC0ke2FsdGVybmF0aXZlSGlnaGxpZ2h0LnJlcGxhY2UoL1xccysvZyxcIi1cIikudG9Mb3dlckNhc2UoKX0ge1xuXHRcdFx0XHQtLWdyYWRpZW50LWJhY2tncm91bmQtY29sb3VyOiB2YXIoLS1jb2RlLXN0eWxlci0ke2FsdGVybmF0aXZlSGlnaGxpZ2h0LnJlcGxhY2UoL1xccysvZyxcIi1cIikudG9Mb3dlckNhc2UoKX0taGlnaGxpZ2h0LWNvbG91cikgIWltcG9ydGFudDtcblx0XHRcdH1cblx0XHRgO1xuXHR9LGBcblx0XHRib2R5LmNvZGUtc3R5bGVyLnRoZW1lLWxpZ2h0IHtcblx0XHRcdCR7Z2V0VGhlbWVDb2xvdXJzKHRoZW1lQ29sb3Vycy5saWdodCl9XG5cdFx0fVxuXHRcdGJvZHkuY29kZS1zdHlsZXIudGhlbWUtZGFyayB7XG5cdFx0XHQke2dldFRoZW1lQ29sb3Vycyh0aGVtZUNvbG91cnMuZGFyayl9XG5cdFx0fVxuXHRgKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGhlbWVDb2xvdXJzICh0aGVtZU1vZGVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVNb2RlQ29sb3Vycyk6IHN0cmluZyB7XG5cdHJldHVybiBPYmplY3QuZW50cmllcyh7XG5cdFx0XCJjb2RlYmxvY2stYmFja2dyb3VuZC1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5jb2RlYmxvY2suYmFja2dyb3VuZENvbG91cixcblx0XHRcImNvZGVibG9jay10ZXh0LWNvbG91clwiOiB0aGVtZU1vZGVDb2xvdXJzLmNvZGVibG9jay50ZXh0Q29sb3VyLFxuXHRcdFwiZ3V0dGVyLWJhY2tncm91bmQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuZ3V0dGVyLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XCJndXR0ZXItdGV4dC1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5ndXR0ZXIudGV4dENvbG91cixcblx0XHRcImd1dHRlci1hY3RpdmUtdGV4dC1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5ndXR0ZXIuYWN0aXZlVGV4dENvbG91cixcblx0XHRcImhlYWRlci1iYWNrZ3JvdW5kLWNvbG91clwiOiB0aGVtZU1vZGVDb2xvdXJzLmhlYWRlci5iYWNrZ3JvdW5kQ29sb3VyLFxuXHRcdFwiaGVhZGVyLXRpdGxlLXRleHQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaGVhZGVyLnRpdGxlLnRleHRDb2xvdXIsXG5cdFx0XCJoZWFkZXItbGFuZ3VhZ2UtdGFnLWJhY2tncm91bmQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaGVhZGVyLmxhbmd1YWdlVGFnLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XCJoZWFkZXItbGFuZ3VhZ2UtdGFnLXRleHQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRDb2xvdXIsXG5cdFx0XCJoZWFkZXItc2VwYXJhdG9yLWNvbG91clwiOiB0aGVtZU1vZGVDb2xvdXJzLmhlYWRlci5saW5lQ29sb3VyLFxuXHRcdFwiYWN0aXZlLWNvZGVibG9jay1saW5lLWNvbG91clwiOiB0aGVtZU1vZGVDb2xvdXJzLmhpZ2hsaWdodHMuYWN0aXZlQ29kZWJsb2NrTGluZUNvbG91cixcblx0XHRcImFjdGl2ZS1lZGl0b3ItbGluZS1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5oaWdobGlnaHRzLmFjdGl2ZUVkaXRvckxpbmVDb2xvdXIsXG5cdFx0XCJkZWZhdWx0LWhpZ2hsaWdodC1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5oaWdobGlnaHRzLmRlZmF1bHRDb2xvdXIsXG5cdFx0XCJidXR0b24tY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuYWR2YW5jZWQuYnV0dG9uQ29sb3VyLFxuXHRcdFwiYnV0dG9uLWFjdGl2ZS1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5hZHZhbmNlZC5idXR0b25BY3RpdmVDb2xvdXIsXG5cdFx0XCJpbmxpbmUtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaW5saW5lLnRleHRDb2xvdXIsXG5cdFx0XCJpbmxpbmUtY29sb3VyLWFjdGl2ZVwiOiB0aGVtZU1vZGVDb2xvdXJzLmlubGluZS5hY3RpdmVUZXh0Q29sb3VyLFxuXHRcdFwiaW5saW5lLWJhY2tncm91bmQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaW5saW5lLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XCJpbmxpbmUtdGl0bGUtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaW5saW5lLnRpdGxlVGV4dENvbG91cixcblx0XHQuLi5PYmplY3QuZW50cmllcyh0aGVtZU1vZGVDb2xvdXJzLmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzKS5yZWR1Y2UoKHJlc3VsdDogUmVjb3JkPHN0cmluZyxDb2xvdXI+LFthbHRlcm5hdGl2ZUhpZ2hsaWdodCxjb2xvdXJdOiBbc3RyaW5nLENvbG91cl0pOiBSZWNvcmQ8c3RyaW5nLENvbG91cj4gPT4ge1xuXHRcdFx0cmVzdWx0W2Ake2FsdGVybmF0aXZlSGlnaGxpZ2h0LnJlcGxhY2UoL1xccysvZyxcIi1cIikudG9Mb3dlckNhc2UoKX0taGlnaGxpZ2h0LWNvbG91cmBdID0gY29sb3VyO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LHt9KVxuXHR9KS5yZWR1Y2UoKHJlc3VsdDogc3RyaW5nLCBbY3NzVmFyaWFibGUsY29sb3VyXTogW3N0cmluZyxDb2xvdXJdKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBzdHlsZUNvbG91ciA9IGlzQ3NzKGNvbG91cik/YHZhcigke2NvbG91cn0pYDpjb2xvdXI7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGAtLWNvZGUtc3R5bGVyLSR7Y3NzVmFyaWFibGV9OiAke3N0eWxlQ29sb3VyfTtgO1xuXHR9LFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzdHlsZVRoZW1lU2V0dGluZ3MgKHRoZW1lU2V0dGluZ3M6IENvZGVTdHlsZXJUaGVtZVNldHRpbmdzLCBjdXJyZW50VGhlbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBgXG5cdFx0Ym9keS5jb2RlLXN0eWxlciBbY2xhc3NePVwiY29kZS1zdHlsZXItaGVhZGVyLWxhbmd1YWdlLXRhZ1wiXSB7XG5cdFx0XHQtLWNvZGUtc3R5bGVyLWhlYWRlci1sYW5ndWFnZS10YWctdGV4dC1ib2xkOiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRCb2xkP1wiYm9sZFwiOlwibm9ybWFsXCJ9O1xuXHRcdFx0LS1jb2RlLXN0eWxlci1oZWFkZXItbGFuZ3VhZ2UtdGFnLXRleHQtaXRhbGljOiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRJdGFsaWM/XCJpdGFsaWNcIjpcIm5vcm1hbFwifTtcblx0XHRcdGZvbnQtZmFtaWx5OiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRGb250IT09XCJcIj90aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy50ZXh0Rm9udDpcInZhcigtLWZvbnQtdGV4dClcIn07XG5cdFx0fVxuXHRcdGJvZHkuY29kZS1zdHlsZXIgLmNvZGUtc3R5bGVyLWhlYWRlci10ZXh0IHtcblx0XHRcdC0tY29kZS1zdHlsZXItaGVhZGVyLXRpdGxlLXRleHQtYm9sZDogJHt0aGVtZVNldHRpbmdzLmhlYWRlci50aXRsZS50ZXh0Qm9sZD9cImJvbGRcIjpcIm5vcm1hbFwifTtcblx0XHRcdC0tY29kZS1zdHlsZXItaGVhZGVyLXRpdGxlLXRleHQtaXRhbGljOiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLnRpdGxlLnRleHRJdGFsaWM/XCJpdGFsaWNcIjpcIm5vcm1hbFwifTtcblx0XHRcdGZvbnQtZmFtaWx5OiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRGb250IT09XCJcIj90aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy50ZXh0Rm9udDpcInZhcigtLWZvbnQtdGV4dClcIn07XG5cdFx0fVxuXHRcdGJvZHkuY29kZS1zdHlsZXIge1xuXHRcdFx0LS1ib3JkZXItcmFkaXVzOiAke3RoZW1lU2V0dGluZ3MuY29kZWJsb2NrLmN1cnZhdHVyZX1weDtcblx0XHRcdC0tbGFuZ3VhZ2UtaWNvbi1zaXplOiAke3RoZW1lU2V0dGluZ3MuYWR2YW5jZWQuaWNvblNpemV9cHg7XG5cdFx0XHQtLWdyYWRpZW50LWhpZ2hsaWdodHMtY29sb3VyLXN0b3A6ICR7dGhlbWVTZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHM/dGhlbWVTZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHNDb2xvdXJTdG9wOlwiMTAwJVwifTtcblx0XHRcdC0taGVhZGVyLWZvbnQtc2l6ZTogJHt0aGVtZVNldHRpbmdzLmhlYWRlci5mb250U2l6ZX1weDtcblx0XHRcdC0tbGluZS13cmFwcGluZzogJHt0aGVtZVNldHRpbmdzLmNvZGVibG9jay51bndyYXBMaW5lcz9cInByZVwiOlwicHJlLXdyYXBcIn07XG5cdFx0XHQtLWNvZGUtc3R5bGVyLWlubGluZS1mb250LXdlaWdodDogJHt0aGVtZVNldHRpbmdzLmlubGluZS5mb250V2VpZ2h0fTAwO1xuXHRcdFx0LS1jb2RlLXN0eWxlci1pbmxpbmUtYm9yZGVyLXJhZGl1czogJHt0aGVtZVNldHRpbmdzLmlubGluZS5jdXJ2YXR1cmV9cHg7XG5cdFx0XHQtLWNvZGUtc3R5bGVyLWlubGluZS1wYWRkaW5nLXZlcnRpY2FsOiAke3RoZW1lU2V0dGluZ3MuaW5saW5lLnBhZGRpbmdWZXJ0aWNhbH1weDtcblx0XHRcdC0tY29kZS1zdHlsZXItaW5saW5lLXBhZGRpbmctaG9yaXpvbnRhbDogJHt0aGVtZVNldHRpbmdzLmlubGluZS5wYWRkaW5nSG9yaXpvbnRhbH1weDtcblx0XHRcdC0tY29kZS1zdHlsZXItaW5saW5lLW1hcmdpbi1ob3Jpem9udGFsOiAke3RoZW1lU2V0dGluZ3MuaW5saW5lLm1hcmdpbkhvcml6b250YWx9cHg7XG5cdFx0XHQtLWNvZGUtc3R5bGVyLWlubGluZS10aXRsZS1mb250LXdlaWdodDogJHt0aGVtZVNldHRpbmdzLmlubGluZS50aXRsZUZvbnRXZWlnaHR9MDA7XG5cdFx0XHQkeyF0aGVtZVNldHRpbmdzLmNvZGVibG9jay53cmFwTGluZXNBY3RpdmU/XCJcIjpcIi0tbGluZS1hY3RpdmUtd3JhcHBpbmc6IHByZS13cmFwO1wifVxuXHRcdFx0JHt0aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheUNvbG91cj9cIlwiOlwiLS1pY29uLWZpbHRlcjogZ3JheXNjYWxlKDEpO1wifVxuXHRcdH1cblx0XHQke1RIRU1FX1NUWUxFUz8uW2N1cnJlbnRUaGVtZV0/LmJvcmRlcj9gXG5cdFx0XHQubWFya2Rvd24tc291cmNlLXZpZXcgOm5vdChwcmUuY29kZS1zdHlsZXItcHJlKSA+IFtjbGFzc149XCJjb2RlLXN0eWxlci1oZWFkZXItY29udGFpbmVyXCJdIHtcblx0XHRcdFx0LS1jb2RlLXN0eWxlci1oZWFkZXItYm9yZGVyOmArIC8vQHRzLWV4cGVjdC1lcnJvciBEb2VzIEV4aXN0XG5cdFx0XHRcdFx0VEhFTUVfU1RZTEVTW2N1cnJlbnRUaGVtZV0uYm9yZGVyLnN0eWxlK2A7XG5cdFx0XHRcdC0taGVhZGVyLXNlcGFyYXRvci13aWR0aC1wYWRkaW5nOiBjYWxjKHZhcigtLWhlYWRlci1zZXBhcmF0b3Itd2lkdGgpIC0gYCsgLy9AdHMtZXhwZWN0LWVycm9yIERvZXMgRXhpc3Rcblx0XHRcdFx0XHRUSEVNRV9TVFlMRVNbY3VycmVudFRoZW1lXS5ib3JkZXIuc2l6ZStgcHgpO1xuXHRcdFx0XHQtLWNvbGxhcHNlZC1ib3R0b20tYm9yZGVyOiB2YXIoLS1jb2RlLXN0eWxlci1oZWFkZXItYm9yZGVyKTtcblx0XHRcdH1cblx0XHRgOlwiXCJ9XG5cdFx0JHtUSEVNRV9TVFlMRVM/LltjdXJyZW50VGhlbWVdPy5leHRyYT9USEVNRV9TVFlMRVNbY3VycmVudFRoZW1lXS5leHRyYTpcIlwifVxuXHRgO1xufVxuXG5mdW5jdGlvbiBzdHlsZUxhbmd1YWdlQ29sb3VycyAodGhlbWVTZXR0aW5nczogQ29kZVN0eWxlclRoZW1lU2V0dGluZ3MsIHJlZGlyZWN0TGFuZ3VhZ2VzOiBSZWNvcmQ8c3RyaW5nLHtjb2xvdXI/OiBDb2xvdXIsIGljb24/OiBzdHJpbmd9PiwgY3VycmVudFRoZW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gT2JqZWN0LmVudHJpZXMoTEFOR1VBR0VfTkFNRVMpLnJlZHVjZSgocmVzdWx0OiBzdHJpbmcsW2xhbmd1YWdlTmFtZSwgbGFuZ3VhZ2VEaXNwbGF5TmFtZV06IFtzdHJpbmcsc3RyaW5nXSk6IHN0cmluZyA9PiB7XG5cdFx0aWYgKGxhbmd1YWdlRGlzcGxheU5hbWUgaW4gTEFOR1VBR0VfQ09MT1VSUyB8fCAobGFuZ3VhZ2VOYW1lIGluIHJlZGlyZWN0TGFuZ3VhZ2VzICYmIFwiY29sb3VyXCIgaW4gcmVkaXJlY3RMYW5ndWFnZXNbbGFuZ3VhZ2VOYW1lXSkpIHtcblx0XHRcdHJlc3VsdCArPSBgXG5cdFx0XHRcdC5sYW5ndWFnZS0ke2xhbmd1YWdlTmFtZX0ge1xuXHRcdFx0XHRcdC0tbGFuZ3VhZ2UtYm9yZGVyLWNvbG91cjogJHtyZWRpcmVjdExhbmd1YWdlcz8uW2xhbmd1YWdlTmFtZV0/LltcImNvbG91clwiXSA/PyBMQU5HVUFHRV9DT0xPVVJTW2xhbmd1YWdlRGlzcGxheU5hbWVdfTtcblx0XHRcdFx0XHQtLWxhbmd1YWdlLWJvcmRlci13aWR0aDogJHt0aGVtZVNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyQ29sb3VyP3RoZW1lU2V0dGluZ3MuYWR2YW5jZWQubGFuZ3VhZ2VCb3JkZXJXaWR0aDowfXB4O1xuXHRcdFx0XHR9XG5cdFx0XHRgO1xuXHRcdFx0aWYgKFRIRU1FX1NUWUxFUz8uW2N1cnJlbnRUaGVtZV0/LmJvcmRlcikge1xuXHRcdFx0XHRyZXN1bHQgKz0gYFxuXHRcdFx0XHRcdC5tYXJrZG93bi1zb3VyY2UtdmlldyA6bm90KHByZS5jb2RlLXN0eWxlci1wcmUpID4gW2NsYXNzXj1cImNvZGUtc3R5bGVyLWhlYWRlci1jb250YWluZXJcIl0ubGFuZ3VhZ2UtJHtsYW5ndWFnZU5hbWV9ICB7XG5cdFx0XHRcdFx0XHQtLWxhbmd1YWdlLWJvcmRlci13aWR0aDogJHsgLy9AdHMtZXhwZWN0LWVycm9yIERvZXMgZXhpc3Rcblx0dGhlbWVTZXR0aW5ncy5hZHZhbmNlZC5sYW5ndWFnZUJvcmRlckNvbG91cj90aGVtZVNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyV2lkdGgrVEhFTUVfU1RZTEVTW2N1cnJlbnRUaGVtZV0uYm9yZGVyLnNpemU6MH1weDtcblx0XHRcdFx0XHR9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcIlwiKTtcbn1cblxuZnVuY3Rpb24gYWRkVGhlbWVTZXR0aW5nc0NsYXNzZXMgKHRoZW1lU2V0dGluZ3M6IENvZGVTdHlsZXJUaGVtZVNldHRpbmdzKTogdm9pZCB7XG5cdHRoZW1lU2V0dGluZ3MuY29kZWJsb2NrLmxpbmVOdW1iZXJzID8gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItc2hvdy1saW5lLW51bWJlcnNcIikgOiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2RlLXN0eWxlci1zaG93LWxpbmUtbnVtYmVyc1wiKTtcblx0dGhlbWVTZXR0aW5ncy5ndXR0ZXIuaGlnaGxpZ2h0ID8gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItZ3V0dGVyLWhpZ2hsaWdodFwiKSA6IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImNvZGUtc3R5bGVyLWd1dHRlci1oaWdobGlnaHRcIik7XG5cdHRoZW1lU2V0dGluZ3MuZ3V0dGVyLmFjdGl2ZUxpbmUgPyBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJjb2RlLXN0eWxlci1ndXR0ZXItYWN0aXZlLWxpbmVcIikgOiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2RlLXN0eWxlci1ndXR0ZXItYWN0aXZlLWxpbmVcIik7XG5cdFxuXHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2RlLXN0eWxlci1hY3RpdmUtbGluZS1oaWdobGlnaHRcIixcImNvZGUtc3R5bGVyLWFjdGl2ZS1saW5lLWhpZ2hsaWdodC1jb2RlYmxvY2tcIixcImNvZGUtc3R5bGVyLWFjdGl2ZS1saW5lLWhpZ2hsaWdodC1lZGl0b3JcIik7XG5cdGlmICh0aGVtZVNldHRpbmdzLmhpZ2hsaWdodHMuYWN0aXZlRWRpdG9yTGluZSAmJiB0aGVtZVNldHRpbmdzLmhpZ2hsaWdodHMuYWN0aXZlQ29kZWJsb2NrTGluZSkgLy8gSW5zaWRlIGFuZCBvdXRzaWRlIG9mIGNvZGVibG9ja3Mgd2l0aCBkaWZmZXJlbnQgY29sb3Vyc1xuXHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvZGUtc3R5bGVyLWFjdGl2ZS1saW5lLWhpZ2hsaWdodFwiKTtcblx0ZWxzZSBpZiAodGhlbWVTZXR0aW5ncy5oaWdobGlnaHRzLmFjdGl2ZUVkaXRvckxpbmUgJiYgIXRoZW1lU2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVDb2RlYmxvY2tMaW5lKSAvLyBPbmx5IG91dHNpZGUgY29kZWJsb2Nrc1xuXHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvZGUtc3R5bGVyLWFjdGl2ZS1saW5lLWhpZ2hsaWdodC1lZGl0b3JcIik7XG5cdGVsc2UgaWYgKCF0aGVtZVNldHRpbmdzLmhpZ2hsaWdodHMuYWN0aXZlRWRpdG9yTGluZSAmJiB0aGVtZVNldHRpbmdzLmhpZ2hsaWdodHMuYWN0aXZlQ29kZWJsb2NrTGluZSkgLy8gT25seSBpbnNpZGUgY29kZWJsb2Nrc1xuXHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvZGUtc3R5bGVyLWFjdGl2ZS1saW5lLWhpZ2hsaWdodC1jb2RlYmxvY2tcIik7XG5cdFxuXHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2RlLXN0eWxlci1zaG93LWxhbmduYW1lc1wiLFwiY29kZS1zdHlsZXItc2hvdy1sYW5nbmFtZXMtYWx3YXlzXCIpO1xuXHRpZiAodGhlbWVTZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcuZGlzcGxheSA9PT0gXCJhbHdheXNcIilcblx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJjb2RlLXN0eWxlci1zaG93LWxhbmduYW1lcy1hbHdheXNcIik7XG5cdGVsc2UgaWYgKHRoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLmRpc3BsYXkgPT09IFwiaWZfaGVhZGVyX3Nob3duXCIpXG5cdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItc2hvdy1sYW5nbmFtZXNcIik7XG5cblx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiY29kZS1zdHlsZXItc2hvdy1sYW5naWNvbnNcIixcImNvZGUtc3R5bGVyLXNob3ctbGFuZ2ljb25zLWFsd2F5c1wiKTtcblx0aWYgKHRoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlSWNvbi5kaXNwbGF5ID09PSBcImFsd2F5c1wiKVxuXHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvZGUtc3R5bGVyLXNob3ctbGFuZ2ljb25zLWFsd2F5c1wiKTtcblx0ZWxzZSBpZiAodGhlbWVTZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VJY29uLmRpc3BsYXkgPT09IFwiaWZfaGVhZGVyX3Nob3duXCIpXG5cdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItc2hvdy1sYW5naWNvbnNcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTdHlsZXNBbmRDbGFzc2VzKCk6IHZvaWQge1xuXHRkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTVFlMRV9JRCk/LnJlbW92ZSgpO1xuXHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXG5cdFx0XCJjb2RlLXN0eWxlclwiLFxuXHRcdFwiY29kZS1zdHlsZXItc2hvdy1saW5lLW51bWJlcnNcIixcblx0XHRcImNvZGUtc3R5bGVyLWd1dHRlci1oaWdobGlnaHRcIixcblx0XHRcImNvZGUtc3R5bGVyLWd1dHRlci1hY3RpdmUtbGluZVwiLFxuXHRcdFwiY29kZS1zdHlsZXItc2hvdy1sYW5nbmFtZXNcIixcblx0XHRcImNvZGUtc3R5bGVyLXNob3ctbGFuZ25hbWVzLWFsd2F5c1wiLFxuXHRcdFwiY29kZS1zdHlsZXItc2hvdy1sYW5naWNvbnNcIixcblx0XHRcImNvZGUtc3R5bGVyLXNob3ctbGFuZ2ljb25zLWFsd2F5c1wiLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50VGhlbWUoYXBwOiBBcHApOiBzdHJpbmcge1xuXHQvL0B0cy1leHBlY3QtZXJyb3IgVW5kb2N1bWVudGVkIE9ic2lkaWFuIEFQSVxuXHRyZXR1cm4gYXBwLnZhdWx0LmdldENvbmZpZyhcImNzc1RoZW1lXCIpO1xufVxuIiwgImltcG9ydCB7IGVkaXRvckVkaXRvckZpZWxkLCBlZGl0b3JJbmZvRmllbGQsIGVkaXRvckxpdmVQcmV2aWV3RmllbGQgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IFZpZXdQbHVnaW4sIEVkaXRvclZpZXcsIFZpZXdVcGRhdGUsIERlY29yYXRpb24sIERlY29yYXRpb25TZXQsIFdpZGdldFR5cGUgfSBmcm9tIFwiQGNvZGVtaXJyb3Ivdmlld1wiO1xuaW1wb3J0IHsgRXh0ZW5zaW9uLCBFZGl0b3JTdGF0ZSwgU3RhdGVGaWVsZCwgU3RhdGVFZmZlY3QsIFN0YXRlRWZmZWN0VHlwZSwgUmFuZ2UsIFJhbmdlU2V0QnVpbGRlciwgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uU3BlYywgTGluZSwgU2VsZWN0aW9uUmFuZ2UsIEFubm90YXRpb24gfSBmcm9tIFwiQGNvZGVtaXJyb3Ivc3RhdGVcIjtcbmltcG9ydCB7IHN5bnRheFRyZWUsIHRva2VuQ2xhc3NOb2RlUHJvcCB9IGZyb20gXCJAY29kZW1pcnJvci9sYW5ndWFnZVwiO1xuaW1wb3J0IHsgU3ludGF4Tm9kZVJlZiB9IGZyb20gXCJAbGV6ZXIvY29tbW9uXCI7XG4vL05PU09OQVJcbi8vIGltcG9ydCB7IExhbmd1YWdlU3VwcG9ydCB9IGZyb20gXCJAY29kZW1pcnJvci9sYW5ndWFnZVwiOyAvL05PVEU6IEZvciBmdXR1cmUgQ002IENvbXBhdGliaWxpdHlcbi8vIGltcG9ydCB7IGhpZ2hsaWdodFRyZWUsIGNsYXNzSGlnaGxpZ2h0ZXIgfSBmcm9tIFwiQGxlemVyL2hpZ2hsaWdodFwiOyAvL05PVEU6IEZvciBmdXR1cmUgQ002IENvbXBhdGliaWxpdHlcbi8vIGltcG9ydCB7IGxhbmd1YWdlcyB9IGZyb20gXCJAY29kZW1pcnJvci9sYW5ndWFnZS1kYXRhXCI7IC8vTk9URTogRm9yIGZ1dHVyZSBDTTYgQ29tcGF0aWJpbGl0eVxuXG5pbXBvcnQgeyBDb2RlU3R5bGVyU2V0dGluZ3MsIENvZGVTdHlsZXJUaGVtZVNldHRpbmdzIH0gZnJvbSBcIi4vU2V0dGluZ3NcIjtcbmltcG9ydCB7IENvZGVibG9ja1BhcmFtZXRlcnMsIHBhcnNlQ29kZWJsb2NrUGFyYW1ldGVycywgdGVzdE9wZW5pbmdMaW5lLCBpc0V4Y2x1ZGVkLCBhcnJheXNFcXVhbCwgdHJpbVBhcmFtZXRlckxpbmUsIElubGluZUNvZGVQYXJhbWV0ZXJzLCBwYXJzZUlubGluZUNvZGUgfSBmcm9tIFwiLi9Db2RlYmxvY2tQYXJzaW5nXCI7XG5pbXBvcnQgeyBjcmVhdGVIZWFkZXIsIGNyZWF0ZUlubGluZU9wZW5lciwgZ2V0TGFuZ3VhZ2VJY29uLCBnZXRMaW5lQ2xhc3MsIGdldExpbmVOdW1iZXJEaXNwbGF5IH0gZnJvbSBcIi4vQ29kZWJsb2NrRGVjb3JhdGluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29kZWJsb2NrQ29kZU1pcnJvckV4dGVuc2lvbnMoc2V0dGluZ3M6IENvZGVTdHlsZXJTZXR0aW5ncywgbGFuZ3VhZ2VJY29uczogUmVjb3JkPHN0cmluZyxzdHJpbmc+KSB7XG5cdGNvbnN0IGNvZGVibG9ja0xpbmVOdW1iZXJDaGFyV2lkdGggPSBTdGF0ZUZpZWxkLmRlZmluZTxudW1iZXI+KHtcblx0XHRjcmVhdGUoc3RhdGU6IEVkaXRvclN0YXRlKTogbnVtYmVyIHtcblx0XHRcdHJldHVybiBnZXRDaGFyV2lkdGgoc3RhdGUsc3RhdGUuZmllbGQoZWRpdG9yRWRpdG9yRmllbGQpLmRlZmF1bHRDaGFyYWN0ZXJXaWR0aCk7XG5cdFx0fSxcblx0XHR1cGRhdGUodmFsdWU6IG51bWJlciwgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogbnVtYmVyIHtcblx0XHRcdHJldHVybiBnZXRDaGFyV2lkdGgodHJhbnNhY3Rpb24uc3RhdGUsdmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGNvZGVibG9ja0xpbmVzID0gVmlld1BsdWdpbi5mcm9tQ2xhc3MoXG5cdFx0Y2xhc3MgQ29kZWJsb2NrTGluZXMge1xuXHRcdFx0c2V0dGluZ3M6IENvZGVTdHlsZXJTZXR0aW5ncztcblx0XHRcdGN1cnJlbnRTZXR0aW5nczoge1xuXHRcdFx0XHRleGNsdWRlZENvZGVibG9ja3M6IHN0cmluZztcblx0XHRcdFx0ZXhjbHVkZWRMYW5ndWFnZXM6IHN0cmluZztcblx0XHRcdFx0Y29sbGFwc2VQbGFjZWhvbGRlcjogc3RyaW5nO1xuXHRcdFx0XHRhbHRlcm5hdGl2ZUhpZ2hsaWdodHM6IEFycmF5PHN0cmluZz47XG5cdFx0XHR9O1xuXHRcdFx0ZGVjb3JhdGlvbnM6IERlY29yYXRpb25TZXQ7XG5cdFx0XHRtdXRhdGlvbk9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuXHRcdFxuXHRcdFx0Y29uc3RydWN0b3IodmlldzogRWRpdG9yVmlldykge1xuXHRcdFx0XHR0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG5cdFx0XHRcdHRoaXMuY3VycmVudFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdGV4Y2x1ZGVkQ29kZWJsb2Nrczogc2V0dGluZ3MuZXhjbHVkZWRDb2RlYmxvY2tzLFxuXHRcdFx0XHRcdGV4Y2x1ZGVkTGFuZ3VhZ2VzOiBzZXR0aW5ncy5leGNsdWRlZExhbmd1YWdlcyxcblx0XHRcdFx0XHRjb2xsYXBzZVBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdFx0XHRcdGFsdGVybmF0aXZlSGlnaGxpZ2h0czogW10sXG5cdFx0XHRcdH07XG5cdFx0XHRcdHRoaXMuZGVjb3JhdGlvbnMgPSBEZWNvcmF0aW9uLm5vbmU7XG5cdFx0XHRcdHRoaXMuYnVpbGREZWNvcmF0aW9ucyh2aWV3KTtcblx0XHRcdFx0dGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge211dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbjogTXV0YXRpb25SZWNvcmQpID0+IHtcblx0XHRcdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIgJiYgbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gXCJjbGFzc1wiICYmIChcblx0XHRcdFx0XHRcdChtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhcIkh5cGVyTUQtY29kZWJsb2NrLWJlZ2luXCIpIHx8XG5cdFx0XHRcdFx0XHRcdChtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhcIkh5cGVyTUQtY29kZWJsb2NrX0h5cGVyTUQtY29kZWJsb2NrLWJnXCIpIHx8XG5cdFx0XHRcdFx0XHRcdChtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhcIkh5cGVyTUQtY29kZWJsb2NrLWVuZFwiKVxuXHRcdFx0XHRcdCkpIHtcblx0XHRcdFx0XHRcdHRoaXMuZm9yY2VVcGRhdGUodmlldyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHZpZXcuY29udGVudERPTSwgIHtcblx0XHRcdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdFx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sIC8vIE9ubHkgb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSAnY2xhc3MnIGF0dHJpYnV0ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcblx0XHRcdGZvcmNlVXBkYXRlKHZpZXc6IEVkaXRvclZpZXcpIHtcblx0XHRcdFx0dGhpcy5idWlsZERlY29yYXRpb25zKHZpZXcpO1xuXHRcdFx0XHR2aWV3LnJlcXVlc3RNZWFzdXJlKCk7XG5cdFx0XHR9XG5cdFx0XG5cdFx0XHR1cGRhdGUodXBkYXRlOiBWaWV3VXBkYXRlKSB7XG5cdFx0XHRcdGlmICh1cGRhdGUuZG9jQ2hhbmdlZCB8fCBcblx0XHRcdFx0XHR1cGRhdGUudmlld3BvcnRDaGFuZ2VkIHx8IFxuXHRcdFx0XHRcdHVwZGF0ZS5zdGF0ZS5maWVsZChlZGl0b3JMaXZlUHJldmlld0ZpZWxkKSAhPT0gdXBkYXRlLnN0YXJ0U3RhdGUuZmllbGQoZWRpdG9yTGl2ZVByZXZpZXdGaWVsZCkgfHxcblx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLmV4Y2x1ZGVkQ29kZWJsb2NrcyAhPT0gdGhpcy5jdXJyZW50U2V0dGluZ3MuZXhjbHVkZWRDb2RlYmxvY2tzIHx8XG5cdFx0XHRcdFx0dGhpcy5zZXR0aW5ncy5leGNsdWRlZExhbmd1YWdlcyAhPT0gdGhpcy5jdXJyZW50U2V0dGluZ3MuZXhjbHVkZWRMYW5ndWFnZXMgfHxcblx0XHRcdFx0XHR0aGlzLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIuY29sbGFwc2VQbGFjZWhvbGRlciAhPT0gdGhpcy5jdXJyZW50U2V0dGluZ3MuY29sbGFwc2VQbGFjZWhvbGRlciB8fFxuXHRcdFx0XHRcdCFhcnJheXNFcXVhbChPYmplY3Qua2V5cyh0aGlzLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5jb2xvdXJzLmxpZ2h0LmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzKSx0aGlzLmN1cnJlbnRTZXR0aW5ncy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHMpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRoaXMuY3VycmVudFNldHRpbmdzID0gc3RydWN0dXJlZENsb25lKHtcblx0XHRcdFx0XHRcdGV4Y2x1ZGVkQ29kZWJsb2NrczogdGhpcy5zZXR0aW5ncy5leGNsdWRlZENvZGVibG9ja3MsXG5cdFx0XHRcdFx0XHRleGNsdWRlZExhbmd1YWdlczogdGhpcy5zZXR0aW5ncy5leGNsdWRlZExhbmd1YWdlcyxcblx0XHRcdFx0XHRcdGNvbGxhcHNlUGxhY2Vob2xkZXI6IHRoaXMuc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5jb2xsYXBzZVBsYWNlaG9sZGVyLFxuXHRcdFx0XHRcdFx0YWx0ZXJuYXRpdmVIaWdobGlnaHRzOiBPYmplY3Qua2V5cyh0aGlzLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5jb2xvdXJzLmxpZ2h0LmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzKSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLmJ1aWxkRGVjb3JhdGlvbnModXBkYXRlLnZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XG5cdFx0XHRidWlsZERlY29yYXRpb25zKHZpZXc6IEVkaXRvclZpZXcpIHtcblx0XHRcdFx0aWYgKCF2aWV3Py52aXNpYmxlUmFuZ2VzPy5sZW5ndGggfHwgZWRpdGluZ1ZpZXdJZ25vcmUodmlldy5zdGF0ZSkpIHtcblx0XHRcdFx0XHR0aGlzLmRlY29yYXRpb25zID0gRGVjb3JhdGlvbi5ub25lO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBidWlsZGVyID0gbmV3IFJhbmdlU2V0QnVpbGRlcjxEZWNvcmF0aW9uPigpO1xuXHRcdFx0XHRjb25zdCBjb2RlYmxvY2tzID0gZmluZFVuZHVwbGljYXRlZENvZGVibG9ja3Modmlldyk7XG5cdFx0XHRcdGZvciAoY29uc3QgY29kZWJsb2NrIG9mIGNvZGVibG9ja3MpIHtcblx0XHRcdFx0XHRsZXQgY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycztcblx0XHRcdFx0XHRsZXQgZXhjbHVkZWRDb2RlYmxvY2sgPSBmYWxzZTtcblx0XHRcdFx0XHRsZXQgbGluZU51bWJlciA9IDA7XG5cdFx0XHRcdFx0bGV0IG1heExpbmVOdW0gPSAwO1xuXHRcdFx0XHRcdGxldCBsaW5lTnVtYmVyTWFyZ2luOiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuXHRcdFx0XHRcdHN5bnRheFRyZWUodmlldy5zdGF0ZSkuaXRlcmF0ZSh7ZnJvbTogY29kZWJsb2NrLmZyb20sIHRvOiBjb2RlYmxvY2sudG8sXG5cdFx0XHRcdFx0XHRlbnRlcjogKHN5bnRheE5vZGUpPT57XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGxpbmUgPSB2aWV3LnN0YXRlLmRvYy5saW5lQXQoc3ludGF4Tm9kZS5mcm9tKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbGluZVRleHQgPSB2aWV3LnN0YXRlLnNsaWNlRG9jKGxpbmUuZnJvbSxsaW5lLnRvKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RhcnRMaW5lID0gc3ludGF4Tm9kZS50eXBlLm5hbWUuaW5jbHVkZXMoXCJIeXBlck1ELWNvZGVibG9jay1iZWdpblwiKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZW5kTGluZSA9IHN5bnRheE5vZGUudHlwZS5uYW1lLmluY2x1ZGVzKFwiSHlwZXJNRC1jb2RlYmxvY2stZW5kXCIpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RhcnRMaW5lKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycyA9IHBhcnNlQ29kZWJsb2NrUGFyYW1ldGVycyh0cmltUGFyYW1ldGVyTGluZShsaW5lVGV4dCksdGhpcy5zZXR0aW5ncy5jdXJyZW50VGhlbWUpO1xuXHRcdFx0XHRcdFx0XHRcdGV4Y2x1ZGVkQ29kZWJsb2NrID0gaXNFeGNsdWRlZChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlLFt0aGlzLnNldHRpbmdzLmV4Y2x1ZGVkQ29kZWJsb2Nrcyx0aGlzLnNldHRpbmdzLmV4Y2x1ZGVkTGFuZ3VhZ2VzXS5qb2luKFwiLFwiKSkgfHwgY29kZWJsb2NrUGFyYW1ldGVycy5pZ25vcmU7XG5cdFx0XHRcdFx0XHRcdFx0bGluZU51bWJlciA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGxpbmVOdW1iZXJDb3VudCA9IGxpbmUubnVtYmVyICsgMTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzdGFydERlbGltaXRlciA9IHRlc3RPcGVuaW5nTGluZShsaW5lVGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKHN0YXJ0RGVsaW1pdGVyICE9PSB0ZXN0T3BlbmluZ0xpbmUodmlldy5zdGF0ZS5kb2MubGluZShsaW5lTnVtYmVyQ291bnQpLnRleHQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaW5lTnVtYmVyQ291bnQgKz0gMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bWF4TGluZU51bSA9IGxpbmVOdW1iZXJDb3VudCAtIGxpbmUubnVtYmVyIC0gMSArIGNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMub2Zmc2V0O1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtYXhMaW5lTnVtLnRvU3RyaW5nKCkubGVuZ3RoID4gMilcblx0XHRcdFx0XHRcdFx0XHRcdGxpbmVOdW1iZXJNYXJnaW4gPSBtYXhMaW5lTnVtLnRvU3RyaW5nKCkubGVuZ3RoICogdmlldy5zdGF0ZS5maWVsZChjb2RlYmxvY2tMaW5lTnVtYmVyQ2hhcldpZHRoKTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRsaW5lTnVtYmVyTWFyZ2luID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmIChleGNsdWRlZENvZGVibG9jaylcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdGlmIChzeW50YXhOb2RlLnR5cGUubmFtZS5pbmNsdWRlcyhcIkh5cGVyTUQtY29kZWJsb2NrXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0YnVpbGRlci5hZGQoc3ludGF4Tm9kZS5mcm9tLHN5bnRheE5vZGUuZnJvbSxEZWNvcmF0aW9uLmxpbmUoe2F0dHJpYnV0ZXM6IHtzdHlsZTogYC0tbGluZS1udW1iZXItZ3V0dGVyLXdpZHRoOiAke2xpbmVOdW1iZXJNYXJnaW4/bGluZU51bWJlck1hcmdpbitcInB4XCI6XCJjYWxjKHZhcigtLWxpbmUtbnVtYmVyLWd1dHRlci1taW4td2lkdGgpIC0gMTJweClcIn1gLCBjbGFzczogKHRoaXMuc2V0dGluZ3Muc3BlY2lhbExhbmd1YWdlcy5zb21lKHJlZ0V4cCA9PiBuZXcgUmVnRXhwKHJlZ0V4cCkudGVzdChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlKSl8fHN0YXJ0TGluZXx8ZW5kTGluZT9cImNvZGUtc3R5bGVyLWxpbmVcIjpnZXRMaW5lQ2xhc3MoY29kZWJsb2NrUGFyYW1ldGVycyxsaW5lTnVtYmVyLGxpbmUudGV4dCkuam9pbihcIiBcIikpKyhbXCJeJFwiXS5jb25jYXQodGhpcy5zZXR0aW5ncy5zcGVjaWFsTGFuZ3VhZ2VzKS5zb21lKHJlZ0V4cCA9PiBuZXcgUmVnRXhwKHJlZ0V4cCkudGVzdChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlKSk/XCJcIjpgIGxhbmd1YWdlLSR7Y29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZX1gKX19KSk7XG5cdFx0XHRcdFx0XHRcdFx0YnVpbGRlci5hZGQoc3ludGF4Tm9kZS5mcm9tLHN5bnRheE5vZGUuZnJvbSxEZWNvcmF0aW9uLmxpbmUoe30pKTtcblx0XHRcdFx0XHRcdFx0XHRidWlsZGVyLmFkZChzeW50YXhOb2RlLmZyb20sc3ludGF4Tm9kZS5mcm9tLERlY29yYXRpb24ud2lkZ2V0KHt3aWRnZXQ6IG5ldyBMaW5lTnVtYmVyV2lkZ2V0KGxpbmVOdW1iZXIsY29kZWJsb2NrUGFyYW1ldGVycyxtYXhMaW5lTnVtLHN0YXJ0TGluZXx8ZW5kTGluZSl9KSk7XG5cdFx0XHRcdFx0XHRcdFx0bGluZU51bWJlcisrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5kZWNvcmF0aW9ucyA9IGJ1aWxkZXIuZmluaXNoKCk7XG5cdFx0XHR9XG5cdFx0XG5cdFx0XHRkZXN0cm95KCkge1xuXHRcdFx0XHR0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0ZGVjb3JhdGlvbnM6ICh2YWx1ZSkgPT4gdmFsdWUuZGVjb3JhdGlvbnMsXG5cdFx0XHRwcm92aWRlOiAocGx1Z2luKSA9PiBFZGl0b3JWaWV3LmF0b21pY1Jhbmdlcy5vZigodmlldyk9PnZpZXcuc3RhdGUuZmllbGQoY29kZWJsb2NrQ29sbGFwc2UpIHx8IERlY29yYXRpb24ubm9uZSksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0fVxuXHQpO1xuXHRjb25zdCBjb2RlYmxvY2tIZWFkZXIgPSBTdGF0ZUZpZWxkLmRlZmluZTxEZWNvcmF0aW9uU2V0Pih7XG5cdFx0Y3JlYXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IERlY29yYXRpb25TZXQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdFx0cmV0dXJuIERlY29yYXRpb24ubm9uZTsgICAgXG5cdFx0fSxcblx0XHR1cGRhdGUodmFsdWU6IERlY29yYXRpb25TZXQsIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IERlY29yYXRpb25TZXQge1xuXHRcdFx0aWYgKGVkaXRpbmdWaWV3SWdub3JlKHRyYW5zYWN0aW9uLnN0YXRlKSlcblx0XHRcdFx0cmV0dXJuIERlY29yYXRpb24ubm9uZTtcblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBuZXcgUmFuZ2VTZXRCdWlsZGVyPERlY29yYXRpb24+KCk7XG5cdFx0XHRsZXQgY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycztcblx0XHRcdGxldCBzdGFydExpbmUgPSB0cnVlO1xuXHRcdFx0bGV0IHN0YXJ0RGVsaW1pdGVyID0gXCJgYGBcIjtcblx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgdHJhbnNhY3Rpb24uc3RhdGUuZG9jLmxpbmVzOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgbGluZSA9IHRyYW5zYWN0aW9uLnN0YXRlLmRvYy5saW5lKGkpO1xuXHRcdFx0XHRjb25zdCBsaW5lVGV4dCA9IGxpbmUudGV4dC50b1N0cmluZygpO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50RGVsaW1pdGVyID0gdGVzdE9wZW5pbmdMaW5lKGxpbmVUZXh0KTtcblx0XHRcdFx0aWYgKGN1cnJlbnREZWxpbWl0ZXIpIHtcblx0XHRcdFx0XHRpZiAoc3RhcnRMaW5lKSB7XG5cdFx0XHRcdFx0XHRzdGFydExpbmUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdHN0YXJ0RGVsaW1pdGVyID0gY3VycmVudERlbGltaXRlcjtcblx0XHRcdFx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMgPSBwYXJzZUNvZGVibG9ja1BhcmFtZXRlcnModHJpbVBhcmFtZXRlckxpbmUobGluZVRleHQpLHNldHRpbmdzLmN1cnJlbnRUaGVtZSk7XG5cdFx0XHRcdFx0XHRpZiAoIWlzRXhjbHVkZWQoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSxbc2V0dGluZ3MuZXhjbHVkZWRDb2RlYmxvY2tzLHNldHRpbmdzLmV4Y2x1ZGVkTGFuZ3VhZ2VzXS5qb2luKFwiLFwiKSkgJiYgIWNvZGVibG9ja1BhcmFtZXRlcnMuaWdub3JlKVxuXHRcdFx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLnNwZWNpYWxMYW5ndWFnZXMuc29tZShyZWdFeHAgPT4gbmV3IFJlZ0V4cChyZWdFeHApLnRlc3QoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSkpKVxuXHRcdFx0XHRcdFx0XHRcdGJ1aWxkZXIuYWRkKGxpbmUuZnJvbSxsaW5lLmZyb20sRGVjb3JhdGlvbi53aWRnZXQoe3dpZGdldDogbmV3IEhlYWRlcldpZGdldChjb2RlYmxvY2tQYXJhbWV0ZXJzLHNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncyxsYW5ndWFnZUljb25zKSwgYmxvY2s6IHRydWUsIHNpZGU6IC0xfSkpO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50RGVsaW1pdGVyID09PSBzdGFydERlbGltaXRlcilcblx0XHRcdFx0XHRcdFx0c3RhcnRMaW5lID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBidWlsZGVyLmZpbmlzaCgpO1xuXHRcdH0sXG5cdFx0cHJvdmlkZShmaWVsZDogU3RhdGVGaWVsZDxEZWNvcmF0aW9uU2V0Pik6IEV4dGVuc2lvbiB7XG5cdFx0XHRyZXR1cm4gRWRpdG9yVmlldy5kZWNvcmF0aW9ucy5mcm9tKGZpZWxkKTtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBjb2RlYmxvY2tDb2xsYXBzZSA9IFN0YXRlRmllbGQuZGVmaW5lPERlY29yYXRpb25TZXQ+KHtcblx0XHRjcmVhdGUoc3RhdGU6IEVkaXRvclN0YXRlKTogRGVjb3JhdGlvblNldCB7XG5cdFx0XHRpZiAoZWRpdGluZ1ZpZXdJZ25vcmUoc3RhdGUpKVxuXHRcdFx0XHRyZXR1cm4gRGVjb3JhdGlvbi5ub25lO1xuXHRcdFx0Y29uc3QgYnVpbGRlciA9IG5ldyBSYW5nZVNldEJ1aWxkZXI8RGVjb3JhdGlvbj4oKTtcblx0XHRcdGxldCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IGNvbGxhcHNlU3RhcnQ6IExpbmUgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCBjb2xsYXBzZUVuZDogTGluZSB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IHN0YXJ0TGluZSA9IHRydWU7XG5cdFx0XHRsZXQgc3RhcnREZWxpbWl0ZXIgPSBcImBgYFwiO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBzdGF0ZS5kb2MubGluZXM7IGkrKykge1xuXHRcdFx0XHRjb25zdCBsaW5lID0gc3RhdGUuZG9jLmxpbmUoaSk7XG5cdFx0XHRcdGNvbnN0IGxpbmVUZXh0ID0gbGluZS50ZXh0LnRvU3RyaW5nKCk7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSB0ZXN0T3BlbmluZ0xpbmUobGluZVRleHQpO1xuXHRcdFx0XHRpZiAoY3VycmVudERlbGltaXRlcikge1xuXHRcdFx0XHRcdGlmIChzdGFydExpbmUpIHtcblx0XHRcdFx0XHRcdHN0YXJ0TGluZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0c3RhcnREZWxpbWl0ZXIgPSBjdXJyZW50RGVsaW1pdGVyO1xuXHRcdFx0XHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycyA9IHBhcnNlQ29kZWJsb2NrUGFyYW1ldGVycyh0cmltUGFyYW1ldGVyTGluZShsaW5lVGV4dCksc2V0dGluZ3MuY3VycmVudFRoZW1lKTtcblx0XHRcdFx0XHRcdGlmICghaXNFeGNsdWRlZChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlLFtzZXR0aW5ncy5leGNsdWRlZENvZGVibG9ja3Msc2V0dGluZ3MuZXhjbHVkZWRMYW5ndWFnZXNdLmpvaW4oXCIsXCIpKSAmJiAhY29kZWJsb2NrUGFyYW1ldGVycy5pZ25vcmUgJiYgY29kZWJsb2NrUGFyYW1ldGVycy5mb2xkLmVuYWJsZWQpXG5cdFx0XHRcdFx0XHRcdGlmICghc2V0dGluZ3Muc3BlY2lhbExhbmd1YWdlcy5zb21lKHJlZ0V4cCA9PiBuZXcgUmVnRXhwKHJlZ0V4cCkudGVzdChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlKSkpXG5cdFx0XHRcdFx0XHRcdFx0Y29sbGFwc2VTdGFydCA9IGxpbmU7XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnREZWxpbWl0ZXIgPT09IHN0YXJ0RGVsaW1pdGVyKSB7XG5cdFx0XHRcdFx0XHRcdHN0YXJ0TGluZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGlmIChjb2xsYXBzZVN0YXJ0KVxuXHRcdFx0XHRcdFx0XHRcdGNvbGxhcHNlRW5kID0gbGluZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNvbGxhcHNlU3RhcnQgJiYgY29sbGFwc2VFbmQpIHtcblx0XHRcdFx0XHRidWlsZGVyLmFkZChjb2xsYXBzZVN0YXJ0LmZyb20sY29sbGFwc2VFbmQudG8sRGVjb3JhdGlvbi5yZXBsYWNlKHtlZmZlY3Q6IGNvbGxhcHNlLm9mKERlY29yYXRpb24ucmVwbGFjZSh7YmxvY2s6IHRydWV9KS5yYW5nZShjb2xsYXBzZVN0YXJ0LmZyb20sY29sbGFwc2VFbmQudG8pKSwgYmxvY2s6IHRydWUsIGluY2x1c2l2ZTogdHJ1ZX0pKTtcblx0XHRcdFx0XHRjb2xsYXBzZVN0YXJ0ID0gbnVsbDtcblx0XHRcdFx0XHRjb2xsYXBzZUVuZCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBidWlsZGVyLmZpbmlzaCgpO1xuXHRcdH0sXG5cdFx0dXBkYXRlKHZhbHVlOiBEZWNvcmF0aW9uU2V0LCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBEZWNvcmF0aW9uU2V0IHtcblx0XHRcdHZhbHVlID0gdmFsdWUubWFwKHRyYW5zYWN0aW9uLmNoYW5nZXMpO1xuXHRcdFx0Zm9yIChjb25zdCBlZmZlY3Qgb2YgdHJhbnNhY3Rpb24uZWZmZWN0cykge1xuXHRcdFx0XHRpZiAoZWZmZWN0LmlzKGNvbGxhcHNlKSlcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnVwZGF0ZSh7YWRkOiBbZWZmZWN0LnZhbHVlXSwgc29ydDogdHJ1ZX0pO1xuXHRcdFx0XHRlbHNlIGlmIChlZmZlY3QuaXModW5jb2xsYXBzZSkpXG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS51cGRhdGUoe2ZpbHRlckZyb206IGVmZmVjdC52YWx1ZS5maWx0ZXJGcm9tLCBmaWx0ZXJUbzogZWZmZWN0LnZhbHVlLmZpbHRlclRvLCBmaWx0ZXI6IGVmZmVjdC52YWx1ZS5maWx0ZXJ9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXHRcdHByb3ZpZGUoZmllbGQ6IFN0YXRlRmllbGQ8RGVjb3JhdGlvblNldD4pOiBFeHRlbnNpb24ge1xuXHRcdFx0cmV0dXJuIEVkaXRvclZpZXcuZGVjb3JhdGlvbnMuZnJvbShmaWVsZCk7XG5cdFx0fSxcblx0fSk7XG5cdGNvbnN0IHRlbXBvcmFyaWx5VW5jb2xsYXBzZWQgPSBTdGF0ZUZpZWxkLmRlZmluZTxEZWNvcmF0aW9uU2V0Pih7XG5cdFx0Y3JlYXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IERlY29yYXRpb25TZXQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdFx0cmV0dXJuIERlY29yYXRpb24ubm9uZTtcblx0XHR9LFxuXHRcdHVwZGF0ZSh2YWx1ZTogRGVjb3JhdGlvblNldCwgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogRGVjb3JhdGlvblNldCB7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLm1hcCh0cmFuc2FjdGlvbi5jaGFuZ2VzKTtcblx0XHRcdGNvbnN0IHVuY29sbGFwc2VBbm5vdGF0aW9uID0gdHJhbnNhY3Rpb24uYW5ub3RhdGlvbih0ZW1wb3JhcnlVbmNvbGxhcHNlQW5ub3RhdGlvbik7XG5cdFx0XHRpZiAodW5jb2xsYXBzZUFubm90YXRpb24pIHtcblx0XHRcdFx0aWYgKHVuY29sbGFwc2VBbm5vdGF0aW9uLnVuY29sbGFwc2UpXG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZS51cGRhdGUoe2FkZDogW3VuY29sbGFwc2VBbm5vdGF0aW9uLmRlY29yYXRpb25SYW5nZV0sIHNvcnQ6IHRydWV9KTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWUudXBkYXRlKHtmaWx0ZXJGcm9tOiB1bmNvbGxhcHNlQW5ub3RhdGlvbi5kZWNvcmF0aW9uUmFuZ2UuZnJvbSwgZmlsdGVyVG86IHVuY29sbGFwc2VBbm5vdGF0aW9uLmRlY29yYXRpb25SYW5nZS50bywgZmlsdGVyOiAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCB2YWx1ZTogRGVjb3JhdGlvbik9PiEoZnJvbSA9PT0gdW5jb2xsYXBzZUFubm90YXRpb24uZGVjb3JhdGlvblJhbmdlLmZyb20gJiYgdG8gPT09IHVuY29sbGFwc2VBbm5vdGF0aW9uLmRlY29yYXRpb25SYW5nZS50byl9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRcdH1cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBpbmxpbmVDb2RlRGVjb3JhdG9yID0gVmlld1BsdWdpbi5mcm9tQ2xhc3MoXG5cdFx0Y2xhc3MgSW5saW5lQ29kZURlY29yYXRpb24ge1xuXHRcdFx0ZGVjb3JhdGlvbnM6IERlY29yYXRpb25TZXQ7XG5cdFx0XHRzZXR0aW5nczogQ29kZVN0eWxlclNldHRpbmdzO1xuXHRcdFx0c3ludGF4SGlnaGxpZ2h0OiBib29sZWFuO1xuXHRcdFx0Ly9OT1NPTkFSXG5cdFx0XHQvLyBsb2FkZWRMYW5ndWFnZXM6IFJlY29yZDxzdHJpbmcsTGFuZ3VhZ2VTdXBwb3J0PjsgLy9OT1RFOiBGb3IgZnV0dXJlIENNNiBDb21wYXRpYmlsaXR5XG5cblx0XHRcdGNvbnN0cnVjdG9yKHZpZXc6IEVkaXRvclZpZXcpIHtcblx0XHRcdFx0dGhpcy5kZWNvcmF0aW9ucyA9IERlY29yYXRpb24ubm9uZTtcblx0XHRcdFx0dGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuXHRcdFx0XHR0aGlzLnN5bnRheEhpZ2hsaWdodCA9IHNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuc3ludGF4SGlnaGxpZ2h0O1xuXHRcdFx0XHR0aGlzLmJ1aWxkRGVjb3JhdGlvbnModmlldyk7XG5cdFx0XHRcdC8vTk9TT05BUlxuXHRcdFx0XHQvLyB0aGlzLmxvYWRlZExhbmd1YWdlcyA9IHt9OyAvL05PVEU6IEZvciBmdXR1cmUgQ002IENvbXBhdGliaWxpdHlcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlKHVwZGF0ZTogVmlld1VwZGF0ZSkge1xuXHRcdFx0XHRpZiAodXBkYXRlLmRvY0NoYW5nZWQgfHwgdXBkYXRlLnZpZXdwb3J0Q2hhbmdlZCB8fCB1cGRhdGUuc2VsZWN0aW9uU2V0IHx8IHVwZGF0ZS5zdGF0ZS5maWVsZChlZGl0b3JMaXZlUHJldmlld0ZpZWxkKSE9PXVwZGF0ZS5zdGFydFN0YXRlLmZpZWxkKGVkaXRvckxpdmVQcmV2aWV3RmllbGQpIHx8IHRoaXMuc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5zeW50YXhIaWdobGlnaHQgIT09IHRoaXMuc3ludGF4SGlnaGxpZ2h0KSB7XG5cdFx0XHRcdFx0dGhpcy5zeW50YXhIaWdobGlnaHQgPSB0aGlzLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuc3ludGF4SGlnaGxpZ2h0O1xuXHRcdFx0XHRcdGlmICh1cGRhdGUuZG9jQ2hhbmdlZCkgXG5cdFx0XHRcdFx0XHR0aGlzLmRlY29yYXRpb25zID0gdGhpcy5kZWNvcmF0aW9ucy5tYXAodXBkYXRlLmNoYW5nZXMpO1xuXHRcdFx0XHRcdHRoaXMuYnVpbGREZWNvcmF0aW9ucyh1cGRhdGUudmlldyk7XG5cdFx0XHRcdC8vTk9TT05BUlxuXHRcdFx0XHQvL05PVEU6IEZvciBmdXR1cmUgQ002IENvbXBhdGliaWxpdHlcblx0XHRcdFx0Ly8gXHRjb25zdCB0b0hpZ2hsaWdodCA9IHRoaXMuYnVpbGREZWNvcmF0aW9ucyh1cGRhdGUudmlldyk7XG5cdFx0XHRcdC8vIFx0dG9IaWdobGlnaHQuZm9yRWFjaCgoaGlnaGxpZ2h0U2V0KT0+e1xuXHRcdFx0XHQvLyBcdFx0aWYgKCFoaWdobGlnaHRTZXQ/Lmxhbmd1YWdlKVxuXHRcdFx0XHQvLyBcdFx0XHRyZXR1cm47XG5cdFx0XHRcdC8vIFx0XHRpZiAoaGlnaGxpZ2h0U2V0Lmxhbmd1YWdlIGluIHRoaXMubG9hZGVkTGFuZ3VhZ2VzKSB7XG5cdFx0XHRcdC8vIFx0XHRcdHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmRlY29yYXRpb25zLnVwZGF0ZSh7YWRkOiBsYW5ndWFnZUhpZ2hsaWdodChoaWdobGlnaHRTZXQpfSk7XG5cdFx0XHRcdC8vIFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBcdFx0XHRjb25zdCBsYW5ndWFnZURlc2NyaXB0aW9uID0gTGFuZ3VhZ2VEZXNjcmlwdGlvbi5tYXRjaExhbmd1YWdlTmFtZShsYW5ndWFnZXMsaGlnaGxpZ2h0U2V0Lmxhbmd1YWdlKTtcblx0XHRcdFx0Ly8gXHRcdFx0aWYgKCFsYW5ndWFnZURlc2NyaXB0aW9uKVxuXHRcdFx0XHQvLyBcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0Ly8gXHRcdFx0bGFuZ3VhZ2VEZXNjcmlwdGlvbi5sb2FkKCkudGhlbigobGFuZ3VhZ2VTdXBwb3J0KT0+e1xuXHRcdFx0XHQvLyBcdFx0XHRcdHRoaXMubG9hZGVkTGFuZ3VhZ2VzW2hpZ2hsaWdodFNldC5sYW5ndWFnZV0gPSBsYW5ndWFnZVN1cHBvcnQ7XG5cdFx0XHRcdC8vIFx0XHRcdFx0dXBkYXRlLnZpZXcuZGlzcGF0Y2goe30pO1xuXHRcdFx0XHQvLyBcdFx0XHRcdHVwZGF0ZS52aWV3LmRpc3BhdGNoKHthbm5vdGF0aW9uczogc3ludGF4SGlnaGxpZ2h0RGVjb3JhdGlvbnMub2YobWFya0RlY29yYXRpb25zKX0pXG5cdFx0XHRcdC8vIFx0XHRcdH0pO1xuXHRcdFx0XHQvLyBcdFx0fVxuXHRcdFx0XHQvLyBcdH0pO1xuXHRcdFx0XHQvLyB9IGVsc2Uge1xuXHRcdFx0XHQvLyBcdHVwZGF0ZS50cmFuc2FjdGlvbnMuZm9yRWFjaCgodHJhbnNhY3Rpb24pPT57XG5cdFx0XHRcdC8vIFx0XHRjb25zdCBtYXJrRGVjb3JhdGlvbnMgPSB0cmFuc2FjdGlvbi5hbm5vdGF0aW9uKHN5bnRheEhpZ2hsaWdodERlY29yYXRpb25zKTtcblx0XHRcdFx0Ly8gXHRcdGlmIChtYXJrRGVjb3JhdGlvbnMpXG5cdFx0XHRcdC8vIFx0XHRcdHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmRlY29yYXRpb25zLnVwZGF0ZSh7YWRkOiBtYXJrRGVjb3JhdGlvbnN9KVxuXHRcdFx0XHQvLyBcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGJ1aWxkRGVjb3JhdGlvbnModmlldzogRWRpdG9yVmlldyk6IHZvaWQgeyAvL0FycmF5PHtzdGFydDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcsIGxhbmd1YWdlOiBzdHJpbmd9PiAvL05PVEU6IEZvciBmdXR1cmUgQ002IENvbXBhdGliaWxpdHkgLy9OT1NPTkFSXG5cdFx0XHRcdGlmICghdmlldz8udmlzaWJsZVJhbmdlcz8ubGVuZ3RoIHx8IGVkaXRpbmdWaWV3SWdub3JlKHZpZXcuc3RhdGUpKSB7XG5cdFx0XHRcdFx0dGhpcy5kZWNvcmF0aW9ucyA9IERlY29yYXRpb24ubm9uZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0Ly9OT1NPTkFSXG5cdFx0XHRcdFx0Ly8gcmV0dXJuIFtdOy8vTk9URTogRm9yIGZ1dHVyZSBDTTYgQ29tcGF0aWJpbGl0eVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vTk9TT05BUlxuXHRcdFx0XHQvLyBsZXQgdG9IaWdobGlnaHQ6IEFycmF5PHtzdGFydDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcsIGxhbmd1YWdlOiBzdHJpbmd9PiA9IFtdOyAvL05PVEU6IEZvciBmdXR1cmUgQ002IENvbXBhdGliaWxpdHlcblx0XHRcdFx0Zm9yIChjb25zdCB7ZnJvbSx0b30gb2Ygdmlldy52aXNpYmxlUmFuZ2VzKSB7XG5cdFx0XHRcdFx0c3ludGF4VHJlZSh2aWV3LnN0YXRlKS5pdGVyYXRlKHtmcm9tOiBmcm9tLCB0bzogdG8sXG5cdFx0XHRcdFx0XHRlbnRlcjogKHN5bnRheE5vZGUpPT57XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSBuZXcgU2V0KHN5bnRheE5vZGUubm9kZS50eXBlLnByb3A8c3RyaW5nPih0b2tlbkNsYXNzTm9kZVByb3ApPy5zcGxpdChcIiBcIikpO1xuXHRcdFx0XHRcdFx0XHRpZiAoIShwcm9wZXJ0aWVzLmhhcyhcImlubGluZS1jb2RlXCIpICYmICFwcm9wZXJ0aWVzLmhhcyhcImZvcm1hdHRpbmdcIikpKVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gc3ludGF4Tm9kZS5ub2RlLnByZXZTaWJsaW5nO1xuXHRcdFx0XHRcdFx0XHRpZiAoIXByZXZpb3VzU2libGluZylcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRlbGltaXRlclNpemUgPSBwcmV2aW91c1NpYmxpbmcudG8tcHJldmlvdXNTaWJsaW5nLmZyb207XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGlubGluZUNvZGVUZXh0ID0gdmlldy5zdGF0ZS5kb2Muc2xpY2VTdHJpbmcoc3ludGF4Tm9kZS5mcm9tLCBzeW50YXhOb2RlLnRvKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qge3BhcmFtZXRlcnMsdGV4dH0gPSBwYXJzZUlubGluZUNvZGUoaW5saW5lQ29kZVRleHQpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbmRPZlBhcmFtZXRlcnMgPSBpbmxpbmVDb2RlVGV4dC5sYXN0SW5kZXhPZih0ZXh0KTtcblx0XHRcdFx0XHRcdFx0aWYgKCFwYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRleHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh2aWV3LnN0YXRlLnNlbGVjdGlvbi5yYW5nZXMuc29tZSgocmFuZ2U6IFNlbGVjdGlvblJhbmdlKT0+cmFuZ2UudG8gPj0gc3ludGF4Tm9kZS5mcm9tLWRlbGltaXRlclNpemUgJiYgcmFuZ2UuZnJvbSA8PSBzeW50YXhOb2RlLnRvK2RlbGltaXRlclNpemUpKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmRlY29yYXRpb25zID0gdGhpcy5kZWNvcmF0aW9ucy51cGRhdGUoe2ZpbHRlckZyb206IHN5bnRheE5vZGUuZnJvbSwgZmlsdGVyVG86IHN5bnRheE5vZGUuZnJvbSwgZmlsdGVyOiAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCB2YWx1ZTogRGVjb3JhdGlvbik9PmZhbHNlfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmRlY29yYXRpb25zLnVwZGF0ZSh7YWRkOiBbe2Zyb206IHN5bnRheE5vZGUuZnJvbSwgdG86IHN5bnRheE5vZGUuZnJvbSArIGVuZE9mUGFyYW1ldGVycywgdmFsdWU6IERlY29yYXRpb24ucmVwbGFjZSh7fSl9XX0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodmlldy5zdGF0ZS5zZWxlY3Rpb24ucmFuZ2VzLnNvbWUoKHJhbmdlOiBTZWxlY3Rpb25SYW5nZSk9PnJhbmdlLnRvID49IHN5bnRheE5vZGUuZnJvbS1kZWxpbWl0ZXJTaXplICYmIHJhbmdlLmZyb20gPD0gc3ludGF4Tm9kZS50bytkZWxpbWl0ZXJTaXplKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kZWNvcmF0aW9ucy5iZXR3ZWVuKHN5bnRheE5vZGUuZnJvbSwgc3ludGF4Tm9kZS5mcm9tLCAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBkZWNvcmF0aW9uVmFsdWU6IERlY29yYXRpb24pPT57IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmRlY29yYXRpb25zLnVwZGF0ZSh7ZmlsdGVyRnJvbTogZnJvbSwgZmlsdGVyVG86IHRvLCBmaWx0ZXI6IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHZhbHVlOiBEZWNvcmF0aW9uKT0+ZmFsc2V9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuZGVjb3JhdGlvbnMudXBkYXRlKHthZGQ6IFt7ZnJvbTogc3ludGF4Tm9kZS5mcm9tLCB0bzogc3ludGF4Tm9kZS5mcm9tICsgZW5kT2ZQYXJhbWV0ZXJzLCB2YWx1ZTogRGVjb3JhdGlvbi5tYXJrKHtjbGFzczogXCJjb2RlLXN0eWxlci1pbmxpbmUtcGFyYW1ldGVyc1wifSl9XX0pO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgZGVjb3JhdGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmRlY29yYXRpb25zLmJldHdlZW4oc3ludGF4Tm9kZS5mcm9tLCBzeW50YXhOb2RlLmZyb20sIChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIGRlY29yYXRpb25WYWx1ZTogRGVjb3JhdGlvbik9Pntcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFkZWNvcmF0aW9uVmFsdWUuc3BlYz8uY2xhc3MpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVjb3JhdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFkZWNvcmF0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuZGVjb3JhdGlvbnMudXBkYXRlKHthZGQ6IFt7ZnJvbTogc3ludGF4Tm9kZS5mcm9tLCB0bzogc3ludGF4Tm9kZS5mcm9tICsgZW5kT2ZQYXJhbWV0ZXJzLCB2YWx1ZTogRGVjb3JhdGlvbi5yZXBsYWNlKHt9KX1dfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJzPy50aXRsZSB8fCAocGFyYW1ldGVycz8uaWNvbiAmJiBnZXRMYW5ndWFnZUljb24ocGFyYW1ldGVycy5sYW5ndWFnZSxsYW5ndWFnZUljb25zKSkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuZGVjb3JhdGlvbnMudXBkYXRlKHthZGQ6IFt7ZnJvbTogc3ludGF4Tm9kZS5mcm9tLCB0bzogc3ludGF4Tm9kZS5mcm9tLCB2YWx1ZTogRGVjb3JhdGlvbi5yZXBsYWNlKHt3aWRnZXQ6IG5ldyBPcGVuZXJXaWRnZXQocGFyYW1ldGVycyxsYW5ndWFnZUljb25zKX0pfV19KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuZGVjb3JhdGlvbnMudXBkYXRlKHtmaWx0ZXJGcm9tOiBzeW50YXhOb2RlLmZyb20gKyBlbmRPZlBhcmFtZXRlcnMrMSwgZmlsdGVyVG86IHN5bnRheE5vZGUudG8sIGZpbHRlcjogKGZyb206IG51bWJlciwgdG86IG51bWJlciwgZGVjb3JhdGlvblZhbHVlOiBEZWNvcmF0aW9uKT0+ZmFsc2V9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuc3ludGF4SGlnaGxpZ2h0KVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmRlY29yYXRpb25zLnVwZGF0ZSh7YWRkOiBtb2RlSGlnaGxpZ2h0KHtzdGFydDogc3ludGF4Tm9kZS5mcm9tICsgZW5kT2ZQYXJhbWV0ZXJzLCB0ZXh0OiB0ZXh0LCBsYW5ndWFnZTogcGFyYW1ldGVycy5sYW5ndWFnZX0pfSk7XG5cdFx0XHRcdFx0XHRcdFx0Ly9OT1NPTkFSXG5cdFx0XHRcdFx0XHRcdFx0Ly8gdG9IaWdobGlnaHQucHVzaCh7c3RhcnQ6IHN5bnRheE5vZGUuZnJvbSArIGVuZE9mUGFyYW1ldGVycywgdGV4dDogdGV4dCwgbGFuZ3VhZ2U6IHBhcmFtZXRlcnMubGFuZ3VhZ2V9KTsgLy9OT1RFOiBGb3IgZnV0dXJlIENNNiBDb21wYXRpYmlsaXR5XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gcmV0dXJuIHRvSGlnaGxpZ2h0OyAvL05PVEU6IEZvciBmdXR1cmUgQ002IENvbXBhdGliaWxpdHlcblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdGRlY29yYXRpb25zOiAodmFsdWUpID0+IHZhbHVlLmRlY29yYXRpb25zLFxuXHRcdH1cblx0KTtcblx0ZnVuY3Rpb24gY3Vyc29ySW50b0NvbGxhcHNlZFRyYW5zYWN0aW9uRmlsdGVyKCkge1xuXHRcdHJldHVybiBFZGl0b3JTdGF0ZS50cmFuc2FjdGlvbkZpbHRlci5vZigodHJhbnNhY3Rpb24pID0+IHtcblx0XHRcdGNvbnN0IGV4dHJhVHJhbnNhY3Rpb25zOiBBcnJheTxUcmFuc2FjdGlvblNwZWM+ID0gW107XG5cdFx0XHRjb25zdCBjb2xsYXBzZWRSYW5nZVNldCA9IHRyYW5zYWN0aW9uLnN0YXJ0U3RhdGUuZmllbGQoY29kZWJsb2NrQ29sbGFwc2UsZmFsc2UpPy5tYXAodHJhbnNhY3Rpb24uY2hhbmdlcykgPz8gRGVjb3JhdGlvbi5ub25lO1xuXHRcdFx0Y29uc3QgdGVtcG9yYXJpbHlVbmNvbGxhcHNlZFJhbmdlU2V0ID0gdHJhbnNhY3Rpb24uc3RhcnRTdGF0ZS5maWVsZCh0ZW1wb3JhcmlseVVuY29sbGFwc2VkLGZhbHNlKT8ubWFwKHRyYW5zYWN0aW9uLmNoYW5nZXMpID8/IERlY29yYXRpb24ubm9uZTtcblx0XHRcdHRyYW5zYWN0aW9uLm5ld1NlbGVjdGlvbi5yYW5nZXMuZm9yRWFjaCgocmFuZ2U6IFNlbGVjdGlvblJhbmdlKT0+e1xuXHRcdFx0XHRjb2xsYXBzZWRSYW5nZVNldC5iZXR3ZWVuKHJhbmdlLmZyb20sIHJhbmdlLnRvLCAoY29sbGFwc2VTdGFydEZyb20sIGNvbGxhcHNlRW5kVG8sIGRlY29yYXRpb25WYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmIChjb2xsYXBzZVN0YXJ0RnJvbSA8PSByYW5nZS5oZWFkICYmIHJhbmdlLmhlYWQgPD0gY29sbGFwc2VFbmRUbylcblx0XHRcdFx0XHRcdGV4dHJhVHJhbnNhY3Rpb25zLnB1c2goe2VmZmVjdHM6IHVuY29sbGFwc2Uub2Yoe2ZpbHRlcjogKGZyb20sdG8pID0+ICh0byA8PSBjb2xsYXBzZVN0YXJ0RnJvbSB8fCBmcm9tID49IGNvbGxhcHNlRW5kVG8pLCBmaWx0ZXJGcm9tOiBjb2xsYXBzZVN0YXJ0RnJvbSwgZmlsdGVyVG86IGNvbGxhcHNlRW5kVG99KSwgYW5ub3RhdGlvbnM6IHRlbXBvcmFyeVVuY29sbGFwc2VBbm5vdGF0aW9uLm9mKHtkZWNvcmF0aW9uUmFuZ2U6IHtmcm9tOiBjb2xsYXBzZVN0YXJ0RnJvbSwgdG86IGNvbGxhcHNlRW5kVG8sIHZhbHVlOiBkZWNvcmF0aW9uVmFsdWV9LCB1bmNvbGxhcHNlOiB0cnVlfSl9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGZvciAobGV0IGl0ZXIgPSB0ZW1wb3JhcmlseVVuY29sbGFwc2VkUmFuZ2VTZXQuaXRlcigpOyBpdGVyLnZhbHVlICE9PSBudWxsOyBpdGVyLm5leHQoKSkge1xuXHRcdFx0XHRcdGlmICghKGl0ZXIuZnJvbSA8PSByYW5nZS5oZWFkICYmIHJhbmdlLmhlYWQgPD0gaXRlci50bykpXG5cdFx0XHRcdFx0XHRleHRyYVRyYW5zYWN0aW9ucy5wdXNoKHtlZmZlY3RzOiBjb2xsYXBzZS5vZihEZWNvcmF0aW9uLnJlcGxhY2Uoe2Jsb2NrOiB0cnVlfSkucmFuZ2UoaXRlci5mcm9tLGl0ZXIudG8pKSwgYW5ub3RhdGlvbnM6IHRlbXBvcmFyeVVuY29sbGFwc2VBbm5vdGF0aW9uLm9mKHtkZWNvcmF0aW9uUmFuZ2U6IHtmcm9tOiBpdGVyLmZyb20sIHRvOiBpdGVyLnRvLCB2YWx1ZTogaXRlci52YWx1ZX0sIHVuY29sbGFwc2U6IGZhbHNlfSl9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoZXh0cmFUcmFuc2FjdGlvbnMubGVuZ3RoICE9PSAwKVxuXHRcdFx0XHRyZXR1cm4gW3RyYW5zYWN0aW9uLC4uLmV4dHJhVHJhbnNhY3Rpb25zXTtcblx0XHRcdHJldHVybiB0cmFuc2FjdGlvbjtcblx0XHR9KTtcblx0fVxuXG5cdC8vdG9kbyBGaW5pc2ggdGhpcyBmaWx0ZXJcblx0Ly8gZnVuY3Rpb24gbWFuYWdlQ29sbGFwc2VkVHJhbnNhY3Rpb25GaWx0ZXIoKSB7XG5cdC8vIFx0cmV0dXJuIEVkaXRvclN0YXRlLnRyYW5zYWN0aW9uRmlsdGVyLm9mKCh0cmFuc2FjdGlvbikgPT4ge1xuXHQvLyBcdFx0Y29uc3QgZXh0cmFUcmFuc2FjdGlvbnM6IEFycmF5PFRyYW5zYWN0aW9uU3BlYz4gPSBbXTtcblx0Ly8gXHRcdGNvbnN0IGNvbGxhcHNlZFJhbmdlU2V0ID0gdHJhbnNhY3Rpb24uc3RhcnRTdGF0ZS5maWVsZChjb2RlYmxvY2tDb2xsYXBzZSxmYWxzZSkgPz8gRGVjb3JhdGlvbi5ub25lO1xuXHQvLyBcdFx0Y29uc3QgdGVtcG9yYXJpbHlVbmNvbGxhcHNlZFJhbmdlU2V0ID0gdHJhbnNhY3Rpb24uc3RhcnRTdGF0ZS5maWVsZCh0ZW1wb3JhcmlseVVuY29sbGFwc2VkLGZhbHNlKSA/PyBEZWNvcmF0aW9uLm5vbmU7XG5cdC8vIFx0XHR0cmFuc2FjdGlvbi5jaGFuZ2VzLml0ZXJDaGFuZ2VzKChmcm9tQSx0b0EsZnJvbUIsdG9CLGluc2VydGVkKT0+e1xuXHQvLyBcdFx0XHRpZiAoZnJvbUIgPT09IHRvQiAmJiBpbnNlcnRlZC50b1N0cmluZygpID09PSAnJykge1xuXHQvLyBcdFx0XHRcdGNvbnNvbGUubG9nKGZyb21BLHRvQSxmcm9tQix0b0IsaW5zZXJ0ZWQpXG5cdC8vIFx0XHRcdFx0Y29sbGFwc2VkUmFuZ2VTZXQuYmV0d2Vlbihmcm9tQS0xMDAsIHRvQSsxMDAsIChjb2xsYXBzZVN0YXJ0RnJvbSwgY29sbGFwc2VFbmRUbywgZGVjb3JhdGlvblZhbHVlKSA9PiB7XG5cdC8vIFx0XHRcdFx0XHRjb25zb2xlLmxvZyhmcm9tQSx0b0EsY29sbGFwc2VTdGFydEZyb20sY29sbGFwc2VFbmRUbylcblx0Ly8gXHRcdFx0XHRcdGlmICgoZnJvbUEgPD0gY29sbGFwc2VTdGFydEZyb20gJiYgY29sbGFwc2VTdGFydEZyb20gPD0gdG9BKSB8fCAoZnJvbUEgPD0gY29sbGFwc2VFbmRUbyAmJiBjb2xsYXBzZUVuZFRvIDw9IHRvQSkpXG5cdC8vIFx0XHRcdFx0XHRcdGV4dHJhVHJhbnNhY3Rpb25zLnB1c2goe2VmZmVjdHM6IHVuY29sbGFwc2Uub2Yoe2ZpbHRlcjogKGZyb20sdG8pID0+ICh0byA8PSBjb2xsYXBzZVN0YXJ0RnJvbSB8fCBmcm9tID49IGNvbGxhcHNlRW5kVG8pLCBmaWx0ZXJGcm9tOiBjb2xsYXBzZVN0YXJ0RnJvbSwgZmlsdGVyVG86IGNvbGxhcHNlRW5kVG99KSwgYW5ub3RhdGlvbnM6IHRlbXBvcmFyeVVuY29sbGFwc2VBbm5vdGF0aW9uLm9mKHtkZWNvcmF0aW9uUmFuZ2U6IHtmcm9tOiBjb2xsYXBzZVN0YXJ0RnJvbSwgdG86IGNvbGxhcHNlRW5kVG8sIHZhbHVlOiBkZWNvcmF0aW9uVmFsdWV9LCB1bmNvbGxhcHNlOiB0cnVlfSl9KTtcblx0Ly8gXHRcdFx0XHR9KTtcblx0Ly8gXHRcdFx0fVxuXHQvLyBcdFx0fSk7XG5cdC8vIFx0XHRpZiAoZXh0cmFUcmFuc2FjdGlvbnMubGVuZ3RoICE9PSAwKVxuXHQvLyBcdFx0XHRjb25zb2xlLmxvZygnZm9vJyxleHRyYVRyYW5zYWN0aW9ucylcblx0Ly8gXHRcdGlmIChleHRyYVRyYW5zYWN0aW9ucy5sZW5ndGggIT09IDApXG5cdC8vIFx0XHRcdHJldHVybiBbdHJhbnNhY3Rpb24sLi4uZXh0cmFUcmFuc2FjdGlvbnNdO1xuXHQvLyBcdFx0cmV0dXJuIHRyYW5zYWN0aW9uO1xuXHQvLyBcdH0pO1xuXHQvLyB9XG5cblx0Y2xhc3MgTGluZU51bWJlcldpZGdldCBleHRlbmRzIFdpZGdldFR5cGUge1xuXHRcdGxpbmVOdW1iZXI6IG51bWJlcjtcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzO1xuXHRcdG1heExpbmVOdW06IG51bWJlcjtcblx0XHRlbXB0eTogYm9vbGVhbjtcblx0XG5cdFx0Y29uc3RydWN0b3IobGluZU51bWJlcjogbnVtYmVyLCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzLCBtYXhMaW5lTnVtOiBudW1iZXIsIGVtcHR5OiBib29sZWFuKSB7XG5cdFx0XHRzdXBlcigpO1xuXHRcdFx0dGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjtcblx0XHRcdHRoaXMuY29kZWJsb2NrUGFyYW1ldGVycyA9IGNvZGVibG9ja1BhcmFtZXRlcnM7XG5cdFx0XHR0aGlzLm1heExpbmVOdW0gPSBtYXhMaW5lTnVtO1xuXHRcdFx0dGhpcy5lbXB0eSA9IGVtcHR5O1xuXHRcdH1cblx0XG5cdFx0ZXEob3RoZXI6IExpbmVOdW1iZXJXaWRnZXQpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiB0aGlzLmxpbmVOdW1iZXIgPT09IG90aGVyLmxpbmVOdW1iZXIgJiYgdGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0VuYWJsZWQgPT09IG90aGVyLmNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMuYWx3YXlzRW5hYmxlZCAmJiB0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMuYWx3YXlzRGlzYWJsZWQgPT09IG90aGVyLmNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMuYWx3YXlzRGlzYWJsZWQgJiYgdGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLm9mZnNldCA9PT0gb3RoZXIuY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5vZmZzZXQgJiYgdGhpcy5tYXhMaW5lTnVtID09PSBvdGhlci5tYXhMaW5lTnVtICYmIHRoaXMuZW1wdHkgPT09IG90aGVyLmVtcHR5O1xuXHRcdH1cblx0XG5cdFx0dG9ET00odmlldzogRWRpdG9yVmlldyk6IEhUTUxFbGVtZW50IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRcdHJldHVybiBjcmVhdGVTcGFuKHthdHRyOiB7c3R5bGU6IHRoaXMubWF4TGluZU51bS50b1N0cmluZygpLmxlbmd0aCA+ICh0aGlzLmxpbmVOdW1iZXIgKyB0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMub2Zmc2V0KS50b1N0cmluZygpLmxlbmd0aD9cIndpZHRoOiB2YXIoLS1saW5lLW51bWJlci1ndXR0ZXItd2lkdGgpO1wiOlwiXCJ9LCBjbHM6IGBjb2RlLXN0eWxlci1saW5lLW51bWJlciR7Z2V0TGluZU51bWJlckRpc3BsYXkodGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzKX1gLCB0ZXh0OiB0aGlzLmVtcHR5P1wiXCI6KHRoaXMubGluZU51bWJlciArIHRoaXMuY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5vZmZzZXQpLnRvU3RyaW5nKCl9KTtcblx0XHR9XG5cdH1cblx0Y2xhc3MgSGVhZGVyV2lkZ2V0IGV4dGVuZHMgV2lkZ2V0VHlwZSB7XG5cdFx0Y29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycztcblx0XHR0aGVtZVNldHRpbmdzOiBDb2RlU3R5bGVyVGhlbWVTZXR0aW5ncztcblx0XHRsYW5ndWFnZUljb25zOiBSZWNvcmQ8c3RyaW5nLHN0cmluZz47XG5cdFx0dmlldzogRWRpdG9yVmlldztcblx0XHRtdXRhdGlvbk9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuXHRcblx0XHRjb25zdHJ1Y3Rvcihjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzLCB0aGVtZVNldHRpbmdzOiBDb2RlU3R5bGVyVGhlbWVTZXR0aW5ncywgbGFuZ3VhZ2VJY29uczogUmVjb3JkPHN0cmluZyxzdHJpbmc+KSB7XG5cdFx0XHRzdXBlcigpO1xuXHRcdFx0dGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzID0gY29kZWJsb2NrUGFyYW1ldGVycztcblx0XHRcdHRoaXMudGhlbWVTZXR0aW5ncyA9IHRoZW1lU2V0dGluZ3M7XG5cdFx0XHR0aGlzLmxhbmd1YWdlSWNvbnMgPSBsYW5ndWFnZUljb25zO1xuXHRcdFx0dGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuXHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaChtdXRhdGlvbiA9PiB7XG5cdFx0XHRcdFx0aWYgKChtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmhhc0F0dHJpYnV0ZShcImRhdGEtY2xpY2tlZFwiKSlcblx0XHRcdFx0XHRcdGNvbGxhcHNlT25DbGljayh0aGlzLnZpZXcsKG11dGF0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pOyAgICBcblx0XHR9XG5cdFx0XHRcblx0XHRlcShvdGhlcjogSGVhZGVyV2lkZ2V0KTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHR0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UgPT0gb3RoZXIuY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSAmJlxuXHRcdFx0XHR0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMudGl0bGUgPT0gb3RoZXIuY29kZWJsb2NrUGFyYW1ldGVycy50aXRsZSAmJlxuXHRcdFx0XHR0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5lbmFibGVkID09IG90aGVyLmNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5lbmFibGVkICYmXG5cdFx0XHRcdHRoaXMuY29kZWJsb2NrUGFyYW1ldGVycy5mb2xkLnBsYWNlaG9sZGVyID09IG90aGVyLmNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5wbGFjZWhvbGRlciAmJlxuXHRcdFx0XHR0aGlzLnRoZW1lU2V0dGluZ3MuaGVhZGVyLmNvbGxhcHNlUGxhY2Vob2xkZXIgPT0gb3RoZXIudGhlbWVTZXR0aW5ncy5oZWFkZXIuY29sbGFwc2VQbGFjZWhvbGRlciAmJlxuXHRcdFx0XHRnZXRMYW5ndWFnZUljb24odGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlLHRoaXMubGFuZ3VhZ2VJY29ucykgPT0gZ2V0TGFuZ3VhZ2VJY29uKG90aGVyLmNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2Usb3RoZXIubGFuZ3VhZ2VJY29ucylcblx0XHRcdCk7XG5cdFx0fVxuXHRcdFx0XG5cdFx0dG9ET00odmlldzogRWRpdG9yVmlldyk6IEhUTUxFbGVtZW50IHtcblx0XHRcdHRoaXMudmlldyA9IHZpZXc7XG5cdFx0XHRjb25zdCBoZWFkZXJDb250YWluZXIgPSBjcmVhdGVIZWFkZXIodGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLCB0aGlzLnRoZW1lU2V0dGluZ3MsIHRoaXMubGFuZ3VhZ2VJY29ucyk7XG5cdFx0XHRpZiAodGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlIT09XCJcIilcblx0XHRcdFx0aGVhZGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoYGxhbmd1YWdlLSR7dGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlfWApO1xuXHRcdFx0aGVhZGVyQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixoYW5kbGVNb3VzZURvd24pO1xuXHRcblx0XHRcdHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKGhlYWRlckNvbnRhaW5lcix7XG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBoZWFkZXJDb250YWluZXI7XG5cdFx0fVxuXHRcdFx0XHRcblx0XHRkZXN0cm95KGRvbTogSFRNTEVsZW1lbnQpIHtcblx0XHRcdGRvbS5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrZWRcIik7XG5cdFx0XHRkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGhhbmRsZU1vdXNlRG93bik7XG5cdFx0XHR0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdH1cblx0XG5cdFx0aWdub3JlRXZlbnQoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdGNsYXNzIE9wZW5lcldpZGdldCBleHRlbmRzIFdpZGdldFR5cGUge1xuXHRcdGlubGluZUNvZGVQYXJhbWV0ZXJzOiBJbmxpbmVDb2RlUGFyYW1ldGVycztcblx0XHRsYW5ndWFnZUljb25zOiBSZWNvcmQ8c3RyaW5nLHN0cmluZz47XG5cblx0XHRjb25zdHJ1Y3RvciAoaW5saW5lQ29kZVBhcmFtZXRlcnM6IElubGluZUNvZGVQYXJhbWV0ZXJzLCBsYW5ndWFnZUljb25zOiBSZWNvcmQ8c3RyaW5nLHN0cmluZz4pIHtcblx0XHRcdHN1cGVyKCk7XG5cdFx0XHR0aGlzLmlubGluZUNvZGVQYXJhbWV0ZXJzID0gaW5saW5lQ29kZVBhcmFtZXRlcnM7XG5cdFx0XHR0aGlzLmxhbmd1YWdlSWNvbnMgPSBsYW5ndWFnZUljb25zO1xuXHRcdH1cblxuXHRcdGVxKG90aGVyOiBPcGVuZXJXaWRnZXQpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRoaXMuaW5saW5lQ29kZVBhcmFtZXRlcnMubGFuZ3VhZ2UgPT0gb3RoZXIuaW5saW5lQ29kZVBhcmFtZXRlcnMubGFuZ3VhZ2UgJiZcblx0XHRcdFx0dGhpcy5pbmxpbmVDb2RlUGFyYW1ldGVycy50aXRsZSA9PSBvdGhlci5pbmxpbmVDb2RlUGFyYW1ldGVycy50aXRsZSAmJlxuXHRcdFx0XHR0aGlzLmlubGluZUNvZGVQYXJhbWV0ZXJzLmljb24gPT0gb3RoZXIuaW5saW5lQ29kZVBhcmFtZXRlcnMuaWNvbiAmJlxuXHRcdFx0XHRnZXRMYW5ndWFnZUljb24odGhpcy5pbmxpbmVDb2RlUGFyYW1ldGVycy5sYW5ndWFnZSx0aGlzLmxhbmd1YWdlSWNvbnMpID09IGdldExhbmd1YWdlSWNvbihvdGhlci5pbmxpbmVDb2RlUGFyYW1ldGVycy5sYW5ndWFnZSxvdGhlci5sYW5ndWFnZUljb25zKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0b0RPTSh2aWV3OiBFZGl0b3JWaWV3KTogSFRNTEVsZW1lbnQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdFx0cmV0dXJuIGNyZWF0ZUlubGluZU9wZW5lcih0aGlzLmlubGluZUNvZGVQYXJhbWV0ZXJzLHRoaXMubGFuZ3VhZ2VJY29ucyxbXCJjb2RlLXN0eWxlci1pbmxpbmUtb3BlbmVyXCIsXCJjbS1pbmxpbmUtY29kZVwiXSk7XG5cdFx0fVxuXHR9XG5cdFxuXHRmdW5jdGlvbiBjb2xsYXBzZU9uQ2xpY2sodmlldzogRWRpdG9yVmlldywgdGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IHBvc2l0aW9uID0gdmlldy5wb3NBdERPTSh0YXJnZXQpO1xuXHRcdGxldCBmb2xkZWQgPSBmYWxzZTtcblx0XHR2aWV3LnN0YXRlLmZpZWxkKGNvZGVibG9ja0NvbGxhcHNlLGZhbHNlKT8uYmV0d2Vlbihwb3NpdGlvbixwb3NpdGlvbiwoKT0+e1xuXHRcdFx0Zm9sZGVkID0gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGxldCBjb2xsYXBzZVN0YXJ0OiBMaW5lIHwgbnVsbCA9IG51bGw7XG5cdFx0bGV0IGNvbGxhcHNlRW5kOiBMaW5lIHwgbnVsbCA9IG51bGw7XG5cdFx0bGV0IHN0YXJ0TGluZSA9IHRydWU7XG5cdFx0bGV0IHN0YXJ0RGVsaW1pdGVyID0gXCJgYGBcIjtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHZpZXcuc3RhdGUuZG9jLmxpbmVzOyBpKyspIHtcblx0XHRcdGNvbnN0IGxpbmUgPSB2aWV3LnN0YXRlLmRvYy5saW5lKGkpO1xuXHRcdFx0Y29uc3QgbGluZVRleHQgPSBsaW5lLnRleHQudG9TdHJpbmcoKTtcblx0XHRcdGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSB0ZXN0T3BlbmluZ0xpbmUobGluZVRleHQpO1xuXHRcdFx0aWYgKGN1cnJlbnREZWxpbWl0ZXIpIHtcblx0XHRcdFx0aWYgKHN0YXJ0TGluZSkge1xuXHRcdFx0XHRcdHN0YXJ0TGluZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHN0YXJ0RGVsaW1pdGVyID0gY3VycmVudERlbGltaXRlcjtcblx0XHRcdFx0XHRpZiAocG9zaXRpb24gPT09IGxpbmUuZnJvbSlcblx0XHRcdFx0XHRcdGNvbGxhcHNlU3RhcnQgPSBsaW5lO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChjdXJyZW50RGVsaW1pdGVyID09PSBzdGFydERlbGltaXRlcikge1xuXHRcdFx0XHRcdFx0c3RhcnRMaW5lID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGlmIChjb2xsYXBzZVN0YXJ0KVxuXHRcdFx0XHRcdFx0XHRjb2xsYXBzZUVuZCA9IGxpbmU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29sbGFwc2VTdGFydCAmJiBjb2xsYXBzZUVuZCkge1xuXHRcdFx0XHRpZiAoZm9sZGVkKVxuXHRcdFx0XHRcdHZpZXcuZGlzcGF0Y2goe2VmZmVjdHM6IHVuY29sbGFwc2Uub2Yoe2ZpbHRlcjogKGZyb20sdG8pID0+ICh0byA8PSAoY29sbGFwc2VTdGFydCBhcyBMaW5lKS5mcm9tIHx8IGZyb20gPj0gKGNvbGxhcHNlRW5kIGFzIExpbmUpLnRvKSwgZmlsdGVyRnJvbTogY29sbGFwc2VFbmQuZnJvbSwgZmlsdGVyVG86IGNvbGxhcHNlRW5kLnRvfSl9KTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHZpZXcuZGlzcGF0Y2goe2VmZmVjdHM6IGNvbGxhcHNlLm9mKERlY29yYXRpb24ucmVwbGFjZSh7YmxvY2s6IHRydWV9KS5yYW5nZShjb2xsYXBzZVN0YXJ0LmZyb20sY29sbGFwc2VFbmQudG8pKX0pO1xuXHRcdFx0XHR2aWV3LnJlcXVlc3RNZWFzdXJlKCk7XG5cdFx0XHRcdGNvbGxhcHNlU3RhcnQgPSBudWxsO1xuXHRcdFx0XHRjb2xsYXBzZUVuZCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja2VkXCIsXCJ0cnVlXCIpO1xuXHR9XG5cblx0Y29uc3QgY29sbGFwc2U6IFN0YXRlRWZmZWN0VHlwZTxSYW5nZTxEZWNvcmF0aW9uPj4gPSBTdGF0ZUVmZmVjdC5kZWZpbmUoKTtcblx0Y29uc3QgdW5jb2xsYXBzZTogU3RhdGVFZmZlY3RUeXBlPHtmaWx0ZXI6IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpID0+IGJvb2xlYW4sIGZpbHRlckZyb206IG51bWJlciwgZmlsdGVyVG86IG51bWJlcn0+ID0gU3RhdGVFZmZlY3QuZGVmaW5lKCk7XG5cdGNvbnN0IHRlbXBvcmFyeVVuY29sbGFwc2VBbm5vdGF0aW9uID0gQW5ub3RhdGlvbi5kZWZpbmU8e2RlY29yYXRpb25SYW5nZTogUmFuZ2U8RGVjb3JhdGlvbj4sIHVuY29sbGFwc2U6IGJvb2xlYW59PigpO1xuXG5cdHJldHVybiBbY29kZWJsb2NrTGluZU51bWJlckNoYXJXaWR0aCxjb2RlYmxvY2tMaW5lcyxjb2RlYmxvY2tIZWFkZXIsY29kZWJsb2NrQ29sbGFwc2UsdGVtcG9yYXJpbHlVbmNvbGxhcHNlZCxpbmxpbmVDb2RlRGVjb3JhdG9yLGN1cnNvckludG9Db2xsYXBzZWRUcmFuc2FjdGlvbkZpbHRlcigpXTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcldpZHRoKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGVmYXVsdF92YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcblx0Y29uc3QgY2hhcldpZHRocyA9IEFycmF5LmZyb20oc3RhdGUuZmllbGQoZWRpdG9yRWRpdG9yRmllbGQpLmNvbnRlbnRET00ucXVlcnlTZWxlY3RvckFsbChcIi5IeXBlck1ELWNvZGVibG9jay1lbmRcIikpLnJlZHVjZSgocmVzdWx0OiBBcnJheTxudW1iZXI+LGJlZ2lubmluZ0VsZW1lbnQ6IEhUTUxFbGVtZW50KTogQXJyYXk8bnVtYmVyPiA9PiB7XG5cdFx0Y29uc3QgbmV4dEVsZW1lbnQgPSBiZWdpbm5pbmdFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0aWYgKCFuZXh0RWxlbWVudClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0Y29uc3QgbGluZU51bWJlckVsZW1lbnQgPSBuZXh0RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiW2NsYXNzXj0nY29kZS1zdHlsZXItbGluZS1udW1iZXInXVwiKSBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoIWxpbmVOdW1iZXJFbGVtZW50IHx8IGxpbmVOdW1iZXJFbGVtZW50LmlubmVyVGV4dC5sZW5ndGggPD0gMilcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0Y29uc3QgY29tcHV0ZWRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShsaW5lTnVtYmVyRWxlbWVudCwgbnVsbCk7XG5cdFx0cmVzdWx0LnB1c2goKGxpbmVOdW1iZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5wYWRkaW5nTGVmdCkgLSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGVzLnBhZGRpbmdSaWdodCkpIC8gbGluZU51bWJlckVsZW1lbnQuaW5uZXJUZXh0Lmxlbmd0aCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxbXSk7XG5cdGlmIChjaGFyV2lkdGhzLmxlbmd0aCA9PT0gMClcblx0XHRyZXR1cm4gZGVmYXVsdF92YWx1ZTtcblx0cmV0dXJuIGNoYXJXaWR0aHMucmVkdWNlKChyZXN1bHQsdmFsdWUpPT5yZXN1bHQrdmFsdWUsMCkgLyBjaGFyV2lkdGhzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gZmluZFVuZHVwbGljYXRlZENvZGVibG9ja3ModmlldzogRWRpdG9yVmlldyk6IEFycmF5PFN5bnRheE5vZGVSZWY+IHtcblx0Y29uc3QgY29kZWJsb2NrcyA9IGZpbmRWaXNpYmxlQ29kZWJsb2Nrcyh2aWV3KTtcblx0Y29uc3QgdW5kdXBsaWNhdGVkQ29kZWJsb2NrczogQXJyYXk8U3ludGF4Tm9kZVJlZj4gPSBbXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2RlYmxvY2tzLmxlbmd0aDsgaSsrKVxuXHRcdGlmIChpID09PSAwIHx8IGNvZGVibG9ja3NbaV0uZnJvbSAhPT0gY29kZWJsb2Nrc1tpIC0gMV0uZnJvbSlcblx0XHRcdHVuZHVwbGljYXRlZENvZGVibG9ja3MucHVzaChjb2RlYmxvY2tzW2ldKTtcblx0cmV0dXJuIHVuZHVwbGljYXRlZENvZGVibG9ja3M7XG59XG5mdW5jdGlvbiBmaW5kVmlzaWJsZUNvZGVibG9ja3ModmlldzogRWRpdG9yVmlldyk6IEFycmF5PFN5bnRheE5vZGVSZWY+IHtcblx0cmV0dXJuIGZpbmRDb2RlYmxvY2tzKHZpZXcpLmZpbHRlcigoY29kZWJsb2NrKSA9PiB7XG5cdFx0cmV0dXJuIHZpZXcudmlzaWJsZVJhbmdlcy5zb21lKCh2aXNpYmxlUmFuZ2UpID0+IGNvZGVibG9jay5mcm9tIDwgdmlzaWJsZVJhbmdlLnRvICYmIGNvZGVibG9jay50byA+IHZpc2libGVSYW5nZS5mcm9tKTtcblx0fSk7XG59XG5mdW5jdGlvbiBmaW5kQ29kZWJsb2Nrcyh2aWV3OiBFZGl0b3JWaWV3KTogQXJyYXk8U3ludGF4Tm9kZVJlZj4ge1xuXHRjb25zdCBjb2RlYmxvY2tzOiBBcnJheTxTeW50YXhOb2RlUmVmPiA9IFtdO1xuXHRzeW50YXhUcmVlKHZpZXcuc3RhdGUpLml0ZXJhdGUoe1xuXHRcdGVudGVyOiAoc3ludGF4Tm9kZSkgPT4ge1xuXHRcdFx0aWYgKHN5bnRheE5vZGUudHlwZS5uYW1lLmluY2x1ZGVzKFwiSHlwZXJNRC1jb2RlYmxvY2stYmVnaW5cIikgfHwgc3ludGF4Tm9kZS50eXBlLm5hbWUgPT09IFwiSHlwZXJNRC1jb2RlYmxvY2tfSHlwZXJNRC1jb2RlYmxvY2stYmdcIiB8fCBzeW50YXhOb2RlLnR5cGUubmFtZS5pbmNsdWRlcyhcIkh5cGVyTUQtY29kZWJsb2NrLWVuZFwiKSlcblx0XHRcdFx0Y29kZWJsb2Nrcy5wdXNoKHN5bnRheE5vZGUpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBjb2RlYmxvY2tzO1xufVxuXG4vL05PU09OQVJcbi8vIGZ1bmN0aW9uIGxhbmd1YWdlSGlnaGxpZ2h0KHtzdGFydCx0ZXh0LGxhbmd1YWdlfToge3N0YXJ0OiBudW1iZXIsIHRleHQ6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZ30sbG9hZGVkTGFuZ3VhZ2VzOiBSZWNvcmQ8c3RyaW5nLExhbmd1YWdlU3VwcG9ydD4pOiBBcnJheTxSYW5nZTxEZWNvcmF0aW9uPj4ge1xuLy8gXHQvL05PVEU6IFVzZXMgY29kZW1pcnJvciA2IGltcGxlbWVudGF0aW9uIHdoaWNoIE9ic2lkaWFuIGRvZXMgbm90IGN1cnJlbnRseSB1c2Vcbi8vIFx0bGV0IG1hcmtEZWNvcmF0aW9uczogQXJyYXk8UmFuZ2U8RGVjb3JhdGlvbj4+ID0gW107XG4vLyBcdGNvbnN0IHRyZWUgPSBsb2FkZWRMYW5ndWFnZXNbbGFuZ3VhZ2VdLmxhbmd1YWdlLnBhcnNlci5wYXJzZSh0ZXh0KTtcbi8vIFx0aGlnaGxpZ2h0VHJlZSh0cmVlLGNsYXNzSGlnaGxpZ2h0ZXIsKGZyb20sdG8sdG9rZW4pID0+IHsgLy90b2RvIChAbWF5dXJhbmt2KSBDaGFuZ2UgdGhpcyBoaWdobGlnaHRlclxuLy8gXHRcdGlmICh0b2tlbilcbi8vIFx0XHRcdG1hcmtEZWNvcmF0aW9ucy5wdXNoKHtmcm9tOiBzdGFydCtmcm9tLCB0bzogc3RhcnQrdG8sIHZhbHVlOiBEZWNvcmF0aW9uLm1hcmsoe2NsYXNzOiB0b2tlbn0pfSk7XG4vLyBcdH0pO1xuLy8gXHRyZXR1cm4gbWFya0RlY29yYXRpb25zO1xuLy8gfVxuZnVuY3Rpb24gbW9kZUhpZ2hsaWdodCAoe3N0YXJ0LHRleHQsbGFuZ3VhZ2V9OiB7c3RhcnQ6IG51bWJlciwgdGV4dDogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nfSk6IEFycmF5PFJhbmdlPERlY29yYXRpb24+PiB7XG5cdC8vTk9URTogVXNlcyBDb2RlTWlycm9yIDUgaW1wbGVtZW50YXRpb24gd2hpY2ggT2JzaWRpYW4gY3VycmVudGx5IHVzZXNcblx0Y29uc3QgbWFya0RlY29yYXRpb25zOiBBcnJheTxSYW5nZTxEZWNvcmF0aW9uPj4gPSBbXTtcblx0Ly9AdHMtZXhwZWN0LWVycm9yIFVuZG9jdW1lbnRlZCBPYnNpZGlhbiBBUElcblx0Y29uc3QgbW9kZSA9IHdpbmRvdy5Db2RlTWlycm9yLmdldE1vZGUod2luZG93LkNvZGVNaXJyb3IuZGVmYXVsdHMsd2luZG93LkNvZGVNaXJyb3IuZmluZE1vZGVCeU5hbWUobGFuZ3VhZ2UpPy5taW1lKTsgLy8gQWx0ZXJuYXRpdmVzOiBgdGV4dC94LSR7cGFyYW1ldGVycy5sYW5ndWFnZX1gLCB3aW5kb3cuQ29kZU1pcnJvci5maW5kTW9kZUJ5TmFtZSgnanMnKS5taW1lXG5cdGNvbnN0IHN0YXRlID0gd2luZG93LkNvZGVNaXJyb3Iuc3RhcnRTdGF0ZShtb2RlKTtcblx0aWYgKG1vZGU/LnRva2VuKSB7XG5cdFx0Y29uc3Qgc3RyZWFtID0gbmV3IHdpbmRvdy5Db2RlTWlycm9yLlN0cmluZ1N0cmVhbSh0ZXh0KTtcblx0XHR3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuXHRcdFx0Y29uc3Qgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSxzdGF0ZSk7XG5cdFx0XHRpZiAoc3R5bGUpXG5cdFx0XHRcdG1hcmtEZWNvcmF0aW9ucy5wdXNoKHtmcm9tOiBzdGFydCtzdHJlYW0uc3RhcnQsIHRvOiBzdGFydCtzdHJlYW0ucG9zLCB2YWx1ZTogRGVjb3JhdGlvbi5tYXJrKHtjbGFzczogYGNtLSR7c3R5bGV9YH0pfSk7XG5cdFx0XHRzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWFya0RlY29yYXRpb25zO1xufVxuXG5mdW5jdGlvbiBlZGl0aW5nVmlld0lnbm9yZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcblx0aWYgKCFzdGF0ZS5maWVsZChlZGl0b3JMaXZlUHJldmlld0ZpZWxkKSlcblx0XHRyZXR1cm4gdHJ1ZTtcblx0Y29uc3QgZmlsZVBhdGggPSBzdGF0ZS5maWVsZChlZGl0b3JJbmZvRmllbGQpPy5maWxlPy5wYXRoO1xuXHRpZiAodHlwZW9mIGZpbGVQYXRoICE9PSBcInVuZGVmaW5lZFwiKVxuXHRcdHJldHVybiB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldENhY2hlKGZpbGVQYXRoKT8uZnJvbnRtYXR0ZXI/LltcImNvZGUtc3R5bGVyLWlnbm9yZVwiXSA9PT0gdHJ1ZTtcblx0cmV0dXJuIGZhbHNlO1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiwgVEZpbGUgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IENvZGVTdHlsZXJQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xuaW1wb3J0IHsgQ29kZVN0eWxlclRoZW1lIH0gZnJvbSBcIi4vU2V0dGluZ3NcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlYmxvY2tQYXJhbWV0ZXJzIHtcblx0bGFuZ3VhZ2U6IHN0cmluZztcblx0dGl0bGU6IHN0cmluZztcblx0Zm9sZDoge1xuXHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0cGxhY2Vob2xkZXI6IHN0cmluZztcblx0fVxuXHRsaW5lTnVtYmVyczoge1xuXHRcdGFsd2F5c0VuYWJsZWQ6IGJvb2xlYW47XG5cdFx0YWx3YXlzRGlzYWJsZWQ6IGJvb2xlYW47XG5cdFx0b2Zmc2V0OiBudW1iZXI7XG5cdH0sXG5cdGxpbmVVbndyYXA6IHtcblx0XHRhbHdheXNFbmFibGVkOiBib29sZWFuO1xuXHRcdGFsd2F5c0Rpc2FibGVkOiBib29sZWFuO1xuXHRcdGFjdGl2ZVdyYXA6IGJvb2xlYW47XG5cdH0sXG5cdGhpZ2hsaWdodHM6IHtcblx0XHRkZWZhdWx0OiBIaWdobGlnaHRzO1xuXHRcdGFsdGVybmF0aXZlOiBSZWNvcmQ8c3RyaW5nLEhpZ2hsaWdodHM+XG5cdH0sXG5cdGlnbm9yZTogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lQ29kZVBhcmFtZXRlcnMge1xuXHRsYW5ndWFnZTogc3RyaW5nO1xuXHR0aXRsZTogc3RyaW5nO1xuXHRpY29uOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpZ2hsaWdodHMge1xuXHRsaW5lTnVtYmVyczogQXJyYXk8bnVtYmVyPjtcblx0cGxhaW5UZXh0OiBBcnJheTxzdHJpbmc+O1xuXHRyZWd1bGFyRXhwcmVzc2lvbnM6IEFycmF5PFJlZ0V4cD47XG59XG5cbmludGVyZmFjZSBFeHRlcm5hbFBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XG5cdGNvZGU/OiAoc291cmNlOiBzdHJpbmcsIHNvdXJjZVBhdGg6IHN0cmluZyk9Pntcblx0XHRzdGFydDogbnVtYmVyO1xuXHRcdGNvZGU6IHN0cmluZztcblx0XHRsYW5ndWFnZTogc3RyaW5nO1xuXHRcdGhpZ2hsaWdodDogc3RyaW5nO1xuXHRcdGxpbmVzOiBBcnJheTxzdHJpbmc+O1xuXHRcdGZpbGVQYXRoOiBzdHJpbmc7XG5cdFx0bGluZW51bWJlcjogbnVtYmVyO1xuXHR9O1xuXHRhbmFseXplSGlnaExpZ2h0TGluZXM/OiAobGluZXM6IHN0cmluZ1tdLCBzb3VyY2U6IHN0cmluZyB8IHN0cmluZ1tdKT0+TWFwPG51bWJlcixib29sZWFuPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcnNlQ29kZWJsb2NrU291cmNlKGNvZGVTZWN0aW9uOiBBcnJheTxzdHJpbmc+LCBzb3VyY2VQYXRoOiBzdHJpbmcsIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbik6IFByb21pc2U8e2NvZGVibG9ja3NQYXJhbWV0ZXJzOiBBcnJheTxDb2RlYmxvY2tQYXJhbWV0ZXJzPiwgbmVzdGVkOiBib29sZWFufT4ge1xuXHQvL0B0cy1leHBlY3QtZXJyb3IgVW5kb2N1bWVudGVkIE9ic2lkaWFuIEFQSVxuXHRjb25zdCBwbHVnaW5zOiBSZWNvcmQ8c3RyaW5nLEV4dGVybmFsUGx1Z2luPiA9IHBsdWdpbi5hcHAucGx1Z2lucy5wbHVnaW5zO1xuXHRjb25zdCBhZG1vbml0aW9uczogYm9vbGVhbiA9IFwib2JzaWRpYW4tYWRtb25pdGlvblwiIGluIHBsdWdpbnM7XG5cdGNvbnN0IGNvZGVibG9ja3M6IEFycmF5PEFycmF5PHN0cmluZz4+ID0gW107XG5cdGNvbnN0IGNvZGVibG9ja3NQYXJhbWV0ZXJzOiBBcnJheTxDb2RlYmxvY2tQYXJhbWV0ZXJzPiA9IFtdO1xuXHRmdW5jdGlvbiBwYXJzZUNvZGVibG9ja1NlY3Rpb24oY29kZVNlY3Rpb246IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcblx0XHRpZiAoY29kZVNlY3Rpb24ubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXHRcdFxuXHRcdGNvbnN0IG9wZW5pbmdDb2RlYmxvY2tMaW5lID0gZ2V0T3BlbmluZ0xpbmUoY29kZVNlY3Rpb24pO1xuXHRcdGlmICghb3BlbmluZ0NvZGVibG9ja0xpbmUpXG5cdFx0XHRyZXR1cm47XG5cdFx0XG5cdFx0Y29uc3Qgb3BlbkRlbGltaXRlciA9IC9eXFxzKig/Oj5cXHMqKSooKD86YGBgK3x+fn4rKSkuKiQvLmV4ZWMob3BlbmluZ0NvZGVibG9ja0xpbmUpPy5bMV07XG5cdFx0aWYgKCFvcGVuRGVsaW1pdGVyKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Y29uc3Qgb3BlbkRlbGltaXRlckluZGV4ID0gY29kZVNlY3Rpb24uaW5kZXhPZihvcGVuaW5nQ29kZWJsb2NrTGluZSk7XG5cdFx0Y29uc3QgY2xvc2VEZWxpbWl0ZXJJbmRleCA9IGNvZGVTZWN0aW9uLnNsaWNlKG9wZW5EZWxpbWl0ZXJJbmRleCsxKS5maW5kSW5kZXgoKGxpbmUpPT5uZXcgUmVnRXhwKGBeXFxcXHMqKD86PlxcXFxzKikqJHtvcGVuRGVsaW1pdGVyfSg/ISR7b3BlbkRlbGltaXRlclswXX0pJGApLnRlc3QobGluZSkpO1xuXHRcdGlmICghYWRtb25pdGlvbnMgfHwgIS9eXFxzKig/Oj5cXHMqKSooPzpgYGArfH5+fispICphZC0uKiQvLnRlc3Qob3BlbmluZ0NvZGVibG9ja0xpbmUpKVxuXHRcdFx0Y29kZWJsb2Nrcy5wdXNoKGNvZGVTZWN0aW9uLnNsaWNlKDAsb3BlbkRlbGltaXRlckluZGV4KzIrY2xvc2VEZWxpbWl0ZXJJbmRleCkpO1xuXHRcdGVsc2Vcblx0XHRcdHBhcnNlQ29kZWJsb2NrU2VjdGlvbihjb2RlU2VjdGlvbi5zbGljZShvcGVuRGVsaW1pdGVySW5kZXgrMSxvcGVuRGVsaW1pdGVySW5kZXgrMStjbG9zZURlbGltaXRlckluZGV4KSk7XG4gICAgICAgIFxuXHRcdHBhcnNlQ29kZWJsb2NrU2VjdGlvbihjb2RlU2VjdGlvbi5zbGljZShvcGVuRGVsaW1pdGVySW5kZXgrMStjbG9zZURlbGltaXRlckluZGV4KzEpKTtcblx0fVxuXHRwYXJzZUNvZGVibG9ja1NlY3Rpb24oY29kZVNlY3Rpb24pO1xuXHRmb3IgKGNvbnN0IGNvZGVibG9ja0xpbmVzIG9mIGNvZGVibG9ja3MpIHtcblx0XHRjb25zdCBwYXJhbWV0ZXJMaW5lID0gZ2V0UGFyYW1ldGVyTGluZShjb2RlYmxvY2tMaW5lcyk7XG5cdFx0aWYgKCFwYXJhbWV0ZXJMaW5lKVxuXHRcdFx0Y29udGludWU7XG5cdFx0bGV0IGNvZGVibG9ja1BhcmFtZXRlcnMgPSBwYXJzZUNvZGVibG9ja1BhcmFtZXRlcnMocGFyYW1ldGVyTGluZSxwbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lKTtcblx0XHRcdFxuXHRcdGlmIChpc0V4Y2x1ZGVkKGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UscGx1Z2luLnNldHRpbmdzLmV4Y2x1ZGVkQ29kZWJsb2NrcykpXG5cdFx0XHRjb250aW51ZTtcblx0XHRcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzID0gYXdhaXQgcGx1Z2luQWRqdXN0UGFyYW1ldGVycyhjb2RlYmxvY2tQYXJhbWV0ZXJzLHBsdWdpbnMsY29kZWJsb2NrTGluZXMsc291cmNlUGF0aCk7XG5cdFx0Y29kZWJsb2Nrc1BhcmFtZXRlcnMucHVzaChjb2RlYmxvY2tQYXJhbWV0ZXJzKTtcblx0fVxuXHRyZXR1cm4ge2NvZGVibG9ja3NQYXJhbWV0ZXJzOiBjb2RlYmxvY2tzUGFyYW1ldGVycywgbmVzdGVkOiBjb2RlYmxvY2tzWzBdPyFhcnJheXNFcXVhbChjb2RlU2VjdGlvbixjb2RlYmxvY2tzWzBdKTp0cnVlfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlubGluZUNvZGUoY29kZVRleHQ6IHN0cmluZyk6IHtwYXJhbWV0ZXJzOiBJbmxpbmVDb2RlUGFyYW1ldGVycyB8IG51bGwsIHRleHQ6IHN0cmluZ30ge1xuXHRcblx0Y29uc3QgbWF0Y2ggPSAvXih7fSA/KT97KFtefV0qKX0gPyguKikkLy5leGVjKGNvZGVUZXh0KTtcblx0XG5cdGlmICghbWF0Y2g/LlsxXSAmJiAhKG1hdGNoPy5bMl0gJiYgbWF0Y2g/LlszXSkpXG5cdFx0cmV0dXJuIHtwYXJhbWV0ZXJzOiBudWxsLCB0ZXh0OiBcIlwifTtcblx0ZWxzZSBpZiAobWF0Y2g/LlsxXSlcblx0XHRyZXR1cm4ge3BhcmFtZXRlcnM6IG51bGwsIHRleHQ6IG1hdGNoWzBdLnN1YnN0cmluZyhtYXRjaFsxXS5sZW5ndGgpfTtcblx0ZWxzZVxuXHRcdHJldHVybiB7cGFyYW1ldGVyczogcGFyc2VJbmxpbmVDb2RlUGFyYW1ldGVycyhtYXRjaFsyXSksIHRleHQ6IG1hdGNoWzNdfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29kZWJsb2NrUGFyYW1ldGVycyhwYXJhbWV0ZXJMaW5lOiBzdHJpbmcsIHRoZW1lOiBDb2RlU3R5bGVyVGhlbWUpOiBDb2RlYmxvY2tQYXJhbWV0ZXJzIHtcblx0Y29uc3QgY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycyA9IHtcblx0XHRsYW5ndWFnZTogXCJcIixcblx0XHR0aXRsZTogXCJcIixcblx0XHRmb2xkOiB7XG5cdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdHBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdH0sXG5cdFx0bGluZU51bWJlcnM6IHtcblx0XHRcdGFsd2F5c0VuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0YWx3YXlzRGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0b2Zmc2V0OiAwLFxuXHRcdH0sXG5cdFx0bGluZVVud3JhcDoge1xuXHRcdFx0YWx3YXlzRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRhbHdheXNEaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRhY3RpdmVXcmFwOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhpZ2hsaWdodHM6IHtcblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0bGluZU51bWJlcnM6IFtdLFxuXHRcdFx0XHRwbGFpblRleHQ6IFtdLFxuXHRcdFx0XHRyZWd1bGFyRXhwcmVzc2lvbnM6IFtdLFxuXHRcdFx0fSxcblx0XHRcdGFsdGVybmF0aXZlOiB7fSxcblx0XHR9LFxuXHRcdGlnbm9yZTogZmFsc2UsXG5cdH07XG5cdGlmIChwYXJhbWV0ZXJMaW5lLnN0YXJ0c1dpdGgoXCJgYGBcIikpIHtcblx0XHRwYXJhbWV0ZXJMaW5lID0gcGFyYW1ldGVyTGluZS5yZXBsYWNlKC9eYGBgKyg/PVteYF18JCkvLFwiXCIpO1xuXHR9IGVsc2UgaWYgKHBhcmFtZXRlckxpbmUuc3RhcnRzV2l0aChcIn5+flwiKSkge1xuXHRcdHBhcmFtZXRlckxpbmUgPSBwYXJhbWV0ZXJMaW5lLnJlcGxhY2UoL15+fn4rKD89W15+XXwkKS8sXCJcIik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvZGVibG9ja1BhcmFtZXRlcnM7XG5cdH1cblx0Y29uc3QgbGFuZ3VhZ2VCcmVhayA9IHBhcmFtZXRlckxpbmUuaW5kZXhPZihcIiBcIik7XG5cdGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UgPSBwYXJhbWV0ZXJMaW5lLnNsaWNlKDAsbGFuZ3VhZ2VCcmVhayAhPT0gLTE/bGFuZ3VhZ2VCcmVhazpwYXJhbWV0ZXJMaW5lLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcblx0aWYgKGxhbmd1YWdlQnJlYWsgPT09IC0xKVxuXHRcdHJldHVybiBjb2RlYmxvY2tQYXJhbWV0ZXJzO1xuXHRjb25zdCBwYXJhbWV0ZXJTdHJpbmdzID0gcGFyYW1ldGVyTGluZS5zbGljZShsYW5ndWFnZUJyZWFrKzEpLm1hdGNoKC8oPzpbXlxcc1wiJ10rfFwiW15cIl0qXCJ8J1teJ10qJykrL2cpO1xuXHRpZiAoIXBhcmFtZXRlclN0cmluZ3MpXG5cdFx0cmV0dXJuIGNvZGVibG9ja1BhcmFtZXRlcnM7XG5cdHBhcmFtZXRlclN0cmluZ3MuZm9yRWFjaCgocGFyYW1ldGVyU3RyaW5nKSA9PiBwYXJzZUNvZGVibG9ja1BhcmFtZXRlclN0cmluZyhwYXJhbWV0ZXJTdHJpbmcsY29kZWJsb2NrUGFyYW1ldGVycyx0aGVtZSkpO1xuXHRyZXR1cm4gY29kZWJsb2NrUGFyYW1ldGVycztcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwbHVnaW5BZGp1c3RQYXJhbWV0ZXJzKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIHBsdWdpbnM6IFJlY29yZDxzdHJpbmcsRXh0ZXJuYWxQbHVnaW4+LCBjb2RlYmxvY2tMaW5lczogQXJyYXk8c3RyaW5nPiwgc291cmNlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxDb2RlYmxvY2tQYXJhbWV0ZXJzPiB7XG5cdGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlID09PSBcInByZXZpZXdcIikge1xuXHRcdGlmIChwbHVnaW5zPy5bXCJvYnNpZGlhbi1jb2RlLXByZXZpZXdcIl0/LmNvZGUgJiYgcGx1Z2lucz8uW1wib2JzaWRpYW4tY29kZS1wcmV2aWV3XCJdPy5hbmFseXplSGlnaExpZ2h0TGluZXMpIHtcblx0XHRcdGNvbnN0IGNvZGVQcmV2aWV3UGFyYW1zID0gYXdhaXQgcGx1Z2luc1tcIm9ic2lkaWFuLWNvZGUtcHJldmlld1wiXS5jb2RlKGNvZGVibG9ja0xpbmVzLnNsaWNlKDEsLTEpLmpvaW4oXCJcXG5cIiksc291cmNlUGF0aCk7XG5cdFx0XHRpZiAoIWNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMuYWx3YXlzRGlzYWJsZWQgJiYgIWNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMuYWx3YXlzRW5hYmxlZCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGNvZGVQcmV2aWV3UGFyYW1zLnN0YXJ0ID09PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMub2Zmc2V0ID0gY29kZVByZXZpZXdQYXJhbXMuc3RhcnQgLSAxO1xuXHRcdFx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0VuYWJsZWQgPSBCb29sZWFuKGNvZGVQcmV2aWV3UGFyYW1zLmxpbmVudW1iZXIpO1xuXHRcdFx0fVxuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5oaWdobGlnaHRzLmRlZmF1bHQubGluZU51bWJlcnMgPSBbLi4ubmV3IFNldChjb2RlYmxvY2tQYXJhbWV0ZXJzLmhpZ2hsaWdodHMuZGVmYXVsdC5saW5lTnVtYmVycy5jb25jYXQoQXJyYXkuZnJvbShwbHVnaW5zW1wib2JzaWRpYW4tY29kZS1wcmV2aWV3XCJdLmFuYWx5emVIaWdoTGlnaHRMaW5lcyhjb2RlUHJldmlld1BhcmFtcy5saW5lcyxjb2RlUHJldmlld1BhcmFtcy5oaWdobGlnaHQpLChbbnVtLF9dOiBbbnVtYmVyLGJvb2xlYW5dKT0+KG51bSkpKSldOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdFx0aWYgKGNvZGVibG9ja1BhcmFtZXRlcnMudGl0bGUgPT09IFwiXCIpXG5cdFx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMudGl0bGUgPSBjb2RlUHJldmlld1BhcmFtcy5maWxlUGF0aC5zcGxpdChcIlxcXFxcIikucG9wKCk/LnNwbGl0KFwiL1wiKS5wb3AoKSA/PyBcIlwiO1xuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSA9IGNvZGVQcmV2aWV3UGFyYW1zLmxhbmd1YWdlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlID09PSBcImluY2x1ZGVcIikge1xuXHRcdGlmIChcImZpbGUtaW5jbHVkZVwiIGluIHBsdWdpbnMpIHtcblx0XHRcdGNvbnN0IGZpbGVJbmNsdWRlTGFuZ3VhZ2UgPSBjb2RlYmxvY2tMaW5lc1swXS5tYXRjaCgvaW5jbHVkZSg/Ols6XFxzXSsoPzxsYW5nPlxcdyspKT8vKT8uZ3JvdXBzPy5sYW5nO1xuXHRcdFx0aWYgKHR5cGVvZiBmaWxlSW5jbHVkZUxhbmd1YWdlICE9PSBcInVuZGVmaW5lZFwiKVxuXHRcdFx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlID0gZmlsZUluY2x1ZGVMYW5ndWFnZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvZGVibG9ja1BhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBwYXJzZUlubGluZUNvZGVQYXJhbWV0ZXJzKHBhcmFtZXRlckxpbmU6IHN0cmluZyk6IElubGluZUNvZGVQYXJhbWV0ZXJzIHtcblx0Y29uc3QgaW5saW5lQ29kZVBhcmFtZXRlcnM6IElubGluZUNvZGVQYXJhbWV0ZXJzID0ge1xuXHRcdGxhbmd1YWdlOiBcIlwiLFxuXHRcdHRpdGxlOiBcIlwiLFxuXHRcdGljb246IGZhbHNlLFxuXHR9O1xuXHRjb25zdCBsYW5ndWFnZUJyZWFrID0gcGFyYW1ldGVyTGluZS5pbmRleE9mKFwiIFwiKTtcblx0aW5saW5lQ29kZVBhcmFtZXRlcnMubGFuZ3VhZ2UgPSBwYXJhbWV0ZXJMaW5lLnNsaWNlKDAsbGFuZ3VhZ2VCcmVhayAhPT0gLTE/bGFuZ3VhZ2VCcmVhazpwYXJhbWV0ZXJMaW5lLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcblx0aWYgKGxhbmd1YWdlQnJlYWsgPT09IC0xKVxuXHRcdHJldHVybiBpbmxpbmVDb2RlUGFyYW1ldGVycztcblx0Y29uc3QgcGFyYW1ldGVyU3RyaW5ncyA9IHBhcmFtZXRlckxpbmUuc2xpY2UobGFuZ3VhZ2VCcmVhaysxKS5tYXRjaCgvKD86W15cXHNcIiddK3xcIlteXCJdKlwifCdbXiddKicpKy9nKTtcblx0aWYgKCFwYXJhbWV0ZXJTdHJpbmdzKVxuXHRcdHJldHVybiBpbmxpbmVDb2RlUGFyYW1ldGVycztcblx0cGFyYW1ldGVyU3RyaW5ncy5mb3JFYWNoKChwYXJhbWV0ZXJTdHJpbmcpID0+IHBhcnNlSW5saW5lQ29kZVBhcmFtZXRlclN0cmluZyhwYXJhbWV0ZXJTdHJpbmcsaW5saW5lQ29kZVBhcmFtZXRlcnMpKTtcblx0cmV0dXJuIGlubGluZUNvZGVQYXJhbWV0ZXJzO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvZGVibG9ja1BhcmFtZXRlclN0cmluZyhwYXJhbWV0ZXJTdHJpbmc6IHN0cmluZywgY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycywgdGhlbWU6IENvZGVTdHlsZXJUaGVtZSk6IHZvaWQge1xuXHRpZiAocGFyYW1ldGVyU3RyaW5nLnN0YXJ0c1dpdGgoXCJ0aXRsZTpcIikpIHtcblx0XHRjb25zdCB0aXRsZU1hdGNoID0gLyhbXCInXT8pKFteXFwxXSspXFwxLy5leGVjKHBhcmFtZXRlclN0cmluZy5zbGljZShcInRpdGxlOlwiLmxlbmd0aCkpO1xuXHRcdGlmICh0aXRsZU1hdGNoKVxuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy50aXRsZSA9IHRpdGxlTWF0Y2hbMl0udHJpbSgpO1xuXHR9IGVsc2UgaWYgKHBhcmFtZXRlclN0cmluZy5zdGFydHNXaXRoKFwiZm9sZDpcIikpIHtcblx0XHRjb25zdCBmb2xkUGxhY2Vob2xkZXJNYXRjaCA9IC8oW1wiJ10/KShbXlxcMV0rKVxcMS8uZXhlYyhwYXJhbWV0ZXJTdHJpbmcuc2xpY2UoXCJmb2xkOlwiLmxlbmd0aCkpO1xuXHRcdGlmIChmb2xkUGxhY2Vob2xkZXJNYXRjaCkge1xuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5mb2xkID0ge1xuXHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRwbGFjZWhvbGRlcjogZm9sZFBsYWNlaG9sZGVyTWF0Y2hbMl0udHJpbSgpLFxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAocGFyYW1ldGVyU3RyaW5nID09PSBcImZvbGRcIikge1xuXHRcdGNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZCA9IHtcblx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRwbGFjZWhvbGRlcjogXCJcIixcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHBhcmFtZXRlclN0cmluZyA9PT0gXCJpZ25vcmVcIikge1xuXHRcdGNvZGVibG9ja1BhcmFtZXRlcnMuaWdub3JlID0gdHJ1ZTtcblx0fSBlbHNlIGlmIChwYXJhbWV0ZXJTdHJpbmcuc3RhcnRzV2l0aChcImxuOlwiKSkge1xuXHRcdHBhcmFtZXRlclN0cmluZyA9IHBhcmFtZXRlclN0cmluZy5zbGljZShcImxuOlwiLmxlbmd0aCk7XG5cdFx0aWYgKC9eXFxkKyQvLnRlc3QocGFyYW1ldGVyU3RyaW5nKSkge1xuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycyA9IHtcblx0XHRcdFx0YWx3YXlzRW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0YWx3YXlzRGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRvZmZzZXQ6IHBhcnNlSW50KHBhcmFtZXRlclN0cmluZyktMSxcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMgPSB7XG5cdFx0XHRcdGFsd2F5c0VuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdGFsd2F5c0Rpc2FibGVkOiBmYWxzZSxcblx0XHRcdFx0b2Zmc2V0OiAwLFxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKHBhcmFtZXRlclN0cmluZy50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIpIHtcblx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMgPSB7XG5cdFx0XHRcdGFsd2F5c0VuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRhbHdheXNEaXNhYmxlZDogdHJ1ZSxcblx0XHRcdFx0b2Zmc2V0OiAwLFxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAocGFyYW1ldGVyU3RyaW5nID09PSBcIndyYXBcIikge1xuXHRcdGNvZGVibG9ja1BhcmFtZXRlcnMubGluZVVud3JhcCA9IHtcblx0XHRcdGFsd2F5c0VuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0YWx3YXlzRGlzYWJsZWQ6IHRydWUsXG5cdFx0XHRhY3RpdmVXcmFwOiBmYWxzZSxcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHBhcmFtZXRlclN0cmluZyA9PT0gXCJ1bndyYXBcIikge1xuXHRcdGNvZGVibG9ja1BhcmFtZXRlcnMubGluZVVud3JhcCA9IHtcblx0XHRcdGFsd2F5c0VuYWJsZWQ6IHRydWUsXG5cdFx0XHRhbHdheXNEaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRhY3RpdmVXcmFwOiBmYWxzZSxcblx0XHR9O1xuXHR9IGVsc2UgaWYgKHBhcmFtZXRlclN0cmluZy5zdGFydHNXaXRoKFwidW53cmFwOlwiKSkge1xuXHRcdHBhcmFtZXRlclN0cmluZyA9IHBhcmFtZXRlclN0cmluZy5zbGljZShcInVud3JhcDpcIi5sZW5ndGgpO1xuXHRcdGlmIChwYXJhbWV0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKSA9PT0gXCJpbmFjdGl2ZVwiKSB7XG5cdFx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVVbndyYXAgPSB7XG5cdFx0XHRcdGFsd2F5c0VuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdGFsd2F5c0Rpc2FibGVkOiBmYWxzZSxcblx0XHRcdFx0YWN0aXZlV3JhcDogdHJ1ZSxcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMubGluZVVud3JhcCA9IHtcblx0XHRcdFx0YWx3YXlzRW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0YWx3YXlzRGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRhY3RpdmVXcmFwOiBmYWxzZSxcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVVbndyYXAgPSB7XG5cdFx0XHRcdGFsd2F5c0VuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRhbHdheXNEaXNhYmxlZDogdHJ1ZSxcblx0XHRcdFx0YWN0aXZlV3JhcDogZmFsc2UsXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBoaWdobGlnaHRNYXRjaCA9IC9eKFxcdyspOiguKykkLy5leGVjKHBhcmFtZXRlclN0cmluZyk7XG5cdFx0aWYgKGhpZ2hsaWdodE1hdGNoKSB7XG5cdFx0XHRjb25zdCBoaWdobGlnaHRzID0gcGFyc2VIaWdobGlnaHRlZExpbmVzKGhpZ2hsaWdodE1hdGNoWzJdKTtcblx0XHRcdGlmIChoaWdobGlnaHRNYXRjaFsxXSA9PT0gXCJobFwiKVxuXHRcdFx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmhpZ2hsaWdodHMuZGVmYXVsdCA9IGhpZ2hsaWdodHM7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYgKGhpZ2hsaWdodE1hdGNoWzFdIGluIHRoZW1lLmNvbG91cnMubGlnaHQuaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHMpXG5cdFx0XHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5oaWdobGlnaHRzLmFsdGVybmF0aXZlW2hpZ2hsaWdodE1hdGNoWzFdXSA9IGhpZ2hsaWdodHM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5mdW5jdGlvbiBwYXJzZUhpZ2hsaWdodGVkTGluZXMoaGlnaGxpZ2h0ZWRMaW5lc1N0cmluZzogc3RyaW5nKTogSGlnaGxpZ2h0cyB7XG5cdGNvbnN0IGhpZ2hsaWdodFJ1bGVzID0gaGlnaGxpZ2h0ZWRMaW5lc1N0cmluZy5zcGxpdChcIixcIik7XG5cdGNvbnN0IGxpbmVOdW1iZXJzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTtcblx0Y29uc3QgcGxhaW5UZXh0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblx0Y29uc3QgcmVndWxhckV4cHJlc3Npb25zOiBTZXQ8UmVnRXhwPiA9IG5ldyBTZXQoKTtcblx0aGlnaGxpZ2h0UnVsZXMuZm9yRWFjaChoaWdobGlnaHRSdWxlID0+IHtcblx0XHRpZiAoL1xcZCstXFxkKy8udGVzdChoaWdobGlnaHRSdWxlKSkgeyAvLyBOdW1iZXIgUmFuZ2Vcblx0XHRcdGNvbnN0IFtzdGFydCxlbmRdID0gaGlnaGxpZ2h0UnVsZS5zcGxpdChcIi1cIikubWFwKG51bSA9PiBwYXJzZUludChudW0pKTtcblx0XHRcdGlmIChzdGFydCAmJiBlbmQgJiYgc3RhcnQgPD0gZW5kKVxuXHRcdFx0XHRBcnJheS5mcm9tKHtsZW5ndGg6ZW5kLXN0YXJ0KzF9LCAoXyxudW0pID0+IG51bSArIHN0YXJ0KS5mb3JFYWNoKGxpbmVOdW1iZXIgPT4gbGluZU51bWJlcnMuYWRkKGxpbmVOdW1iZXIpKTtcblx0XHR9IGVsc2UgaWYgKC9eXFwvKC4qKVxcLyQvLnRlc3QoaGlnaGxpZ2h0UnVsZSkpIHsgLy8gUmVnZXhcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlZ3VsYXJFeHByZXNzaW9ucy5hZGQobmV3IFJlZ0V4cChoaWdobGlnaHRSdWxlLnJlcGxhY2UoL15cXC8oLiopXFwvJC8sXCIkMVwiKSkpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8vcGFzc1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoL1wiLipcIi8udGVzdChoaWdobGlnaHRSdWxlKSkgeyAvLyBQbGFpbiBUZXh0XG5cdFx0XHRwbGFpblRleHQuYWRkKGhpZ2hsaWdodFJ1bGUuc3Vic3RyaW5nKDEsaGlnaGxpZ2h0UnVsZS5sZW5ndGgtMSkpO1xuXHRcdH0gZWxzZSBpZiAoLycuKicvLnRlc3QoaGlnaGxpZ2h0UnVsZSkpIHsgLy8gUGxhaW4gVGV4dFxuXHRcdFx0cGxhaW5UZXh0LmFkZChoaWdobGlnaHRSdWxlLnN1YnN0cmluZygxLGhpZ2hsaWdodFJ1bGUubGVuZ3RoLTEpKTtcblx0XHR9IGVsc2UgaWYgKC9cXEQvLnRlc3QoaGlnaGxpZ2h0UnVsZSkpIHsgLy8gUGxhaW4gVGV4dFxuXHRcdFx0cGxhaW5UZXh0LmFkZChoaWdobGlnaHRSdWxlKTtcblx0XHR9IGVsc2UgaWYgKC9cXGQrLy50ZXN0KGhpZ2hsaWdodFJ1bGUpKSB7IC8vIFBsYWluIE51bWJlclxuXHRcdFx0bGluZU51bWJlcnMuYWRkKHBhcnNlSW50KGhpZ2hsaWdodFJ1bGUpKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdGxpbmVOdW1iZXJzOiBbLi4ubGluZU51bWJlcnNdLFxuXHRcdHBsYWluVGV4dDogWy4uLnBsYWluVGV4dF0sXG5cdFx0cmVndWxhckV4cHJlc3Npb25zOiBbLi4ucmVndWxhckV4cHJlc3Npb25zXSxcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0V4Y2x1ZGVkKGxhbmd1YWdlOiBzdHJpbmcsIGV4Y2x1ZGVkTGFuZ3VhZ2VzU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIHBhcnNlUmVnZXhFeGNsdWRlZExhbmd1YWdlcyhleGNsdWRlZExhbmd1YWdlc1N0cmluZykuc29tZShyZWdleEV4Y2x1ZGVkTGFuZ3VhZ2UgPT4ge1xuXHRcdGlmIChyZWdleEV4Y2x1ZGVkTGFuZ3VhZ2UudGVzdChsYW5ndWFnZSkpXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0fSk7XG59XG5mdW5jdGlvbiBwYXJzZVJlZ2V4RXhjbHVkZWRMYW5ndWFnZXMoZXhjbHVkZWRMYW5ndWFnZXNTdHJpbmc6IHN0cmluZyk6IEFycmF5PFJlZ0V4cD4ge1xuXHRyZXR1cm4gZXhjbHVkZWRMYW5ndWFnZXNTdHJpbmcuc3BsaXQoXCIsXCIpLm1hcChyZWdleExhbmd1YWdlID0+IG5ldyBSZWdFeHAoYF4ke3JlZ2V4TGFuZ3VhZ2UudHJpbSgpLnJlcGxhY2UoL1xcKi9nLFwiLitcIil9JGAsXCJpXCIpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlSW5saW5lQ29kZVBhcmFtZXRlclN0cmluZyhwYXJhbWV0ZXJTdHJpbmc6IHN0cmluZywgaW5saW5lQ29kZVBhcmFtZXRlcnM6IElubGluZUNvZGVQYXJhbWV0ZXJzKTogdm9pZCB7XG5cdGlmIChwYXJhbWV0ZXJTdHJpbmcuc3RhcnRzV2l0aChcInRpdGxlOlwiKSkge1xuXHRcdGNvbnN0IHRpdGxlTWF0Y2ggPSAvKFtcIiddPykoW15cXDFdKylcXDEvLmV4ZWMocGFyYW1ldGVyU3RyaW5nLnNsaWNlKFwidGl0bGU6XCIubGVuZ3RoKSk7XG5cdFx0aWYgKHRpdGxlTWF0Y2gpXG5cdFx0XHRpbmxpbmVDb2RlUGFyYW1ldGVycy50aXRsZSA9IHRpdGxlTWF0Y2hbMl0udHJpbSgpO1xuXHR9IGVsc2UgaWYgKHBhcmFtZXRlclN0cmluZyA9PT0gXCJpY29uXCIgfHwgKHBhcmFtZXRlclN0cmluZy5zdGFydHNXaXRoKFwiaWNvbjpcIikgJiYgcGFyYW1ldGVyU3RyaW5nLnRvTG93ZXJDYXNlKCkgPT09IFwiaWNvbjp0cnVlXCIpKSB7XG5cdFx0aW5saW5lQ29kZVBhcmFtZXRlcnMuaWNvbiA9IHRydWU7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtZXRlckxpbmUoY29kZWJsb2NrTGluZXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgb3BlbmluZ0NvZGVibG9ja0xpbmUgPSBnZXRPcGVuaW5nTGluZShjb2RlYmxvY2tMaW5lcyk7XG5cdGlmIChvcGVuaW5nQ29kZWJsb2NrTGluZSAmJiAob3BlbmluZ0NvZGVibG9ja0xpbmUgIT09IGNvZGVibG9ja0xpbmVzWzBdIHx8IC8+XFxzKig/Oltgfl0pLy50ZXN0KG9wZW5pbmdDb2RlYmxvY2tMaW5lKSkpXG5cdFx0b3BlbmluZ0NvZGVibG9ja0xpbmUgPSBjbGVhblBhcmFtZXRlckxpbmUob3BlbmluZ0NvZGVibG9ja0xpbmUpO1xuXHRyZXR1cm4gb3BlbmluZ0NvZGVibG9ja0xpbmU7XG59XG5mdW5jdGlvbiBnZXRPcGVuaW5nTGluZShjb2RlYmxvY2tMaW5lczogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBjb2RlYmxvY2tMaW5lcy5maW5kKChsaW5lOiBzdHJpbmcpPT5Cb29sZWFuKHRlc3RPcGVuaW5nTGluZShsaW5lKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RPcGVuaW5nTGluZShjb2RlYmxvY2tMaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBsaW5lTWF0Y2ggPSAvXihcXHMqKD86PlxccyopKikoYGBgK3x+fn4rKS8uZXhlYyhjb2RlYmxvY2tMaW5lKTtcblx0aWYgKCFsaW5lTWF0Y2gpXG5cdFx0cmV0dXJuIFwiXCI7XG5cdGlmIChjb2RlYmxvY2tMaW5lLmluZGV4T2YobGluZU1hdGNoWzJdLGxpbmVNYXRjaFsxXS5sZW5ndGgrbGluZU1hdGNoWzJdLmxlbmd0aCsxKT09PS0xKVxuXHRcdHJldHVybiBsaW5lTWF0Y2hbMl07XG5cdHJldHVybiBcIlwiO1xufVxuZnVuY3Rpb24gY2xlYW5QYXJhbWV0ZXJMaW5lKHBhcmFtZXRlckxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiB0cmltUGFyYW1ldGVyTGluZShwYXJhbWV0ZXJMaW5lKS5yZXBsYWNlKC9eKD86PlxccyopKihgYGArfH5+fispLyxcIiQxXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1QYXJhbWV0ZXJMaW5lKHBhcmFtZXRlckxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBwYXJhbWV0ZXJMaW5lLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEZpbGVDb250ZW50TGluZXMoc291cmNlUGF0aDogc3RyaW5nLCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pOiBQcm9taXNlPEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQ+IHtcblx0Y29uc3QgZmlsZSA9IHBsdWdpbi5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHNvdXJjZVBhdGgpO1xuXHRpZiAoIWZpbGUpIHtcblx0XHRjb25zb2xlLmVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtzb3VyY2VQYXRofWApO1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IHBsdWdpbi5hcHAudmF1bHQuY2FjaGVkUmVhZCg8VEZpbGU+IGZpbGUpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlYWRpbmcgZmlsZTogJHtlcnJvci5tZXNzYWdlfWApO1xuXHRcdHJldHVybiBcIlwiO1xuXHR9KTtcblx0aWYgKCFmaWxlQ29udGVudClcblx0XHRyZXR1cm47XG5cdHJldHVybiBmaWxlQ29udGVudC5zcGxpdCgvXFxuL2cpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlzRXF1YWwoYXJyYXkxOiBBcnJheTx1bmtub3duPixhcnJheTI6IEFycmF5PHVua25vd24+KTogYm9vbGVhbiB7XG5cdHJldHVybiBhcnJheTEubGVuZ3RoID09PSBhcnJheTIubGVuZ3RoICYmIGFycmF5MS5ldmVyeSgoZWwpID0+IGFycmF5Mi5pbmNsdWRlcyhlbCkpO1xufVxuIiwgImltcG9ydCB7IExBTkdVQUdFX05BTUVTLCBDb2RlU3R5bGVyVGhlbWVTZXR0aW5ncyB9IGZyb20gXCIuL1NldHRpbmdzXCI7XG5pbXBvcnQgeyBDb2RlYmxvY2tQYXJhbWV0ZXJzLCBIaWdobGlnaHRzLCBJbmxpbmVDb2RlUGFyYW1ldGVycyB9IGZyb20gXCIuL0NvZGVibG9ja1BhcnNpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhlYWRlcihjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzLCB0aGVtZVNldHRpbmdzOiBDb2RlU3R5bGVyVGhlbWVTZXR0aW5ncywgbGFuZ3VhZ2VJY29uczogUmVjb3JkPHN0cmluZyxzdHJpbmc+KTogSFRNTEVsZW1lbnQge1xuXHRjb25zdCBoZWFkZXJDb250YWluZXIgPSBjcmVhdGVEaXYoe2NsczogYGNvZGUtc3R5bGVyLWhlYWRlci1jb250YWluZXIkeyhjb2RlYmxvY2tQYXJhbWV0ZXJzLmZvbGQuZW5hYmxlZCB8fCBjb2RlYmxvY2tQYXJhbWV0ZXJzLnRpdGxlICE9PSBcIlwiKT9cIi1zcGVjaWZpY1wiOlwiXCJ9YH0pO1xuXHRpZiAoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSAhPT0gXCJcIil7XG5cdFx0Y29uc3QgaWNvblVSTCA9IGdldExhbmd1YWdlSWNvbihjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlLGxhbmd1YWdlSWNvbnMpO1xuXHRcdGlmIChpY29uVVJMICE9PSBudWxsKVxuXHRcdFx0aGVhZGVyQ29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUltYWdlV3JhcHBlcihpY29uVVJMLGNyZWF0ZURpdigpKSk7XG5cdFx0aGVhZGVyQ29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZURpdih7Y2xzOiBgY29kZS1zdHlsZXItaGVhZGVyLWxhbmd1YWdlLXRhZy0ke2NvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2V9YCwgdGV4dDogZ2V0TGFuZ3VhZ2VUYWcoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSl9KSk7XG5cdH1cblx0XG5cdGxldCBoZWFkZXJUZXh0ID0gXCJcIjtcblx0aWYgKGNvZGVibG9ja1BhcmFtZXRlcnMudGl0bGUgIT09IFwiXCIpXG5cdFx0aGVhZGVyVGV4dCA9IGNvZGVibG9ja1BhcmFtZXRlcnMudGl0bGU7XG5cdGVsc2UgaWYgKGNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5lbmFibGVkKVxuXHRcdGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmZvbGQucGxhY2Vob2xkZXIhPT1cIlwiKVxuXHRcdFx0aGVhZGVyVGV4dCA9IGNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5wbGFjZWhvbGRlcjtcblx0XHRlbHNlXG5cdFx0XHRoZWFkZXJUZXh0ID0gdGhlbWVTZXR0aW5ncy5oZWFkZXIuY29sbGFwc2VQbGFjZWhvbGRlciE9PVwiXCI/dGhlbWVTZXR0aW5ncy5oZWFkZXIuY29sbGFwc2VQbGFjZWhvbGRlcjpcIkNvbGxhcHNlZCBDb2RlXCI7XG5cdGhlYWRlckNvbnRhaW5lci5hcHBlbmRDaGlsZChjcmVhdGVEaXYoe2NsczogXCJjb2RlLXN0eWxlci1oZWFkZXItdGV4dFwiLCB0ZXh0OiBoZWFkZXJUZXh0fSkpOyAgIFxuXG5cdHJldHVybiBoZWFkZXJDb250YWluZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5saW5lT3BlbmVyKGlubGluZUNvZGVQYXJhbWV0ZXJzOiBJbmxpbmVDb2RlUGFyYW1ldGVycywgbGFuZ3VhZ2VJY29uczogUmVjb3JkPHN0cmluZyxzdHJpbmc+LCBjb250YWluZXJDbGFzc2VzOiBBcnJheTxzdHJpbmc+ID0gW1wiY29kZS1zdHlsZXItaW5saW5lLW9wZW5lclwiXSk6IEhUTUxFbGVtZW50IHtcblx0Y29uc3Qgb3BlbmVyQ29udGFpbmVyID0gY3JlYXRlU3Bhbih7Y2xzOiBjb250YWluZXJDbGFzc2VzLmpvaW4oXCIgXCIpfSk7XG5cdGlmIChpbmxpbmVDb2RlUGFyYW1ldGVycy5pY29uKSB7XG5cdFx0Y29uc3QgaWNvblVSTCA9IGdldExhbmd1YWdlSWNvbihpbmxpbmVDb2RlUGFyYW1ldGVycy5sYW5ndWFnZSxsYW5ndWFnZUljb25zKTtcblx0XHRpZiAoaWNvblVSTCAhPT0gbnVsbClcblx0XHRcdG9wZW5lckNvbnRhaW5lci5hcHBlbmRDaGlsZChjcmVhdGVJbWFnZVdyYXBwZXIoaWNvblVSTCxjcmVhdGVTcGFuKCksXCJjb2RlLXN0eWxlci1pbmxpbmUtaWNvblwiKSk7XG5cdH1cblx0aWYgKGlubGluZUNvZGVQYXJhbWV0ZXJzLnRpdGxlKVxuXHRcdG9wZW5lckNvbnRhaW5lci5hcHBlbmRDaGlsZChjcmVhdGVTcGFuKHtjbHM6IFwiY29kZS1zdHlsZXItaW5saW5lLXRpdGxlXCIsIHRleHQ6IGlubGluZUNvZGVQYXJhbWV0ZXJzLnRpdGxlfSkpO1xuXHRyZXR1cm4gb3BlbmVyQ29udGFpbmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlSW1hZ2VXcmFwcGVyKGljb25VUkw6IHN0cmluZywgaW1hZ2VXcmFwcGVyOiBIVE1MRWxlbWVudCwgaW1nQ2xhc3MgPSBcImNvZGUtc3R5bGVyLWljb25cIik6IEhUTUxFbGVtZW50IHtcblx0Y29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcblx0aW1nLmNsYXNzTGlzdC5hZGQoaW1nQ2xhc3MpO1xuXHRpbWcuc3JjID0gaWNvblVSTDtcblx0aW1hZ2VXcmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XG5cdHJldHVybiBpbWFnZVdyYXBwZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYW5ndWFnZUljb24obGFuZ3VhZ2U6IHN0cmluZywgbGFuZ3VhZ2VJY29uczogUmVjb3JkPHN0cmluZyxzdHJpbmc+KSB7XG5cdGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2VUYWcobGFuZ3VhZ2UpO1xuXHRpZiAobGFuZ3VhZ2UgaW4gbGFuZ3VhZ2VJY29ucylcblx0XHRyZXR1cm4gbGFuZ3VhZ2VJY29uc1tsYW5ndWFnZV07XG5cdHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VUYWcobGFuZ3VhZ2U6IHN0cmluZykge1xuXHRpZiAobGFuZ3VhZ2UgaW4gTEFOR1VBR0VfTkFNRVMpXG5cdFx0cmV0dXJuIExBTkdVQUdFX05BTUVTW2xhbmd1YWdlXTtcblx0ZWxzZSBpZiAobGFuZ3VhZ2UgIT09IFwiXCIpXG5cdFx0cmV0dXJuIGxhbmd1YWdlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbGFuZ3VhZ2Uuc2xpY2UoMSk7XG5cdHJldHVybiBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGluZUNsYXNzKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIGxpbmVOdW1iZXI6IG51bWJlciwgbGluZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG5cdGxldCBjbGFzc0xpc3Q6IEFycmF5PHN0cmluZz4gPSBbXTtcblx0aWYgKGNvZGVibG9ja1BhcmFtZXRlcnMuaGlnaGxpZ2h0cy5kZWZhdWx0LmxpbmVOdW1iZXJzLmluY2x1ZGVzKGxpbmVOdW1iZXIrY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5vZmZzZXQpIHx8IGNvZGVibG9ja1BhcmFtZXRlcnMuaGlnaGxpZ2h0cy5kZWZhdWx0LnBsYWluVGV4dC5zb21lKHRleHQgPT4gbGluZS5pbmRleE9mKHRleHQpID4gLTEpIHx8IGNvZGVibG9ja1BhcmFtZXRlcnMuaGlnaGxpZ2h0cy5kZWZhdWx0LnJlZ3VsYXJFeHByZXNzaW9ucy5zb21lKHJlZ0V4cCA9PiByZWdFeHAudGVzdChsaW5lKSkpXG5cdFx0Y2xhc3NMaXN0LnB1c2goXCJjb2RlLXN0eWxlci1saW5lLWhpZ2hsaWdodGVkXCIpO1xuXHRPYmplY3QuZW50cmllcyhjb2RlYmxvY2tQYXJhbWV0ZXJzLmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmUpLmZvckVhY2goKFthbHRlcm5hdGl2ZUhpZ2hsaWdodCxoaWdobGlnaHRlZExpbmVzXTogW3N0cmluZyxIaWdobGlnaHRzXSkgPT4ge1xuXHRcdGlmIChoaWdobGlnaHRlZExpbmVzLmxpbmVOdW1iZXJzLmluY2x1ZGVzKGxpbmVOdW1iZXIrY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5vZmZzZXQpIHx8IGhpZ2hsaWdodGVkTGluZXMucGxhaW5UZXh0LnNvbWUodGV4dCA9PiBsaW5lLmluZGV4T2YodGV4dCkgPiAtMSkgfHwgaGlnaGxpZ2h0ZWRMaW5lcy5yZWd1bGFyRXhwcmVzc2lvbnMuc29tZShyZWdFeHAgPT4gcmVnRXhwLnRlc3QobGluZSkpKVxuXHRcdFx0Y2xhc3NMaXN0LnB1c2goYGNvZGUtc3R5bGVyLWxpbmUtaGlnaGxpZ2h0ZWQtJHthbHRlcm5hdGl2ZUhpZ2hsaWdodC5yZXBsYWNlKC9cXHMrL2csIFwiLVwiKS50b0xvd2VyQ2FzZSgpfWApO1xuXHR9KTtcblx0aWYgKGNsYXNzTGlzdC5sZW5ndGggPT09IDApXG5cdFx0Y2xhc3NMaXN0ID0gW1wiY29kZS1zdHlsZXItbGluZVwiXTtcblx0cmV0dXJuIGNsYXNzTGlzdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lTnVtYmVyRGlzcGxheShjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0bGV0IGxpbmVOdW1iZXJEaXNwbGF5ID0gXCJcIjtcblx0aWYgKCFjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0VuYWJsZWQgJiYgY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5hbHdheXNEaXNhYmxlZClcblx0XHRsaW5lTnVtYmVyRGlzcGxheSA9IFwiLWhpZGVcIjtcblx0ZWxzZSBpZiAoY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5hbHdheXNFbmFibGVkICYmICFjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0Rpc2FibGVkKVxuXHRcdGxpbmVOdW1iZXJEaXNwbGF5ID0gXCItc3BlY2lmaWNcIjtcblx0cmV0dXJuIGxpbmVOdW1iZXJEaXNwbGF5O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uLCBDYWNoZWRNZXRhZGF0YSwgc2FuaXRpemVIVE1MVG9Eb20sIEZyb250TWF0dGVyQ2FjaGUsIE1hcmtkb3duUmVuZGVyZXIsIENvbXBvbmVudCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHt1bmlmaWVkfSBmcm9tIFwidW5pZmllZFwiO1xuaW1wb3J0IHt2aXNpdH0gZnJvbSBcInVuaXN0LXV0aWwtdmlzaXRcIjtcbmltcG9ydCByZW1hcmtQYXJzZSBmcm9tIFwicmVtYXJrLXBhcnNlXCI7XG5cbmltcG9ydCBDb2RlU3R5bGVyUGx1Z2luIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB7IFRSQU5TSVRJT05fTEVOR1RIIH0gZnJvbSBcIi4vU2V0dGluZ3NcIjtcbmltcG9ydCB7IENvZGVibG9ja1BhcmFtZXRlcnMsIElubGluZUNvZGVQYXJhbWV0ZXJzLCBnZXRGaWxlQ29udGVudExpbmVzLCBpc0V4Y2x1ZGVkLCBwYXJzZUNvZGVibG9ja1NvdXJjZSwgcGFyc2VJbmxpbmVDb2RlIH0gZnJvbSBcIi4vQ29kZWJsb2NrUGFyc2luZ1wiO1xuaW1wb3J0IHsgY3JlYXRlSGVhZGVyLCBjcmVhdGVJbmxpbmVPcGVuZXIsIGdldExpbmVDbGFzcyBhcyBnZXRMaW5lQ2xhc3NlcywgZ2V0TGluZU51bWJlckRpc3BsYXkgfSBmcm9tIFwiLi9Db2RlYmxvY2tEZWNvcmF0aW5nXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkaW5nVmlld0NvZGVibG9ja0RlY29yYXRpbmdQb3N0UHJvY2Vzc29yKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCB7c291cmNlUGF0aCxnZXRTZWN0aW9uSW5mbyxmcm9udG1hdHRlcn06IHtzb3VyY2VQYXRoOiBzdHJpbmcsIGdldFNlY3Rpb25JbmZvOiAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uIHwgbnVsbCwgZnJvbnRtYXR0ZXI6IEZyb250TWF0dGVyQ2FjaGUgfCB1bmRlZmluZWR9LCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4sIGVkaXRpbmdFbWJlZHMgPSBmYWxzZSkge1xuXHRjb25zdCBjYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsID0gcGx1Z2luLmFwcC5tZXRhZGF0YUNhY2hlLmdldENhY2hlKHNvdXJjZVBhdGgpO1xuXHRpZiAoIXNvdXJjZVBhdGggfHwgIWVsZW1lbnQgfHwgKGZyb250bWF0dGVyID8/IGNhY2hlPy5mcm9udG1hdHRlcik/LltcImNvZGUtc3R5bGVyLWlnbm9yZVwiXSA9PT0gdHJ1ZSlcblx0XHRyZXR1cm47XG5cblx0ZWRpdGluZ0VtYmVkcyA9IGVkaXRpbmdFbWJlZHMgfHwgQm9vbGVhbihlbGVtZW50Lm1hdGNoUGFyZW50KFwiLmNtLWVtYmVkLWJsb2NrXCIpKTtcblx0Y29uc3Qgc3BlY2lmaWMgPSAhZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLnZpZXctY29udGVudCA+ICpcIik7XG5cdGNvbnN0IHByaW50aW5nID0gQm9vbGVhbihlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXYucHJpbnQgPiAqXCIpKTtcblx0aWYgKHByaW50aW5nICYmICFwbHVnaW4uc2V0dGluZ3MuZGVjb3JhdGVQcmludClcblx0XHRyZXR1cm47XG5cblx0Y29uc3QgY29kZWJsb2NrUHJlRWxlbWVudHM6IEFycmF5PEhUTUxFbGVtZW50PiA9IGF3YWl0IGdldENvZGVibG9ja1ByZUVsZW1lbnRzKGVsZW1lbnQsc3BlY2lmaWMsZWRpdGluZ0VtYmVkcyk7XG5cdGlmIChjb2RlYmxvY2tQcmVFbGVtZW50cy5sZW5ndGggPT09IDAgJiYgIShlZGl0aW5nRW1iZWRzICYmIHNwZWNpZmljKSlcblx0XHRyZXR1cm47XG5cblx0Y29uc3QgY29kZWJsb2NrU2VjdGlvbkluZm86IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uIHwgbnVsbCA9IGdldFNlY3Rpb25JbmZvKGNvZGVibG9ja1ByZUVsZW1lbnRzWzBdKTtcblx0aWYgKGNvZGVibG9ja1NlY3Rpb25JbmZvICYmIHNwZWNpZmljICYmICFlZGl0aW5nRW1iZWRzKVxuXHRcdGF3YWl0IHJlbmRlclNwZWNpZmljUmVhZGluZ1NlY3Rpb24oY29kZWJsb2NrUHJlRWxlbWVudHMsc291cmNlUGF0aCxjb2RlYmxvY2tTZWN0aW9uSW5mbyxwbHVnaW4pO1xuXHRlbHNlIGlmIChzcGVjaWZpYyAmJiAhcHJpbnRpbmcpXG5cdFx0YXdhaXQgcmV0cmlnZ2VyUHJvY2Vzc29yKGVsZW1lbnQse3NvdXJjZVBhdGgsZ2V0U2VjdGlvbkluZm8sZnJvbnRtYXR0ZXJ9LHBsdWdpbixlZGl0aW5nRW1iZWRzKTtcblx0ZWxzZVxuXHRcdGF3YWl0IHJlbmRlckRvY3VtZW50KGNvZGVibG9ja1ByZUVsZW1lbnRzLHNvdXJjZVBhdGgsY2FjaGUsZWRpdGluZ0VtYmVkcyxwcmludGluZyxwbHVnaW4pO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRpbmdWaWV3SW5saW5lRGVjb3JhdGluZ1Bvc3RQcm9jZXNzb3IoZWxlbWVudDogSFRNTEVsZW1lbnQsIHtzb3VyY2VQYXRofToge3NvdXJjZVBhdGg6IHN0cmluZywgZ2V0U2VjdGlvbkluZm86IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24gfCBudWxsLCBmcm9udG1hdHRlcjogRnJvbnRNYXR0ZXJDYWNoZSB8IHVuZGVmaW5lZH0sIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbikge1xuXHRpZiAoIXNvdXJjZVBhdGggfHwgIWVsZW1lbnQpXG5cdFx0cmV0dXJuO1xuXHRmb3IgKGNvbnN0IGlubGluZUNvZGVFbGVtZW50IG9mIEFycmF5LmZyb20oZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOm5vdChwcmUpID4gY29kZVwiKSkpIHtcblx0XHRhd2FpdCByZW1ha2VJbmxpbmVDb2RlKGlubGluZUNvZGVFbGVtZW50IGFzIEhUTUxFbGVtZW50LHBsdWdpbik7XG5cdH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95UmVhZGluZ01vZGVFbGVtZW50cygpOiB2b2lkIHtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5jb2RlLXN0eWxlci1wcmUtcGFyZW50XCIpLmZvckVhY2goY29kZWJsb2NrUHJlUGFyZW50ID0+IHtcblx0XHRjb2RlYmxvY2tQcmVQYXJlbnQuY2xhc3NMaXN0LnJlbW92ZShcImNvZGUtc3R5bGVyLXByZS1wYXJlbnRcIik7XG5cdH0pO1xuXHRbXG5cdFx0Li4uQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwicHJlLmNvZGUtc3R5bGVyLXByZSBkaXZbY2xhc3NePSdjb2RlLXN0eWxlci1oZWFkZXItY29udGFpbmVyJ11cIikpLFxuXHRcdC4uLkFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInByZS5jb2RlLXN0eWxlci1wcmUgZGl2W2NsYXNzXj0nY29kZS1zdHlsZXItbGluZS1udW1iZXInXVwiKSksXG5cdFx0Li4uQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOm5vdChwcmUpID4gY29kZSBzcGFuLmNvZGUtc3R5bGVyLWlubGluZS1vcGVuZXJcIikpLFxuXHRdLmZvckVhY2goZWxlbWVudCA9PiBlbGVtZW50LnJlbW92ZSgpKTtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInByZS5jb2RlLXN0eWxlci1wcmVcIikuZm9yRWFjaCgoY29kZWJsb2NrUHJlRWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcblx0XHRjb2RlYmxvY2tQcmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2RlLXN0eWxlci1wcmVcIik7XG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY29kZS1zdHlsZXItY29sbGFwc2VkXCIpO1xuXHRcdGNvZGVibG9ja1ByZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCItLXRydWUtaGVpZ2h0XCIpO1xuXHRcdGNvZGVibG9ja1ByZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCItLWxpbmUtbnVtYmVyLW1hcmdpblwiKTtcblx0XHRjb2RlYmxvY2tQcmVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwibWF4LWhlaWdodFwiKTtcblx0XHRjb2RlYmxvY2tQcmVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwid2hpdGUtc3BhY2VcIik7XG5cdH0pO1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwicHJlID4gY29kZSB+IGNvZGUubGFuZ3VhZ2Utb3V0cHV0XCIpLmZvckVhY2goKGV4ZWN1dGVDb2RlT3V0cHV0OiBIVE1MRWxlbWVudCkgPT4ge1xuXHRcdGV4ZWN1dGVDb2RlT3V0cHV0LmNsYXNzTGlzdC5yZW1vdmUoXCJleGVjdXRlLWNvZGUtb3V0cHV0XCIpO1xuXHRcdGV4ZWN1dGVDb2RlT3V0cHV0LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiLS10cnVlLWhlaWdodFwiKTtcblx0XHRleGVjdXRlQ29kZU91dHB1dC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIm1heC1oZWlnaHRcIik7XG5cdH0pO1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwicHJlID4gY29kZTpudGgtb2YtdHlwZSgxKVwiKS5mb3JFYWNoKChjb2RlYmxvY2tDb2RlRWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcblx0XHRjb2RlYmxvY2tDb2RlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIi0tdHJ1ZS1oZWlnaHRcIik7XG5cdFx0Y29kZWJsb2NrQ29kZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCItLWxpbmUtd3JhcHBpbmdcIik7XG5cdFx0Y29kZWJsb2NrQ29kZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCItLWxpbmUtYWN0aXZlLXdyYXBwaW5nXCIpO1xuXHRcdGNvZGVibG9ja0NvZGVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwibWF4LWhlaWdodFwiKTtcblx0XHRjb2RlYmxvY2tDb2RlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIndoaXRlLXNwYWNlXCIpO1xuXHRcdGNvZGVibG9ja0NvZGVFbGVtZW50LmlubmVySFRNTCA9IEFycmF5LmZyb20oY29kZWJsb2NrQ29kZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcImNvZGUgPiBbY2xhc3MqPVxcXCJjb2RlLXN0eWxlci1saW5lXFxcIl1cIikpLnJlZHVjZSgocmVjb25zdHJ1Y3RlZENvZGVibG9ja0xpbmVzOiBBcnJheTxzdHJpbmc+LCBjb2RlYmxvY2tMaW5lOiBIVE1MRWxlbWVudCk6IEFycmF5PHN0cmluZz4gPT4ge1xuXHRcdFx0Y29uc3QgY29kZWJsb2NrTGluZVRleHQgPSAoY29kZWJsb2NrTGluZS5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50KTtcblx0XHRcdGlmIChjb2RlYmxvY2tMaW5lVGV4dClcblx0XHRcdFx0cmVjb25zdHJ1Y3RlZENvZGVibG9ja0xpbmVzLnB1c2goY29kZWJsb2NrTGluZVRleHQuaW5uZXJIVE1MKTtcblx0XHRcdHJldHVybiByZWNvbnN0cnVjdGVkQ29kZWJsb2NrTGluZXM7XG5cdFx0fSxbXSkuam9pbihcIlxcblwiKStcIlxcblwiO1xuXHR9KTtcblx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpub3QocHJlKSA+IGNvZGVcIikuZm9yRWFjaCgoaW5saW5lQ29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG5cdFx0aW5saW5lQ29kZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImNvZGUtc3R5bGVyLWhpZ2hsaWdodGVkXCIpO1xuXHRcdGlubGluZUNvZGVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2RlLXN0eWxlci1oaWdobGlnaHQtaWdub3JlXCIpO1xuXHRcdGlubGluZUNvZGVFbGVtZW50LmlubmVyVGV4dCA9IGlubGluZUNvZGVFbGVtZW50LmdldEF0dHJpYnV0ZShcInBhcmFtZXRlcnNcIikgKyBpbmxpbmVDb2RlRWxlbWVudC5pbm5lclRleHQ7XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZW5kZXJTcGVjaWZpY1JlYWRpbmdTZWN0aW9uKGNvZGVibG9ja1ByZUVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudD4sIHNvdXJjZVBhdGg6IHN0cmluZywgY29kZWJsb2NrU2VjdGlvbkluZm86IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uLCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgY29kZWJsb2Nrc1BhcmFtZXRlcnMgPSAoYXdhaXQgcGFyc2VDb2RlYmxvY2tTb3VyY2UoQXJyYXkuZnJvbSh7bGVuZ3RoOiBjb2RlYmxvY2tTZWN0aW9uSW5mby5saW5lRW5kLWNvZGVibG9ja1NlY3Rpb25JbmZvLmxpbmVTdGFydCsxfSwgKF8sbnVtKSA9PiBudW0gKyBjb2RlYmxvY2tTZWN0aW9uSW5mby5saW5lU3RhcnQpLm1hcCgobGluZU51bWJlcik9PmNvZGVibG9ja1NlY3Rpb25JbmZvLnRleHQuc3BsaXQoXCJcXG5cIilbbGluZU51bWJlcl0pLHNvdXJjZVBhdGgscGx1Z2luKSkuY29kZWJsb2Nrc1BhcmFtZXRlcnM7XG5cdGlmIChjb2RlYmxvY2tQcmVFbGVtZW50cy5sZW5ndGggIT09IGNvZGVibG9ja3NQYXJhbWV0ZXJzLmxlbmd0aClcblx0XHRyZXR1cm47XG5cdGZvciAoY29uc3QgW2tleSxjb2RlYmxvY2tQcmVFbGVtZW50XSBvZiBjb2RlYmxvY2tQcmVFbGVtZW50cy5lbnRyaWVzKCkpIHtcblx0XHRjb25zdCBjb2RlYmxvY2tQYXJhbWV0ZXJzID0gY29kZWJsb2Nrc1BhcmFtZXRlcnNba2V5XTtcblx0XHRjb25zdCBjb2RlYmxvY2tDb2RlRWxlbWVudCA9IGNvZGVibG9ja1ByZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcInByZSA+IGNvZGVcIik7XG5cdFx0aWYgKCFjb2RlYmxvY2tDb2RlRWxlbWVudClcblx0XHRcdHJldHVybjtcblx0XHRpZiAoQXJyYXkuZnJvbShjb2RlYmxvY2tDb2RlRWxlbWVudC5jbGFzc0xpc3QpLnNvbWUoY2xhc3NOYW1lID0+IC9ebGFuZ3VhZ2UtXFxTKy8udGVzdChjbGFzc05hbWUpKSlcblx0XHRcdHdoaWxlKCFjb2RlYmxvY2tDb2RlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJpcy1sb2FkZWRcIikpXG5cdFx0XHRcdGF3YWl0IHNsZWVwKDIpO1xuXHRcdGlmIChpc0V4Y2x1ZGVkKGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UscGx1Z2luLnNldHRpbmdzLmV4Y2x1ZGVkTGFuZ3VhZ2VzKSB8fCBjb2RlYmxvY2tQYXJhbWV0ZXJzLmlnbm9yZSlcblx0XHRcdGNvbnRpbnVlO1xuXHRcdGF3YWl0IHJlbWFrZUNvZGVibG9jayhjb2RlYmxvY2tDb2RlRWxlbWVudCBhcyBIVE1MRWxlbWVudCxjb2RlYmxvY2tQcmVFbGVtZW50LGNvZGVibG9ja1BhcmFtZXRlcnMsdHJ1ZSxwbHVnaW4pO1xuXHR9XG59XG5hc3luYyBmdW5jdGlvbiByZXRyaWdnZXJQcm9jZXNzb3IoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbnRleHQ6IHtzb3VyY2VQYXRoOiBzdHJpbmcsIGdldFNlY3Rpb25JbmZvOiAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uIHwgbnVsbCwgZnJvbnRtYXR0ZXI6IEZyb250TWF0dGVyQ2FjaGUgfCB1bmRlZmluZWR9LCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4sIGVkaXRpbmdFbWJlZHM6IGJvb2xlYW4pIHtcblx0YXdhaXQgc2xlZXAoNTApO1xuXHRlZGl0aW5nRW1iZWRzID0gZWRpdGluZ0VtYmVkcyB8fCBCb29sZWFuKGVsZW1lbnQubWF0Y2hQYXJlbnQoXCIuY20tZW1iZWQtYmxvY2tcIikpO1xuXHRpZiAoZWRpdGluZ0VtYmVkcyB8fCAhZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhZG1vbml0aW9uLWNvbnRlbnRcIikpIHtcblx0XHRjb25zdCBjb250ZW50RWwgPSBlbGVtZW50Lm1hdGNoUGFyZW50KFwiLnZpZXctY29udGVudFwiKSBhcyBIVE1MRWxlbWVudDtcblx0XHRhd2FpdCByZWFkaW5nVmlld0NvZGVibG9ja0RlY29yYXRpbmdQb3N0UHJvY2Vzc29yKGNvbnRlbnRFbCB8fCAoZWxlbWVudC5tYXRjaFBhcmVudChcImRpdi5wcmludFwiKSBhcyBIVE1MRWxlbWVudCksY29udGV4dCxwbHVnaW4sZWRpdGluZ0VtYmVkcyk7IC8vIFJlLXJlbmRlciB3aG9sZSBkb2N1bWVudFxuXHR9XG59XG5hc3luYyBmdW5jdGlvbiByZW5kZXJEb2N1bWVudChjb2RlYmxvY2tQcmVFbGVtZW50czogQXJyYXk8SFRNTEVsZW1lbnQ+LCBzb3VyY2VQYXRoOiBzdHJpbmcsIGNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGwsIGVkaXRpbmdFbWJlZHM6IGJvb2xlYW4sIHByaW50aW5nOiBib29sZWFuLCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pIHtcblx0Y29uc3QgY29kZWJsb2Nrc1BhcmFtZXRlcnM6IEFycmF5PENvZGVibG9ja1BhcmFtZXRlcnM+ID0gYXdhaXQgZ2V0Q29kZWJsb2Nrc1BhcmFtZXRlcnMoc291cmNlUGF0aCxjYWNoZSxwbHVnaW4sZWRpdGluZ0VtYmVkcyk7XG5cdGlmIChjb2RlYmxvY2tzUGFyYW1ldGVycy5sZW5ndGggIT09IGNvZGVibG9ja1ByZUVsZW1lbnRzLmxlbmd0aClcblx0XHRyZXR1cm47XG5cblx0dHJ5IHtcblx0XHRmb3IgKGNvbnN0IFtrZXksY29kZWJsb2NrUHJlRWxlbWVudF0gb2YgQXJyYXkuZnJvbShjb2RlYmxvY2tQcmVFbGVtZW50cykuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBjb2RlYmxvY2tQYXJhbWV0ZXJzID0gY29kZWJsb2Nrc1BhcmFtZXRlcnNba2V5XTtcblx0XHRcdGNvbnN0IGNvZGVibG9ja0NvZGVFbGVtZW50OiBIVE1MUHJlRWxlbWVudCB8IG51bGwgPSBjb2RlYmxvY2tQcmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJwcmUgPiBjb2RlXCIpO1xuXHRcdFx0aWYgKCFjb2RlYmxvY2tDb2RlRWxlbWVudClcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0aWYgKEFycmF5LmZyb20oY29kZWJsb2NrQ29kZUVsZW1lbnQuY2xhc3NMaXN0KS5zb21lKGNsYXNzTmFtZSA9PiAvXmxhbmd1YWdlLVxcUysvLnRlc3QoY2xhc3NOYW1lKSkpXG5cdFx0XHRcdHdoaWxlKCFjb2RlYmxvY2tDb2RlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJpcy1sb2FkZWRcIikpXG5cdFx0XHRcdFx0YXdhaXQgc2xlZXAoMik7XG5cdFx0XHRpZiAoY29kZWJsb2NrQ29kZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcImNvZGUgW2NsYXNzKj0nY29kZS1zdHlsZXItbGluZSddXCIpKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGlmIChpc0V4Y2x1ZGVkKGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UscGx1Z2luLnNldHRpbmdzLmV4Y2x1ZGVkTGFuZ3VhZ2VzKSB8fCBjb2RlYmxvY2tQYXJhbWV0ZXJzLmlnbm9yZSlcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRhd2FpdCByZW1ha2VDb2RlYmxvY2soY29kZWJsb2NrQ29kZUVsZW1lbnQsY29kZWJsb2NrUHJlRWxlbWVudCxjb2RlYmxvY2tQYXJhbWV0ZXJzLCFwcmludGluZyxwbHVnaW4pO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgZG9jdW1lbnQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcblx0XHRyZXR1cm47XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVtYWtlQ29kZWJsb2NrKGNvZGVibG9ja0NvZGVFbGVtZW50OiBIVE1MRWxlbWVudCwgY29kZWJsb2NrUHJlRWxlbWVudDogSFRNTEVsZW1lbnQsIGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIGR5bmFtaWM6IGJvb2xlYW4sIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbikge1xuXHRpZiAoZHluYW1pYylcblx0XHRwbHVnaW4uZXhlY3V0ZUNvZGVNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoY29kZWJsb2NrUHJlRWxlbWVudCx7Y2hpbGRMaXN0OiB0cnVlLHN1YnRyZWU6IHRydWUsYXR0cmlidXRlczogdHJ1ZSxjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7IC8vIEFkZCBFeGVjdXRlIENvZGUgT2JzZXJ2ZXJcblx0XG5cdGluc2VydEhlYWRlcihjb2RlYmxvY2tQcmVFbGVtZW50LGNvZGVibG9ja1BhcmFtZXRlcnMscGx1Z2luLGR5bmFtaWMpO1xuXHRcblx0Y29kZWJsb2NrUHJlRWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmdldFByZUNsYXNzZXMoY29kZWJsb2NrUGFyYW1ldGVycyxkeW5hbWljKSk7XG5cdGlmIChjb2RlYmxvY2tQcmVFbGVtZW50LnBhcmVudEVsZW1lbnQpXG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjb2RlLXN0eWxlci1wcmUtcGFyZW50XCIpO1xuXHRcblx0aWYgKCFjb2RlYmxvY2tDb2RlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiY29kZSBbY2xhc3MqPSdjb2RlLXN0eWxlci1saW5lJ11cIikpIC8vIElnbm9yZSBzdHlsZWQgbGluZXNcblx0XHRkZWNvcmF0ZUNvZGVibG9ja0xpbmVzKGNvZGVibG9ja0NvZGVFbGVtZW50LGNvZGVibG9ja1BhcmFtZXRlcnMpO1xufVxuYXN5bmMgZnVuY3Rpb24gcmVtYWtlSW5saW5lQ29kZShpbmxpbmVDb2RlRWxlbWVudDogSFRNTEVsZW1lbnQsIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbik6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAoaW5saW5lQ29kZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY29kZS1zdHlsZXItaW5saW5lXCIpKVxuXHRcdHJldHVybjtcblx0Y29uc3QgaW5saW5lQ29kZVRleHQgPSBpbmxpbmVDb2RlRWxlbWVudC5pbm5lclRleHQ7XG5cdGNvbnN0IHtwYXJhbWV0ZXJzLHRleHR9ID0gcGFyc2VJbmxpbmVDb2RlKGlubGluZUNvZGVUZXh0KTtcblx0aWYgKHBhcmFtZXRlcnMgJiYgcGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuc3ludGF4SGlnaGxpZ2h0KVxuXHRcdGlubGluZUNvZGVFbGVtZW50LmlubmVySFRNTCA9IGF3YWl0IGdldEhpZ2hsaWdodGVkSFRNTChwYXJhbWV0ZXJzLHRleHQscGx1Z2luKTtcblx0ZWxzZSBpZiAoKCFwYXJhbWV0ZXJzICYmIHRleHQpIHx8IChwYXJhbWV0ZXJzICYmICFwbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5zeW50YXhIaWdobGlnaHQpKVxuXHRcdGlubGluZUNvZGVFbGVtZW50LmlubmVySFRNTCA9IHRleHQ7XG5cdGVsc2Vcblx0XHRyZXR1cm47XG5cdFxuXHRpbmxpbmVDb2RlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItaW5saW5lXCIpO1xuXHRpZiAocGFyYW1ldGVycykge1xuXHRcdGNvbnN0IHBhcmFtZXRlclN0cmluZyA9IGlubGluZUNvZGVUZXh0LnN1YnN0cmluZygwLGlubGluZUNvZGVUZXh0Lmxhc3RJbmRleE9mKHRleHQpKTtcblx0XHRpbmxpbmVDb2RlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJwYXJhbWV0ZXJzXCIscGFyYW1ldGVyU3RyaW5nKTsgLy8gU3RvcmUgcGFyYW1ldGVyIHN0cmluZyBhcyBhdHRyaWJ1dGUgc28gb3JpZ2luYWwgdGV4dCBjYW4gYmUgcmVzdG9yZWQgb24gcGx1Z2luIHJlbW92YWxcblx0XHRpZiAocGFyYW1ldGVycy5pY29uIHx8IHBhcmFtZXRlcnMudGl0bGUpXG5cdFx0XHRpbmxpbmVDb2RlRWxlbWVudC5pbnNlcnRCZWZvcmUoY3JlYXRlSW5saW5lT3BlbmVyKHBhcmFtZXRlcnMscGx1Z2luLmxhbmd1YWdlSWNvbnMpLGlubGluZUNvZGVFbGVtZW50LmNoaWxkTm9kZXNbMF0pO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvZGVibG9ja1ByZUVsZW1lbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzcGVjaWZpYzogYm9vbGVhbixlZGl0aW5nRW1iZWRzOiBib29sZWFuKTogUHJvbWlzZTxBcnJheTxIVE1MRWxlbWVudD4+IHtcblx0bGV0IGNvZGVibG9ja1ByZUVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudD47XG5cdGlmICghZWRpdGluZ0VtYmVkcyAmJiAhc3BlY2lmaWMpXG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudHMgPSBBcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tYXJrZG93bi1yZWFkaW5nLXZpZXcgcHJlOm5vdCguZnJvbnRtYXR0ZXIpXCIpKTtcblx0ZWxzZSBpZiAoZWRpdGluZ0VtYmVkcyAmJiAhc3BlY2lmaWMpXG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudHMgPSBBcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tYXJrZG93bi1zb3VyY2UtdmlldyAuY20tZW1iZWQtYmxvY2sgcHJlOm5vdCguZnJvbnRtYXR0ZXIpXCIpKTtcblx0ZWxzZSBpZiAoIWVkaXRpbmdFbWJlZHMgJiYgc3BlY2lmaWMpIHtcblx0XHRjb2RlYmxvY2tQcmVFbGVtZW50cyA9IEFycmF5LmZyb20oZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwicHJlOm5vdCguZnJvbnRtYXR0ZXIpXCIpKTtcblx0XHRjb25zdCBhZG1vbml0aW9uQ29kZUVsZW1lbnQgPSBjb2RlYmxvY2tQcmVFbGVtZW50cz8uWzBdPy5xdWVyeVNlbGVjdG9yKFwicHJlOm5vdChbY2xhc3NdKSA+IGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1hZC1cXFwiXVwiKTtcblx0XHRpZiAoYWRtb25pdGlvbkNvZGVFbGVtZW50KSB7XG5cdFx0XHRhd2FpdCBzbGVlcCg1MCk7XG5cdFx0XHRjb2RlYmxvY2tQcmVFbGVtZW50cyA9IEFycmF5LmZyb20oZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwicHJlOm5vdCguZnJvbnRtYXR0ZXIpXCIpKTtcblx0XHR9XG5cdH0gZWxzZVxuXHRcdGNvZGVibG9ja1ByZUVsZW1lbnRzID0gW107XG5cdHJldHVybiBjb2RlYmxvY2tQcmVFbGVtZW50cztcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldENvZGVibG9ja3NQYXJhbWV0ZXJzKHNvdXJjZVBhdGg6IHN0cmluZywgY2FjaGU6IENhY2hlZE1ldGFkYXRhIHwgbnVsbCwgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luLCBlZGl0aW5nRW1iZWRzOiBib29sZWFuKTogUHJvbWlzZTxBcnJheTxDb2RlYmxvY2tQYXJhbWV0ZXJzPj4ge1xuXHRsZXQgY29kZWJsb2Nrc1BhcmFtZXRlcnM6IEFycmF5PENvZGVibG9ja1BhcmFtZXRlcnM+ID0gW107XG5cdGNvbnN0IGZpbGVDb250ZW50TGluZXMgPSBhd2FpdCBnZXRGaWxlQ29udGVudExpbmVzKHNvdXJjZVBhdGgscGx1Z2luKTtcblx0aWYgKCFmaWxlQ29udGVudExpbmVzKVxuXHRcdHJldHVybiBbXTtcblxuXHRpZiAodHlwZW9mIGNhY2hlPy5zZWN0aW9ucyAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBjYWNoZS5zZWN0aW9ucykge1xuXHRcdFx0aWYgKCFlZGl0aW5nRW1iZWRzIHx8IHNlY3Rpb24udHlwZSA9PT0gXCJjb2RlXCIgfHwgc2VjdGlvbi50eXBlID09PSBcImNhbGxvdXRcIikge1xuXHRcdFx0XHRjb25zdCBwYXJzZWRDb2RlYmxvY2tzUGFyYW1ldGVycyA9IGF3YWl0IHBhcnNlQ29kZWJsb2NrU291cmNlKGZpbGVDb250ZW50TGluZXMuc2xpY2Uoc2VjdGlvbi5wb3NpdGlvbi5zdGFydC5saW5lLHNlY3Rpb24ucG9zaXRpb24uZW5kLmxpbmUrMSksc291cmNlUGF0aCxwbHVnaW4pO1xuXHRcdFx0XHRpZiAoIWVkaXRpbmdFbWJlZHMgfHwgcGFyc2VkQ29kZWJsb2Nrc1BhcmFtZXRlcnMubmVzdGVkKVxuXHRcdFx0XHRcdGNvZGVibG9ja3NQYXJhbWV0ZXJzID0gY29kZWJsb2Nrc1BhcmFtZXRlcnMuY29uY2F0KHBhcnNlZENvZGVibG9ja3NQYXJhbWV0ZXJzLmNvZGVibG9ja3NQYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZVxuXHRcdGNvbnNvbGUuZXJyb3IoYE1ldGFkYXRhIGNhY2hlIG5vdCBmb3VuZCBmb3IgZmlsZTogJHtzb3VyY2VQYXRofWApO1xuXHRyZXR1cm4gY29kZWJsb2Nrc1BhcmFtZXRlcnM7XG59XG5hc3luYyBmdW5jdGlvbiB0b2dnbGVGb2xkKGNvZGVibG9ja1ByZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvZGVibG9ja1ByZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInByZSA+IGNvZGVcIikuZm9yRWFjaCgoY29kZWJsb2NrQ29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50KT0+Y29kZWJsb2NrQ29kZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJtYXgtaGVpZ2h0XCIsYGNhbGMoJHtNYXRoLmNlaWwoY29kZWJsb2NrQ29kZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0KzAuMDEpfXB4ICsgdmFyKC0tY29kZS1wYWRkaW5nKSAqICR7Y29kZWJsb2NrQ29kZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZXhlY3V0ZS1jb2RlLW91dHB1dFwiKT9cIjMuNSArIHZhcigtLWhlYWRlci1zZXBhcmF0b3Itd2lkdGgpXCI6XCIyXCJ9KWApKTtcblx0YXdhaXQgc2xlZXAoMSk7XG5cdGNvZGVibG9ja1ByZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShcImNvZGUtc3R5bGVyLWNvbGxhcHNlZFwiKTtcblx0YXdhaXQgc2xlZXAoVFJBTlNJVElPTl9MRU5HVEgpO1xuXHRjb2RlYmxvY2tQcmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJwcmUgPiBjb2RlXCIpLmZvckVhY2goKGNvZGVibG9ja0NvZGVFbGVtZW50OiBIVE1MRWxlbWVudCk9PmNvZGVibG9ja0NvZGVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwibWF4LWhlaWdodFwiKSk7XG59XG5mdW5jdGlvbiBpbnNlcnRIZWFkZXIoY29kZWJsb2NrUHJlRWxlbWVudDogSFRNTEVsZW1lbnQsIGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbiwgZHluYW1pYzogYm9vbGVhbik6IHZvaWQge1xuXHRjb25zdCBoZWFkZXJDb250YWluZXIgPSBjcmVhdGVIZWFkZXIoY29kZWJsb2NrUGFyYW1ldGVycywgcGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncyxwbHVnaW4ubGFuZ3VhZ2VJY29ucyk7XG5cdGlmIChkeW5hbWljKVxuXHRcdGhlYWRlckNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoKT0+e3RvZ2dsZUZvbGQoY29kZWJsb2NrUHJlRWxlbWVudCk7fSk7IC8vIEFkZCBsaXN0ZW5lciBmb3IgaGVhZGVyIGNvbGxhcHNpbmcgb24gY2xpY2tcblx0Y29kZWJsb2NrUHJlRWxlbWVudC5pbnNlcnRCZWZvcmUoaGVhZGVyQ29udGFpbmVyLGNvZGVibG9ja1ByZUVsZW1lbnQuY2hpbGROb2Rlc1swXSk7XG59XG5mdW5jdGlvbiBnZXRQcmVDbGFzc2VzKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIGR5bmFtaWM6IGJvb2xlYW4pOiBBcnJheTxzdHJpbmc+IHtcblx0Y29uc3QgcHJlQ2xhc3NMaXN0ID0gW1wiY29kZS1zdHlsZXItcHJlXCJdO1xuXHRpZiAoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSlcblx0XHRwcmVDbGFzc0xpc3QucHVzaChgbGFuZ3VhZ2UtJHtjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlfWApO1xuXHRpZiAoZHluYW1pYykge1xuXHRcdGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmZvbGQuZW5hYmxlZClcblx0XHRcdHByZUNsYXNzTGlzdC5wdXNoKFwiY29kZS1zdHlsZXItY29sbGFwc2VkXCIpO1xuXHRcdGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVVbndyYXAuYWx3YXlzRW5hYmxlZClcblx0XHRcdHByZUNsYXNzTGlzdC5wdXNoKGNvZGVibG9ja1BhcmFtZXRlcnMubGluZVVud3JhcC5hY3RpdmVXcmFwP1widW53cmFwcGVkLWluYWN0aXZlXCI6XCJ1bndyYXBwZWRcIik7XG5cdFx0ZWxzZSBpZiAoY29kZWJsb2NrUGFyYW1ldGVycy5saW5lVW53cmFwLmFsd2F5c0Rpc2FibGVkKVxuXHRcdFx0cHJlQ2xhc3NMaXN0LnB1c2goXCJ1bndyYXBwZWRcIik7XG5cdH1cblx0cmV0dXJuIHByZUNsYXNzTGlzdDtcbn1cbmZ1bmN0aW9uIGRlY29yYXRlQ29kZWJsb2NrTGluZXMoY29kZWJsb2NrQ29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzKTogdm9pZCB7XG5cdGdldENvZGVibG9ja0xpbmVzKGNvZGVibG9ja0NvZGVFbGVtZW50KS5mb3JFYWNoKChsaW5lLGluZGV4LGNvZGVibG9ja0xpbmVzKSA9PiB7XG5cdFx0aWYgKGluZGV4ICE9PSBjb2RlYmxvY2tMaW5lcy5sZW5ndGgtMSlcblx0XHRcdGluc2VydExpbmVXcmFwcGVyKGNvZGVibG9ja0NvZGVFbGVtZW50LGNvZGVibG9ja1BhcmFtZXRlcnMsaW5kZXgrMSxsaW5lKTtcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRDb2RlYmxvY2tMaW5lcyhjb2RlYmxvY2tDb2RlRWxlbWVudDogSFRNTEVsZW1lbnQpOiBBcnJheTxzdHJpbmc+IHtcblx0ZnVuY3Rpb24gZXNjYXBlSFRNTChwbGFpbnRleHQ6IHN0cmluZykge1xuXHRcdHJldHVybiBwbGFpbnRleHQucmVwbGFjZSgvPC9nLFwiJmx0O1wiKS5yZXBsYWNlKC8+L2csXCImZ3Q7XCIpLnJlcGxhY2UoL1wiL2csXCImcXVvdDtcIik7XG5cdH1cblxuXHRjb25zdCB0cmVlID0gdW5pZmllZCgpLnVzZShyZW1hcmtQYXJzZSkucGFyc2UoY29kZWJsb2NrQ29kZUVsZW1lbnQuaW5uZXJIVE1MLnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKSk7XG5cdGNvbnN0IHN0YWNrOiBBcnJheTxzdHJpbmc+ID0gW107XG5cdGxldCBjb2RlYmxvY2tIVE1MID0gXCJcIjtcblx0dmlzaXQodHJlZSxbXCJ0ZXh0XCIsXCJodG1sXCJdLChub2RlKT0+e1xuXHRcdGlmIChub2RlLnR5cGUgPT09IFwiaHRtbFwiICYmIG5vZGUudmFsdWUgIT09IFwiPGJyPlwiKSB7XG5cdFx0XHRpZiAobm9kZS52YWx1ZS5zdGFydHNXaXRoKFwiPHNwYW5cIikpXG5cdFx0XHRcdHN0YWNrLnB1c2gobm9kZS52YWx1ZSk7XG5cdFx0XHRlbHNlIGlmIChub2RlLnZhbHVlLnN0YXJ0c1dpdGgoXCI8L3NwYW5cIikpXG5cdFx0XHRcdHN0YWNrLnBvcCgpO1xuXHRcdH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBcImh0bWxcIiAmJiBub2RlLnZhbHVlID09PSBcIjxicj5cIilcblx0XHRcdG5vZGUudmFsdWUgPSBcIjwvc3Bhbj5cIi5yZXBlYXQoc3RhY2subGVuZ3RoKStcIjxicj5cIitzdGFjay5qb2luKFwiXCIpO1xuXHRcdGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gXCJ0ZXh0XCIpXG5cdFx0XHRub2RlLnZhbHVlID0gZXNjYXBlSFRNTChub2RlLnZhbHVlKTtcblx0XHRpZiAoXCJ2YWx1ZVwiIGluIG5vZGUpXG5cdFx0XHRjb2RlYmxvY2tIVE1MICs9IG5vZGUudmFsdWU7XG5cdH0pO1xuXHRsZXQgY29kZWJsb2NrTGluZXMgPSBjb2RlYmxvY2tIVE1MLnNwbGl0KFwiPGJyPlwiKTtcblx0aWYgKGNvZGVibG9ja0xpbmVzLmxlbmd0aCA9PSAxKVxuXHRcdGNvZGVibG9ja0xpbmVzID0gW1wiXCIsXCJcIl07XG5cdGNvZGVibG9ja0NvZGVFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdHJldHVybiBjb2RlYmxvY2tMaW5lcztcbn1cbmZ1bmN0aW9uIGluc2VydExpbmVXcmFwcGVyKGNvZGVibG9ja0NvZGVFbGVtZW50OiBIVE1MRWxlbWVudCwgY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycywgbGluZU51bWJlcjogbnVtYmVyLCBsaW5lOiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgbGluZVdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRjb2RlYmxvY2tDb2RlRWxlbWVudC5hcHBlbmRDaGlsZChsaW5lV3JhcHBlcik7XG5cdGdldExpbmVDbGFzc2VzKGNvZGVibG9ja1BhcmFtZXRlcnMsbGluZU51bWJlcixsaW5lKS5mb3JFYWNoKChsaW5lQ2xhc3MpID0+IGxpbmVXcmFwcGVyLmNsYXNzTGlzdC5hZGQobGluZUNsYXNzKSk7XG5cdGxpbmVXcmFwcGVyLmFwcGVuZENoaWxkKGNyZWF0ZURpdih7Y2xzOiBgY29kZS1zdHlsZXItbGluZS1udW1iZXIke2dldExpbmVOdW1iZXJEaXNwbGF5KGNvZGVibG9ja1BhcmFtZXRlcnMpfWAsIHRleHQ6IChsaW5lTnVtYmVyK2NvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMub2Zmc2V0KS50b1N0cmluZygpfSkpO1xuXHRsaW5lV3JhcHBlci5hcHBlbmRDaGlsZChjcmVhdGVEaXYoe2NsczogXCJjb2RlLXN0eWxlci1saW5lLXRleHRcIiwgdGV4dDogc2FuaXRpemVIVE1MVG9Eb20obGluZSAhPT0gXCJcIiA/IGxpbmUgOiBcIjxicj5cIil9KSk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRIaWdobGlnaHRlZEhUTUwocGFyYW1ldGVyczogSW5saW5lQ29kZVBhcmFtZXRlcnMsIHRleHQ6IHN0cmluZywgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgdGVtcG9yYXJ5UmVuZGVyaW5nQ29udGFpbmVyID0gY3JlYXRlRGl2KCk7XG5cdE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKHBsdWdpbi5hcHAsW1wiYGBgXCIscGFyYW1ldGVycy5sYW5ndWFnZSxcIlxcblwiLHRleHQsXCJcXG5cIixcImBgYFwiXS5qb2luKFwiXCIpLHRlbXBvcmFyeVJlbmRlcmluZ0NvbnRhaW5lcixcIlwiLG5ldyBDb21wb25lbnQoKSk7XG5cdGNvbnN0IHJlbmRlcmVkQ29kZUVsZW1lbnQgPSB0ZW1wb3JhcnlSZW5kZXJpbmdDb250YWluZXIucXVlcnlTZWxlY3RvcihcImNvZGVcIik7XG5cdGlmICghcmVuZGVyZWRDb2RlRWxlbWVudClcblx0XHRyZXR1cm4gXCJFUlJPUjogQ291bGQgbm90IHJlbmRlciBoaWdobGlnaHRlZCBjb2RlXCI7XG5cdHdoaWxlKHBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnN5bnRheEhpZ2hsaWdodCAmJiAhcmVuZGVyZWRDb2RlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJpcy1sb2FkZWRcIikpXG5cdFx0YXdhaXQgc2xlZXAoMik7XG5cdHJldHVybiByZW5kZXJlZENvZGVFbGVtZW50LmlubmVySFRNTDtcbn1cblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVDb2RlTXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcblx0bXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uOiBNdXRhdGlvblJlY29yZCkgPT4ge1xuXHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiICYmIChtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgPT09IFwiUFJFXCIpIHsgLy8gQWRkIGV4ZWN1dGUgY29kZSBvdXRwdXRcblx0XHRcdGNvbnN0IGV4ZWN1dGVDb2RlT3V0cHV0ID0gKG11dGF0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcihcInByZSA+IGNvZGUgfiBjb2RlLmxhbmd1YWdlLW91dHB1dFwiKSBhcyBIVE1MRWxlbWVudDtcblx0XHRcdGlmIChleGVjdXRlQ29kZU91dHB1dClcblx0XHRcdFx0ZXhlY3V0ZUNvZGVPdXRwdXQuY2xhc3NMaXN0LmFkZChcImV4ZWN1dGUtY29kZS1vdXRwdXRcIik7XG5cdFx0fVxuXHR9KTtcbn0pO1xuIiwgIi8qKlxuICogVGhyb3cgYSBnaXZlbiBlcnJvci5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfG51bGx8dW5kZWZpbmVkfSBbZXJyb3JdXG4gKiAgIE1heWJlIGVycm9yLlxuICogQHJldHVybnMge2Fzc2VydHMgZXJyb3IgaXMgbnVsbHx1bmRlZmluZWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYWlsKGVycm9yKSB7XG4gIGlmIChlcnJvcikge1xuICAgIHRocm93IGVycm9yXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuTm9kZX0gTm9kZVxuICogQHR5cGVkZWYge2ltcG9ydCgndmZpbGUnKS5WRmlsZUNvbXBhdGlibGV9IFZGaWxlQ29tcGF0aWJsZVxuICogQHR5cGVkZWYge2ltcG9ydCgndmZpbGUnKS5WRmlsZVZhbHVlfSBWRmlsZVZhbHVlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLicpLlByb2Nlc3Nvcn0gUHJvY2Vzc29yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLicpLlBsdWdpbn0gUGx1Z2luXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLicpLlByZXNldH0gUHJlc2V0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLicpLlBsdWdnYWJsZX0gUGx1Z2dhYmxlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLicpLlBsdWdnYWJsZUxpc3R9IFBsdWdnYWJsZUxpc3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uJykuVHJhbnNmb3JtZXJ9IFRyYW5zZm9ybWVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLicpLlBhcnNlcn0gUGFyc2VyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLicpLkNvbXBpbGVyfSBDb21waWxlclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4nKS5SdW5DYWxsYmFja30gUnVuQ2FsbGJhY2tcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uJykuUHJvY2Vzc0NhbGxiYWNrfSBQcm9jZXNzQ2FsbGJhY2tcbiAqXG4gKiBAdHlwZWRlZiBDb250ZXh0XG4gKiBAcHJvcGVydHkge05vZGV9IHRyZWVcbiAqIEBwcm9wZXJ0eSB7VkZpbGV9IGZpbGVcbiAqL1xuXG5pbXBvcnQge2JhaWx9IGZyb20gJ2JhaWwnXG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnaXMtYnVmZmVyJ1xuaW1wb3J0IGV4dGVuZCBmcm9tICdleHRlbmQnXG5pbXBvcnQgaXNQbGFpbk9iaiBmcm9tICdpcy1wbGFpbi1vYmonXG5pbXBvcnQge3Ryb3VnaH0gZnJvbSAndHJvdWdoJ1xuaW1wb3J0IHtWRmlsZX0gZnJvbSAndmZpbGUnXG5cbi8vIEV4cG9zZSBhIGZyb3plbiBwcm9jZXNzb3IuXG5leHBvcnQgY29uc3QgdW5pZmllZCA9IGJhc2UoKS5mcmVlemUoKVxuXG5jb25zdCBvd24gPSB7fS5oYXNPd25Qcm9wZXJ0eVxuXG4vLyBGdW5jdGlvbiB0byBjcmVhdGUgdGhlIGZpcnN0IHByb2Nlc3Nvci5cbi8qKlxuICogQHJldHVybnMge1Byb2Nlc3Nvcn1cbiAqL1xuZnVuY3Rpb24gYmFzZSgpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXJzID0gdHJvdWdoKClcbiAgLyoqIEB0eXBlIHtQcm9jZXNzb3JbJ2F0dGFjaGVycyddfSAqL1xuICBjb25zdCBhdHRhY2hlcnMgPSBbXVxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqL1xuICBsZXQgbmFtZXNwYWNlID0ge31cbiAgLyoqIEB0eXBlIHtib29sZWFufHVuZGVmaW5lZH0gKi9cbiAgbGV0IGZyb3plblxuICBsZXQgZnJlZXplSW5kZXggPSAtMVxuXG4gIC8vIERhdGEgbWFuYWdlbWVudC5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogb3ZlcmxvYWRzIGFyZSBoYW5kbGVkLlxuICBwcm9jZXNzb3IuZGF0YSA9IGRhdGFcbiAgcHJvY2Vzc29yLlBhcnNlciA9IHVuZGVmaW5lZFxuICBwcm9jZXNzb3IuQ29tcGlsZXIgPSB1bmRlZmluZWRcblxuICAvLyBMb2NrLlxuICBwcm9jZXNzb3IuZnJlZXplID0gZnJlZXplXG5cbiAgLy8gUGx1Z2lucy5cbiAgcHJvY2Vzc29yLmF0dGFjaGVycyA9IGF0dGFjaGVyc1xuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBvdmVybG9hZHMgYXJlIGhhbmRsZWQuXG4gIHByb2Nlc3Nvci51c2UgPSB1c2VcblxuICAvLyBBUEkuXG4gIHByb2Nlc3Nvci5wYXJzZSA9IHBhcnNlXG4gIHByb2Nlc3Nvci5zdHJpbmdpZnkgPSBzdHJpbmdpZnlcbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogb3ZlcmxvYWRzIGFyZSBoYW5kbGVkLlxuICBwcm9jZXNzb3IucnVuID0gcnVuXG4gIHByb2Nlc3Nvci5ydW5TeW5jID0gcnVuU3luY1xuICAvLyBAdHMtZXhwZWN0LWVycm9yOiBvdmVybG9hZHMgYXJlIGhhbmRsZWQuXG4gIHByb2Nlc3Nvci5wcm9jZXNzID0gcHJvY2Vzc1xuICBwcm9jZXNzb3IucHJvY2Vzc1N5bmMgPSBwcm9jZXNzU3luY1xuXG4gIC8vIEV4cG9zZS5cbiAgcmV0dXJuIHByb2Nlc3NvclxuXG4gIC8vIENyZWF0ZSBhIG5ldyBwcm9jZXNzb3IgYmFzZWQgb24gdGhlIHByb2Nlc3NvciBpbiB0aGUgY3VycmVudCBzY29wZS5cbiAgLyoqIEB0eXBlIHtQcm9jZXNzb3J9ICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NvcigpIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IGJhc2UoKVxuICAgIGxldCBpbmRleCA9IC0xXG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGF0dGFjaGVycy5sZW5ndGgpIHtcbiAgICAgIGRlc3RpbmF0aW9uLnVzZSguLi5hdHRhY2hlcnNbaW5kZXhdKVxuICAgIH1cblxuICAgIGRlc3RpbmF0aW9uLmRhdGEoZXh0ZW5kKHRydWUsIHt9LCBuYW1lc3BhY2UpKVxuXG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVjb3JkPHN0cmluZywgdW5rbm93bj59IFtrZXldXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gW3ZhbHVlXVxuICAgKiBAcmV0dXJucyB7dW5rbm93bn1cbiAgICovXG4gIGZ1bmN0aW9uIGRhdGEoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gU2V0IGBrZXlgLlxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgYXNzZXJ0VW5mcm96ZW4oJ2RhdGEnLCBmcm96ZW4pXG4gICAgICAgIG5hbWVzcGFjZVtrZXldID0gdmFsdWVcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NvclxuICAgICAgfVxuXG4gICAgICAvLyBHZXQgYGtleWAuXG4gICAgICByZXR1cm4gKG93bi5jYWxsKG5hbWVzcGFjZSwga2V5KSAmJiBuYW1lc3BhY2Vba2V5XSkgfHwgbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzcGFjZS5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBhc3NlcnRVbmZyb3plbignZGF0YScsIGZyb3plbilcbiAgICAgIG5hbWVzcGFjZSA9IGtleVxuICAgICAgcmV0dXJuIHByb2Nlc3NvclxuICAgIH1cblxuICAgIC8vIEdldCBzcGFjZS5cbiAgICByZXR1cm4gbmFtZXNwYWNlXG4gIH1cblxuICAvKiogQHR5cGUge1Byb2Nlc3NvclsnZnJlZXplJ119ICovXG4gIGZ1bmN0aW9uIGZyZWV6ZSgpIHtcbiAgICBpZiAoZnJvemVuKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc29yXG4gICAgfVxuXG4gICAgd2hpbGUgKCsrZnJlZXplSW5kZXggPCBhdHRhY2hlcnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBbYXR0YWNoZXIsIC4uLm9wdGlvbnNdID0gYXR0YWNoZXJzW2ZyZWV6ZUluZGV4XVxuXG4gICAgICBpZiAob3B0aW9uc1swXSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnNbMF0gPT09IHRydWUpIHtcbiAgICAgICAgb3B0aW9uc1swXSA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge1RyYW5zZm9ybWVyfHZvaWR9ICovXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGF0dGFjaGVyLmNhbGwocHJvY2Vzc29yLCAuLi5vcHRpb25zKVxuXG4gICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybWVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyYW5zZm9ybWVycy51c2UodHJhbnNmb3JtZXIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnJvemVuID0gdHJ1ZVxuICAgIGZyZWV6ZUluZGV4ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXG5cbiAgICByZXR1cm4gcHJvY2Vzc29yXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtQbHVnZ2FibGV8bnVsbHx1bmRlZmluZWR9IFt2YWx1ZV1cbiAgICogQHBhcmFtIHsuLi51bmtub3dufSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9jZXNzb3J9XG4gICAqL1xuICBmdW5jdGlvbiB1c2UodmFsdWUsIC4uLm9wdGlvbnMpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgc2V0dGluZ3NcblxuICAgIGFzc2VydFVuZnJvemVuKCd1c2UnLCBmcm96ZW4pXG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRW1wdHkuXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFkZFBsdWdpbih2YWx1ZSwgLi4ub3B0aW9ucylcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBhZGRMaXN0KHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkUHJlc2V0KHZhbHVlKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgJyArIHZhbHVlICsgJ2AnKVxuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgbmFtZXNwYWNlLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihuYW1lc3BhY2Uuc2V0dGluZ3MgfHwge30sIHNldHRpbmdzKVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzb3JcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7aW1wb3J0KCcuLicpLlBsdWdnYWJsZTx1bmtub3duW10+fSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhZGRQbHVnaW4odmFsdWUpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgW3BsdWdpbiwgLi4ub3B0aW9uc10gPSB2YWx1ZVxuICAgICAgICAgIGFkZFBsdWdpbihwbHVnaW4sIC4uLm9wdGlvbnMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkUHJlc2V0KHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgJyArIHZhbHVlICsgJ2AnKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UHJlc2V0fSByZXN1bHRcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGRQcmVzZXQocmVzdWx0KSB7XG4gICAgICBhZGRMaXN0KHJlc3VsdC5wbHVnaW5zKVxuXG4gICAgICBpZiAocmVzdWx0LnNldHRpbmdzKSB7XG4gICAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihzZXR0aW5ncyB8fCB7fSwgcmVzdWx0LnNldHRpbmdzKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UGx1Z2dhYmxlTGlzdHxudWxsfHVuZGVmaW5lZH0gW3BsdWdpbnNdXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkTGlzdChwbHVnaW5zKSB7XG4gICAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgICBpZiAocGx1Z2lucyA9PT0gbnVsbCB8fCBwbHVnaW5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gRW1wdHkuXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGx1Z2lucykpIHtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBwbHVnaW5zLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHRoaW5nID0gcGx1Z2luc1tpbmRleF1cbiAgICAgICAgICBhZGQodGhpbmcpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgbGlzdCBvZiBwbHVnaW5zLCBub3QgYCcgKyBwbHVnaW5zICsgJ2AnKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7UGx1Z2lufSBwbHVnaW5cbiAgICAgKiBAcGFyYW0gey4uLnVua25vd259IFt2YWx1ZV1cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGRQbHVnaW4ocGx1Z2luLCB2YWx1ZSkge1xuICAgICAgbGV0IGluZGV4ID0gLTFcbiAgICAgIC8qKiBAdHlwZSB7UHJvY2Vzc29yWydhdHRhY2hlcnMnXVtudW1iZXJdfHVuZGVmaW5lZH0gKi9cbiAgICAgIGxldCBlbnRyeVxuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGF0dGFjaGVycy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGF0dGFjaGVyc1tpbmRleF1bMF0gPT09IHBsdWdpbikge1xuICAgICAgICAgIGVudHJ5ID0gYXR0YWNoZXJzW2luZGV4XVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGlmIChpc1BsYWluT2JqKGVudHJ5WzFdKSAmJiBpc1BsYWluT2JqKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gZXh0ZW5kKHRydWUsIGVudHJ5WzFdLCB2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGVudHJ5WzFdID0gdmFsdWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGZpbmUuXG4gICAgICAgIGF0dGFjaGVycy5wdXNoKFsuLi5hcmd1bWVudHNdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAdHlwZSB7UHJvY2Vzc29yWydwYXJzZSddfSAqL1xuICBmdW5jdGlvbiBwYXJzZShkb2MpIHtcbiAgICBwcm9jZXNzb3IuZnJlZXplKClcbiAgICBjb25zdCBmaWxlID0gdmZpbGUoZG9jKVxuICAgIGNvbnN0IFBhcnNlciA9IHByb2Nlc3Nvci5QYXJzZXJcbiAgICBhc3NlcnRQYXJzZXIoJ3BhcnNlJywgUGFyc2VyKVxuXG4gICAgaWYgKG5ld2FibGUoUGFyc2VyLCAncGFyc2UnKSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYG5ld2FibGVgIGNoZWNrcyB0aGlzLlxuICAgICAgcmV0dXJuIG5ldyBQYXJzZXIoU3RyaW5nKGZpbGUpLCBmaWxlKS5wYXJzZSgpXG4gICAgfVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYG5ld2FibGVgIGNoZWNrcyB0aGlzLlxuICAgIHJldHVybiBQYXJzZXIoU3RyaW5nKGZpbGUpLCBmaWxlKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgfVxuXG4gIC8qKiBAdHlwZSB7UHJvY2Vzc29yWydzdHJpbmdpZnknXX0gKi9cbiAgZnVuY3Rpb24gc3RyaW5naWZ5KG5vZGUsIGRvYykge1xuICAgIHByb2Nlc3Nvci5mcmVlemUoKVxuICAgIGNvbnN0IGZpbGUgPSB2ZmlsZShkb2MpXG4gICAgY29uc3QgQ29tcGlsZXIgPSBwcm9jZXNzb3IuQ29tcGlsZXJcbiAgICBhc3NlcnRDb21waWxlcignc3RyaW5naWZ5JywgQ29tcGlsZXIpXG4gICAgYXNzZXJ0Tm9kZShub2RlKVxuXG4gICAgaWYgKG5ld2FibGUoQ29tcGlsZXIsICdjb21waWxlJykpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBuZXdhYmxlYCBjaGVja3MgdGhpcy5cbiAgICAgIHJldHVybiBuZXcgQ29tcGlsZXIobm9kZSwgZmlsZSkuY29tcGlsZSgpXG4gICAgfVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYG5ld2FibGVgIGNoZWNrcyB0aGlzLlxuICAgIHJldHVybiBDb21waWxlcihub2RlLCBmaWxlKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtWRmlsZUNvbXBhdGlibGV8UnVuQ2FsbGJhY2t9IFtkb2NdXG4gICAqIEBwYXJhbSB7UnVuQ2FsbGJhY2t9IFtjYWxsYmFja11cbiAgICogQHJldHVybnMge1Byb21pc2U8Tm9kZT58dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHJ1bihub2RlLCBkb2MsIGNhbGxiYWNrKSB7XG4gICAgYXNzZXJ0Tm9kZShub2RlKVxuICAgIHByb2Nlc3Nvci5mcmVlemUoKVxuXG4gICAgaWYgKCFjYWxsYmFjayAmJiB0eXBlb2YgZG9jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGRvY1xuICAgICAgZG9jID0gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGV4ZWN1dG9yKVxuICAgIH1cblxuICAgIGV4ZWN1dG9yKG51bGwsIGNhbGxiYWNrKVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudWxsfCgobm9kZTogTm9kZSkgPT4gdm9pZCl9IHJlc29sdmVcbiAgICAgKiBAcGFyYW0geyhlcnJvcjogRXJyb3IpID0+IHZvaWR9IHJlamVjdFxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYGRvY2AgY2FuXHUyMDE5dCBiZSBhIGNhbGxiYWNrIGFueW1vcmUsIHdlIGNoZWNrZWQuXG4gICAgICB0cmFuc2Zvcm1lcnMucnVuKG5vZGUsIHZmaWxlKGRvYyksIGRvbmUpXG5cbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvclxuICAgICAgICogQHBhcmFtIHtOb2RlfSB0cmVlXG4gICAgICAgKiBAcGFyYW0ge1ZGaWxlfSBmaWxlXG4gICAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gZG9uZShlcnJvciwgdHJlZSwgZmlsZSkge1xuICAgICAgICB0cmVlID0gdHJlZSB8fCBub2RlXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0cmVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBjYWxsYmFja2AgaXMgZGVmaW5lZCBpZiBgcmVzb2x2ZWAgaXMgbm90LlxuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRyZWUsIGZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQHR5cGUge1Byb2Nlc3NvclsncnVuU3luYyddfSAqL1xuICBmdW5jdGlvbiBydW5TeW5jKG5vZGUsIGZpbGUpIHtcbiAgICAvKiogQHR5cGUge05vZGV8dW5kZWZpbmVkfSAqL1xuICAgIGxldCByZXN1bHRcbiAgICAvKiogQHR5cGUge2Jvb2xlYW58dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb21wbGV0ZVxuXG4gICAgcHJvY2Vzc29yLnJ1bihub2RlLCBmaWxlLCBkb25lKVxuXG4gICAgYXNzZXJ0RG9uZSgncnVuU3luYycsICdydW4nLCBjb21wbGV0ZSlcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHdlIGVpdGhlciBiYWlsZWQgb24gYW4gZXJyb3Igb3IgaGF2ZSBhIHRyZWUuXG4gICAgcmV0dXJuIHJlc3VsdFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtFcnJvcnxudWxsfSBbZXJyb3JdXG4gICAgICogQHBhcmFtIHtOb2RlfSBbdHJlZV1cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb25lKGVycm9yLCB0cmVlKSB7XG4gICAgICBiYWlsKGVycm9yKVxuICAgICAgcmVzdWx0ID0gdHJlZVxuICAgICAgY29tcGxldGUgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VkZpbGVDb21wYXRpYmxlfSBkb2NcbiAgICogQHBhcmFtIHtQcm9jZXNzQ2FsbGJhY2t9IFtjYWxsYmFja11cbiAgICogQHJldHVybnMge1Byb21pc2U8VkZpbGU+fHVuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3MoZG9jLCBjYWxsYmFjaykge1xuICAgIHByb2Nlc3Nvci5mcmVlemUoKVxuICAgIGFzc2VydFBhcnNlcigncHJvY2VzcycsIHByb2Nlc3Nvci5QYXJzZXIpXG4gICAgYXNzZXJ0Q29tcGlsZXIoJ3Byb2Nlc3MnLCBwcm9jZXNzb3IuQ29tcGlsZXIpXG5cbiAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZXhlY3V0b3IpXG4gICAgfVxuXG4gICAgZXhlY3V0b3IobnVsbCwgY2FsbGJhY2spXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge251bGx8KChmaWxlOiBWRmlsZSkgPT4gdm9pZCl9IHJlc29sdmVcbiAgICAgKiBAcGFyYW0geyhlcnJvcj86IEVycm9yfG51bGx8dW5kZWZpbmVkKSA9PiB2b2lkfSByZWplY3RcbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSB2ZmlsZShkb2MpXG5cbiAgICAgIHByb2Nlc3Nvci5ydW4ocHJvY2Vzc29yLnBhcnNlKGZpbGUpLCBmaWxlLCAoZXJyb3IsIHRyZWUsIGZpbGUpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIHx8ICF0cmVlIHx8ICFmaWxlKSB7XG4gICAgICAgICAgZG9uZShlcnJvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvKiogQHR5cGUge3Vua25vd259ICovXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gcHJvY2Vzc29yLnN0cmluZ2lmeSh0cmVlLCBmaWxlKVxuXG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRW1wdHkuXG4gICAgICAgICAgfSBlbHNlIGlmIChsb29rc0xpa2VBVkZpbGVWYWx1ZShyZXN1bHQpKSB7XG4gICAgICAgICAgICBmaWxlLnZhbHVlID0gcmVzdWx0XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbGUucmVzdWx0ID0gcmVzdWx0XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZShlcnJvciwgZmlsZSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0ge0Vycm9yfG51bGx8dW5kZWZpbmVkfSBbZXJyb3JdXG4gICAgICAgKiBAcGFyYW0ge1ZGaWxlfHVuZGVmaW5lZH0gW2ZpbGVdXG4gICAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gZG9uZShlcnJvciwgZmlsZSkge1xuICAgICAgICBpZiAoZXJyb3IgfHwgIWZpbGUpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUoZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgY2FsbGJhY2tgIGlzIGRlZmluZWQgaWYgYHJlc29sdmVgIGlzIG5vdC5cbiAgICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtQcm9jZXNzb3JbJ3Byb2Nlc3NTeW5jJ119ICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NTeW5jKGRvYykge1xuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbnx1bmRlZmluZWR9ICovXG4gICAgbGV0IGNvbXBsZXRlXG5cbiAgICBwcm9jZXNzb3IuZnJlZXplKClcbiAgICBhc3NlcnRQYXJzZXIoJ3Byb2Nlc3NTeW5jJywgcHJvY2Vzc29yLlBhcnNlcilcbiAgICBhc3NlcnRDb21waWxlcigncHJvY2Vzc1N5bmMnLCBwcm9jZXNzb3IuQ29tcGlsZXIpXG5cbiAgICBjb25zdCBmaWxlID0gdmZpbGUoZG9jKVxuXG4gICAgcHJvY2Vzc29yLnByb2Nlc3MoZmlsZSwgZG9uZSlcblxuICAgIGFzc2VydERvbmUoJ3Byb2Nlc3NTeW5jJywgJ3Byb2Nlc3MnLCBjb21wbGV0ZSlcblxuICAgIHJldHVybiBmaWxlXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0Vycm9yfG51bGx8dW5kZWZpbmVkfSBbZXJyb3JdXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZG9uZShlcnJvcikge1xuICAgICAgY29tcGxldGUgPSB0cnVlXG4gICAgICBiYWlsKGVycm9yKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGB2YWx1ZWAgaXMgYSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIG5ld2FibGUodmFsdWUsIG5hbWUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAvLyBQcm90b3R5cGVzIGRvIGV4aXN0LlxuICAgIC8vIHR5cGUtY292ZXJhZ2U6aWdub3JlLW5leHQtbGluZVxuICAgIHZhbHVlLnByb3RvdHlwZSAmJlxuICAgIC8vIEEgZnVuY3Rpb24gd2l0aCBrZXlzIGluIGl0cyBwcm90b3R5cGUgaXMgcHJvYmFibHkgYSBjb25zdHJ1Y3Rvci5cbiAgICAvLyBDbGFzc2VzXHUyMDE5IHByb3RvdHlwZSBtZXRob2RzIGFyZSBub3QgZW51bWVyYWJsZSwgc28gd2UgY2hlY2sgaWYgc29tZSB2YWx1ZVxuICAgIC8vIGV4aXN0cyBpbiB0aGUgcHJvdG90eXBlLlxuICAgIC8vIHR5cGUtY292ZXJhZ2U6aWdub3JlLW5leHQtbGluZVxuICAgIChrZXlzKHZhbHVlLnByb3RvdHlwZSkgfHwgbmFtZSBpbiB2YWx1ZS5wcm90b3R5cGUpXG4gIClcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCB3aXRoIGtleXMuXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBrZXlzKHZhbHVlKSB7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBsZXQga2V5XG5cbiAgZm9yIChrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAob3duLmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQXNzZXJ0IGEgcGFyc2VyIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgUGFyc2VyfVxuICovXG5mdW5jdGlvbiBhc3NlcnRQYXJzZXIobmFtZSwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBgJyArIG5hbWUgKyAnYCB3aXRob3V0IGBQYXJzZXJgJylcbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCBhIGNvbXBpbGVyIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHJldHVybnMge2Fzc2VydHMgdmFsdWUgaXMgQ29tcGlsZXJ9XG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbXBpbGVyKG5hbWUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYCcgKyBuYW1lICsgJ2Agd2l0aG91dCBgQ29tcGlsZXJgJylcbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCB0aGUgcHJvY2Vzc29yIGlzIG5vdCBmcm96ZW4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7dW5rbm93bn0gZnJvemVuXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBmcm96ZW4gaXMgZmFsc2V9XG4gKi9cbmZ1bmN0aW9uIGFzc2VydFVuZnJvemVuKG5hbWUsIGZyb3plbikge1xuICBpZiAoZnJvemVuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBjYWxsIGAnICtcbiAgICAgICAgbmFtZSArXG4gICAgICAgICdgIG9uIGEgZnJvemVuIHByb2Nlc3Nvci5cXG5DcmVhdGUgYSBuZXcgcHJvY2Vzc29yIGZpcnN0LCBieSBjYWxsaW5nIGl0OiB1c2UgYHByb2Nlc3NvcigpYCBpbnN0ZWFkIG9mIGBwcm9jZXNzb3JgLidcbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBBc3NlcnQgYG5vZGVgIGlzIGEgdW5pc3Qgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IG5vZGVcbiAqIEByZXR1cm5zIHthc3NlcnRzIG5vZGUgaXMgTm9kZX1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9kZShub2RlKSB7XG4gIC8vIGBpc1BsYWluT2JqYCB1bmZvcnR1bmF0ZWx5IHVzZXMgYGFueWAgaW5zdGVhZCBvZiBgdW5rbm93bmAuXG4gIC8vIHR5cGUtY292ZXJhZ2U6aWdub3JlLW5leHQtbGluZVxuICBpZiAoIWlzUGxhaW5PYmoobm9kZSkgfHwgdHlwZW9mIG5vZGUudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBub2RlLCBnb3QgYCcgKyBub2RlICsgJ2AnKVxuICAgIC8vIEZpbmUuXG4gIH1cbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCBgY29tcGxldGVgIGlzIGB0cnVlYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGFzeW5jTmFtZVxuICogQHBhcmFtIHt1bmtub3dufSBjb21wbGV0ZVxuICogQHJldHVybnMge2Fzc2VydHMgY29tcGxldGUgaXMgdHJ1ZX1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0RG9uZShuYW1lLCBhc3luY05hbWUsIGNvbXBsZXRlKSB7XG4gIGlmICghY29tcGxldGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnYCcgKyBuYW1lICsgJ2AgZmluaXNoZWQgYXN5bmMuIFVzZSBgJyArIGFzeW5jTmFtZSArICdgIGluc3RlYWQnXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtWRmlsZUNvbXBhdGlibGV9IFt2YWx1ZV1cbiAqIEByZXR1cm5zIHtWRmlsZX1cbiAqL1xuZnVuY3Rpb24gdmZpbGUodmFsdWUpIHtcbiAgcmV0dXJuIGxvb2tzTGlrZUFWRmlsZSh2YWx1ZSkgPyB2YWx1ZSA6IG5ldyBWRmlsZSh2YWx1ZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1ZGaWxlQ29tcGF0aWJsZX0gW3ZhbHVlXVxuICogQHJldHVybnMge3ZhbHVlIGlzIFZGaWxlfVxuICovXG5mdW5jdGlvbiBsb29rc0xpa2VBVkZpbGUodmFsdWUpIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgdmFsdWUgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICdtZXNzYWdlJyBpbiB2YWx1ZSAmJlxuICAgICAgJ21lc3NhZ2VzJyBpbiB2YWx1ZVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSBbdmFsdWVdXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgVkZpbGVWYWx1ZX1cbiAqL1xuZnVuY3Rpb24gbG9va3NMaWtlQVZGaWxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgaXNCdWZmZXIodmFsdWUpXG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuXHRpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG5cdHJldHVybiAocHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gbnVsbCkgJiYgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlKTtcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHsoZXJyb3I/OiBFcnJvcnxudWxsfHVuZGVmaW5lZCwgLi4ub3V0cHV0OiBBcnJheTxhbnk+KSA9PiB2b2lkfSBDYWxsYmFja1xuICogQHR5cGVkZWYgeyguLi5pbnB1dDogQXJyYXk8YW55PikgPT4gYW55fSBNaWRkbGV3YXJlXG4gKlxuICogQHR5cGVkZWYgeyguLi5pbnB1dDogQXJyYXk8YW55PikgPT4gdm9pZH0gUnVuXG4gKiAgIENhbGwgYWxsIG1pZGRsZXdhcmUuXG4gKiBAdHlwZWRlZiB7KGZuOiBNaWRkbGV3YXJlKSA9PiBQaXBlbGluZX0gVXNlXG4gKiAgIEFkZCBgZm5gIChtaWRkbGV3YXJlKSB0byB0aGUgbGlzdC5cbiAqIEB0eXBlZGVmIHt7cnVuOiBSdW4sIHVzZTogVXNlfX0gUGlwZWxpbmVcbiAqICAgTWlkZGxld2FyZS5cbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBuZXcgbWlkZGxld2FyZS5cbiAqXG4gKiBAcmV0dXJucyB7UGlwZWxpbmV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cm91Z2goKSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8TWlkZGxld2FyZT59ICovXG4gIGNvbnN0IGZucyA9IFtdXG4gIC8qKiBAdHlwZSB7UGlwZWxpbmV9ICovXG4gIGNvbnN0IHBpcGVsaW5lID0ge3J1biwgdXNlfVxuXG4gIHJldHVybiBwaXBlbGluZVxuXG4gIC8qKiBAdHlwZSB7UnVufSAqL1xuICBmdW5jdGlvbiBydW4oLi4udmFsdWVzKSB7XG4gICAgbGV0IG1pZGRsZXdhcmVJbmRleCA9IC0xXG4gICAgLyoqIEB0eXBlIHtDYWxsYmFja30gKi9cbiAgICBjb25zdCBjYWxsYmFjayA9IHZhbHVlcy5wb3AoKVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZnVuY3Rpb24gYXMgbGFzdCBhcmd1bWVudCwgbm90ICcgKyBjYWxsYmFjaylcbiAgICB9XG5cbiAgICBuZXh0KG51bGwsIC4uLnZhbHVlcylcblxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgbmV4dCBgZm5gLCBvciB3ZVx1MjAxOXJlIGRvbmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Vycm9yfG51bGx8dW5kZWZpbmVkfSBlcnJvclxuICAgICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gb3V0cHV0XG4gICAgICovXG4gICAgZnVuY3Rpb24gbmV4dChlcnJvciwgLi4ub3V0cHV0KSB7XG4gICAgICBjb25zdCBmbiA9IGZuc1srK21pZGRsZXdhcmVJbmRleF1cbiAgICAgIGxldCBpbmRleCA9IC0xXG5cbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcilcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIENvcHkgbm9uLW51bGxpc2ggaW5wdXQgaW50byB2YWx1ZXMuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG91dHB1dFtpbmRleF0gPT09IG51bGwgfHwgb3V0cHV0W2luZGV4XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3V0cHV0W2luZGV4XSA9IHZhbHVlc1tpbmRleF1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTYXZlIHRoZSBuZXdseSBjcmVhdGVkIGBvdXRwdXRgIGZvciB0aGUgbmV4dCBjYWxsLlxuICAgICAgdmFsdWVzID0gb3V0cHV0XG5cbiAgICAgIC8vIE5leHQgb3IgZG9uZS5cbiAgICAgIGlmIChmbikge1xuICAgICAgICB3cmFwKGZuLCBuZXh0KSguLi5vdXRwdXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhudWxsLCAuLi5vdXRwdXQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtVc2V9ICovXG4gIGZ1bmN0aW9uIHVzZShtaWRkZWx3YXJlKSB7XG4gICAgaWYgKHR5cGVvZiBtaWRkZWx3YXJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgYG1pZGRlbHdhcmVgIHRvIGJlIGEgZnVuY3Rpb24sIG5vdCAnICsgbWlkZGVsd2FyZVxuICAgICAgKVxuICAgIH1cblxuICAgIGZucy5wdXNoKG1pZGRlbHdhcmUpXG4gICAgcmV0dXJuIHBpcGVsaW5lXG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwIGBtaWRkbGV3YXJlYC5cbiAqIENhbiBiZSBzeW5jIG9yIGFzeW5jOyByZXR1cm4gYSBwcm9taXNlLCByZWNlaXZlIGEgY2FsbGJhY2ssIG9yIHJldHVybiBuZXdcbiAqIHZhbHVlcyBhbmQgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7TWlkZGxld2FyZX0gbWlkZGxld2FyZVxuICogQHBhcmFtIHtDYWxsYmFja30gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXAobWlkZGxld2FyZSwgY2FsbGJhY2spIHtcbiAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xuICBsZXQgY2FsbGVkXG5cbiAgcmV0dXJuIHdyYXBwZWRcblxuICAvKipcbiAgICogQ2FsbCBgbWlkZGxld2FyZWAuXG4gICAqIEB0aGlzIHthbnl9XG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHdyYXBwZWQoLi4ucGFyYW1ldGVycykge1xuICAgIGNvbnN0IGZuRXhwZWN0c0NhbGxiYWNrID0gbWlkZGxld2FyZS5sZW5ndGggPiBwYXJhbWV0ZXJzLmxlbmd0aFxuICAgIC8qKiBAdHlwZSB7YW55fSAqL1xuICAgIGxldCByZXN1bHRcblxuICAgIGlmIChmbkV4cGVjdHNDYWxsYmFjaykge1xuICAgICAgcGFyYW1ldGVycy5wdXNoKGRvbmUpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IG1pZGRsZXdhcmUuYXBwbHkodGhpcywgcGFyYW1ldGVycylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXhjZXB0aW9uID0gLyoqIEB0eXBlIHtFcnJvcn0gKi8gKGVycm9yKVxuXG4gICAgICAvLyBXZWxsLCB0aGlzIGlzIHF1aXRlIHRoZSBwaWNrbGUuXG4gICAgICAvLyBgbWlkZGxld2FyZWAgcmVjZWl2ZWQgYSBjYWxsYmFjayBhbmQgY2FsbGVkIGl0IHN5bmNocm9ub3VzbHksIGJ1dCB0aGF0XG4gICAgICAvLyB0aHJldyBhbiBlcnJvci5cbiAgICAgIC8vIFRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gZG8gaXMgdG8gdGhyb3cgdGhlIHRoaW5nIGluc3RlYWQuXG4gICAgICBpZiAoZm5FeHBlY3RzQ2FsbGJhY2sgJiYgY2FsbGVkKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG9uZShleGNlcHRpb24pXG4gICAgfVxuXG4gICAgaWYgKCFmbkV4cGVjdHNDYWxsYmFjaykge1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmVzdWx0LnRoZW4odGhlbiwgZG9uZSlcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgZG9uZShyZXN1bHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGVuKHJlc3VsdClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBgY2FsbGJhY2tgLCBvbmx5IG9uY2UuXG4gICAqIEB0eXBlIHtDYWxsYmFja31cbiAgICovXG4gIGZ1bmN0aW9uIGRvbmUoZXJyb3IsIC4uLm91dHB1dCkge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlXG4gICAgICBjYWxsYmFjayhlcnJvciwgLi4ub3V0cHV0KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIGBkb25lYCB3aXRoIG9uZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IFt2YWx1ZV1cbiAgICovXG4gIGZ1bmN0aW9uIHRoZW4odmFsdWUpIHtcbiAgICBkb25lKG51bGwsIHZhbHVlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLk5vZGV9IE5vZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUG9zaXRpb259IFBvc2l0aW9uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9taW51cmwuc2hhcmVkLmpzJykuVVJMfSBVUkxcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2luZGV4LmpzJykuRGF0YX0gRGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vaW5kZXguanMnKS5WYWx1ZX0gVmFsdWVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHt0eXBlOiBzdHJpbmcsIHBvc2l0aW9uPzogUG9zaXRpb24gfCB1bmRlZmluZWR9fSBOb2RlTGlrZVxuICpcbiAqIEB0eXBlZGVmIHsnYXNjaWknIHwgJ3V0ZjgnIHwgJ3V0Zi04JyB8ICd1dGYxNmxlJyB8ICd1Y3MyJyB8ICd1Y3MtMicgfCAnYmFzZTY0JyB8ICdiYXNlNjR1cmwnIHwgJ2xhdGluMScgfCAnYmluYXJ5JyB8ICdoZXgnfSBCdWZmZXJFbmNvZGluZ1xuICogICBFbmNvZGluZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBidWZmZXIgY2xhc3MuXG4gKlxuICogICBUaGlzIGlzIGEgY29weSBvZiB0aGUgdHlwZXMgZnJvbSBOb2RlLCBjb3BpZWQgdG8gcHJldmVudCBOb2RlIGdsb2JhbHMgZnJvbVxuICogICBiZWluZyBuZWVkZWQuXG4gKiAgIENvcGllZCBmcm9tOiA8aHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvYmxvYi85MGE0ZWM4L3R5cGVzL25vZGUvYnVmZmVyLmQudHMjTDE3MD5cbiAqXG4gKiBAdHlwZWRlZiB7T3B0aW9ucyB8IFVSTCB8IFZhbHVlIHwgVkZpbGV9IENvbXBhdGlibGVcbiAqICAgVGhpbmdzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuXG4gKlxuICogQHR5cGVkZWYgVkZpbGVDb3JlT3B0aW9uc1xuICogICBTZXQgbXVsdGlwbGUgdmFsdWVzLlxuICogQHByb3BlcnR5IHtWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV1cbiAqICAgU2V0IGB2YWx1ZWAuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtjd2RdXG4gKiAgIFNldCBgY3dkYC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPiB8IG51bGwgfCB1bmRlZmluZWR9IFtoaXN0b3J5XVxuICogICBTZXQgYGhpc3RvcnlgLlxuICogQHByb3BlcnR5IHtVUkwgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbcGF0aF1cbiAqICAgU2V0IGBwYXRoYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2Jhc2VuYW1lXVxuICogICBTZXQgYGJhc2VuYW1lYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3N0ZW1dXG4gKiAgIFNldCBgc3RlbWAuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtleHRuYW1lXVxuICogICBTZXQgYGV4dG5hbWVgLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbZGlybmFtZV1cbiAqICAgU2V0IGBkaXJuYW1lYC5cbiAqIEBwcm9wZXJ0eSB7RGF0YSB8IG51bGwgfCB1bmRlZmluZWR9IFtkYXRhXVxuICogICBTZXQgYGRhdGFgLlxuICpcbiAqIEB0eXBlZGVmIE1hcFxuICogICBSYXcgc291cmNlIG1hcC5cbiAqXG4gKiAgIFNlZTpcbiAqICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvYmxvYi81ODgxOWYwL3NvdXJjZS1tYXAuZC50cyNMMTUtTDIzPi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJzaW9uXG4gKiAgIFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IHNvdXJjZXNcbiAqICAgQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSBuYW1lc1xuICogICBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4gYmUgcmVmZXJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IFtzb3VyY2VSb290XVxuICogICBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz4gfCB1bmRlZmluZWR9IFtzb3VyY2VzQ29udGVudF1cbiAqICAgQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtYXBwaW5nc1xuICogICBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZVxuICogICBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqXG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IHVua25vd259ICYgVkZpbGVDb3JlT3B0aW9uc30gT3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uLlxuICpcbiAqICAgQSBidW5jaCBvZiBrZXlzIHRoYXQgd2lsbCBiZSBzaGFsbG93IGNvcGllZCBvdmVyIHRvIHRoZSBuZXcgZmlsZS5cbiAqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IFJlcG9ydGVyU2V0dGluZ3NcbiAqICAgQ29uZmlndXJhdGlvbiBmb3IgcmVwb3J0ZXJzLlxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtSZXBvcnRlclNldHRpbmdzfSBTZXR0aW5nc1xuICogICBPcHRpb25zIHR5cGUuXG4gKiBAY2FsbGJhY2sgUmVwb3J0ZXJcbiAqICAgVHlwZSBmb3IgYSByZXBvcnRlci5cbiAqIEBwYXJhbSB7QXJyYXk8VkZpbGU+fSBmaWxlc1xuICogICBGaWxlcyB0byByZXBvcnQuXG4gKiBAcGFyYW0ge1NldHRpbmdzfSBvcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBSZXBvcnQuXG4gKi9cblxuaW1wb3J0IGJ1ZmZlckxpa2UgZnJvbSAnaXMtYnVmZmVyJ1xuaW1wb3J0IHtWRmlsZU1lc3NhZ2V9IGZyb20gJ3ZmaWxlLW1lc3NhZ2UnXG5pbXBvcnQge3BhdGh9IGZyb20gJy4vbWlucGF0aC5qcydcbmltcG9ydCB7cHJvY30gZnJvbSAnLi9taW5wcm9jLmpzJ1xuaW1wb3J0IHt1cmxUb1BhdGgsIGlzVXJsfSBmcm9tICcuL21pbnVybC5qcydcblxuLyoqXG4gKiBPcmRlciBvZiBzZXR0aW5nIChsZWFzdCBzcGVjaWZpYyB0byBtb3N0KSwgd2UgbmVlZCB0aGlzIGJlY2F1c2Ugb3RoZXJ3aXNlXG4gKiBge3N0ZW06ICdhJywgcGF0aDogJ34vYi5qcyd9YCB3b3VsZCB0aHJvdywgYXMgYSBwYXRoIGlzIG5lZWRlZCBiZWZvcmUgYVxuICogc3RlbSBjYW4gYmUgc2V0LlxuICpcbiAqIEB0eXBlIHtBcnJheTwnYmFzZW5hbWUnIHwgJ2Rpcm5hbWUnIHwgJ2V4dG5hbWUnIHwgJ2hpc3RvcnknIHwgJ3BhdGgnIHwgJ3N0ZW0nPn1cbiAqL1xuY29uc3Qgb3JkZXIgPSBbJ2hpc3RvcnknLCAncGF0aCcsICdiYXNlbmFtZScsICdzdGVtJywgJ2V4dG5hbWUnLCAnZGlybmFtZSddXG5cbmV4cG9ydCBjbGFzcyBWRmlsZSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdmlydHVhbCBmaWxlLlxuICAgKlxuICAgKiBgb3B0aW9uc2AgaXMgdHJlYXRlZCBhczpcbiAgICpcbiAgICogKiAgIGBzdHJpbmdgIG9yIGBCdWZmZXJgIFx1MjAxNCBge3ZhbHVlOiBvcHRpb25zfWBcbiAgICogKiAgIGBVUkxgIFx1MjAxNCBge3BhdGg6IG9wdGlvbnN9YFxuICAgKiAqICAgYFZGaWxlYCBcdTIwMTQgc2hhbGxvdyBjb3BpZXMgaXRzIGRhdGEgb3ZlciB0byB0aGUgbmV3IGZpbGVcbiAgICogKiAgIGBvYmplY3RgIFx1MjAxNCBhbGwgZmllbGRzIGFyZSBzaGFsbG93IGNvcGllZCBvdmVyIHRvIHRoZSBuZXcgZmlsZVxuICAgKlxuICAgKiBQYXRoIHJlbGF0ZWQgZmllbGRzIGFyZSBzZXQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAobGVhc3Qgc3BlY2lmaWMgdG9cbiAgICogbW9zdCBzcGVjaWZpYyk6IGBoaXN0b3J5YCwgYHBhdGhgLCBgYmFzZW5hbWVgLCBgc3RlbWAsIGBleHRuYW1lYCxcbiAgICogYGRpcm5hbWVgLlxuICAgKlxuICAgKiBZb3UgY2Fubm90IHNldCBgZGlybmFtZWAgb3IgYGV4dG5hbWVgIHdpdGhvdXQgc2V0dGluZyBlaXRoZXIgYGhpc3RvcnlgLFxuICAgKiBgcGF0aGAsIGBiYXNlbmFtZWAsIG9yIGBzdGVtYCB0b28uXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV1cbiAgICogICBGaWxlIHZhbHVlLlxuICAgKiBAcmV0dXJuc1xuICAgKiAgIE5ldyBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgLyoqIEB0eXBlIHtPcHRpb25zIHwgVkZpbGV9ICovXG4gICAgbGV0IG9wdGlvbnNcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCBidWZmZXIodmFsdWUpKSB7XG4gICAgICBvcHRpb25zID0ge3ZhbHVlfVxuICAgIH0gZWxzZSBpZiAoaXNVcmwodmFsdWUpKSB7XG4gICAgICBvcHRpb25zID0ge3BhdGg6IHZhbHVlfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gdmFsdWVcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGFjZSB0byBzdG9yZSBjdXN0b20gaW5mb3JtYXRpb24gKGRlZmF1bHQ6IGB7fWApLlxuICAgICAqXG4gICAgICogSXRcdTIwMTlzIE9LIHRvIHN0b3JlIGN1c3RvbSBkYXRhIGRpcmVjdGx5IG9uIHRoZSBmaWxlIGJ1dCBtb3ZpbmcgaXQgdG9cbiAgICAgKiBgZGF0YWAgaXMgcmVjb21tZW5kZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RGF0YX1cbiAgICAgKi9cbiAgICB0aGlzLmRhdGEgPSB7fVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXk8VkZpbGVNZXNzYWdlPn1cbiAgICAgKi9cbiAgICB0aGlzLm1lc3NhZ2VzID0gW11cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgZmlsZXBhdGhzIHRoZSBmaWxlIG1vdmVkIGJldHdlZW4uXG4gICAgICpcbiAgICAgKiBUaGUgZmlyc3QgaXMgdGhlIG9yaWdpbmFsIHBhdGggYW5kIHRoZSBsYXN0IGlzIHRoZSBjdXJyZW50IHBhdGguXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn1cbiAgICAgKi9cbiAgICB0aGlzLmhpc3RvcnkgPSBbXVxuXG4gICAgLyoqXG4gICAgICogQmFzZSBvZiBgcGF0aGAgKGRlZmF1bHQ6IGBwcm9jZXNzLmN3ZCgpYCBvciBgJy8nYCBpbiBicm93c2VycykuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuY3dkID0gcHJvYy5jd2QoKVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgLyoqXG4gICAgICogUmF3IHZhbHVlLlxuICAgICAqXG4gICAgICogQHR5cGUge1ZhbHVlfVxuICAgICAqL1xuICAgIHRoaXMudmFsdWVcblxuICAgIC8vIFRoZSBiZWxvdyBhcmUgbm9uLXN0YW5kYXJkLCB0aGV5IGFyZSBcdTIwMUN3ZWxsLWtub3duXHUyMDFELlxuICAgIC8vIEFzIGluLCB1c2VkIGluIHNldmVyYWwgdG9vbHMuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGEgZmlsZSB3YXMgc2F2ZWQgdG8gZGlzay5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCBieSB2ZmlsZSByZXBvcnRlcnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnN0b3JlZFxuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tLCBub24tc3RyaW5nLCBjb21waWxlZCwgcmVwcmVzZW50YXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgYnkgdW5pZmllZCB0byBzdG9yZSBub24tc3RyaW5nIHJlc3VsdHMuXG4gICAgICogT25lIGV4YW1wbGUgaXMgd2hlbiB0dXJuaW5nIG1hcmtkb3duIGludG8gUmVhY3Qgbm9kZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7dW5rbm93bn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3VsdFxuXG4gICAgLyoqXG4gICAgICogU291cmNlIG1hcC5cbiAgICAgKlxuICAgICAqIFRoaXMgdHlwZSBpcyBlcXVpdmFsZW50IHRvIHRoZSBgUmF3U291cmNlTWFwYCB0eXBlIGZyb20gdGhlIGBzb3VyY2UtbWFwYFxuICAgICAqIG1vZHVsZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNYXAgfCBudWxsIHwgdW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMubWFwXG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cblxuICAgIC8vIFNldCBwYXRoIHJlbGF0ZWQgcHJvcGVydGllcyBpbiB0aGUgY29ycmVjdCBvcmRlci5cbiAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgd2hpbGUgKCsraW5kZXggPCBvcmRlci5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3AgPSBvcmRlcltpbmRleF1cblxuICAgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNhbGx5IHVzZSBgaW5gIGluc3RlYWQgb2YgYGhhc093blByb3BlcnR5YCB0byBhY2NlcHRcbiAgICAgIC8vIGB2ZmlsZWBzIHRvby5cbiAgICAgIGlmIChcbiAgICAgICAgcHJvcCBpbiBvcHRpb25zICYmXG4gICAgICAgIG9wdGlvbnNbcHJvcF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBvcHRpb25zW3Byb3BdICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgZG9lc25cdTIwMTl0IHVuZGVyc3RhbmQgYmFzaWMgcmVhbGl0eS5cbiAgICAgICAgdGhpc1twcm9wXSA9IHByb3AgPT09ICdoaXN0b3J5JyA/IFsuLi5vcHRpb25zW3Byb3BdXSA6IG9wdGlvbnNbcHJvcF1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgcHJvcFxuXG4gICAgLy8gU2V0IG5vbi1wYXRoIHJlbGF0ZWQgcHJvcGVydGllcy5cbiAgICBmb3IgKHByb3AgaW4gb3B0aW9ucykge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogZmluZSB0byBzZXQgb3RoZXIgdGhpbmdzLlxuICAgICAgaWYgKCFvcmRlci5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBmaW5lIHRvIHNldCBvdGhlciB0aGluZ3MuXG4gICAgICAgIHRoaXNbcHJvcF0gPSBvcHRpb25zW3Byb3BdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCBwYXRoIChleGFtcGxlOiBgJ34vaW5kZXgubWluLmpzJ2ApLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IHBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMV1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZ1bGwgcGF0aCAoZXhhbXBsZTogYCd+L2luZGV4Lm1pbi5qcydgKS5cbiAgICpcbiAgICogQ2Fubm90IGJlIG51bGxpZmllZC5cbiAgICogWW91IGNhbiBzZXQgYSBmaWxlIFVSTCAoYSBgVVJMYCBvYmplY3Qgd2l0aCBhIGBmaWxlOmAgcHJvdG9jb2wpIHdoaWNoIHdpbGxcbiAgICogYmUgdHVybmVkIGludG8gYSBwYXRoIHdpdGggYHVybC5maWxlVVJMVG9QYXRoYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVUkx9IHBhdGhcbiAgICovXG4gIHNldCBwYXRoKHBhdGgpIHtcbiAgICBpZiAoaXNVcmwocGF0aCkpIHtcbiAgICAgIHBhdGggPSB1cmxUb1BhdGgocGF0aClcbiAgICB9XG5cbiAgICBhc3NlcnROb25FbXB0eShwYXRoLCAncGF0aCcpXG5cbiAgICBpZiAodGhpcy5wYXRoICE9PSBwYXRoKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChwYXRoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBhcmVudCBwYXRoIChleGFtcGxlOiBgJ34nYCkuXG4gICAqL1xuICBnZXQgZGlybmFtZSgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gJ3N0cmluZycgPyBwYXRoLmRpcm5hbWUodGhpcy5wYXRoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcGFyZW50IHBhdGggKGV4YW1wbGU6IGAnfidgKS5cbiAgICpcbiAgICogQ2Fubm90IGJlIHNldCBpZiB0aGVyZVx1MjAxOXMgbm8gYHBhdGhgIHlldC5cbiAgICovXG4gIHNldCBkaXJuYW1lKGRpcm5hbWUpIHtcbiAgICBhc3NlcnRQYXRoKHRoaXMuYmFzZW5hbWUsICdkaXJuYW1lJylcbiAgICB0aGlzLnBhdGggPSBwYXRoLmpvaW4oZGlybmFtZSB8fCAnJywgdGhpcy5iYXNlbmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2VuYW1lIChpbmNsdWRpbmcgZXh0bmFtZSkgKGV4YW1wbGU6IGAnaW5kZXgubWluLmpzJ2ApLlxuICAgKi9cbiAgZ2V0IGJhc2VuYW1lKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAnc3RyaW5nJyA/IHBhdGguYmFzZW5hbWUodGhpcy5wYXRoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBiYXNlbmFtZSAoaW5jbHVkaW5nIGV4dG5hbWUpIChgJ2luZGV4Lm1pbi5qcydgKS5cbiAgICpcbiAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1xcJ2BcbiAgICogb24gd2luZG93cykuXG4gICAqIENhbm5vdCBiZSBudWxsaWZpZWQgKHVzZSBgZmlsZS5wYXRoID0gZmlsZS5kaXJuYW1lYCBpbnN0ZWFkKS5cbiAgICovXG4gIHNldCBiYXNlbmFtZShiYXNlbmFtZSkge1xuICAgIGFzc2VydE5vbkVtcHR5KGJhc2VuYW1lLCAnYmFzZW5hbWUnKVxuICAgIGFzc2VydFBhcnQoYmFzZW5hbWUsICdiYXNlbmFtZScpXG4gICAgdGhpcy5wYXRoID0gcGF0aC5qb2luKHRoaXMuZGlybmFtZSB8fCAnJywgYmFzZW5hbWUpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRuYW1lIChpbmNsdWRpbmcgZG90KSAoZXhhbXBsZTogYCcuanMnYCkuXG4gICAqL1xuICBnZXQgZXh0bmFtZSgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gJ3N0cmluZycgPyBwYXRoLmV4dG5hbWUodGhpcy5wYXRoKSA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZXh0bmFtZSAoaW5jbHVkaW5nIGRvdCkgKGV4YW1wbGU6IGAnLmpzJ2ApLlxuICAgKlxuICAgKiBDYW5ub3QgY29udGFpbiBwYXRoIHNlcGFyYXRvcnMgKGAnLydgIG9uIHVuaXgsIG1hY09TLCBhbmQgYnJvd3NlcnMsIGAnXFwnYFxuICAgKiBvbiB3aW5kb3dzKS5cbiAgICogQ2Fubm90IGJlIHNldCBpZiB0aGVyZVx1MjAxOXMgbm8gYHBhdGhgIHlldC5cbiAgICovXG4gIHNldCBleHRuYW1lKGV4dG5hbWUpIHtcbiAgICBhc3NlcnRQYXJ0KGV4dG5hbWUsICdleHRuYW1lJylcbiAgICBhc3NlcnRQYXRoKHRoaXMuZGlybmFtZSwgJ2V4dG5hbWUnKVxuXG4gICAgaWYgKGV4dG5hbWUpIHtcbiAgICAgIGlmIChleHRuYW1lLmNoYXJDb2RlQXQoMCkgIT09IDQ2IC8qIGAuYCAqLykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gJylcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dG5hbWUuaW5jbHVkZXMoJy4nLCAxKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoLmpvaW4odGhpcy5kaXJuYW1lLCB0aGlzLnN0ZW0gKyAoZXh0bmFtZSB8fCAnJykpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVtIChiYXNlbmFtZSB3L28gZXh0bmFtZSkgKGV4YW1wbGU6IGAnaW5kZXgubWluJ2ApLlxuICAgKi9cbiAgZ2V0IHN0ZW0oKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnXG4gICAgICA/IHBhdGguYmFzZW5hbWUodGhpcy5wYXRoLCB0aGlzLmV4dG5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS5cbiAgICpcbiAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1xcJ2BcbiAgICogb24gd2luZG93cykuXG4gICAqIENhbm5vdCBiZSBudWxsaWZpZWQgKHVzZSBgZmlsZS5wYXRoID0gZmlsZS5kaXJuYW1lYCBpbnN0ZWFkKS5cbiAgICovXG4gIHNldCBzdGVtKHN0ZW0pIHtcbiAgICBhc3NlcnROb25FbXB0eShzdGVtLCAnc3RlbScpXG4gICAgYXNzZXJ0UGFydChzdGVtLCAnc3RlbScpXG4gICAgdGhpcy5wYXRoID0gcGF0aC5qb2luKHRoaXMuZGlybmFtZSB8fCAnJywgc3RlbSArICh0aGlzLmV4dG5hbWUgfHwgJycpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0aGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtCdWZmZXJFbmNvZGluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmNvZGluZz0ndXRmOCddXG4gICAqICAgQ2hhcmFjdGVyIGVuY29kaW5nIHRvIHVuZGVyc3RhbmQgYHZhbHVlYCBhcyB3aGVuIGl0XHUyMDE5cyBhIGBCdWZmZXJgXG4gICAqICAgKGRlZmF1bHQ6IGAndXRmOCdgKS5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogICBTZXJpYWxpemVkIGZpbGUuXG4gICAqL1xuICB0b1N0cmluZyhlbmNvZGluZykge1xuICAgIHJldHVybiAodGhpcy52YWx1ZSB8fCAnJykudG9TdHJpbmcoZW5jb2RpbmcgfHwgdW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHdhcm5pbmcgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIEl0cyBgZmF0YWxgIGlzIHNldCB0byBgZmFsc2VgIGFuZCBgZmlsZWAgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC5cbiAgICogSXRzIGFkZGVkIHRvIGBmaWxlLm1lc3NhZ2VzYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBFcnJvciB8IFZGaWxlTWVzc2FnZX0gcmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCB1c2VzIHRoZSBzdGFjayBhbmQgbWVzc2FnZSBvZiB0aGUgZXJyb3IgaWYgZ2l2ZW4uXG4gICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgUG9zaXRpb24gfCBQb2ludCB8IG51bGwgfCB1bmRlZmluZWR9IFtwbGFjZV1cbiAgICogICBQbGFjZSBpbiBmaWxlIHdoZXJlIHRoZSBtZXNzYWdlIG9jY3VycmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOlxuICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLlxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKiAgIE1lc3NhZ2UuXG4gICAqL1xuICBtZXNzYWdlKHJlYXNvbiwgcGxhY2UsIG9yaWdpbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgVkZpbGVNZXNzYWdlKHJlYXNvbiwgcGxhY2UsIG9yaWdpbilcblxuICAgIGlmICh0aGlzLnBhdGgpIHtcbiAgICAgIG1lc3NhZ2UubmFtZSA9IHRoaXMucGF0aCArICc6JyArIG1lc3NhZ2UubmFtZVxuICAgICAgbWVzc2FnZS5maWxlID0gdGhpcy5wYXRoXG4gICAgfVxuXG4gICAgbWVzc2FnZS5mYXRhbCA9IGZhbHNlXG5cbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcblxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluZm8gbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIEl0cyBgZmF0YWxgIGlzIHNldCB0byBgbnVsbGAgYW5kIGBmaWxlYCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZmlsZSBwYXRoLlxuICAgKiBJdHMgYWRkZWQgdG8gYGZpbGUubWVzc2FnZXNgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IEVycm9yIHwgVkZpbGVNZXNzYWdlfSByZWFzb25cbiAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHVzZXMgdGhlIHN0YWNrIGFuZCBtZXNzYWdlIG9mIHRoZSBlcnJvciBpZiBnaXZlbi5cbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBQb3NpdGlvbiB8IFBvaW50IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3BsYWNlXVxuICAgKiAgIFBsYWNlIGluIGZpbGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6XG4gICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuXG4gICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9XG4gICAqICAgTWVzc2FnZS5cbiAgICovXG4gIGluZm8ocmVhc29uLCBwbGFjZSwgb3JpZ2luKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZShyZWFzb24sIHBsYWNlLCBvcmlnaW4pXG5cbiAgICBtZXNzYWdlLmZhdGFsID0gbnVsbFxuXG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmYXRhbCBlcnJvciBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIEl0cyBgZmF0YWxgIGlzIHNldCB0byBgdHJ1ZWAgYW5kIGBmaWxlYCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZmlsZSBwYXRoLlxuICAgKiBJdHMgYWRkZWQgdG8gYGZpbGUubWVzc2FnZXNgLlxuICAgKlxuICAgKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogYSBmYXRhbCBlcnJvciBtZWFucyB0aGF0IGEgZmlsZSBpcyBubyBsb25nZXIgcHJvY2Vzc2FibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRXJyb3IgfCBWRmlsZU1lc3NhZ2V9IHJlYXNvblxuICAgKiAgIFJlYXNvbiBmb3IgbWVzc2FnZSwgdXNlcyB0aGUgc3RhY2sgYW5kIG1lc3NhZ2Ugb2YgdGhlIGVycm9yIGlmIGdpdmVuLlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IFBvc2l0aW9uIHwgUG9pbnQgfCBudWxsIHwgdW5kZWZpbmVkfSBbcGxhY2VdXG4gICAqICAgUGxhY2UgaW4gZmlsZSB3aGVyZSB0aGUgbWVzc2FnZSBvY2N1cnJlZC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZTpcbiAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS5cbiAgICogQHJldHVybnMge25ldmVyfVxuICAgKiAgIE1lc3NhZ2UuXG4gICAqIEB0aHJvd3Mge1ZGaWxlTWVzc2FnZX1cbiAgICogICBNZXNzYWdlLlxuICAgKi9cbiAgZmFpbChyZWFzb24sIHBsYWNlLCBvcmlnaW4pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKHJlYXNvbiwgcGxhY2UsIG9yaWdpbilcblxuICAgIG1lc3NhZ2UuZmF0YWwgPSB0cnVlXG5cbiAgICB0aHJvdyBtZXNzYWdlXG4gIH1cbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCBgcGFydGAgaXMgbm90IGEgcGF0aCAoYXMgaW4sIGRvZXMgbm90IGNvbnRhaW4gYHBhdGguc2VwYCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJ0XG4gKiAgIEZpbGUgcGF0aCBwYXJ0LlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqICAgUGFydCBuYW1lLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFBhcnQocGFydCwgbmFtZSkge1xuICBpZiAocGFydCAmJiBwYXJ0LmluY2x1ZGVzKHBhdGguc2VwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdgJyArIG5hbWUgKyAnYCBjYW5ub3QgYmUgYSBwYXRoOiBkaWQgbm90IGV4cGVjdCBgJyArIHBhdGguc2VwICsgJ2AnXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgYHBhcnRgIGlzIG5vdCBlbXB0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gcGFydFxuICogICBUaGluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiAgIFBhcnQgbmFtZS5cbiAqIEByZXR1cm5zIHthc3NlcnRzIHBhcnQgaXMgc3RyaW5nfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eShwYXJ0LCBuYW1lKSB7XG4gIGlmICghcGFydCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYCcgKyBuYW1lICsgJ2AgY2Fubm90IGJlIGVtcHR5JylcbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCBgcGF0aGAgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBwYXRoXG4gKiAgIFBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogICBEZXBlbmRlbmN5IG5hbWUuXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBwYXRoIGlzIHN0cmluZ31cbiAqICAgTm90aGluZy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoLCBuYW1lKSB7XG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZyBgJyArIG5hbWUgKyAnYCByZXF1aXJlcyBgcGF0aGAgdG8gYmUgc2V0IHRvbycpXG4gIH1cbn1cblxuLyoqXG4gKiBBc3NlcnQgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlXG4gKiAgIHRoaW5nLlxuICogQHJldHVybnMge3ZhbHVlIGlzIEJ1ZmZlcn1cbiAqICAgV2hldGhlciBgdmFsdWVgIGlzIGEgTm9kZS5qcyBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlcih2YWx1ZSkge1xuICByZXR1cm4gYnVmZmVyTGlrZSh2YWx1ZSlcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuTm9kZX0gTm9kZVxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Qb2ludH0gUG9pbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUG9zaXRpb259IFBvc2l0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBOb2RlTGlrZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb25MaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3Bvc2l0aW9uXVxuICpcbiAqIEB0eXBlZGVmIFBvc2l0aW9uTGlrZVxuICogQHByb3BlcnR5IHtQb2ludExpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbc3RhcnRdXG4gKiBAcHJvcGVydHkge1BvaW50TGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmRdXG4gKlxuICogQHR5cGVkZWYgUG9pbnRMaWtlXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtsaW5lXVxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbY29sdW1uXVxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbb2Zmc2V0XVxuICovXG5cbi8qKlxuICogU2VyaWFsaXplIHRoZSBwb3NpdGlvbmFsIGluZm8gb2YgYSBwb2ludCwgcG9zaXRpb24gKHN0YXJ0IGFuZCBlbmQgcG9pbnRzKSxcbiAqIG9yIG5vZGUuXG4gKlxuICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBQb3NpdGlvbiB8IFBvc2l0aW9uTGlrZSB8IFBvaW50IHwgUG9pbnRMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3ZhbHVlXVxuICogICBOb2RlLCBwb3NpdGlvbiwgb3IgcG9pbnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBQcmV0dHkgcHJpbnRlZCBwb3NpdGlvbmFsIGluZm8gb2YgYSBub2RlIChgc3RyaW5nYCkuXG4gKlxuICogICBJbiB0aGUgZm9ybWF0IG9mIGEgcmFuZ2UgYGxzOmNzLWxlOmNlYCAod2hlbiBnaXZlbiBgbm9kZWAgb3IgYHBvc2l0aW9uYClcbiAqICAgb3IgYSBwb2ludCBgbDpjYCAod2hlbiBnaXZlbiBgcG9pbnRgKSwgd2hlcmUgYGxgIHN0YW5kcyBmb3IgbGluZSwgYGNgIGZvclxuICogICBjb2x1bW4sIGBzYCBmb3IgYHN0YXJ0YCwgYW5kIGBlYCBmb3IgZW5kLlxuICogICBBbiBlbXB0eSBzdHJpbmcgKGAnJ2ApIGlzIHJldHVybmVkIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBuZWl0aGVyIGBub2RlYCxcbiAqICAgYHBvc2l0aW9uYCwgbm9yIGBwb2ludGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlQb3NpdGlvbih2YWx1ZSkge1xuICAvLyBOb3RoaW5nLlxuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIE5vZGUuXG4gIGlmICgncG9zaXRpb24nIGluIHZhbHVlIHx8ICd0eXBlJyBpbiB2YWx1ZSkge1xuICAgIHJldHVybiBwb3NpdGlvbih2YWx1ZS5wb3NpdGlvbilcbiAgfVxuXG4gIC8vIFBvc2l0aW9uLlxuICBpZiAoJ3N0YXJ0JyBpbiB2YWx1ZSB8fCAnZW5kJyBpbiB2YWx1ZSkge1xuICAgIHJldHVybiBwb3NpdGlvbih2YWx1ZSlcbiAgfVxuXG4gIC8vIFBvaW50LlxuICBpZiAoJ2xpbmUnIGluIHZhbHVlIHx8ICdjb2x1bW4nIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIHBvaW50KHZhbHVlKVxuICB9XG5cbiAgLy8gP1xuICByZXR1cm4gJydcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BvaW50IHwgUG9pbnRMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcG9pbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHBvaW50KHBvaW50KSB7XG4gIHJldHVybiBpbmRleChwb2ludCAmJiBwb2ludC5saW5lKSArICc6JyArIGluZGV4KHBvaW50ICYmIHBvaW50LmNvbHVtbilcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Bvc2l0aW9uIHwgUG9zaXRpb25MaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcG9zXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBwb3NpdGlvbihwb3MpIHtcbiAgcmV0dXJuIHBvaW50KHBvcyAmJiBwb3Muc3RhcnQpICsgJy0nICsgcG9pbnQocG9zICYmIHBvcy5lbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gaW5kZXgodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyB2YWx1ZSA6IDFcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuTm9kZX0gTm9kZVxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Qb3NpdGlvbn0gUG9zaXRpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUG9pbnR9IFBvaW50XG4gKiBAdHlwZWRlZiB7b2JqZWN0ICYge3R5cGU6IHN0cmluZywgcG9zaXRpb24/OiBQb3NpdGlvbiB8IHVuZGVmaW5lZH19IE5vZGVMaWtlXG4gKi9cblxuaW1wb3J0IHtzdHJpbmdpZnlQb3NpdGlvbn0gZnJvbSAndW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24nXG5cbi8qKlxuICogTWVzc2FnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFZGaWxlTWVzc2FnZSBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1lc3NhZ2UgZm9yIGByZWFzb25gIGF0IGBwbGFjZWAgZnJvbSBgb3JpZ2luYC5cbiAgICpcbiAgICogV2hlbiBhbiBlcnJvciBpcyBwYXNzZWQgaW4gYXMgYHJlYXNvbmAsIHRoZSBgc3RhY2tgIGlzIGNvcGllZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBFcnJvciB8IFZGaWxlTWVzc2FnZX0gcmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCB1c2VzIHRoZSBzdGFjayBhbmQgbWVzc2FnZSBvZiB0aGUgZXJyb3IgaWYgZ2l2ZW4uXG4gICAqXG4gICAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHlvdSBzaG91bGQgdXNlIG1hcmtkb3duLlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IFBvc2l0aW9uIHwgUG9pbnQgfCBudWxsIHwgdW5kZWZpbmVkfSBbcGxhY2VdXG4gICAqICAgUGxhY2UgaW4gZmlsZSB3aGVyZSB0aGUgbWVzc2FnZSBvY2N1cnJlZC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZTpcbiAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS5cbiAgICogQHJldHVybnNcbiAgICogICBJbnN0YW5jZSBvZiBgVkZpbGVNZXNzYWdlYC5cbiAgICovXG4gIC8vIFRvIGRvOiBuZXh0IG1ham9yOiBleHBvc2UgYHVuZGVmaW5lZGAgZXZlcnl3aGVyZSBpbnN0ZWFkIG9mIGBudWxsYC5cbiAgY29uc3RydWN0b3IocmVhc29uLCBwbGFjZSwgb3JpZ2luKSB7XG4gICAgLyoqIEB0eXBlIHtbc3RyaW5nIHwgbnVsbCwgc3RyaW5nIHwgbnVsbF19ICovXG4gICAgY29uc3QgcGFydHMgPSBbbnVsbCwgbnVsbF1cbiAgICAvKiogQHR5cGUge1Bvc2l0aW9ufSAqL1xuICAgIGxldCBwb3NpdGlvbiA9IHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHdlIGFsd2F5cyBmb2xsb3dzIHRoZSBzdHJ1Y3R1cmUgb2YgYHBvc2l0aW9uYC5cbiAgICAgIHN0YXJ0OiB7bGluZTogbnVsbCwgY29sdW1uOiBudWxsfSxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IFwiXG4gICAgICBlbmQ6IHtsaW5lOiBudWxsLCBjb2x1bW46IG51bGx9XG4gICAgfVxuXG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKHR5cGVvZiBwbGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9yaWdpbiA9IHBsYWNlXG4gICAgICBwbGFjZSA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3JpZ2luID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaW5kZXggPSBvcmlnaW4uaW5kZXhPZignOicpXG5cbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcGFydHNbMV0gPSBvcmlnaW5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzWzBdID0gb3JpZ2luLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICBwYXJ0c1sxXSA9IG9yaWdpbi5zbGljZShpbmRleCArIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlKSB7XG4gICAgICAvLyBOb2RlLlxuICAgICAgaWYgKCd0eXBlJyBpbiBwbGFjZSB8fCAncG9zaXRpb24nIGluIHBsYWNlKSB7XG4gICAgICAgIGlmIChwbGFjZS5wb3NpdGlvbikge1xuICAgICAgICAgIC8vIFRvIGRvOiBuZXh0IG1ham9yOiBkZWVwIGNsb25lLlxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGxvb2tzIGxpa2UgYSBwb3NpdGlvbi5cbiAgICAgICAgICBwb3NpdGlvbiA9IHBsYWNlLnBvc2l0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFBvc2l0aW9uLlxuICAgICAgZWxzZSBpZiAoJ3N0YXJ0JyBpbiBwbGFjZSB8fCAnZW5kJyBpbiBwbGFjZSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBsb29rcyBsaWtlIGEgcG9zaXRpb24uXG4gICAgICAgIC8vIFRvIGRvOiBuZXh0IG1ham9yOiBkZWVwIGNsb25lLlxuICAgICAgICBwb3NpdGlvbiA9IHBsYWNlXG4gICAgICB9XG4gICAgICAvLyBQb2ludC5cbiAgICAgIGVsc2UgaWYgKCdsaW5lJyBpbiBwbGFjZSB8fCAnY29sdW1uJyBpbiBwbGFjZSkge1xuICAgICAgICAvLyBUbyBkbzogbmV4dCBtYWpvcjogZGVlcCBjbG9uZS5cbiAgICAgICAgcG9zaXRpb24uc3RhcnQgPSBwbGFjZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpZWxkcyBmcm9tIGBFcnJvcmAuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplZCBwb3NpdGlvbmFsIGluZm8gb2YgZXJyb3IuXG4gICAgICpcbiAgICAgKiBPbiBub3JtYWwgZXJyb3JzLCB0aGlzIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlIGBQYXJzZUVycm9yYCwgYnVpdCBpblxuICAgICAqIGBWRmlsZWAgbWVzc2FnZXMgd2UgdXNlIHRoaXMgc3BhY2UgdG8gc2hvdyB3aGVyZSBhbiBlcnJvciBoYXBwZW5lZC5cbiAgICAgKi9cbiAgICB0aGlzLm5hbWUgPSBzdHJpbmdpZnlQb3NpdGlvbihwbGFjZSkgfHwgJzE6MSdcblxuICAgIC8qKlxuICAgICAqIFJlYXNvbiBmb3IgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5tZXNzYWdlID0gdHlwZW9mIHJlYXNvbiA9PT0gJ29iamVjdCcgPyByZWFzb24ubWVzc2FnZSA6IHJlYXNvblxuXG4gICAgLyoqXG4gICAgICogU3RhY2sgb2YgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCBieSBub3JtYWwgZXJyb3JzIHRvIHNob3cgd2hlcmUgc29tZXRoaW5nIGhhcHBlbmVkIGluXG4gICAgICogcHJvZ3JhbW1pbmcgY29kZSwgaXJyZWxldmFudCBmb3IgYFZGaWxlYCBtZXNzYWdlcyxcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgdGhpcy5zdGFjayA9ICcnXG5cbiAgICBpZiAodHlwZW9mIHJlYXNvbiA9PT0gJ29iamVjdCcgJiYgcmVhc29uLnN0YWNrKSB7XG4gICAgICB0aGlzLnN0YWNrID0gcmVhc29uLnN0YWNrXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhc29uIGZvciBtZXNzYWdlLlxuICAgICAqXG4gICAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHlvdSBzaG91bGQgdXNlIG1hcmtkb3duLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLnJlYXNvbiA9IHRoaXMubWVzc2FnZVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgLyoqXG4gICAgICogU3RhdGUgb2YgcHJvYmxlbS5cbiAgICAgKlxuICAgICAqICogYHRydWVgIFx1MjAxNCBtYXJrcyBhc3NvY2lhdGVkIGZpbGUgYXMgbm8gbG9uZ2VyIHByb2Nlc3NhYmxlIChlcnJvcilcbiAgICAgKiAqIGBmYWxzZWAgXHUyMDE0IG5lY2Vzc2l0YXRlcyBhIChwb3RlbnRpYWwpIGNoYW5nZSAod2FybmluZylcbiAgICAgKiAqIGBudWxsIHwgdW5kZWZpbmVkYCBcdTIwMTQgZm9yIHRoaW5ncyB0aGF0IG1pZ2h0IG5vdCBuZWVkIGNoYW5naW5nIChpbmZvKVxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMuZmF0YWxcblxuICAgIC8qKlxuICAgICAqIFN0YXJ0aW5nIGxpbmUgb2YgZXJyb3IuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyIHwgbnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLmxpbmUgPSBwb3NpdGlvbi5zdGFydC5saW5lXG5cbiAgICAvKipcbiAgICAgKiBTdGFydGluZyBjb2x1bW4gb2YgZXJyb3IuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyIHwgbnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbHVtbiA9IHBvc2l0aW9uLnN0YXJ0LmNvbHVtblxuXG4gICAgLyoqXG4gICAgICogRnVsbCB1bmlzdCBwb3NpdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtQb3NpdGlvbiB8IG51bGx9XG4gICAgICovXG4gICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uXG5cbiAgICAvKipcbiAgICAgKiBOYW1lc3BhY2Ugb2YgbWVzc2FnZSAoZXhhbXBsZTogYCdteS1wYWNrYWdlJ2ApLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IG51bGx9XG4gICAgICovXG4gICAgdGhpcy5zb3VyY2UgPSBwYXJ0c1swXVxuXG4gICAgLyoqXG4gICAgICogQ2F0ZWdvcnkgb2YgbWVzc2FnZSAoZXhhbXBsZTogYCdteS1ydWxlJ2ApLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IG51bGx9XG4gICAgICovXG4gICAgdGhpcy5ydWxlSWQgPSBwYXJ0c1sxXVxuXG4gICAgLyoqXG4gICAgICogUGF0aCBvZiBhIGZpbGUgKHVzZWQgdGhyb3VnaG91dCB0aGUgYFZGaWxlYCBlY29zeXN0ZW0pLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IG51bGx9XG4gICAgICovXG4gICAgdGhpcy5maWxlXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgXHUyMDFDd2VsbCBrbm93blx1MjAxRC5cbiAgICAvLyBOb3Qgc3RhbmRhcmQuXG4gICAgLy8gRmVlbCBmcmVlIHRvIGFkZCBvdGhlciBub24tc3RhbmRhcmQgZmllbGRzIHRvIHlvdXIgbWVzc2FnZXMuXG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHRoZSBzb3VyY2UgdmFsdWUgdGhhdFx1MjAxOXMgYmVpbmcgcmVwb3J0ZWQsIHdoaWNoIGlzIGRlZW1lZFxuICAgICAqIGluY29ycmVjdC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmcgfCBudWxsfVxuICAgICAqL1xuICAgIHRoaXMuYWN0dWFsXG5cbiAgICAvKipcbiAgICAgKiBTdWdnZXN0IGFjY2VwdGFibGUgdmFsdWVzIHRoYXQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBgYWN0dWFsYC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheTxzdHJpbmc+IHwgbnVsbH1cbiAgICAgKi9cbiAgICB0aGlzLmV4cGVjdGVkXG5cbiAgICAvKipcbiAgICAgKiBMaW5rIHRvIGRvY3MgZm9yIHRoZSBtZXNzYWdlLlxuICAgICAqXG4gICAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHRoaXMgbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgdGhhdCBjYW4gYmUgcGFzc2VkIGFzIGB4YFxuICAgICAqID4gdG8gYG5ldyBVUkwoeClgLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IG51bGx9XG4gICAgICovXG4gICAgdGhpcy51cmxcblxuICAgIC8qKlxuICAgICAqIExvbmcgZm9ybSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVzc2FnZSAoeW91IHNob3VsZCB1c2UgbWFya2Rvd24pLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IG51bGx9XG4gICAgICovXG4gICAgdGhpcy5ub3RlXG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgfVxufVxuXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLmZpbGUgPSAnJ1xuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5uYW1lID0gJydcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUucmVhc29uID0gJydcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUubWVzc2FnZSA9ICcnXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLnN0YWNrID0gJydcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUuZmF0YWwgPSBudWxsXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLmNvbHVtbiA9IG51bGxcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUubGluZSA9IG51bGxcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUuc291cmNlID0gbnVsbFxuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5ydWxlSWQgPSBudWxsXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLnBvc2l0aW9uID0gbnVsbFxuIiwgIi8vIEEgZGVyaXZhdGl2ZSB3b3JrIGJhc2VkIG9uOlxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeT4uXG4vLyBXaGljaCBpcyBsaWNlbnNlZDpcbi8vXG4vLyBNSVQgTGljZW5zZVxuLy9cbi8vIENvcHlyaWdodCAoYykgMjAxMyBKYW1lcyBIYWxsaWRheVxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2Zcbi8vIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW5cbi8vIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG9cbi8vIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mXG4vLyB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sXG4vLyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbi8vIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Ncbi8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUlxuLy8gQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSXG4vLyBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTlxuLy8gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbi8vIEEgZGVyaXZhdGl2ZSB3b3JrIGJhc2VkIG9uOlxuLy9cbi8vIFBhcnRzIG9mIHRoYXQgYXJlIGV4dHJhY3RlZCBmcm9tIE5vZGVcdTIwMTlzIGludGVybmFsIGBwYXRoYCBtb2R1bGU6XG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2xpYi9wYXRoLmpzPi5cbi8vIFdoaWNoIGlzIGxpY2Vuc2VkOlxuLy9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5leHBvcnQgY29uc3QgcGF0aCA9IHtiYXNlbmFtZSwgZGlybmFtZSwgZXh0bmFtZSwgam9pbiwgc2VwOiAnLyd9XG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1kZXB0aCwgY29tcGxleGl0eSAqL1xuXG4vKipcbiAqIEdldCB0aGUgYmFzZW5hbWUgZnJvbSBhIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqICAgRmlsZSBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IFtleHRdXG4gKiAgIEV4dGVuc2lvbiB0byBzdHJpcC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFN0ZW0gb3IgYmFzZW5hbWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VuYW1lKHBhdGgsIGV4dCkge1xuICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKVxuICB9XG5cbiAgYXNzZXJ0UGF0aChwYXRoKVxuICBsZXQgc3RhcnQgPSAwXG4gIGxldCBlbmQgPSAtMVxuICBsZXQgaW5kZXggPSBwYXRoLmxlbmd0aFxuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBzZWVuTm9uU2xhc2hcblxuICBpZiAoZXh0ID09PSB1bmRlZmluZWQgfHwgZXh0Lmxlbmd0aCA9PT0gMCB8fCBleHQubGVuZ3RoID4gcGF0aC5sZW5ndGgpIHtcbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgaWYgKHBhdGguY2hhckNvZGVBdChpbmRleCkgPT09IDQ3IC8qIGAvYCAqLykge1xuICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3cuXG4gICAgICAgIGlmIChzZWVuTm9uU2xhc2gpIHtcbiAgICAgICAgICBzdGFydCA9IGluZGV4ICsgMVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZW5kIDwgMCkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgIC8vIHBhdGggY29tcG9uZW50LlxuICAgICAgICBzZWVuTm9uU2xhc2ggPSB0cnVlXG4gICAgICAgIGVuZCA9IGluZGV4ICsgMVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbmQgPCAwID8gJycgOiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIH1cblxuICBpZiAoZXh0ID09PSBwYXRoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBsZXQgZmlyc3ROb25TbGFzaEVuZCA9IC0xXG4gIGxldCBleHRJbmRleCA9IGV4dC5sZW5ndGggLSAxXG5cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAocGF0aC5jaGFyQ29kZUF0KGluZGV4KSA9PT0gNDcgLyogYC9gICovKSB7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93LlxuICAgICAgaWYgKHNlZW5Ob25TbGFzaCkge1xuICAgICAgICBzdGFydCA9IGluZGV4ICsgMVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA8IDApIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIHJlbWVtYmVyIHRoaXMgaW5kZXggaW4gY2FzZVxuICAgICAgICAvLyB3ZSBuZWVkIGl0IGlmIHRoZSBleHRlbnNpb24gZW5kcyB1cCBub3QgbWF0Y2hpbmcuXG4gICAgICAgIHNlZW5Ob25TbGFzaCA9IHRydWVcbiAgICAgICAgZmlyc3ROb25TbGFzaEVuZCA9IGluZGV4ICsgMVxuICAgICAgfVxuXG4gICAgICBpZiAoZXh0SW5kZXggPiAtMSkge1xuICAgICAgICAvLyBUcnkgdG8gbWF0Y2ggdGhlIGV4cGxpY2l0IGV4dGVuc2lvbi5cbiAgICAgICAgaWYgKHBhdGguY2hhckNvZGVBdChpbmRleCkgPT09IGV4dC5jaGFyQ29kZUF0KGV4dEluZGV4LS0pKSB7XG4gICAgICAgICAgaWYgKGV4dEluZGV4IDwgMCkge1xuICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgZXh0ZW5zaW9uLCBzbyBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXIgcGF0aFxuICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICBlbmQgPSBpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFeHRlbnNpb24gZG9lcyBub3QgbWF0Y2gsIHNvIG91ciByZXN1bHQgaXMgdGhlIGVudGlyZSBwYXRoXG4gICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgZXh0SW5kZXggPSAtMVxuICAgICAgICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gZW5kKSB7XG4gICAgZW5kID0gZmlyc3ROb25TbGFzaEVuZFxuICB9IGVsc2UgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgPSBwYXRoLmxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZClcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRpcm5hbWUgZnJvbSBhIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqICAgRmlsZSBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRmlsZSBwYXRoLlxuICovXG5mdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHtcbiAgYXNzZXJ0UGF0aChwYXRoKVxuXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnLidcbiAgfVxuXG4gIGxldCBlbmQgPSAtMVxuICBsZXQgaW5kZXggPSBwYXRoLmxlbmd0aFxuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCB1bm1hdGNoZWRTbGFzaFxuXG4gIC8vIFByZWZpeCBgLS1gIGlzIGltcG9ydGFudCB0byBub3QgcnVuIG9uIGAwYC5cbiAgd2hpbGUgKC0taW5kZXgpIHtcbiAgICBpZiAocGF0aC5jaGFyQ29kZUF0KGluZGV4KSA9PT0gNDcgLyogYC9gICovKSB7XG4gICAgICBpZiAodW5tYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgZW5kID0gaW5kZXhcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF1bm1hdGNoZWRTbGFzaCkge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgIHVubWF0Y2hlZFNsYXNoID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbmQgPCAwXG4gICAgPyBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IDQ3IC8qIGAvYCAqL1xuICAgICAgPyAnLydcbiAgICAgIDogJy4nXG4gICAgOiBlbmQgPT09IDEgJiYgcGF0aC5jaGFyQ29kZUF0KDApID09PSA0NyAvKiBgL2AgKi9cbiAgICA/ICcvLydcbiAgICA6IHBhdGguc2xpY2UoMCwgZW5kKVxufVxuXG4vKipcbiAqIEdldCBhbiBleHRuYW1lIGZyb20gYSBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiAgIEZpbGUgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIEV4dG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGV4dG5hbWUocGF0aCkge1xuICBhc3NlcnRQYXRoKHBhdGgpXG5cbiAgbGV0IGluZGV4ID0gcGF0aC5sZW5ndGhcblxuICBsZXQgZW5kID0gLTFcbiAgbGV0IHN0YXJ0UGFydCA9IDBcbiAgbGV0IHN0YXJ0RG90ID0gLTFcbiAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZC5cbiAgbGV0IHByZURvdFN0YXRlID0gMFxuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCB1bm1hdGNoZWRTbGFzaFxuXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdChpbmRleClcblxuICAgIGlmIChjb2RlID09PSA0NyAvKiBgL2AgKi8pIHtcbiAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3cuXG4gICAgICBpZiAodW5tYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaW5kZXggKyAxXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGVuZCA8IDApIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvbi5cbiAgICAgIHVubWF0Y2hlZFNsYXNoID0gdHJ1ZVxuICAgICAgZW5kID0gaW5kZXggKyAxXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IDQ2IC8qIGAuYCAqLykge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uLlxuICAgICAgaWYgKHN0YXJ0RG90IDwgMCkge1xuICAgICAgICBzdGFydERvdCA9IGluZGV4XG4gICAgICB9IGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSB7XG4gICAgICAgIHByZURvdFN0YXRlID0gMVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgPiAtMSkge1xuICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uLlxuICAgICAgcHJlRG90U3RhdGUgPSAtMVxuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICBzdGFydERvdCA8IDAgfHxcbiAgICBlbmQgPCAwIHx8XG4gICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3QuXG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSBgLi5gLlxuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKVxufVxuXG4vKipcbiAqIEpvaW4gc2VnbWVudHMgZnJvbSBhIHBhdGguXG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBzZWdtZW50c1xuICogICBQYXRoIHNlZ21lbnRzLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRmlsZSBwYXRoLlxuICovXG5mdW5jdGlvbiBqb2luKC4uLnNlZ21lbnRzKSB7XG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgam9pbmVkXG5cbiAgd2hpbGUgKCsraW5kZXggPCBzZWdtZW50cy5sZW5ndGgpIHtcbiAgICBhc3NlcnRQYXRoKHNlZ21lbnRzW2luZGV4XSlcblxuICAgIGlmIChzZWdtZW50c1tpbmRleF0pIHtcbiAgICAgIGpvaW5lZCA9XG4gICAgICAgIGpvaW5lZCA9PT0gdW5kZWZpbmVkID8gc2VnbWVudHNbaW5kZXhdIDogam9pbmVkICsgJy8nICsgc2VnbWVudHNbaW5kZXhdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGpvaW5lZCA9PT0gdW5kZWZpbmVkID8gJy4nIDogbm9ybWFsaXplKGpvaW5lZClcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSBiYXNpYyBmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqICAgRmlsZSBwYXRoLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRmlsZSBwYXRoLlxuICovXG4vLyBOb3RlOiBgbm9ybWFsaXplYCBpcyBub3QgZXhwb3NlZCBhcyBgcGF0aC5ub3JtYWxpemVgLCBzbyBzb21lIGNvZGUgaXNcbi8vIG1hbnVhbGx5IHJlbW92ZWQgZnJvbSBpdC5cbmZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoKSB7XG4gIGFzc2VydFBhdGgocGF0aClcblxuICBjb25zdCBhYnNvbHV0ZSA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyogYC9gICovXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoIGFjY29yZGluZyB0byBQT1NJWCBydWxlcy5cbiAgbGV0IHZhbHVlID0gbm9ybWFsaXplU3RyaW5nKHBhdGgsICFhYnNvbHV0ZSlcblxuICBpZiAodmFsdWUubGVuZ3RoID09PSAwICYmICFhYnNvbHV0ZSkge1xuICAgIHZhbHVlID0gJy4nXG4gIH1cblxuICBpZiAodmFsdWUubGVuZ3RoID4gMCAmJiBwYXRoLmNoYXJDb2RlQXQocGF0aC5sZW5ndGggLSAxKSA9PT0gNDcgLyogLyAqLykge1xuICAgIHZhbHVlICs9ICcvJ1xuICB9XG5cbiAgcmV0dXJuIGFic29sdXRlID8gJy8nICsgdmFsdWUgOiB2YWx1ZVxufVxuXG4vKipcbiAqIFJlc29sdmUgYC5gIGFuZCBgLi5gIGVsZW1lbnRzIGluIGEgcGF0aCB3aXRoIGRpcmVjdG9yeSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogICBGaWxlIHBhdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFsbG93QWJvdmVSb290XG4gKiAgIFdoZXRoZXIgYC4uYCBjYW4gbW92ZSBhYm92ZSByb290LlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRmlsZSBwYXRoLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmcocGF0aCwgYWxsb3dBYm92ZVJvb3QpIHtcbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGxldCBsYXN0U2VnbWVudExlbmd0aCA9IDBcbiAgbGV0IGxhc3RTbGFzaCA9IC0xXG4gIGxldCBkb3RzID0gMFxuICBsZXQgaW5kZXggPSAtMVxuICAvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGNvZGVcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBsYXN0U2xhc2hJbmRleFxuXG4gIHdoaWxlICgrK2luZGV4IDw9IHBhdGgubGVuZ3RoKSB7XG4gICAgaWYgKGluZGV4IDwgcGF0aC5sZW5ndGgpIHtcbiAgICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaW5kZXgpXG4gICAgfSBlbHNlIGlmIChjb2RlID09PSA0NyAvKiBgL2AgKi8pIHtcbiAgICAgIGJyZWFrXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGUgPSA0NyAvKiBgL2AgKi9cbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gNDcgLyogYC9gICovKSB7XG4gICAgICBpZiAobGFzdFNsYXNoID09PSBpbmRleCAtIDEgfHwgZG90cyA9PT0gMSkge1xuICAgICAgICAvLyBFbXB0eS5cbiAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpbmRleCAtIDEgJiYgZG90cyA9PT0gMikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVzdWx0Lmxlbmd0aCA8IDIgfHxcbiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCAhPT0gMiB8fFxuICAgICAgICAgIHJlc3VsdC5jaGFyQ29kZUF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gNDYgLyogYC5gICovIHx8XG4gICAgICAgICAgcmVzdWx0LmNoYXJDb2RlQXQocmVzdWx0Lmxlbmd0aCAtIDIpICE9PSA0NiAvKiBgLmAgKi9cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBsYXN0U2xhc2hJbmRleCA9IHJlc3VsdC5sYXN0SW5kZXhPZignLycpXG5cbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCAhPT0gcmVzdWx0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICcnXG4gICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIGxhc3RTbGFzaEluZGV4KVxuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCAtIDEgLSByZXN1bHQubGFzdEluZGV4T2YoJy8nKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGFzdFNsYXNoID0gaW5kZXhcbiAgICAgICAgICAgICAgZG90cyA9IDBcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAnJ1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwXG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpbmRleFxuICAgICAgICAgICAgZG90cyA9IDBcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lmxlbmd0aCA+IDAgPyByZXN1bHQgKyAnLy4uJyA6ICcuLidcbiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzdWx0ICs9ICcvJyArIHBhdGguc2xpY2UobGFzdFNsYXNoICsgMSwgaW5kZXgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpbmRleClcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gaW5kZXggLSBsYXN0U2xhc2ggLSAxXG4gICAgICB9XG5cbiAgICAgIGxhc3RTbGFzaCA9IGluZGV4XG4gICAgICBkb3RzID0gMFxuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gNDYgLyogYC5gICovICYmIGRvdHMgPiAtMSkge1xuICAgICAgZG90cysrXG4gICAgfSBlbHNlIHtcbiAgICAgIGRvdHMgPSAtMVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBNYWtlIHN1cmUgYHBhdGhgIGlzIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiAgIEZpbGUgcGF0aC5cbiAqIEByZXR1cm5zIHthc3NlcnRzIHBhdGggaXMgc3RyaW5nfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgSlNPTi5zdHJpbmdpZnkocGF0aClcbiAgICApXG4gIH1cbn1cblxuLyogZXNsaW50LWVuYWJsZSBtYXgtZGVwdGgsIGNvbXBsZXhpdHkgKi9cbiIsICIvLyBTb21ld2hhdCBiYXNlZCBvbjpcbi8vIDxodHRwczovL2dpdGh1Yi5jb20vZGVmdW5jdHpvbWJpZS9ub2RlLXByb2Nlc3MvYmxvYi9tYXN0ZXIvYnJvd3Nlci5qcz4uXG4vLyBCdXQgSSBkb25cdTIwMTl0IHRoaW5rIG9uZSB0aW55IGxpbmUgb2YgY29kZSBjYW4gYmUgY29weXJpZ2h0ZWQuIFx1RDgzRFx1REUwNVxuZXhwb3J0IGNvbnN0IHByb2MgPSB7Y3dkfVxuXG5mdW5jdGlvbiBjd2QoKSB7XG4gIHJldHVybiAnLydcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIFVSTFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhhc2hcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBob3N0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gaG9zdG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmXG4gKiBAcHJvcGVydHkge3N0cmluZ30gb3JpZ2luXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGFzc3dvcmRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXRobmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm90b2NvbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlYXJjaFxuICogQHByb3BlcnR5IHthbnl9IHNlYXJjaFBhcmFtc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHVzZXJuYW1lXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZ30gdG9TdHJpbmdcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gc3RyaW5nfSB0b0pTT05cbiAqL1xuXG4vKipcbiAqIENoZWNrIGlmIGBmaWxlVXJsT3JQYXRoYCBsb29rcyBsaWtlIGEgVVJMLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gZmlsZVVybE9yUGF0aFxuICogICBGaWxlIHBhdGggb3IgVVJMLlxuICogQHJldHVybnMge2ZpbGVVcmxPclBhdGggaXMgVVJMfVxuICogICBXaGV0aGVyIGl0XHUyMDE5cyBhIFVSTC5cbiAqL1xuLy8gRnJvbTogPGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2ZjZjhiYTQvbGliL2ludGVybmFsL3VybC5qcyNMMTUwMT5cbmV4cG9ydCBmdW5jdGlvbiBpc1VybChmaWxlVXJsT3JQYXRoKSB7XG4gIHJldHVybiAoXG4gICAgZmlsZVVybE9yUGF0aCAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiBmaWxlVXJsT3JQYXRoID09PSAnb2JqZWN0JyAmJlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGluZGV4YWJsZS5cbiAgICBmaWxlVXJsT3JQYXRoLmhyZWYgJiZcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBpbmRleGFibGUuXG4gICAgZmlsZVVybE9yUGF0aC5vcmlnaW5cbiAgKVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIGxpYj1cImRvbVwiIC8+XG5cbmltcG9ydCB7aXNVcmx9IGZyb20gJy4vbWludXJsLnNoYXJlZC5qcydcblxuLy8gU2VlOiA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZmNmOGJhNC9saWIvaW50ZXJuYWwvdXJsLmpzPlxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nIHwgVVJMfSBwYXRoXG4gKiAgIEZpbGUgVVJMLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRmlsZSBVUkwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cmxUb1BhdGgocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgcGF0aCA9IG5ldyBVUkwocGF0aClcbiAgfSBlbHNlIGlmICghaXNVcmwocGF0aCkpIHtcbiAgICAvKiogQHR5cGUge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gKi9cbiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwicGF0aFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgVVJMLiBSZWNlaXZlZCBgJyArXG4gICAgICAgIHBhdGggK1xuICAgICAgICAnYCdcbiAgICApXG4gICAgZXJyb3IuY29kZSA9ICdFUlJfSU5WQUxJRF9BUkdfVFlQRSdcbiAgICB0aHJvdyBlcnJvclxuICB9XG5cbiAgaWYgKHBhdGgucHJvdG9jb2wgIT09ICdmaWxlOicpIHtcbiAgICAvKiogQHR5cGUge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gKi9cbiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoJ1RoZSBVUkwgbXVzdCBiZSBvZiBzY2hlbWUgZmlsZScpXG4gICAgZXJyb3IuY29kZSA9ICdFUlJfSU5WQUxJRF9VUkxfU0NIRU1FJ1xuICAgIHRocm93IGVycm9yXG4gIH1cblxuICByZXR1cm4gZ2V0UGF0aEZyb21VUkxQb3NpeChwYXRoKVxufVxuXG4vKipcbiAqIEdldCBhIHBhdGggZnJvbSBhIFBPU0lYIFVSTC5cbiAqXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiAgIFVSTC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIEZpbGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gZ2V0UGF0aEZyb21VUkxQb3NpeCh1cmwpIHtcbiAgaWYgKHVybC5ob3N0bmFtZSAhPT0gJycpIHtcbiAgICAvKiogQHR5cGUge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gKi9cbiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnRmlsZSBVUkwgaG9zdCBtdXN0IGJlIFwibG9jYWxob3N0XCIgb3IgZW1wdHkgb24gZGFyd2luJ1xuICAgIClcbiAgICBlcnJvci5jb2RlID0gJ0VSUl9JTlZBTElEX0ZJTEVfVVJMX0hPU1QnXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxuXG4gIGNvbnN0IHBhdGhuYW1lID0gdXJsLnBhdGhuYW1lXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBwYXRobmFtZS5sZW5ndGgpIHtcbiAgICBpZiAoXG4gICAgICBwYXRobmFtZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMzcgLyogYCVgICovICYmXG4gICAgICBwYXRobmFtZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDUwIC8qIGAyYCAqL1xuICAgICkge1xuICAgICAgY29uc3QgdGhpcmQgPSBwYXRobmFtZS5jaGFyQ29kZUF0KGluZGV4ICsgMilcbiAgICAgIGlmICh0aGlyZCA9PT0gNzAgLyogYEZgICovIHx8IHRoaXJkID09PSAxMDIgLyogYGZgICovKSB7XG4gICAgICAgIC8qKiBAdHlwZSB7Tm9kZUpTLkVycm5vRXhjZXB0aW9ufSAqL1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ZpbGUgVVJMIHBhdGggbXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVycydcbiAgICAgICAgKVxuICAgICAgICBlcnJvci5jb2RlID0gJ0VSUl9JTlZBTElEX0ZJTEVfVVJMX1BBVEgnXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwYXRobmFtZSlcbn1cblxuZXhwb3J0IHtpc1VybH0gZnJvbSAnLi9taW51cmwuc2hhcmVkLmpzJ1xuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Ob2RlfSBOb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBhcmVudH0gUGFyZW50XG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgRm5cbiAqIEB0ZW1wbGF0ZSBGYWxsYmFja1xuICogQHR5cGVkZWYge0ZuIGV4dGVuZHMgKHZhbHVlOiBhbnkpID0+IHZhbHVlIGlzIGluZmVyIFRoaW5nID8gVGhpbmcgOiBGYWxsYmFja30gUHJlZGljYXRlXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgQ2hlY2tcbiAqICAgQ2hlY2sgdGhhdCBhbiBhcmJpdHJhcnkgdmFsdWUgaXMgYSBub2RlLlxuICogQHBhcmFtIHt1bmtub3dufSB0aGlzXG4gKiAgIFRoZSBnaXZlbiBjb250ZXh0LlxuICogQHBhcmFtIHt1bmtub3dufSBbbm9kZV1cbiAqICAgQW55dGhpbmcgKHR5cGljYWxseSBhIG5vZGUpLlxuICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5kZXhdXG4gKiAgIFRoZSBub2RlXHUyMDE5cyBwb3NpdGlvbiBpbiBpdHMgcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkfSBbcGFyZW50XVxuICogICBUaGUgbm9kZVx1MjAxOXMgcGFyZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhpcyBpcyBhIG5vZGUgYW5kIHBhc3NlcyBhIHRlc3QuXG4gKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHVua25vd24+IHwgTm9kZX0gUHJvcHNcbiAqICAgT2JqZWN0IHRvIGNoZWNrIGZvciBlcXVpdmFsZW5jZS5cbiAqXG4gKiAgIE5vdGU6IGBOb2RlYCBpcyBpbmNsdWRlZCBhcyBpdCBpcyBjb21tb24gYnV0IGlzIG5vdCBpbmRleGFibGUuXG4gKlxuICogQHR5cGVkZWYge0FycmF5PFByb3BzIHwgVGVzdEZ1bmN0aW9uIHwgc3RyaW5nPiB8IFByb3BzIHwgVGVzdEZ1bmN0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gVGVzdFxuICogICBDaGVjayBmb3IgYW4gYXJiaXRyYXJ5IG5vZGUuXG4gKlxuICogQGNhbGxiYWNrIFRlc3RGdW5jdGlvblxuICogICBDaGVjayBpZiBhIG5vZGUgcGFzc2VzIGEgdGVzdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc1xuICogICBUaGUgZ2l2ZW4gY29udGV4dC5cbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogICBBIG5vZGUuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gW2luZGV4XVxuICogICBUaGUgbm9kZVx1MjAxOXMgcG9zaXRpb24gaW4gaXRzIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50IHwgdW5kZWZpbmVkfSBbcGFyZW50XVxuICogICBUaGUgbm9kZVx1MjAxOXMgcGFyZW50LlxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWQgfCB2b2lkfVxuICogICBXaGV0aGVyIHRoaXMgbm9kZSBwYXNzZXMgdGhlIHRlc3QuXG4gKlxuICogICBOb3RlOiBgdm9pZGAgaXMgaW5jbHVkZWQgdW50aWwgVFMgc2VlcyBubyByZXR1cm4gYXMgYHVuZGVmaW5lZGAuXG4gKi9cblxuLyoqXG4gKiBDaGVjayBpZiBgbm9kZWAgaXMgYSBgTm9kZWAgYW5kIHdoZXRoZXIgaXQgcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gbm9kZVxuICogICBUaGluZyB0byBjaGVjaywgdHlwaWNhbGx5IGBOb2RlYC5cbiAqIEBwYXJhbSB7VGVzdH0gdGVzdFxuICogICBBIGNoZWNrIGZvciBhIHNwZWNpZmljIG5vZGUuXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIFRoZSBub2RlXHUyMDE5cyBwb3NpdGlvbiBpbiBpdHMgcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgVGhlIG5vZGVcdTIwMTlzIHBhcmVudC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY29udGV4dFxuICogICBDb250ZXh0IG9iamVjdCAoYHRoaXNgKSB0byBwYXNzIHRvIGB0ZXN0YCBmdW5jdGlvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBgbm9kZWAgaXMgYSBub2RlIGFuZCBwYXNzZXMgYSB0ZXN0LlxuICovXG5leHBvcnQgY29uc3QgaXMgPVxuICAvLyBOb3RlOiBvdmVybG9hZHMgaW4gSlNEb2MgY2FuXHUyMDE5dCB5ZXQgdXNlIGRpZmZlcmVudCBgQHRlbXBsYXRlYHMuXG4gIC8qKlxuICAgKiBAdHlwZSB7KFxuICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgc3RyaW5nPihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIHt0eXBlOiBDb25kaXRpb259KSAmXG4gICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBQcm9wcz4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBDb25kaXRpb24pICZcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFRlc3RGdW5jdGlvbj4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBQcmVkaWNhdGU8Q29uZGl0aW9uLCBOb2RlPikgJlxuICAgKiAgICgobm9kZT86IG51bGwgfCB1bmRlZmluZWQpID0+IGZhbHNlKSAmXG4gICAqICAgKChub2RlOiB1bmtub3duLCB0ZXN0PzogbnVsbCB8IHVuZGVmaW5lZCwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlKSAmXG4gICAqICAgKChub2RlOiB1bmtub3duLCB0ZXN0PzogVGVzdCwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gYm9vbGVhbilcbiAgICogKX1cbiAgICovXG4gIChcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IFtub2RlXVxuICAgICAqIEBwYXJhbSB7VGVzdH0gW3Rlc3RdXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbaW5kZXhdXG4gICAgICogQHBhcmFtIHtQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkfSBbcGFyZW50XVxuICAgICAqIEBwYXJhbSB7dW5rbm93bn0gW2NvbnRleHRdXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbiAgICBmdW5jdGlvbiAobm9kZSwgdGVzdCwgaW5kZXgsIHBhcmVudCwgY29udGV4dCkge1xuICAgICAgY29uc3QgY2hlY2sgPSBjb252ZXJ0KHRlc3QpXG5cbiAgICAgIGlmIChcbiAgICAgICAgaW5kZXggIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBpbmRleCAhPT0gbnVsbCAmJlxuICAgICAgICAodHlwZW9mIGluZGV4ICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgIGluZGV4IDwgMCB8fFxuICAgICAgICAgIGluZGV4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwb3NpdGl2ZSBmaW5pdGUgaW5kZXgnKVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHBhcmVudCAhPT0gbnVsbCAmJlxuICAgICAgICAoIWlzKHBhcmVudCkgfHwgIXBhcmVudC5jaGlsZHJlbilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCBub2RlJylcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAocGFyZW50ID09PSB1bmRlZmluZWQgfHwgcGFyZW50ID09PSBudWxsKSAhPT1cbiAgICAgICAgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgaW5kZXggPT09IG51bGwpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBib3RoIHBhcmVudCBhbmQgaW5kZXgnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbG9va3NMaWtlQU5vZGUobm9kZSlcbiAgICAgICAgPyBjaGVjay5jYWxsKGNvbnRleHQsIG5vZGUsIGluZGV4LCBwYXJlbnQpXG4gICAgICAgIDogZmFsc2VcbiAgICB9XG4gIClcblxuLyoqXG4gKiBHZW5lcmF0ZSBhbiBhc3NlcnRpb24gZnJvbSBhIHRlc3QuXG4gKlxuICogVXNlZnVsIGlmIHlvdVx1MjAxOXJlIGdvaW5nIHRvIHRlc3QgbWFueSBub2RlcywgZm9yIGV4YW1wbGUgd2hlbiBjcmVhdGluZyBhXG4gKiB1dGlsaXR5IHdoZXJlIHNvbWV0aGluZyBlbHNlIHBhc3NlcyBhIGNvbXBhdGlibGUgdGVzdC5cbiAqXG4gKiBUaGUgY3JlYXRlZCBmdW5jdGlvbiBpcyBhIGJpdCBmYXN0ZXIgYmVjYXVzZSBpdCBleHBlY3RzIHZhbGlkIGlucHV0IG9ubHk6XG4gKiBhIGBub2RlYCwgYGluZGV4YCwgYW5kIGBwYXJlbnRgLlxuICpcbiAqIEBwYXJhbSB7VGVzdH0gdGVzdFxuICogICAqICAgd2hlbiBudWxsaXNoLCBjaGVja3MgaWYgYG5vZGVgIGlzIGEgYE5vZGVgLlxuICogICAqICAgd2hlbiBgc3RyaW5nYCwgd29ya3MgbGlrZSBwYXNzaW5nIGAobm9kZSkgPT4gbm9kZS50eXBlID09PSB0ZXN0YC5cbiAqICAgKiAgIHdoZW4gYGZ1bmN0aW9uYCBjaGVja3MgaWYgZnVuY3Rpb24gcGFzc2VkIHRoZSBub2RlIGlzIHRydWUuXG4gKiAgICogICB3aGVuIGBvYmplY3RgLCBjaGVja3MgdGhhdCBhbGwga2V5cyBpbiB0ZXN0IGFyZSBpbiBub2RlLCBhbmQgdGhhdCB0aGV5IGhhdmUgKHN0cmljdGx5KSBlcXVhbCB2YWx1ZXMuXG4gKiAgICogICB3aGVuIGBhcnJheWAsIGNoZWNrcyBpZiBhbnkgb25lIG9mIHRoZSBzdWJ0ZXN0cyBwYXNzLlxuICogQHJldHVybnMge0NoZWNrfVxuICogICBBbiBhc3NlcnRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0ID1cbiAgLy8gTm90ZTogb3ZlcmxvYWRzIGluIEpTRG9jIGNhblx1MjAxOXQgeWV0IHVzZSBkaWZmZXJlbnQgYEB0ZW1wbGF0ZWBzLlxuICAvKipcbiAgICogQHR5cGUgeyhcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIHN0cmluZz4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbn0pICZcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFByb3BzPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBDb25kaXRpb24pICZcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFRlc3RGdW5jdGlvbj4odGVzdDogQ29uZGl0aW9uKSA9PiAobm9kZTogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYgUHJlZGljYXRlPENvbmRpdGlvbiwgTm9kZT4pICZcbiAgICogICAoKHRlc3Q/OiBudWxsIHwgdW5kZWZpbmVkKSA9PiAobm9kZT86IHVua25vd24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSkgJlxuICAgKiAgICgodGVzdD86IFRlc3QpID0+IENoZWNrKVxuICAgKiApfVxuICAgKi9cbiAgKFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7VGVzdH0gW3Rlc3RdXG4gICAgICogQHJldHVybnMge0NoZWNrfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uICh0ZXN0KSB7XG4gICAgICBpZiAodGVzdCA9PT0gbnVsbCB8fCB0ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG9rXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gY2FzdEZhY3RvcnkodGVzdClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0ZXN0KSA/IGFueUZhY3RvcnkodGVzdCkgOiBwcm9wc0ZhY3RvcnkodGVzdClcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdHlwZUZhY3RvcnkodGVzdClcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBmdW5jdGlvbiwgc3RyaW5nLCBvciBvYmplY3QgYXMgdGVzdCcpXG4gICAgfVxuICApXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxQcm9wcyB8IFRlc3RGdW5jdGlvbiB8IHN0cmluZz59IHRlc3RzXG4gKiBAcmV0dXJucyB7Q2hlY2t9XG4gKi9cbmZ1bmN0aW9uIGFueUZhY3RvcnkodGVzdHMpIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxDaGVjaz59ICovXG4gIGNvbnN0IGNoZWNrcyA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCB0ZXN0cy5sZW5ndGgpIHtcbiAgICBjaGVja3NbaW5kZXhdID0gY29udmVydCh0ZXN0c1tpbmRleF0pXG4gIH1cblxuICByZXR1cm4gY2FzdEZhY3RvcnkoYW55KVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7dW5rbm93bn1cbiAgICogQHR5cGUge1Rlc3RGdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGFueSguLi5wYXJhbWV0ZXJzKSB7XG4gICAgbGV0IGluZGV4ID0gLTFcblxuICAgIHdoaWxlICgrK2luZGV4IDwgY2hlY2tzLmxlbmd0aCkge1xuICAgICAgaWYgKGNoZWNrc1tpbmRleF0uYXBwbHkodGhpcywgcGFyYW1ldGVycykpIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBUdXJuIGFuIG9iamVjdCBpbnRvIGEgdGVzdCBmb3IgYSBub2RlIHdpdGggYSBjZXJ0YWluIGZpZWxkcy5cbiAqXG4gKiBAcGFyYW0ge1Byb3BzfSBjaGVja1xuICogQHJldHVybnMge0NoZWNrfVxuICovXG5mdW5jdGlvbiBwcm9wc0ZhY3RvcnkoY2hlY2spIHtcbiAgY29uc3QgY2hlY2tBc1JlY29yZCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChjaGVjaylcblxuICByZXR1cm4gY2FzdEZhY3RvcnkoYWxsKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBhbGwobm9kZSkge1xuICAgIGNvbnN0IG5vZGVBc1JlY29yZCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovIChcbiAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKG5vZGUpXG4gICAgKVxuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IGtleVxuXG4gICAgZm9yIChrZXkgaW4gY2hlY2spIHtcbiAgICAgIGlmIChub2RlQXNSZWNvcmRba2V5XSAhPT0gY2hlY2tBc1JlY29yZFtrZXldKSByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbi8qKlxuICogVHVybiBhIHN0cmluZyBpbnRvIGEgdGVzdCBmb3IgYSBub2RlIHdpdGggYSBjZXJ0YWluIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoZWNrXG4gKiBAcmV0dXJucyB7Q2hlY2t9XG4gKi9cbmZ1bmN0aW9uIHR5cGVGYWN0b3J5KGNoZWNrKSB7XG4gIHJldHVybiBjYXN0RmFjdG9yeSh0eXBlKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICovXG4gIGZ1bmN0aW9uIHR5cGUobm9kZSkge1xuICAgIHJldHVybiBub2RlICYmIG5vZGUudHlwZSA9PT0gY2hlY2tcbiAgfVxufVxuXG4vKipcbiAqIFR1cm4gYSBjdXN0b20gdGVzdCBpbnRvIGEgdGVzdCBmb3IgYSBub2RlIHRoYXQgcGFzc2VzIHRoYXQgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge1Rlc3RGdW5jdGlvbn0gdGVzdEZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7Q2hlY2t9XG4gKi9cbmZ1bmN0aW9uIGNhc3RGYWN0b3J5KHRlc3RGdW5jdGlvbikge1xuICByZXR1cm4gY2hlY2tcblxuICAvKipcbiAgICogQHRoaXMge3Vua25vd259XG4gICAqIEB0eXBlIHtDaGVja31cbiAgICovXG4gIGZ1bmN0aW9uIGNoZWNrKHZhbHVlLCBpbmRleCwgcGFyZW50KSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICBsb29rc0xpa2VBTm9kZSh2YWx1ZSkgJiZcbiAgICAgICAgdGVzdEZ1bmN0aW9uLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB0eXBlb2YgaW5kZXggPT09ICdudW1iZXInID8gaW5kZXggOiB1bmRlZmluZWQsXG4gICAgICAgICAgcGFyZW50IHx8IHVuZGVmaW5lZFxuICAgICAgICApXG4gICAgKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9rKCkge1xuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBOb2RlfVxuICovXG5mdW5jdGlvbiBsb29rc0xpa2VBTm9kZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gdmFsdWVcbn1cbiIsICIvKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3IoZCkge1xuICByZXR1cm4gZFxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Ob2RlfSBVbmlzdE5vZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUGFyZW50fSBVbmlzdFBhcmVudFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0V4Y2x1ZGU8aW1wb3J0KCd1bmlzdC11dGlsLWlzJykuVGVzdCwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZH0gVGVzdFxuICogICBUZXN0IGZyb20gYHVuaXN0LXV0aWwtaXNgLlxuICpcbiAqICAgTm90ZTogd2UgaGF2ZSByZW1vdmUgYW5kIGFkZCBgdW5kZWZpbmVkYCwgYmVjYXVzZSBvdGhlcndpc2Ugd2hlbiBnZW5lcmF0aW5nXG4gKiAgIGF1dG9tYXRpYyBgLmQudHNgIGZpbGVzLCBUUyB0cmllcyB0byBmbGF0dGVuIHBhdGhzIGZyb20gYSBsb2NhbCBwZXJzcGVjdGl2ZSxcbiAqICAgd2hpY2ggZG9lc25cdTIwMTl0IHdvcmsgd2hlbiBwdWJsaXNoaW5nIG9uIG5wbS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIEZuIGV4dGVuZHMgKHZhbHVlOiBhbnkpID0+IHZhbHVlIGlzIGluZmVyIFRoaW5nXG4gKiAgID8gVGhpbmdcbiAqICAgOiBGYWxsYmFja1xuICogKX0gUHJlZGljYXRlXG4gKiAgIEdldCB0aGUgdmFsdWUgb2YgYSB0eXBlIGd1YXJkIGBGbmAuXG4gKiBAdGVtcGxhdGUgRm5cbiAqICAgVmFsdWU7IHR5cGljYWxseSBmdW5jdGlvbiB0aGF0IGlzIGEgdHlwZSBndWFyZCAoc3VjaCBhcyBgKHgpOiB4IGlzIFlgKS5cbiAqIEB0ZW1wbGF0ZSBGYWxsYmFja1xuICogICBWYWx1ZSB0byB5aWVsZCBpZiBgRm5gIGlzIG5vdCBhIHR5cGUgZ3VhcmQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBDaGVjayBleHRlbmRzIG51bGwgfCB1bmRlZmluZWQgLy8gTm8gdGVzdC5cbiAqICAgPyBWYWx1ZVxuICogICA6IFZhbHVlIGV4dGVuZHMge3R5cGU6IENoZWNrfSAvLyBTdHJpbmcgKHR5cGUpIHRlc3QuXG4gKiAgID8gVmFsdWVcbiAqICAgOiBWYWx1ZSBleHRlbmRzIENoZWNrIC8vIFBhcnRpYWwgdGVzdC5cbiAqICAgPyBWYWx1ZVxuICogICA6IENoZWNrIGV4dGVuZHMgRnVuY3Rpb24gLy8gRnVuY3Rpb24gdGVzdC5cbiAqICAgPyBQcmVkaWNhdGU8Q2hlY2ssIFZhbHVlPiBleHRlbmRzIFZhbHVlXG4gKiAgICAgPyBQcmVkaWNhdGU8Q2hlY2ssIFZhbHVlPlxuICogICAgIDogbmV2ZXJcbiAqICAgOiBuZXZlciAvLyBTb21lIG90aGVyIHRlc3Q/XG4gKiApfSBNYXRjaGVzT25lXG4gKiAgIENoZWNrIHdoZXRoZXIgYSBub2RlIG1hdGNoZXMgYSBwcmltaXRpdmUgY2hlY2sgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICogQHRlbXBsYXRlIFZhbHVlXG4gKiAgIFZhbHVlOyB0eXBpY2FsbHkgdW5pc3QgYE5vZGVgLlxuICogQHRlbXBsYXRlIENoZWNrXG4gKiAgIFZhbHVlOyB0eXBpY2FsbHkgYHVuaXN0LXV0aWwtaXNgLWNvbXBhdGlibGUgdGVzdCwgYnV0IG5vdCBhcnJheXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBDaGVjayBleHRlbmRzIEFycmF5PGFueT5cbiAqICAgPyBNYXRjaGVzT25lPFZhbHVlLCBDaGVja1trZXlvZiBDaGVja10+XG4gKiAgIDogTWF0Y2hlc09uZTxWYWx1ZSwgQ2hlY2s+XG4gKiApfSBNYXRjaGVzXG4gKiAgIENoZWNrIHdoZXRoZXIgYSBub2RlIG1hdGNoZXMgYSBjaGVjayBpbiB0aGUgdHlwZSBzeXN0ZW0uXG4gKiBAdGVtcGxhdGUgVmFsdWVcbiAqICAgVmFsdWU7IHR5cGljYWxseSB1bmlzdCBgTm9kZWAuXG4gKiBAdGVtcGxhdGUgQ2hlY2tcbiAqICAgVmFsdWU7IHR5cGljYWxseSBgdW5pc3QtdXRpbC1pc2AtY29tcGF0aWJsZSB0ZXN0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgezAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDkgfCAxMH0gVWludFxuICogICBOdW1iZXI7IGNhcHBlZCByZWFzb25hYmx5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0kgZXh0ZW5kcyAwID8gMSA6IEkgZXh0ZW5kcyAxID8gMiA6IEkgZXh0ZW5kcyAyID8gMyA6IEkgZXh0ZW5kcyAzID8gNCA6IEkgZXh0ZW5kcyA0ID8gNSA6IEkgZXh0ZW5kcyA1ID8gNiA6IEkgZXh0ZW5kcyA2ID8gNyA6IEkgZXh0ZW5kcyA3ID8gOCA6IEkgZXh0ZW5kcyA4ID8gOSA6IDEwfSBJbmNyZW1lbnRcbiAqICAgSW5jcmVtZW50IGEgbnVtYmVyIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW0k9MF1cbiAqICAgSW5kZXguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBOb2RlIGV4dGVuZHMgVW5pc3RQYXJlbnRcbiAqICAgPyBOb2RlIGV4dGVuZHMge2NoaWxkcmVuOiBBcnJheTxpbmZlciBDaGlsZHJlbj59XG4gKiAgICAgPyBDaGlsZCBleHRlbmRzIENoaWxkcmVuID8gTm9kZSA6IG5ldmVyXG4gKiAgICAgOiBuZXZlclxuICogICA6IG5ldmVyXG4gKiApfSBJbnRlcm5hbFBhcmVudFxuICogICBDb2xsZWN0IG5vZGVzIHRoYXQgY2FuIGJlIHBhcmVudHMgb2YgYENoaWxkYC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBOb2RlXG4gKiAgIEFsbCBub2RlIHR5cGVzIGluIGEgdHJlZS5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBDaGlsZFxuICogICBOb2RlIHRvIHNlYXJjaCBmb3IuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7SW50ZXJuYWxQYXJlbnQ8SW5jbHVzaXZlRGVzY2VuZGFudDxUcmVlPiwgQ2hpbGQ+fSBQYXJlbnRcbiAqICAgQ29sbGVjdCBub2RlcyBpbiBgVHJlZWAgdGhhdCBjYW4gYmUgcGFyZW50cyBvZiBgQ2hpbGRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFRyZWVcbiAqICAgQWxsIG5vZGUgdHlwZXMgaW4gYSB0cmVlLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IENoaWxkXG4gKiAgIE5vZGUgdG8gc2VhcmNoIGZvci5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIERlcHRoIGV4dGVuZHMgTWF4XG4gKiAgID8gbmV2ZXJcbiAqICAgOlxuICogICAgIHwgSW50ZXJuYWxQYXJlbnQ8Tm9kZSwgQ2hpbGQ+XG4gKiAgICAgfCBJbnRlcm5hbEFuY2VzdG9yPE5vZGUsIEludGVybmFsUGFyZW50PE5vZGUsIENoaWxkPiwgTWF4LCBJbmNyZW1lbnQ8RGVwdGg+PlxuICogKX0gSW50ZXJuYWxBbmNlc3RvclxuICogICBDb2xsZWN0IG5vZGVzIGluIGBUcmVlYCB0aGF0IGNhbiBiZSBhbmNlc3RvcnMgb2YgYENoaWxkYC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBOb2RlXG4gKiAgIEFsbCBub2RlIHR5cGVzIGluIGEgdHJlZS5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBDaGlsZFxuICogICBOb2RlIHRvIHNlYXJjaCBmb3IuXG4gKiBAdGVtcGxhdGUge1VpbnR9IFtNYXg9MTBdXG4gKiAgIE1heDsgc2VhcmNoZXMgdXAgdG8gdGhpcyBkZXB0aC5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW0RlcHRoPTBdXG4gKiAgIEN1cnJlbnQgZGVwdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7SW50ZXJuYWxBbmNlc3RvcjxJbmNsdXNpdmVEZXNjZW5kYW50PFRyZWU+LCBDaGlsZD59IEFuY2VzdG9yXG4gKiAgIENvbGxlY3Qgbm9kZXMgaW4gYFRyZWVgIHRoYXQgY2FuIGJlIGFuY2VzdG9ycyBvZiBgQ2hpbGRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFRyZWVcbiAqICAgQWxsIG5vZGUgdHlwZXMgaW4gYSB0cmVlLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IENoaWxkXG4gKiAgIE5vZGUgdG8gc2VhcmNoIGZvci5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIFRyZWUgZXh0ZW5kcyBVbmlzdFBhcmVudFxuICogICAgID8gRGVwdGggZXh0ZW5kcyBNYXhcbiAqICAgICAgID8gVHJlZVxuICogICAgICAgOiBUcmVlIHwgSW5jbHVzaXZlRGVzY2VuZGFudDxUcmVlWydjaGlsZHJlbiddW251bWJlcl0sIE1heCwgSW5jcmVtZW50PERlcHRoPj5cbiAqICAgICA6IFRyZWVcbiAqICl9IEluY2x1c2l2ZURlc2NlbmRhbnRcbiAqICAgQ29sbGVjdCBhbGwgKGluY2x1c2l2ZSkgZGVzY2VuZGFudHMgb2YgYFRyZWVgLlxuICpcbiAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBmYXN0ZXN0IHdheSB0b1xuICogICA+IHJlY3Vyc2Ugd2l0aG91dCBhY3R1YWxseSBydW5uaW5nIGludG8gYW4gaW5maW5pdGUgbG9vcCwgd2hpY2ggdGhlXG4gKiAgID4gcHJldmlvdXMgdmVyc2lvbiBkaWQuXG4gKiAgID5cbiAqICAgPiBQcmFjdGljYWxseSwgYSBtYXggb2YgYDJgIGlzIHR5cGljYWxseSBlbm91Z2ggYXNzdW1pbmcgYSBgUm9vdGAgaXNcbiAqICAgPiBwYXNzZWQsIGJ1dCBpdCBkb2Vzblx1MjAxOXQgaW1wcm92ZSBwZXJmb3JtYW5jZS5cbiAqICAgPiBJdCBnZXRzIGhpZ2hlciB3aXRoIGBMaXN0ID4gTGlzdEl0ZW0gPiBUYWJsZSA+IFRhYmxlUm93ID4gVGFibGVDZWxsYC5cbiAqICAgPiBVc2luZyB1cCB0byBgMTBgIGRvZXNuXHUyMDE5dCBodXJ0IG9yIGhlbHAgZWl0aGVyLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFRyZWVcbiAqICAgVHJlZSB0eXBlLlxuICogQHRlbXBsYXRlIHtVaW50fSBbTWF4PTEwXVxuICogICBNYXg7IHNlYXJjaGVzIHVwIHRvIHRoaXMgZGVwdGguXG4gKiBAdGVtcGxhdGUge1VpbnR9IFtEZXB0aD0wXVxuICogICBDdXJyZW50IGRlcHRoLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeydza2lwJyB8IGJvb2xlYW59IEFjdGlvblxuICogICBVbmlvbiBvZiB0aGUgYWN0aW9uIHR5cGVzLlxuICpcbiAqIEB0eXBlZGVmIHtudW1iZXJ9IEluZGV4XG4gKiAgIE1vdmUgdG8gdGhlIHNpYmxpbmcgYXQgYGluZGV4YCBuZXh0IChhZnRlciBub2RlIGl0c2VsZiBpcyBjb21wbGV0ZWx5XG4gKiAgIHRyYXZlcnNlZCkuXG4gKlxuICogICBVc2VmdWwgaWYgbXV0YXRpbmcgdGhlIHRyZWUsIHN1Y2ggYXMgcmVtb3ZpbmcgdGhlIG5vZGUgdGhlIHZpc2l0b3IgaXNcbiAqICAgY3VycmVudGx5IG9uLCBvciBhbnkgb2YgaXRzIHByZXZpb3VzIHNpYmxpbmdzLlxuICogICBSZXN1bHRzIGxlc3MgdGhhbiAwIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgY2hpbGRyZW4ubGVuZ3RoYCBzdG9wXG4gKiAgIHRyYXZlcnNpbmcgdGhlIHBhcmVudC5cbiAqXG4gKiBAdHlwZWRlZiB7WyhBY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkIHwgdm9pZCk/LCAoSW5kZXggfCBudWxsIHwgdW5kZWZpbmVkKT9dfSBBY3Rpb25UdXBsZVxuICogICBMaXN0IHdpdGggb25lIG9yIHR3byB2YWx1ZXMsIHRoZSBmaXJzdCBhbiBhY3Rpb24sIHRoZSBzZWNvbmQgYW4gaW5kZXguXG4gKlxuICogQHR5cGVkZWYge0FjdGlvbiB8IEFjdGlvblR1cGxlIHwgSW5kZXggfCBudWxsIHwgdW5kZWZpbmVkIHwgdm9pZH0gVmlzaXRvclJlc3VsdFxuICogICBBbnkgdmFsdWUgdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSBhIHZpc2l0b3IuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgVmlzaXRvclxuICogICBIYW5kbGUgYSBub2RlIChtYXRjaGluZyBgdGVzdGAsIGlmIGdpdmVuKS5cbiAqXG4gKiAgIFZpc2l0b3JzIGFyZSBmcmVlIHRvIHRyYW5zZm9ybSBgbm9kZWAuXG4gKiAgIFRoZXkgY2FuIGFsc28gdHJhbnNmb3JtIHRoZSBwYXJlbnQgb2Ygbm9kZSAodGhlIGxhc3Qgb2YgYGFuY2VzdG9yc2ApLlxuICpcbiAqICAgUmVwbGFjaW5nIGBub2RlYCBpdHNlbGYsIGlmIGBTS0lQYCBpcyBub3QgcmV0dXJuZWQsIHN0aWxsIGNhdXNlcyBpdHNcbiAqICAgZGVzY2VuZGFudHMgdG8gYmUgd2Fsa2VkICh3aGljaCBpcyBhIGJ1ZykuXG4gKlxuICogICBXaGVuIGFkZGluZyBvciByZW1vdmluZyBwcmV2aW91cyBzaWJsaW5ncyBvZiBgbm9kZWAgKG9yIG5leHQgc2libGluZ3MsIGluXG4gKiAgIGNhc2Ugb2YgcmV2ZXJzZSksIHRoZSBgVmlzaXRvcmAgc2hvdWxkIHJldHVybiBhIG5ldyBgSW5kZXhgIHRvIHNwZWNpZnkgdGhlXG4gKiAgIHNpYmxpbmcgdG8gdHJhdmVyc2UgYWZ0ZXIgYG5vZGVgIGlzIHRyYXZlcnNlZC5cbiAqICAgQWRkaW5nIG9yIHJlbW92aW5nIG5leHQgc2libGluZ3Mgb2YgYG5vZGVgIChvciBwcmV2aW91cyBzaWJsaW5ncywgaW4gY2FzZVxuICogICBvZiByZXZlcnNlKSBpcyBoYW5kbGVkIGFzIGV4cGVjdGVkIHdpdGhvdXQgbmVlZGluZyB0byByZXR1cm4gYSBuZXcgYEluZGV4YC5cbiAqXG4gKiAgIFJlbW92aW5nIHRoZSBjaGlsZHJlbiBwcm9wZXJ0eSBvZiBhbiBhbmNlc3RvciBzdGlsbCByZXN1bHRzIGluIHRoZW0gYmVpbmdcbiAqICAgdHJhdmVyc2VkLlxuICogQHBhcmFtIHtWaXNpdGVkfSBub2RlXG4gKiAgIEZvdW5kIG5vZGUuXG4gKiBAcGFyYW0ge0FycmF5PFZpc2l0ZWRQYXJlbnRzPn0gYW5jZXN0b3JzXG4gKiAgIEFuY2VzdG9ycyBvZiBgbm9kZWAuXG4gKiBAcmV0dXJucyB7VmlzaXRvclJlc3VsdH1cbiAqICAgV2hhdCB0byBkbyBuZXh0LlxuICpcbiAqICAgQW4gYEluZGV4YCBpcyB0cmVhdGVkIGFzIGEgdHVwbGUgb2YgYFtDT05USU5VRSwgSW5kZXhdYC5cbiAqICAgQW4gYEFjdGlvbmAgaXMgdHJlYXRlZCBhcyBhIHR1cGxlIG9mIGBbQWN0aW9uXWAuXG4gKlxuICogICBQYXNzaW5nIGEgdHVwbGUgYmFjayBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBgQWN0aW9uYCBpcyBgU0tJUGAuXG4gKiAgIFdoZW4gdGhlIGBBY3Rpb25gIGlzIGBFWElUYCwgdGhhdCBhY3Rpb24gY2FuIGJlIHJldHVybmVkLlxuICogICBXaGVuIHRoZSBgQWN0aW9uYCBpcyBgQ09OVElOVUVgLCBgSW5kZXhgIGNhbiBiZSByZXR1cm5lZC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBbVmlzaXRlZD1VbmlzdE5vZGVdXG4gKiAgIFZpc2l0ZWQgbm9kZSB0eXBlLlxuICogQHRlbXBsYXRlIHtVbmlzdFBhcmVudH0gW1Zpc2l0ZWRQYXJlbnRzPVVuaXN0UGFyZW50XVxuICogICBBbmNlc3RvciB0eXBlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1Zpc2l0b3I8TWF0Y2hlczxJbmNsdXNpdmVEZXNjZW5kYW50PFRyZWU+LCBDaGVjaz4sIEFuY2VzdG9yPFRyZWUsIE1hdGNoZXM8SW5jbHVzaXZlRGVzY2VuZGFudDxUcmVlPiwgQ2hlY2s+Pj59IEJ1aWxkVmlzaXRvclxuICogICBCdWlsZCBhIHR5cGVkIGBWaXNpdG9yYCBmdW5jdGlvbiBmcm9tIGEgdHJlZSBhbmQgYSB0ZXN0LlxuICpcbiAqICAgSXQgd2lsbCBpbmZlciB3aGljaCB2YWx1ZXMgYXJlIHBhc3NlZCBhcyBgbm9kZWAgYW5kIHdoaWNoIGFzIGBwYXJlbnRzYC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBbVHJlZT1VbmlzdE5vZGVdXG4gKiAgIFRyZWUgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7VGVzdH0gW0NoZWNrPVRlc3RdXG4gKiAgIFRlc3QgdHlwZS5cbiAqL1xuXG5pbXBvcnQge2NvbnZlcnR9IGZyb20gJ3VuaXN0LXV0aWwtaXMnXG5pbXBvcnQge2NvbG9yfSBmcm9tICd1bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvZG8tbm90LXVzZS1jb2xvcidcblxuLyoqIEB0eXBlIHtSZWFkb25seTxBY3Rpb25UdXBsZT59ICovXG5jb25zdCBlbXB0eSA9IFtdXG5cbi8qKlxuICogQ29udGludWUgdHJhdmVyc2luZyBhcyBub3JtYWwuXG4gKi9cbmV4cG9ydCBjb25zdCBDT05USU5VRSA9IHRydWVcblxuLyoqXG4gKiBTdG9wIHRyYXZlcnNpbmcgaW1tZWRpYXRlbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBFWElUID0gZmFsc2VcblxuLyoqXG4gKiBEbyBub3QgdHJhdmVyc2UgdGhpcyBub2RlXHUyMDE5cyBjaGlsZHJlbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNLSVAgPSAnc2tpcCdcblxuLyoqXG4gKiBWaXNpdCBub2Rlcywgd2l0aCBhbmNlc3RyYWwgaW5mb3JtYXRpb24uXG4gKlxuICogVGhpcyBhbGdvcml0aG0gcGVyZm9ybXMgKmRlcHRoLWZpcnN0KiAqdHJlZSB0cmF2ZXJzYWwqIGluICpwcmVvcmRlcipcbiAqICgqKk5MUioqKSBvciBpZiBgcmV2ZXJzZWAgaXMgZ2l2ZW4sIGluICpyZXZlcnNlIHByZW9yZGVyKiAoKipOUkwqKikuXG4gKlxuICogWW91IGNhbiBjaG9vc2UgZm9yIHdoaWNoIG5vZGVzIGB2aXNpdG9yYCBpcyBjYWxsZWQgYnkgcGFzc2luZyBhIGB0ZXN0YC5cbiAqIEZvciBjb21wbGV4IHRlc3RzLCB5b3Ugc2hvdWxkIHRlc3QgeW91cnNlbGYgaW4gYHZpc2l0b3JgLCBhcyBpdCB3aWxsIGJlXG4gKiBmYXN0ZXIgYW5kIHdpbGwgaGF2ZSBpbXByb3ZlZCB0eXBlIGluZm9ybWF0aW9uLlxuICpcbiAqIFdhbGtpbmcgdGhlIHRyZWUgaXMgYW4gaW50ZW5zaXZlIHRhc2suXG4gKiBNYWtlIHVzZSBvZiB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0aGUgdmlzaXRvciB3aGVuIHBvc3NpYmxlLlxuICogSW5zdGVhZCBvZiB3YWxraW5nIGEgdHJlZSBtdWx0aXBsZSB0aW1lcywgd2FsayBpdCBvbmNlLCB1c2UgYHVuaXN0LXV0aWwtaXNgXG4gKiB0byBjaGVjayBpZiBhIG5vZGUgbWF0Y2hlcywgYW5kIHRoZW4gcGVyZm9ybSBkaWZmZXJlbnQgb3BlcmF0aW9ucy5cbiAqXG4gKiBZb3UgY2FuIGNoYW5nZSB0aGUgdHJlZS5cbiAqIFNlZSBgVmlzaXRvcmAgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAb3ZlcmxvYWRcbiAqIEBwYXJhbSB7VHJlZX0gdHJlZVxuICogQHBhcmFtIHtDaGVja30gY2hlY2tcbiAqIEBwYXJhbSB7QnVpbGRWaXNpdG9yPFRyZWUsIENoZWNrPn0gdmlzaXRvclxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3JldmVyc2VdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICpcbiAqIEBvdmVybG9hZFxuICogQHBhcmFtIHtUcmVlfSB0cmVlXG4gKiBAcGFyYW0ge0J1aWxkVmlzaXRvcjxUcmVlPn0gdmlzaXRvclxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3JldmVyc2VdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICpcbiAqIEBwYXJhbSB7VW5pc3ROb2RlfSB0cmVlXG4gKiAgIFRyZWUgdG8gdHJhdmVyc2UuXG4gKiBAcGFyYW0ge1Zpc2l0b3IgfCBUZXN0fSB0ZXN0XG4gKiAgIGB1bmlzdC11dGlsLWlzYC1jb21wYXRpYmxlIHRlc3RcbiAqIEBwYXJhbSB7VmlzaXRvciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbdmlzaXRvcl1cbiAqICAgSGFuZGxlIGVhY2ggbm9kZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtyZXZlcnNlXVxuICogICBUcmF2ZXJzZSBpbiByZXZlcnNlIHByZW9yZGVyIChOUkwpIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgcHJlb3JkZXIgKE5MUikuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICpcbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBUcmVlXG4gKiAgIE5vZGUgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7VGVzdH0gQ2hlY2tcbiAqICAgYHVuaXN0LXV0aWwtaXNgLWNvbXBhdGlibGUgdGVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpc2l0UGFyZW50cyh0cmVlLCB0ZXN0LCB2aXNpdG9yLCByZXZlcnNlKSB7XG4gIC8qKiBAdHlwZSB7VGVzdH0gKi9cbiAgbGV0IGNoZWNrXG5cbiAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2aXNpdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV2ZXJzZSA9IHZpc2l0b3JcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vIHZpc2l0b3IgZ2l2ZW4sIHNvIGB2aXNpdG9yYCBpcyB0ZXN0LlxuICAgIHZpc2l0b3IgPSB0ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB2aXNpdG9yIGdpdmVuLCBzbyBgdGVzdGAgaXNuXHUyMDE5dCBhIHZpc2l0b3IuXG4gICAgY2hlY2sgPSB0ZXN0XG4gIH1cblxuICBjb25zdCBpcyA9IGNvbnZlcnQoY2hlY2spXG4gIGNvbnN0IHN0ZXAgPSByZXZlcnNlID8gLTEgOiAxXG5cbiAgZmFjdG9yeSh0cmVlLCB1bmRlZmluZWQsIFtdKSgpXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VW5pc3ROb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICAgKiBAcGFyYW0ge0FycmF5PFVuaXN0UGFyZW50Pn0gcGFyZW50c1xuICAgKi9cbiAgZnVuY3Rpb24gZmFjdG9yeShub2RlLCBpbmRleCwgcGFyZW50cykge1xuICAgIGNvbnN0IHZhbHVlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKFxuICAgICAgbm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgPyBub2RlIDoge31cbiAgICApXG5cbiAgICBpZiAodHlwZW9mIHZhbHVlLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgLy8gYGhhc3RgXG4gICAgICAgIHR5cGVvZiB2YWx1ZS50YWdOYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gdmFsdWUudGFnTmFtZVxuICAgICAgICAgIDogLy8gYHhhc3RgXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLm5hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyB2YWx1ZS5uYW1lXG4gICAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpc2l0LCAnbmFtZScsIHtcbiAgICAgICAgdmFsdWU6XG4gICAgICAgICAgJ25vZGUgKCcgKyBjb2xvcihub2RlLnR5cGUgKyAobmFtZSA/ICc8JyArIG5hbWUgKyAnPicgOiAnJykpICsgJyknXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB2aXNpdFxuXG4gICAgZnVuY3Rpb24gdmlzaXQoKSB7XG4gICAgICAvKiogQHR5cGUge1JlYWRvbmx5PEFjdGlvblR1cGxlPn0gKi9cbiAgICAgIGxldCByZXN1bHQgPSBlbXB0eVxuICAgICAgLyoqIEB0eXBlIHtSZWFkb25seTxBY3Rpb25UdXBsZT59ICovXG4gICAgICBsZXQgc3VicmVzdWx0XG4gICAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICAgIGxldCBvZmZzZXRcbiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8VW5pc3RQYXJlbnQ+fSAqL1xuICAgICAgbGV0IGdyYW5kcGFyZW50c1xuXG4gICAgICBpZiAoIXRlc3QgfHwgaXMobm9kZSwgaW5kZXgsIHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXSB8fCB1bmRlZmluZWQpKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGB2aXNpdG9yYCBpcyBub3cgYSB2aXNpdG9yLlxuICAgICAgICByZXN1bHQgPSB0b1Jlc3VsdCh2aXNpdG9yKG5vZGUsIHBhcmVudHMpKVxuXG4gICAgICAgIGlmIChyZXN1bHRbMF0gPT09IEVYSVQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCdjaGlsZHJlbicgaW4gbm9kZSAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IG5vZGVBc1BhcmVudCA9IC8qKiBAdHlwZSB7VW5pc3RQYXJlbnR9ICovIChub2RlKVxuXG4gICAgICAgIGlmIChub2RlQXNQYXJlbnQuY2hpbGRyZW4gJiYgcmVzdWx0WzBdICE9PSBTS0lQKSB7XG4gICAgICAgICAgb2Zmc2V0ID0gKHJldmVyc2UgPyBub2RlQXNQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIDogLTEpICsgc3RlcFxuICAgICAgICAgIGdyYW5kcGFyZW50cyA9IHBhcmVudHMuY29uY2F0KG5vZGVBc1BhcmVudClcblxuICAgICAgICAgIHdoaWxlIChvZmZzZXQgPiAtMSAmJiBvZmZzZXQgPCBub2RlQXNQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGVBc1BhcmVudC5jaGlsZHJlbltvZmZzZXRdXG5cbiAgICAgICAgICAgIHN1YnJlc3VsdCA9IGZhY3RvcnkoY2hpbGQsIG9mZnNldCwgZ3JhbmRwYXJlbnRzKSgpXG5cbiAgICAgICAgICAgIGlmIChzdWJyZXN1bHRbMF0gPT09IEVYSVQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YnJlc3VsdFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvZmZzZXQgPVxuICAgICAgICAgICAgICB0eXBlb2Ygc3VicmVzdWx0WzFdID09PSAnbnVtYmVyJyA/IHN1YnJlc3VsdFsxXSA6IG9mZnNldCArIHN0ZXBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFR1cm4gYSByZXR1cm4gdmFsdWUgaW50byBhIGNsZWFuIHJlc3VsdC5cbiAqXG4gKiBAcGFyYW0ge1Zpc2l0b3JSZXN1bHR9IHZhbHVlXG4gKiAgIFZhbGlkIHJldHVybiB2YWx1ZXMgZnJvbSB2aXNpdG9ycy5cbiAqIEByZXR1cm5zIHtSZWFkb25seTxBY3Rpb25UdXBsZT59XG4gKiAgIENsZWFuIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gdG9SZXN1bHQodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBbQ09OVElOVUUsIHZhbHVlXVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyBlbXB0eSA6IFt2YWx1ZV1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuTm9kZX0gVW5pc3ROb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBhcmVudH0gVW5pc3RQYXJlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cycpLlZpc2l0b3JSZXN1bHR9IFZpc2l0b3JSZXN1bHRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtFeGNsdWRlPGltcG9ydCgndW5pc3QtdXRpbC1pcycpLlRlc3QsIHVuZGVmaW5lZD4gfCB1bmRlZmluZWR9IFRlc3RcbiAqICAgVGVzdCBmcm9tIGB1bmlzdC11dGlsLWlzYC5cbiAqXG4gKiAgIE5vdGU6IHdlIGhhdmUgcmVtb3ZlIGFuZCBhZGQgYHVuZGVmaW5lZGAsIGJlY2F1c2Ugb3RoZXJ3aXNlIHdoZW4gZ2VuZXJhdGluZ1xuICogICBhdXRvbWF0aWMgYC5kLnRzYCBmaWxlcywgVFMgdHJpZXMgdG8gZmxhdHRlbiBwYXRocyBmcm9tIGEgbG9jYWwgcGVyc3BlY3RpdmUsXG4gKiAgIHdoaWNoIGRvZXNuXHUyMDE5dCB3b3JrIHdoZW4gcHVibGlzaGluZyBvbiBucG0uXG4gKi9cblxuLy8gVG8gZG86IHVzZSB0eXBlcyBmcm9tIGB1bmlzdC11dGlsLXZpc2l0LXBhcmVudHNgIHdoZW4gaXRcdTIwMTlzIHJlbGVhc2VkLlxuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIEZuIGV4dGVuZHMgKHZhbHVlOiBhbnkpID0+IHZhbHVlIGlzIGluZmVyIFRoaW5nXG4gKiAgID8gVGhpbmdcbiAqICAgOiBGYWxsYmFja1xuICogKX0gUHJlZGljYXRlXG4gKiAgIEdldCB0aGUgdmFsdWUgb2YgYSB0eXBlIGd1YXJkIGBGbmAuXG4gKiBAdGVtcGxhdGUgRm5cbiAqICAgVmFsdWU7IHR5cGljYWxseSBmdW5jdGlvbiB0aGF0IGlzIGEgdHlwZSBndWFyZCAoc3VjaCBhcyBgKHgpOiB4IGlzIFlgKS5cbiAqIEB0ZW1wbGF0ZSBGYWxsYmFja1xuICogICBWYWx1ZSB0byB5aWVsZCBpZiBgRm5gIGlzIG5vdCBhIHR5cGUgZ3VhcmQuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBDaGVjayBleHRlbmRzIG51bGwgfCB1bmRlZmluZWQgLy8gTm8gdGVzdC5cbiAqICAgPyBWYWx1ZVxuICogICA6IFZhbHVlIGV4dGVuZHMge3R5cGU6IENoZWNrfSAvLyBTdHJpbmcgKHR5cGUpIHRlc3QuXG4gKiAgID8gVmFsdWVcbiAqICAgOiBWYWx1ZSBleHRlbmRzIENoZWNrIC8vIFBhcnRpYWwgdGVzdC5cbiAqICAgPyBWYWx1ZVxuICogICA6IENoZWNrIGV4dGVuZHMgRnVuY3Rpb24gLy8gRnVuY3Rpb24gdGVzdC5cbiAqICAgPyBQcmVkaWNhdGU8Q2hlY2ssIFZhbHVlPiBleHRlbmRzIFZhbHVlXG4gKiAgICAgPyBQcmVkaWNhdGU8Q2hlY2ssIFZhbHVlPlxuICogICAgIDogbmV2ZXJcbiAqICAgOiBuZXZlciAvLyBTb21lIG90aGVyIHRlc3Q/XG4gKiApfSBNYXRjaGVzT25lXG4gKiAgIENoZWNrIHdoZXRoZXIgYSBub2RlIG1hdGNoZXMgYSBwcmltaXRpdmUgY2hlY2sgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICogQHRlbXBsYXRlIFZhbHVlXG4gKiAgIFZhbHVlOyB0eXBpY2FsbHkgdW5pc3QgYE5vZGVgLlxuICogQHRlbXBsYXRlIENoZWNrXG4gKiAgIFZhbHVlOyB0eXBpY2FsbHkgYHVuaXN0LXV0aWwtaXNgLWNvbXBhdGlibGUgdGVzdCwgYnV0IG5vdCBhcnJheXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBDaGVjayBleHRlbmRzIEFycmF5PGFueT5cbiAqICAgPyBNYXRjaGVzT25lPFZhbHVlLCBDaGVja1trZXlvZiBDaGVja10+XG4gKiAgIDogTWF0Y2hlc09uZTxWYWx1ZSwgQ2hlY2s+XG4gKiApfSBNYXRjaGVzXG4gKiAgIENoZWNrIHdoZXRoZXIgYSBub2RlIG1hdGNoZXMgYSBjaGVjayBpbiB0aGUgdHlwZSBzeXN0ZW0uXG4gKiBAdGVtcGxhdGUgVmFsdWVcbiAqICAgVmFsdWU7IHR5cGljYWxseSB1bmlzdCBgTm9kZWAuXG4gKiBAdGVtcGxhdGUgQ2hlY2tcbiAqICAgVmFsdWU7IHR5cGljYWxseSBgdW5pc3QtdXRpbC1pc2AtY29tcGF0aWJsZSB0ZXN0LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgezAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDkgfCAxMH0gVWludFxuICogICBOdW1iZXI7IGNhcHBlZCByZWFzb25hYmx5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0kgZXh0ZW5kcyAwID8gMSA6IEkgZXh0ZW5kcyAxID8gMiA6IEkgZXh0ZW5kcyAyID8gMyA6IEkgZXh0ZW5kcyAzID8gNCA6IEkgZXh0ZW5kcyA0ID8gNSA6IEkgZXh0ZW5kcyA1ID8gNiA6IEkgZXh0ZW5kcyA2ID8gNyA6IEkgZXh0ZW5kcyA3ID8gOCA6IEkgZXh0ZW5kcyA4ID8gOSA6IDEwfSBJbmNyZW1lbnRcbiAqICAgSW5jcmVtZW50IGEgbnVtYmVyIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW0k9MF1cbiAqICAgSW5kZXguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBOb2RlIGV4dGVuZHMgVW5pc3RQYXJlbnRcbiAqICAgPyBOb2RlIGV4dGVuZHMge2NoaWxkcmVuOiBBcnJheTxpbmZlciBDaGlsZHJlbj59XG4gKiAgICAgPyBDaGlsZCBleHRlbmRzIENoaWxkcmVuID8gTm9kZSA6IG5ldmVyXG4gKiAgICAgOiBuZXZlclxuICogICA6IG5ldmVyXG4gKiApfSBJbnRlcm5hbFBhcmVudFxuICogICBDb2xsZWN0IG5vZGVzIHRoYXQgY2FuIGJlIHBhcmVudHMgb2YgYENoaWxkYC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBOb2RlXG4gKiAgIEFsbCBub2RlIHR5cGVzIGluIGEgdHJlZS5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBDaGlsZFxuICogICBOb2RlIHRvIHNlYXJjaCBmb3IuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7SW50ZXJuYWxQYXJlbnQ8SW5jbHVzaXZlRGVzY2VuZGFudDxUcmVlPiwgQ2hpbGQ+fSBQYXJlbnRcbiAqICAgQ29sbGVjdCBub2RlcyBpbiBgVHJlZWAgdGhhdCBjYW4gYmUgcGFyZW50cyBvZiBgQ2hpbGRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFRyZWVcbiAqICAgQWxsIG5vZGUgdHlwZXMgaW4gYSB0cmVlLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IENoaWxkXG4gKiAgIE5vZGUgdG8gc2VhcmNoIGZvci5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIERlcHRoIGV4dGVuZHMgTWF4XG4gKiAgID8gbmV2ZXJcbiAqICAgOlxuICogICAgIHwgSW50ZXJuYWxQYXJlbnQ8Tm9kZSwgQ2hpbGQ+XG4gKiAgICAgfCBJbnRlcm5hbEFuY2VzdG9yPE5vZGUsIEludGVybmFsUGFyZW50PE5vZGUsIENoaWxkPiwgTWF4LCBJbmNyZW1lbnQ8RGVwdGg+PlxuICogKX0gSW50ZXJuYWxBbmNlc3RvclxuICogICBDb2xsZWN0IG5vZGVzIGluIGBUcmVlYCB0aGF0IGNhbiBiZSBhbmNlc3RvcnMgb2YgYENoaWxkYC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBOb2RlXG4gKiAgIEFsbCBub2RlIHR5cGVzIGluIGEgdHJlZS5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBDaGlsZFxuICogICBOb2RlIHRvIHNlYXJjaCBmb3IuXG4gKiBAdGVtcGxhdGUge1VpbnR9IFtNYXg9MTBdXG4gKiAgIE1heDsgc2VhcmNoZXMgdXAgdG8gdGhpcyBkZXB0aC5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW0RlcHRoPTBdXG4gKiAgIEN1cnJlbnQgZGVwdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBUcmVlIGV4dGVuZHMgVW5pc3RQYXJlbnRcbiAqICAgICA/IERlcHRoIGV4dGVuZHMgTWF4XG4gKiAgICAgICA/IFRyZWVcbiAqICAgICAgIDogVHJlZSB8IEluY2x1c2l2ZURlc2NlbmRhbnQ8VHJlZVsnY2hpbGRyZW4nXVtudW1iZXJdLCBNYXgsIEluY3JlbWVudDxEZXB0aD4+XG4gKiAgICAgOiBUcmVlXG4gKiApfSBJbmNsdXNpdmVEZXNjZW5kYW50XG4gKiAgIENvbGxlY3QgYWxsIChpbmNsdXNpdmUpIGRlc2NlbmRhbnRzIG9mIGBUcmVlYC5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhpcyBzZWVtcyB0byBiZSB0aGUgZmFzdGVzdCB3YXkgdG9cbiAqICAgPiByZWN1cnNlIHdpdGhvdXQgYWN0dWFsbHkgcnVubmluZyBpbnRvIGFuIGluZmluaXRlIGxvb3AsIHdoaWNoIHRoZVxuICogICA+IHByZXZpb3VzIHZlcnNpb24gZGlkLlxuICogICA+XG4gKiAgID4gUHJhY3RpY2FsbHksIGEgbWF4IG9mIGAyYCBpcyB0eXBpY2FsbHkgZW5vdWdoIGFzc3VtaW5nIGEgYFJvb3RgIGlzXG4gKiAgID4gcGFzc2VkLCBidXQgaXQgZG9lc25cdTIwMTl0IGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gKiAgID4gSXQgZ2V0cyBoaWdoZXIgd2l0aCBgTGlzdCA+IExpc3RJdGVtID4gVGFibGUgPiBUYWJsZVJvdyA+IFRhYmxlQ2VsbGAuXG4gKiAgID4gVXNpbmcgdXAgdG8gYDEwYCBkb2Vzblx1MjAxOXQgaHVydCBvciBoZWxwIGVpdGhlci5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBUcmVlXG4gKiAgIFRyZWUgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW01heD0xMF1cbiAqICAgTWF4OyBzZWFyY2hlcyB1cCB0byB0aGlzIGRlcHRoLlxuICogQHRlbXBsYXRlIHtVaW50fSBbRGVwdGg9MF1cbiAqICAgQ3VycmVudCBkZXB0aC5cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBWaXNpdG9yXG4gKiAgIEhhbmRsZSBhIG5vZGUgKG1hdGNoaW5nIGB0ZXN0YCwgaWYgZ2l2ZW4pLlxuICpcbiAqICAgVmlzaXRvcnMgYXJlIGZyZWUgdG8gdHJhbnNmb3JtIGBub2RlYC5cbiAqICAgVGhleSBjYW4gYWxzbyB0cmFuc2Zvcm0gYHBhcmVudGAuXG4gKlxuICogICBSZXBsYWNpbmcgYG5vZGVgIGl0c2VsZiwgaWYgYFNLSVBgIGlzIG5vdCByZXR1cm5lZCwgc3RpbGwgY2F1c2VzIGl0c1xuICogICBkZXNjZW5kYW50cyB0byBiZSB3YWxrZWQgKHdoaWNoIGlzIGEgYnVnKS5cbiAqXG4gKiAgIFdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYCAob3IgbmV4dCBzaWJsaW5ncywgaW5cbiAqICAgY2FzZSBvZiByZXZlcnNlKSwgdGhlIGBWaXNpdG9yYCBzaG91bGQgcmV0dXJuIGEgbmV3IGBJbmRleGAgdG8gc3BlY2lmeSB0aGVcbiAqICAgc2libGluZyB0byB0cmF2ZXJzZSBhZnRlciBgbm9kZWAgaXMgdHJhdmVyc2VkLlxuICogICBBZGRpbmcgb3IgcmVtb3ZpbmcgbmV4dCBzaWJsaW5ncyBvZiBgbm9kZWAgKG9yIHByZXZpb3VzIHNpYmxpbmdzLCBpbiBjYXNlXG4gKiAgIG9mIHJldmVyc2UpIGlzIGhhbmRsZWQgYXMgZXhwZWN0ZWQgd2l0aG91dCBuZWVkaW5nIHRvIHJldHVybiBhIG5ldyBgSW5kZXhgLlxuICpcbiAqICAgUmVtb3ZpbmcgdGhlIGNoaWxkcmVuIHByb3BlcnR5IG9mIGBwYXJlbnRgIHN0aWxsIHJlc3VsdHMgaW4gdGhlbSBiZWluZ1xuICogICB0cmF2ZXJzZWQuXG4gKiBAcGFyYW0ge1Zpc2l0ZWR9IG5vZGVcbiAqICAgRm91bmQgbm9kZS5cbiAqIEBwYXJhbSB7VmlzaXRlZCBleHRlbmRzIFVuaXN0Tm9kZSA/IG51bWJlciB8IHVuZGVmaW5lZCA6IG5ldmVyfSBpbmRleFxuICogICBJbmRleCBvZiBgbm9kZWAgaW4gYHBhcmVudGAuXG4gKiBAcGFyYW0ge0FuY2VzdG9yIGV4dGVuZHMgVW5pc3RQYXJlbnQgPyBBbmNlc3RvciB8IHVuZGVmaW5lZCA6IG5ldmVyfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGBub2RlYC5cbiAqIEByZXR1cm5zIHtWaXNpdG9yUmVzdWx0fVxuICogICBXaGF0IHRvIGRvIG5leHQuXG4gKlxuICogICBBbiBgSW5kZXhgIGlzIHRyZWF0ZWQgYXMgYSB0dXBsZSBvZiBgW0NPTlRJTlVFLCBJbmRleF1gLlxuICogICBBbiBgQWN0aW9uYCBpcyB0cmVhdGVkIGFzIGEgdHVwbGUgb2YgYFtBY3Rpb25dYC5cbiAqXG4gKiAgIFBhc3NpbmcgYSB0dXBsZSBiYWNrIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGBBY3Rpb25gIGlzIGBTS0lQYC5cbiAqICAgV2hlbiB0aGUgYEFjdGlvbmAgaXMgYEVYSVRgLCB0aGF0IGFjdGlvbiBjYW4gYmUgcmV0dXJuZWQuXG4gKiAgIFdoZW4gdGhlIGBBY3Rpb25gIGlzIGBDT05USU5VRWAsIGBJbmRleGAgY2FuIGJlIHJldHVybmVkLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFtWaXNpdGVkPVVuaXN0Tm9kZV1cbiAqICAgVmlzaXRlZCBub2RlIHR5cGUuXG4gKiBAdGVtcGxhdGUge1VuaXN0UGFyZW50fSBbQW5jZXN0b3I9VW5pc3RQYXJlbnRdXG4gKiAgIEFuY2VzdG9yIHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7VmlzaXRvcjxWaXNpdGVkLCBQYXJlbnQ8QW5jZXN0b3IsIFZpc2l0ZWQ+Pn0gQnVpbGRWaXNpdG9yRnJvbU1hdGNoXG4gKiAgIEJ1aWxkIGEgdHlwZWQgYFZpc2l0b3JgIGZ1bmN0aW9uIGZyb20gYSBub2RlIGFuZCBhbGwgcG9zc2libGUgcGFyZW50cy5cbiAqXG4gKiAgIEl0IHdpbGwgaW5mZXIgd2hpY2ggdmFsdWVzIGFyZSBwYXNzZWQgYXMgYG5vZGVgIGFuZCB3aGljaCBhcyBgcGFyZW50YC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBWaXNpdGVkXG4gKiAgIE5vZGUgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3RQYXJlbnR9IEFuY2VzdG9yXG4gKiAgIFBhcmVudCB0eXBlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhcbiAqICAgQnVpbGRWaXNpdG9yRnJvbU1hdGNoPFxuICogICAgIE1hdGNoZXM8RGVzY2VuZGFudCwgQ2hlY2s+LFxuICogICAgIEV4dHJhY3Q8RGVzY2VuZGFudCwgVW5pc3RQYXJlbnQ+XG4gKiAgID5cbiAqICl9IEJ1aWxkVmlzaXRvckZyb21EZXNjZW5kYW50c1xuICogICBCdWlsZCBhIHR5cGVkIGBWaXNpdG9yYCBmdW5jdGlvbiBmcm9tIGEgbGlzdCBvZiBkZXNjZW5kYW50cyBhbmQgYSB0ZXN0LlxuICpcbiAqICAgSXQgd2lsbCBpbmZlciB3aGljaCB2YWx1ZXMgYXJlIHBhc3NlZCBhcyBgbm9kZWAgYW5kIHdoaWNoIGFzIGBwYXJlbnRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IERlc2NlbmRhbnRcbiAqICAgTm9kZSB0eXBlLlxuICogQHRlbXBsYXRlIHtUZXN0fSBDaGVja1xuICogICBUZXN0IHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KFxuICogICBCdWlsZFZpc2l0b3JGcm9tRGVzY2VuZGFudHM8XG4gKiAgICAgSW5jbHVzaXZlRGVzY2VuZGFudDxUcmVlPixcbiAqICAgICBDaGVja1xuICogICA+XG4gKiApfSBCdWlsZFZpc2l0b3JcbiAqICAgQnVpbGQgYSB0eXBlZCBgVmlzaXRvcmAgZnVuY3Rpb24gZnJvbSBhIHRyZWUgYW5kIGEgdGVzdC5cbiAqXG4gKiAgIEl0IHdpbGwgaW5mZXIgd2hpY2ggdmFsdWVzIGFyZSBwYXNzZWQgYXMgYG5vZGVgIGFuZCB3aGljaCBhcyBgcGFyZW50YC5cbiAqIEB0ZW1wbGF0ZSB7VW5pc3ROb2RlfSBbVHJlZT1VbmlzdE5vZGVdXG4gKiAgIE5vZGUgdHlwZS5cbiAqIEB0ZW1wbGF0ZSB7VGVzdH0gW0NoZWNrPVRlc3RdXG4gKiAgIFRlc3QgdHlwZS5cbiAqL1xuXG5pbXBvcnQge3Zpc2l0UGFyZW50c30gZnJvbSAndW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzJ1xuXG5leHBvcnQge0NPTlRJTlVFLCBFWElULCBTS0lQfSBmcm9tICd1bmlzdC11dGlsLXZpc2l0LXBhcmVudHMnXG5cbi8qKlxuICogVmlzaXQgbm9kZXMuXG4gKlxuICogVGhpcyBhbGdvcml0aG0gcGVyZm9ybXMgKmRlcHRoLWZpcnN0KiAqdHJlZSB0cmF2ZXJzYWwqIGluICpwcmVvcmRlcipcbiAqICgqKk5MUioqKSBvciBpZiBgcmV2ZXJzZWAgaXMgZ2l2ZW4sIGluICpyZXZlcnNlIHByZW9yZGVyKiAoKipOUkwqKikuXG4gKlxuICogWW91IGNhbiBjaG9vc2UgZm9yIHdoaWNoIG5vZGVzIGB2aXNpdG9yYCBpcyBjYWxsZWQgYnkgcGFzc2luZyBhIGB0ZXN0YC5cbiAqIEZvciBjb21wbGV4IHRlc3RzLCB5b3Ugc2hvdWxkIHRlc3QgeW91cnNlbGYgaW4gYHZpc2l0b3JgLCBhcyBpdCB3aWxsIGJlXG4gKiBmYXN0ZXIgYW5kIHdpbGwgaGF2ZSBpbXByb3ZlZCB0eXBlIGluZm9ybWF0aW9uLlxuICpcbiAqIFdhbGtpbmcgdGhlIHRyZWUgaXMgYW4gaW50ZW5zaXZlIHRhc2suXG4gKiBNYWtlIHVzZSBvZiB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0aGUgdmlzaXRvciB3aGVuIHBvc3NpYmxlLlxuICogSW5zdGVhZCBvZiB3YWxraW5nIGEgdHJlZSBtdWx0aXBsZSB0aW1lcywgd2FsayBpdCBvbmNlLCB1c2UgYHVuaXN0LXV0aWwtaXNgXG4gKiB0byBjaGVjayBpZiBhIG5vZGUgbWF0Y2hlcywgYW5kIHRoZW4gcGVyZm9ybSBkaWZmZXJlbnQgb3BlcmF0aW9ucy5cbiAqXG4gKiBZb3UgY2FuIGNoYW5nZSB0aGUgdHJlZS5cbiAqIFNlZSBgVmlzaXRvcmAgZm9yIG1vcmUgaW5mby5cbiAqXG4gKiBAb3ZlcmxvYWRcbiAqIEBwYXJhbSB7VHJlZX0gdHJlZVxuICogQHBhcmFtIHtDaGVja30gY2hlY2tcbiAqIEBwYXJhbSB7QnVpbGRWaXNpdG9yPFRyZWUsIENoZWNrPn0gdmlzaXRvclxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3JldmVyc2VdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICpcbiAqIEBvdmVybG9hZFxuICogQHBhcmFtIHtUcmVlfSB0cmVlXG4gKiBAcGFyYW0ge0J1aWxkVmlzaXRvcjxUcmVlPn0gdmlzaXRvclxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3JldmVyc2VdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICpcbiAqIEBwYXJhbSB7VW5pc3ROb2RlfSB0cmVlXG4gKiAgIFRyZWUgdG8gdHJhdmVyc2UuXG4gKiBAcGFyYW0ge1Zpc2l0b3IgfCBUZXN0fSB0ZXN0T3JWaXNpdG9yXG4gKiAgIGB1bmlzdC11dGlsLWlzYC1jb21wYXRpYmxlIHRlc3QgKG9wdGlvbmFsLCBvbWl0IHRvIHBhc3MgYSB2aXNpdG9yKS5cbiAqIEBwYXJhbSB7VmlzaXRvciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbdmlzaXRvck9yUmV2ZXJzZV1cbiAqICAgSGFuZGxlIGVhY2ggbm9kZSAod2hlbiB0ZXN0IGlzIG9taXR0ZWQsIHBhc3MgYHJldmVyc2VgKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFttYXliZVJldmVyc2U9ZmFsc2VdXG4gKiAgIFRyYXZlcnNlIGluIHJldmVyc2UgcHJlb3JkZXIgKE5STCkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBwcmVvcmRlciAoTkxSKS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFRyZWVcbiAqICAgTm9kZSB0eXBlLlxuICogQHRlbXBsYXRlIHtUZXN0fSBDaGVja1xuICogICBgdW5pc3QtdXRpbC1pc2AtY29tcGF0aWJsZSB0ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaXQodHJlZSwgdGVzdE9yVmlzaXRvciwgdmlzaXRvck9yUmV2ZXJzZSwgbWF5YmVSZXZlcnNlKSB7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9ICovXG4gIGxldCByZXZlcnNlXG4gIC8qKiBAdHlwZSB7VGVzdH0gKi9cbiAgbGV0IHRlc3RcbiAgLyoqIEB0eXBlIHtWaXNpdG9yfSAqL1xuICBsZXQgdmlzaXRvclxuXG4gIGlmIChcbiAgICB0eXBlb2YgdGVzdE9yVmlzaXRvciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB2aXNpdG9yT3JSZXZlcnNlICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHRlc3QgPSB1bmRlZmluZWRcbiAgICB2aXNpdG9yID0gdGVzdE9yVmlzaXRvclxuICAgIHJldmVyc2UgPSB2aXNpdG9yT3JSZXZlcnNlXG4gIH0gZWxzZSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYXNzdW1lIHRoZSBvdmVybG9hZCB3aXRoIHRlc3Qgd2FzIGdpdmVuLlxuICAgIHRlc3QgPSB0ZXN0T3JWaXNpdG9yXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYXNzdW1lIHRoZSBvdmVybG9hZCB3aXRoIHRlc3Qgd2FzIGdpdmVuLlxuICAgIHZpc2l0b3IgPSB2aXNpdG9yT3JSZXZlcnNlXG4gICAgcmV2ZXJzZSA9IG1heWJlUmV2ZXJzZVxuICB9XG5cbiAgdmlzaXRQYXJlbnRzKHRyZWUsIHRlc3QsIG92ZXJsb2FkLCByZXZlcnNlKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1VuaXN0Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge0FycmF5PFVuaXN0UGFyZW50Pn0gcGFyZW50c1xuICAgKi9cbiAgZnVuY3Rpb24gb3ZlcmxvYWQobm9kZSwgcGFyZW50cykge1xuICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudHNbcGFyZW50cy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGluZGV4ID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZSkgOiB1bmRlZmluZWRcbiAgICByZXR1cm4gdmlzaXRvcihub2RlLCBpbmRleCwgcGFyZW50KVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlJvb3R8aW1wb3J0KCdtZGFzdCcpLkNvbnRlbnR9IE5vZGVcbiAqXG4gKiBAdHlwZWRlZiBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtpbmNsdWRlSW1hZ2VBbHQ9dHJ1ZV1cbiAqICAgV2hldGhlciB0byB1c2UgYGFsdGAgZm9yIGBpbWFnZWBzLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2luY2x1ZGVIdG1sPXRydWVdXG4gKiAgIFdoZXRoZXIgdG8gdXNlIGB2YWx1ZWAgb2YgSFRNTC5cbiAqL1xuXG4vKiogQHR5cGUge09wdGlvbnN9ICovXG5jb25zdCBlbXB0eU9wdGlvbnMgPSB7fVxuXG4vKipcbiAqIEdldCB0aGUgdGV4dCBjb250ZW50IG9mIGEgbm9kZSBvciBsaXN0IG9mIG5vZGVzLlxuICpcbiAqIFByZWZlcnMgdGhlIG5vZGVcdTIwMTlzIHBsYWluLXRleHQgZmllbGRzLCBvdGhlcndpc2Ugc2VyaWFsaXplcyBpdHMgY2hpbGRyZW4sXG4gKiBhbmQgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGFycmF5LCBzZXJpYWxpemUgdGhlIG5vZGVzIGluIGl0LlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqICAgVGhpbmcgdG8gc2VyaWFsaXplLCB0eXBpY2FsbHkgYE5vZGVgLlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgYHZhbHVlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnNcbiAgY29uc3QgaW5jbHVkZUltYWdlQWx0ID1cbiAgICB0eXBlb2Ygc2V0dGluZ3MuaW5jbHVkZUltYWdlQWx0ID09PSAnYm9vbGVhbidcbiAgICAgID8gc2V0dGluZ3MuaW5jbHVkZUltYWdlQWx0XG4gICAgICA6IHRydWVcbiAgY29uc3QgaW5jbHVkZUh0bWwgPVxuICAgIHR5cGVvZiBzZXR0aW5ncy5pbmNsdWRlSHRtbCA9PT0gJ2Jvb2xlYW4nID8gc2V0dGluZ3MuaW5jbHVkZUh0bWwgOiB0cnVlXG5cbiAgcmV0dXJuIG9uZSh2YWx1ZSwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbClcbn1cblxuLyoqXG4gKiBPbmUgbm9kZSBvciBzZXZlcmFsIG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqICAgVGhpbmcgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHtib29sZWFufSBpbmNsdWRlSW1hZ2VBbHRcbiAqICAgSW5jbHVkZSBpbWFnZSBgYWx0YHMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVIdG1sXG4gKiAgIEluY2x1ZGUgSFRNTC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gb25lKHZhbHVlLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKSB7XG4gIGlmIChub2RlKHZhbHVlKSkge1xuICAgIGlmICgndmFsdWUnIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudHlwZSA9PT0gJ2h0bWwnICYmICFpbmNsdWRlSHRtbCA/ICcnIDogdmFsdWUudmFsdWVcbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZUltYWdlQWx0ICYmICdhbHQnIGluIHZhbHVlICYmIHZhbHVlLmFsdCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmFsdFxuICAgIH1cblxuICAgIGlmICgnY2hpbGRyZW4nIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYWxsKHZhbHVlLmNoaWxkcmVuLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKVxuICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBhbGwodmFsdWUsIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpXG4gIH1cblxuICByZXR1cm4gJydcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBsaXN0IG9mIG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8dW5rbm93bj59IHZhbHVlc1xuICogICBUaGluZyB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVJbWFnZUFsdFxuICogICBJbmNsdWRlIGltYWdlIGBhbHRgcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5jbHVkZUh0bWxcbiAqICAgSW5jbHVkZSBIVE1MLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBub2Rlcy5cbiAqL1xuZnVuY3Rpb24gYWxsKHZhbHVlcywgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCkge1xuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IG9uZSh2YWx1ZXNbaW5kZXhdLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGB2YWx1ZWAgbG9va3MgbGlrZSBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogICBUaGluZy5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBOb2RlfVxuICogICBXaGV0aGVyIGB2YWx1ZWAgaXMgYSBub2RlLlxuICovXG5mdW5jdGlvbiBub2RlKHZhbHVlKSB7XG4gIHJldHVybiBCb29sZWFuKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpXG59XG4iLCAiLyoqXG4gKiBMaWtlIGBBcnJheSNzcGxpY2VgLCBidXQgc21hcnRlciBmb3IgZ2lhbnQgYXJyYXlzLlxuICpcbiAqIGBBcnJheSNzcGxpY2VgIHRha2VzIGFsbCBpdGVtcyB0byBiZSBpbnNlcnRlZCBhcyBpbmRpdmlkdWFsIGFyZ3VtZW50IHdoaWNoXG4gKiBjYXVzZXMgYSBzdGFjayBvdmVyZmxvdyBpbiBWOCB3aGVuIHRyeWluZyB0byBpbnNlcnQgMTAwayBpdGVtcyBmb3IgaW5zdGFuY2UuXG4gKlxuICogT3RoZXJ3aXNlLCB0aGlzIGRvZXMgbm90IHJldHVybiB0aGUgcmVtb3ZlZCBpdGVtcywgYW5kIHRha2VzIGBpdGVtc2AgYXMgYW5cbiAqIGFycmF5IGluc3RlYWQgb2YgcmVzdCBwYXJhbWV0ZXJzLlxuICpcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gVFxuICogICBJdGVtIHR5cGUuXG4gKiBAcGFyYW0ge0FycmF5PFQ+fSBsaXN0XG4gKiAgIExpc3QgdG8gb3BlcmF0ZSBvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICogICBJbmRleCB0byByZW1vdmUvaW5zZXJ0IGF0IChjYW4gYmUgbmVnYXRpdmUpLlxuICogQHBhcmFtIHtudW1iZXJ9IHJlbW92ZVxuICogICBOdW1iZXIgb2YgaXRlbXMgdG8gcmVtb3ZlLlxuICogQHBhcmFtIHtBcnJheTxUPn0gaXRlbXNcbiAqICAgSXRlbXMgdG8gaW5qZWN0IGludG8gYGxpc3RgLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UobGlzdCwgc3RhcnQsIHJlbW92ZSwgaXRlbXMpIHtcbiAgY29uc3QgZW5kID0gbGlzdC5sZW5ndGhcbiAgbGV0IGNodW5rU3RhcnQgPSAwXG4gIC8qKiBAdHlwZSB7QXJyYXk8dW5rbm93bj59ICovXG4gIGxldCBwYXJhbWV0ZXJzXG5cbiAgLy8gTWFrZSBzdGFydCBiZXR3ZWVuIHplcm8gYW5kIGBlbmRgIChpbmNsdWRlZCkuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGVuZCA/IDAgOiBlbmQgKyBzdGFydFxuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gc3RhcnQgPiBlbmQgPyBlbmQgOiBzdGFydFxuICB9XG4gIHJlbW92ZSA9IHJlbW92ZSA+IDAgPyByZW1vdmUgOiAwXG5cbiAgLy8gTm8gbmVlZCB0byBjaHVuayB0aGUgaXRlbXMgaWYgdGhlcmVcdTIwMTlzIG9ubHkgYSBjb3VwbGUgKDEwaykgaXRlbXMuXG4gIGlmIChpdGVtcy5sZW5ndGggPCAxMDAwMCkge1xuICAgIHBhcmFtZXRlcnMgPSBBcnJheS5mcm9tKGl0ZW1zKVxuICAgIHBhcmFtZXRlcnMudW5zaGlmdChzdGFydCwgcmVtb3ZlKVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSHVzaCwgaXRcdTIwMTlzIGZpbmUuXG4gICAgbGlzdC5zcGxpY2UoLi4ucGFyYW1ldGVycylcbiAgfSBlbHNlIHtcbiAgICAvLyBEZWxldGUgYHJlbW92ZWAgaXRlbXMgc3RhcnRpbmcgZnJvbSBgc3RhcnRgXG4gICAgaWYgKHJlbW92ZSkgbGlzdC5zcGxpY2Uoc3RhcnQsIHJlbW92ZSlcblxuICAgIC8vIEluc2VydCB0aGUgaXRlbXMgaW4gY2h1bmtzIHRvIG5vdCBjYXVzZSBzdGFjayBvdmVyZmxvd3MuXG4gICAgd2hpbGUgKGNodW5rU3RhcnQgPCBpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtZXRlcnMgPSBpdGVtcy5zbGljZShjaHVua1N0YXJ0LCBjaHVua1N0YXJ0ICsgMTAwMDApXG4gICAgICBwYXJhbWV0ZXJzLnVuc2hpZnQoc3RhcnQsIDApXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEh1c2gsIGl0XHUyMDE5cyBmaW5lLlxuICAgICAgbGlzdC5zcGxpY2UoLi4ucGFyYW1ldGVycylcbiAgICAgIGNodW5rU3RhcnQgKz0gMTAwMDBcbiAgICAgIHN0YXJ0ICs9IDEwMDAwXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBwZW5kIGBpdGVtc2AgKGFuIGFycmF5KSBhdCB0aGUgZW5kIG9mIGBsaXN0YCAoYW5vdGhlciBhcnJheSkuXG4gKiBXaGVuIGBsaXN0YCB3YXMgZW1wdHksIHJldHVybnMgYGl0ZW1zYCBpbnN0ZWFkLlxuICpcbiAqIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWxseSBleHBlbnNpdmUgb3BlcmF0aW9uIHdoZW4gYGxpc3RgIGlzIGVtcHR5LFxuICogYW5kIGFkZHMgaXRlbXMgaW4gYmF0Y2hlcyB0byBwcmV2ZW50IFY4IGZyb20gaGFuZ2luZy5cbiAqXG4gKiBAdGVtcGxhdGUge3Vua25vd259IFRcbiAqICAgSXRlbSB0eXBlLlxuICogQHBhcmFtIHtBcnJheTxUPn0gbGlzdFxuICogICBMaXN0IHRvIG9wZXJhdGUgb24uXG4gKiBAcGFyYW0ge0FycmF5PFQ+fSBpdGVtc1xuICogICBJdGVtcyB0byBhZGQgdG8gYGxpc3RgLlxuICogQHJldHVybnMge0FycmF5PFQ+fVxuICogICBFaXRoZXIgYGxpc3RgIG9yIGBpdGVtc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoKGxpc3QsIGl0ZW1zKSB7XG4gIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICBzcGxpY2UobGlzdCwgbGlzdC5sZW5ndGgsIDAsIGl0ZW1zKVxuICAgIHJldHVybiBsaXN0XG4gIH1cbiAgcmV0dXJuIGl0ZW1zXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkV4dGVuc2lvbn0gRXh0ZW5zaW9uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkhhbmRsZXN9IEhhbmRsZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSHRtbEV4dGVuc2lvbn0gSHRtbEV4dGVuc2lvblxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ob3JtYWxpemVkRXh0ZW5zaW9ufSBOb3JtYWxpemVkRXh0ZW5zaW9uXG4gKi9cblxuaW1wb3J0IHtzcGxpY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNodW5rZWQnXG5cbmNvbnN0IGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHlcblxuLyoqXG4gKiBDb21iaW5lIG11bHRpcGxlIHN5bnRheCBleHRlbnNpb25zIGludG8gb25lLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8RXh0ZW5zaW9uPn0gZXh0ZW5zaW9uc1xuICogICBMaXN0IG9mIHN5bnRheCBleHRlbnNpb25zLlxuICogQHJldHVybnMge05vcm1hbGl6ZWRFeHRlbnNpb259XG4gKiAgIEEgc2luZ2xlIGNvbWJpbmVkIGV4dGVuc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVFeHRlbnNpb25zKGV4dGVuc2lvbnMpIHtcbiAgLyoqIEB0eXBlIHtOb3JtYWxpemVkRXh0ZW5zaW9ufSAqL1xuICBjb25zdCBhbGwgPSB7fVxuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgZXh0ZW5zaW9ucy5sZW5ndGgpIHtcbiAgICBzeW50YXhFeHRlbnNpb24oYWxsLCBleHRlbnNpb25zW2luZGV4XSlcbiAgfVxuXG4gIHJldHVybiBhbGxcbn1cblxuLyoqXG4gKiBNZXJnZSBgZXh0ZW5zaW9uYCBpbnRvIGBhbGxgLlxuICpcbiAqIEBwYXJhbSB7Tm9ybWFsaXplZEV4dGVuc2lvbn0gYWxsXG4gKiAgIEV4dGVuc2lvbiB0byBtZXJnZSBpbnRvLlxuICogQHBhcmFtIHtFeHRlbnNpb259IGV4dGVuc2lvblxuICogICBFeHRlbnNpb24gdG8gbWVyZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gc3ludGF4RXh0ZW5zaW9uKGFsbCwgZXh0ZW5zaW9uKSB7XG4gIC8qKiBAdHlwZSB7a2V5b2YgRXh0ZW5zaW9ufSAqL1xuICBsZXQgaG9va1xuXG4gIGZvciAoaG9vayBpbiBleHRlbnNpb24pIHtcbiAgICBjb25zdCBtYXliZSA9IGhhc093blByb3BlcnR5LmNhbGwoYWxsLCBob29rKSA/IGFsbFtob29rXSA6IHVuZGVmaW5lZFxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovXG4gICAgY29uc3QgbGVmdCA9IG1heWJlIHx8IChhbGxbaG9va10gPSB7fSlcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkfSAqL1xuICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uW2hvb2tdXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IGNvZGVcblxuICAgIGlmIChyaWdodCkge1xuICAgICAgZm9yIChjb2RlIGluIHJpZ2h0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChsZWZ0LCBjb2RlKSkgbGVmdFtjb2RlXSA9IFtdXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmlnaHRbY29kZV1cbiAgICAgICAgY29uc3RydWN0cyhcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIExvb2tzIGxpa2UgYSBsaXN0LlxuICAgICAgICAgIGxlZnRbY29kZV0sXG4gICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID8gW3ZhbHVlXSA6IFtdXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSBgbGlzdGAgaW50byBgZXhpc3RpbmdgIChib3RoIGxpc3RzIG9mIGNvbnN0cnVjdHMpLlxuICogTXV0YXRlcyBgZXhpc3RpbmdgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8dW5rbm93bj59IGV4aXN0aW5nXG4gKiBAcGFyYW0ge0FycmF5PHVua25vd24+fSBsaXN0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0cyhleGlzdGluZywgbGlzdCkge1xuICBsZXQgaW5kZXggPSAtMVxuICAvKiogQHR5cGUge0FycmF5PHVua25vd24+fSAqL1xuICBjb25zdCBiZWZvcmUgPSBbXVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGlzdC5sZW5ndGgpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIExvb2tzIGxpa2UgYW4gb2JqZWN0LlxuICAgIDsobGlzdFtpbmRleF0uYWRkID09PSAnYWZ0ZXInID8gZXhpc3RpbmcgOiBiZWZvcmUpLnB1c2gobGlzdFtpbmRleF0pXG4gIH1cblxuICBzcGxpY2UoZXhpc3RpbmcsIDAsIDAsIGJlZm9yZSlcbn1cblxuLyoqXG4gKiBDb21iaW5lIG11bHRpcGxlIEhUTUwgZXh0ZW5zaW9ucyBpbnRvIG9uZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PEh0bWxFeHRlbnNpb24+fSBodG1sRXh0ZW5zaW9uc1xuICogICBMaXN0IG9mIEhUTUwgZXh0ZW5zaW9ucy5cbiAqIEByZXR1cm5zIHtIdG1sRXh0ZW5zaW9ufVxuICogICBBIHNpbmdsZSBjb21iaW5lZCBIVE1MIGV4dGVuc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVIdG1sRXh0ZW5zaW9ucyhodG1sRXh0ZW5zaW9ucykge1xuICAvKiogQHR5cGUge0h0bWxFeHRlbnNpb259ICovXG4gIGNvbnN0IGhhbmRsZXJzID0ge31cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IGh0bWxFeHRlbnNpb25zLmxlbmd0aCkge1xuICAgIGh0bWxFeHRlbnNpb24oaGFuZGxlcnMsIGh0bWxFeHRlbnNpb25zW2luZGV4XSlcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVyc1xufVxuXG4vKipcbiAqIE1lcmdlIGBleHRlbnNpb25gIGludG8gYGFsbGAuXG4gKlxuICogQHBhcmFtIHtIdG1sRXh0ZW5zaW9ufSBhbGxcbiAqICAgRXh0ZW5zaW9uIHRvIG1lcmdlIGludG8uXG4gKiBAcGFyYW0ge0h0bWxFeHRlbnNpb259IGV4dGVuc2lvblxuICogICBFeHRlbnNpb24gdG8gbWVyZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gaHRtbEV4dGVuc2lvbihhbGwsIGV4dGVuc2lvbikge1xuICAvKiogQHR5cGUge2tleW9mIEh0bWxFeHRlbnNpb259ICovXG4gIGxldCBob29rXG5cbiAgZm9yIChob29rIGluIGV4dGVuc2lvbikge1xuICAgIGNvbnN0IG1heWJlID0gaGFzT3duUHJvcGVydHkuY2FsbChhbGwsIGhvb2spID8gYWxsW2hvb2tdIDogdW5kZWZpbmVkXG4gICAgY29uc3QgbGVmdCA9IG1heWJlIHx8IChhbGxbaG9va10gPSB7fSlcbiAgICBjb25zdCByaWdodCA9IGV4dGVuc2lvbltob29rXVxuICAgIC8qKiBAdHlwZSB7a2V5b2YgSGFuZGxlc30gKi9cbiAgICBsZXQgdHlwZVxuXG4gICAgaWYgKHJpZ2h0KSB7XG4gICAgICBmb3IgKHR5cGUgaW4gcmlnaHQpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhc3N1bWUgZG9jdW1lbnQgdnMgcmVndWxhciBoYW5kbGVyIGFyZSBtYW5hZ2VkIGNvcnJlY3RseS5cbiAgICAgICAgbGVmdFt0eXBlXSA9IHJpZ2h0W3R5cGVdXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiLy8gVGhpcyBtb2R1bGUgaXMgZ2VuZXJhdGVkIGJ5IGBzY3JpcHQvYC5cbi8vXG4vLyBDb21tb25NYXJrIGhhbmRsZXMgYXR0ZW50aW9uIChlbXBoYXNpcywgc3Ryb25nKSBtYXJrZXJzIGJhc2VkIG9uIHdoYXQgY29tZXNcbi8vIGJlZm9yZSBvciBhZnRlciB0aGVtLlxuLy8gT25lIHN1Y2ggZGlmZmVyZW5jZSBpcyBpZiB0aG9zZSBjaGFyYWN0ZXJzIGFyZSBVbmljb2RlIHB1bmN0dWF0aW9uLlxuLy8gVGhpcyBzY3JpcHQgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIFVuaWNvZGUgZGF0YS5cblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIGEgdW5pY29kZSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCB1bmljb2RlUHVuY3R1YXRpb25SZWdleCA9XG4gIC9bIS1cXC86LUBcXFstYFxcey1+XFx4QTFcXHhBN1xceEFCXFx4QjZcXHhCN1xceEJCXFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNThBXFx1MDVCRVxcdTA1QzBcXHUwNUMzXFx1MDVDNlxcdTA1RjNcXHUwNUY0XFx1MDYwOVxcdTA2MEFcXHUwNjBDXFx1MDYwRFxcdTA2MUJcXHUwNjFELVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTA5RkRcXHUwQTc2XFx1MEFGMFxcdTBDNzdcXHUwQzg0XFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCN0RcXHUxQjdFXFx1MUJGQy1cXHUxQkZGXFx1MUMzQi1cXHUxQzNGXFx1MUM3RVxcdTFDN0ZcXHUxQ0MwLVxcdTFDQzdcXHUxQ0QzXFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDQzXFx1MjA0NS1cXHUyMDUxXFx1MjA1My1cXHUyMDVFXFx1MjA3RFxcdTIwN0VcXHUyMDhEXFx1MjA4RVxcdTIzMDgtXFx1MjMwQlxcdTIzMjlcXHUyMzJBXFx1Mjc2OC1cXHUyNzc1XFx1MjdDNVxcdTI3QzZcXHUyN0U2LVxcdTI3RUZcXHUyOTgzLVxcdTI5OThcXHUyOUQ4LVxcdTI5REJcXHUyOUZDXFx1MjlGRFxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDAtXFx1MkUyRVxcdTJFMzAtXFx1MkU0RlxcdTJFNTItXFx1MkU1RFxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdL1xuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db2RlfSBDb2RlXG4gKi9cblxuaW1wb3J0IHt1bmljb2RlUHVuY3R1YXRpb25SZWdleH0gZnJvbSAnLi9saWIvdW5pY29kZS1wdW5jdHVhdGlvbi1yZWdleC5qcydcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZSByZXByZXNlbnRzIGFuIEFTQ0lJIGFscGhhIChgYWAgdGhyb3VnaCBgemAsXG4gKiBjYXNlIGluc2Vuc2l0aXZlKS5cbiAqXG4gKiBBbiAqKkFTQ0lJIGFscGhhKiogaXMgYW4gQVNDSUkgdXBwZXIgYWxwaGEgb3IgQVNDSUkgbG93ZXIgYWxwaGEuXG4gKlxuICogQW4gKipBU0NJSSB1cHBlciBhbHBoYSoqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgVSswMDQxIChgQWApXG4gKiB0byBVKzAwNUEgKGBaYCkuXG4gKlxuICogQW4gKipBU0NJSSBsb3dlciBhbHBoYSoqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgVSswMDYxIChgYWApXG4gKiB0byBVKzAwN0EgKGB6YCkuXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzY2lpQWxwaGEgPSByZWdleENoZWNrKC9bQS1aYS16XS8pXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgcmVwcmVzZW50cyBhbiBBU0NJSSBhbHBoYW51bWVyaWMgKGBhYFxuICogdGhyb3VnaCBgemAsIGNhc2UgaW5zZW5zaXRpdmUsIG9yIGAwYCB0aHJvdWdoIGA5YCkuXG4gKlxuICogQW4gKipBU0NJSSBhbHBoYW51bWVyaWMqKiBpcyBhbiBBU0NJSSBkaWdpdCAoc2VlIGBhc2NpaURpZ2l0YCkgb3IgQVNDSUkgYWxwaGFcbiAqIChzZWUgYGFzY2lpQWxwaGFgKS5cbiAqXG4gKiBAcGFyYW0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnNcbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgYXNjaWlBbHBoYW51bWVyaWMgPSByZWdleENoZWNrKC9bXFxkQS1aYS16XS8pXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgcmVwcmVzZW50cyBhbiBBU0NJSSBhdGV4dC5cbiAqXG4gKiBhdGV4dCBpcyBhbiBBU0NJSSBhbHBoYW51bWVyaWMgKHNlZSBgYXNjaWlBbHBoYW51bWVyaWNgKSwgb3IgYSBjaGFyYWN0ZXIgaW5cbiAqIHRoZSBpbmNsdXNpdmUgcmFuZ2VzIFUrMDAyMyBOVU1CRVIgU0lHTiAoYCNgKSB0byBVKzAwMjcgQVBPU1RST1BIRSAoYCdgKSxcbiAqIFUrMDAyQSBBU1RFUklTSyAoYCpgKSwgVSswMDJCIFBMVVMgU0lHTiAoYCtgKSwgVSswMDJEIERBU0ggKGAtYCksIFUrMDAyRlxuICogU0xBU0ggKGAvYCksIFUrMDAzRCBFUVVBTFMgVE8gKGA9YCksIFUrMDAzRiBRVUVTVElPTiBNQVJLIChgP2ApLCBVKzAwNUVcbiAqIENBUkVUIChgXmApIHRvIFUrMDA2MCBHUkFWRSBBQ0NFTlQgKGBgIGAgYGApLCBvciBVKzAwN0IgTEVGVCBDVVJMWSBCUkFDRVxuICogKGB7YCkgdG8gVSswMDdFIFRJTERFIChgfmApLlxuICpcbiAqIFNlZTpcbiAqICoqXFxbUkZDNTMyMl0qKjpcbiAqIFtJbnRlcm5ldCBNZXNzYWdlIEZvcm1hdF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUzMjIpLlxuICogUC4gUmVzbmljay5cbiAqIElFVEYuXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzY2lpQXRleHQgPSByZWdleENoZWNrKC9bIy0nKitcXC0tOT0/QS1aXi1+XS8pXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGNoYXJhY3RlciBjb2RlIGlzIGFuIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyLlxuICpcbiAqIEFuICoqQVNDSUkgY29udHJvbCoqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgVSswMDAwIE5VTEwgKE5VTClcbiAqIHRvIFUrMDAxRiAoVVMpLCBvciBVKzAwN0YgKERFTCkuXG4gKlxuICogQHBhcmFtIHtDb2RlfSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNjaWlDb250cm9sKGNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICAvLyBTcGVjaWFsIHdoaXRlc3BhY2UgY29kZXMgKHdoaWNoIGhhdmUgbmVnYXRpdmUgdmFsdWVzKSwgQzAgYW5kIENvbnRyb2xcbiAgICAvLyBjaGFyYWN0ZXIgREVMXG4gICAgY29kZSAhPT0gbnVsbCAmJiAoY29kZSA8IDMyIHx8IGNvZGUgPT09IDEyNylcbiAgKVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb2RlIHJlcHJlc2VudHMgYW4gQVNDSUkgZGlnaXQgKGAwYCB0aHJvdWdoIGA5YCkuXG4gKlxuICogQW4gKipBU0NJSSBkaWdpdCoqIGlzIGEgY2hhcmFjdGVyIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UgVSswMDMwIChgMGApIHRvXG4gKiBVKzAwMzkgKGA5YCkuXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzY2lpRGlnaXQgPSByZWdleENoZWNrKC9cXGQvKVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjb2RlIHJlcHJlc2VudHMgYW4gQVNDSUkgaGV4IGRpZ2l0IChgYWAgdGhyb3VnaFxuICogYGZgLCBjYXNlIGluc2Vuc2l0aXZlLCBvciBgMGAgdGhyb3VnaCBgOWApLlxuICpcbiAqIEFuICoqQVNDSUkgaGV4IGRpZ2l0KiogaXMgYW4gQVNDSUkgZGlnaXQgKHNlZSBgYXNjaWlEaWdpdGApLCBBU0NJSSB1cHBlciBoZXhcbiAqIGRpZ2l0LCBvciBhbiBBU0NJSSBsb3dlciBoZXggZGlnaXQuXG4gKlxuICogQW4gKipBU0NJSSB1cHBlciBoZXggZGlnaXQqKiBpcyBhIGNoYXJhY3RlciBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlIFUrMDA0MVxuICogKGBBYCkgdG8gVSswMDQ2IChgRmApLlxuICpcbiAqIEFuICoqQVNDSUkgbG93ZXIgaGV4IGRpZ2l0KiogaXMgYSBjaGFyYWN0ZXIgaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBVKzAwNjFcbiAqIChgYWApIHRvIFUrMDA2NiAoYGZgKS5cbiAqXG4gKiBAcGFyYW0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnNcbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgYXNjaWlIZXhEaWdpdCA9IHJlZ2V4Q2hlY2soL1tcXGRBLUZhLWZdLylcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZSByZXByZXNlbnRzIEFTQ0lJIHB1bmN0dWF0aW9uLlxuICpcbiAqIEFuICoqQVNDSUkgcHVuY3R1YXRpb24qKiBpcyBhIGNoYXJhY3RlciBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlcyBVKzAwMjFcbiAqIEVYQ0xBTUFUSU9OIE1BUksgKGAhYCkgdG8gVSswMDJGIFNMQVNIIChgL2ApLCBVKzAwM0EgQ09MT04gKGA6YCkgdG8gVSswMDQwIEFUXG4gKiBTSUdOIChgQGApLCBVKzAwNUIgTEVGVCBTUVVBUkUgQlJBQ0tFVCAoYFtgKSB0byBVKzAwNjAgR1JBVkUgQUNDRU5UXG4gKiAoYGAgYCBgYCksIG9yIFUrMDA3QiBMRUZUIENVUkxZIEJSQUNFIChge2ApIHRvIFUrMDA3RSBUSUxERSAoYH5gKS5cbiAqXG4gKiBAcGFyYW0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnNcbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgY29uc3QgYXNjaWlQdW5jdHVhdGlvbiA9IHJlZ2V4Q2hlY2soL1shLS86LUBbLWB7LX5dLylcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgY2hhcmFjdGVyIGNvZGUgaXMgYSBtYXJrZG93biBsaW5lIGVuZGluZy5cbiAqXG4gKiBBICoqbWFya2Rvd24gbGluZSBlbmRpbmcqKiBpcyB0aGUgdmlydHVhbCBjaGFyYWN0ZXJzIE0tMDAwMyBDQVJSSUFHRSBSRVRVUk5cbiAqIExJTkUgRkVFRCAoQ1JMRiksIE0tMDAwNCBMSU5FIEZFRUQgKExGKSBhbmQgTS0wMDA1IENBUlJJQUdFIFJFVFVSTiAoQ1IpLlxuICpcbiAqIEluIG1pY3JvbWFyaywgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgVSswMDBBIExJTkUgRkVFRCAoTEYpIGFuZCBVKzAwMEQgQ0FSUklBR0VcbiAqIFJFVFVSTiAoQ1IpIGFyZSByZXBsYWNlZCBieSB0aGVzZSB2aXJ0dWFsIGNoYXJhY3RlcnMgZGVwZW5kaW5nIG9uIHdoZXRoZXJcbiAqIHRoZXkgb2NjdXJyZWQgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtDb2RlfSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgIT09IG51bGwgJiYgY29kZSA8IC0yXG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGNoYXJhY3RlciBjb2RlIGlzIGEgbWFya2Rvd24gbGluZSBlbmRpbmcgKHNlZVxuICogYG1hcmtkb3duTGluZUVuZGluZ2ApIG9yIG1hcmtkb3duIHNwYWNlIChzZWUgYG1hcmtkb3duU3BhY2VgKS5cbiAqXG4gKiBAcGFyYW0ge0NvZGV9IGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIGl0IG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgIT09IG51bGwgJiYgKGNvZGUgPCAwIHx8IGNvZGUgPT09IDMyKVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBjaGFyYWN0ZXIgY29kZSBpcyBhIG1hcmtkb3duIHNwYWNlLlxuICpcbiAqIEEgKiptYXJrZG93biBzcGFjZSoqIGlzIHRoZSBjb25jcmV0ZSBjaGFyYWN0ZXIgVSswMDIwIFNQQUNFIChTUCkgYW5kIHRoZVxuICogdmlydHVhbCBjaGFyYWN0ZXJzIE0tMDAwMSBWSVJUVUFMIFNQQUNFIChWUykgYW5kIE0tMDAwMiBIT1JJWk9OVEFMIFRBQiAoSFQpLlxuICpcbiAqIEluIG1pY3JvbWFyaywgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgVSswMDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCkgaXNcbiAqIHJlcGxhY2VkIGJ5IG9uZSBNLTAwMDIgSE9SSVpPTlRBTCBUQUIgKEhUKSBhbmQgYmV0d2VlbiAwIGFuZCAzIE0tMDAwMSBWSVJUVUFMXG4gKiBTUEFDRSAoVlMpIGNoYXJhY3RlcnMsIGRlcGVuZGluZyBvbiB0aGUgY29sdW1uIGF0IHdoaWNoIHRoZSB0YWIgb2NjdXJyZWQuXG4gKlxuICogQHBhcmFtIHtDb2RlfSBjb2RlXG4gKiAgIENvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBpdCBtYXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya2Rvd25TcGFjZShjb2RlKSB7XG4gIHJldHVybiBjb2RlID09PSAtMiB8fCBjb2RlID09PSAtMSB8fCBjb2RlID09PSAzMlxufVxuXG4vLyBTaXplIG5vdGU6IHJlbW92aW5nIEFTQ0lJIGZyb20gdGhlIHJlZ2V4IGFuZCB1c2luZyBgYXNjaWlQdW5jdHVhdGlvbmAgaGVyZVxuLy8gSW4gZmFjdCBhZGRzIHRvIHRoZSBidW5kbGUgc2l6ZS5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgcmVwcmVzZW50cyBVbmljb2RlIHB1bmN0dWF0aW9uLlxuICpcbiAqIEEgKipVbmljb2RlIHB1bmN0dWF0aW9uKiogaXMgYSBjaGFyYWN0ZXIgaW4gdGhlIFVuaWNvZGUgYFBjYCAoUHVuY3R1YXRpb24sXG4gKiBDb25uZWN0b3IpLCBgUGRgIChQdW5jdHVhdGlvbiwgRGFzaCksIGBQZWAgKFB1bmN0dWF0aW9uLCBDbG9zZSksIGBQZmBcbiAqIChQdW5jdHVhdGlvbiwgRmluYWwgcXVvdGUpLCBgUGlgIChQdW5jdHVhdGlvbiwgSW5pdGlhbCBxdW90ZSksIGBQb2BcbiAqIChQdW5jdHVhdGlvbiwgT3RoZXIpLCBvciBgUHNgIChQdW5jdHVhdGlvbiwgT3BlbikgY2F0ZWdvcmllcywgb3IgYW4gQVNDSUlcbiAqIHB1bmN0dWF0aW9uIChzZWUgYGFzY2lpUHVuY3R1YXRpb25gKS5cbiAqXG4gKiBTZWU6XG4gKiAqKlxcW1VOSUNPREVdKio6XG4gKiBbVGhlIFVuaWNvZGUgU3RhbmRhcmRdKGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3ZlcnNpb25zLykuXG4gKiBVbmljb2RlIENvbnNvcnRpdW0uXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaWNvZGVQdW5jdHVhdGlvbiA9IHJlZ2V4Q2hlY2sodW5pY29kZVB1bmN0dWF0aW9uUmVnZXgpXG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGNvZGUgcmVwcmVzZW50cyBVbmljb2RlIHdoaXRlc3BhY2UuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgZG9lcyBoYW5kbGUgbWljcm9tYXJrIHNwZWNpZmljIG1hcmtkb3duIHdoaXRlc3BhY2UgY2hhcmFjdGVycy5cbiAqIFNlZSBgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZWAgdG8gY2hlY2sgdGhhdC5cbiAqXG4gKiBBICoqVW5pY29kZSB3aGl0ZXNwYWNlKiogaXMgYSBjaGFyYWN0ZXIgaW4gdGhlIFVuaWNvZGUgYFpzYCAoU2VwYXJhdG9yLFxuICogU3BhY2UpIGNhdGVnb3J5LCBvciBVKzAwMDkgQ0hBUkFDVEVSIFRBQlVMQVRJT04gKEhUKSwgVSswMDBBIExJTkUgRkVFRCAoTEYpLFxuICogVSswMDBDIChGRiksIG9yIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gKENSKSAoKipcXFtVTklDT0RFXSoqKS5cbiAqXG4gKiBTZWU6XG4gKiAqKlxcW1VOSUNPREVdKio6XG4gKiBbVGhlIFVuaWNvZGUgU3RhbmRhcmRdKGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3ZlcnNpb25zLykuXG4gKiBVbmljb2RlIENvbnNvcnRpdW0uXG4gKlxuICogQHBhcmFtIGNvZGVcbiAqICAgQ29kZS5cbiAqIEByZXR1cm5zXG4gKiAgIFdoZXRoZXIgaXQgbWF0Y2hlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaWNvZGVXaGl0ZXNwYWNlID0gcmVnZXhDaGVjaygvXFxzLylcblxuLyoqXG4gKiBDcmVhdGUgYSBjb2RlIGNoZWNrIGZyb20gYSByZWdleC5cbiAqXG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhcbiAqIEByZXR1cm5zIHsoY29kZTogQ29kZSkgPT4gYm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmVnZXhDaGVjayhyZWdleCkge1xuICByZXR1cm4gY2hlY2tcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGNvZGUgbWF0Y2hlcyB0aGUgYm91bmQgcmVnZXguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICAgKiAgIENoYXJhY3RlciBjb2RlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogICBXaGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZSBtYXRjaGVzIHRoZSBib3VuZCByZWdleC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoZWNrKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZSAhPT0gbnVsbCAmJiByZWdleC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkpXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRWZmZWN0c30gRWZmZWN0c1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5UeXBlfSBUb2tlblR5cGVcbiAqL1xuXG5pbXBvcnQge21hcmtkb3duU3BhY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcblxuLy8gVG8gZG86IGltcGxlbWVudCBgc3BhY2VPclRhYmAsIGBzcGFjZU9yVGFiTWluTWF4YCwgYHNwYWNlT3JUYWJXaXRoT3B0aW9uc2AuXG5cbi8qKlxuICogUGFyc2Ugc3BhY2VzIGFuZCB0YWJzLlxuICpcbiAqIFRoZXJlIGlzIG5vIGBub2tgIHBhcmFtZXRlcjpcbiAqXG4gKiAqICAgc3BhY2VzIGluIG1hcmtkb3duIGFyZSBvZnRlbiBvcHRpb25hbCwgaW4gd2hpY2ggY2FzZSB0aGlzIGZhY3RvcnkgY2FuIGJlXG4gKiAgICAgdXNlZCBhbmQgYG9rYCB3aWxsIGJlIHN3aXRjaGVkIHRvIHdoZXRoZXIgc3BhY2VzIHdlcmUgZm91bmQgb3Igbm90XG4gKiAqICAgb25lIGxpbmUgZW5kaW5nIG9yIHNwYWNlIGNhbiBiZSBkZXRlY3RlZCB3aXRoIGBtYXJrZG93blNwYWNlKGNvZGUpYCByaWdodFxuICogICAgIGJlZm9yZSB1c2luZyBgZmFjdG9yeVNwYWNlYFxuICpcbiAqICMjIyMjIyBFeGFtcGxlc1xuICpcbiAqIFdoZXJlIGBcdTI0MDlgIHJlcHJlc2VudHMgYSB0YWIgKHBsdXMgaG93IG11Y2ggaXQgZXhwYW5kcykgYW5kIGBcdTI0MjBgIHJlcHJlc2VudHMgYVxuICogc2luZ2xlIHNwYWNlLlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiBcdTI0MDlcbiAqIFx1MjQyMFx1MjQyMFx1MjQyMFx1MjQyMFxuICogXHUyNDA5XHUyNDIwXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0VmZmVjdHN9IGVmZmVjdHNcbiAqICAgQ29udGV4dC5cbiAqIEBwYXJhbSB7U3RhdGV9IG9rXG4gKiAgIFN0YXRlIHN3aXRjaGVkIHRvIHdoZW4gc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSB0eXBlXG4gKiAgIFR5cGUgKGAnIFxcdCdgKS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBbbWF4PUluZmluaXR5XVxuICogICBNYXggKGV4Y2x1c2l2ZSkuXG4gKiBAcmV0dXJuc1xuICogICBTdGFydCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBvaywgdHlwZSwgbWF4KSB7XG4gIGNvbnN0IGxpbWl0ID0gbWF4ID8gbWF4IC0gMSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuICBsZXQgc2l6ZSA9IDBcbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGUpXG4gICAgICByZXR1cm4gcHJlZml4KGNvZGUpXG4gICAgfVxuICAgIHJldHVybiBvayhjb2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gcHJlZml4KGNvZGUpIHtcbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSAmJiBzaXplKysgPCBsaW1pdCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gcHJlZml4XG4gICAgfVxuICAgIGVmZmVjdHMuZXhpdCh0eXBlKVxuICAgIHJldHVybiBvayhjb2RlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkluaXRpYWxDb25zdHJ1Y3R9IEluaXRpYWxDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSW5pdGlhbGl6ZXJ9IEluaXRpYWxpemVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbn0gVG9rZW5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZ30gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuLyoqIEB0eXBlIHtJbml0aWFsQ29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGNvbnRlbnQgPSB7XG4gIHRva2VuaXplOiBpbml0aWFsaXplQ29udGVudFxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7SW5pdGlhbGl6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVDb250ZW50KGVmZmVjdHMpIHtcbiAgY29uc3QgY29udGVudFN0YXJ0ID0gZWZmZWN0cy5hdHRlbXB0KFxuICAgIHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuY29udGVudEluaXRpYWwsXG4gICAgYWZ0ZXJDb250ZW50U3RhcnRDb25zdHJ1Y3QsXG4gICAgcGFyYWdyYXBoSW5pdGlhbFxuICApXG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCBwcmV2aW91c1xuICByZXR1cm4gY29udGVudFN0YXJ0XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gYWZ0ZXJDb250ZW50U3RhcnRDb25zdHJ1Y3QoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nJylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQoJ2xpbmVFbmRpbmcnKVxuICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgY29udGVudFN0YXJ0LCAnbGluZVByZWZpeCcpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBwYXJhZ3JhcGhJbml0aWFsKGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKCdwYXJhZ3JhcGgnKVxuICAgIHJldHVybiBsaW5lU3RhcnQoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGxpbmVTdGFydChjb2RlKSB7XG4gICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmVudGVyKCdjaHVua1RleHQnLCB7XG4gICAgICBjb250ZW50VHlwZTogJ3RleHQnLFxuICAgICAgcHJldmlvdXNcbiAgICB9KVxuICAgIGlmIChwcmV2aW91cykge1xuICAgICAgcHJldmlvdXMubmV4dCA9IHRva2VuXG4gICAgfVxuICAgIHByZXZpb3VzID0gdG9rZW5cbiAgICByZXR1cm4gZGF0YShjb2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gZGF0YShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnY2h1bmtUZXh0JylcbiAgICAgIGVmZmVjdHMuZXhpdCgncGFyYWdyYXBoJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdjaHVua1RleHQnKVxuICAgICAgcmV0dXJuIGxpbmVTdGFydFxuICAgIH1cblxuICAgIC8vIERhdGEuXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db250YWluZXJTdGF0ZX0gQ29udGFpbmVyU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSW5pdGlhbENvbnN0cnVjdH0gSW5pdGlhbENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Jbml0aWFsaXplcn0gSW5pdGlhbGl6ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuUG9pbnR9IFBvaW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbn0gVG9rZW5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtbQ29uc3RydWN0LCBDb250YWluZXJTdGF0ZV19IFN0YWNrSXRlbVxuICovXG5cbmltcG9ydCB7ZmFjdG9yeVNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSdcbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge3NwbGljZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2h1bmtlZCdcbi8qKiBAdHlwZSB7SW5pdGlhbENvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBkb2N1bWVudCA9IHtcbiAgdG9rZW5pemU6IGluaXRpYWxpemVEb2N1bWVudFxufVxuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IGNvbnRhaW5lckNvbnN0cnVjdCA9IHtcbiAgdG9rZW5pemU6IHRva2VuaXplQ29udGFpbmVyXG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtJbml0aWFsaXplcn1cbiAqL1xuZnVuY3Rpb24gaW5pdGlhbGl6ZURvY3VtZW50KGVmZmVjdHMpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLyoqIEB0eXBlIHtBcnJheTxTdGFja0l0ZW0+fSAqL1xuICBjb25zdCBzdGFjayA9IFtdXG4gIGxldCBjb250aW51ZWQgPSAwXG4gIC8qKiBAdHlwZSB7VG9rZW5pemVDb250ZXh0IHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgY2hpbGRGbG93XG4gIC8qKiBAdHlwZSB7VG9rZW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBjaGlsZFRva2VuXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgbGluZVN0YXJ0T2Zmc2V0XG4gIHJldHVybiBzdGFydFxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAvLyBGaXJzdCB3ZSBpdGVyYXRlIHRocm91Z2ggdGhlIG9wZW4gYmxvY2tzLCBzdGFydGluZyB3aXRoIHRoZSByb290XG4gICAgLy8gZG9jdW1lbnQsIGFuZCBkZXNjZW5kaW5nIHRocm91Z2ggbGFzdCBjaGlsZHJlbiBkb3duIHRvIHRoZSBsYXN0IG9wZW5cbiAgICAvLyBibG9jay5cbiAgICAvLyBFYWNoIGJsb2NrIGltcG9zZXMgYSBjb25kaXRpb24gdGhhdCB0aGUgbGluZSBtdXN0IHNhdGlzZnkgaWYgdGhlIGJsb2NrIGlzXG4gICAgLy8gdG8gcmVtYWluIG9wZW4uXG4gICAgLy8gRm9yIGV4YW1wbGUsIGEgYmxvY2sgcXVvdGUgcmVxdWlyZXMgYSBgPmAgY2hhcmFjdGVyLlxuICAgIC8vIEEgcGFyYWdyYXBoIHJlcXVpcmVzIGEgbm9uLWJsYW5rIGxpbmUuXG4gICAgLy8gSW4gdGhpcyBwaGFzZSB3ZSBtYXkgbWF0Y2ggYWxsIG9yIGp1c3Qgc29tZSBvZiB0aGUgb3BlbiBibG9ja3MuXG4gICAgLy8gQnV0IHdlIGNhbm5vdCBjbG9zZSB1bm1hdGNoZWQgYmxvY2tzIHlldCwgYmVjYXVzZSB3ZSBtYXkgaGF2ZSBhIGxhenlcbiAgICAvLyBjb250aW51YXRpb24gbGluZS5cbiAgICBpZiAoY29udGludWVkIDwgc3RhY2subGVuZ3RoKSB7XG4gICAgICBjb25zdCBpdGVtID0gc3RhY2tbY29udGludWVkXVxuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZSA9IGl0ZW1bMV1cbiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoXG4gICAgICAgIGl0ZW1bMF0uY29udGludWF0aW9uLFxuICAgICAgICBkb2N1bWVudENvbnRpbnVlLFxuICAgICAgICBjaGVja05ld0NvbnRhaW5lcnNcbiAgICAgICkoY29kZSlcbiAgICB9XG5cbiAgICAvLyBEb25lLlxuICAgIHJldHVybiBjaGVja05ld0NvbnRhaW5lcnMoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGRvY3VtZW50Q29udGludWUoY29kZSkge1xuICAgIGNvbnRpbnVlZCsrXG5cbiAgICAvLyBOb3RlOiB0aGlzIGZpZWxkIGlzIGNhbGxlZCBgX2Nsb3NlRmxvd2AgYnV0IGl0IGFsc28gY2xvc2VzIGNvbnRhaW5lcnMuXG4gICAgLy8gUGVyaGFwcyBhIGdvb2QgaWRlYSB0byByZW5hbWUgaXQgYnV0IGl0XHUyMDE5cyBhbHJlYWR5IHVzZWQgaW4gdGhlIHdpbGQgYnlcbiAgICAvLyBleHRlbnNpb25zLlxuICAgIGlmIChzZWxmLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cpIHtcbiAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyA9IHVuZGVmaW5lZFxuICAgICAgaWYgKGNoaWxkRmxvdykge1xuICAgICAgICBjbG9zZUZsb3coKVxuICAgICAgfVxuXG4gICAgICAvLyBOb3RlOiB0aGlzIGFsZ29yaXRobSBmb3IgbW92aW5nIGV2ZW50cyBhcm91bmQgaXMgc2ltaWxhciB0byB0aGVcbiAgICAgIC8vIGFsZ29yaXRobSB3aGVuIGRlYWxpbmcgd2l0aCBsYXp5IGxpbmVzIGluIGB3cml0ZVRvQ2hpbGRgLlxuICAgICAgY29uc3QgaW5kZXhCZWZvcmVFeGl0cyA9IHNlbGYuZXZlbnRzLmxlbmd0aFxuICAgICAgbGV0IGluZGV4QmVmb3JlRmxvdyA9IGluZGV4QmVmb3JlRXhpdHNcbiAgICAgIC8qKiBAdHlwZSB7UG9pbnQgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcG9pbnRcblxuICAgICAgLy8gRmluZCB0aGUgZmxvdyBjaHVuay5cbiAgICAgIHdoaWxlIChpbmRleEJlZm9yZUZsb3ctLSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVswXSA9PT0gJ2V4aXQnICYmXG4gICAgICAgICAgc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS50eXBlID09PSAnY2h1bmtGbG93J1xuICAgICAgICApIHtcbiAgICAgICAgICBwb2ludCA9IHNlbGYuZXZlbnRzW2luZGV4QmVmb3JlRmxvd11bMV0uZW5kXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKVxuXG4gICAgICAvLyBGaXggcG9zaXRpb25zLlxuICAgICAgbGV0IGluZGV4ID0gaW5kZXhCZWZvcmVFeGl0c1xuICAgICAgd2hpbGUgKGluZGV4IDwgc2VsZi5ldmVudHMubGVuZ3RoKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzW2luZGV4XVsxXS5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBwb2ludClcbiAgICAgICAgaW5kZXgrK1xuICAgICAgfVxuXG4gICAgICAvLyBJbmplY3QgdGhlIGV4aXRzIGVhcmxpZXIgKHRoZXlcdTIwMTlyZSBzdGlsbCBhbHNvIGF0IHRoZSBlbmQpLlxuICAgICAgc3BsaWNlKFxuICAgICAgICBzZWxmLmV2ZW50cyxcbiAgICAgICAgaW5kZXhCZWZvcmVGbG93ICsgMSxcbiAgICAgICAgMCxcbiAgICAgICAgc2VsZi5ldmVudHMuc2xpY2UoaW5kZXhCZWZvcmVFeGl0cylcbiAgICAgIClcblxuICAgICAgLy8gRGlzY2FyZCB0aGUgZHVwbGljYXRlIGV4aXRzLlxuICAgICAgc2VsZi5ldmVudHMubGVuZ3RoID0gaW5kZXhcbiAgICAgIHJldHVybiBjaGVja05ld0NvbnRhaW5lcnMoY29kZSlcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0KGNvZGUpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBjaGVja05ld0NvbnRhaW5lcnMoY29kZSkge1xuICAgIC8vIE5leHQsIGFmdGVyIGNvbnN1bWluZyB0aGUgY29udGludWF0aW9uIG1hcmtlcnMgZm9yIGV4aXN0aW5nIGJsb2Nrcywgd2VcbiAgICAvLyBsb29rIGZvciBuZXcgYmxvY2sgc3RhcnRzIChlLmcuIGA+YCBmb3IgYSBibG9jayBxdW90ZSkuXG4gICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgbmV3IGJsb2NrIHN0YXJ0LCB3ZSBjbG9zZSBhbnkgYmxvY2tzIHVubWF0Y2hlZCBpblxuICAgIC8vIHN0ZXAgMSBiZWZvcmUgY3JlYXRpbmcgdGhlIG5ldyBibG9jayBhcyBhIGNoaWxkIG9mIHRoZSBsYXN0IG1hdGNoZWRcbiAgICAvLyBibG9jay5cbiAgICBpZiAoY29udGludWVkID09PSBzdGFjay5sZW5ndGgpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gYGNoZWNrYCB3aGV0aGVyIHRoZXJlXHUyMDE5cyBhIGNvbnRhaW5lciwgb2YgYGV4aXRDb250YWluZXJzYFxuICAgICAgLy8gd291bGQgYmUgbW9vdC5cbiAgICAgIC8vIFdlIGNhbiBpbnN0ZWFkIGltbWVkaWF0ZWx5IGBhdHRlbXB0YCB0byBwYXJzZSBvbmUuXG4gICAgICBpZiAoIWNoaWxkRmxvdykge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnRDb250aW51ZWQoY29kZSlcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgaGF2ZSBjb25jcmV0ZSBjb250ZW50LCBzdWNoIGFzIGJsb2NrIEhUTUwgb3IgZmVuY2VkIGNvZGUsXG4gICAgICAvLyB3ZSBjYW5cdTIwMTl0IGhhdmUgY29udGFpbmVycyBcdTIwMUNwaWVyY2VcdTIwMUQgaW50byB0aGVtLCBzbyB3ZSBjYW4gaW1tZWRpYXRlbHlcbiAgICAgIC8vIHN0YXJ0LlxuICAgICAgaWYgKGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0ICYmIGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0LmNvbmNyZXRlKSB7XG4gICAgICAgIHJldHVybiBmbG93U3RhcnQoY29kZSlcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgZG8gaGF2ZSBmbG93LCBpdCBjb3VsZCBzdGlsbCBiZSBhIGJsYW5rIGxpbmUsXG4gICAgICAvLyBidXQgd2VcdTIwMTlkIGJlIGludGVycnVwdGluZyBpdCB3LyBhIG5ldyBjb250YWluZXIgaWYgdGhlcmVcdTIwMTlzIGEgY3VycmVudFxuICAgICAgLy8gY29uc3RydWN0LlxuICAgICAgLy8gVG8gZG86IG5leHQgbWFqb3I6IHJlbW92ZSBgX2dmbVRhYmxlRHluYW1pY0ludGVycnVwdEhhY2tgIChubyBsb25nZXJcbiAgICAgIC8vIG5lZWRlZCBpbiBtaWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAxLjAuNikuXG4gICAgICBzZWxmLmludGVycnVwdCA9IEJvb2xlYW4oXG4gICAgICAgIGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0ICYmICFjaGlsZEZsb3cuX2dmbVRhYmxlRHluYW1pY0ludGVycnVwdEhhY2tcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBjb250YWluZXIuXG4gICAgc2VsZi5jb250YWluZXJTdGF0ZSA9IHt9XG4gICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soXG4gICAgICBjb250YWluZXJDb25zdHJ1Y3QsXG4gICAgICB0aGVyZUlzQU5ld0NvbnRhaW5lcixcbiAgICAgIHRoZXJlSXNOb05ld0NvbnRhaW5lclxuICAgICkoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHRoZXJlSXNBTmV3Q29udGFpbmVyKGNvZGUpIHtcbiAgICBpZiAoY2hpbGRGbG93KSBjbG9zZUZsb3coKVxuICAgIGV4aXRDb250YWluZXJzKGNvbnRpbnVlZClcbiAgICByZXR1cm4gZG9jdW1lbnRDb250aW51ZWQoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHRoZXJlSXNOb05ld0NvbnRhaW5lcihjb2RlKSB7XG4gICAgc2VsZi5wYXJzZXIubGF6eVtzZWxmLm5vdygpLmxpbmVdID0gY29udGludWVkICE9PSBzdGFjay5sZW5ndGhcbiAgICBsaW5lU3RhcnRPZmZzZXQgPSBzZWxmLm5vdygpLm9mZnNldFxuICAgIHJldHVybiBmbG93U3RhcnQoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGRvY3VtZW50Q29udGludWVkKGNvZGUpIHtcbiAgICAvLyBUcnkgbmV3IGNvbnRhaW5lcnMuXG4gICAgc2VsZi5jb250YWluZXJTdGF0ZSA9IHt9XG4gICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChcbiAgICAgIGNvbnRhaW5lckNvbnN0cnVjdCxcbiAgICAgIGNvbnRhaW5lckNvbnRpbnVlLFxuICAgICAgZmxvd1N0YXJ0XG4gICAgKShjb2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gY29udGFpbmVyQ29udGludWUoY29kZSkge1xuICAgIGNvbnRpbnVlZCsrXG4gICAgc3RhY2sucHVzaChbc2VsZi5jdXJyZW50Q29uc3RydWN0LCBzZWxmLmNvbnRhaW5lclN0YXRlXSlcbiAgICAvLyBUcnkgYW5vdGhlci5cbiAgICByZXR1cm4gZG9jdW1lbnRDb250aW51ZWQoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGZsb3dTdGFydChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgIGlmIChjaGlsZEZsb3cpIGNsb3NlRmxvdygpXG4gICAgICBleGl0Q29udGFpbmVycygwKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2hpbGRGbG93ID0gY2hpbGRGbG93IHx8IHNlbGYucGFyc2VyLmZsb3coc2VsZi5ub3coKSlcbiAgICBlZmZlY3RzLmVudGVyKCdjaHVua0Zsb3cnLCB7XG4gICAgICBjb250ZW50VHlwZTogJ2Zsb3cnLFxuICAgICAgcHJldmlvdXM6IGNoaWxkVG9rZW4sXG4gICAgICBfdG9rZW5pemVyOiBjaGlsZEZsb3dcbiAgICB9KVxuICAgIHJldHVybiBmbG93Q29udGludWUoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGZsb3dDb250aW51ZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgIHdyaXRlVG9DaGlsZChlZmZlY3RzLmV4aXQoJ2NodW5rRmxvdycpLCB0cnVlKVxuICAgICAgZXhpdENvbnRhaW5lcnMoMClcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgd3JpdGVUb0NoaWxkKGVmZmVjdHMuZXhpdCgnY2h1bmtGbG93JykpXG4gICAgICAvLyBHZXQgcmVhZHkgZm9yIHRoZSBuZXh0IGxpbmUuXG4gICAgICBjb250aW51ZWQgPSAwXG4gICAgICBzZWxmLmludGVycnVwdCA9IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIHN0YXJ0XG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBmbG93Q29udGludWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IFtlb2ZdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gd3JpdGVUb0NoaWxkKHRva2VuLCBlb2YpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBzZWxmLnNsaWNlU3RyZWFtKHRva2VuKVxuICAgIGlmIChlb2YpIHN0cmVhbS5wdXNoKG51bGwpXG4gICAgdG9rZW4ucHJldmlvdXMgPSBjaGlsZFRva2VuXG4gICAgaWYgKGNoaWxkVG9rZW4pIGNoaWxkVG9rZW4ubmV4dCA9IHRva2VuXG4gICAgY2hpbGRUb2tlbiA9IHRva2VuXG4gICAgY2hpbGRGbG93LmRlZmluZVNraXAodG9rZW4uc3RhcnQpXG4gICAgY2hpbGRGbG93LndyaXRlKHN0cmVhbSlcblxuICAgIC8vIEFscmlnaHQsIHNvIHdlIGp1c3QgYWRkZWQgYSBsYXp5IGxpbmU6XG4gICAgLy9cbiAgICAvLyBgYGBtYXJrZG93blxuICAgIC8vID4gYVxuICAgIC8vIGIuXG4gICAgLy9cbiAgICAvLyBPcjpcbiAgICAvL1xuICAgIC8vID4gfn5+Y1xuICAgIC8vIGRcbiAgICAvL1xuICAgIC8vIE9yOlxuICAgIC8vXG4gICAgLy8gPiB8IGUgfFxuICAgIC8vIGZcbiAgICAvLyBgYGBcbiAgICAvL1xuICAgIC8vIFRoZSBjb25zdHJ1Y3QgaW4gdGhlIHNlY29uZCBleGFtcGxlIChmZW5jZWQgY29kZSkgZG9lcyBub3QgYWNjZXB0IGxhenlcbiAgICAvLyBsaW5lcywgc28gaXQgbWFya2VkIGl0c2VsZiBhcyBkb25lIGF0IHRoZSBlbmQgb2YgaXRzIGZpcnN0IGxpbmUsIGFuZFxuICAgIC8vIHRoZW4gdGhlIGNvbnRlbnQgY29uc3RydWN0IHBhcnNlcyBgZGAuXG4gICAgLy8gTW9zdCBjb25zdHJ1Y3RzIGluIG1hcmtkb3duIG1hdGNoIG9uIHRoZSBmaXJzdCBsaW5lOiBpZiB0aGUgZmlyc3QgbGluZVxuICAgIC8vIGZvcm1zIGEgY29uc3RydWN0LCBhIG5vbi1sYXp5IGxpbmUgY2FuXHUyMDE5dCBcdTIwMUN1bm1ha2VcdTIwMUQgaXQuXG4gICAgLy9cbiAgICAvLyBUaGUgY29uc3RydWN0IGluIHRoZSB0aGlyZCBleGFtcGxlIGlzIHBvdGVudGlhbGx5IGEgR0ZNIHRhYmxlLCBhbmRcbiAgICAvLyB0aG9zZSBhcmUgKndlaXJkKi5cbiAgICAvLyBJdCAqY291bGQqIGJlIGEgdGFibGUsIGZyb20gdGhlIGZpcnN0IGxpbmUsIGlmIHRoZSBmb2xsb3dpbmcgbGluZVxuICAgIC8vIG1hdGNoZXMgYSBjb25kaXRpb24uXG4gICAgLy8gSW4gdGhpcyBjYXNlLCB0aGF0IHNlY29uZCBsaW5lIGlzIGxhenksIHdoaWNoIFx1MjAxQ3VubWFrZXNcdTIwMUQgdGhlIGZpcnN0IGxpbmVcbiAgICAvLyBhbmQgdHVybnMgdGhlIHdob2xlIGludG8gb25lIGNvbnRlbnQgYmxvY2suXG4gICAgLy9cbiAgICAvLyBXZVx1MjAxOXZlIG5vdyBwYXJzZWQgdGhlIG5vbi1sYXp5IGFuZCB0aGUgbGF6eSBsaW5lLCBhbmQgY2FuIGZpZ3VyZSBvdXRcbiAgICAvLyB3aGV0aGVyIHRoZSBsYXp5IGxpbmUgc3RhcnRlZCBhIG5ldyBmbG93IGJsb2NrLlxuICAgIC8vIElmIGl0IGRpZCwgd2UgZXhpdCB0aGUgY3VycmVudCBjb250YWluZXJzIGJldHdlZW4gdGhlIHR3byBmbG93IGJsb2Nrcy5cbiAgICBpZiAoc2VsZi5wYXJzZXIubGF6eVt0b2tlbi5zdGFydC5saW5lXSkge1xuICAgICAgbGV0IGluZGV4ID0gY2hpbGRGbG93LmV2ZW50cy5sZW5ndGhcbiAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBUaGUgdG9rZW4gc3RhcnRzIGJlZm9yZSB0aGUgbGluZSBlbmRpbmdcdTIwMjZcbiAgICAgICAgICBjaGlsZEZsb3cuZXZlbnRzW2luZGV4XVsxXS5zdGFydC5vZmZzZXQgPCBsaW5lU3RhcnRPZmZzZXQgJiZcbiAgICAgICAgICAvLyBcdTIwMjZhbmQgZWl0aGVyIGlzIG5vdCBlbmRlZCB5ZXRcdTIwMjZcbiAgICAgICAgICAoIWNoaWxkRmxvdy5ldmVudHNbaW5kZXhdWzFdLmVuZCB8fFxuICAgICAgICAgICAgLy8gXHUyMDI2b3IgZW5kcyBhZnRlciBpdC5cbiAgICAgICAgICAgIGNoaWxkRmxvdy5ldmVudHNbaW5kZXhdWzFdLmVuZC5vZmZzZXQgPiBsaW5lU3RhcnRPZmZzZXQpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIEV4aXQ6IHRoZXJlXHUyMDE5cyBzdGlsbCBzb21ldGhpbmcgb3Blbiwgd2hpY2ggbWVhbnMgaXRcdTIwMTlzIGEgbGF6eSBsaW5lXG4gICAgICAgICAgLy8gcGFydCBvZiBzb21ldGhpbmcuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90ZTogdGhpcyBhbGdvcml0aG0gZm9yIG1vdmluZyBldmVudHMgYXJvdW5kIGlzIHNpbWlsYXIgdG8gdGhlXG4gICAgICAvLyBhbGdvcml0aG0gd2hlbiBjbG9zaW5nIGZsb3cgaW4gYGRvY3VtZW50Q29udGludWVgLlxuICAgICAgY29uc3QgaW5kZXhCZWZvcmVFeGl0cyA9IHNlbGYuZXZlbnRzLmxlbmd0aFxuICAgICAgbGV0IGluZGV4QmVmb3JlRmxvdyA9IGluZGV4QmVmb3JlRXhpdHNcbiAgICAgIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgICAgIGxldCBzZWVuXG4gICAgICAvKiogQHR5cGUge1BvaW50IHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHBvaW50XG5cbiAgICAgIC8vIEZpbmQgdGhlIHByZXZpb3VzIGNodW5rICh0aGUgb25lIGJlZm9yZSB0aGUgbGF6eSBsaW5lKS5cbiAgICAgIHdoaWxlIChpbmRleEJlZm9yZUZsb3ctLSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVswXSA9PT0gJ2V4aXQnICYmXG4gICAgICAgICAgc2VsZi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS50eXBlID09PSAnY2h1bmtGbG93J1xuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgICAgcG9pbnQgPSBzZWxmLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzFdLmVuZFxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VlbiA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKVxuXG4gICAgICAvLyBGaXggcG9zaXRpb25zLlxuICAgICAgaW5kZXggPSBpbmRleEJlZm9yZUV4aXRzXG4gICAgICB3aGlsZSAoaW5kZXggPCBzZWxmLmV2ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgc2VsZi5ldmVudHNbaW5kZXhdWzFdLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIHBvaW50KVxuICAgICAgICBpbmRleCsrXG4gICAgICB9XG5cbiAgICAgIC8vIEluamVjdCB0aGUgZXhpdHMgZWFybGllciAodGhleVx1MjAxOXJlIHN0aWxsIGFsc28gYXQgdGhlIGVuZCkuXG4gICAgICBzcGxpY2UoXG4gICAgICAgIHNlbGYuZXZlbnRzLFxuICAgICAgICBpbmRleEJlZm9yZUZsb3cgKyAxLFxuICAgICAgICAwLFxuICAgICAgICBzZWxmLmV2ZW50cy5zbGljZShpbmRleEJlZm9yZUV4aXRzKVxuICAgICAgKVxuXG4gICAgICAvLyBEaXNjYXJkIHRoZSBkdXBsaWNhdGUgZXhpdHMuXG4gICAgICBzZWxmLmV2ZW50cy5sZW5ndGggPSBpbmRleFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIGV4aXRDb250YWluZXJzKHNpemUpIHtcbiAgICBsZXQgaW5kZXggPSBzdGFjay5sZW5ndGhcblxuICAgIC8vIEV4aXQgb3BlbiBjb250YWluZXJzLlxuICAgIHdoaWxlIChpbmRleC0tID4gc2l6ZSkge1xuICAgICAgY29uc3QgZW50cnkgPSBzdGFja1tpbmRleF1cbiAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUgPSBlbnRyeVsxXVxuICAgICAgZW50cnlbMF0uZXhpdC5jYWxsKHNlbGYsIGVmZmVjdHMpXG4gICAgfVxuICAgIHN0YWNrLmxlbmd0aCA9IHNpemVcbiAgfVxuICBmdW5jdGlvbiBjbG9zZUZsb3coKSB7XG4gICAgY2hpbGRGbG93LndyaXRlKFtudWxsXSlcbiAgICBjaGlsZFRva2VuID0gdW5kZWZpbmVkXG4gICAgY2hpbGRGbG93ID0gdW5kZWZpbmVkXG4gICAgc2VsZi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdW5kZWZpbmVkXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVDb250YWluZXIoZWZmZWN0cywgb2ssIG5vaykge1xuICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuXG4gIHJldHVybiBmYWN0b3J5U3BhY2UoXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RzLmF0dGVtcHQodGhpcy5wYXJzZXIuY29uc3RydWN0cy5kb2N1bWVudCwgb2ssIG5vayksXG4gICAgJ2xpbmVQcmVmaXgnLFxuICAgIHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCdjb2RlSW5kZW50ZWQnKSA/IHVuZGVmaW5lZCA6IDRcbiAgKVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db2RlfSBDb2RlXG4gKi9cblxuaW1wb3J0IHtcbiAgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZSxcbiAgdW5pY29kZVB1bmN0dWF0aW9uLFxuICB1bmljb2RlV2hpdGVzcGFjZVxufSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG4vKipcbiAqIENsYXNzaWZ5IHdoZXRoZXIgYSBjb2RlIHJlcHJlc2VudHMgd2hpdGVzcGFjZSwgcHVuY3R1YXRpb24sIG9yIHNvbWV0aGluZ1xuICogZWxzZS5cbiAqXG4gKiBVc2VkIGZvciBhdHRlbnRpb24gKGVtcGhhc2lzLCBzdHJvbmcpLCB3aG9zZSBzZXF1ZW5jZXMgY2FuIG9wZW4gb3IgY2xvc2VcbiAqIGJhc2VkIG9uIHRoZSBjbGFzcyBvZiBzdXJyb3VuZGluZyBjaGFyYWN0ZXJzLlxuICpcbiAqID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBlb2YgKGBudWxsYCkgaXMgc2VlbiBhcyB3aGl0ZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7Q29kZX0gY29kZVxuICogICBDb2RlLlxuICogQHJldHVybnMge3R5cGVvZiBjb25zdGFudHMuY2hhcmFjdGVyR3JvdXBXaGl0ZXNwYWNlIHwgdHlwZW9mIGNvbnN0YW50cy5jaGFyYWN0ZXJHcm91cFB1bmN0dWF0aW9uIHwgdW5kZWZpbmVkfVxuICogICBHcm91cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5Q2hhcmFjdGVyKGNvZGUpIHtcbiAgaWYgKFxuICAgIGNvZGUgPT09IG51bGwgfHxcbiAgICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpIHx8XG4gICAgdW5pY29kZVdoaXRlc3BhY2UoY29kZSlcbiAgKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuICBpZiAodW5pY29kZVB1bmN0dWF0aW9uKGNvZGUpKSB7XG4gICAgcmV0dXJuIDJcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5FdmVudH0gRXZlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuUmVzb2x2ZXJ9IFJlc29sdmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKi9cblxuLyoqXG4gKiBDYWxsIGFsbCBgcmVzb2x2ZUFsbGBzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8e3Jlc29sdmVBbGw/OiBSZXNvbHZlciB8IHVuZGVmaW5lZH0+fSBjb25zdHJ1Y3RzXG4gKiAgIExpc3Qgb2YgY29uc3RydWN0cywgb3B0aW9uYWxseSB3aXRoIGByZXNvbHZlQWxsYHMuXG4gKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gZXZlbnRzXG4gKiAgIExpc3Qgb2YgZXZlbnRzLlxuICogQHBhcmFtIHtUb2tlbml6ZUNvbnRleHR9IGNvbnRleHRcbiAqICAgQ29udGV4dCB1c2VkIGJ5IGB0b2tlbml6ZWAuXG4gKiBAcmV0dXJucyB7QXJyYXk8RXZlbnQ+fVxuICogICBDaGFuZ2VkIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVBbGwoY29uc3RydWN0cywgZXZlbnRzLCBjb250ZXh0KSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8UmVzb2x2ZXI+fSAqL1xuICBjb25zdCBjYWxsZWQgPSBbXVxuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgY29uc3RydWN0cy5sZW5ndGgpIHtcbiAgICBjb25zdCByZXNvbHZlID0gY29uc3RydWN0c1tpbmRleF0ucmVzb2x2ZUFsbFxuXG4gICAgaWYgKHJlc29sdmUgJiYgIWNhbGxlZC5pbmNsdWRlcyhyZXNvbHZlKSkge1xuICAgICAgZXZlbnRzID0gcmVzb2x2ZShldmVudHMsIGNvbnRleHQpXG4gICAgICBjYWxsZWQucHVzaChyZXNvbHZlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBldmVudHNcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5FdmVudH0gRXZlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuUG9pbnR9IFBvaW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlJlc29sdmVyfSBSZXNvbHZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtwdXNoLCBzcGxpY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNodW5rZWQnXG5pbXBvcnQge2NsYXNzaWZ5Q2hhcmFjdGVyfSBmcm9tICdtaWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXInXG5pbXBvcnQge3Jlc29sdmVBbGx9IGZyb20gJ21pY3JvbWFyay11dGlsLXJlc29sdmUtYWxsJ1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgYXR0ZW50aW9uID0ge1xuICBuYW1lOiAnYXR0ZW50aW9uJyxcbiAgdG9rZW5pemU6IHRva2VuaXplQXR0ZW50aW9uLFxuICByZXNvbHZlQWxsOiByZXNvbHZlQWxsQXR0ZW50aW9uXG59XG5cbi8qKlxuICogVGFrZSBhbGwgZXZlbnRzIGFuZCByZXNvbHZlIGF0dGVudGlvbiB0byBlbXBoYXNpcyBvciBzdHJvbmcuXG4gKlxuICogQHR5cGUge1Jlc29sdmVyfVxuICovXG5mdW5jdGlvbiByZXNvbHZlQWxsQXR0ZW50aW9uKGV2ZW50cywgY29udGV4dCkge1xuICBsZXQgaW5kZXggPSAtMVxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IG9wZW5cbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGdyb3VwXG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCB0ZXh0XG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCBvcGVuaW5nU2VxdWVuY2VcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGNsb3NpbmdTZXF1ZW5jZVxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IHVzZVxuICAvKiogQHR5cGUge0FycmF5PEV2ZW50Pn0gKi9cbiAgbGV0IG5leHRFdmVudHNcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBvZmZzZXRcblxuICAvLyBXYWxrIHRocm91Z2ggYWxsIGV2ZW50cy5cbiAgLy9cbiAgLy8gTm90ZTogcGVyZm9ybWFuY2Ugb2YgdGhpcyBpcyBmaW5lIG9uIGFuIG1iIG9mIG5vcm1hbCBtYXJrZG93biwgYnV0IGl0XHUyMDE5c1xuICAvLyBhIGJvdHRsZW5lY2sgZm9yIG1hbGljaW91cyBzdHVmZi5cbiAgd2hpbGUgKCsraW5kZXggPCBldmVudHMubGVuZ3RoKSB7XG4gICAgLy8gRmluZCBhIHRva2VuIHRoYXQgY2FuIGNsb3NlLlxuICAgIGlmIChcbiAgICAgIGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicgJiZcbiAgICAgIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gJ2F0dGVudGlvblNlcXVlbmNlJyAmJlxuICAgICAgZXZlbnRzW2luZGV4XVsxXS5fY2xvc2VcbiAgICApIHtcbiAgICAgIG9wZW4gPSBpbmRleFxuXG4gICAgICAvLyBOb3cgd2FsayBiYWNrIHRvIGZpbmQgYW4gb3BlbmVyLlxuICAgICAgd2hpbGUgKG9wZW4tLSkge1xuICAgICAgICAvLyBGaW5kIGEgdG9rZW4gdGhhdCBjYW4gb3BlbiB0aGUgY2xvc2VyLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgZXZlbnRzW29wZW5dWzBdID09PSAnZXhpdCcgJiZcbiAgICAgICAgICBldmVudHNbb3Blbl1bMV0udHlwZSA9PT0gJ2F0dGVudGlvblNlcXVlbmNlJyAmJlxuICAgICAgICAgIGV2ZW50c1tvcGVuXVsxXS5fb3BlbiAmJlxuICAgICAgICAgIC8vIElmIHRoZSBtYXJrZXJzIGFyZSB0aGUgc2FtZTpcbiAgICAgICAgICBjb250ZXh0LnNsaWNlU2VyaWFsaXplKGV2ZW50c1tvcGVuXVsxXSkuY2hhckNvZGVBdCgwKSA9PT1cbiAgICAgICAgICAgIGNvbnRleHQuc2xpY2VTZXJpYWxpemUoZXZlbnRzW2luZGV4XVsxXSkuY2hhckNvZGVBdCgwKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiB0aGUgb3BlbmluZyBjYW4gY2xvc2Ugb3IgdGhlIGNsb3NpbmcgY2FuIG9wZW4sXG4gICAgICAgICAgLy8gYW5kIHRoZSBjbG9zZSBzaXplICppcyBub3QqIGEgbXVsdGlwbGUgb2YgdGhyZWUsXG4gICAgICAgICAgLy8gYnV0IHRoZSBzdW0gb2YgdGhlIG9wZW5pbmcgYW5kIGNsb3Npbmcgc2l6ZSAqaXMqIG11bHRpcGxlIG9mIHRocmVlLFxuICAgICAgICAgIC8vIHRoZW4gZG9uXHUyMDE5dCBtYXRjaC5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZXZlbnRzW29wZW5dWzFdLl9jbG9zZSB8fCBldmVudHNbaW5kZXhdWzFdLl9vcGVuKSAmJlxuICAgICAgICAgICAgKGV2ZW50c1tpbmRleF1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleF1bMV0uc3RhcnQub2Zmc2V0KSAlIDMgJiZcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIChldmVudHNbb3Blbl1bMV0uZW5kLm9mZnNldCAtXG4gICAgICAgICAgICAgICAgZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCArXG4gICAgICAgICAgICAgICAgZXZlbnRzW2luZGV4XVsxXS5lbmQub2Zmc2V0IC1cbiAgICAgICAgICAgICAgICBldmVudHNbaW5kZXhdWzFdLnN0YXJ0Lm9mZnNldCkgJVxuICAgICAgICAgICAgICAzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE51bWJlciBvZiBtYXJrZXJzIHRvIHVzZSBmcm9tIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgICB1c2UgPVxuICAgICAgICAgICAgZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0ID4gMSAmJlxuICAgICAgICAgICAgZXZlbnRzW2luZGV4XVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4XVsxXS5zdGFydC5vZmZzZXQgPiAxXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcbiAgICAgICAgICBjb25zdCBzdGFydCA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tvcGVuXVsxXS5lbmQpXG4gICAgICAgICAgY29uc3QgZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2luZGV4XVsxXS5zdGFydClcbiAgICAgICAgICBtb3ZlUG9pbnQoc3RhcnQsIC11c2UpXG4gICAgICAgICAgbW92ZVBvaW50KGVuZCwgdXNlKVxuICAgICAgICAgIG9wZW5pbmdTZXF1ZW5jZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyAnc3Ryb25nU2VxdWVuY2UnIDogJ2VtcGhhc2lzU2VxdWVuY2UnLFxuICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tvcGVuXVsxXS5lbmQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNsb3NpbmdTZXF1ZW5jZSA9IHtcbiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyAnc3Ryb25nU2VxdWVuY2UnIDogJ2VtcGhhc2lzU2VxdWVuY2UnLFxuICAgICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleF1bMV0uc3RhcnQpLFxuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHQgPSB7XG4gICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gJ3N0cm9uZ1RleHQnIDogJ2VtcGhhc2lzVGV4dCcsXG4gICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLmVuZCksXG4gICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleF1bMV0uc3RhcnQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGdyb3VwID0ge1xuICAgICAgICAgICAgdHlwZTogdXNlID4gMSA/ICdzdHJvbmcnIDogJ2VtcGhhc2lzJyxcbiAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBvcGVuaW5nU2VxdWVuY2Uuc3RhcnQpLFxuICAgICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBjbG9zaW5nU2VxdWVuY2UuZW5kKVxuICAgICAgICAgIH1cbiAgICAgICAgICBldmVudHNbb3Blbl1bMV0uZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgb3BlbmluZ1NlcXVlbmNlLnN0YXJ0KVxuICAgICAgICAgIGV2ZW50c1tpbmRleF1bMV0uc3RhcnQgPSBPYmplY3QuYXNzaWduKHt9LCBjbG9zaW5nU2VxdWVuY2UuZW5kKVxuICAgICAgICAgIG5leHRFdmVudHMgPSBbXVxuXG4gICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgbWFya2VycyBpbiB0aGUgb3BlbmluZywgYWRkIHRoZW0gYmVmb3JlLlxuICAgICAgICAgIGlmIChldmVudHNbb3Blbl1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tvcGVuXVsxXS5zdGFydC5vZmZzZXQpIHtcbiAgICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIFtcbiAgICAgICAgICAgICAgWydlbnRlcicsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dF0sXG4gICAgICAgICAgICAgIFsnZXhpdCcsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dF1cbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gT3BlbmluZy5cbiAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbXG4gICAgICAgICAgICBbJ2VudGVyJywgZ3JvdXAsIGNvbnRleHRdLFxuICAgICAgICAgICAgWydlbnRlcicsIG9wZW5pbmdTZXF1ZW5jZSwgY29udGV4dF0sXG4gICAgICAgICAgICBbJ2V4aXQnLCBvcGVuaW5nU2VxdWVuY2UsIGNvbnRleHRdLFxuICAgICAgICAgICAgWydlbnRlcicsIHRleHQsIGNvbnRleHRdXG4gICAgICAgICAgXSlcblxuICAgICAgICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG5cbiAgICAgICAgICAvLyBCZXR3ZWVuLlxuICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKFxuICAgICAgICAgICAgbmV4dEV2ZW50cyxcbiAgICAgICAgICAgIHJlc29sdmVBbGwoXG4gICAgICAgICAgICAgIGNvbnRleHQucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLFxuICAgICAgICAgICAgICBldmVudHMuc2xpY2Uob3BlbiArIDEsIGluZGV4KSxcbiAgICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcblxuICAgICAgICAgIC8vIENsb3NpbmcuXG4gICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1xuICAgICAgICAgICAgWydleGl0JywgdGV4dCwgY29udGV4dF0sXG4gICAgICAgICAgICBbJ2VudGVyJywgY2xvc2luZ1NlcXVlbmNlLCBjb250ZXh0XSxcbiAgICAgICAgICAgIFsnZXhpdCcsIGNsb3NpbmdTZXF1ZW5jZSwgY29udGV4dF0sXG4gICAgICAgICAgICBbJ2V4aXQnLCBncm91cCwgY29udGV4dF1cbiAgICAgICAgICBdKVxuXG4gICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgbWFya2VycyBpbiB0aGUgY2xvc2luZywgYWRkIHRoZW0gYWZ0ZXIuXG4gICAgICAgICAgaWYgKGV2ZW50c1tpbmRleF1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleF1bMV0uc3RhcnQub2Zmc2V0KSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAyXG4gICAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbXG4gICAgICAgICAgICAgIFsnZW50ZXInLCBldmVudHNbaW5kZXhdWzFdLCBjb250ZXh0XSxcbiAgICAgICAgICAgICAgWydleGl0JywgZXZlbnRzW2luZGV4XVsxXSwgY29udGV4dF1cbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9mZnNldCA9IDBcbiAgICAgICAgICB9XG4gICAgICAgICAgc3BsaWNlKGV2ZW50cywgb3BlbiAtIDEsIGluZGV4IC0gb3BlbiArIDMsIG5leHRFdmVudHMpXG4gICAgICAgICAgaW5kZXggPSBvcGVuICsgbmV4dEV2ZW50cy5sZW5ndGggLSBvZmZzZXQgLSAyXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSByZW1haW5pbmcgc2VxdWVuY2VzLlxuICBpbmRleCA9IC0xXG4gIHdoaWxlICgrK2luZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09ICdhdHRlbnRpb25TZXF1ZW5jZScpIHtcbiAgICAgIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9ICdkYXRhJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gZXZlbnRzXG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplQXR0ZW50aW9uKGVmZmVjdHMsIG9rKSB7XG4gIGNvbnN0IGF0dGVudGlvbk1hcmtlcnMgPSB0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmF0dGVudGlvbk1hcmtlcnMubnVsbFxuICBjb25zdCBwcmV2aW91cyA9IHRoaXMucHJldmlvdXNcbiAgY29uc3QgYmVmb3JlID0gY2xhc3NpZnlDaGFyYWN0ZXIocHJldmlvdXMpXG5cbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPn0gKi9cbiAgbGV0IG1hcmtlclxuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogQmVmb3JlIGEgc2VxdWVuY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAqKlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIG1hcmtlciA9IGNvZGVcbiAgICBlZmZlY3RzLmVudGVyKCdhdHRlbnRpb25TZXF1ZW5jZScpXG4gICAgcmV0dXJuIGluc2lkZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGEgc2VxdWVuY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAqKlxuICAgKiAgICAgXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gaW5zaWRlXG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCdhdHRlbnRpb25TZXF1ZW5jZScpXG5cbiAgICAvLyBUbyBkbzogbmV4dCBtYWpvcjogbW92ZSB0aGlzIHRvIHJlc29sdmVyLCBqdXN0IGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgICBjb25zdCBhZnRlciA9IGNsYXNzaWZ5Q2hhcmFjdGVyKGNvZGUpXG5cbiAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuXG4gICAgY29uc3Qgb3BlbiA9XG4gICAgICAhYWZ0ZXIgfHwgKGFmdGVyID09PSAyICYmIGJlZm9yZSkgfHwgYXR0ZW50aW9uTWFya2Vycy5pbmNsdWRlcyhjb2RlKVxuICAgIGNvbnN0IGNsb3NlID1cbiAgICAgICFiZWZvcmUgfHwgKGJlZm9yZSA9PT0gMiAmJiBhZnRlcikgfHwgYXR0ZW50aW9uTWFya2Vycy5pbmNsdWRlcyhwcmV2aW91cylcbiAgICB0b2tlbi5fb3BlbiA9IEJvb2xlYW4obWFya2VyID09PSA0MiA/IG9wZW4gOiBvcGVuICYmIChiZWZvcmUgfHwgIWNsb3NlKSlcbiAgICB0b2tlbi5fY2xvc2UgPSBCb29sZWFuKG1hcmtlciA9PT0gNDIgPyBjbG9zZSA6IGNsb3NlICYmIChhZnRlciB8fCAhb3BlbikpXG4gICAgcmV0dXJuIG9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBNb3ZlIGEgcG9pbnQgYSBiaXQuXG4gKlxuICogTm90ZTogYG1vdmVgIG9ubHkgd29ya3MgaW5zaWRlIGxpbmVzISBJdFx1MjAxOXMgbm90IHBvc3NpYmxlIHRvIG1vdmUgcGFzdCBvdGhlclxuICogY2h1bmtzIChyZXBsYWNlbWVudCBjaGFyYWN0ZXJzLCB0YWJzLCBvciBsaW5lIGVuZGluZ3MpLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHBvaW50XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gbW92ZVBvaW50KHBvaW50LCBvZmZzZXQpIHtcbiAgcG9pbnQuY29sdW1uICs9IG9mZnNldFxuICBwb2ludC5vZmZzZXQgKz0gb2Zmc2V0XG4gIHBvaW50Ll9idWZmZXJJbmRleCArPSBvZmZzZXRcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNjaWlBbHBoYSxcbiAgYXNjaWlBbHBoYW51bWVyaWMsXG4gIGFzY2lpQXRleHQsXG4gIGFzY2lpQ29udHJvbFxufSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBhdXRvbGluayA9IHtcbiAgbmFtZTogJ2F1dG9saW5rJyxcbiAgdG9rZW5pemU6IHRva2VuaXplQXV0b2xpbmtcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVBdXRvbGluayhlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGxldCBzaXplID0gMFxuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgYW4gYXV0b2xpbmsuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhPGh0dHBzOi8vZXhhbXBsZS5jb20+YlxuICAgKiAgICAgIF5cbiAgICogPiB8IGE8dXNlckBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoJ2F1dG9saW5rJylcbiAgICBlZmZlY3RzLmVudGVyKCdhdXRvbGlua01hcmtlcicpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KCdhdXRvbGlua01hcmtlcicpXG4gICAgZWZmZWN0cy5lbnRlcignYXV0b2xpbmtQcm90b2NvbCcpXG4gICAgcmV0dXJuIG9wZW5cbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPGAsIGF0IHByb3RvY29sIG9yIGF0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTxodHRwczovL2V4YW1wbGUuY29tPmJcbiAgICogICAgICAgXlxuICAgKiA+IHwgYTx1c2VyQGV4YW1wbGUuY29tPmJcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gb3Blbihjb2RlKSB7XG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHNjaGVtZU9yRW1haWxBdGV4dFxuICAgIH1cbiAgICByZXR1cm4gZW1haWxBdGV4dChjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEF0IHNlY29uZCBieXRlIG9mIHByb3RvY29sIG9yIGF0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTxodHRwczovL2V4YW1wbGUuY29tPmJcbiAgICogICAgICAgIF5cbiAgICogPiB8IGE8dXNlckBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzY2hlbWVPckVtYWlsQXRleHQoY29kZSkge1xuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpYyBhbmQgYCtgLCBgLWAsIGFuZCBgLmAuXG4gICAgaWYgKGNvZGUgPT09IDQzIHx8IGNvZGUgPT09IDQ1IHx8IGNvZGUgPT09IDQ2IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGUpKSB7XG4gICAgICAvLyBDb3VudCB0aGUgcHJldmlvdXMgYWxwaGFiZXRpY2FsIGZyb20gYG9wZW5gIHRvby5cbiAgICAgIHNpemUgPSAxXG4gICAgICByZXR1cm4gc2NoZW1lSW5zaWRlT3JFbWFpbEF0ZXh0KGNvZGUpXG4gICAgfVxuICAgIHJldHVybiBlbWFpbEF0ZXh0KGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gYW1iaWd1b3VzIHByb3RvY29sIG9yIGF0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTxodHRwczovL2V4YW1wbGUuY29tPmJcbiAgICogICAgICAgIF5cbiAgICogPiB8IGE8dXNlckBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzY2hlbWVJbnNpZGVPckVtYWlsQXRleHQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA1OCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBzaXplID0gMFxuICAgICAgcmV0dXJuIHVybEluc2lkZVxuICAgIH1cblxuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpYyBhbmQgYCtgLCBgLWAsIGFuZCBgLmAuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPT09IDQzIHx8IGNvZGUgPT09IDQ1IHx8IGNvZGUgPT09IDQ2IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGUpKSAmJlxuICAgICAgc2l6ZSsrIDwgMzJcbiAgICApIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHNjaGVtZUluc2lkZU9yRW1haWxBdGV4dFxuICAgIH1cbiAgICBzaXplID0gMFxuICAgIHJldHVybiBlbWFpbEF0ZXh0KGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgcHJvdG9jb2wsIGluIFVSTC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGE8aHR0cHM6Ly9leGFtcGxlLmNvbT5iXG4gICAqICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHVybEluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDYyKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoJ2F1dG9saW5rUHJvdG9jb2wnKVxuICAgICAgZWZmZWN0cy5lbnRlcignYXV0b2xpbmtNYXJrZXInKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2F1dG9saW5rTWFya2VyJylcbiAgICAgIGVmZmVjdHMuZXhpdCgnYXV0b2xpbmsnKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuXG4gICAgLy8gQVNDSUkgY29udHJvbCwgc3BhY2UsIG9yIGA8YC5cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSAzMiB8fCBjb2RlID09PSA2MCB8fCBhc2NpaUNvbnRyb2woY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIHVybEluc2lkZVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGVtYWlsIGF0ZXh0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTx1c2VyLm5hbWVAZXhhbXBsZS5jb20+YlxuICAgKiAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW1haWxBdGV4dChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDY0KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBlbWFpbEF0U2lnbk9yRG90XG4gICAgfVxuICAgIGlmIChhc2NpaUF0ZXh0KGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBlbWFpbEF0ZXh0XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBsYWJlbCwgYWZ0ZXIgYXQtc2lnbiBvciBkb3QuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhPHVzZXIubmFtZUBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgICAgICAgICAgICBeICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVtYWlsQXRTaWduT3JEb3QoY29kZSkge1xuICAgIHJldHVybiBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKSA/IGVtYWlsTGFiZWwoY29kZSkgOiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBsYWJlbCwgd2hlcmUgYC5gIGFuZCBgPmAgYXJlIGFsbG93ZWQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhPHVzZXIubmFtZUBleGFtcGxlLmNvbT5iXG4gICAqICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVtYWlsTGFiZWwoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0Nikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBzaXplID0gMFxuICAgICAgcmV0dXJuIGVtYWlsQXRTaWduT3JEb3RcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDYyKSB7XG4gICAgICAvLyBFeGl0LCB0aGVuIGNoYW5nZSB0aGUgdG9rZW4gdHlwZS5cbiAgICAgIGVmZmVjdHMuZXhpdCgnYXV0b2xpbmtQcm90b2NvbCcpLnR5cGUgPSAnYXV0b2xpbmtFbWFpbCdcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2F1dG9saW5rTWFya2VyJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdhdXRvbGlua01hcmtlcicpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2F1dG9saW5rJylcbiAgICAgIHJldHVybiBva1xuICAgIH1cbiAgICByZXR1cm4gZW1haWxWYWx1ZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGxhYmVsLCB3aGVyZSBgLmAgYW5kIGA+YCBhcmUgKm5vdCogYWxsb3dlZC5cbiAgICpcbiAgICogVGhvdWdoLCB0aGlzIGlzIGFsc28gdXNlZCBpbiBgZW1haWxMYWJlbGAgdG8gcGFyc2Ugb3RoZXIgdmFsdWVzLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYTx1c2VyLm5hbWVAZXgtYW1wbGUuY29tPmJcbiAgICogICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVtYWlsVmFsdWUoY29kZSkge1xuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpYyBvciBgLWAuXG4gICAgaWYgKChjb2RlID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKSkgJiYgc2l6ZSsrIDwgNjMpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBjb2RlID09PSA0NSA/IGVtYWlsVmFsdWUgOiBlbWFpbExhYmVsXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBuZXh0XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZywgbWFya2Rvd25TcGFjZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgYmxhbmtMaW5lID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVCbGFua0xpbmUsXG4gIHBhcnRpYWw6IHRydWVcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVCbGFua0xpbmUoZWZmZWN0cywgb2ssIG5vaykge1xuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgYmxhbmsgbGluZS5cbiAgICpcbiAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGBcdTI0MjBgIHJlcHJlc2VudHMgYSBzcGFjZSBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBcdTI0MjBcdTI0MjBcdTI0MEFcbiAgICogICAgIF5cbiAgICogPiB8IFx1MjQwQVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlciwgJ2xpbmVQcmVmaXgnKShjb2RlKVxuICAgICAgOiBhZnRlcihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEF0IGVvZi9lb2wsIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBgXHUyNDIwYCByZXByZXNlbnRzIGEgc3BhY2UgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgXHUyNDIwXHUyNDIwXHUyNDBBXG4gICAqICAgICAgIF5cbiAgICogPiB8IFx1MjQwQVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYWZ0ZXIoY29kZSkge1xuICAgIHJldHVybiBjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSA/IG9rKGNvZGUpIDogbm9rKGNvZGUpXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRXhpdGVyfSBFeGl0ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHttYXJrZG93blNwYWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBibG9ja1F1b3RlID0ge1xuICBuYW1lOiAnYmxvY2tRdW90ZScsXG4gIHRva2VuaXplOiB0b2tlbml6ZUJsb2NrUXVvdGVTdGFydCxcbiAgY29udGludWF0aW9uOiB7XG4gICAgdG9rZW5pemU6IHRva2VuaXplQmxvY2tRdW90ZUNvbnRpbnVhdGlvblxuICB9LFxuICBleGl0XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplQmxvY2tRdW90ZVN0YXJ0KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGJsb2NrIHF1b3RlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPiBhXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDYyKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHNlbGYuY29udGFpbmVyU3RhdGVcbiAgICAgIGlmICghc3RhdGUub3Blbikge1xuICAgICAgICBlZmZlY3RzLmVudGVyKCdibG9ja1F1b3RlJywge1xuICAgICAgICAgIF9jb250YWluZXI6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgc3RhdGUub3BlbiA9IHRydWVcbiAgICAgIH1cbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2Jsb2NrUXVvdGVQcmVmaXgnKVxuICAgICAgZWZmZWN0cy5lbnRlcignYmxvY2tRdW90ZU1hcmtlcicpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCgnYmxvY2tRdW90ZU1hcmtlcicpXG4gICAgICByZXR1cm4gYWZ0ZXJcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA+YCwgYmVmb3JlIG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA+IGFcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2Jsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZScpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2Jsb2NrUXVvdGVQcmVmaXgnKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuICAgIGVmZmVjdHMuZXhpdCgnYmxvY2tRdW90ZVByZWZpeCcpXG4gICAgcmV0dXJuIG9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBTdGFydCBvZiBibG9jayBxdW90ZSBjb250aW51YXRpb24uXG4gKlxuICogYGBgbWFya2Rvd25cbiAqICAgfCA+IGFcbiAqID4gfCA+IGJcbiAqICAgICBeXG4gKiBgYGBcbiAqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVCbG9ja1F1b3RlQ29udGludWF0aW9uKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgcmV0dXJuIGNvbnRTdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBibG9jayBxdW90ZSBjb250aW51YXRpb24uXG4gICAqXG4gICAqIEFsc28gdXNlZCB0byBwYXJzZSB0aGUgZmlyc3QgYmxvY2sgcXVvdGUgb3BlbmluZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8ID4gYVxuICAgKiA+IHwgPiBiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250U3RhcnQoY29kZSkge1xuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuXG4gICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKFxuICAgICAgICBlZmZlY3RzLFxuICAgICAgICBjb250QmVmb3JlLFxuICAgICAgICAnbGluZVByZWZpeCcsXG4gICAgICAgIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCdjb2RlSW5kZW50ZWQnKVxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiA0XG4gICAgICApKGNvZGUpXG4gICAgfVxuICAgIHJldHVybiBjb250QmVmb3JlKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgYD5gLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBBbHNvIHVzZWQgdG8gcGFyc2UgdGhlIGZpcnN0IGJsb2NrIHF1b3RlIG9wZW5pbmcuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCA+IGFcbiAgICogPiB8ID4gYlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udEJlZm9yZShjb2RlKSB7XG4gICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChibG9ja1F1b3RlLCBvaywgbm9rKShjb2RlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7RXhpdGVyfSAqL1xuZnVuY3Rpb24gZXhpdChlZmZlY3RzKSB7XG4gIGVmZmVjdHMuZXhpdCgnYmxvY2tRdW90ZScpXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7YXNjaWlQdW5jdHVhdGlvbn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgY2hhcmFjdGVyRXNjYXBlID0ge1xuICBuYW1lOiAnY2hhcmFjdGVyRXNjYXBlJyxcbiAgdG9rZW5pemU6IHRva2VuaXplQ2hhcmFjdGVyRXNjYXBlXG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplQ2hhcmFjdGVyRXNjYXBlKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGNoYXJhY3RlciBlc2NhcGUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhXFwqYlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKCdjaGFyYWN0ZXJFc2NhcGUnKVxuICAgIGVmZmVjdHMuZW50ZXIoJ2VzY2FwZU1hcmtlcicpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KCdlc2NhcGVNYXJrZXInKVxuICAgIHJldHVybiBpbnNpZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXFxgLCBhdCBwdW5jdHVhdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGFcXCpiXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluc2lkZShjb2RlKSB7XG4gICAgLy8gQVNDSUkgcHVuY3R1YXRpb24uXG4gICAgaWYgKGFzY2lpUHVuY3R1YXRpb24oY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2NoYXJhY3RlckVzY2FwZVZhbHVlJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdjaGFyYWN0ZXJFc2NhcGVWYWx1ZScpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2NoYXJhY3RlckVzY2FwZScpXG4gICAgICByZXR1cm4gb2tcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgbGliPVwiZG9tXCIgLz5cblxuLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbmNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJylcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd8ZmFsc2V9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZSkge1xuICBjb25zdCBjaGFyYWN0ZXJSZWZlcmVuY2UgPSAnJicgKyB2YWx1ZSArICc7J1xuICBlbGVtZW50LmlubmVySFRNTCA9IGNoYXJhY3RlclJlZmVyZW5jZVxuICBjb25zdCBjaGFyID0gZWxlbWVudC50ZXh0Q29udGVudFxuXG4gIC8vIFNvbWUgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgZG8gbm90IHJlcXVpcmUgdGhlIGNsb3Npbmcgc2VtaWNvbG9uXG4gIC8vIChgJm5vdGAsIGZvciBpbnN0YW5jZSksIHdoaWNoIGxlYWRzIHRvIHNpdHVhdGlvbnMgd2hlcmUgcGFyc2luZyB0aGUgYXNzdW1lZFxuICAvLyBuYW1lZCByZWZlcmVuY2Ugb2YgYCZub3RpdDtgIHdpbGwgcmVzdWx0IGluIHRoZSBzdHJpbmcgYFx1MDBBQ2l0O2AuXG4gIC8vIFdoZW4gd2UgZW5jb3VudGVyIGEgdHJhaWxpbmcgc2VtaWNvbG9uIGFmdGVyIHBhcnNpbmcsIGFuZCB0aGUgY2hhcmFjdGVyXG4gIC8vIHJlZmVyZW5jZSB0byBkZWNvZGUgd2FzIG5vdCBhIHNlbWljb2xvbiAoYCZzZW1pO2ApLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlXG4gIC8vIG1hdGNoaW5nIHdhcyBub3QgY29tcGxldGUuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3I6IFR5cGVTY3JpcHQgaXMgd3JvbmcgdGhhdCBgdGV4dENvbnRlbnRgIG9uIGVsZW1lbnRzIGNhblxuICAvLyB5aWVsZCBgbnVsbGAuXG4gIGlmIChjaGFyLmNoYXJDb2RlQXQoY2hhci5sZW5ndGggLSAxKSA9PT0gNTkgLyogYDtgICovICYmIHZhbHVlICE9PSAnc2VtaScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIElmIHRoZSBkZWNvZGVkIHN0cmluZyBpcyBlcXVhbCB0byB0aGUgaW5wdXQsIHRoZSBjaGFyYWN0ZXIgcmVmZXJlbmNlIHdhc1xuICAvLyBub3QgdmFsaWQuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3I6IFR5cGVTY3JpcHQgaXMgd3JvbmcgdGhhdCBgdGV4dENvbnRlbnRgIG9uIGVsZW1lbnRzIGNhblxuICAvLyB5aWVsZCBgbnVsbGAuXG4gIHJldHVybiBjaGFyID09PSBjaGFyYWN0ZXJSZWZlcmVuY2UgPyBmYWxzZSA6IGNoYXJcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2RlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlfSBmcm9tICdkZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZSdcbmltcG9ydCB7XG4gIGFzY2lpQWxwaGFudW1lcmljLFxuICBhc2NpaURpZ2l0LFxuICBhc2NpaUhleERpZ2l0XG59IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcidcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGNoYXJhY3RlclJlZmVyZW5jZSA9IHtcbiAgbmFtZTogJ2NoYXJhY3RlclJlZmVyZW5jZScsXG4gIHRva2VuaXplOiB0b2tlbml6ZUNoYXJhY3RlclJlZmVyZW5jZVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNoYXJhY3RlclJlZmVyZW5jZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGxldCBzaXplID0gMFxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IG1heFxuICAvKiogQHR5cGUgeyhjb2RlOiBDb2RlKSA9PiBib29sZWFufSAqL1xuICBsZXQgdGVzdFxuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgY2hhcmFjdGVyIHJlZmVyZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEmYW1wO2JcbiAgICogICAgICBeXG4gICAqID4gfCBhJiMxMjM7YlxuICAgKiAgICAgIF5cbiAgICogPiB8IGEmI3g5O2JcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcignY2hhcmFjdGVyUmVmZXJlbmNlJylcbiAgICBlZmZlY3RzLmVudGVyKCdjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXInKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCgnY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyJylcbiAgICByZXR1cm4gb3BlblxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGAmYCwgYXQgYCNgIGZvciBudW1lcmljIHJlZmVyZW5jZXMgb3IgYWxwaGFudW1lcmljIGZvciBuYW1lZFxuICAgKiByZWZlcmVuY2VzLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSZhbXA7YlxuICAgKiAgICAgICBeXG4gICAqID4gfCBhJiMxMjM7YlxuICAgKiAgICAgICBeXG4gICAqID4gfCBhJiN4OTtiXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSAzNSkge1xuICAgICAgZWZmZWN0cy5lbnRlcignY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYycpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCgnY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYycpXG4gICAgICByZXR1cm4gbnVtZXJpY1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZScpXG4gICAgbWF4ID0gMzFcbiAgICB0ZXN0ID0gYXNjaWlBbHBoYW51bWVyaWNcbiAgICByZXR1cm4gdmFsdWUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgI2AsIGF0IGB4YCBmb3IgaGV4YWRlY2ltYWxzIG9yIGRpZ2l0IGZvciBkZWNpbWFscy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEmIzEyMztiXG4gICAqICAgICAgICBeXG4gICAqID4gfCBhJiN4OTtiXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBudW1lcmljKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gODggfHwgY29kZSA9PT0gMTIwKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKCdjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCcpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCgnY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwnKVxuICAgICAgZWZmZWN0cy5lbnRlcignY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUnKVxuICAgICAgbWF4ID0gNlxuICAgICAgdGVzdCA9IGFzY2lpSGV4RGlnaXRcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZScpXG4gICAgbWF4ID0gN1xuICAgIHRlc3QgPSBhc2NpaURpZ2l0XG4gICAgcmV0dXJuIHZhbHVlKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgbWFya2VycyAoYCYjeGAsIGAmI2AsIG9yIGAmYCksIGluIHZhbHVlLCBiZWZvcmUgYDtgLlxuICAgKlxuICAgKiBUaGUgY2hhcmFjdGVyIHJlZmVyZW5jZSBraW5kIGRlZmluZXMgd2hhdCBhbmQgaG93IG1hbnkgY2hhcmFjdGVycyBhcmVcbiAgICogYWxsb3dlZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEmYW1wO2JcbiAgICogICAgICAgXl5eXG4gICAqID4gfCBhJiMxMjM7YlxuICAgKiAgICAgICAgXl5eXG4gICAqID4gfCBhJiN4OTtiXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdmFsdWUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA1OSAmJiBzaXplKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgnY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUnKVxuICAgICAgaWYgKFxuICAgICAgICB0ZXN0ID09PSBhc2NpaUFscGhhbnVtZXJpYyAmJlxuICAgICAgICAhZGVjb2RlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2Uoc2VsZi5zbGljZVNlcmlhbGl6ZSh0b2tlbikpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBkbzogYG1hcmtkb3duLXJzYCB1c2VzIGEgZGlmZmVyZW50IG5hbWU6XG4gICAgICAvLyBgQ2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyU2VtaWAuXG4gICAgICBlZmZlY3RzLmVudGVyKCdjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXInKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2NoYXJhY3RlclJlZmVyZW5jZU1hcmtlcicpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2NoYXJhY3RlclJlZmVyZW5jZScpXG4gICAgICByZXR1cm4gb2tcbiAgICB9XG4gICAgaWYgKHRlc3QoY29kZSkgJiYgc2l6ZSsrIDwgbWF4KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZywgbWFya2Rvd25TcGFjZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCBub25MYXp5Q29udGludWF0aW9uID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uLFxuICBwYXJ0aWFsOiB0cnVlXG59XG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGNvZGVGZW5jZWQgPSB7XG4gIG5hbWU6ICdjb2RlRmVuY2VkJyxcbiAgdG9rZW5pemU6IHRva2VuaXplQ29kZUZlbmNlZCxcbiAgY29uY3JldGU6IHRydWVcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVDb2RlRmVuY2VkKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG4gIGNvbnN0IGNsb3NlU3RhcnQgPSB7XG4gICAgdG9rZW5pemU6IHRva2VuaXplQ2xvc2VTdGFydCxcbiAgICBwYXJ0aWFsOiB0cnVlXG4gIH1cbiAgbGV0IGluaXRpYWxQcmVmaXggPSAwXG4gIGxldCBzaXplT3BlbiA9IDBcbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPn0gKi9cbiAgbGV0IG1hcmtlclxuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgY29kZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IH5+fmpzXG4gICAqICAgICBeXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgLy8gVG8gZG86IHBhcnNlIHdoaXRlc3BhY2UgbGlrZSBgbWFya2Rvd24tcnNgLlxuICAgIHJldHVybiBiZWZvcmVTZXF1ZW5jZU9wZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIGZlbmNlLCBhZnRlciBwcmVmaXgsIGF0IHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgIF5cbiAgICogICB8IGFsZXJ0KDEpXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJlZm9yZVNlcXVlbmNlT3Blbihjb2RlKSB7XG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdXG4gICAgaW5pdGlhbFByZWZpeCA9XG4gICAgICB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gJ2xpbmVQcmVmaXgnXG4gICAgICAgID8gdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGhcbiAgICAgICAgOiAwXG4gICAgbWFya2VyID0gY29kZVxuICAgIGVmZmVjdHMuZW50ZXIoJ2NvZGVGZW5jZWQnKVxuICAgIGVmZmVjdHMuZW50ZXIoJ2NvZGVGZW5jZWRGZW5jZScpXG4gICAgZWZmZWN0cy5lbnRlcignY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UnKVxuICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIGZlbmNlIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgICBeXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgIHNpemVPcGVuKytcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHNlcXVlbmNlT3BlblxuICAgIH1cbiAgICBpZiAoc2l6ZU9wZW4gPCAzKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuZXhpdCgnY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UnKVxuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBpbmZvQmVmb3JlLCAnd2hpdGVzcGFjZScpKGNvZGUpXG4gICAgICA6IGluZm9CZWZvcmUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIGZlbmNlLCBhZnRlciB0aGUgc2VxdWVuY2UgKGFuZCBvcHRpb25hbCB3aGl0ZXNwYWNlKSwgYmVmb3JlIGluZm8uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB+fn5qc1xuICAgKiAgICAgICAgXlxuICAgKiAgIHwgYWxlcnQoMSlcbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5mb0JlZm9yZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoJ2NvZGVGZW5jZWRGZW5jZScpXG4gICAgICByZXR1cm4gc2VsZi5pbnRlcnJ1cHRcbiAgICAgICAgPyBvayhjb2RlKVxuICAgICAgICA6IGVmZmVjdHMuY2hlY2sobm9uTGF6eUNvbnRpbnVhdGlvbiwgYXROb25MYXp5QnJlYWssIGFmdGVyKShjb2RlKVxuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdjb2RlRmVuY2VkRmVuY2VJbmZvJylcbiAgICBlZmZlY3RzLmVudGVyKCdjaHVua1N0cmluZycsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnc3RyaW5nJ1xuICAgIH0pXG4gICAgcmV0dXJuIGluZm8oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBpbmZvLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgfn5+anNcbiAgICogICAgICAgIF5cbiAgICogICB8IGFsZXJ0KDEpXG4gICAqICAgfCB+fn5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluZm8oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KCdjaHVua1N0cmluZycpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2NvZGVGZW5jZWRGZW5jZUluZm8nKVxuICAgICAgcmV0dXJuIGluZm9CZWZvcmUoY29kZSlcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnY2h1bmtTdHJpbmcnKVxuICAgICAgZWZmZWN0cy5leGl0KCdjb2RlRmVuY2VkRmVuY2VJbmZvJylcbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgbWV0YUJlZm9yZSwgJ3doaXRlc3BhY2UnKShjb2RlKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gOTYgJiYgY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBpbmZvXG4gIH1cblxuICAvKipcbiAgICogSW4gb3BlbmluZyBmZW5jZSwgYWZ0ZXIgaW5mbyBhbmQgd2hpdGVzcGFjZSwgYmVmb3JlIG1ldGEuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB+fn5qcyBldmFsXG4gICAqICAgICAgICAgICBeXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBtZXRhQmVmb3JlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBpbmZvQmVmb3JlKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoJ2NvZGVGZW5jZWRGZW5jZU1ldGEnKVxuICAgIGVmZmVjdHMuZW50ZXIoJ2NodW5rU3RyaW5nJywge1xuICAgICAgY29udGVudFR5cGU6ICdzdHJpbmcnXG4gICAgfSlcbiAgICByZXR1cm4gbWV0YShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIG1ldGEuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCB+fn5qcyBldmFsXG4gICAqICAgICAgICAgICBeXG4gICAqICAgfCBhbGVydCgxKVxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBtZXRhKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnY2h1bmtTdHJpbmcnKVxuICAgICAgZWZmZWN0cy5leGl0KCdjb2RlRmVuY2VkRmVuY2VNZXRhJylcbiAgICAgIHJldHVybiBpbmZvQmVmb3JlKGNvZGUpXG4gICAgfVxuICAgIGlmIChjb2RlID09PSA5NiAmJiBjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIG1ldGFcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBlb2wvZW9mIGluIGNvZGUsIGJlZm9yZSBhIG5vbi1sYXp5IGNsb3NpbmcgZmVuY2Ugb3IgY29udGVudC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IH5+fmpzXG4gICAqICAgICAgICAgIF5cbiAgICogPiB8IGFsZXJ0KDEpXG4gICAqICAgICAgICAgICAgIF5cbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYXROb25MYXp5QnJlYWsoY29kZSkge1xuICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoY2xvc2VTdGFydCwgYWZ0ZXIsIGNvbnRlbnRCZWZvcmUpKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQmVmb3JlIGNvZGUgY29udGVudCwgbm90IGEgY2xvc2luZyBmZW5jZSwgYXQgZW9sLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfn5+anNcbiAgICogPiB8IGFsZXJ0KDEpXG4gICAqICAgICAgICAgICAgIF5cbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGVudEJlZm9yZShjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcignbGluZUVuZGluZycpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KCdsaW5lRW5kaW5nJylcbiAgICByZXR1cm4gY29udGVudFN0YXJ0XG4gIH1cblxuICAvKipcbiAgICogQmVmb3JlIGNvZGUgY29udGVudCwgbm90IGEgY2xvc2luZyBmZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IH5+fmpzXG4gICAqID4gfCBhbGVydCgxKVxuICAgKiAgICAgXlxuICAgKiAgIHwgfn5+XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250ZW50U3RhcnQoY29kZSkge1xuICAgIHJldHVybiBpbml0aWFsUHJlZml4ID4gMCAmJiBtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlTcGFjZShcbiAgICAgICAgICBlZmZlY3RzLFxuICAgICAgICAgIGJlZm9yZUNvbnRlbnRDaHVuayxcbiAgICAgICAgICAnbGluZVByZWZpeCcsXG4gICAgICAgICAgaW5pdGlhbFByZWZpeCArIDFcbiAgICAgICAgKShjb2RlKVxuICAgICAgOiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgY29kZSBjb250ZW50LCBhZnRlciBvcHRpb25hbCBwcmVmaXguXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCB+fn5qc1xuICAgKiA+IHwgYWxlcnQoMSlcbiAgICogICAgIF5cbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmVmb3JlQ29udGVudENodW5rKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKG5vbkxhenlDb250aW51YXRpb24sIGF0Tm9uTGF6eUJyZWFrLCBhZnRlcikoY29kZSlcbiAgICB9XG4gICAgZWZmZWN0cy5lbnRlcignY29kZUZsb3dWYWx1ZScpXG4gICAgcmV0dXJuIGNvbnRlbnRDaHVuayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvZGUgY29udGVudC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IH5+fmpzXG4gICAqID4gfCBhbGVydCgxKVxuICAgKiAgICAgXl5eXl5eXl5cbiAgICogICB8IH5+flxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGVudENodW5rKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnY29kZUZsb3dWYWx1ZScpXG4gICAgICByZXR1cm4gYmVmb3JlQ29udGVudENodW5rKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBjb250ZW50Q2h1bmtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBjb2RlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgfn5+anNcbiAgICogICB8IGFsZXJ0KDEpXG4gICAqID4gfCB+fn5cbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICBlZmZlY3RzLmV4aXQoJ2NvZGVGZW5jZWQnKVxuICAgIHJldHVybiBvayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gICAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gICAqL1xuICBmdW5jdGlvbiB0b2tlbml6ZUNsb3NlU3RhcnQoZWZmZWN0cywgb2ssIG5vaykge1xuICAgIGxldCBzaXplID0gMFxuICAgIHJldHVybiBzdGFydEJlZm9yZVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFydEJlZm9yZShjb2RlKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdsaW5lRW5kaW5nJylcbiAgICAgIHJldHVybiBzdGFydFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJlZm9yZSBjbG9zaW5nIGZlbmNlLCBhdCBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiAgIHwgfn5+anNcbiAgICAgKiAgIHwgYWxlcnQoMSlcbiAgICAgKiA+IHwgfn5+XG4gICAgICogICAgIF5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuXG4gICAgICAvLyBUbyBkbzogYGVudGVyYCBoZXJlIG9yIGluIG5leHQgc3RhdGU/XG4gICAgICBlZmZlY3RzLmVudGVyKCdjb2RlRmVuY2VkRmVuY2UnKVxuICAgICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZSlcbiAgICAgICAgPyBmYWN0b3J5U3BhY2UoXG4gICAgICAgICAgICBlZmZlY3RzLFxuICAgICAgICAgICAgYmVmb3JlU2VxdWVuY2VDbG9zZSxcbiAgICAgICAgICAgICdsaW5lUHJlZml4JyxcbiAgICAgICAgICAgIHNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCdjb2RlSW5kZW50ZWQnKVxuICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA6IDRcbiAgICAgICAgICApKGNvZGUpXG4gICAgICAgIDogYmVmb3JlU2VxdWVuY2VDbG9zZShjb2RlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluIGNsb3NpbmcgZmVuY2UsIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UsIGF0IHNlcXVlbmNlLlxuICAgICAqXG4gICAgICogYGBgbWFya2Rvd25cbiAgICAgKiAgIHwgfn5+anNcbiAgICAgKiAgIHwgYWxlcnQoMSlcbiAgICAgKiA+IHwgfn5+XG4gICAgICogICAgIF5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEB0eXBlIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiZWZvcmVTZXF1ZW5jZUNsb3NlKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgICAgZWZmZWN0cy5lbnRlcignY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UnKVxuICAgICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZShjb2RlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluIGNsb3NpbmcgZmVuY2Ugc2VxdWVuY2UuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqICAgfCB+fn5qc1xuICAgICAqICAgfCBhbGVydCgxKVxuICAgICAqID4gfCB+fn5cbiAgICAgKiAgICAgXlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2UoY29kZSkge1xuICAgICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgICBzaXplKytcbiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlXG4gICAgICB9XG4gICAgICBpZiAoc2l6ZSA+PSBzaXplT3Blbikge1xuICAgICAgICBlZmZlY3RzLmV4aXQoJ2NvZGVGZW5jZWRGZW5jZVNlcXVlbmNlJylcbiAgICAgICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZSlcbiAgICAgICAgICA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBzZXF1ZW5jZUNsb3NlQWZ0ZXIsICd3aGl0ZXNwYWNlJykoY29kZSlcbiAgICAgICAgICA6IHNlcXVlbmNlQ2xvc2VBZnRlcihjb2RlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIGNsb3NpbmcgZmVuY2Ugc2VxdWVuY2UsIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAgICpcbiAgICAgKiBgYGBtYXJrZG93blxuICAgICAqICAgfCB+fn5qc1xuICAgICAqICAgfCBhbGVydCgxKVxuICAgICAqID4gfCB+fn5cbiAgICAgKiAgICAgICAgXlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2VBZnRlcihjb2RlKSB7XG4gICAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgICAgZWZmZWN0cy5leGl0KCdjb2RlRmVuY2VkRmVuY2UnKVxuICAgICAgICByZXR1cm4gb2soY29kZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nJylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQoJ2xpbmVFbmRpbmcnKVxuICAgIHJldHVybiBsaW5lU3RhcnRcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsaW5lU3RhcnQoY29kZSkge1xuICAgIHJldHVybiBzZWxmLnBhcnNlci5sYXp5W3NlbGYubm93KCkubGluZV0gPyBub2soY29kZSkgOiBvayhjb2RlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7ZmFjdG9yeVNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSdcbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93blNwYWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBjb2RlSW5kZW50ZWQgPSB7XG4gIG5hbWU6ICdjb2RlSW5kZW50ZWQnLFxuICB0b2tlbml6ZTogdG9rZW5pemVDb2RlSW5kZW50ZWRcbn1cblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCBmdXJ0aGVyU3RhcnQgPSB7XG4gIHRva2VuaXplOiB0b2tlbml6ZUZ1cnRoZXJTdGFydCxcbiAgcGFydGlhbDogdHJ1ZVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNvZGVJbmRlbnRlZChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBjb2RlIChpbmRlbnRlZCkuXG4gICAqXG4gICAqID4gKipQYXJzaW5nIG5vdGUqKjogaXQgaXMgbm90IG5lZWRlZCB0byBjaGVjayBpZiB0aGlzIGZpcnN0IGxpbmUgaXMgYVxuICAgKiA+IGZpbGxlZCBsaW5lICh0aGF0IGl0IGhhcyBhIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciksIGJlY2F1c2UgYmxhbmsgbGluZXNcbiAgICogPiBhcmUgcGFyc2VkIGFscmVhZHksIHNvIHdlIG5ldmVyIHJ1biBpbnRvIHRoYXQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAgICAgYWFhXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgLy8gVG8gZG86IG1hbnVhbGx5IGNoZWNrIGlmIGludGVycnVwdGluZyBsaWtlIGBtYXJrZG93bi1yc2AuXG5cbiAgICBlZmZlY3RzLmVudGVyKCdjb2RlSW5kZW50ZWQnKVxuICAgIC8vIFRvIGRvOiB1c2UgYW4gaW1wcm92ZWQgYHNwYWNlX29yX3RhYmAgZnVuY3Rpb24gbGlrZSBgbWFya2Rvd24tcnNgLFxuICAgIC8vIHNvIHRoYXQgd2UgY2FuIGRyb3AgdGhlIG5leHQgc3RhdGUuXG4gICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgJ2xpbmVQcmVmaXgnLCA0ICsgMSkoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBzdGFydCwgYWZ0ZXIgMSBvciA0IHNwYWNlcy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICAgICBhYWFcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlKSB7XG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdXG4gICAgcmV0dXJuIHRhaWwgJiZcbiAgICAgIHRhaWxbMV0udHlwZSA9PT0gJ2xpbmVQcmVmaXgnICYmXG4gICAgICB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA+PSA0XG4gICAgICA/IGF0QnJlYWsoY29kZSlcbiAgICAgIDogbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgYSBicmVhay5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICAgICBhYWFcbiAgICogICAgICAgICBeICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhdEJyZWFrKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFmdGVyKGNvZGUpXG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoZnVydGhlclN0YXJ0LCBhdEJyZWFrLCBhZnRlcikoY29kZSlcbiAgICB9XG4gICAgZWZmZWN0cy5lbnRlcignY29kZUZsb3dWYWx1ZScpXG4gICAgcmV0dXJuIGluc2lkZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvZGUgY29udGVudC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICAgICBhYWFcbiAgICogICAgICAgICBeXl5eXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KCdjb2RlRmxvd1ZhbHVlJylcbiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBpbnNpZGVcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICBlZmZlY3RzLmV4aXQoJ2NvZGVJbmRlbnRlZCcpXG4gICAgLy8gVG8gZG86IGFsbG93IGludGVycnVwdGluZyBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgLy8gRmVlbCBmcmVlIHRvIGludGVycnVwdC5cbiAgICAvLyB0b2tlbml6ZXIuaW50ZXJydXB0ID0gZmFsc2VcbiAgICByZXR1cm4gb2soY29kZSlcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUZ1cnRoZXJTdGFydChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHJldHVybiBmdXJ0aGVyU3RhcnRcblxuICAvKipcbiAgICogQXQgZW9sLCB0cnlpbmcgdG8gcGFyc2UgYW5vdGhlciBpbmRlbnQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAgICAgYWFhXG4gICAqICAgICAgICAgICAgXlxuICAgKiAgIHwgICAgIGJiYlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZnVydGhlclN0YXJ0KGNvZGUpIHtcbiAgICAvLyBUbyBkbzogaW1wcm92ZSBgbGF6eWAgLyBgcGllcmNlYCBoYW5kbGluZy5cbiAgICAvLyBJZiB0aGlzIGlzIGEgbGF6eSBsaW5lLCBpdCBjYW5cdTIwMTl0IGJlIGNvZGUuXG4gICAgaWYgKHNlbGYucGFyc2VyLmxhenlbc2VsZi5ub3coKS5saW5lXSkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdsaW5lRW5kaW5nJylcbiAgICAgIHJldHVybiBmdXJ0aGVyU3RhcnRcbiAgICB9XG5cbiAgICAvLyBUbyBkbzogdGhlIGNvZGUgaGVyZSBpbiBgbWljcm9tYXJrLWpzYCBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbVxuICAgIC8vIGBtYXJrZG93bi1yc2AgYmVjYXVzZSB0aGVyZSBpdCBjYW4gYXR0ZW1wdCBzcGFjZXMuXG4gICAgLy8gV2UgY2FuXHUyMDE5dCB5ZXQuXG4gICAgLy9cbiAgICAvLyBUbyBkbzogdXNlIGFuIGltcHJvdmVkIGBzcGFjZV9vcl90YWJgIGZ1bmN0aW9uIGxpa2UgYG1hcmtkb3duLXJzYCxcbiAgICAvLyBzbyB0aGF0IHdlIGNhbiBkcm9wIHRoZSBuZXh0IHN0YXRlLlxuICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJQcmVmaXgsICdsaW5lUHJlZml4JywgNCArIDEpKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgc3RhcnQsIGFmdGVyIDEgb3IgNCBzcGFjZXMuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAgICAgYWFhXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZSkge1xuICAgIGNvbnN0IHRhaWwgPSBzZWxmLmV2ZW50c1tzZWxmLmV2ZW50cy5sZW5ndGggLSAxXVxuICAgIHJldHVybiB0YWlsICYmXG4gICAgICB0YWlsWzFdLnR5cGUgPT09ICdsaW5lUHJlZml4JyAmJlxuICAgICAgdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggPj0gNFxuICAgICAgPyBvayhjb2RlKVxuICAgICAgOiBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSlcbiAgICAgID8gZnVydGhlclN0YXJ0KGNvZGUpXG4gICAgICA6IG5vayhjb2RlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlByZXZpb3VzfSBQcmV2aW91c1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5SZXNvbHZlcn0gUmVzb2x2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VufSBUb2tlblxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBjb2RlVGV4dCA9IHtcbiAgbmFtZTogJ2NvZGVUZXh0JyxcbiAgdG9rZW5pemU6IHRva2VuaXplQ29kZVRleHQsXG4gIHJlc29sdmU6IHJlc29sdmVDb2RlVGV4dCxcbiAgcHJldmlvdXNcbn1cblxuLy8gVG8gZG86IG5leHQgbWFqb3I6IGRvblx1MjAxOXQgcmVzb2x2ZSwgbGlrZSBgbWFya2Rvd24tcnNgLlxuLyoqIEB0eXBlIHtSZXNvbHZlcn0gKi9cbmZ1bmN0aW9uIHJlc29sdmVDb2RlVGV4dChldmVudHMpIHtcbiAgbGV0IHRhaWxFeGl0SW5kZXggPSBldmVudHMubGVuZ3RoIC0gNFxuICBsZXQgaGVhZEVudGVySW5kZXggPSAzXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgaW5kZXhcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCBlbnRlclxuXG4gIC8vIElmIHdlIHN0YXJ0IGFuZCBlbmQgd2l0aCBhbiBFT0wgb3IgYSBzcGFjZS5cbiAgaWYgKFxuICAgIChldmVudHNbaGVhZEVudGVySW5kZXhdWzFdLnR5cGUgPT09ICdsaW5lRW5kaW5nJyB8fFxuICAgICAgZXZlbnRzW2hlYWRFbnRlckluZGV4XVsxXS50eXBlID09PSAnc3BhY2UnKSAmJlxuICAgIChldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9PT0gJ2xpbmVFbmRpbmcnIHx8XG4gICAgICBldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9PT0gJ3NwYWNlJylcbiAgKSB7XG4gICAgaW5kZXggPSBoZWFkRW50ZXJJbmRleFxuXG4gICAgLy8gQW5kIHdlIGhhdmUgZGF0YS5cbiAgICB3aGlsZSAoKytpbmRleCA8IHRhaWxFeGl0SW5kZXgpIHtcbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09ICdjb2RlVGV4dERhdGEnKSB7XG4gICAgICAgIC8vIFRoZW4gd2UgaGF2ZSBwYWRkaW5nLlxuICAgICAgICBldmVudHNbaGVhZEVudGVySW5kZXhdWzFdLnR5cGUgPSAnY29kZVRleHRQYWRkaW5nJ1xuICAgICAgICBldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9ICdjb2RlVGV4dFBhZGRpbmcnXG4gICAgICAgIGhlYWRFbnRlckluZGV4ICs9IDJcbiAgICAgICAgdGFpbEV4aXRJbmRleCAtPSAyXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWVyZ2UgYWRqYWNlbnQgc3BhY2VzIGFuZCBkYXRhLlxuICBpbmRleCA9IGhlYWRFbnRlckluZGV4IC0gMVxuICB0YWlsRXhpdEluZGV4KytcbiAgd2hpbGUgKCsraW5kZXggPD0gdGFpbEV4aXRJbmRleCkge1xuICAgIGlmIChlbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaW5kZXggIT09IHRhaWxFeGl0SW5kZXggJiYgZXZlbnRzW2luZGV4XVsxXS50eXBlICE9PSAnbGluZUVuZGluZycpIHtcbiAgICAgICAgZW50ZXIgPSBpbmRleFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpbmRleCA9PT0gdGFpbEV4aXRJbmRleCB8fFxuICAgICAgZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSAnbGluZUVuZGluZydcbiAgICApIHtcbiAgICAgIGV2ZW50c1tlbnRlcl1bMV0udHlwZSA9ICdjb2RlVGV4dERhdGEnXG4gICAgICBpZiAoaW5kZXggIT09IGVudGVyICsgMikge1xuICAgICAgICBldmVudHNbZW50ZXJdWzFdLmVuZCA9IGV2ZW50c1tpbmRleCAtIDFdWzFdLmVuZFxuICAgICAgICBldmVudHMuc3BsaWNlKGVudGVyICsgMiwgaW5kZXggLSBlbnRlciAtIDIpXG4gICAgICAgIHRhaWxFeGl0SW5kZXggLT0gaW5kZXggLSBlbnRlciAtIDJcbiAgICAgICAgaW5kZXggPSBlbnRlciArIDJcbiAgICAgIH1cbiAgICAgIGVudGVyID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1ByZXZpb3VzfVxuICovXG5mdW5jdGlvbiBwcmV2aW91cyhjb2RlKSB7XG4gIC8vIElmIHRoZXJlIGlzIGEgcHJldmlvdXMgY29kZSwgdGhlcmUgd2lsbCBhbHdheXMgYmUgYSB0YWlsLlxuICByZXR1cm4gKFxuICAgIGNvZGUgIT09IDk2IHx8XG4gICAgdGhpcy5ldmVudHNbdGhpcy5ldmVudHMubGVuZ3RoIC0gMV1bMV0udHlwZSA9PT0gJ2NoYXJhY3RlckVzY2FwZSdcbiAgKVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNvZGVUZXh0KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgbGV0IHNpemVPcGVuID0gMFxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IHNpemVcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IHRva2VuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBjb2RlICh0ZXh0KS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGBhYFxuICAgKiAgICAgXlxuICAgKiA+IHwgXFxgYWBcbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcignY29kZVRleHQnKVxuICAgIGVmZmVjdHMuZW50ZXIoJ2NvZGVUZXh0U2VxdWVuY2UnKVxuICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYGFgXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSA5Nikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBzaXplT3BlbisrXG4gICAgICByZXR1cm4gc2VxdWVuY2VPcGVuXG4gICAgfVxuICAgIGVmZmVjdHMuZXhpdCgnY29kZVRleHRTZXF1ZW5jZScpXG4gICAgcmV0dXJuIGJldHdlZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCZXR3ZWVuIHNvbWV0aGluZyBhbmQgc29tZXRoaW5nIGVsc2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBgYWBcbiAgICogICAgICBeXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmV0d2Vlbihjb2RlKSB7XG4gICAgLy8gRU9GLlxuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gVG8gZG86IG5leHQgbWFqb3I6IGRvblx1MjAxOXQgZG8gc3BhY2VzIGluIHJlc29sdmUsIGJ1dCB3aGVuIGNvbXBpbGluZyxcbiAgICAvLyBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgLy8gVGFicyBkb25cdTIwMTl0IHdvcmssIGFuZCB2aXJ0dWFsIHNwYWNlcyBkb25cdTIwMTl0IG1ha2Ugc2Vuc2UuXG4gICAgaWYgKGNvZGUgPT09IDMyKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKCdzcGFjZScpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCgnc3BhY2UnKVxuICAgICAgcmV0dXJuIGJldHdlZW5cbiAgICB9XG5cbiAgICAvLyBDbG9zaW5nIGZlbmNlPyBDb3VsZCBhbHNvIGJlIGRhdGEuXG4gICAgaWYgKGNvZGUgPT09IDk2KSB7XG4gICAgICB0b2tlbiA9IGVmZmVjdHMuZW50ZXIoJ2NvZGVUZXh0U2VxdWVuY2UnKVxuICAgICAgc2l6ZSA9IDBcbiAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlKGNvZGUpXG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2xpbmVFbmRpbmcnKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2xpbmVFbmRpbmcnKVxuICAgICAgcmV0dXJuIGJldHdlZW5cbiAgICB9XG5cbiAgICAvLyBEYXRhLlxuICAgIGVmZmVjdHMuZW50ZXIoJ2NvZGVUZXh0RGF0YScpXG4gICAgcmV0dXJuIGRhdGEoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBkYXRhLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYGFgXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGF0YShjb2RlKSB7XG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gbnVsbCB8fFxuICAgICAgY29kZSA9PT0gMzIgfHxcbiAgICAgIGNvZGUgPT09IDk2IHx8XG4gICAgICBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSlcbiAgICApIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnY29kZVRleHREYXRhJylcbiAgICAgIHJldHVybiBiZXR3ZWVuKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICAvKipcbiAgICogSW4gY2xvc2luZyBzZXF1ZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGBhYFxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZUNsb3NlKGNvZGUpIHtcbiAgICAvLyBNb3JlLlxuICAgIGlmIChjb2RlID09PSA5Nikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBzaXplKytcbiAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlXG4gICAgfVxuXG4gICAgLy8gRG9uZSFcbiAgICBpZiAoc2l6ZSA9PT0gc2l6ZU9wZW4pIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnY29kZVRleHRTZXF1ZW5jZScpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2NvZGVUZXh0JylcbiAgICAgIHJldHVybiBvayhjb2RlKVxuICAgIH1cblxuICAgIC8vIE1vcmUgb3IgbGVzcyBhY2NlbnRzOiBtYXJrIGFzIGRhdGEuXG4gICAgdG9rZW4udHlwZSA9ICdjb2RlVGV4dERhdGEnXG4gICAgcmV0dXJuIGRhdGEoY29kZSlcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5DaHVua30gQ2h1bmtcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRXZlbnR9IEV2ZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VufSBUb2tlblxuICovXG5cbmltcG9ydCB7c3BsaWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaHVua2VkJ1xuLyoqXG4gKiBUb2tlbml6ZSBzdWJjb250ZW50LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAqICAgTGlzdCBvZiBldmVudHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciBzdWJ0b2tlbnMgd2VyZSBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnRva2VuaXplKGV2ZW50cykge1xuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIG51bWJlcj59ICovXG4gIGNvbnN0IGp1bXBzID0ge31cbiAgbGV0IGluZGV4ID0gLTFcbiAgLyoqIEB0eXBlIHtFdmVudH0gKi9cbiAgbGV0IGV2ZW50XG4gIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgbGluZUluZGV4XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgb3RoZXJJbmRleFxuICAvKiogQHR5cGUge0V2ZW50fSAqL1xuICBsZXQgb3RoZXJFdmVudFxuICAvKiogQHR5cGUge0FycmF5PEV2ZW50Pn0gKi9cbiAgbGV0IHBhcmFtZXRlcnNcbiAgLyoqIEB0eXBlIHtBcnJheTxFdmVudD59ICovXG4gIGxldCBzdWJldmVudHNcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgbW9yZVxuICB3aGlsZSAoKytpbmRleCA8IGV2ZW50cy5sZW5ndGgpIHtcbiAgICB3aGlsZSAoaW5kZXggaW4ganVtcHMpIHtcbiAgICAgIGluZGV4ID0ganVtcHNbaW5kZXhdXG4gICAgfVxuICAgIGV2ZW50ID0gZXZlbnRzW2luZGV4XVxuXG4gICAgLy8gQWRkIGEgaG9vayBmb3IgdGhlIEdGTSB0YXNrbGlzdCBleHRlbnNpb24sIHdoaWNoIG5lZWRzIHRvIGtub3cgaWYgdGV4dFxuICAgIC8vIGlzIGluIHRoZSBmaXJzdCBjb250ZW50IG9mIGEgbGlzdCBpdGVtLlxuICAgIGlmIChcbiAgICAgIGluZGV4ICYmXG4gICAgICBldmVudFsxXS50eXBlID09PSAnY2h1bmtGbG93JyAmJlxuICAgICAgZXZlbnRzW2luZGV4IC0gMV1bMV0udHlwZSA9PT0gJ2xpc3RJdGVtUHJlZml4J1xuICAgICkge1xuICAgICAgc3ViZXZlbnRzID0gZXZlbnRbMV0uX3Rva2VuaXplci5ldmVudHNcbiAgICAgIG90aGVySW5kZXggPSAwXG4gICAgICBpZiAoXG4gICAgICAgIG90aGVySW5kZXggPCBzdWJldmVudHMubGVuZ3RoICYmXG4gICAgICAgIHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSAnbGluZUVuZGluZ0JsYW5rJ1xuICAgICAgKSB7XG4gICAgICAgIG90aGVySW5kZXggKz0gMlxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBvdGhlckluZGV4IDwgc3ViZXZlbnRzLmxlbmd0aCAmJlxuICAgICAgICBzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gJ2NvbnRlbnQnXG4gICAgICApIHtcbiAgICAgICAgd2hpbGUgKCsrb3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSAnY2h1bmtUZXh0Jykge1xuICAgICAgICAgICAgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLl9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSA9IHRydWVcbiAgICAgICAgICAgIG90aGVySW5kZXgrK1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVudGVyLlxuICAgIGlmIChldmVudFswXSA9PT0gJ2VudGVyJykge1xuICAgICAgaWYgKGV2ZW50WzFdLmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oanVtcHMsIHN1YmNvbnRlbnQoZXZlbnRzLCBpbmRleCkpXG4gICAgICAgIGluZGV4ID0ganVtcHNbaW5kZXhdXG4gICAgICAgIG1vcmUgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIC8vIEV4aXQuXG4gICAgZWxzZSBpZiAoZXZlbnRbMV0uX2NvbnRhaW5lcikge1xuICAgICAgb3RoZXJJbmRleCA9IGluZGV4XG4gICAgICBsaW5lSW5kZXggPSB1bmRlZmluZWRcbiAgICAgIHdoaWxlIChvdGhlckluZGV4LS0pIHtcbiAgICAgICAgb3RoZXJFdmVudCA9IGV2ZW50c1tvdGhlckluZGV4XVxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3RoZXJFdmVudFsxXS50eXBlID09PSAnbGluZUVuZGluZycgfHxcbiAgICAgICAgICBvdGhlckV2ZW50WzFdLnR5cGUgPT09ICdsaW5lRW5kaW5nQmxhbmsnXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChvdGhlckV2ZW50WzBdID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgICBpZiAobGluZUluZGV4KSB7XG4gICAgICAgICAgICAgIGV2ZW50c1tsaW5lSW5kZXhdWzFdLnR5cGUgPSAnbGluZUVuZGluZ0JsYW5rJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3RoZXJFdmVudFsxXS50eXBlID0gJ2xpbmVFbmRpbmcnXG4gICAgICAgICAgICBsaW5lSW5kZXggPSBvdGhlckluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsaW5lSW5kZXgpIHtcbiAgICAgICAgLy8gRml4IHBvc2l0aW9uLlxuICAgICAgICBldmVudFsxXS5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbbGluZUluZGV4XVsxXS5zdGFydClcblxuICAgICAgICAvLyBTd2l0Y2ggY29udGFpbmVyIGV4aXQgdy8gbGluZSBlbmRpbmdzLlxuICAgICAgICBwYXJhbWV0ZXJzID0gZXZlbnRzLnNsaWNlKGxpbmVJbmRleCwgaW5kZXgpXG4gICAgICAgIHBhcmFtZXRlcnMudW5zaGlmdChldmVudClcbiAgICAgICAgc3BsaWNlKGV2ZW50cywgbGluZUluZGV4LCBpbmRleCAtIGxpbmVJbmRleCArIDEsIHBhcmFtZXRlcnMpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiAhbW9yZVxufVxuXG4vKipcbiAqIFRva2VuaXplIGVtYmVkZGVkIHRva2Vucy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gZXZlbnRzXG4gKiBAcGFyYW0ge251bWJlcn0gZXZlbnRJbmRleFxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIG51bWJlcj59XG4gKi9cbmZ1bmN0aW9uIHN1YmNvbnRlbnQoZXZlbnRzLCBldmVudEluZGV4KSB7XG4gIGNvbnN0IHRva2VuID0gZXZlbnRzW2V2ZW50SW5kZXhdWzFdXG4gIGNvbnN0IGNvbnRleHQgPSBldmVudHNbZXZlbnRJbmRleF1bMl1cbiAgbGV0IHN0YXJ0UG9zaXRpb24gPSBldmVudEluZGV4IC0gMVxuICAvKiogQHR5cGUge0FycmF5PG51bWJlcj59ICovXG4gIGNvbnN0IHN0YXJ0UG9zaXRpb25zID0gW11cbiAgY29uc3QgdG9rZW5pemVyID1cbiAgICB0b2tlbi5fdG9rZW5pemVyIHx8IGNvbnRleHQucGFyc2VyW3Rva2VuLmNvbnRlbnRUeXBlXSh0b2tlbi5zdGFydClcbiAgY29uc3QgY2hpbGRFdmVudHMgPSB0b2tlbml6ZXIuZXZlbnRzXG4gIC8qKiBAdHlwZSB7QXJyYXk8W251bWJlciwgbnVtYmVyXT59ICovXG4gIGNvbnN0IGp1bXBzID0gW11cbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSAqL1xuICBjb25zdCBnYXBzID0ge31cbiAgLyoqIEB0eXBlIHtBcnJheTxDaHVuaz59ICovXG4gIGxldCBzdHJlYW1cbiAgLyoqIEB0eXBlIHtUb2tlbiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHByZXZpb3VzXG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7VG9rZW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBjdXJyZW50ID0gdG9rZW5cbiAgbGV0IGFkanVzdCA9IDBcbiAgbGV0IHN0YXJ0ID0gMFxuICBjb25zdCBicmVha3MgPSBbc3RhcnRdXG5cbiAgLy8gTG9vcCBmb3J3YXJkIHRocm91Z2ggdGhlIGxpbmtlZCB0b2tlbnMgdG8gcGFzcyB0aGVtIGluIG9yZGVyIHRvIHRoZVxuICAvLyBzdWJ0b2tlbml6ZXIuXG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgLy8gRmluZCB0aGUgcG9zaXRpb24gb2YgdGhlIGV2ZW50IGZvciB0aGlzIHRva2VuLlxuICAgIHdoaWxlIChldmVudHNbKytzdGFydFBvc2l0aW9uXVsxXSAhPT0gY3VycmVudCkge1xuICAgICAgLy8gRW1wdHkuXG4gICAgfVxuICAgIHN0YXJ0UG9zaXRpb25zLnB1c2goc3RhcnRQb3NpdGlvbilcbiAgICBpZiAoIWN1cnJlbnQuX3Rva2VuaXplcikge1xuICAgICAgc3RyZWFtID0gY29udGV4dC5zbGljZVN0cmVhbShjdXJyZW50KVxuICAgICAgaWYgKCFjdXJyZW50Lm5leHQpIHtcbiAgICAgICAgc3RyZWFtLnB1c2gobnVsbClcbiAgICAgIH1cbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICB0b2tlbml6ZXIuZGVmaW5lU2tpcChjdXJyZW50LnN0YXJ0KVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnQuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtKSB7XG4gICAgICAgIHRva2VuaXplci5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtID0gdHJ1ZVxuICAgICAgfVxuICAgICAgdG9rZW5pemVyLndyaXRlKHN0cmVhbSlcbiAgICAgIGlmIChjdXJyZW50Ll9pc0luRmlyc3RDb250ZW50T2ZMaXN0SXRlbSkge1xuICAgICAgICB0b2tlbml6ZXIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVucmF2ZWwgdGhlIG5leHQgdG9rZW4uXG4gICAgcHJldmlvdXMgPSBjdXJyZW50XG4gICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFxuICB9XG5cbiAgLy8gTm93LCBsb29wIGJhY2sgdGhyb3VnaCBhbGwgZXZlbnRzIChhbmQgbGlua2VkIHRva2VucyksIHRvIGZpZ3VyZSBvdXQgd2hpY2hcbiAgLy8gcGFydHMgYmVsb25nIHdoZXJlLlxuICBjdXJyZW50ID0gdG9rZW5cbiAgd2hpbGUgKCsraW5kZXggPCBjaGlsZEV2ZW50cy5sZW5ndGgpIHtcbiAgICBpZiAoXG4gICAgICAvLyBGaW5kIGEgdm9pZCB0b2tlbiB0aGF0IGluY2x1ZGVzIGEgYnJlYWsuXG4gICAgICBjaGlsZEV2ZW50c1tpbmRleF1bMF0gPT09ICdleGl0JyAmJlxuICAgICAgY2hpbGRFdmVudHNbaW5kZXggLSAxXVswXSA9PT0gJ2VudGVyJyAmJlxuICAgICAgY2hpbGRFdmVudHNbaW5kZXhdWzFdLnR5cGUgPT09IGNoaWxkRXZlbnRzW2luZGV4IC0gMV1bMV0udHlwZSAmJlxuICAgICAgY2hpbGRFdmVudHNbaW5kZXhdWzFdLnN0YXJ0LmxpbmUgIT09IGNoaWxkRXZlbnRzW2luZGV4XVsxXS5lbmQubGluZVxuICAgICkge1xuICAgICAgc3RhcnQgPSBpbmRleCArIDFcbiAgICAgIGJyZWFrcy5wdXNoKHN0YXJ0KVxuICAgICAgLy8gSGVscCBHQy5cbiAgICAgIGN1cnJlbnQuX3Rva2VuaXplciA9IHVuZGVmaW5lZFxuICAgICAgY3VycmVudC5wcmV2aW91cyA9IHVuZGVmaW5lZFxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dFxuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHAgR0MuXG4gIHRva2VuaXplci5ldmVudHMgPSBbXVxuXG4gIC8vIElmIHRoZXJlXHUyMDE5cyBvbmUgbW9yZSB0b2tlbiAod2hpY2ggaXMgdGhlIGNhc2VzIGZvciBsaW5lcyB0aGF0IGVuZCBpbiBhblxuICAvLyBFT0YpLCB0aGF0XHUyMDE5cyBwZXJmZWN0OiB0aGUgbGFzdCBwb2ludCB3ZSBmb3VuZCBzdGFydHMgaXQuXG4gIC8vIElmIHRoZXJlIGlzblx1MjAxOXQgdGhlbiBtYWtlIHN1cmUgYW55IHJlbWFpbmluZyBjb250ZW50IGlzIGFkZGVkIHRvIGl0LlxuICBpZiAoY3VycmVudCkge1xuICAgIC8vIEhlbHAgR0MuXG4gICAgY3VycmVudC5fdG9rZW5pemVyID0gdW5kZWZpbmVkXG4gICAgY3VycmVudC5wcmV2aW91cyA9IHVuZGVmaW5lZFxuICB9IGVsc2Uge1xuICAgIGJyZWFrcy5wb3AoKVxuICB9XG5cbiAgLy8gTm93IHNwbGljZSB0aGUgZXZlbnRzIGZyb20gdGhlIHN1YnRva2VuaXplciBpbnRvIHRoZSBjdXJyZW50IGV2ZW50cyxcbiAgLy8gbW92aW5nIGJhY2sgdG8gZnJvbnQgc28gdGhhdCBzcGxpY2UgaW5kaWNlcyBhcmVuXHUyMDE5dCBhZmZlY3RlZC5cbiAgaW5kZXggPSBicmVha3MubGVuZ3RoXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgY29uc3Qgc2xpY2UgPSBjaGlsZEV2ZW50cy5zbGljZShicmVha3NbaW5kZXhdLCBicmVha3NbaW5kZXggKyAxXSlcbiAgICBjb25zdCBzdGFydCA9IHN0YXJ0UG9zaXRpb25zLnBvcCgpXG4gICAganVtcHMudW5zaGlmdChbc3RhcnQsIHN0YXJ0ICsgc2xpY2UubGVuZ3RoIC0gMV0pXG4gICAgc3BsaWNlKGV2ZW50cywgc3RhcnQsIDIsIHNsaWNlKVxuICB9XG4gIGluZGV4ID0gLTFcbiAgd2hpbGUgKCsraW5kZXggPCBqdW1wcy5sZW5ndGgpIHtcbiAgICBnYXBzW2FkanVzdCArIGp1bXBzW2luZGV4XVswXV0gPSBhZGp1c3QgKyBqdW1wc1tpbmRleF1bMV1cbiAgICBhZGp1c3QgKz0ganVtcHNbaW5kZXhdWzFdIC0ganVtcHNbaW5kZXhdWzBdIC0gMVxuICB9XG4gIHJldHVybiBnYXBzXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlJlc29sdmVyfSBSZXNvbHZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmd9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7c3VidG9rZW5pemV9IGZyb20gJ21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplJ1xuLyoqXG4gKiBObyBuYW1lIGJlY2F1c2UgaXQgbXVzdCBub3QgYmUgdHVybmVkIG9mZi5cbiAqIEB0eXBlIHtDb25zdHJ1Y3R9XG4gKi9cbmV4cG9ydCBjb25zdCBjb250ZW50ID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVDb250ZW50LFxuICByZXNvbHZlOiByZXNvbHZlQ29udGVudFxufVxuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IGNvbnRpbnVhdGlvbkNvbnN0cnVjdCA9IHtcbiAgdG9rZW5pemU6IHRva2VuaXplQ29udGludWF0aW9uLFxuICBwYXJ0aWFsOiB0cnVlXG59XG5cbi8qKlxuICogQ29udGVudCBpcyB0cmFuc3BhcmVudDogaXRcdTIwMTlzIHBhcnNlZCByaWdodCBub3cuIFRoYXQgd2F5LCBkZWZpbml0aW9ucyBhcmUgYWxzb1xuICogcGFyc2VkIHJpZ2h0IG5vdzogYmVmb3JlIHRleHQgaW4gcGFyYWdyYXBocyAoc3BlY2lmaWNhbGx5LCBtZWRpYSkgYXJlIHBhcnNlZC5cbiAqXG4gKiBAdHlwZSB7UmVzb2x2ZXJ9XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVDb250ZW50KGV2ZW50cykge1xuICBzdWJ0b2tlbml6ZShldmVudHMpXG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVDb250ZW50KGVmZmVjdHMsIG9rKSB7XG4gIC8qKiBAdHlwZSB7VG9rZW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBwcmV2aW91c1xuICByZXR1cm4gY2h1bmtTdGFydFxuXG4gIC8qKlxuICAgKiBCZWZvcmUgYSBjb250ZW50IGNodW5rLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYWJjXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjaHVua1N0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKCdjb250ZW50JylcbiAgICBwcmV2aW91cyA9IGVmZmVjdHMuZW50ZXIoJ2NodW5rQ29udGVudCcsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnY29udGVudCdcbiAgICB9KVxuICAgIHJldHVybiBjaHVua0luc2lkZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGEgY29udGVudCBjaHVuay5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGFiY1xuICAgKiAgICAgXl5eXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjaHVua0luc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBjb250ZW50RW5kKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gVG8gZG86IGluIGBtYXJrZG93bi1yc2AsIGVhY2ggbGluZSBpcyBwYXJzZWQgb24gaXRzIG93biwgYW5kIGV2ZXJ5dGhpbmdcbiAgICAvLyBpcyBzdGl0Y2hlZCB0b2dldGhlciByZXNvbHZpbmcuXG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2soXG4gICAgICAgIGNvbnRpbnVhdGlvbkNvbnN0cnVjdCxcbiAgICAgICAgY29udGVudENvbnRpbnVlLFxuICAgICAgICBjb250ZW50RW5kXG4gICAgICApKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gRGF0YS5cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY2h1bmtJbnNpZGVcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250ZW50RW5kKGNvZGUpIHtcbiAgICBlZmZlY3RzLmV4aXQoJ2NodW5rQ29udGVudCcpXG4gICAgZWZmZWN0cy5leGl0KCdjb250ZW50JylcbiAgICByZXR1cm4gb2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250ZW50Q29udGludWUoY29kZSkge1xuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCgnY2h1bmtDb250ZW50JylcbiAgICBwcmV2aW91cy5uZXh0ID0gZWZmZWN0cy5lbnRlcignY2h1bmtDb250ZW50Jywge1xuICAgICAgY29udGVudFR5cGU6ICdjb250ZW50JyxcbiAgICAgIHByZXZpb3VzXG4gICAgfSlcbiAgICBwcmV2aW91cyA9IHByZXZpb3VzLm5leHRcbiAgICByZXR1cm4gY2h1bmtJbnNpZGVcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUNvbnRpbnVhdGlvbihlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHJldHVybiBzdGFydExvb2thaGVhZFxuXG4gIC8qKlxuICAgKlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydExvb2thaGVhZChjb2RlKSB7XG4gICAgZWZmZWN0cy5leGl0KCdjaHVua0NvbnRlbnQnKVxuICAgIGVmZmVjdHMuZW50ZXIoJ2xpbmVFbmRpbmcnKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCgnbGluZUVuZGluZycpXG4gICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBwcmVmaXhlZCwgJ2xpbmVQcmVmaXgnKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHByZWZpeGVkKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuXG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdXG4gICAgaWYgKFxuICAgICAgIXNlbGYucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCdjb2RlSW5kZW50ZWQnKSAmJlxuICAgICAgdGFpbCAmJlxuICAgICAgdGFpbFsxXS50eXBlID09PSAnbGluZVByZWZpeCcgJiZcbiAgICAgIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID49IDRcbiAgICApIHtcbiAgICAgIHJldHVybiBvayhjb2RlKVxuICAgIH1cbiAgICByZXR1cm4gZWZmZWN0cy5pbnRlcnJ1cHQoc2VsZi5wYXJzZXIuY29uc3RydWN0cy5mbG93LCBub2ssIG9rKShjb2RlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkVmZmVjdHN9IEVmZmVjdHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuVHlwZX0gVG9rZW5UeXBlXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNjaWlDb250cm9sLFxuICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlLFxuICBtYXJrZG93bkxpbmVFbmRpbmdcbn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuLyoqXG4gKiBQYXJzZSBkZXN0aW5hdGlvbnMuXG4gKlxuICogIyMjIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgbWFya2Rvd25cbiAqIDxhPlxuICogPGFcXD5iPlxuICogPGEgYj5cbiAqIDxhKT5cbiAqIGFcbiAqIGFcXCliXG4gKiBhKGIpY1xuICogYShiKVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtFZmZlY3RzfSBlZmZlY3RzXG4gKiAgIENvbnRleHQuXG4gKiBAcGFyYW0ge1N0YXRlfSBva1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0ge1N0YXRlfSBub2tcbiAqICAgU3RhdGUgc3dpdGNoZWQgdG8gd2hlbiB1bnN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gdHlwZVxuICogICBUeXBlIGZvciB3aG9sZSAoYDxhPmAgb3IgYGJgKS5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSBsaXRlcmFsVHlwZVxuICogICBUeXBlIHdoZW4gZW5jbG9zZWQgKGA8YT5gKS5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSBsaXRlcmFsTWFya2VyVHlwZVxuICogICBUeXBlIGZvciBlbmNsb3NpbmcgKGA8YCBhbmQgYD5gKS5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSByYXdUeXBlXG4gKiAgIFR5cGUgd2hlbiBub3QgZW5jbG9zZWQgKGBiYCkuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gc3RyaW5nVHlwZVxuICogICBUeXBlIGZvciB0aGUgdmFsdWUgKGBhYCBvciBgYmApLlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IFttYXg9SW5maW5pdHldXG4gKiAgIERlcHRoIG9mIG5lc3RlZCBwYXJlbnMgKGluY2x1c2l2ZSkuXG4gKiBAcmV0dXJucyB7U3RhdGV9XG4gKiAgIFN0YXJ0IHN0YXRlLlxuICovIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtcGFyYW1zXG5leHBvcnQgZnVuY3Rpb24gZmFjdG9yeURlc3RpbmF0aW9uKFxuICBlZmZlY3RzLFxuICBvayxcbiAgbm9rLFxuICB0eXBlLFxuICBsaXRlcmFsVHlwZSxcbiAgbGl0ZXJhbE1hcmtlclR5cGUsXG4gIHJhd1R5cGUsXG4gIHN0cmluZ1R5cGUsXG4gIG1heFxuKSB7XG4gIGNvbnN0IGxpbWl0ID0gbWF4IHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWVxuICBsZXQgYmFsYW5jZSA9IDBcbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGFhPlxuICAgKiAgICAgXlxuICAgKiA+IHwgYWFcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjApIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZSlcbiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbFR5cGUpXG4gICAgICBlZmZlY3RzLmVudGVyKGxpdGVyYWxNYXJrZXJUeXBlKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQobGl0ZXJhbE1hcmtlclR5cGUpXG4gICAgICByZXR1cm4gZW5jbG9zZWRCZWZvcmVcbiAgICB9XG5cbiAgICAvLyBBU0NJSSBjb250cm9sLCBzcGFjZSwgY2xvc2luZyBwYXJlbi5cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSAzMiB8fCBjb2RlID09PSA0MSB8fCBhc2NpaUNvbnRyb2woY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG4gICAgZWZmZWN0cy5lbnRlcih0eXBlKVxuICAgIGVmZmVjdHMuZW50ZXIocmF3VHlwZSlcbiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpXG4gICAgZWZmZWN0cy5lbnRlcignY2h1bmtTdHJpbmcnLCB7XG4gICAgICBjb250ZW50VHlwZTogJ3N0cmluZydcbiAgICB9KVxuICAgIHJldHVybiByYXcoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPGAsIGF0IGFuIGVuY2xvc2VkIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGFhPlxuICAgKiAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGVuY2xvc2VkQmVmb3JlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjIpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbE1hcmtlclR5cGUpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdChsaXRlcmFsTWFya2VyVHlwZSlcbiAgICAgIGVmZmVjdHMuZXhpdChsaXRlcmFsVHlwZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSlcbiAgICBlZmZlY3RzLmVudGVyKCdjaHVua1N0cmluZycsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnc3RyaW5nJ1xuICAgIH0pXG4gICAgcmV0dXJuIGVuY2xvc2VkKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gZW5jbG9zZWQgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YWE+XG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW5jbG9zZWQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA2Mikge1xuICAgICAgZWZmZWN0cy5leGl0KCdjaHVua1N0cmluZycpXG4gICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSlcbiAgICAgIHJldHVybiBlbmNsb3NlZEJlZm9yZShjb2RlKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBjb2RlID09PSA2MCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIGNvZGUgPT09IDkyID8gZW5jbG9zZWRFc2NhcGUgOiBlbmNsb3NlZFxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGBcXGAsIGF0IGEgc3BlY2lhbCBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YVxcKmE+XG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBlbmNsb3NlZEVzY2FwZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDYwIHx8IGNvZGUgPT09IDYyIHx8IGNvZGUgPT09IDkyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBlbmNsb3NlZFxuICAgIH1cbiAgICByZXR1cm4gZW5jbG9zZWQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByYXcgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmF3KGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICAhYmFsYW5jZSAmJlxuICAgICAgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gNDEgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSlcbiAgICApIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnY2h1bmtTdHJpbmcnKVxuICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpXG4gICAgICBlZmZlY3RzLmV4aXQocmF3VHlwZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlKVxuICAgICAgcmV0dXJuIG9rKGNvZGUpXG4gICAgfVxuICAgIGlmIChiYWxhbmNlIDwgbGltaXQgJiYgY29kZSA9PT0gNDApIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgYmFsYW5jZSsrXG4gICAgICByZXR1cm4gcmF3XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA0MSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBiYWxhbmNlLS1cbiAgICAgIHJldHVybiByYXdcbiAgICB9XG5cbiAgICAvLyBBU0NJSSBjb250cm9sIChidXQgKm5vdCogYFxcMGApIGFuZCBzcGFjZSBhbmQgYChgLlxuICAgIC8vIE5vdGU6IGluIGBtYXJrZG93bi1yc2AsIGBcXDBgIGV4aXN0cyBpbiBjb2RlcywgaW4gYG1pY3JvbWFyay1qc2AgaXRcbiAgICAvLyBkb2Vzblx1MjAxOXQuXG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gMzIgfHwgY29kZSA9PT0gNDAgfHwgYXNjaWlDb250cm9sKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBjb2RlID09PSA5MiA/IHJhd0VzY2FwZSA6IHJhd1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGBcXGAsIGF0IHNwZWNpYWwgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYVxcKmFcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmF3RXNjYXBlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDAgfHwgY29kZSA9PT0gNDEgfHwgY29kZSA9PT0gOTIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHJhd1xuICAgIH1cbiAgICByZXR1cm4gcmF3KGNvZGUpXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRWZmZWN0c30gRWZmZWN0c1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5UeXBlfSBUb2tlblR5cGVcbiAqL1xuXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZywgbWFya2Rvd25TcGFjZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuLyoqXG4gKiBQYXJzZSBsYWJlbHMuXG4gKlxuICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGxhYmVscyBpbiBtYXJrZG93biBhcmUgY2FwcGVkIGF0IDk5OSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcuXG4gKlxuICogIyMjIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgbWFya2Rvd25cbiAqIFthXVxuICogW2FcbiAqIGJdXG4gKiBbYVxcXWJdXG4gKiBgYGBcbiAqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogICBUb2tlbml6ZSBjb250ZXh0LlxuICogQHBhcmFtIHtFZmZlY3RzfSBlZmZlY3RzXG4gKiAgIENvbnRleHQuXG4gKiBAcGFyYW0ge1N0YXRlfSBva1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0ge1N0YXRlfSBub2tcbiAqICAgU3RhdGUgc3dpdGNoZWQgdG8gd2hlbiB1bnN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0ge1Rva2VuVHlwZX0gdHlwZVxuICogICBUeXBlIG9mIHRoZSB3aG9sZSBsYWJlbCAoYFthXWApLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IG1hcmtlclR5cGVcbiAqICAgVHlwZSBmb3IgdGhlIG1hcmtlcnMgKGBbYCBhbmQgYF1gKS5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSBzdHJpbmdUeXBlXG4gKiAgIFR5cGUgZm9yIHRoZSBpZGVudGlmaWVyIChgYWApLlxuICogQHJldHVybnMge1N0YXRlfVxuICogICBTdGFydCBzdGF0ZS5cbiAqLyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuZXhwb3J0IGZ1bmN0aW9uIGZhY3RvcnlMYWJlbChlZmZlY3RzLCBvaywgbm9rLCB0eXBlLCBtYXJrZXJUeXBlLCBzdHJpbmdUeXBlKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGxldCBzaXplID0gMFxuICAvKiogQHR5cGUge2Jvb2xlYW59ICovXG4gIGxldCBzZWVuXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBsYWJlbC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIodHlwZSlcbiAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KG1hcmtlclR5cGUpXG4gICAgZWZmZWN0cy5lbnRlcihzdHJpbmdUeXBlKVxuICAgIHJldHVybiBhdEJyZWFrXG4gIH1cblxuICAvKipcbiAgICogSW4gbGFiZWwsIGF0IHNvbWV0aGluZywgYmVmb3JlIHNvbWV0aGluZyBlbHNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlKSB7XG4gICAgaWYgKFxuICAgICAgc2l6ZSA+IDk5OSB8fFxuICAgICAgY29kZSA9PT0gbnVsbCB8fFxuICAgICAgY29kZSA9PT0gOTEgfHxcbiAgICAgIChjb2RlID09PSA5MyAmJiAhc2VlbikgfHxcbiAgICAgIC8vIFRvIGRvOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSBvbmNlIHdlXHUyMDE5dmUgc3dpdGNoZWQgZnJvbVxuICAgICAgLy8gYG1pY3JvbWFyay1leHRlbnNpb24tZm9vdG5vdGVgIHRvIGBtaWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZWAsXG4gICAgICAvLyB3aGljaCBkb2Vzblx1MjAxOXQgbmVlZCB0aGlzLlxuICAgICAgLy8gSGlkZGVuIGZvb3Rub3RlcyBob29rLlxuICAgICAgLyogYzggaWdub3JlIG5leHQgMyAqL1xuICAgICAgKGNvZGUgPT09IDk0ICYmXG4gICAgICAgICFzaXplICYmXG4gICAgICAgICdfaGlkZGVuRm9vdG5vdGVTdXBwb3J0JyBpbiBzZWxmLnBhcnNlci5jb25zdHJ1Y3RzKVxuICAgICkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gOTMpIHtcbiAgICAgIGVmZmVjdHMuZXhpdChzdHJpbmdUeXBlKVxuICAgICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQobWFya2VyVHlwZSlcbiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuXG4gICAgLy8gVG8gZG86IGluZGVudD8gTGluayBjaHVua3MgYW5kIEVPTHMgdG9nZXRoZXI/XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcignbGluZUVuZGluZycpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCgnbGluZUVuZGluZycpXG4gICAgICByZXR1cm4gYXRCcmVha1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdjaHVua1N0cmluZycsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnc3RyaW5nJ1xuICAgIH0pXG4gICAgcmV0dXJuIGxhYmVsSW5zaWRlKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gbGFiZWwsIGluIHRleHQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV1cbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsYWJlbEluc2lkZShjb2RlKSB7XG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gbnVsbCB8fFxuICAgICAgY29kZSA9PT0gOTEgfHxcbiAgICAgIGNvZGUgPT09IDkzIHx8XG4gICAgICBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkgfHxcbiAgICAgIHNpemUrKyA+IDk5OVxuICAgICkge1xuICAgICAgZWZmZWN0cy5leGl0KCdjaHVua1N0cmluZycpXG4gICAgICByZXR1cm4gYXRCcmVhayhjb2RlKVxuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBpZiAoIXNlZW4pIHNlZW4gPSAhbWFya2Rvd25TcGFjZShjb2RlKVxuICAgIHJldHVybiBjb2RlID09PSA5MiA/IGxhYmVsRXNjYXBlIDogbGFiZWxJbnNpZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXFxgLCBhdCBhIHNwZWNpYWwgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FcXCphXVxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGFiZWxFc2NhcGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA5MSB8fCBjb2RlID09PSA5MiB8fCBjb2RlID09PSA5Mykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBzaXplKytcbiAgICAgIHJldHVybiBsYWJlbEluc2lkZVxuICAgIH1cbiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZSlcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db2RlfSBDb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkVmZmVjdHN9IEVmZmVjdHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuVHlwZX0gVG9rZW5UeXBlXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmd9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcidcbi8qKlxuICogUGFyc2UgdGl0bGVzLlxuICpcbiAqICMjIyMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYG1hcmtkb3duXG4gKiBcImFcIlxuICogJ2InXG4gKiAoYylcbiAqIFwiYVxuICogYlwiXG4gKiAnYVxuICogICAgIGInXG4gKiAoYVxcKWIpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge0VmZmVjdHN9IGVmZmVjdHNcbiAqICAgQ29udGV4dC5cbiAqIEBwYXJhbSB7U3RhdGV9IG9rXG4gKiAgIFN0YXRlIHN3aXRjaGVkIHRvIHdoZW4gc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7U3RhdGV9IG5va1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHVuc3VjY2Vzc2Z1bC5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSB0eXBlXG4gKiAgIFR5cGUgb2YgdGhlIHdob2xlIHRpdGxlIChgXCJhXCJgLCBgJ2InYCwgYChjKWApLlxuICogQHBhcmFtIHtUb2tlblR5cGV9IG1hcmtlclR5cGVcbiAqICAgVHlwZSBmb3IgdGhlIG1hcmtlcnMgKGBcImAsIGAnYCwgYChgLCBhbmQgYClgKS5cbiAqIEBwYXJhbSB7VG9rZW5UeXBlfSBzdHJpbmdUeXBlXG4gKiAgIFR5cGUgZm9yIHRoZSB2YWx1ZSAoYGFgKS5cbiAqIEByZXR1cm5zIHtTdGF0ZX1cbiAqICAgU3RhcnQgc3RhdGUuXG4gKi8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbmV4cG9ydCBmdW5jdGlvbiBmYWN0b3J5VGl0bGUoZWZmZWN0cywgb2ssIG5vaywgdHlwZSwgbWFya2VyVHlwZSwgc3RyaW5nVHlwZSkge1xuICAvKiogQHR5cGUge05vbk51bGxhYmxlPENvZGU+fSAqL1xuICBsZXQgbWFya2VyXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiB0aXRsZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFwiYVwiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDM0IHx8IGNvZGUgPT09IDM5IHx8IGNvZGUgPT09IDQwKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKHR5cGUpXG4gICAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKVxuICAgICAgbWFya2VyID0gY29kZSA9PT0gNDAgPyA0MSA6IGNvZGVcbiAgICAgIHJldHVybiBiZWdpblxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgb3BlbmluZyBtYXJrZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgYWxzbyB1c2VkIGF0IHRoZSBjbG9zaW5nIG1hcmtlci5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFwiYVwiXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmVnaW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBtYXJrZXIpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSlcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KG1hcmtlclR5cGUpXG4gICAgICBlZmZlY3RzLmV4aXQodHlwZSlcbiAgICAgIHJldHVybiBva1xuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpXG4gICAgcmV0dXJuIGF0QnJlYWsoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdCBzb21ldGhpbmcsIGJlZm9yZSBzb21ldGhpbmcgZWxzZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFwiYVwiXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpXG4gICAgICByZXR1cm4gYmVnaW4obWFya2VyKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cblxuICAgIC8vIE5vdGU6IGJsYW5rIGxpbmVzIGNhblx1MjAxOXQgZXhpc3QgaW4gY29udGVudC5cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICAvLyBUbyBkbzogdXNlIGBzcGFjZV9vcl90YWJfZW9sX3dpdGhfb3B0aW9uc2AsIGNvbm5lY3QuXG4gICAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdsaW5lRW5kaW5nJylcbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYXRCcmVhaywgJ2xpbmVQcmVmaXgnKVxuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdjaHVua1N0cmluZycsIHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnc3RyaW5nJ1xuICAgIH0pXG4gICAgcmV0dXJuIGluc2lkZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlciB8fCBjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KCdjaHVua1N0cmluZycpXG4gICAgICByZXR1cm4gYXRCcmVhayhjb2RlKVxuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY29kZSA9PT0gOTIgPyBlc2NhcGUgOiBpbnNpZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXFxgLCBhdCBhIHNwZWNpYWwgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgXCJhXFwqYlwiXG4gICAqICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZXNjYXBlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyIHx8IGNvZGUgPT09IDkyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBpbnNpZGVcbiAgICB9XG4gICAgcmV0dXJuIGluc2lkZShjb2RlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkVmZmVjdHN9IEVmZmVjdHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmcsIG1hcmtkb3duU3BhY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcidcbi8qKlxuICogUGFyc2Ugc3BhY2VzIGFuZCB0YWJzLlxuICpcbiAqIFRoZXJlIGlzIG5vIGBub2tgIHBhcmFtZXRlcjpcbiAqXG4gKiAqICAgbGluZSBlbmRpbmdzIG9yIHNwYWNlcyBpbiBtYXJrZG93biBhcmUgb2Z0ZW4gb3B0aW9uYWwsIGluIHdoaWNoIGNhc2UgdGhpc1xuICogICAgIGZhY3RvcnkgY2FuIGJlIHVzZWQgYW5kIGBva2Agd2lsbCBiZSBzd2l0Y2hlZCB0byB3aGV0aGVyIHNwYWNlcyB3ZXJlIGZvdW5kXG4gKiAgICAgb3Igbm90XG4gKiAqICAgb25lIGxpbmUgZW5kaW5nIG9yIHNwYWNlIGNhbiBiZSBkZXRlY3RlZCB3aXRoXG4gKiAgICAgYG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSlgIHJpZ2h0IGJlZm9yZSB1c2luZyBgZmFjdG9yeVdoaXRlc3BhY2VgXG4gKlxuICogQHBhcmFtIHtFZmZlY3RzfSBlZmZlY3RzXG4gKiAgIENvbnRleHQuXG4gKiBAcGFyYW0ge1N0YXRlfSBva1xuICogICBTdGF0ZSBzd2l0Y2hlZCB0byB3aGVuIHN1Y2Nlc3NmdWwuXG4gKiBAcmV0dXJuc1xuICogICBTdGFydCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rKSB7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IHNlZW5cbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2xpbmVFbmRpbmcnKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2xpbmVFbmRpbmcnKVxuICAgICAgc2VlbiA9IHRydWVcbiAgICAgIHJldHVybiBzdGFydFxuICAgIH1cbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHNlZW4gPyAnbGluZVByZWZpeCcgOiAnbGluZVN1ZmZpeCdcbiAgICAgICkoY29kZSlcbiAgICB9XG4gICAgcmV0dXJuIG9rKGNvZGUpXG4gIH1cbn1cbiIsICIvKipcbiAqIE5vcm1hbGl6ZSBhbiBpZGVudGlmaWVyIChhcyBmb3VuZCBpbiByZWZlcmVuY2VzLCBkZWZpbml0aW9ucykuXG4gKlxuICogQ29sbGFwc2VzIG1hcmtkb3duIHdoaXRlc3BhY2UsIHRyaW0sIGFuZCB0aGVuIGxvd2VyLSBhbmQgdXBwZXJjYXNlLlxuICpcbiAqIFNvbWUgY2hhcmFjdGVycyBhcmUgY29uc2lkZXJlZCBcdTIwMUN1cHBlcmNhc2VcdTIwMUQsIHN1Y2ggYXMgVSswM0Y0IChgXHUwM0Y0YCksIGJ1dCBpZiB0aGVpclxuICogbG93ZXJjYXNlIGNvdW50ZXJwYXJ0IChVKzAzQjggKGBcdTAzQjhgKSkgaXMgdXBwZXJjYXNlZCB3aWxsIHJlc3VsdCBpbiBhIGRpZmZlcmVudFxuICogdXBwZXJjYXNlIGNoYXJhY3RlciAoVSswMzk4IChgXHUwMzk4YCkpLlxuICogU28sIHRvIGdldCBhIGNhbm9uaWNhbCBmb3JtLCB3ZSBwZXJmb3JtIGJvdGggbG93ZXItIGFuZCB1cHBlcmNhc2UuXG4gKlxuICogVXNpbmcgdXBwZXJjYXNlIGxhc3QgbWFrZXMgc3VyZSBrZXlzIHdpbGwgbmV2ZXIgaW50ZXJhY3Qgd2l0aCBkZWZhdWx0XG4gKiBwcm90b3R5cGFsIHZhbHVlcyAoc3VjaCBhcyBgY29uc3RydWN0b3JgKTogbm90aGluZyBpbiB0aGUgcHJvdG90eXBlIG9mXG4gKiBgT2JqZWN0YCBpcyB1cHBlcmNhc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgIElkZW50aWZpZXIgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgTm9ybWFsaXplZCBpZGVudGlmaWVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSWRlbnRpZmllcih2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlXG4gICAgICAvLyBDb2xsYXBzZSBtYXJrZG93biB3aGl0ZXNwYWNlLlxuICAgICAgLnJlcGxhY2UoL1tcXHRcXG5cXHIgXSsvZywgJyAnKVxuICAgICAgLy8gVHJpbS5cbiAgICAgIC5yZXBsYWNlKC9eIHwgJC9nLCAnJylcbiAgICAgIC8vIFNvbWUgY2hhcmFjdGVycyBhcmUgY29uc2lkZXJlZCBcdTIwMUN1cHBlcmNhc2VcdTIwMUQsIGJ1dCBpZiB0aGVpciBsb3dlcmNhc2VcbiAgICAgIC8vIGNvdW50ZXJwYXJ0IGlzIHVwcGVyY2FzZWQgd2lsbCByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdXBwZXJjYXNlXG4gICAgICAvLyBjaGFyYWN0ZXIuXG4gICAgICAvLyBIZW5jZSwgdG8gZ2V0IHRoYXQgZm9ybSwgd2UgcGVyZm9ybSBib3RoIGxvd2VyLSBhbmQgdXBwZXJjYXNlLlxuICAgICAgLy8gVXBwZXIgY2FzZSBtYWtlcyBzdXJlIGtleXMgd2lsbCBub3QgaW50ZXJhY3Qgd2l0aCBkZWZhdWx0IHByb3RvdHlwYWxcbiAgICAgIC8vIG1ldGhvZHM6IG5vIG1ldGhvZCBpcyB1cHBlcmNhc2UuXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnRvVXBwZXJDYXNlKClcbiAgKVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlEZXN0aW5hdGlvbn0gZnJvbSAnbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24nXG5pbXBvcnQge2ZhY3RvcnlMYWJlbH0gZnJvbSAnbWljcm9tYXJrLWZhY3RvcnktbGFiZWwnXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge2ZhY3RvcnlUaXRsZX0gZnJvbSAnbWljcm9tYXJrLWZhY3RvcnktdGl0bGUnXG5pbXBvcnQge2ZhY3RvcnlXaGl0ZXNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS13aGl0ZXNwYWNlJ1xuaW1wb3J0IHtcbiAgbWFya2Rvd25MaW5lRW5kaW5nLFxuICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlLFxuICBtYXJrZG93blNwYWNlXG59IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7bm9ybWFsaXplSWRlbnRpZmllcn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXInXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBkZWZpbml0aW9uID0ge1xuICBuYW1lOiAnZGVmaW5pdGlvbicsXG4gIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb25cbn1cblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCB0aXRsZUJlZm9yZSA9IHtcbiAgdG9rZW5pemU6IHRva2VuaXplVGl0bGVCZWZvcmUsXG4gIHBhcnRpYWw6IHRydWVcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxldCBpZGVudGlmaWVyXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBBdCBzdGFydCBvZiBhIGRlZmluaXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGIgXCJjXCJcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICAvLyBEbyBub3QgaW50ZXJydXB0IHBhcmFncmFwaHMgKGJ1dCBkbyBmb2xsb3cgZGVmaW5pdGlvbnMpLlxuICAgIC8vIFRvIGRvOiBkbyBgaW50ZXJydXB0YCB0aGUgd2F5IGBtYXJrZG93bi1yc2AgZG9lcy5cbiAgICAvLyBUbyBkbzogcGFyc2Ugd2hpdGVzcGFjZSB0aGUgd2F5IGBtYXJrZG93bi1yc2AgZG9lcy5cbiAgICBlZmZlY3RzLmVudGVyKCdkZWZpbml0aW9uJylcbiAgICByZXR1cm4gYmVmb3JlKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZSwgYXQgYFtgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWZvcmUoY29kZSkge1xuICAgIC8vIFRvIGRvOiBwYXJzZSB3aGl0ZXNwYWNlIHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuXG4gICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKFxuICAgICAgc2VsZixcbiAgICAgIGVmZmVjdHMsXG4gICAgICBsYWJlbEFmdGVyLFxuICAgICAgLy8gTm90ZTogd2UgZG9uXHUyMDE5dCBuZWVkIHRvIHJlc2V0IHRoZSB3YXkgYG1hcmtkb3duLXJzYCBkb2VzLlxuICAgICAgbm9rLFxuICAgICAgJ2RlZmluaXRpb25MYWJlbCcsXG4gICAgICAnZGVmaW5pdGlvbkxhYmVsTWFya2VyJyxcbiAgICAgICdkZWZpbml0aW9uTGFiZWxTdHJpbmcnXG4gICAgKShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGxhYmVsLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdOiBiIFwiY1wiXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsYWJlbEFmdGVyKGNvZGUpIHtcbiAgICBpZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihcbiAgICAgIHNlbGYuc2xpY2VTZXJpYWxpemUoc2VsZi5ldmVudHNbc2VsZi5ldmVudHMubGVuZ3RoIC0gMV1bMV0pLnNsaWNlKDEsIC0xKVxuICAgIClcbiAgICBpZiAoY29kZSA9PT0gNTgpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2RlZmluaXRpb25NYXJrZXInKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2RlZmluaXRpb25NYXJrZXInKVxuICAgICAgcmV0dXJuIG1hcmtlckFmdGVyXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBtYXJrZXIuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGIgXCJjXCJcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBtYXJrZXJBZnRlcihjb2RlKSB7XG4gICAgLy8gTm90ZTogd2hpdGVzcGFjZSBpcyBvcHRpb25hbC5cbiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKVxuICAgICAgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCBkZXN0aW5hdGlvbkJlZm9yZSkoY29kZSlcbiAgICAgIDogZGVzdGluYXRpb25CZWZvcmUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGIgXCJjXCJcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVzdGluYXRpb25CZWZvcmUoY29kZSkge1xuICAgIHJldHVybiBmYWN0b3J5RGVzdGluYXRpb24oXG4gICAgICBlZmZlY3RzLFxuICAgICAgZGVzdGluYXRpb25BZnRlcixcbiAgICAgIC8vIE5vdGU6IHdlIGRvblx1MjAxOXQgbmVlZCB0byByZXNldCB0aGUgd2F5IGBtYXJrZG93bi1yc2AgZG9lcy5cbiAgICAgIG5vayxcbiAgICAgICdkZWZpbml0aW9uRGVzdGluYXRpb24nLFxuICAgICAgJ2RlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWwnLFxuICAgICAgJ2RlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXInLFxuICAgICAgJ2RlZmluaXRpb25EZXN0aW5hdGlvblJhdycsXG4gICAgICAnZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nJ1xuICAgICkoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBkZXN0aW5hdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVzdGluYXRpb25BZnRlcihjb2RlKSB7XG4gICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdCh0aXRsZUJlZm9yZSwgYWZ0ZXIsIGFmdGVyKShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRlZmluaXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGJcbiAgICogICAgICAgICAgIF5cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlKVxuICAgICAgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXJXaGl0ZXNwYWNlLCAnd2hpdGVzcGFjZScpKGNvZGUpXG4gICAgICA6IGFmdGVyV2hpdGVzcGFjZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRlZmluaXRpb24sIGFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGJcbiAgICogICAgICAgICAgIF5cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyV2hpdGVzcGFjZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoJ2RlZmluaXRpb24nKVxuXG4gICAgICAvLyBOb3RlOiB3ZSBkb25cdTIwMTl0IGNhcmUgYWJvdXQgdW5pcXVlbmVzcy5cbiAgICAgIC8vIEl0XHUyMDE5cyBsaWtlbHkgdGhhdCB0aGF0IGRvZXNuXHUyMDE5dCBoYXBwZW4gdmVyeSBmcmVxdWVudGx5LlxuICAgICAgLy8gSXQgaXMgbW9yZSBsaWtlbHkgdGhhdCBpdCB3YXN0ZXMgcHJlY2lvdXMgdGltZS5cbiAgICAgIHNlbGYucGFyc2VyLmRlZmluZWQucHVzaChpZGVudGlmaWVyKVxuXG4gICAgICAvLyBUbyBkbzogYG1hcmtkb3duLXJzYCBpbnRlcnJ1cHQuXG4gICAgICAvLyAvLyBZb3VcdTIwMTlkIGJlIGludGVycnVwdGluZy5cbiAgICAgIC8vIHRva2VuaXplci5pbnRlcnJ1cHQgPSB0cnVlXG4gICAgICByZXR1cm4gb2soY29kZSlcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplVGl0bGVCZWZvcmUoZWZmZWN0cywgb2ssIG5vaykge1xuICByZXR1cm4gdGl0bGVCZWZvcmVcblxuICAvKipcbiAgICogQWZ0ZXIgZGVzdGluYXRpb24sIGF0IHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV06IGJcbiAgICogICAgICAgICAgIF5cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGl0bGVCZWZvcmUoY29kZSkge1xuICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIGJlZm9yZU1hcmtlcikoY29kZSlcbiAgICAgIDogbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgdGl0bGUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCBbYV06IGJcbiAgICogPiB8IFwiY1wiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWZvcmVNYXJrZXIoY29kZSkge1xuICAgIHJldHVybiBmYWN0b3J5VGl0bGUoXG4gICAgICBlZmZlY3RzLFxuICAgICAgdGl0bGVBZnRlcixcbiAgICAgIG5vayxcbiAgICAgICdkZWZpbml0aW9uVGl0bGUnLFxuICAgICAgJ2RlZmluaXRpb25UaXRsZU1hcmtlcicsXG4gICAgICAnZGVmaW5pdGlvblRpdGxlU3RyaW5nJ1xuICAgICkoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciB0aXRsZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRpdGxlQWZ0ZXIoY29kZSkge1xuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCB0aXRsZUFmdGVyT3B0aW9uYWxXaGl0ZXNwYWNlLCAnd2hpdGVzcGFjZScpKGNvZGUpXG4gICAgICA6IHRpdGxlQWZ0ZXJPcHRpb25hbFdoaXRlc3BhY2UoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciB0aXRsZSwgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXTogYiBcImNcIlxuICAgKiAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRpdGxlQWZ0ZXJPcHRpb25hbFdoaXRlc3BhY2UoY29kZSkge1xuICAgIHJldHVybiBjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSA/IG9rKGNvZGUpIDogbm9rKGNvZGUpXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHttYXJrZG93bkxpbmVFbmRpbmd9IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcidcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGhhcmRCcmVha0VzY2FwZSA9IHtcbiAgbmFtZTogJ2hhcmRCcmVha0VzY2FwZScsXG4gIHRva2VuaXplOiB0b2tlbml6ZUhhcmRCcmVha0VzY2FwZVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUhhcmRCcmVha0VzY2FwZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBhIGhhcmQgYnJlYWsgKGVzY2FwZSkuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhXFxcbiAgICogICAgICBeXG4gICAqICAgfCBiXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcignaGFyZEJyZWFrRXNjYXBlJylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gYWZ0ZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXFxgLCBhdCBlb2wuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhXFxcbiAgICogICAgICAgXlxuICAgKiAgIHwgYlxuICAgKiBgYGBcbiAgICpcbiAgICogIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoJ2hhcmRCcmVha0VzY2FwZScpXG4gICAgICByZXR1cm4gb2soY29kZSlcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlJlc29sdmVyfSBSZXNvbHZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5U3BhY2V9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXNwYWNlJ1xuaW1wb3J0IHtcbiAgbWFya2Rvd25MaW5lRW5kaW5nLFxuICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlLFxuICBtYXJrZG93blNwYWNlXG59IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3RlcidcbmltcG9ydCB7c3BsaWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaHVua2VkJ1xuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgaGVhZGluZ0F0eCA9IHtcbiAgbmFtZTogJ2hlYWRpbmdBdHgnLFxuICB0b2tlbml6ZTogdG9rZW5pemVIZWFkaW5nQXR4LFxuICByZXNvbHZlOiByZXNvbHZlSGVhZGluZ0F0eFxufVxuXG4vKiogQHR5cGUge1Jlc29sdmVyfSAqL1xuZnVuY3Rpb24gcmVzb2x2ZUhlYWRpbmdBdHgoZXZlbnRzLCBjb250ZXh0KSB7XG4gIGxldCBjb250ZW50RW5kID0gZXZlbnRzLmxlbmd0aCAtIDJcbiAgbGV0IGNvbnRlbnRTdGFydCA9IDNcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IGNvbnRlbnRcbiAgLyoqIEB0eXBlIHtUb2tlbn0gKi9cbiAgbGV0IHRleHRcblxuICAvLyBQcmVmaXggd2hpdGVzcGFjZSwgcGFydCBvZiB0aGUgb3BlbmluZy5cbiAgaWYgKGV2ZW50c1tjb250ZW50U3RhcnRdWzFdLnR5cGUgPT09ICd3aGl0ZXNwYWNlJykge1xuICAgIGNvbnRlbnRTdGFydCArPSAyXG4gIH1cblxuICAvLyBTdWZmaXggd2hpdGVzcGFjZSwgcGFydCBvZiB0aGUgY2xvc2luZy5cbiAgaWYgKFxuICAgIGNvbnRlbnRFbmQgLSAyID4gY29udGVudFN0YXJ0ICYmXG4gICAgZXZlbnRzW2NvbnRlbnRFbmRdWzFdLnR5cGUgPT09ICd3aGl0ZXNwYWNlJ1xuICApIHtcbiAgICBjb250ZW50RW5kIC09IDJcbiAgfVxuICBpZiAoXG4gICAgZXZlbnRzW2NvbnRlbnRFbmRdWzFdLnR5cGUgPT09ICdhdHhIZWFkaW5nU2VxdWVuY2UnICYmXG4gICAgKGNvbnRlbnRTdGFydCA9PT0gY29udGVudEVuZCAtIDEgfHxcbiAgICAgIChjb250ZW50RW5kIC0gNCA+IGNvbnRlbnRTdGFydCAmJlxuICAgICAgICBldmVudHNbY29udGVudEVuZCAtIDJdWzFdLnR5cGUgPT09ICd3aGl0ZXNwYWNlJykpXG4gICkge1xuICAgIGNvbnRlbnRFbmQgLT0gY29udGVudFN0YXJ0ICsgMSA9PT0gY29udGVudEVuZCA/IDIgOiA0XG4gIH1cbiAgaWYgKGNvbnRlbnRFbmQgPiBjb250ZW50U3RhcnQpIHtcbiAgICBjb250ZW50ID0ge1xuICAgICAgdHlwZTogJ2F0eEhlYWRpbmdUZXh0JyxcbiAgICAgIHN0YXJ0OiBldmVudHNbY29udGVudFN0YXJ0XVsxXS5zdGFydCxcbiAgICAgIGVuZDogZXZlbnRzW2NvbnRlbnRFbmRdWzFdLmVuZFxuICAgIH1cbiAgICB0ZXh0ID0ge1xuICAgICAgdHlwZTogJ2NodW5rVGV4dCcsXG4gICAgICBzdGFydDogZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0uc3RhcnQsXG4gICAgICBlbmQ6IGV2ZW50c1tjb250ZW50RW5kXVsxXS5lbmQsXG4gICAgICBjb250ZW50VHlwZTogJ3RleHQnXG4gICAgfVxuICAgIHNwbGljZShldmVudHMsIGNvbnRlbnRTdGFydCwgY29udGVudEVuZCAtIGNvbnRlbnRTdGFydCArIDEsIFtcbiAgICAgIFsnZW50ZXInLCBjb250ZW50LCBjb250ZXh0XSxcbiAgICAgIFsnZW50ZXInLCB0ZXh0LCBjb250ZXh0XSxcbiAgICAgIFsnZXhpdCcsIHRleHQsIGNvbnRleHRdLFxuICAgICAgWydleGl0JywgY29udGVudCwgY29udGV4dF1cbiAgICBdKVxuICB9XG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVIZWFkaW5nQXR4KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgbGV0IHNpemUgPSAwXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBhIGhlYWRpbmcgKGF0eCkuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAjIyBhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIC8vIFRvIGRvOiBwYXJzZSBpbmRlbnQgbGlrZSBgbWFya2Rvd24tcnNgLlxuICAgIGVmZmVjdHMuZW50ZXIoJ2F0eEhlYWRpbmcnKVxuICAgIHJldHVybiBiZWZvcmUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLCBhdCBgI2AuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAjIyBhYVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmVmb3JlKGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKCdhdHhIZWFkaW5nU2VxdWVuY2UnKVxuICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcGVuaW5nIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgIyMgYWFcbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHNlcXVlbmNlT3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDM1ICYmIHNpemUrKyA8IDYpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHNlcXVlbmNlT3BlblxuICAgIH1cblxuICAgIC8vIEFsd2F5cyBhdCBsZWFzdCBvbmUgYCNgLlxuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnYXR4SGVhZGluZ1NlcXVlbmNlJylcbiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGUpXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBzb21ldGhpbmcsIGJlZm9yZSBzb21ldGhpbmcgZWxzZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICMjIGFhXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGF0QnJlYWsoY29kZSkge1xuICAgIGlmIChjb2RlID09PSAzNSkge1xuICAgICAgZWZmZWN0cy5lbnRlcignYXR4SGVhZGluZ1NlcXVlbmNlJylcbiAgICAgIHJldHVybiBzZXF1ZW5jZUZ1cnRoZXIoY29kZSlcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoJ2F0eEhlYWRpbmcnKVxuICAgICAgLy8gVG8gZG86IGludGVycnVwdCBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgICAvLyAvLyBGZWVsIGZyZWUgdG8gaW50ZXJydXB0LlxuICAgICAgLy8gdG9rZW5pemVyLmludGVycnVwdCA9IGZhbHNlXG4gICAgICByZXR1cm4gb2soY29kZSlcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYXRCcmVhaywgJ3doaXRlc3BhY2UnKShjb2RlKVxuICAgIH1cblxuICAgIC8vIFRvIGRvOiBnZW5lcmF0ZSBgZGF0YWAgdG9rZW5zLCBhZGQgdGhlIGB0ZXh0YCB0b2tlbiBsYXRlci5cbiAgICAvLyBOZWVkcyBlZGl0IG1hcCwgc2VlOiBgbWFya2Rvd24ucnNgLlxuICAgIGVmZmVjdHMuZW50ZXIoJ2F0eEhlYWRpbmdUZXh0JylcbiAgICByZXR1cm4gZGF0YShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGZ1cnRoZXIgc2VxdWVuY2UgKGFmdGVyIHdoaXRlc3BhY2UpLlxuICAgKlxuICAgKiBDb3VsZCBiZSBub3JtYWwgXHUyMDFDdmlzaWJsZVx1MjAxRCBoYXNoZXMgaW4gdGhlIGhlYWRpbmcgb3IgYSBmaW5hbCBzZXF1ZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICMjIGFhICMjXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZUZ1cnRoZXIoY29kZSkge1xuICAgIGlmIChjb2RlID09PSAzNSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gc2VxdWVuY2VGdXJ0aGVyXG4gICAgfVxuICAgIGVmZmVjdHMuZXhpdCgnYXR4SGVhZGluZ1NlcXVlbmNlJylcbiAgICByZXR1cm4gYXRCcmVhayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIHRleHQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCAjIyBhYVxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGF0YShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgY29kZSA9PT0gMzUgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KCdhdHhIZWFkaW5nVGV4dCcpXG4gICAgICByZXR1cm4gYXRCcmVhayhjb2RlKVxuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCAiLyoqXG4gKiBMaXN0IG9mIGxvd2VyY2FzZSBIVE1MIFx1MjAxQ2Jsb2NrXHUyMDFEIHRhZyBuYW1lcy5cbiAqXG4gKiBUaGUgbGlzdCwgd2hlbiBwYXJzaW5nIEhUTUwgKGZsb3cpLCByZXN1bHRzIGluIG1vcmUgcmVsYXhlZCBydWxlcyAoY29uZGl0aW9uXG4gKiA2KS5cbiAqIEJlY2F1c2UgdGhleSBhcmUga25vd24gYmxvY2tzLCB0aGUgSFRNTC1saWtlIHN5bnRheCBkb2Vzblx1MjAxOXQgaGF2ZSB0byBiZVxuICogc3RyaWN0bHkgcGFyc2VkLlxuICogRm9yIHRhZyBuYW1lcyBub3QgaW4gdGhpcyBsaXN0LCBhIG1vcmUgc3RyaWN0IGFsZ29yaXRobSAoY29uZGl0aW9uIDcpIGlzIHVzZWRcbiAqIHRvIGRldGVjdCB3aGV0aGVyIHRoZSBIVE1MLWxpa2Ugc3ludGF4IGlzIHNlZW4gYXMgSFRNTCAoZmxvdykgb3Igbm90LlxuICpcbiAqIFRoaXMgaXMgY29waWVkIGZyb206XG4gKiA8aHR0cHM6Ly9zcGVjLmNvbW1vbm1hcmsub3JnLzAuMzAvI2h0bWwtYmxvY2tzPi5cbiAqXG4gKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogYHNlYXJjaGAgd2FzIGFkZGVkIGluIGBDb21tb25NYXJrQDAuMzFgLlxuICovXG5leHBvcnQgY29uc3QgaHRtbEJsb2NrTmFtZXMgPSBbXG4gICdhZGRyZXNzJyxcbiAgJ2FydGljbGUnLFxuICAnYXNpZGUnLFxuICAnYmFzZScsXG4gICdiYXNlZm9udCcsXG4gICdibG9ja3F1b3RlJyxcbiAgJ2JvZHknLFxuICAnY2FwdGlvbicsXG4gICdjZW50ZXInLFxuICAnY29sJyxcbiAgJ2NvbGdyb3VwJyxcbiAgJ2RkJyxcbiAgJ2RldGFpbHMnLFxuICAnZGlhbG9nJyxcbiAgJ2RpcicsXG4gICdkaXYnLFxuICAnZGwnLFxuICAnZHQnLFxuICAnZmllbGRzZXQnLFxuICAnZmlnY2FwdGlvbicsXG4gICdmaWd1cmUnLFxuICAnZm9vdGVyJyxcbiAgJ2Zvcm0nLFxuICAnZnJhbWUnLFxuICAnZnJhbWVzZXQnLFxuICAnaDEnLFxuICAnaDInLFxuICAnaDMnLFxuICAnaDQnLFxuICAnaDUnLFxuICAnaDYnLFxuICAnaGVhZCcsXG4gICdoZWFkZXInLFxuICAnaHInLFxuICAnaHRtbCcsXG4gICdpZnJhbWUnLFxuICAnbGVnZW5kJyxcbiAgJ2xpJyxcbiAgJ2xpbmsnLFxuICAnbWFpbicsXG4gICdtZW51JyxcbiAgJ21lbnVpdGVtJyxcbiAgJ25hdicsXG4gICdub2ZyYW1lcycsXG4gICdvbCcsXG4gICdvcHRncm91cCcsXG4gICdvcHRpb24nLFxuICAncCcsXG4gICdwYXJhbScsXG4gICdzZWFyY2gnLFxuICAnc2VjdGlvbicsXG4gICdzdW1tYXJ5JyxcbiAgJ3RhYmxlJyxcbiAgJ3Rib2R5JyxcbiAgJ3RkJyxcbiAgJ3Rmb290JyxcbiAgJ3RoJyxcbiAgJ3RoZWFkJyxcbiAgJ3RpdGxlJyxcbiAgJ3RyJyxcbiAgJ3RyYWNrJyxcbiAgJ3VsJ1xuXVxuXG4vKipcbiAqIExpc3Qgb2YgbG93ZXJjYXNlIEhUTUwgXHUyMDFDcmF3XHUyMDFEIHRhZyBuYW1lcy5cbiAqXG4gKiBUaGUgbGlzdCwgd2hlbiBwYXJzaW5nIEhUTUwgKGZsb3cpLCByZXN1bHRzIGluIEhUTUwgdGhhdCBjYW4gaW5jbHVkZSBsaW5lc1xuICogd2l0aG91dCBleGl0aW5nLCB1bnRpbCBhIGNsb3NpbmcgdGFnIGFsc28gaW4gdGhpcyBsaXN0IGlzIGZvdW5kIChjb25kaXRpb25cbiAqIDEpLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGNvcGllZCBmcm9tOlxuICogPGh0dHBzOi8vc3BlYy5jb21tb25tYXJrLm9yZy8wLjMwLyNodG1sLWJsb2Nrcz4uXG4gKlxuICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGB0ZXh0YXJlYWAgd2FzIGFkZGVkIGluIGBDb21tb25NYXJrQDAuMzBgLlxuICovXG5leHBvcnQgY29uc3QgaHRtbFJhd05hbWVzID0gWydwcmUnLCAnc2NyaXB0JywgJ3N0eWxlJywgJ3RleHRhcmVhJ11cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5SZXNvbHZlcn0gUmVzb2x2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtcbiAgYXNjaWlBbHBoYSxcbiAgYXNjaWlBbHBoYW51bWVyaWMsXG4gIG1hcmtkb3duTGluZUVuZGluZyxcbiAgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZSxcbiAgbWFya2Rvd25TcGFjZVxufSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge2h0bWxCbG9ja05hbWVzLCBodG1sUmF3TmFtZXN9IGZyb20gJ21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWUnXG5pbXBvcnQge2JsYW5rTGluZX0gZnJvbSAnLi9ibGFuay1saW5lLmpzJ1xuXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBodG1sRmxvdyA9IHtcbiAgbmFtZTogJ2h0bWxGbG93JyxcbiAgdG9rZW5pemU6IHRva2VuaXplSHRtbEZsb3csXG4gIHJlc29sdmVUbzogcmVzb2x2ZVRvSHRtbEZsb3csXG4gIGNvbmNyZXRlOiB0cnVlXG59XG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuY29uc3QgYmxhbmtMaW5lQmVmb3JlID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVCbGFua0xpbmVCZWZvcmUsXG4gIHBhcnRpYWw6IHRydWVcbn1cbmNvbnN0IG5vbkxhenlDb250aW51YXRpb25TdGFydCA9IHtcbiAgdG9rZW5pemU6IHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0LFxuICBwYXJ0aWFsOiB0cnVlXG59XG5cbi8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG5mdW5jdGlvbiByZXNvbHZlVG9IdG1sRmxvdyhldmVudHMpIHtcbiAgbGV0IGluZGV4ID0gZXZlbnRzLmxlbmd0aFxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmIChldmVudHNbaW5kZXhdWzBdID09PSAnZW50ZXInICYmIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gJ2h0bWxGbG93Jykge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgaWYgKGluZGV4ID4gMSAmJiBldmVudHNbaW5kZXggLSAyXVsxXS50eXBlID09PSAnbGluZVByZWZpeCcpIHtcbiAgICAvLyBBZGQgdGhlIHByZWZpeCBzdGFydCB0byB0aGUgSFRNTCB0b2tlbi5cbiAgICBldmVudHNbaW5kZXhdWzFdLnN0YXJ0ID0gZXZlbnRzW2luZGV4IC0gMl1bMV0uc3RhcnRcbiAgICAvLyBBZGQgdGhlIHByZWZpeCBzdGFydCB0byB0aGUgSFRNTCBsaW5lIHRva2VuLlxuICAgIGV2ZW50c1tpbmRleCArIDFdWzFdLnN0YXJ0ID0gZXZlbnRzW2luZGV4IC0gMl1bMV0uc3RhcnRcbiAgICAvLyBSZW1vdmUgdGhlIGxpbmUgcHJlZml4LlxuICAgIGV2ZW50cy5zcGxpY2UoaW5kZXggLSAyLCAyKVxuICB9XG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVIdG1sRmxvdyhlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgbWFya2VyXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGNsb3NpbmdUYWdcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxldCBidWZmZXJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGxldCBpbmRleFxuICAvKiogQHR5cGUge0NvZGV9ICovXG4gIGxldCBtYXJrZXJCXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBIVE1MIChmbG93KS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDx4IC8+XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgLy8gVG8gZG86IHBhcnNlIGluZGVudCBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgcmV0dXJuIGJlZm9yZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEF0IGA8YCwgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDx4IC8+XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWZvcmUoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoJ2h0bWxGbG93JylcbiAgICBlZmZlY3RzLmVudGVyKCdodG1sRmxvd0RhdGEnKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBvcGVuXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDxgLCBhdCB0YWcgbmFtZSBvciBvdGhlciBzdHVmZi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDx4IC8+XG4gICAqICAgICAgXlxuICAgKiA+IHwgPCFkb2N0eXBlPlxuICAgKiAgICAgIF5cbiAgICogPiB8IDwhLS14eHgtLT5cbiAgICogICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBvcGVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gMzMpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uT3BlblxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNDcpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgY2xvc2luZ1RhZyA9IHRydWVcbiAgICAgIHJldHVybiB0YWdDbG9zZVN0YXJ0XG4gICAgfVxuICAgIGlmIChjb2RlID09PSA2Mykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBtYXJrZXIgPSAzXG4gICAgICAvLyBUbyBkbzpcbiAgICAgIC8vIHRva2VuaXplci5jb25jcmV0ZSA9IHRydWVcbiAgICAgIC8vIFRvIGRvOiB1c2UgYG1hcmtkb3duLXJzYCBzdHlsZSBpbnRlcnJ1cHQuXG4gICAgICAvLyBXaGlsZSB3ZVx1MjAxOXJlIGluIGFuIGluc3RydWN0aW9uIGluc3RlYWQgb2YgYSBkZWNsYXJhdGlvbiwgd2VcdTIwMTlyZSBvbiBhIGA/YFxuICAgICAgLy8gcmlnaHQgbm93LCBzbyB3ZSBkbyBuZWVkIHRvIHNlYXJjaCBmb3IgYD5gLCBzaW1pbGFyIHRvIGRlY2xhcmF0aW9ucy5cbiAgICAgIHJldHVybiBzZWxmLmludGVycnVwdCA/IG9rIDogY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGVcbiAgICB9XG5cbiAgICAvLyBBU0NJSSBhbHBoYWJldGljYWwuXG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbm90IG51bGwuXG4gICAgICBidWZmZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwhYCwgYXQgZGVjbGFyYXRpb24sIGNvbW1lbnQsIG9yIENEQVRBLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPCFkb2N0eXBlPlxuICAgKiAgICAgICBeXG4gICAqID4gfCA8IS0teHh4LS0+XG4gICAqICAgICAgIF5cbiAgICogPiB8IDwhW0NEQVRBWz4mPF1dPlxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBkZWNsYXJhdGlvbk9wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0NSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBtYXJrZXIgPSAyXG4gICAgICByZXR1cm4gY29tbWVudE9wZW5JbnNpZGVcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDkxKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIG1hcmtlciA9IDVcbiAgICAgIGluZGV4ID0gMFxuICAgICAgcmV0dXJuIGNkYXRhT3Blbkluc2lkZVxuICAgIH1cblxuICAgIC8vIEFTQ0lJIGFscGhhYmV0aWNhbC5cbiAgICBpZiAoYXNjaWlBbHBoYShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBtYXJrZXIgPSA0XG4gICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2sgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZVxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwhLWAsIGluc2lkZSBhIGNvbW1lbnQsIGF0IGFub3RoZXIgYC1gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPCEtLXh4eC0tPlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tbWVudE9wZW5JbnNpZGUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0NSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2sgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZVxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwhW2AsIGluc2lkZSBDREFUQSwgZXhwZWN0aW5nIGBDREFUQVtgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPCFbQ0RBVEFbPiY8XV0+XG4gICAqICAgICAgICBeXl5eXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNkYXRhT3Blbkluc2lkZShjb2RlKSB7XG4gICAgY29uc3QgdmFsdWUgPSAnQ0RBVEFbJ1xuICAgIGlmIChjb2RlID09PSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KyspKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGlmIChpbmRleCA9PT0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIC8vIC8vIERvIG5vdCBmb3JtIGNvbnRhaW5lcnMuXG4gICAgICAgIC8vIHRva2VuaXplci5jb25jcmV0ZSA9IHRydWVcbiAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2sgOiBjb250aW51YXRpb25cbiAgICAgIH1cbiAgICAgIHJldHVybiBjZGF0YU9wZW5JbnNpZGVcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8L2AsIGluIGNsb3NpbmcgdGFnLCBhdCB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwveD5cbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnQ2xvc2VTdGFydChjb2RlKSB7XG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbm90IG51bGwuXG4gICAgICBidWZmZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gdGFnIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YWI+XG4gICAqICAgICAgXl5cbiAgICogPiB8IDwvYWI+XG4gICAqICAgICAgIF5eXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdOYW1lKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBudWxsIHx8XG4gICAgICBjb2RlID09PSA0NyB8fFxuICAgICAgY29kZSA9PT0gNjIgfHxcbiAgICAgIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHNsYXNoID0gY29kZSA9PT0gNDdcbiAgICAgIGNvbnN0IG5hbWUgPSBidWZmZXIudG9Mb3dlckNhc2UoKVxuICAgICAgaWYgKCFzbGFzaCAmJiAhY2xvc2luZ1RhZyAmJiBodG1sUmF3TmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgbWFya2VyID0gMVxuICAgICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgICAvLyB0b2tlbml6ZXIuY29uY3JldGUgPSB0cnVlXG4gICAgICAgIHJldHVybiBzZWxmLmludGVycnVwdCA/IG9rKGNvZGUpIDogY29udGludWF0aW9uKGNvZGUpXG4gICAgICB9XG4gICAgICBpZiAoaHRtbEJsb2NrTmFtZXMuaW5jbHVkZXMoYnVmZmVyLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgIG1hcmtlciA9IDZcbiAgICAgICAgaWYgKHNsYXNoKSB7XG4gICAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAgICAgcmV0dXJuIGJhc2ljU2VsZkNsb3NpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC8vIERvIG5vdCBmb3JtIGNvbnRhaW5lcnMuXG4gICAgICAgIC8vIHRva2VuaXplci5jb25jcmV0ZSA9IHRydWVcbiAgICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2soY29kZSkgOiBjb250aW51YXRpb24oY29kZSlcbiAgICAgIH1cbiAgICAgIG1hcmtlciA9IDdcbiAgICAgIC8vIERvIG5vdCBzdXBwb3J0IGNvbXBsZXRlIEhUTUwgd2hlbiBpbnRlcnJ1cHRpbmcuXG4gICAgICByZXR1cm4gc2VsZi5pbnRlcnJ1cHQgJiYgIXNlbGYucGFyc2VyLmxhenlbc2VsZi5ub3coKS5saW5lXVxuICAgICAgICA/IG5vayhjb2RlKVxuICAgICAgICA6IGNsb3NpbmdUYWdcbiAgICAgICAgPyBjb21wbGV0ZUNsb3NpbmdUYWdBZnRlcihjb2RlKVxuICAgICAgICA6IGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlKVxuICAgIH1cblxuICAgIC8vIEFTQ0lJIGFscGhhbnVtZXJpY2FsIGFuZCBgLWAuXG4gICAgaWYgKGNvZGUgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGJ1ZmZlciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICByZXR1cm4gdGFnTmFtZVxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgY2xvc2luZyBzbGFzaCBvZiBhIGJhc2ljIHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGRpdi8+XG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2ljU2VsZkNsb3NpbmcoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA2Mikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAvLyAvLyBEbyBub3QgZm9ybSBjb250YWluZXJzLlxuICAgICAgLy8gdG9rZW5pemVyLmNvbmNyZXRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIHNlbGYuaW50ZXJydXB0ID8gb2sgOiBjb250aW51YXRpb25cbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGNsb3Npbmcgc2xhc2ggb2YgYSBjb21wbGV0ZSB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDx4Lz5cbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlQ2xvc2luZ1RhZ0FmdGVyKGNvZGUpIHtcbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXJcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBsZXRlRW5kKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgYW4gYXR0cmlidXRlIG5hbWUuXG4gICAqXG4gICAqIEF0IGZpcnN0LCB0aGlzIHN0YXRlIGlzIHVzZWQgYWZ0ZXIgYSBjb21wbGV0ZSB0YWcgbmFtZSwgYWZ0ZXIgd2hpdGVzcGFjZSxcbiAgICogd2hlcmUgaXQgZXhwZWN0cyBvcHRpb25hbCBhdHRyaWJ1dGVzIG9yIHRoZSBlbmQgb2YgdGhlIHRhZy5cbiAgICogSXQgaXMgYWxzbyByZXVzZWQgYWZ0ZXIgYXR0cmlidXRlcywgd2hlbiBleHBlY3RpbmcgbW9yZSBvcHRpb25hbFxuICAgKiBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGEgLz5cbiAgICogICAgICAgIF5cbiAgICogPiB8IDxhIDpiPlxuICAgKiAgICAgICAgXlxuICAgKiA+IHwgPGEgX2I+XG4gICAqICAgICAgICBeXG4gICAqID4gfCA8YSBiPlxuICAgKiAgICAgICAgXlxuICAgKiA+IHwgPGEgPlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDcpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlRW5kXG4gICAgfVxuXG4gICAgLy8gQVNDSUkgYWxwaGFudW1lcmljYWwgYW5kIGA6YCBhbmQgYF9gLlxuICAgIGlmIChjb2RlID09PSA1OCB8fCBjb2RlID09PSA5NSB8fCBhc2NpaUFscGhhKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZVxuICAgIH1cbiAgICByZXR1cm4gY29tcGxldGVFbmQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBhdHRyaWJ1dGUgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIDpiPlxuICAgKiAgICAgICAgIF5cbiAgICogPiB8IDxhIF9iPlxuICAgKiAgICAgICAgIF5cbiAgICogPiB8IDxhIGI+XG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVOYW1lKGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYW51bWVyaWNhbCBhbmQgYC1gLCBgLmAsIGA6YCwgYW5kIGBfYC5cbiAgICBpZiAoXG4gICAgICBjb2RlID09PSA0NSB8fFxuICAgICAgY29kZSA9PT0gNDYgfHxcbiAgICAgIGNvZGUgPT09IDU4IHx8XG4gICAgICBjb2RlID09PSA5NSB8fFxuICAgICAgYXNjaWlBbHBoYW51bWVyaWMoY29kZSlcbiAgICApIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZVxuICAgIH1cbiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBhdHRyaWJ1dGUgbmFtZSwgYXQgYW4gb3B0aW9uYWwgaW5pdGlhbGl6ZXIsIHRoZSBlbmQgb2YgdGhlIHRhZywgb3JcbiAgICogd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDxhIGI+XG4gICAqICAgICAgICAgXlxuICAgKiA+IHwgPGEgYj1jPlxuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjEpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmVcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUFmdGVyXG4gICAgfVxuICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWZvcmUgdW5xdW90ZWQsIGRvdWJsZSBxdW90ZWQsIG9yIHNpbmdsZSBxdW90ZWQgYXR0cmlidXRlIHZhbHVlLCBhbGxvd2luZ1xuICAgKiB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGEgYj1jPlxuICAgKiAgICAgICAgICBeXG4gICAqID4gfCA8YSBiPVwiY1wiPlxuICAgKiAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlQmVmb3JlKGNvZGUpIHtcbiAgICBpZiAoXG4gICAgICBjb2RlID09PSBudWxsIHx8XG4gICAgICBjb2RlID09PSA2MCB8fFxuICAgICAgY29kZSA9PT0gNjEgfHxcbiAgICAgIGNvZGUgPT09IDYyIHx8XG4gICAgICBjb2RlID09PSA5NlxuICAgICkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gMzQgfHwgY29kZSA9PT0gMzkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgbWFya2VyQiA9IGNvZGVcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkXG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlQmVmb3JlXG4gICAgfVxuICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBkb3VibGUgb3Igc2luZ2xlIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YSBiPVwiY1wiPlxuICAgKiAgICAgICAgICAgXlxuICAgKiA+IHwgPGEgYj0nYyc+XG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlUXVvdGVkKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyQikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBtYXJrZXJCID0gbnVsbFxuICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlclxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YSBiPWM+XG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlKSB7XG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gbnVsbCB8fFxuICAgICAgY29kZSA9PT0gMzQgfHxcbiAgICAgIGNvZGUgPT09IDM5IHx8XG4gICAgICBjb2RlID09PSA0NyB8fFxuICAgICAgY29kZSA9PT0gNjAgfHxcbiAgICAgIGNvZGUgPT09IDYxIHx8XG4gICAgICBjb2RlID09PSA2MiB8fFxuICAgICAgY29kZSA9PT0gOTYgfHxcbiAgICAgIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSlcbiAgICApIHtcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVBZnRlcihjb2RlKVxuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZG91YmxlIG9yIHNpbmdsZSBxdW90ZWQgYXR0cmlidXRlIHZhbHVlLCBiZWZvcmUgd2hpdGVzcGFjZSBvciB0aGVcbiAgICogZW5kIG9mIHRoZSB0YWcuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8YSBiPVwiY1wiPlxuICAgKiAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQ3IHx8IGNvZGUgPT09IDYyIHx8IG1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmUoY29kZSlcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBvZiBhIGNvbXBsZXRlIHRhZyB3aGVyZSBvbmx5IGFuIGA+YCBpcyBhbGxvd2VkLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPGEgYj1cImNcIj5cbiAgICogICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tcGxldGVFbmQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA2Mikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29tcGxldGVBZnRlclxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYD5gIGluIGEgY29tcGxldGUgdGFnLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHg+XG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wbGV0ZUFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIC8vIC8vIERvIG5vdCBmb3JtIGNvbnRhaW5lcnMuXG4gICAgICAvLyB0b2tlbml6ZXIuY29uY3JldGUgPSB0cnVlXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGUpXG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb21wbGV0ZUFmdGVyXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjb250aW51YXRpb24gb2YgYW55IEhUTUwga2luZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwhLS14eHgtLT5cbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGludWF0aW9uKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDUgJiYgbWFya2VyID09PSAyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb250aW51YXRpb25Db21tZW50SW5zaWRlXG4gICAgfVxuICAgIGlmIChjb2RlID09PSA2MCAmJiBtYXJrZXIgPT09IDEpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblJhd1RhZ09wZW5cbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDYyICYmIG1hcmtlciA9PT0gNCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uQ2xvc2VcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDYzICYmIG1hcmtlciA9PT0gMykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGVcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDkzICYmIG1hcmtlciA9PT0gNSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uQ2RhdGFJbnNpZGVcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSAmJiAobWFya2VyID09PSA2IHx8IG1hcmtlciA9PT0gNykpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnaHRtbEZsb3dEYXRhJylcbiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKFxuICAgICAgICBibGFua0xpbmVCZWZvcmUsXG4gICAgICAgIGNvbnRpbnVhdGlvbkFmdGVyLFxuICAgICAgICBjb250aW51YXRpb25TdGFydFxuICAgICAgKShjb2RlKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgnaHRtbEZsb3dEYXRhJylcbiAgICAgIHJldHVybiBjb250aW51YXRpb25TdGFydChjb2RlKVxuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gY29udGludWF0aW9uXG4gIH1cblxuICAvKipcbiAgICogSW4gY29udGludWF0aW9uLCBhdCBlb2wuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8eD5cbiAgICogICAgICAgIF5cbiAgICogICB8IGFzZFxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGludWF0aW9uU3RhcnQoY29kZSkge1xuICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKFxuICAgICAgbm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0LFxuICAgICAgY29udGludWF0aW9uU3RhcnROb25MYXp5LFxuICAgICAgY29udGludWF0aW9uQWZ0ZXJcbiAgICApKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gY29udGludWF0aW9uLCBhdCBlb2wsIGJlZm9yZSBub24tbGF6eSBjb250ZW50LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgPHg+XG4gICAqICAgICAgICBeXG4gICAqICAgfCBhc2RcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblN0YXJ0Tm9uTGF6eShjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcignbGluZUVuZGluZycpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KCdsaW5lRW5kaW5nJylcbiAgICByZXR1cm4gY29udGludWF0aW9uQmVmb3JlXG4gIH1cblxuICAvKipcbiAgICogSW4gY29udGludWF0aW9uLCBiZWZvcmUgbm9uLWxhenkgY29udGVudC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IDx4PlxuICAgKiA+IHwgYXNkXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25CZWZvcmUoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuZW50ZXIoJ2h0bWxGbG93RGF0YScpXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNvbW1lbnQgY29udGludWF0aW9uLCBhZnRlciBvbmUgYC1gLCBleHBlY3RpbmcgYW5vdGhlci5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IDwhLS14eHgtLT5cbiAgICogICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGludWF0aW9uQ29tbWVudEluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQ1KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZVxuICAgIH1cbiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gcmF3IGNvbnRpbnVhdGlvbiwgYWZ0ZXIgYDxgLCBhdCBgL2AuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8c2NyaXB0PmNvbnNvbGUubG9nKDEpPC9zY3JpcHQ+XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblJhd1RhZ09wZW4oY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0Nykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBidWZmZXIgPSAnJ1xuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblJhd0VuZFRhZ1xuICAgIH1cbiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gcmF3IGNvbnRpbnVhdGlvbiwgYWZ0ZXIgYDwvYCwgaW4gYSByYXcgdGFnIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8c2NyaXB0PmNvbnNvbGUubG9nKDEpPC9zY3JpcHQ+XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblJhd0VuZFRhZyhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDYyKSB7XG4gICAgICBjb25zdCBuYW1lID0gYnVmZmVyLnRvTG93ZXJDYXNlKClcbiAgICAgIGlmIChodG1sUmF3TmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlKVxuICAgIH1cbiAgICBpZiAoYXNjaWlBbHBoYShjb2RlKSAmJiBidWZmZXIubGVuZ3RoIDwgOCkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBub3QgbnVsbC5cbiAgICAgIGJ1ZmZlciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uUmF3RW5kVGFnXG4gICAgfVxuICAgIHJldHVybiBjb250aW51YXRpb24oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjZGF0YSBjb250aW51YXRpb24sIGFmdGVyIGBdYCwgZXhwZWN0aW5nIGBdPmAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IVtDREFUQVs+JjxdXT5cbiAgICogICAgICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb250aW51YXRpb25DZGF0YUluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDkzKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZVxuICAgIH1cbiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gZGVjbGFyYXRpb24gb3IgaW5zdHJ1Y3Rpb24gY29udGludWF0aW9uLCBhdCBgPmAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IS0tPlxuICAgKiAgICAgICAgIF5cbiAgICogPiB8IDw/PlxuICAgKiAgICAgICBeXG4gICAqID4gfCA8IXE+XG4gICAqICAgICAgICBeXG4gICAqID4gfCA8IS0tYWItLT5cbiAgICogICAgICAgICAgICAgXlxuICAgKiA+IHwgPCFbQ0RBVEFbPiY8XV0+XG4gICAqICAgICAgICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlXG4gICAgfVxuXG4gICAgLy8gTW9yZSBkYXNoZXMuXG4gICAgaWYgKGNvZGUgPT09IDQ1ICYmIG1hcmtlciA9PT0gMikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGVcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNsb3NlZCBjb250aW51YXRpb246IGV2ZXJ5dGhpbmcgd2UgZ2V0IHVudGlsIHRoZSBlb2wvZW9mIGlzIHBhcnQgb2YgaXQuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IWRvY3R5cGU+XG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGludWF0aW9uQ2xvc2UoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5leGl0KCdodG1sRmxvd0RhdGEnKVxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkFmdGVyKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBjb250aW51YXRpb25DbG9zZVxuICB9XG5cbiAgLyoqXG4gICAqIERvbmUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8IWRvY3R5cGU+XG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29udGludWF0aW9uQWZ0ZXIoY29kZSkge1xuICAgIGVmZmVjdHMuZXhpdCgnaHRtbEZsb3cnKVxuICAgIC8vIC8vIEZlZWwgZnJlZSB0byBpbnRlcnJ1cHQuXG4gICAgLy8gdG9rZW5pemVyLmludGVycnVwdCA9IGZhbHNlXG4gICAgLy8gLy8gTm8gbG9uZ2VyIGNvbmNyZXRlLlxuICAgIC8vIHRva2VuaXplci5jb25jcmV0ZSA9IGZhbHNlXG4gICAgcmV0dXJuIG9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVOb25MYXp5Q29udGludWF0aW9uU3RhcnQoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogQXQgZW9sLCBiZWZvcmUgY29udGludWF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgKiBgYGBqc1xuICAgKiAgICAgICAgICAgIF5cbiAgICogICB8IGJcbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdsaW5lRW5kaW5nJylcbiAgICAgIHJldHVybiBhZnRlclxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQSBjb250aW51YXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCAqIGBgYGpzXG4gICAqID4gfCBiXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgcmV0dXJuIHNlbGYucGFyc2VyLmxhenlbc2VsZi5ub3coKS5saW5lXSA/IG5vayhjb2RlKSA6IG9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVCbGFua0xpbmVCZWZvcmUoZWZmZWN0cywgb2ssIG5vaykge1xuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogQmVmb3JlIGVvbCwgZXhwZWN0aW5nIGJsYW5rIGxpbmUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCA8ZGl2PlxuICAgKiAgICAgICAgICBeXG4gICAqICAgfFxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoJ2xpbmVFbmRpbmcnKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCgnbGluZUVuZGluZycpXG4gICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChibGFua0xpbmUsIG9rLCBub2spXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge1xuICBhc2NpaUFscGhhLFxuICBhc2NpaUFscGhhbnVtZXJpYyxcbiAgbWFya2Rvd25MaW5lRW5kaW5nLFxuICBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlLFxuICBtYXJrZG93blNwYWNlXG59IGZyb20gJ21pY3JvbWFyay11dGlsLWNoYXJhY3Rlcidcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGh0bWxUZXh0ID0ge1xuICBuYW1lOiAnaHRtbFRleHQnLFxuICB0b2tlbml6ZTogdG9rZW5pemVIdG1sVGV4dFxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUh0bWxUZXh0KGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgLyoqIEB0eXBlIHtOb25OdWxsYWJsZTxDb2RlPiB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IG1hcmtlclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgbGV0IGluZGV4XG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGxldCByZXR1cm5TdGF0ZVxuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgSFRNTCAodGV4dCkuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiPiBjXG4gICAqICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKCdodG1sVGV4dCcpXG4gICAgZWZmZWN0cy5lbnRlcignaHRtbFRleHREYXRhJylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gb3BlblxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8YCwgYXQgdGFnIG5hbWUgb3Igb3RoZXIgc3R1ZmYuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiPiBjXG4gICAqICAgICAgICBeXG4gICAqID4gfCBhIDwhZG9jdHlwZT4gY1xuICAgKiAgICAgICAgXlxuICAgKiA+IHwgYSA8IS0tYi0tPiBjXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBvcGVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gMzMpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uT3BlblxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNDcpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ0Nsb3NlU3RhcnRcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDYzKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBpbnN0cnVjdGlvblxuICAgIH1cblxuICAgIC8vIEFTQ0lJIGFscGhhYmV0aWNhbC5cbiAgICBpZiAoYXNjaWlBbHBoYShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gdGFnT3BlblxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwhYCwgYXQgZGVjbGFyYXRpb24sIGNvbW1lbnQsIG9yIENEQVRBLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IWRvY3R5cGU+IGNcbiAgICogICAgICAgICBeXG4gICAqID4gfCBhIDwhLS1iLS0+IGNcbiAgICogICAgICAgICBeXG4gICAqID4gfCBhIDwhW0NEQVRBWz4mPF1dPiBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVjbGFyYXRpb25PcGVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDUpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbW1lbnRPcGVuSW5zaWRlXG4gICAgfVxuICAgIGlmIChjb2RlID09PSA5MSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBpbmRleCA9IDBcbiAgICAgIHJldHVybiBjZGF0YU9wZW5JbnNpZGVcbiAgICB9XG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBhIGNvbW1lbnQsIGFmdGVyIGA8IS1gLCBhdCBhbm90aGVyIGAtYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPCEtLWItLT4gY1xuICAgKiAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21tZW50T3Blbkluc2lkZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQ1KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb21tZW50RW5kXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBjb21tZW50LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IS0tYi0tPiBjXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjb21tZW50KGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNDUpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNvbW1lbnRDbG9zZVxuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm5TdGF0ZSA9IGNvbW1lbnRcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBjb21tZW50XG4gIH1cblxuICAvKipcbiAgICogSW4gY29tbWVudCwgYWZ0ZXIgYC1gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IS0tYi0tPiBjXG4gICAqICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbW1lbnRDbG9zZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQ1KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBjb21tZW50RW5kXG4gICAgfVxuICAgIHJldHVybiBjb21tZW50KGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gY29tbWVudCwgYWZ0ZXIgYC0tYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPCEtLWItLT4gY1xuICAgKiAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY29tbWVudEVuZChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGUgPT09IDYyXG4gICAgICA/IGVuZChjb2RlKVxuICAgICAgOiBjb2RlID09PSA0NVxuICAgICAgPyBjb21tZW50Q2xvc2UoY29kZSlcbiAgICAgIDogY29tbWVudChjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8IVtgLCBpbiBDREFUQSwgZXhwZWN0aW5nIGBDREFUQVtgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IVtDREFUQVs+JjxdXT4gYlxuICAgKiAgICAgICAgICBeXl5eXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNkYXRhT3Blbkluc2lkZShjb2RlKSB7XG4gICAgY29uc3QgdmFsdWUgPSAnQ0RBVEFbJ1xuICAgIGlmIChjb2RlID09PSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KyspKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBpbmRleCA9PT0gdmFsdWUubGVuZ3RoID8gY2RhdGEgOiBjZGF0YU9wZW5JbnNpZGVcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIENEQVRBLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IVtDREFUQVs+JjxdXT4gYlxuICAgKiAgICAgICAgICAgICAgICBeXl5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGNkYXRhKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gOTMpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNkYXRhQ2xvc2VcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSBjZGF0YVxuICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZSlcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIGNkYXRhXG4gIH1cblxuICAvKipcbiAgICogSW4gQ0RBVEEsIGFmdGVyIGBdYCwgYXQgYW5vdGhlciBgXWAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDwhW0NEQVRBWz4mPF1dPiBiXG4gICAqICAgICAgICAgICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBjZGF0YUNsb3NlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gOTMpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNkYXRhRW5kXG4gICAgfVxuICAgIHJldHVybiBjZGF0YShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIENEQVRBLCBhZnRlciBgXV1gLCBhdCBgPmAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDwhW0NEQVRBWz4mPF1dPiBiXG4gICAqICAgICAgICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gY2RhdGFFbmQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA2Mikge1xuICAgICAgcmV0dXJuIGVuZChjb2RlKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gOTMpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGNkYXRhRW5kXG4gICAgfVxuICAgIHJldHVybiBjZGF0YShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IWI+IGNcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGVjbGFyYXRpb24oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsIHx8IGNvZGUgPT09IDYyKSB7XG4gICAgICByZXR1cm4gZW5kKGNvZGUpXG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVyblN0YXRlID0gZGVjbGFyYXRpb25cbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiBkZWNsYXJhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEluIGluc3RydWN0aW9uLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8P2I/PiBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5zdHJ1Y3Rpb24oY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuICAgIGlmIChjb2RlID09PSA2Mykge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25DbG9zZVxuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm5TdGF0ZSA9IGluc3RydWN0aW9uXG4gICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlKVxuICAgIH1cbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICByZXR1cm4gaW5zdHJ1Y3Rpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBpbnN0cnVjdGlvbiwgYWZ0ZXIgYD9gLCBhdCBgPmAuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDw/Yj8+IGNcbiAgICogICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGluc3RydWN0aW9uQ2xvc2UoY29kZSkge1xuICAgIHJldHVybiBjb2RlID09PSA2MiA/IGVuZChjb2RlKSA6IGluc3RydWN0aW9uKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYDwvYCwgaW4gY2xvc2luZyB0YWcsIGF0IHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8L2I+IGNcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdDbG9zZVN0YXJ0KGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYWJldGljYWwuXG4gICAgaWYgKGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ0Nsb3NlXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgPC94YCwgaW4gYSB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPC9iPiBjXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ0Nsb3NlKGNvZGUpIHtcbiAgICAvLyBBU0NJSSBhbHBoYW51bWVyaWNhbCBhbmQgYC1gLlxuICAgIGlmIChjb2RlID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlKSkge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICByZXR1cm4gdGFnQ2xvc2VcbiAgICB9XG4gICAgcmV0dXJuIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNsb3NpbmcgdGFnLCBhZnRlciB0YWcgbmFtZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPC9iPiBjXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ0Nsb3NlQmV0d2Vlbihjb2RlKSB7XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSB0YWdDbG9zZUJldHdlZW5cbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiB0YWdDbG9zZUJldHdlZW5cbiAgICB9XG4gICAgcmV0dXJuIGVuZChjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGA8eGAsIGluIG9wZW5pbmcgdGFnIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiPiBjXG4gICAqICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnT3Blbihjb2RlKSB7XG4gICAgLy8gQVNDSUkgYWxwaGFudW1lcmljYWwgYW5kIGAtYC5cbiAgICBpZiAoY29kZSA9PT0gNDUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ09wZW5cbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDQ3IHx8IGNvZGUgPT09IDYyIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSkpIHtcbiAgICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlKVxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gb3BlbmluZyB0YWcsIGFmdGVyIHRhZyBuYW1lLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8Yj4gY1xuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ09wZW5CZXR3ZWVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNDcpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGVuZFxuICAgIH1cblxuICAgIC8vIEFTQ0lJIGFscGhhYmV0aWNhbCBhbmQgYDpgIGFuZCBgX2AuXG4gICAgaWYgKGNvZGUgPT09IDU4IHx8IGNvZGUgPT09IDk1IHx8IGFzY2lpQWxwaGEoY29kZSkpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lXG4gICAgfVxuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkJldHdlZW5cbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiB0YWdPcGVuQmV0d2VlblxuICAgIH1cbiAgICByZXR1cm4gZW5kKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gYXR0cmlidXRlIG5hbWUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiIGM+IGRcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZU5hbWUoY29kZSkge1xuICAgIC8vIEFTQ0lJIGFscGhhYmV0aWNhbCBhbmQgYC1gLCBgLmAsIGA6YCwgYW5kIGBfYC5cbiAgICBpZiAoXG4gICAgICBjb2RlID09PSA0NSB8fFxuICAgICAgY29kZSA9PT0gNDYgfHxcbiAgICAgIGNvZGUgPT09IDU4IHx8XG4gICAgICBjb2RlID09PSA5NSB8fFxuICAgICAgYXNjaWlBbHBoYW51bWVyaWMoY29kZSlcbiAgICApIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVOYW1lXG4gICAgfVxuICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgYXR0cmlidXRlIG5hbWUsIGJlZm9yZSBpbml0aWFsaXplciwgdGhlIGVuZCBvZiB0aGUgdGFnLCBvclxuICAgKiB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8YiBjPiBkXG4gICAqICAgICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjEpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZVxuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXJcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyXG4gICAgfVxuICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEJlZm9yZSB1bnF1b3RlZCwgZG91YmxlIHF1b3RlZCwgb3Igc2luZ2xlIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUsIGFsbG93aW5nXG4gICAqIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBhIDxiIGM9ZD4gZVxuICAgKiAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZShjb2RlKSB7XG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gbnVsbCB8fFxuICAgICAgY29kZSA9PT0gNjAgfHxcbiAgICAgIGNvZGUgPT09IDYxIHx8XG4gICAgICBjb2RlID09PSA2MiB8fFxuICAgICAgY29kZSA9PT0gOTZcbiAgICApIHtcbiAgICAgIHJldHVybiBub2soY29kZSlcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IDM0IHx8IGNvZGUgPT09IDM5KSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIG1hcmtlciA9IGNvZGVcbiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWRcbiAgICB9XG4gICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkge1xuICAgICAgcmV0dXJuU3RhdGUgPSB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmVcbiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGUpXG4gICAgfVxuICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmVcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVVucXVvdGVkXG4gIH1cblxuICAvKipcbiAgICogSW4gZG91YmxlIG9yIHNpbmdsZSBxdW90ZWQgYXR0cmlidXRlIHZhbHVlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8YiBjPVwiZFwiPiBlXG4gICAqICAgICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZChjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBtYXJrZXIgPSB1bmRlZmluZWRcbiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlclxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZFxuICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZSlcbiAgICB9XG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZFxuICB9XG5cbiAgLyoqXG4gICAqIEluIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgPGIgYz1kPiBlXG4gICAqICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY29kZSkge1xuICAgIGlmIChcbiAgICAgIGNvZGUgPT09IG51bGwgfHxcbiAgICAgIGNvZGUgPT09IDM0IHx8XG4gICAgICBjb2RlID09PSAzOSB8fFxuICAgICAgY29kZSA9PT0gNjAgfHxcbiAgICAgIGNvZGUgPT09IDYxIHx8XG4gICAgICBjb2RlID09PSA5NlxuICAgICkge1xuICAgICAgcmV0dXJuIG5vayhjb2RlKVxuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gNDcgfHwgY29kZSA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKSkge1xuICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGUpXG4gICAgfVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZFxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGRvdWJsZSBvciBzaW5nbGUgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZSwgYmVmb3JlIHdoaXRlc3BhY2Ugb3IgdGhlIGVuZFxuICAgKiBvZiB0aGUgdGFnLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8YiBjPVwiZFwiPiBlXG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkQWZ0ZXIoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0NyB8fCBjb2RlID09PSA2MiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW4oY29kZSlcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBvZiBhIHRhZyB3aGVyZSBvbmx5IGFuIGA+YCBpcyBhbGxvd2VkLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8YiBjPVwiZFwiPiBlXG4gICAqICAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZW5kKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gNjIpIHtcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdodG1sVGV4dERhdGEnKVxuICAgICAgZWZmZWN0cy5leGl0KCdodG1sVGV4dCcpXG4gICAgICByZXR1cm4gb2tcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEF0IGVvbC5cbiAgICpcbiAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHdlIGNhblx1MjAxOXQgaGF2ZSBibGFuayBsaW5lcyBpbiB0ZXh0LCBzbyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0XG4gICAqID4gZW1wdHkgdG9rZW5zLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSA8IS0tYVxuICAgKiAgICAgICAgICAgIF5cbiAgICogICB8IGItLT5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGxpbmVFbmRpbmdCZWZvcmUoY29kZSkge1xuICAgIGVmZmVjdHMuZXhpdCgnaHRtbFRleHREYXRhJylcbiAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nJylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQoJ2xpbmVFbmRpbmcnKVxuICAgIHJldHVybiBsaW5lRW5kaW5nQWZ0ZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBlb2wsIGF0IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiB3ZSBjYW5cdTIwMTl0IGhhdmUgYmxhbmsgbGluZXMgaW4gdGV4dCwgc28gbm8gbmVlZCB0byB3b3JyeSBhYm91dFxuICAgKiA+IGVtcHR5IHRva2Vucy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IGEgPCEtLWFcbiAgICogPiB8IGItLT5cbiAgICogICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGxpbmVFbmRpbmdBZnRlcihjb2RlKSB7XG4gICAgLy8gQWx3YXlzIHBvcHVsYXRlZCBieSBkZWZhdWx0cy5cblxuICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGUpXG4gICAgICA/IGZhY3RvcnlTcGFjZShcbiAgICAgICAgICBlZmZlY3RzLFxuICAgICAgICAgIGxpbmVFbmRpbmdBZnRlclByZWZpeCxcbiAgICAgICAgICAnbGluZVByZWZpeCcsXG4gICAgICAgICAgc2VsZi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoJ2NvZGVJbmRlbnRlZCcpXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiA0XG4gICAgICAgICkoY29kZSlcbiAgICAgIDogbGluZUVuZGluZ0FmdGVyUHJlZml4KGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgZW9sLCBhZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogd2UgY2FuXHUyMDE5dCBoYXZlIGJsYW5rIGxpbmVzIGluIHRleHQsIHNvIG5vIG5lZWQgdG8gd29ycnkgYWJvdXRcbiAgICogPiBlbXB0eSB0b2tlbnMuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqICAgfCBhIDwhLS1hXG4gICAqID4gfCBiLS0+XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBsaW5lRW5kaW5nQWZ0ZXJQcmVmaXgoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoJ2h0bWxUZXh0RGF0YScpXG4gICAgcmV0dXJuIHJldHVyblN0YXRlKGNvZGUpXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRXZlbnR9IEV2ZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlJlc29sdmVyfSBSZXNvbHZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtmYWN0b3J5RGVzdGluYXRpb259IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LWRlc3RpbmF0aW9uJ1xuaW1wb3J0IHtmYWN0b3J5TGFiZWx9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LWxhYmVsJ1xuaW1wb3J0IHtmYWN0b3J5VGl0bGV9IGZyb20gJ21pY3JvbWFyay1mYWN0b3J5LXRpdGxlJ1xuaW1wb3J0IHtmYWN0b3J5V2hpdGVzcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktd2hpdGVzcGFjZSdcbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtwdXNoLCBzcGxpY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWNodW5rZWQnXG5pbXBvcnQge25vcm1hbGl6ZUlkZW50aWZpZXJ9IGZyb20gJ21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyJ1xuaW1wb3J0IHtyZXNvbHZlQWxsfSBmcm9tICdtaWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbCdcbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGxhYmVsRW5kID0ge1xuICBuYW1lOiAnbGFiZWxFbmQnLFxuICB0b2tlbml6ZTogdG9rZW5pemVMYWJlbEVuZCxcbiAgcmVzb2x2ZVRvOiByZXNvbHZlVG9MYWJlbEVuZCxcbiAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbExhYmVsRW5kXG59XG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuY29uc3QgcmVzb3VyY2VDb25zdHJ1Y3QgPSB7XG4gIHRva2VuaXplOiB0b2tlbml6ZVJlc291cmNlXG59XG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmNvbnN0IHJlZmVyZW5jZUZ1bGxDb25zdHJ1Y3QgPSB7XG4gIHRva2VuaXplOiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGxcbn1cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuY29uc3QgcmVmZXJlbmNlQ29sbGFwc2VkQ29uc3RydWN0ID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVSZWZlcmVuY2VDb2xsYXBzZWRcbn1cblxuLyoqIEB0eXBlIHtSZXNvbHZlcn0gKi9cbmZ1bmN0aW9uIHJlc29sdmVBbGxMYWJlbEVuZChldmVudHMpIHtcbiAgbGV0IGluZGV4ID0gLTFcbiAgd2hpbGUgKCsraW5kZXggPCBldmVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgdG9rZW4gPSBldmVudHNbaW5kZXhdWzFdXG4gICAgaWYgKFxuICAgICAgdG9rZW4udHlwZSA9PT0gJ2xhYmVsSW1hZ2UnIHx8XG4gICAgICB0b2tlbi50eXBlID09PSAnbGFiZWxMaW5rJyB8fFxuICAgICAgdG9rZW4udHlwZSA9PT0gJ2xhYmVsRW5kJ1xuICAgICkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBtYXJrZXIuXG4gICAgICBldmVudHMuc3BsaWNlKGluZGV4ICsgMSwgdG9rZW4udHlwZSA9PT0gJ2xhYmVsSW1hZ2UnID8gNCA6IDIpXG4gICAgICB0b2tlbi50eXBlID0gJ2RhdGEnXG4gICAgICBpbmRleCsrXG4gICAgfVxuICB9XG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqIEB0eXBlIHtSZXNvbHZlcn0gKi9cbmZ1bmN0aW9uIHJlc29sdmVUb0xhYmVsRW5kKGV2ZW50cywgY29udGV4dCkge1xuICBsZXQgaW5kZXggPSBldmVudHMubGVuZ3RoXG4gIGxldCBvZmZzZXQgPSAwXG4gIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gIGxldCB0b2tlblxuICAvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IG9wZW5cbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCBjbG9zZVxuICAvKiogQHR5cGUge0FycmF5PEV2ZW50Pn0gKi9cbiAgbGV0IG1lZGlhXG5cbiAgLy8gRmluZCBhbiBvcGVuaW5nLlxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHRva2VuID0gZXZlbnRzW2luZGV4XVsxXVxuICAgIGlmIChvcGVuKSB7XG4gICAgICAvLyBJZiB3ZSBzZWUgYW5vdGhlciBsaW5rLCBvciBpbmFjdGl2ZSBsaW5rIGxhYmVsLCB3ZVx1MjAxOXZlIGJlZW4gaGVyZSBiZWZvcmUuXG4gICAgICBpZiAoXG4gICAgICAgIHRva2VuLnR5cGUgPT09ICdsaW5rJyB8fFxuICAgICAgICAodG9rZW4udHlwZSA9PT0gJ2xhYmVsTGluaycgJiYgdG9rZW4uX2luYWN0aXZlKVxuICAgICAgKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIC8vIE1hcmsgb3RoZXIgbGluayBvcGVuaW5ncyBhcyBpbmFjdGl2ZSwgYXMgd2UgY2FuXHUyMDE5dCBoYXZlIGxpbmtzIGluXG4gICAgICAvLyBsaW5rcy5cbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzBdID09PSAnZW50ZXInICYmIHRva2VuLnR5cGUgPT09ICdsYWJlbExpbmsnKSB7XG4gICAgICAgIHRva2VuLl9pbmFjdGl2ZSA9IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsb3NlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicgJiZcbiAgICAgICAgKHRva2VuLnR5cGUgPT09ICdsYWJlbEltYWdlJyB8fCB0b2tlbi50eXBlID09PSAnbGFiZWxMaW5rJykgJiZcbiAgICAgICAgIXRva2VuLl9iYWxhbmNlZFxuICAgICAgKSB7XG4gICAgICAgIG9wZW4gPSBpbmRleFxuICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gJ2xhYmVsTGluaycpIHtcbiAgICAgICAgICBvZmZzZXQgPSAyXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gJ2xhYmVsRW5kJykge1xuICAgICAgY2xvc2UgPSBpbmRleFxuICAgIH1cbiAgfVxuICBjb25zdCBncm91cCA9IHtcbiAgICB0eXBlOiBldmVudHNbb3Blbl1bMV0udHlwZSA9PT0gJ2xhYmVsTGluaycgPyAnbGluaycgOiAnaW1hZ2UnLFxuICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbb3Blbl1bMV0uc3RhcnQpLFxuICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXVsxXS5lbmQpXG4gIH1cbiAgY29uc3QgbGFiZWwgPSB7XG4gICAgdHlwZTogJ2xhYmVsJyxcbiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW29wZW5dWzFdLnN0YXJ0KSxcbiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tjbG9zZV1bMV0uZW5kKVxuICB9XG4gIGNvbnN0IHRleHQgPSB7XG4gICAgdHlwZTogJ2xhYmVsVGV4dCcsXG4gICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tvcGVuICsgb2Zmc2V0ICsgMl1bMV0uZW5kKSxcbiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tjbG9zZSAtIDJdWzFdLnN0YXJ0KVxuICB9XG4gIG1lZGlhID0gW1xuICAgIFsnZW50ZXInLCBncm91cCwgY29udGV4dF0sXG4gICAgWydlbnRlcicsIGxhYmVsLCBjb250ZXh0XVxuICBdXG5cbiAgLy8gT3BlbmluZyBtYXJrZXIuXG4gIG1lZGlhID0gcHVzaChtZWRpYSwgZXZlbnRzLnNsaWNlKG9wZW4gKyAxLCBvcGVuICsgb2Zmc2V0ICsgMykpXG5cbiAgLy8gVGV4dCBvcGVuLlxuICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbJ2VudGVyJywgdGV4dCwgY29udGV4dF1dKVxuXG4gIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG5cbiAgLy8gQmV0d2Vlbi5cbiAgbWVkaWEgPSBwdXNoKFxuICAgIG1lZGlhLFxuICAgIHJlc29sdmVBbGwoXG4gICAgICBjb250ZXh0LnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCxcbiAgICAgIGV2ZW50cy5zbGljZShvcGVuICsgb2Zmc2V0ICsgNCwgY2xvc2UgLSAzKSxcbiAgICAgIGNvbnRleHRcbiAgICApXG4gIClcblxuICAvLyBUZXh0IGNsb3NlLCBtYXJrZXIgY2xvc2UsIGxhYmVsIGNsb3NlLlxuICBtZWRpYSA9IHB1c2gobWVkaWEsIFtcbiAgICBbJ2V4aXQnLCB0ZXh0LCBjb250ZXh0XSxcbiAgICBldmVudHNbY2xvc2UgLSAyXSxcbiAgICBldmVudHNbY2xvc2UgLSAxXSxcbiAgICBbJ2V4aXQnLCBsYWJlbCwgY29udGV4dF1cbiAgXSlcblxuICAvLyBSZWZlcmVuY2UsIHJlc291cmNlLCBvciBzby5cbiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBldmVudHMuc2xpY2UoY2xvc2UgKyAxKSlcblxuICAvLyBNZWRpYSBjbG9zZS5cbiAgbWVkaWEgPSBwdXNoKG1lZGlhLCBbWydleGl0JywgZ3JvdXAsIGNvbnRleHRdXSlcbiAgc3BsaWNlKGV2ZW50cywgb3BlbiwgZXZlbnRzLmxlbmd0aCwgbWVkaWEpXG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVMYWJlbEVuZChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGxldCBpbmRleCA9IHNlbGYuZXZlbnRzLmxlbmd0aFxuICAvKiogQHR5cGUge1Rva2VufSAqL1xuICBsZXQgbGFiZWxTdGFydFxuICAvKiogQHR5cGUge2Jvb2xlYW59ICovXG4gIGxldCBkZWZpbmVkXG5cbiAgLy8gRmluZCBhbiBvcGVuaW5nLlxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGlmIChcbiAgICAgIChzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gJ2xhYmVsSW1hZ2UnIHx8XG4gICAgICAgIHNlbGYuZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSAnbGFiZWxMaW5rJykgJiZcbiAgICAgICFzZWxmLmV2ZW50c1tpbmRleF1bMV0uX2JhbGFuY2VkXG4gICAgKSB7XG4gICAgICBsYWJlbFN0YXJ0ID0gc2VsZi5ldmVudHNbaW5kZXhdWzFdXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgbGFiZWwgZW5kLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIpIGNcbiAgICogICAgICAgXlxuICAgKiA+IHwgW2FdW2JdIGNcbiAgICogICAgICAgXlxuICAgKiA+IHwgW2FdW10gYlxuICAgKiAgICAgICBeXG4gICAqID4gfCBbYV0gYlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vdCBhbiBva2F5IG9wZW5pbmcuXG4gICAgaWYgKCFsYWJlbFN0YXJ0KSB7XG4gICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGNvcnJlc3BvbmRpbmcgbGFiZWwgKGxpbmspIHN0YXJ0IGlzIG1hcmtlZCBhcyBpbmFjdGl2ZSxcbiAgICAvLyBpdCBtZWFucyB3ZVx1MjAxOWQgYmUgd3JhcHBpbmcgYSBsaW5rLCBsaWtlIHRoaXM6XG4gICAgLy9cbiAgICAvLyBgYGBtYXJrZG93blxuICAgIC8vID4gfCBhIFtiIFtjXShkKSBlXShmKSBnLlxuICAgIC8vICAgICAgICAgICAgICAgICAgXlxuICAgIC8vIGBgYFxuICAgIC8vXG4gICAgLy8gV2UgY2FuXHUyMDE5dCBoYXZlIHRoYXQsIHNvIGl0XHUyMDE5cyBqdXN0IGJhbGFuY2VkIGJyYWNrZXRzLlxuICAgIGlmIChsYWJlbFN0YXJ0Ll9pbmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGxhYmVsRW5kTm9rKGNvZGUpXG4gICAgfVxuICAgIGRlZmluZWQgPSBzZWxmLnBhcnNlci5kZWZpbmVkLmluY2x1ZGVzKFxuICAgICAgbm9ybWFsaXplSWRlbnRpZmllcihcbiAgICAgICAgc2VsZi5zbGljZVNlcmlhbGl6ZSh7XG4gICAgICAgICAgc3RhcnQ6IGxhYmVsU3RhcnQuZW5kLFxuICAgICAgICAgIGVuZDogc2VsZi5ub3coKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgICBlZmZlY3RzLmVudGVyKCdsYWJlbEVuZCcpXG4gICAgZWZmZWN0cy5lbnRlcignbGFiZWxNYXJrZXInKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCgnbGFiZWxNYXJrZXInKVxuICAgIGVmZmVjdHMuZXhpdCgnbGFiZWxFbmQnKVxuICAgIHJldHVybiBhZnRlclxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGBdYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiKSBjXG4gICAqICAgICAgIF5cbiAgICogPiB8IFthXVtiXSBjXG4gICAqICAgICAgIF5cbiAgICogPiB8IFthXVtdIGJcbiAgICogICAgICAgXlxuICAgKiA+IHwgW2FdIGJcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYWZ0ZXIoY29kZSkge1xuICAgIC8vIE5vdGU6IGBtYXJrZG93bi1yc2AgYWxzbyBwYXJzZXMgR0ZNIGZvb3Rub3RlcyBoZXJlLCB3aGljaCBmb3IgdXMgaXMgaW5cbiAgICAvLyBhbiBleHRlbnNpb24uXG5cbiAgICAvLyBSZXNvdXJjZSAoYFthc2RdKGZnaClgKT9cbiAgICBpZiAoY29kZSA9PT0gNDApIHtcbiAgICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoXG4gICAgICAgIHJlc291cmNlQ29uc3RydWN0LFxuICAgICAgICBsYWJlbEVuZE9rLFxuICAgICAgICBkZWZpbmVkID8gbGFiZWxFbmRPayA6IGxhYmVsRW5kTm9rXG4gICAgICApKGNvZGUpXG4gICAgfVxuXG4gICAgLy8gRnVsbCAoYFthc2RdW2ZnaF1gKSBvciBjb2xsYXBzZWQgKGBbYXNkXVtdYCkgcmVmZXJlbmNlP1xuICAgIGlmIChjb2RlID09PSA5MSkge1xuICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChcbiAgICAgICAgcmVmZXJlbmNlRnVsbENvbnN0cnVjdCxcbiAgICAgICAgbGFiZWxFbmRPayxcbiAgICAgICAgZGVmaW5lZCA/IHJlZmVyZW5jZU5vdEZ1bGwgOiBsYWJlbEVuZE5va1xuICAgICAgKShjb2RlKVxuICAgIH1cblxuICAgIC8vIFNob3J0Y3V0IChgW2FzZF1gKSByZWZlcmVuY2U/XG4gICAgcmV0dXJuIGRlZmluZWQgPyBsYWJlbEVuZE9rKGNvZGUpIDogbGFiZWxFbmROb2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgXWAsIGF0IGBbYCwgYnV0IG5vdCBhdCBhIGZ1bGwgcmVmZXJlbmNlLlxuICAgKlxuICAgKiA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogd2Ugb25seSBnZXQgaGVyZSBpZiB0aGUgbGFiZWwgaXMgZGVmaW5lZC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVtdIGJcbiAgICogICAgICAgIF5cbiAgICogPiB8IFthXSBiXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZWZlcmVuY2VOb3RGdWxsKGNvZGUpIHtcbiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KFxuICAgICAgcmVmZXJlbmNlQ29sbGFwc2VkQ29uc3RydWN0LFxuICAgICAgbGFiZWxFbmRPayxcbiAgICAgIGxhYmVsRW5kTm9rXG4gICAgKShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIERvbmUsIHdlIGZvdW5kIHNvbWV0aGluZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXShiKSBjXG4gICAqICAgICAgICAgICBeXG4gICAqID4gfCBbYV1bYl0gY1xuICAgKiAgICAgICAgICAgXlxuICAgKiA+IHwgW2FdW10gYlxuICAgKiAgICAgICAgICBeXG4gICAqID4gfCBbYV0gYlxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gbGFiZWxFbmRPayhjb2RlKSB7XG4gICAgLy8gTm90ZTogYG1hcmtkb3duLXJzYCBkb2VzIGEgYnVuY2ggb2Ygc3R1ZmYgaGVyZS5cbiAgICByZXR1cm4gb2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEb25lLCBpdFx1MjAxOXMgbm90aGluZy5cbiAgICpcbiAgICogVGhlcmUgd2FzIGFuIG9rYXkgb3BlbmluZywgYnV0IHdlIGRpZG5cdTIwMTl0IG1hdGNoIGFueXRoaW5nLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIgY1xuICAgKiAgICAgICAgXlxuICAgKiA+IHwgW2FdW2IgY1xuICAgKiAgICAgICAgXlxuICAgKiA+IHwgW2FdIGJcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGxhYmVsRW5kTm9rKGNvZGUpIHtcbiAgICBsYWJlbFN0YXJ0Ll9iYWxhbmNlZCA9IHRydWVcbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVSZXNvdXJjZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIHJldHVybiByZXNvdXJjZVN0YXJ0XG5cbiAgLyoqXG4gICAqIEF0IGEgcmVzb3VyY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYikgY1xuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb3VyY2VTdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcigncmVzb3VyY2UnKVxuICAgIGVmZmVjdHMuZW50ZXIoJ3Jlc291cmNlTWFya2VyJylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQoJ3Jlc291cmNlTWFya2VyJylcbiAgICByZXR1cm4gcmVzb3VyY2VCZWZvcmVcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgYChgLCBhdCBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIpIGNcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZXNvdXJjZUJlZm9yZShjb2RlKSB7XG4gICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZSlcbiAgICAgID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VPcGVuKShjb2RlKVxuICAgICAgOiByZXNvdXJjZU9wZW4oY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZSwgYXQgYClgIG9yIGEgZGVzdGluYXRpb24uXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYikgY1xuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc291cmNlT3Blbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDQxKSB7XG4gICAgICByZXR1cm4gcmVzb3VyY2VFbmQoY29kZSlcbiAgICB9XG4gICAgcmV0dXJuIGZhY3RvcnlEZXN0aW5hdGlvbihcbiAgICAgIGVmZmVjdHMsXG4gICAgICByZXNvdXJjZURlc3RpbmF0aW9uQWZ0ZXIsXG4gICAgICByZXNvdXJjZURlc3RpbmF0aW9uTWlzc2luZyxcbiAgICAgICdyZXNvdXJjZURlc3RpbmF0aW9uJyxcbiAgICAgICdyZXNvdXJjZURlc3RpbmF0aW9uTGl0ZXJhbCcsXG4gICAgICAncmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXInLFxuICAgICAgJ3Jlc291cmNlRGVzdGluYXRpb25SYXcnLFxuICAgICAgJ3Jlc291cmNlRGVzdGluYXRpb25TdHJpbmcnLFxuICAgICAgMzJcbiAgICApKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gcmVzb3VyY2UsIGFmdGVyIGRlc3RpbmF0aW9uLCBhdCBvcHRpb25hbCB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIpIGNcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb3VyY2VEZXN0aW5hdGlvbkFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKVxuICAgICAgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCByZXNvdXJjZUJldHdlZW4pKGNvZGUpXG4gICAgICA6IHJlc291cmNlRW5kKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogQXQgaW52YWxpZCBkZXN0aW5hdGlvbi5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXSg8PCkgYlxuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc291cmNlRGVzdGluYXRpb25NaXNzaW5nKGNvZGUpIHtcbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKipcbiAgICogSW4gcmVzb3VyY2UsIGFmdGVyIGRlc3RpbmF0aW9uIGFuZCB3aGl0ZXNwYWNlLCBhdCBgKGAgb3IgdGl0bGUuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYiApIGNcbiAgICogICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc291cmNlQmV0d2Vlbihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IDM0IHx8IGNvZGUgPT09IDM5IHx8IGNvZGUgPT09IDQwKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeVRpdGxlKFxuICAgICAgICBlZmZlY3RzLFxuICAgICAgICByZXNvdXJjZVRpdGxlQWZ0ZXIsXG4gICAgICAgIG5vayxcbiAgICAgICAgJ3Jlc291cmNlVGl0bGUnLFxuICAgICAgICAncmVzb3VyY2VUaXRsZU1hcmtlcicsXG4gICAgICAgICdyZXNvdXJjZVRpdGxlU3RyaW5nJ1xuICAgICAgKShjb2RlKVxuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VFbmQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYWZ0ZXIgdGl0bGUsIGF0IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV0oYiBcImNcIikgZFxuICAgKiAgICAgICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb3VyY2VUaXRsZUFmdGVyKGNvZGUpIHtcbiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlKVxuICAgICAgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCByZXNvdXJjZUVuZCkoY29kZSlcbiAgICAgIDogcmVzb3VyY2VFbmQoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiByZXNvdXJjZSwgYXQgYClgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdKGIpIGRcbiAgICogICAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb3VyY2VFbmQoY29kZSkge1xuICAgIGlmIChjb2RlID09PSA0MSkge1xuICAgICAgZWZmZWN0cy5lbnRlcigncmVzb3VyY2VNYXJrZXInKVxuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBlZmZlY3RzLmV4aXQoJ3Jlc291cmNlTWFya2VyJylcbiAgICAgIGVmZmVjdHMuZXhpdCgncmVzb3VyY2UnKVxuICAgICAgcmV0dXJuIG9rXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZVJlZmVyZW5jZUZ1bGwoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICByZXR1cm4gcmVmZXJlbmNlRnVsbFxuXG4gIC8qKlxuICAgKiBJbiBhIHJlZmVyZW5jZSAoZnVsbCksIGF0IHRoZSBgW2AuXG4gICAqXG4gICAqIGBgYG1hcmtkb3duXG4gICAqID4gfCBbYV1bYl0gZFxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVmZXJlbmNlRnVsbChjb2RlKSB7XG4gICAgcmV0dXJuIGZhY3RvcnlMYWJlbC5jYWxsKFxuICAgICAgc2VsZixcbiAgICAgIGVmZmVjdHMsXG4gICAgICByZWZlcmVuY2VGdWxsQWZ0ZXIsXG4gICAgICByZWZlcmVuY2VGdWxsTWlzc2luZyxcbiAgICAgICdyZWZlcmVuY2UnLFxuICAgICAgJ3JlZmVyZW5jZU1hcmtlcicsXG4gICAgICAncmVmZXJlbmNlU3RyaW5nJ1xuICAgICkoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBhIHJlZmVyZW5jZSAoZnVsbCksIGFmdGVyIGBdYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVtiXSBkXG4gICAqICAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZUZ1bGxBZnRlcihjb2RlKSB7XG4gICAgcmV0dXJuIHNlbGYucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMoXG4gICAgICBub3JtYWxpemVJZGVudGlmaWVyKFxuICAgICAgICBzZWxmLnNsaWNlU2VyaWFsaXplKHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdWzFdKS5zbGljZSgxLCAtMSlcbiAgICAgIClcbiAgICApXG4gICAgICA/IG9rKGNvZGUpXG4gICAgICA6IG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIHJlZmVyZW5jZSAoZnVsbCkgdGhhdCB3YXMgbWlzc2luZy5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IFthXVtiIGRcbiAgICogICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIHJlZmVyZW5jZUZ1bGxNaXNzaW5nKGNvZGUpIHtcbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVSZWZlcmVuY2VDb2xsYXBzZWQoZWZmZWN0cywgb2ssIG5vaykge1xuICByZXR1cm4gcmVmZXJlbmNlQ29sbGFwc2VkU3RhcnRcblxuICAvKipcbiAgICogSW4gcmVmZXJlbmNlIChjb2xsYXBzZWQpLCBhdCBgW2AuXG4gICAqXG4gICAqID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiB3ZSBvbmx5IGdldCBoZXJlIGlmIHRoZSBsYWJlbCBpcyBkZWZpbmVkLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdW10gZFxuICAgKiAgICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVmZXJlbmNlQ29sbGFwc2VkU3RhcnQoY29kZSkge1xuICAgIC8vIFdlIG9ubHkgYXR0ZW1wdCBhIGNvbGxhcHNlZCBsYWJlbCBpZiB0aGVyZVx1MjAxOXMgYSBgW2AuXG5cbiAgICBlZmZlY3RzLmVudGVyKCdyZWZlcmVuY2UnKVxuICAgIGVmZmVjdHMuZW50ZXIoJ3JlZmVyZW5jZU1hcmtlcicpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KCdyZWZlcmVuY2VNYXJrZXInKVxuICAgIHJldHVybiByZWZlcmVuY2VDb2xsYXBzZWRPcGVuXG4gIH1cblxuICAvKipcbiAgICogSW4gcmVmZXJlbmNlIChjb2xsYXBzZWQpLCBhdCBgXWAuXG4gICAqXG4gICAqID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiB3ZSBvbmx5IGdldCBoZXJlIGlmIHRoZSBsYWJlbCBpcyBkZWZpbmVkLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgW2FdW10gZFxuICAgKiAgICAgICAgIF5cbiAgICogYGBgXG4gICAqXG4gICAqICBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiByZWZlcmVuY2VDb2xsYXBzZWRPcGVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gOTMpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ3JlZmVyZW5jZU1hcmtlcicpXG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIGVmZmVjdHMuZXhpdCgncmVmZXJlbmNlTWFya2VyJylcbiAgICAgIGVmZmVjdHMuZXhpdCgncmVmZXJlbmNlJylcbiAgICAgIHJldHVybiBva1xuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplcn0gVG9rZW5pemVyXG4gKi9cblxuaW1wb3J0IHtsYWJlbEVuZH0gZnJvbSAnLi9sYWJlbC1lbmQuanMnXG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGxhYmVsU3RhcnRJbWFnZSA9IHtcbiAgbmFtZTogJ2xhYmVsU3RhcnRJbWFnZScsXG4gIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsU3RhcnRJbWFnZSxcbiAgcmVzb2x2ZUFsbDogbGFiZWxFbmQucmVzb2x2ZUFsbFxufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7VG9rZW5pemVyfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxhYmVsU3RhcnRJbWFnZShlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBTdGFydCBvZiBsYWJlbCAoaW1hZ2UpIHN0YXJ0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSAhW2JdIGNcbiAgICogICAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoJ2xhYmVsSW1hZ2UnKVxuICAgIGVmZmVjdHMuZW50ZXIoJ2xhYmVsSW1hZ2VNYXJrZXInKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCgnbGFiZWxJbWFnZU1hcmtlcicpXG4gICAgcmV0dXJuIG9wZW5cbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgIWAsIGF0IGBbYC5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8IGEgIVtiXSBjXG4gICAqICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBvcGVuKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gOTEpIHtcbiAgICAgIGVmZmVjdHMuZW50ZXIoJ2xhYmVsTWFya2VyJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdsYWJlbE1hcmtlcicpXG4gICAgICBlZmZlY3RzLmV4aXQoJ2xhYmVsSW1hZ2UnKVxuICAgICAgcmV0dXJuIGFmdGVyXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBgIVtgLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSAhW2JdIGNcbiAgICogICAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBUaGlzIGlzIG5lZWRlZCBpbiBiZWNhdXNlLCB3aGVuIEdGTSBmb290bm90ZXMgYXJlIGVuYWJsZWQsIGltYWdlcyBuZXZlclxuICAgKiBmb3JtIHdoZW4gc3RhcnRlZCB3aXRoIGEgYF5gLlxuICAgKiBJbnN0ZWFkLCBsaW5rcyBmb3JtOlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAhW15hXShiKVxuICAgKlxuICAgKiAhW15hXVtiXVxuICAgKlxuICAgKiBbYl06IGNcbiAgICogYGBgXG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPHA+ITxhIGhyZWY9XFxcImJcXFwiPl5hPC9hPjwvcD5cbiAgICogPHA+ITxhIGhyZWY9XFxcImNcXFwiPl5hPC9hPjwvcD5cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtTdGF0ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGFmdGVyKGNvZGUpIHtcbiAgICAvLyBUbyBkbzogdXNlIGEgbmV3IGZpZWxkIHRvIGRvIHRoaXMsIHRoaXMgaXMgc3RpbGwgbmVlZGVkIGZvclxuICAgIC8vIGBtaWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZWAsIGJ1dCB0aGUgYGxhYmVsLXN0YXJ0LWxpbmtgXG4gICAgLy8gYmVoYXZpb3IgaXNuXHUyMDE5dC5cbiAgICAvLyBIaWRkZW4gZm9vdG5vdGVzIGhvb2suXG4gICAgLyogYzggaWdub3JlIG5leHQgMyAqL1xuICAgIHJldHVybiBjb2RlID09PSA5NCAmJiAnX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCcgaW4gc2VsZi5wYXJzZXIuY29uc3RydWN0c1xuICAgICAgPyBub2soY29kZSlcbiAgICAgIDogb2soY29kZSlcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db25zdHJ1Y3R9IENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVDb250ZXh0fSBUb2tlbml6ZUNvbnRleHRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW5pemVyfSBUb2tlbml6ZXJcbiAqL1xuXG5pbXBvcnQge2xhYmVsRW5kfSBmcm9tICcuL2xhYmVsLWVuZC5qcydcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgbGFiZWxTdGFydExpbmsgPSB7XG4gIG5hbWU6ICdsYWJlbFN0YXJ0TGluaycsXG4gIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsU3RhcnRMaW5rLFxuICByZXNvbHZlQWxsOiBsYWJlbEVuZC5yZXNvbHZlQWxsXG59XG5cbi8qKlxuICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplTGFiZWxTdGFydExpbmsoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICByZXR1cm4gc3RhcnRcblxuICAvKipcbiAgICogU3RhcnQgb2YgbGFiZWwgKGxpbmspIHN0YXJ0LlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgYSBbYl0gY1xuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcignbGFiZWxMaW5rJylcbiAgICBlZmZlY3RzLmVudGVyKCdsYWJlbE1hcmtlcicpXG4gICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgZWZmZWN0cy5leGl0KCdsYWJlbE1hcmtlcicpXG4gICAgZWZmZWN0cy5leGl0KCdsYWJlbExpbmsnKVxuICAgIHJldHVybiBhZnRlclxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gYWZ0ZXIoY29kZSkge1xuICAgIC8vIFRvIGRvOiB0aGlzIGlzblx1MjAxOXQgbmVlZGVkIGluIGBtaWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZWAsXG4gICAgLy8gcmVtb3ZlLlxuICAgIC8vIEhpZGRlbiBmb290bm90ZXMgaG9vay5cbiAgICAvKiBjOCBpZ25vcmUgbmV4dCAzICovXG4gICAgcmV0dXJuIGNvZGUgPT09IDk0ICYmICdfaGlkZGVuRm9vdG5vdGVTdXBwb3J0JyBpbiBzZWxmLnBhcnNlci5jb25zdHJ1Y3RzXG4gICAgICA/IG5vayhjb2RlKVxuICAgICAgOiBvayhjb2RlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7ZmFjdG9yeVNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSdcbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBsaW5lRW5kaW5nID0ge1xuICBuYW1lOiAnbGluZUVuZGluZycsXG4gIHRva2VuaXplOiB0b2tlbml6ZUxpbmVFbmRpbmdcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVMaW5lRW5kaW5nKGVmZmVjdHMsIG9rKSB7XG4gIHJldHVybiBzdGFydFxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIHN0YXJ0KGNvZGUpIHtcbiAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nJylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQoJ2xpbmVFbmRpbmcnKVxuICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2ssICdsaW5lUHJlZml4JylcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Db2RlfSBDb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvbnN0cnVjdH0gQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7ZmFjdG9yeVNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSdcbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93blNwYWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCB0aGVtYXRpY0JyZWFrID0ge1xuICBuYW1lOiAndGhlbWF0aWNCcmVhaycsXG4gIHRva2VuaXplOiB0b2tlbml6ZVRoZW1hdGljQnJlYWtcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVUaGVtYXRpY0JyZWFrKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgbGV0IHNpemUgPSAwXG4gIC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8Q29kZT59ICovXG4gIGxldCBtYXJrZXJcbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqXG4gICAqIFN0YXJ0IG9mIHRoZW1hdGljIGJyZWFrLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgKioqXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydChjb2RlKSB7XG4gICAgZWZmZWN0cy5lbnRlcigndGhlbWF0aWNCcmVhaycpXG4gICAgLy8gVG8gZG86IHBhcnNlIGluZGVudCBsaWtlIGBtYXJrZG93bi1yc2AuXG4gICAgcmV0dXJuIGJlZm9yZShjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIG9wdGlvbmFsIHdoaXRlc3BhY2UsIGF0IG1hcmtlci5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICoqKlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYmVmb3JlKGNvZGUpIHtcbiAgICBtYXJrZXIgPSBjb2RlXG4gICAgcmV0dXJuIGF0QnJlYWsoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBzb21ldGhpbmcsIGJlZm9yZSBzb21ldGhpbmcgZWxzZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogPiB8ICoqKlxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgZWZmZWN0cy5lbnRlcigndGhlbWF0aWNCcmVha1NlcXVlbmNlJylcbiAgICAgIHJldHVybiBzZXF1ZW5jZShjb2RlKVxuICAgIH1cbiAgICBpZiAoc2l6ZSA+PSAzICYmIChjb2RlID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlKSkpIHtcbiAgICAgIGVmZmVjdHMuZXhpdCgndGhlbWF0aWNCcmVhaycpXG4gICAgICByZXR1cm4gb2soY29kZSlcbiAgICB9XG4gICAgcmV0dXJuIG5vayhjb2RlKVxuICB9XG5cbiAgLyoqXG4gICAqIEluIHNlcXVlbmNlLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiA+IHwgKioqXG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBzZXF1ZW5jZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG1hcmtlcikge1xuICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGUpXG4gICAgICBzaXplKytcbiAgICAgIHJldHVybiBzZXF1ZW5jZVxuICAgIH1cbiAgICBlZmZlY3RzLmV4aXQoJ3RoZW1hdGljQnJlYWtTZXF1ZW5jZScpXG4gICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZSlcbiAgICAgID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGF0QnJlYWssICd3aGl0ZXNwYWNlJykoY29kZSlcbiAgICAgIDogYXRCcmVhayhjb2RlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29udGFpbmVyU3RhdGV9IENvbnRhaW5lclN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkV4aXRlcn0gRXhpdGVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7ZmFjdG9yeVNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSdcbmltcG9ydCB7YXNjaWlEaWdpdCwgbWFya2Rvd25TcGFjZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuaW1wb3J0IHtibGFua0xpbmV9IGZyb20gJy4vYmxhbmstbGluZS5qcydcbmltcG9ydCB7dGhlbWF0aWNCcmVha30gZnJvbSAnLi90aGVtYXRpYy1icmVhay5qcydcblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5leHBvcnQgY29uc3QgbGlzdCA9IHtcbiAgbmFtZTogJ2xpc3QnLFxuICB0b2tlbml6ZTogdG9rZW5pemVMaXN0U3RhcnQsXG4gIGNvbnRpbnVhdGlvbjoge1xuICAgIHRva2VuaXplOiB0b2tlbml6ZUxpc3RDb250aW51YXRpb25cbiAgfSxcbiAgZXhpdDogdG9rZW5pemVMaXN0RW5kXG59XG5cbi8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuY29uc3QgbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlQ29uc3RydWN0ID0ge1xuICB0b2tlbml6ZTogdG9rZW5pemVMaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UsXG4gIHBhcnRpYWw6IHRydWVcbn1cblxuLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovXG5jb25zdCBpbmRlbnRDb25zdHJ1Y3QgPSB7XG4gIHRva2VuaXplOiB0b2tlbml6ZUluZGVudCxcbiAgcGFydGlhbDogdHJ1ZVxufVxuXG4vLyBUbyBkbzogYG1hcmtkb3duLXJzYCBwYXJzZXMgbGlzdCBpdGVtcyBvbiB0aGVpciBvd24gYW5kIGxhdGVyIHN0aXRjaGVzIHRoZW1cbi8vIHRvZ2V0aGVyLlxuXG4vKipcbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUxpc3RTdGFydChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGNvbnN0IHRhaWwgPSBzZWxmLmV2ZW50c1tzZWxmLmV2ZW50cy5sZW5ndGggLSAxXVxuICBsZXQgaW5pdGlhbFNpemUgPVxuICAgIHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAnbGluZVByZWZpeCdcbiAgICAgID8gdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGhcbiAgICAgIDogMFxuICBsZXQgc2l6ZSA9IDBcbiAgcmV0dXJuIHN0YXJ0XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGNvbnN0IGtpbmQgPVxuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZS50eXBlIHx8XG4gICAgICAoY29kZSA9PT0gNDIgfHwgY29kZSA9PT0gNDMgfHwgY29kZSA9PT0gNDVcbiAgICAgICAgPyAnbGlzdFVub3JkZXJlZCdcbiAgICAgICAgOiAnbGlzdE9yZGVyZWQnKVxuICAgIGlmIChcbiAgICAgIGtpbmQgPT09ICdsaXN0VW5vcmRlcmVkJ1xuICAgICAgICA/ICFzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlciB8fCBjb2RlID09PSBzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlclxuICAgICAgICA6IGFzY2lpRGlnaXQoY29kZSlcbiAgICApIHtcbiAgICAgIGlmICghc2VsZi5jb250YWluZXJTdGF0ZS50eXBlKSB7XG4gICAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUudHlwZSA9IGtpbmRcbiAgICAgICAgZWZmZWN0cy5lbnRlcihraW5kLCB7XG4gICAgICAgICAgX2NvbnRhaW5lcjogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGtpbmQgPT09ICdsaXN0VW5vcmRlcmVkJykge1xuICAgICAgICBlZmZlY3RzLmVudGVyKCdsaXN0SXRlbVByZWZpeCcpXG4gICAgICAgIHJldHVybiBjb2RlID09PSA0MiB8fCBjb2RlID09PSA0NVxuICAgICAgICAgID8gZWZmZWN0cy5jaGVjayh0aGVtYXRpY0JyZWFrLCBub2ssIGF0TWFya2VyKShjb2RlKVxuICAgICAgICAgIDogYXRNYXJrZXIoY29kZSlcbiAgICAgIH1cbiAgICAgIGlmICghc2VsZi5pbnRlcnJ1cHQgfHwgY29kZSA9PT0gNDkpIHtcbiAgICAgICAgZWZmZWN0cy5lbnRlcignbGlzdEl0ZW1QcmVmaXgnKVxuICAgICAgICBlZmZlY3RzLmVudGVyKCdsaXN0SXRlbVZhbHVlJylcbiAgICAgICAgcmV0dXJuIGluc2lkZShjb2RlKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBpbnNpZGUoY29kZSkge1xuICAgIGlmIChhc2NpaURpZ2l0KGNvZGUpICYmICsrc2l6ZSA8IDEwKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBpbnNpZGVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKCFzZWxmLmludGVycnVwdCB8fCBzaXplIDwgMikgJiZcbiAgICAgIChzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlclxuICAgICAgICA/IGNvZGUgPT09IHNlbGYuY29udGFpbmVyU3RhdGUubWFya2VyXG4gICAgICAgIDogY29kZSA9PT0gNDEgfHwgY29kZSA9PT0gNDYpXG4gICAgKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoJ2xpc3RJdGVtVmFsdWUnKVxuICAgICAgcmV0dXJuIGF0TWFya2VyKGNvZGUpXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqKi9cbiAgZnVuY3Rpb24gYXRNYXJrZXIoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoJ2xpc3RJdGVtTWFya2VyJylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQoJ2xpc3RJdGVtTWFya2VyJylcbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlLm1hcmtlciA9IHNlbGYuY29udGFpbmVyU3RhdGUubWFya2VyIHx8IGNvZGVcbiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhcbiAgICAgIGJsYW5rTGluZSxcbiAgICAgIC8vIENhblx1MjAxOXQgYmUgZW1wdHkgd2hlbiBpbnRlcnJ1cHRpbmcuXG4gICAgICBzZWxmLmludGVycnVwdCA/IG5vayA6IG9uQmxhbmssXG4gICAgICBlZmZlY3RzLmF0dGVtcHQoXG4gICAgICAgIGxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZUNvbnN0cnVjdCxcbiAgICAgICAgZW5kT2ZQcmVmaXgsXG4gICAgICAgIG90aGVyUHJlZml4XG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gb25CbGFuayhjb2RlKSB7XG4gICAgc2VsZi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdHJ1ZVxuICAgIGluaXRpYWxTaXplKytcbiAgICByZXR1cm4gZW5kT2ZQcmVmaXgoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIG90aGVyUHJlZml4KGNvZGUpIHtcbiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlKSkge1xuICAgICAgZWZmZWN0cy5lbnRlcignbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgZWZmZWN0cy5leGl0KCdsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UnKVxuICAgICAgcmV0dXJuIGVuZE9mUHJlZml4XG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGVuZE9mUHJlZml4KGNvZGUpIHtcbiAgICBzZWxmLmNvbnRhaW5lclN0YXRlLnNpemUgPVxuICAgICAgaW5pdGlhbFNpemUgK1xuICAgICAgc2VsZi5zbGljZVNlcmlhbGl6ZShlZmZlY3RzLmV4aXQoJ2xpc3RJdGVtUHJlZml4JyksIHRydWUpLmxlbmd0aFxuICAgIHJldHVybiBvayhjb2RlKVxuICB9XG59XG5cbi8qKlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplTGlzdENvbnRpbnVhdGlvbihlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHNlbGYuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyA9IHVuZGVmaW5lZFxuICByZXR1cm4gZWZmZWN0cy5jaGVjayhibGFua0xpbmUsIG9uQmxhbmssIG5vdEJsYW5rKVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIG9uQmxhbmsoY29kZSkge1xuICAgIHNlbGYuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgPVxuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyB8fFxuICAgICAgc2VsZi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lXG5cbiAgICAvLyBXZSBoYXZlIGEgYmxhbmsgbGluZS5cbiAgICAvLyBTdGlsbCwgdHJ5IHRvIGNvbnN1bWUgYXQgbW9zdCB0aGUgaXRlbXMgc2l6ZS5cbiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKFxuICAgICAgZWZmZWN0cyxcbiAgICAgIG9rLFxuICAgICAgJ2xpc3RJdGVtSW5kZW50JyxcbiAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUuc2l6ZSArIDFcbiAgICApKGNvZGUpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBub3RCbGFuayhjb2RlKSB7XG4gICAgaWYgKHNlbGYuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgfHwgIW1hcmtkb3duU3BhY2UoY29kZSkpIHtcbiAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgPSB1bmRlZmluZWRcbiAgICAgIHNlbGYuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZSA9IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIG5vdEluQ3VycmVudEl0ZW0oY29kZSlcbiAgICB9XG4gICAgc2VsZi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyA9IHVuZGVmaW5lZFxuICAgIHNlbGYuY29udGFpbmVyU3RhdGUuaW5pdGlhbEJsYW5rTGluZSA9IHVuZGVmaW5lZFxuICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoaW5kZW50Q29uc3RydWN0LCBvaywgbm90SW5DdXJyZW50SXRlbSkoY29kZSlcbiAgfVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIG5vdEluQ3VycmVudEl0ZW0oY29kZSkge1xuICAgIC8vIFdoaWxlIHdlIGRvIGNvbnRpbnVlLCB3ZSBzaWduYWwgdGhhdCB0aGUgZmxvdyBzaG91bGQgYmUgY2xvc2VkLlxuICAgIHNlbGYuY29udGFpbmVyU3RhdGUuX2Nsb3NlRmxvdyA9IHRydWVcbiAgICAvLyBBcyB3ZVx1MjAxOXJlIGNsb3NpbmcgZmxvdywgd2VcdTIwMTlyZSBubyBsb25nZXIgaW50ZXJydXB0aW5nLlxuICAgIHNlbGYuaW50ZXJydXB0ID0gdW5kZWZpbmVkXG4gICAgLy8gQWx3YXlzIHBvcHVsYXRlZCBieSBkZWZhdWx0cy5cblxuICAgIHJldHVybiBmYWN0b3J5U3BhY2UoXG4gICAgICBlZmZlY3RzLFxuICAgICAgZWZmZWN0cy5hdHRlbXB0KGxpc3QsIG9rLCBub2spLFxuICAgICAgJ2xpbmVQcmVmaXgnLFxuICAgICAgc2VsZi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoJ2NvZGVJbmRlbnRlZCcpXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogNFxuICAgICkoY29kZSlcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlIHtUb2tlbml6ZXJ9XG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZUluZGVudChlZmZlY3RzLCBvaywgbm9rKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHJldHVybiBmYWN0b3J5U3BhY2UoXG4gICAgZWZmZWN0cyxcbiAgICBhZnRlclByZWZpeCxcbiAgICAnbGlzdEl0ZW1JbmRlbnQnLFxuICAgIHNlbGYuY29udGFpbmVyU3RhdGUuc2l6ZSArIDFcbiAgKVxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGUpIHtcbiAgICBjb25zdCB0YWlsID0gc2VsZi5ldmVudHNbc2VsZi5ldmVudHMubGVuZ3RoIC0gMV1cbiAgICByZXR1cm4gdGFpbCAmJlxuICAgICAgdGFpbFsxXS50eXBlID09PSAnbGlzdEl0ZW1JbmRlbnQnICYmXG4gICAgICB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA9PT0gc2VsZi5jb250YWluZXJTdGF0ZS5zaXplXG4gICAgICA/IG9rKGNvZGUpXG4gICAgICA6IG5vayhjb2RlKVxuICB9XG59XG5cbi8qKlxuICogQHR5cGUge0V4aXRlcn1cbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplTGlzdEVuZChlZmZlY3RzKSB7XG4gIGVmZmVjdHMuZXhpdCh0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUpXG59XG5cbi8qKlxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKi9cbmZ1bmN0aW9uIHRva2VuaXplTGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlKGVmZmVjdHMsIG9rLCBub2spIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcblxuICAvLyBBbHdheXMgcG9wdWxhdGVkIGJ5IGRlZmF1bHRzLlxuXG4gIHJldHVybiBmYWN0b3J5U3BhY2UoXG4gICAgZWZmZWN0cyxcbiAgICBhZnRlclByZWZpeCxcbiAgICAnbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlJyxcbiAgICBzZWxmLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygnY29kZUluZGVudGVkJylcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IDQgKyAxXG4gIClcblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlKSB7XG4gICAgY29uc3QgdGFpbCA9IHNlbGYuZXZlbnRzW3NlbGYuZXZlbnRzLmxlbmd0aCAtIDFdXG4gICAgcmV0dXJuICFtYXJrZG93blNwYWNlKGNvZGUpICYmXG4gICAgICB0YWlsICYmXG4gICAgICB0YWlsWzFdLnR5cGUgPT09ICdsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UnXG4gICAgICA/IG9rKGNvZGUpXG4gICAgICA6IG5vayhjb2RlKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuUmVzb2x2ZXJ9IFJlc29sdmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlN0YXRlfSBTdGF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZXJ9IFRva2VuaXplclxuICovXG5cbmltcG9ydCB7ZmFjdG9yeVNwYWNlfSBmcm9tICdtaWNyb21hcmstZmFjdG9yeS1zcGFjZSdcbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nLCBtYXJrZG93blNwYWNlfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG4vKiogQHR5cGUge0NvbnN0cnVjdH0gKi9cbmV4cG9ydCBjb25zdCBzZXRleHRVbmRlcmxpbmUgPSB7XG4gIG5hbWU6ICdzZXRleHRVbmRlcmxpbmUnLFxuICB0b2tlbml6ZTogdG9rZW5pemVTZXRleHRVbmRlcmxpbmUsXG4gIHJlc29sdmVUbzogcmVzb2x2ZVRvU2V0ZXh0VW5kZXJsaW5lXG59XG5cbi8qKiBAdHlwZSB7UmVzb2x2ZXJ9ICovXG5mdW5jdGlvbiByZXNvbHZlVG9TZXRleHRVbmRlcmxpbmUoZXZlbnRzLCBjb250ZXh0KSB7XG4gIC8vIFRvIGRvOiByZXNvbHZlIGxpa2UgYG1hcmtkb3duLXJzYC5cbiAgbGV0IGluZGV4ID0gZXZlbnRzLmxlbmd0aFxuICAvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGNvbnRlbnRcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCB0ZXh0XG4gIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgZGVmaW5pdGlvblxuXG4gIC8vIEZpbmQgdGhlIG9wZW5pbmcgb2YgdGhlIGNvbnRlbnQuXG4gIC8vIEl0XHUyMDE5bGwgYWx3YXlzIGV4aXN0OiB3ZSBkb25cdTIwMTl0IHRva2VuaXplIGlmIGl0IGlzblx1MjAxOXQgdGhlcmUuXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgaWYgKGV2ZW50c1tpbmRleF1bMF0gPT09ICdlbnRlcicpIHtcbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgICBjb250ZW50ID0gaW5kZXhcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09ICdwYXJhZ3JhcGgnKSB7XG4gICAgICAgIHRleHQgPSBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgICAvLyBFeGl0XG4gICAgZWxzZSB7XG4gICAgICBpZiAoZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSAnY29udGVudCcpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBjb250ZW50IGVuZCAoaWYgbmVlZGVkIHdlXHUyMDE5bGwgYWRkIGl0IGxhdGVyKVxuICAgICAgICBldmVudHMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgfVxuICAgICAgaWYgKCFkZWZpbml0aW9uICYmIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gJ2RlZmluaXRpb24nKSB7XG4gICAgICAgIGRlZmluaXRpb24gPSBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBoZWFkaW5nID0ge1xuICAgIHR5cGU6ICdzZXRleHRIZWFkaW5nJyxcbiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW3RleHRdWzFdLnN0YXJ0KSxcbiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uZW5kKVxuICB9XG5cbiAgLy8gQ2hhbmdlIHRoZSBwYXJhZ3JhcGggdG8gc2V0ZXh0IGhlYWRpbmcgdGV4dC5cbiAgZXZlbnRzW3RleHRdWzFdLnR5cGUgPSAnc2V0ZXh0SGVhZGluZ1RleHQnXG5cbiAgLy8gSWYgd2UgaGF2ZSBkZWZpbml0aW9ucyBpbiB0aGUgY29udGVudCwgd2VcdTIwMTlsbCBrZWVwIG9uIGhhdmluZyBjb250ZW50LFxuICAvLyBidXQgd2UgbmVlZCBtb3ZlIGl0LlxuICBpZiAoZGVmaW5pdGlvbikge1xuICAgIGV2ZW50cy5zcGxpY2UodGV4dCwgMCwgWydlbnRlcicsIGhlYWRpbmcsIGNvbnRleHRdKVxuICAgIGV2ZW50cy5zcGxpY2UoZGVmaW5pdGlvbiArIDEsIDAsIFsnZXhpdCcsIGV2ZW50c1tjb250ZW50XVsxXSwgY29udGV4dF0pXG4gICAgZXZlbnRzW2NvbnRlbnRdWzFdLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tkZWZpbml0aW9uXVsxXS5lbmQpXG4gIH0gZWxzZSB7XG4gICAgZXZlbnRzW2NvbnRlbnRdWzFdID0gaGVhZGluZ1xuICB9XG5cbiAgLy8gQWRkIHRoZSBoZWFkaW5nIGV4aXQgYXQgdGhlIGVuZC5cbiAgZXZlbnRzLnB1c2goWydleGl0JywgaGVhZGluZywgY29udGV4dF0pXG4gIHJldHVybiBldmVudHNcbn1cblxuLyoqXG4gKiBAdGhpcyB7VG9rZW5pemVDb250ZXh0fVxuICogQHR5cGUge1Rva2VuaXplcn1cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemVTZXRleHRVbmRlcmxpbmUoZWZmZWN0cywgb2ssIG5vaykge1xuICBjb25zdCBzZWxmID0gdGhpc1xuICAvKiogQHR5cGUge05vbk51bGxhYmxlPENvZGU+fSAqL1xuICBsZXQgbWFya2VyXG4gIHJldHVybiBzdGFydFxuXG4gIC8qKlxuICAgKiBBdCBzdGFydCBvZiBoZWFkaW5nIChzZXRleHQpIHVuZGVybGluZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IGFhXG4gICAqID4gfCA9PVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgIGxldCBpbmRleCA9IHNlbGYuZXZlbnRzLmxlbmd0aFxuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgcGFyYWdyYXBoXG4gICAgLy8gRmluZCBhbiBvcGVuaW5nLlxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAvLyBTa2lwIGVudGVyL2V4aXQgb2YgbGluZSBlbmRpbmcsIGxpbmUgcHJlZml4LCBhbmQgY29udGVudC5cbiAgICAgIC8vIFdlIGNhbiBub3cgZWl0aGVyIGhhdmUgYSBkZWZpbml0aW9uIG9yIGEgcGFyYWdyYXBoLlxuICAgICAgaWYgKFxuICAgICAgICBzZWxmLmV2ZW50c1tpbmRleF1bMV0udHlwZSAhPT0gJ2xpbmVFbmRpbmcnICYmXG4gICAgICAgIHNlbGYuZXZlbnRzW2luZGV4XVsxXS50eXBlICE9PSAnbGluZVByZWZpeCcgJiZcbiAgICAgICAgc2VsZi5ldmVudHNbaW5kZXhdWzFdLnR5cGUgIT09ICdjb250ZW50J1xuICAgICAgKSB7XG4gICAgICAgIHBhcmFncmFwaCA9IHNlbGYuZXZlbnRzW2luZGV4XVsxXS50eXBlID09PSAncGFyYWdyYXBoJ1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRvIGRvOiBoYW5kbGUgbGF6eS9waWVyY2UgbGlrZSBgbWFya2Rvd24tcnNgLlxuICAgIC8vIFRvIGRvOiBwYXJzZSBpbmRlbnQgbGlrZSBgbWFya2Rvd24tcnNgLlxuICAgIGlmICghc2VsZi5wYXJzZXIubGF6eVtzZWxmLm5vdygpLmxpbmVdICYmIChzZWxmLmludGVycnVwdCB8fCBwYXJhZ3JhcGgpKSB7XG4gICAgICBlZmZlY3RzLmVudGVyKCdzZXRleHRIZWFkaW5nTGluZScpXG4gICAgICBtYXJrZXIgPSBjb2RlXG4gICAgICByZXR1cm4gYmVmb3JlKGNvZGUpXG4gICAgfVxuICAgIHJldHVybiBub2soY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBvcHRpb25hbCB3aGl0ZXNwYWNlLCBhdCBgLWAgb3IgYD1gLlxuICAgKlxuICAgKiBgYGBtYXJrZG93blxuICAgKiAgIHwgYWFcbiAgICogPiB8ID09XG4gICAqICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBiZWZvcmUoY29kZSkge1xuICAgIGVmZmVjdHMuZW50ZXIoJ3NldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UnKVxuICAgIHJldHVybiBpbnNpZGUoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBzZXF1ZW5jZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IGFhXG4gICAqID4gfCA9PVxuICAgKiAgICAgXlxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge1N0YXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5zaWRlKGNvZGUpIHtcbiAgICBpZiAoY29kZSA9PT0gbWFya2VyKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVybiBpbnNpZGVcbiAgICB9XG4gICAgZWZmZWN0cy5leGl0KCdzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlJylcbiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlKVxuICAgICAgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYWZ0ZXIsICdsaW5lU3VmZml4JykoY29kZSlcbiAgICAgIDogYWZ0ZXIoY29kZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBzZXF1ZW5jZSwgYWZ0ZXIgb3B0aW9uYWwgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogYGBgbWFya2Rvd25cbiAgICogICB8IGFhXG4gICAqID4gfCA9PVxuICAgKiAgICAgICBeXG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGV9XG4gICAqL1xuICBmdW5jdGlvbiBhZnRlcihjb2RlKSB7XG4gICAgaWYgKGNvZGUgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGUpKSB7XG4gICAgICBlZmZlY3RzLmV4aXQoJ3NldGV4dEhlYWRpbmdMaW5lJylcbiAgICAgIHJldHVybiBvayhjb2RlKVxuICAgIH1cbiAgICByZXR1cm4gbm9rKGNvZGUpXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSW5pdGlhbENvbnN0cnVjdH0gSW5pdGlhbENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Jbml0aWFsaXplcn0gSW5pdGlhbGl6ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKi9cblxuaW1wb3J0IHtibGFua0xpbmUsIGNvbnRlbnR9IGZyb20gJ21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsnXG5pbXBvcnQge2ZhY3RvcnlTcGFjZX0gZnJvbSAnbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UnXG5pbXBvcnQge21hcmtkb3duTGluZUVuZGluZ30gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyJ1xuLyoqIEB0eXBlIHtJbml0aWFsQ29uc3RydWN0fSAqL1xuZXhwb3J0IGNvbnN0IGZsb3cgPSB7XG4gIHRva2VuaXplOiBpbml0aWFsaXplRmxvd1xufVxuXG4vKipcbiAqIEB0aGlzIHtUb2tlbml6ZUNvbnRleHR9XG4gKiBAdHlwZSB7SW5pdGlhbGl6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVGbG93KGVmZmVjdHMpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgY29uc3QgaW5pdGlhbCA9IGVmZmVjdHMuYXR0ZW1wdChcbiAgICAvLyBUcnkgdG8gcGFyc2UgYSBibGFuayBsaW5lLlxuICAgIGJsYW5rTGluZSxcbiAgICBhdEJsYW5rRW5kaW5nLFxuICAgIC8vIFRyeSB0byBwYXJzZSBpbml0aWFsIGZsb3cgKGVzc2VudGlhbGx5LCBvbmx5IGNvZGUpLlxuICAgIGVmZmVjdHMuYXR0ZW1wdChcbiAgICAgIHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvd0luaXRpYWwsXG4gICAgICBhZnRlckNvbnN0cnVjdCxcbiAgICAgIGZhY3RvcnlTcGFjZShcbiAgICAgICAgZWZmZWN0cyxcbiAgICAgICAgZWZmZWN0cy5hdHRlbXB0KFxuICAgICAgICAgIHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdyxcbiAgICAgICAgICBhZnRlckNvbnN0cnVjdCxcbiAgICAgICAgICBlZmZlY3RzLmF0dGVtcHQoY29udGVudCwgYWZ0ZXJDb25zdHJ1Y3QpXG4gICAgICAgICksXG4gICAgICAgICdsaW5lUHJlZml4J1xuICAgICAgKVxuICAgIClcbiAgKVxuICByZXR1cm4gaW5pdGlhbFxuXG4gIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gIGZ1bmN0aW9uIGF0QmxhbmtFbmRpbmcoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nQmxhbmsnKVxuICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgIGVmZmVjdHMuZXhpdCgnbGluZUVuZGluZ0JsYW5rJylcbiAgICBzZWxmLmN1cnJlbnRDb25zdHJ1Y3QgPSB1bmRlZmluZWRcbiAgICByZXR1cm4gaW5pdGlhbFxuICB9XG5cbiAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgZnVuY3Rpb24gYWZ0ZXJDb25zdHJ1Y3QoY29kZSkge1xuICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlZmZlY3RzLmVudGVyKCdsaW5lRW5kaW5nJylcbiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICBlZmZlY3RzLmV4aXQoJ2xpbmVFbmRpbmcnKVxuICAgIHNlbGYuY3VycmVudENvbnN0cnVjdCA9IHVuZGVmaW5lZFxuICAgIHJldHVybiBpbml0aWFsXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Jbml0aWFsQ29uc3RydWN0fSBJbml0aWFsQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkluaXRpYWxpemVyfSBJbml0aWFsaXplclxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5SZXNvbHZlcn0gUmVzb2x2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuU3RhdGV9IFN0YXRlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKi9cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVyID0ge1xuICByZXNvbHZlQWxsOiBjcmVhdGVSZXNvbHZlcigpXG59XG5leHBvcnQgY29uc3Qgc3RyaW5nID0gaW5pdGlhbGl6ZUZhY3RvcnkoJ3N0cmluZycpXG5leHBvcnQgY29uc3QgdGV4dCA9IGluaXRpYWxpemVGYWN0b3J5KCd0ZXh0JylcblxuLyoqXG4gKiBAcGFyYW0geydzdHJpbmcnIHwgJ3RleHQnfSBmaWVsZFxuICogQHJldHVybnMge0luaXRpYWxDb25zdHJ1Y3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVGYWN0b3J5KGZpZWxkKSB7XG4gIHJldHVybiB7XG4gICAgdG9rZW5pemU6IGluaXRpYWxpemVUZXh0LFxuICAgIHJlc29sdmVBbGw6IGNyZWF0ZVJlc29sdmVyKFxuICAgICAgZmllbGQgPT09ICd0ZXh0JyA/IHJlc29sdmVBbGxMaW5lU3VmZml4ZXMgOiB1bmRlZmluZWRcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge1Rva2VuaXplQ29udGV4dH1cbiAgICogQHR5cGUge0luaXRpYWxpemVyfVxuICAgKi9cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZVRleHQoZWZmZWN0cykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgY29uc3QgY29uc3RydWN0cyA9IHRoaXMucGFyc2VyLmNvbnN0cnVjdHNbZmllbGRdXG4gICAgY29uc3QgdGV4dCA9IGVmZmVjdHMuYXR0ZW1wdChjb25zdHJ1Y3RzLCBzdGFydCwgbm90VGV4dClcbiAgICByZXR1cm4gc3RhcnRcblxuICAgIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gICAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZSkgPyB0ZXh0KGNvZGUpIDogbm90VGV4dChjb2RlKVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gICAgZnVuY3Rpb24gbm90VGV4dChjb2RlKSB7XG4gICAgICBpZiAoY29kZSA9PT0gbnVsbCkge1xuICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBlZmZlY3RzLmVudGVyKCdkYXRhJylcbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICAgIGZ1bmN0aW9uIGRhdGEoY29kZSkge1xuICAgICAgaWYgKGF0QnJlYWsoY29kZSkpIHtcbiAgICAgICAgZWZmZWN0cy5leGl0KCdkYXRhJylcbiAgICAgICAgcmV0dXJuIHRleHQoY29kZSlcbiAgICAgIH1cblxuICAgICAgLy8gRGF0YS5cbiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge0NvZGV9IGNvZGVcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhdEJyZWFrKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBjb25zdCBsaXN0ID0gY29uc3RydWN0c1tjb2RlXVxuICAgICAgbGV0IGluZGV4ID0gLTFcbiAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG5cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBsaXN0W2luZGV4XVxuICAgICAgICAgIGlmICghaXRlbS5wcmV2aW91cyB8fCBpdGVtLnByZXZpb3VzLmNhbGwoc2VsZiwgc2VsZi5wcmV2aW91cykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Jlc29sdmVyIHwgdW5kZWZpbmVkfSBbZXh0cmFSZXNvbHZlcl1cbiAqIEByZXR1cm5zIHtSZXNvbHZlcn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZXIoZXh0cmFSZXNvbHZlcikge1xuICByZXR1cm4gcmVzb2x2ZUFsbFRleHRcblxuICAvKiogQHR5cGUge1Jlc29sdmVyfSAqL1xuICBmdW5jdGlvbiByZXNvbHZlQWxsVGV4dChldmVudHMsIGNvbnRleHQpIHtcbiAgICBsZXQgaW5kZXggPSAtMVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBlbnRlclxuXG4gICAgLy8gQSByYXRoZXIgYm9yaW5nIGNvbXB1dGF0aW9uICh0byBtZXJnZSBhZGphY2VudCBgZGF0YWAgZXZlbnRzKSB3aGljaFxuICAgIC8vIGltcHJvdmVzIG1tIHBlcmZvcm1hbmNlIGJ5IDI5JS5cbiAgICB3aGlsZSAoKytpbmRleCA8PSBldmVudHMubGVuZ3RoKSB7XG4gICAgICBpZiAoZW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoZXZlbnRzW2luZGV4XSAmJiBldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09ICdkYXRhJykge1xuICAgICAgICAgIGVudGVyID0gaW5kZXhcbiAgICAgICAgICBpbmRleCsrXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWV2ZW50c1tpbmRleF0gfHwgZXZlbnRzW2luZGV4XVsxXS50eXBlICE9PSAnZGF0YScpIHtcbiAgICAgICAgLy8gRG9uXHUyMDE5dCBkbyBhbnl0aGluZyBpZiB0aGVyZSBpcyBvbmUgZGF0YSB0b2tlbi5cbiAgICAgICAgaWYgKGluZGV4ICE9PSBlbnRlciArIDIpIHtcbiAgICAgICAgICBldmVudHNbZW50ZXJdWzFdLmVuZCA9IGV2ZW50c1tpbmRleCAtIDFdWzFdLmVuZFxuICAgICAgICAgIGV2ZW50cy5zcGxpY2UoZW50ZXIgKyAyLCBpbmRleCAtIGVudGVyIC0gMilcbiAgICAgICAgICBpbmRleCA9IGVudGVyICsgMlxuICAgICAgICB9XG4gICAgICAgIGVudGVyID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHRyYVJlc29sdmVyID8gZXh0cmFSZXNvbHZlcihldmVudHMsIGNvbnRleHQpIDogZXZlbnRzXG4gIH1cbn1cblxuLyoqXG4gKiBBIHJhdGhlciB1Z2x5IHNldCBvZiBpbnN0cnVjdGlvbnMgd2hpY2ggYWdhaW4gbG9va3MgYXQgY2h1bmtzIGluIHRoZSBpbnB1dFxuICogc3RyZWFtLlxuICogVGhlIHJlYXNvbiB0byBkbyB0aGlzIGhlcmUgaXMgdGhhdCBpdCBpcyAqbXVjaCogZmFzdGVyIHRvIHBhcnNlIGluIHJldmVyc2UuXG4gKiBBbmQgdGhhdCB3ZSBjYW5cdTIwMTl0IGhvb2sgaW50byBgbnVsbGAgdG8gc3BsaXQgdGhlIGxpbmUgc3VmZml4IGJlZm9yZSBhbiBFT0YuXG4gKiBUbyBkbzogZmlndXJlIG91dCBpZiB3ZSBjYW4gbWFrZSB0aGlzIGludG8gYSBjbGVhbiB1dGlsaXR5LCBvciBldmVuIGluIGNvcmUuXG4gKiBBcyBpdCB3aWxsIGJlIHVzZWZ1bCBmb3IgR0ZNcyBsaXRlcmFsIGF1dG9saW5rIGV4dGVuc2lvbiAoYW5kIG1heWJlIGV2ZW5cbiAqIHRhYmxlcz8pXG4gKlxuICogQHR5cGUge1Jlc29sdmVyfVxuICovXG5mdW5jdGlvbiByZXNvbHZlQWxsTGluZVN1ZmZpeGVzKGV2ZW50cywgY29udGV4dCkge1xuICBsZXQgZXZlbnRJbmRleCA9IDAgLy8gU2tpcCBmaXJzdC5cblxuICB3aGlsZSAoKytldmVudEluZGV4IDw9IGV2ZW50cy5sZW5ndGgpIHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnRJbmRleCA9PT0gZXZlbnRzLmxlbmd0aCB8fFxuICAgICAgICBldmVudHNbZXZlbnRJbmRleF1bMV0udHlwZSA9PT0gJ2xpbmVFbmRpbmcnKSAmJlxuICAgICAgZXZlbnRzW2V2ZW50SW5kZXggLSAxXVsxXS50eXBlID09PSAnZGF0YSdcbiAgICApIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBldmVudHNbZXZlbnRJbmRleCAtIDFdWzFdXG4gICAgICBjb25zdCBjaHVua3MgPSBjb250ZXh0LnNsaWNlU3RyZWFtKGRhdGEpXG4gICAgICBsZXQgaW5kZXggPSBjaHVua3MubGVuZ3RoXG4gICAgICBsZXQgYnVmZmVySW5kZXggPSAtMVxuICAgICAgbGV0IHNpemUgPSAwXG4gICAgICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgdGFic1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSBjaHVua3NbaW5kZXhdXG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgYnVmZmVySW5kZXggPSBjaHVuay5sZW5ndGhcbiAgICAgICAgICB3aGlsZSAoY2h1bmsuY2hhckNvZGVBdChidWZmZXJJbmRleCAtIDEpID09PSAzMikge1xuICAgICAgICAgICAgc2l6ZSsrXG4gICAgICAgICAgICBidWZmZXJJbmRleC0tXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChidWZmZXJJbmRleCkgYnJlYWtcbiAgICAgICAgICBidWZmZXJJbmRleCA9IC0xXG4gICAgICAgIH1cbiAgICAgICAgLy8gTnVtYmVyXG4gICAgICAgIGVsc2UgaWYgKGNodW5rID09PSAtMikge1xuICAgICAgICAgIHRhYnMgPSB0cnVlXG4gICAgICAgICAgc2l6ZSsrXG4gICAgICAgIH0gZWxzZSBpZiAoY2h1bmsgPT09IC0xKSB7XG4gICAgICAgICAgLy8gRW1wdHlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSZXBsYWNlbWVudCBjaGFyYWN0ZXIsIGV4aXQuXG4gICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzaXplKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgICAgIHR5cGU6XG4gICAgICAgICAgICBldmVudEluZGV4ID09PSBldmVudHMubGVuZ3RoIHx8IHRhYnMgfHwgc2l6ZSA8IDJcbiAgICAgICAgICAgICAgPyAnbGluZVN1ZmZpeCdcbiAgICAgICAgICAgICAgOiAnaGFyZEJyZWFrVHJhaWxpbmcnLFxuICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBkYXRhLmVuZC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBkYXRhLmVuZC5jb2x1bW4gLSBzaXplLFxuICAgICAgICAgICAgb2Zmc2V0OiBkYXRhLmVuZC5vZmZzZXQgLSBzaXplLFxuICAgICAgICAgICAgX2luZGV4OiBkYXRhLnN0YXJ0Ll9pbmRleCArIGluZGV4LFxuICAgICAgICAgICAgX2J1ZmZlckluZGV4OiBpbmRleFxuICAgICAgICAgICAgICA/IGJ1ZmZlckluZGV4XG4gICAgICAgICAgICAgIDogZGF0YS5zdGFydC5fYnVmZmVySW5kZXggKyBidWZmZXJJbmRleFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW5kOiBPYmplY3QuYXNzaWduKHt9LCBkYXRhLmVuZClcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLnN0YXJ0KVxuICAgICAgICBpZiAoZGF0YS5zdGFydC5vZmZzZXQgPT09IGRhdGEuZW5kLm9mZnNldCkge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgdG9rZW4pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnRzLnNwbGljZShcbiAgICAgICAgICAgIGV2ZW50SW5kZXgsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgWydlbnRlcicsIHRva2VuLCBjb250ZXh0XSxcbiAgICAgICAgICAgIFsnZXhpdCcsIHRva2VuLCBjb250ZXh0XVxuICAgICAgICAgIClcbiAgICAgICAgICBldmVudEluZGV4ICs9IDJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnRJbmRleCsrXG4gICAgfVxuICB9XG4gIHJldHVybiBldmVudHNcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ2h1bmt9IENodW5rXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0fSBDb25zdHJ1Y3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29uc3RydWN0UmVjb3JkfSBDb25zdHJ1Y3RSZWNvcmRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRWZmZWN0c30gRWZmZWN0c1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Jbml0aWFsQ29uc3RydWN0fSBJbml0aWFsQ29uc3RydWN0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlBhcnNlQ29udGV4dH0gUGFyc2VDb250ZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5TdGF0ZX0gU3RhdGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVG9rZW59IFRva2VuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuVHlwZX0gVG9rZW5UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VuaXplQ29udGV4dH0gVG9rZW5pemVDb250ZXh0XG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgUmVzdG9yZVxuICogQHJldHVybnMge3ZvaWR9XG4gKlxuICogQHR5cGVkZWYgSW5mb1xuICogQHByb3BlcnR5IHtSZXN0b3JlfSByZXN0b3JlXG4gKiBAcHJvcGVydHkge251bWJlcn0gZnJvbVxuICpcbiAqIEBjYWxsYmFjayBSZXR1cm5IYW5kbGVcbiAqICAgSGFuZGxlIGEgc3VjY2Vzc2Z1bCBydW4uXG4gKiBAcGFyYW0ge0NvbnN0cnVjdH0gY29uc3RydWN0XG4gKiBAcGFyYW0ge0luZm99IGluZm9cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbmltcG9ydCB7bWFya2Rvd25MaW5lRW5kaW5nfSBmcm9tICdtaWNyb21hcmstdXRpbC1jaGFyYWN0ZXInXG5pbXBvcnQge3B1c2gsIHNwbGljZX0gZnJvbSAnbWljcm9tYXJrLXV0aWwtY2h1bmtlZCdcbmltcG9ydCB7cmVzb2x2ZUFsbH0gZnJvbSAnbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGwnXG4vKipcbiAqIENyZWF0ZSBhIHRva2VuaXplci5cbiAqIFRva2VuaXplcnMgZGVhbCB3aXRoIG9uZSB0eXBlIG9mIGRhdGEgKGUuZy4sIGNvbnRhaW5lcnMsIGZsb3csIHRleHQpLlxuICogVGhlIHBhcnNlciBpcyB0aGUgb2JqZWN0IGRlYWxpbmcgd2l0aCBpdCBhbGwuXG4gKiBgaW5pdGlhbGl6ZWAgd29ya3MgbGlrZSBvdGhlciBjb25zdHJ1Y3RzLCBleGNlcHQgdGhhdCBvbmx5IGl0cyBgdG9rZW5pemVgXG4gKiBmdW5jdGlvbiBpcyB1c2VkLCBpbiB3aGljaCBjYXNlIGl0IGRvZXNuXHUyMDE5dCByZWNlaXZlIGFuIGBva2Agb3IgYG5va2AuXG4gKiBgZnJvbWAgY2FuIGJlIGdpdmVuIHRvIHNldCB0aGUgcG9pbnQgYmVmb3JlIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIGFsdGhvdWdoXG4gKiB3aGVuIGZ1cnRoZXIgbGluZXMgYXJlIGluZGVudGVkLCB0aGV5IG11c3QgYmUgc2V0IHdpdGggYGRlZmluZVNraXBgLlxuICpcbiAqIEBwYXJhbSB7UGFyc2VDb250ZXh0fSBwYXJzZXJcbiAqIEBwYXJhbSB7SW5pdGlhbENvbnN0cnVjdH0gaW5pdGlhbGl6ZVxuICogQHBhcmFtIHtPbWl0PFBvaW50LCAnX2J1ZmZlckluZGV4JyB8ICdfaW5kZXgnPiB8IHVuZGVmaW5lZH0gW2Zyb21dXG4gKiBAcmV0dXJucyB7VG9rZW5pemVDb250ZXh0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW5pemVyKHBhcnNlciwgaW5pdGlhbGl6ZSwgZnJvbSkge1xuICAvKiogQHR5cGUge1BvaW50fSAqL1xuICBsZXQgcG9pbnQgPSBPYmplY3QuYXNzaWduKFxuICAgIGZyb21cbiAgICAgID8gT2JqZWN0LmFzc2lnbih7fSwgZnJvbSlcbiAgICAgIDoge1xuICAgICAgICAgIGxpbmU6IDEsXG4gICAgICAgICAgY29sdW1uOiAxLFxuICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICB9LFxuICAgIHtcbiAgICAgIF9pbmRleDogMCxcbiAgICAgIF9idWZmZXJJbmRleDogLTFcbiAgICB9XG4gIClcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSAqL1xuICBjb25zdCBjb2x1bW5TdGFydCA9IHt9XG4gIC8qKiBAdHlwZSB7QXJyYXk8Q29uc3RydWN0Pn0gKi9cbiAgY29uc3QgcmVzb2x2ZUFsbENvbnN0cnVjdHMgPSBbXVxuICAvKiogQHR5cGUge0FycmF5PENodW5rPn0gKi9cbiAgbGV0IGNodW5rcyA9IFtdXG4gIC8qKiBAdHlwZSB7QXJyYXk8VG9rZW4+fSAqL1xuICBsZXQgc3RhY2sgPSBbXVxuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBjb25zdW1lZCA9IHRydWVcblxuICAvKipcbiAgICogVG9vbHMgdXNlZCBmb3IgdG9rZW5pemluZy5cbiAgICpcbiAgICogQHR5cGUge0VmZmVjdHN9XG4gICAqL1xuICBjb25zdCBlZmZlY3RzID0ge1xuICAgIGNvbnN1bWUsXG4gICAgZW50ZXIsXG4gICAgZXhpdCxcbiAgICBhdHRlbXB0OiBjb25zdHJ1Y3RGYWN0b3J5KG9uc3VjY2Vzc2Z1bGNvbnN0cnVjdCksXG4gICAgY2hlY2s6IGNvbnN0cnVjdEZhY3Rvcnkob25zdWNjZXNzZnVsY2hlY2spLFxuICAgIGludGVycnVwdDogY29uc3RydWN0RmFjdG9yeShvbnN1Y2Nlc3NmdWxjaGVjaywge1xuICAgICAgaW50ZXJydXB0OiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0ZSBhbmQgdG9vbHMgZm9yIHJlc29sdmluZyBhbmQgc2VyaWFsaXppbmcuXG4gICAqXG4gICAqIEB0eXBlIHtUb2tlbml6ZUNvbnRleHR9XG4gICAqL1xuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIHByZXZpb3VzOiBudWxsLFxuICAgIGNvZGU6IG51bGwsXG4gICAgY29udGFpbmVyU3RhdGU6IHt9LFxuICAgIGV2ZW50czogW10sXG4gICAgcGFyc2VyLFxuICAgIHNsaWNlU3RyZWFtLFxuICAgIHNsaWNlU2VyaWFsaXplLFxuICAgIG5vdyxcbiAgICBkZWZpbmVTa2lwLFxuICAgIHdyaXRlXG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YXRlIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7U3RhdGUgfCB2b2lkfVxuICAgKi9cbiAgbGV0IHN0YXRlID0gaW5pdGlhbGl6ZS50b2tlbml6ZS5jYWxsKGNvbnRleHQsIGVmZmVjdHMpXG5cbiAgLyoqXG4gICAqIFRyYWNrIHdoaWNoIGNoYXJhY3RlciB3ZSBleHBlY3QgdG8gYmUgY29uc3VtZWQsIHRvIGNhdGNoIGJ1Z3MuXG4gICAqXG4gICAqIEB0eXBlIHtDb2RlfVxuICAgKi9cbiAgbGV0IGV4cGVjdGVkQ29kZVxuICBpZiAoaW5pdGlhbGl6ZS5yZXNvbHZlQWxsKSB7XG4gICAgcmVzb2x2ZUFsbENvbnN0cnVjdHMucHVzaChpbml0aWFsaXplKVxuICB9XG4gIHJldHVybiBjb250ZXh0XG5cbiAgLyoqIEB0eXBlIHtUb2tlbml6ZUNvbnRleHRbJ3dyaXRlJ119ICovXG4gIGZ1bmN0aW9uIHdyaXRlKHNsaWNlKSB7XG4gICAgY2h1bmtzID0gcHVzaChjaHVua3MsIHNsaWNlKVxuICAgIG1haW4oKVxuXG4gICAgLy8gRXhpdCBpZiB3ZVx1MjAxOXJlIG5vdCBkb25lLCByZXNvbHZlIG1pZ2h0IGNoYW5nZSBzdHVmZi5cbiAgICBpZiAoY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICAgIGFkZFJlc3VsdChpbml0aWFsaXplLCAwKVxuXG4gICAgLy8gT3RoZXJ3aXNlLCByZXNvbHZlLCBhbmQgZXhpdC5cbiAgICBjb250ZXh0LmV2ZW50cyA9IHJlc29sdmVBbGwocmVzb2x2ZUFsbENvbnN0cnVjdHMsIGNvbnRleHQuZXZlbnRzLCBjb250ZXh0KVxuICAgIHJldHVybiBjb250ZXh0LmV2ZW50c1xuICB9XG5cbiAgLy9cbiAgLy8gVG9vbHMuXG4gIC8vXG5cbiAgLyoqIEB0eXBlIHtUb2tlbml6ZUNvbnRleHRbJ3NsaWNlU2VyaWFsaXplJ119ICovXG4gIGZ1bmN0aW9uIHNsaWNlU2VyaWFsaXplKHRva2VuLCBleHBhbmRUYWJzKSB7XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUNodW5rcyhzbGljZVN0cmVhbSh0b2tlbiksIGV4cGFuZFRhYnMpXG4gIH1cblxuICAvKiogQHR5cGUge1Rva2VuaXplQ29udGV4dFsnc2xpY2VTdHJlYW0nXX0gKi9cbiAgZnVuY3Rpb24gc2xpY2VTdHJlYW0odG9rZW4pIHtcbiAgICByZXR1cm4gc2xpY2VDaHVua3MoY2h1bmtzLCB0b2tlbilcbiAgfVxuXG4gIC8qKiBAdHlwZSB7VG9rZW5pemVDb250ZXh0Wydub3cnXX0gKi9cbiAgZnVuY3Rpb24gbm93KCkge1xuICAgIC8vIFRoaXMgaXMgYSBob3QgcGF0aCwgc28gd2UgY2xvbmUgbWFudWFsbHkgaW5zdGVhZCBvZiBgT2JqZWN0LmFzc2lnbih7fSwgcG9pbnQpYFxuICAgIGNvbnN0IHtsaW5lLCBjb2x1bW4sIG9mZnNldCwgX2luZGV4LCBfYnVmZmVySW5kZXh9ID0gcG9pbnRcbiAgICByZXR1cm4ge1xuICAgICAgbGluZSxcbiAgICAgIGNvbHVtbixcbiAgICAgIG9mZnNldCxcbiAgICAgIF9pbmRleCxcbiAgICAgIF9idWZmZXJJbmRleFxuICAgIH1cbiAgfVxuXG4gIC8qKiBAdHlwZSB7VG9rZW5pemVDb250ZXh0WydkZWZpbmVTa2lwJ119ICovXG4gIGZ1bmN0aW9uIGRlZmluZVNraXAodmFsdWUpIHtcbiAgICBjb2x1bW5TdGFydFt2YWx1ZS5saW5lXSA9IHZhbHVlLmNvbHVtblxuICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKClcbiAgfVxuXG4gIC8vXG4gIC8vIFN0YXRlIG1hbmFnZW1lbnQuXG4gIC8vXG5cbiAgLyoqXG4gICAqIE1haW4gbG9vcCAobm90ZSB0aGF0IGBfaW5kZXhgIGFuZCBgX2J1ZmZlckluZGV4YCBpbiBgcG9pbnRgIGFyZSBtb2RpZmllZCBieVxuICAgKiBgY29uc3VtZWApLlxuICAgKiBIZXJlIGlzIHdoZXJlIHdlIHdhbGsgdGhyb3VnaCB0aGUgY2h1bmtzLCB3aGljaCBlaXRoZXIgaW5jbHVkZSBzdHJpbmdzIG9mXG4gICAqIHNldmVyYWwgY2hhcmFjdGVycywgb3IgbnVtZXJpY2FsIGNoYXJhY3RlciBjb2Rlcy5cbiAgICogVGhlIHJlYXNvbiB0byBkbyB0aGlzIGluIGEgbG9vcCBpbnN0ZWFkIG9mIGEgY2FsbCBpcyBzbyB0aGUgc3RhY2sgY2FuXG4gICAqIGRyYWluLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIG1haW4oKSB7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgbGV0IGNodW5rSW5kZXhcbiAgICB3aGlsZSAocG9pbnQuX2luZGV4IDwgY2h1bmtzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2h1bmsgPSBjaHVua3NbcG9pbnQuX2luZGV4XVxuXG4gICAgICAvLyBJZiB3ZVx1MjAxOXJlIGluIGEgYnVmZmVyIGNodW5rLCBsb29wIHRocm91Z2ggaXQuXG4gICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgICBjaHVua0luZGV4ID0gcG9pbnQuX2luZGV4XG4gICAgICAgIGlmIChwb2ludC5fYnVmZmVySW5kZXggPCAwKSB7XG4gICAgICAgICAgcG9pbnQuX2J1ZmZlckluZGV4ID0gMFxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICBwb2ludC5faW5kZXggPT09IGNodW5rSW5kZXggJiZcbiAgICAgICAgICBwb2ludC5fYnVmZmVySW5kZXggPCBjaHVuay5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgZ28oY2h1bmsuY2hhckNvZGVBdChwb2ludC5fYnVmZmVySW5kZXgpKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbyhjaHVuaylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVhbCB3aXRoIG9uZSBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvZGV9IGNvZGVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiBnbyhjb2RlKSB7XG4gICAgY29uc3VtZWQgPSB1bmRlZmluZWRcbiAgICBleHBlY3RlZENvZGUgPSBjb2RlXG4gICAgc3RhdGUgPSBzdGF0ZShjb2RlKVxuICB9XG5cbiAgLyoqIEB0eXBlIHtFZmZlY3RzWydjb25zdW1lJ119ICovXG4gIGZ1bmN0aW9uIGNvbnN1bWUoY29kZSkge1xuICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZSkpIHtcbiAgICAgIHBvaW50LmxpbmUrK1xuICAgICAgcG9pbnQuY29sdW1uID0gMVxuICAgICAgcG9pbnQub2Zmc2V0ICs9IGNvZGUgPT09IC0zID8gMiA6IDFcbiAgICAgIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKClcbiAgICB9IGVsc2UgaWYgKGNvZGUgIT09IC0xKSB7XG4gICAgICBwb2ludC5jb2x1bW4rK1xuICAgICAgcG9pbnQub2Zmc2V0KytcbiAgICB9XG5cbiAgICAvLyBOb3QgaW4gYSBzdHJpbmcgY2h1bmsuXG4gICAgaWYgKHBvaW50Ll9idWZmZXJJbmRleCA8IDApIHtcbiAgICAgIHBvaW50Ll9pbmRleCsrXG4gICAgfSBlbHNlIHtcbiAgICAgIHBvaW50Ll9idWZmZXJJbmRleCsrXG5cbiAgICAgIC8vIEF0IGVuZCBvZiBzdHJpbmcgY2h1bmsuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFBvaW50cyB3LyBub24tbmVnYXRpdmUgYF9idWZmZXJJbmRleGAgcmVmZXJlbmNlXG4gICAgICAvLyBzdHJpbmdzLlxuICAgICAgaWYgKHBvaW50Ll9idWZmZXJJbmRleCA9PT0gY2h1bmtzW3BvaW50Ll9pbmRleF0ubGVuZ3RoKSB7XG4gICAgICAgIHBvaW50Ll9idWZmZXJJbmRleCA9IC0xXG4gICAgICAgIHBvaW50Ll9pbmRleCsrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIuXG4gICAgY29udGV4dC5wcmV2aW91cyA9IGNvZGVcblxuICAgIC8vIE1hcmsgYXMgY29uc3VtZWQuXG4gICAgY29uc3VtZWQgPSB0cnVlXG4gIH1cblxuICAvKiogQHR5cGUge0VmZmVjdHNbJ2VudGVyJ119ICovXG4gIGZ1bmN0aW9uIGVudGVyKHR5cGUsIGZpZWxkcykge1xuICAgIC8qKiBAdHlwZSB7VG9rZW59ICovXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBQYXRjaCBpbnN0ZWFkIG9mIGFzc2lnbiByZXF1aXJlZCBmaWVsZHMgdG8gaGVscCBHQy5cbiAgICBjb25zdCB0b2tlbiA9IGZpZWxkcyB8fCB7fVxuICAgIHRva2VuLnR5cGUgPSB0eXBlXG4gICAgdG9rZW4uc3RhcnQgPSBub3coKVxuICAgIGNvbnRleHQuZXZlbnRzLnB1c2goWydlbnRlcicsIHRva2VuLCBjb250ZXh0XSlcbiAgICBzdGFjay5wdXNoKHRva2VuKVxuICAgIHJldHVybiB0b2tlblxuICB9XG5cbiAgLyoqIEB0eXBlIHtFZmZlY3RzWydleGl0J119ICovXG4gIGZ1bmN0aW9uIGV4aXQodHlwZSkge1xuICAgIGNvbnN0IHRva2VuID0gc3RhY2sucG9wKClcbiAgICB0b2tlbi5lbmQgPSBub3coKVxuICAgIGNvbnRleHQuZXZlbnRzLnB1c2goWydleGl0JywgdG9rZW4sIGNvbnRleHRdKVxuICAgIHJldHVybiB0b2tlblxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSByZXN1bHRzLlxuICAgKlxuICAgKiBAdHlwZSB7UmV0dXJuSGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25zdWNjZXNzZnVsY29uc3RydWN0KGNvbnN0cnVjdCwgaW5mbykge1xuICAgIGFkZFJlc3VsdChjb25zdHJ1Y3QsIGluZm8uZnJvbSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkIHJlc3VsdHMuXG4gICAqXG4gICAqIEB0eXBlIHtSZXR1cm5IYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbnN1Y2Nlc3NmdWxjaGVjayhfLCBpbmZvKSB7XG4gICAgaW5mby5yZXN0b3JlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHRvIGF0dGVtcHQvY2hlY2svaW50ZXJydXB0LlxuICAgKlxuICAgKiBAcGFyYW0ge1JldHVybkhhbmRsZX0gb25yZXR1cm5cbiAgICogQHBhcmFtIHt7aW50ZXJydXB0PzogYm9vbGVhbiB8IHVuZGVmaW5lZH0gfCB1bmRlZmluZWR9IFtmaWVsZHNdXG4gICAqL1xuICBmdW5jdGlvbiBjb25zdHJ1Y3RGYWN0b3J5KG9ucmV0dXJuLCBmaWVsZHMpIHtcbiAgICByZXR1cm4gaG9va1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGVpdGhlciBhbiBvYmplY3QgbWFwcGluZyBjb2RlcyB0byBjb25zdHJ1Y3RzLCBhIGxpc3Qgb2ZcbiAgICAgKiBjb25zdHJ1Y3RzLCBvciBhIHNpbmdsZSBjb25zdHJ1Y3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5PENvbnN0cnVjdD4gfCBDb25zdHJ1Y3QgfCBDb25zdHJ1Y3RSZWNvcmR9IGNvbnN0cnVjdHNcbiAgICAgKiBAcGFyYW0ge1N0YXRlfSByZXR1cm5TdGF0ZVxuICAgICAqIEBwYXJhbSB7U3RhdGUgfCB1bmRlZmluZWR9IFtib2d1c1N0YXRlXVxuICAgICAqIEByZXR1cm5zIHtTdGF0ZX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBob29rKGNvbnN0cnVjdHMsIHJldHVyblN0YXRlLCBib2d1c1N0YXRlKSB7XG4gICAgICAvKiogQHR5cGUge0FycmF5PENvbnN0cnVjdD59ICovXG4gICAgICBsZXQgbGlzdE9mQ29uc3RydWN0c1xuICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgICBsZXQgY29uc3RydWN0SW5kZXhcbiAgICAgIC8qKiBAdHlwZSB7Q29uc3RydWN0fSAqL1xuICAgICAgbGV0IGN1cnJlbnRDb25zdHJ1Y3RcbiAgICAgIC8qKiBAdHlwZSB7SW5mb30gKi9cbiAgICAgIGxldCBpbmZvXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb25zdHJ1Y3RzKSAvKiBjOCBpZ25vcmUgbmV4dCAxICovXG4gICAgICAgID8gaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhjb25zdHJ1Y3RzKVxuICAgICAgICA6ICd0b2tlbml6ZScgaW4gY29uc3RydWN0c1xuICAgICAgICA/IC8vIEB0cy1leHBlY3QtZXJyb3IgTG9va3MgbGlrZSBhIGNvbnN0cnVjdC5cbiAgICAgICAgICBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKFtjb25zdHJ1Y3RzXSlcbiAgICAgICAgOiBoYW5kbGVNYXBPZkNvbnN0cnVjdHMoY29uc3RydWN0cylcblxuICAgICAgLyoqXG4gICAgICAgKiBIYW5kbGUgYSBsaXN0IG9mIGNvbnN0cnVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NvbnN0cnVjdFJlY29yZH0gbWFwXG4gICAgICAgKiBAcmV0dXJucyB7U3RhdGV9XG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZU1hcE9mQ29uc3RydWN0cyhtYXApIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0XG5cbiAgICAgICAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgICAgICAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgICAgICAgIGNvbnN0IGRlZiA9IGNvZGUgIT09IG51bGwgJiYgbWFwW2NvZGVdXG4gICAgICAgICAgY29uc3QgYWxsID0gY29kZSAhPT0gbnVsbCAmJiBtYXAubnVsbFxuICAgICAgICAgIGNvbnN0IGxpc3QgPSBbXG4gICAgICAgICAgICAvLyBUbyBkbzogYWRkIG1vcmUgZXh0ZW5zaW9uIHRlc3RzLlxuICAgICAgICAgICAgLyogYzggaWdub3JlIG5leHQgMiAqL1xuICAgICAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZGVmKSA/IGRlZiA6IGRlZiA/IFtkZWZdIDogW10pLFxuICAgICAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoYWxsKSA/IGFsbCA6IGFsbCA/IFthbGxdIDogW10pXG4gICAgICAgICAgXVxuICAgICAgICAgIHJldHVybiBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKGxpc3QpKGNvZGUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBIYW5kbGUgYSBsaXN0IG9mIGNvbnN0cnVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0FycmF5PENvbnN0cnVjdD59IGxpc3RcbiAgICAgICAqIEByZXR1cm5zIHtTdGF0ZX1cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gaGFuZGxlTGlzdE9mQ29uc3RydWN0cyhsaXN0KSB7XG4gICAgICAgIGxpc3RPZkNvbnN0cnVjdHMgPSBsaXN0XG4gICAgICAgIGNvbnN0cnVjdEluZGV4ID0gMFxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYm9ndXNTdGF0ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVDb25zdHJ1Y3QobGlzdFtjb25zdHJ1Y3RJbmRleF0pXG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSGFuZGxlIGEgc2luZ2xlIGNvbnN0cnVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge0NvbnN0cnVjdH0gY29uc3RydWN0XG4gICAgICAgKiBAcmV0dXJucyB7U3RhdGV9XG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZUNvbnN0cnVjdChjb25zdHJ1Y3QpIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0XG5cbiAgICAgICAgLyoqIEB0eXBlIHtTdGF0ZX0gKi9cbiAgICAgICAgZnVuY3Rpb24gc3RhcnQoY29kZSkge1xuICAgICAgICAgIC8vIFRvIGRvOiBub3QgbmVlZGVkIHRvIHN0b3JlIGlmIHRoZXJlIGlzIG5vIGJvZ3VzIHN0YXRlLCBwcm9iYWJseT9cbiAgICAgICAgICAvLyBDdXJyZW50bHkgZG9lc25cdTIwMTl0IHdvcmsgYmVjYXVzZSBgaW5zcGVjdGAgaW4gZG9jdW1lbnQgZG9lcyBhIGNoZWNrXG4gICAgICAgICAgLy8gdy9vIGEgYm9ndXMsIHdoaWNoIGRvZXNuXHUyMDE5dCBtYWtlIHNlbnNlLiBCdXQgaXQgZG9lcyBzZWVtIHRvIGhlbHAgcGVyZlxuICAgICAgICAgIC8vIGJ5IG5vdCBzdG9yaW5nLlxuICAgICAgICAgIGluZm8gPSBzdG9yZSgpXG4gICAgICAgICAgY3VycmVudENvbnN0cnVjdCA9IGNvbnN0cnVjdFxuICAgICAgICAgIGlmICghY29uc3RydWN0LnBhcnRpYWwpIHtcbiAgICAgICAgICAgIGNvbnRleHQuY3VycmVudENvbnN0cnVjdCA9IGNvbnN0cnVjdFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFsd2F5cyBwb3B1bGF0ZWQgYnkgZGVmYXVsdHMuXG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25zdHJ1Y3QubmFtZSAmJlxuICAgICAgICAgICAgY29udGV4dC5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoY29uc3RydWN0Lm5hbWUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9rKGNvZGUpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3QudG9rZW5pemUuY2FsbChcbiAgICAgICAgICAgIC8vIElmIHdlIGRvIGhhdmUgZmllbGRzLCBjcmVhdGUgYW4gb2JqZWN0IHcvIGBjb250ZXh0YCBhcyBpdHNcbiAgICAgICAgICAgIC8vIHByb3RvdHlwZS5cbiAgICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIGEgXHUyMDFDbGl2ZSBiaW5kaW5nXHUyMDFELCB3aGljaCBpcyBuZWVkZWQgZm9yIGBpbnRlcnJ1cHRgLlxuICAgICAgICAgICAgZmllbGRzID8gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGNvbnRleHQpLCBmaWVsZHMpIDogY29udGV4dCxcbiAgICAgICAgICAgIGVmZmVjdHMsXG4gICAgICAgICAgICBvayxcbiAgICAgICAgICAgIG5va1xuICAgICAgICAgICkoY29kZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICAgICAgZnVuY3Rpb24gb2soY29kZSkge1xuICAgICAgICBjb25zdW1lZCA9IHRydWVcbiAgICAgICAgb25yZXR1cm4oY3VycmVudENvbnN0cnVjdCwgaW5mbylcbiAgICAgICAgcmV0dXJuIHJldHVyblN0YXRlXG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7U3RhdGV9ICovXG4gICAgICBmdW5jdGlvbiBub2soY29kZSkge1xuICAgICAgICBjb25zdW1lZCA9IHRydWVcbiAgICAgICAgaW5mby5yZXN0b3JlKClcbiAgICAgICAgaWYgKCsrY29uc3RydWN0SW5kZXggPCBsaXN0T2ZDb25zdHJ1Y3RzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVDb25zdHJ1Y3QobGlzdE9mQ29uc3RydWN0c1tjb25zdHJ1Y3RJbmRleF0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJvZ3VzU3RhdGVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3R9IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIGFkZFJlc3VsdChjb25zdHJ1Y3QsIGZyb20pIHtcbiAgICBpZiAoY29uc3RydWN0LnJlc29sdmVBbGwgJiYgIXJlc29sdmVBbGxDb25zdHJ1Y3RzLmluY2x1ZGVzKGNvbnN0cnVjdCkpIHtcbiAgICAgIHJlc29sdmVBbGxDb25zdHJ1Y3RzLnB1c2goY29uc3RydWN0KVxuICAgIH1cbiAgICBpZiAoY29uc3RydWN0LnJlc29sdmUpIHtcbiAgICAgIHNwbGljZShcbiAgICAgICAgY29udGV4dC5ldmVudHMsXG4gICAgICAgIGZyb20sXG4gICAgICAgIGNvbnRleHQuZXZlbnRzLmxlbmd0aCAtIGZyb20sXG4gICAgICAgIGNvbnN0cnVjdC5yZXNvbHZlKGNvbnRleHQuZXZlbnRzLnNsaWNlKGZyb20pLCBjb250ZXh0KVxuICAgICAgKVxuICAgIH1cbiAgICBpZiAoY29uc3RydWN0LnJlc29sdmVUbykge1xuICAgICAgY29udGV4dC5ldmVudHMgPSBjb25zdHJ1Y3QucmVzb2x2ZVRvKGNvbnRleHQuZXZlbnRzLCBjb250ZXh0KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBzdGF0ZS5cbiAgICpcbiAgICogQHJldHVybnMge0luZm99XG4gICAqL1xuICBmdW5jdGlvbiBzdG9yZSgpIHtcbiAgICBjb25zdCBzdGFydFBvaW50ID0gbm93KClcbiAgICBjb25zdCBzdGFydFByZXZpb3VzID0gY29udGV4dC5wcmV2aW91c1xuICAgIGNvbnN0IHN0YXJ0Q3VycmVudENvbnN0cnVjdCA9IGNvbnRleHQuY3VycmVudENvbnN0cnVjdFxuICAgIGNvbnN0IHN0YXJ0RXZlbnRzSW5kZXggPSBjb250ZXh0LmV2ZW50cy5sZW5ndGhcbiAgICBjb25zdCBzdGFydFN0YWNrID0gQXJyYXkuZnJvbShzdGFjaylcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdG9yZSxcbiAgICAgIGZyb206IHN0YXJ0RXZlbnRzSW5kZXhcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlIHN0YXRlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVzdG9yZSgpIHtcbiAgICAgIHBvaW50ID0gc3RhcnRQb2ludFxuICAgICAgY29udGV4dC5wcmV2aW91cyA9IHN0YXJ0UHJldmlvdXNcbiAgICAgIGNvbnRleHQuY3VycmVudENvbnN0cnVjdCA9IHN0YXJ0Q3VycmVudENvbnN0cnVjdFxuICAgICAgY29udGV4dC5ldmVudHMubGVuZ3RoID0gc3RhcnRFdmVudHNJbmRleFxuICAgICAgc3RhY2sgPSBzdGFydFN0YWNrXG4gICAgICBhY2NvdW50Rm9yUG90ZW50aWFsU2tpcCgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGN1cnJlbnQgcG9pbnQgYSBiaXQgZm9yd2FyZCBpbiB0aGUgbGluZSB3aGVuIGl0XHUyMDE5cyBvbiBhIGNvbHVtblxuICAgKiBza2lwLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIGFjY291bnRGb3JQb3RlbnRpYWxTa2lwKCkge1xuICAgIGlmIChwb2ludC5saW5lIGluIGNvbHVtblN0YXJ0ICYmIHBvaW50LmNvbHVtbiA8IDIpIHtcbiAgICAgIHBvaW50LmNvbHVtbiA9IGNvbHVtblN0YXJ0W3BvaW50LmxpbmVdXG4gICAgICBwb2ludC5vZmZzZXQgKz0gY29sdW1uU3RhcnRbcG9pbnQubGluZV0gLSAxXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBjaHVua3MgZnJvbSBhIHNsaWNlIG9mIGNodW5rcyBpbiB0aGUgcmFuZ2Ugb2YgYSB0b2tlbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PENodW5rPn0gY2h1bmtzXG4gKiBAcGFyYW0ge1BpY2s8VG9rZW4sICdlbmQnIHwgJ3N0YXJ0Jz59IHRva2VuXG4gKiBAcmV0dXJucyB7QXJyYXk8Q2h1bms+fVxuICovXG5mdW5jdGlvbiBzbGljZUNodW5rcyhjaHVua3MsIHRva2VuKSB7XG4gIGNvbnN0IHN0YXJ0SW5kZXggPSB0b2tlbi5zdGFydC5faW5kZXhcbiAgY29uc3Qgc3RhcnRCdWZmZXJJbmRleCA9IHRva2VuLnN0YXJ0Ll9idWZmZXJJbmRleFxuICBjb25zdCBlbmRJbmRleCA9IHRva2VuLmVuZC5faW5kZXhcbiAgY29uc3QgZW5kQnVmZmVySW5kZXggPSB0b2tlbi5lbmQuX2J1ZmZlckluZGV4XG4gIC8qKiBAdHlwZSB7QXJyYXk8Q2h1bms+fSAqL1xuICBsZXQgdmlld1xuICBpZiAoc3RhcnRJbmRleCA9PT0gZW5kSW5kZXgpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBfYnVmZmVySW5kZXhgIGlzIHVzZWQgb24gc3RyaW5nIGNodW5rcy5cbiAgICB2aWV3ID0gW2NodW5rc1tzdGFydEluZGV4XS5zbGljZShzdGFydEJ1ZmZlckluZGV4LCBlbmRCdWZmZXJJbmRleCldXG4gIH0gZWxzZSB7XG4gICAgdmlldyA9IGNodW5rcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleClcbiAgICBpZiAoc3RhcnRCdWZmZXJJbmRleCA+IC0xKSB7XG4gICAgICBjb25zdCBoZWFkID0gdmlld1swXVxuICAgICAgaWYgKHR5cGVvZiBoZWFkID09PSAnc3RyaW5nJykge1xuICAgICAgICB2aWV3WzBdID0gaGVhZC5zbGljZShzdGFydEJ1ZmZlckluZGV4KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlldy5zaGlmdCgpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbmRCdWZmZXJJbmRleCA+IDApIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYF9idWZmZXJJbmRleGAgaXMgdXNlZCBvbiBzdHJpbmcgY2h1bmtzLlxuICAgICAgdmlldy5wdXNoKGNodW5rc1tlbmRJbmRleF0uc2xpY2UoMCwgZW5kQnVmZmVySW5kZXgpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmlld1xufVxuXG4vKipcbiAqIEdldCB0aGUgc3RyaW5nIHZhbHVlIG9mIGEgc2xpY2Ugb2YgY2h1bmtzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8Q2h1bms+fSBjaHVua3NcbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gW2V4cGFuZFRhYnM9ZmFsc2VdXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVDaHVua3MoY2h1bmtzLCBleHBhbmRUYWJzKSB7XG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgYXRUYWJcbiAgd2hpbGUgKCsraW5kZXggPCBjaHVua3MubGVuZ3RoKSB7XG4gICAgY29uc3QgY2h1bmsgPSBjaHVua3NbaW5kZXhdXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IHZhbHVlXG4gICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gY2h1bmtcbiAgICB9IGVsc2VcbiAgICAgIHN3aXRjaCAoY2h1bmspIHtcbiAgICAgICAgY2FzZSAtNToge1xuICAgICAgICAgIHZhbHVlID0gJ1xccidcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgLTQ6IHtcbiAgICAgICAgICB2YWx1ZSA9ICdcXG4nXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIC0zOiB7XG4gICAgICAgICAgdmFsdWUgPSAnXFxyJyArICdcXG4nXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIC0yOiB7XG4gICAgICAgICAgdmFsdWUgPSBleHBhbmRUYWJzID8gJyAnIDogJ1xcdCdcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgLTE6IHtcbiAgICAgICAgICBpZiAoIWV4cGFuZFRhYnMgJiYgYXRUYWIpIGNvbnRpbnVlXG4gICAgICAgICAgdmFsdWUgPSAnICdcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAvLyBDdXJyZW50bHkgb25seSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuXG4gICAgICAgICAgdmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNodW5rKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgYXRUYWIgPSBjaHVuayA9PT0gLTJcbiAgICByZXN1bHQucHVzaCh2YWx1ZSlcbiAgfVxuICByZXR1cm4gcmVzdWx0LmpvaW4oJycpXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLkV4dGVuc2lvbn0gRXh0ZW5zaW9uXG4gKi9cblxuaW1wb3J0IHtcbiAgYXR0ZW50aW9uLFxuICBhdXRvbGluayxcbiAgYmxvY2tRdW90ZSxcbiAgY2hhcmFjdGVyRXNjYXBlLFxuICBjaGFyYWN0ZXJSZWZlcmVuY2UsXG4gIGNvZGVGZW5jZWQsXG4gIGNvZGVJbmRlbnRlZCxcbiAgY29kZVRleHQsXG4gIGRlZmluaXRpb24sXG4gIGhhcmRCcmVha0VzY2FwZSxcbiAgaGVhZGluZ0F0eCxcbiAgaHRtbEZsb3csXG4gIGh0bWxUZXh0LFxuICBsYWJlbEVuZCxcbiAgbGFiZWxTdGFydEltYWdlLFxuICBsYWJlbFN0YXJ0TGluayxcbiAgbGluZUVuZGluZyxcbiAgbGlzdCxcbiAgc2V0ZXh0VW5kZXJsaW5lLFxuICB0aGVtYXRpY0JyZWFrXG59IGZyb20gJ21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsnXG5pbXBvcnQge3Jlc29sdmVyIGFzIHJlc29sdmVUZXh0fSBmcm9tICcuL2luaXRpYWxpemUvdGV4dC5qcydcblxuLyoqIEBzYXRpc2ZpZXMge0V4dGVuc2lvblsnZG9jdW1lbnQnXX0gKi9cbmV4cG9ydCBjb25zdCBkb2N1bWVudCA9IHtcbiAgWzQyXTogbGlzdCxcbiAgWzQzXTogbGlzdCxcbiAgWzQ1XTogbGlzdCxcbiAgWzQ4XTogbGlzdCxcbiAgWzQ5XTogbGlzdCxcbiAgWzUwXTogbGlzdCxcbiAgWzUxXTogbGlzdCxcbiAgWzUyXTogbGlzdCxcbiAgWzUzXTogbGlzdCxcbiAgWzU0XTogbGlzdCxcbiAgWzU1XTogbGlzdCxcbiAgWzU2XTogbGlzdCxcbiAgWzU3XTogbGlzdCxcbiAgWzYyXTogYmxvY2tRdW90ZVxufVxuXG4vKiogQHNhdGlzZmllcyB7RXh0ZW5zaW9uWydjb250ZW50SW5pdGlhbCddfSAqL1xuZXhwb3J0IGNvbnN0IGNvbnRlbnRJbml0aWFsID0ge1xuICBbOTFdOiBkZWZpbml0aW9uXG59XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ2Zsb3dJbml0aWFsJ119ICovXG5leHBvcnQgY29uc3QgZmxvd0luaXRpYWwgPSB7XG4gIFstMl06IGNvZGVJbmRlbnRlZCxcbiAgWy0xXTogY29kZUluZGVudGVkLFxuICBbMzJdOiBjb2RlSW5kZW50ZWRcbn1cblxuLyoqIEBzYXRpc2ZpZXMge0V4dGVuc2lvblsnZmxvdyddfSAqL1xuZXhwb3J0IGNvbnN0IGZsb3cgPSB7XG4gIFszNV06IGhlYWRpbmdBdHgsXG4gIFs0Ml06IHRoZW1hdGljQnJlYWssXG4gIFs0NV06IFtzZXRleHRVbmRlcmxpbmUsIHRoZW1hdGljQnJlYWtdLFxuICBbNjBdOiBodG1sRmxvdyxcbiAgWzYxXTogc2V0ZXh0VW5kZXJsaW5lLFxuICBbOTVdOiB0aGVtYXRpY0JyZWFrLFxuICBbOTZdOiBjb2RlRmVuY2VkLFxuICBbMTI2XTogY29kZUZlbmNlZFxufVxuXG4vKiogQHNhdGlzZmllcyB7RXh0ZW5zaW9uWydzdHJpbmcnXX0gKi9cbmV4cG9ydCBjb25zdCBzdHJpbmcgPSB7XG4gIFszOF06IGNoYXJhY3RlclJlZmVyZW5jZSxcbiAgWzkyXTogY2hhcmFjdGVyRXNjYXBlXG59XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ3RleHQnXX0gKi9cbmV4cG9ydCBjb25zdCB0ZXh0ID0ge1xuICBbLTVdOiBsaW5lRW5kaW5nLFxuICBbLTRdOiBsaW5lRW5kaW5nLFxuICBbLTNdOiBsaW5lRW5kaW5nLFxuICBbMzNdOiBsYWJlbFN0YXJ0SW1hZ2UsXG4gIFszOF06IGNoYXJhY3RlclJlZmVyZW5jZSxcbiAgWzQyXTogYXR0ZW50aW9uLFxuICBbNjBdOiBbYXV0b2xpbmssIGh0bWxUZXh0XSxcbiAgWzkxXTogbGFiZWxTdGFydExpbmssXG4gIFs5Ml06IFtoYXJkQnJlYWtFc2NhcGUsIGNoYXJhY3RlckVzY2FwZV0sXG4gIFs5M106IGxhYmVsRW5kLFxuICBbOTVdOiBhdHRlbnRpb24sXG4gIFs5Nl06IGNvZGVUZXh0XG59XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ2luc2lkZVNwYW4nXX0gKi9cbmV4cG9ydCBjb25zdCBpbnNpZGVTcGFuID0ge1xuICBudWxsOiBbYXR0ZW50aW9uLCByZXNvbHZlVGV4dF1cbn1cblxuLyoqIEBzYXRpc2ZpZXMge0V4dGVuc2lvblsnYXR0ZW50aW9uTWFya2VycyddfSAqL1xuZXhwb3J0IGNvbnN0IGF0dGVudGlvbk1hcmtlcnMgPSB7XG4gIG51bGw6IFs0MiwgOTVdXG59XG5cbi8qKiBAc2F0aXNmaWVzIHtFeHRlbnNpb25bJ2Rpc2FibGUnXX0gKi9cbmV4cG9ydCBjb25zdCBkaXNhYmxlID0ge1xuICBudWxsOiBbXVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5DcmVhdGV9IENyZWF0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5GdWxsTm9ybWFsaXplZEV4dGVuc2lvbn0gRnVsbE5vcm1hbGl6ZWRFeHRlbnNpb25cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuSW5pdGlhbENvbnN0cnVjdH0gSW5pdGlhbENvbnN0cnVjdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5QYXJzZUNvbnRleHR9IFBhcnNlQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5QYXJzZU9wdGlvbnN9IFBhcnNlT3B0aW9uc1xuICovXG5cbmltcG9ydCB7Y29tYmluZUV4dGVuc2lvbnN9IGZyb20gJ21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9ucydcbmltcG9ydCB7Y29udGVudH0gZnJvbSAnLi9pbml0aWFsaXplL2NvbnRlbnQuanMnXG5pbXBvcnQge2RvY3VtZW50fSBmcm9tICcuL2luaXRpYWxpemUvZG9jdW1lbnQuanMnXG5pbXBvcnQge2Zsb3d9IGZyb20gJy4vaW5pdGlhbGl6ZS9mbG93LmpzJ1xuaW1wb3J0IHt0ZXh0LCBzdHJpbmd9IGZyb20gJy4vaW5pdGlhbGl6ZS90ZXh0LmpzJ1xuaW1wb3J0IHtjcmVhdGVUb2tlbml6ZXJ9IGZyb20gJy4vY3JlYXRlLXRva2VuaXplci5qcydcbmltcG9ydCAqIGFzIGRlZmF1bHRDb25zdHJ1Y3RzIGZyb20gJy4vY29uc3RydWN0cy5qcydcblxuLyoqXG4gKiBAcGFyYW0ge1BhcnNlT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogQHJldHVybnMge1BhcnNlQ29udGV4dH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKG9wdGlvbnMpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG4gIGNvbnN0IGNvbnN0cnVjdHMgPVxuICAgIC8qKiBAdHlwZSB7RnVsbE5vcm1hbGl6ZWRFeHRlbnNpb259ICovXG4gICAgY29tYmluZUV4dGVuc2lvbnMoW2RlZmF1bHRDb25zdHJ1Y3RzLCAuLi4oc2V0dGluZ3MuZXh0ZW5zaW9ucyB8fCBbXSldKVxuXG4gIC8qKiBAdHlwZSB7UGFyc2VDb250ZXh0fSAqL1xuICBjb25zdCBwYXJzZXIgPSB7XG4gICAgZGVmaW5lZDogW10sXG4gICAgbGF6eToge30sXG4gICAgY29uc3RydWN0cyxcbiAgICBjb250ZW50OiBjcmVhdGUoY29udGVudCksXG4gICAgZG9jdW1lbnQ6IGNyZWF0ZShkb2N1bWVudCksXG4gICAgZmxvdzogY3JlYXRlKGZsb3cpLFxuICAgIHN0cmluZzogY3JlYXRlKHN0cmluZyksXG4gICAgdGV4dDogY3JlYXRlKHRleHQpXG4gIH1cbiAgcmV0dXJuIHBhcnNlclxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0luaXRpYWxDb25zdHJ1Y3R9IGluaXRpYWxcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZShpbml0aWFsKSB7XG4gICAgcmV0dXJuIGNyZWF0b3JcbiAgICAvKiogQHR5cGUge0NyZWF0ZX0gKi9cbiAgICBmdW5jdGlvbiBjcmVhdG9yKGZyb20pIHtcbiAgICAgIHJldHVybiBjcmVhdGVUb2tlbml6ZXIocGFyc2VyLCBpbml0aWFsLCBmcm9tKVxuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5DaHVua30gQ2h1bmtcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuQ29kZX0gQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5FbmNvZGluZ30gRW5jb2RpbmdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuVmFsdWV9IFZhbHVlXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgUHJlcHJvY2Vzc29yXG4gKiBAcGFyYW0ge1ZhbHVlfSB2YWx1ZVxuICogQHBhcmFtIHtFbmNvZGluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmNvZGluZ11cbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmQ9ZmFsc2VdXG4gKiBAcmV0dXJucyB7QXJyYXk8Q2h1bms+fVxuICovXG5cbmNvbnN0IHNlYXJjaCA9IC9bXFwwXFx0XFxuXFxyXS9nXG5cbi8qKlxuICogQHJldHVybnMge1ByZXByb2Nlc3Nvcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3MoKSB7XG4gIGxldCBjb2x1bW4gPSAxXG4gIGxldCBidWZmZXIgPSAnJ1xuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBzdGFydCA9IHRydWVcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgYXRDYXJyaWFnZVJldHVyblxuICByZXR1cm4gcHJlcHJvY2Vzc29yXG5cbiAgLyoqIEB0eXBlIHtQcmVwcm9jZXNzb3J9ICovXG4gIGZ1bmN0aW9uIHByZXByb2Nlc3Nvcih2YWx1ZSwgZW5jb2RpbmcsIGVuZCkge1xuICAgIC8qKiBAdHlwZSB7QXJyYXk8Q2h1bms+fSAqL1xuICAgIGNvbnN0IGNodW5rcyA9IFtdXG4gICAgLyoqIEB0eXBlIHtSZWdFeHBNYXRjaEFycmF5IHwgbnVsbH0gKi9cbiAgICBsZXQgbWF0Y2hcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICBsZXQgbmV4dFxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBzdGFydFBvc2l0aW9uXG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgbGV0IGVuZFBvc2l0aW9uXG4gICAgLyoqIEB0eXBlIHtDb2RlfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBCdWZmZXJgIGRvZXMgYWxsb3cgYW4gZW5jb2RpbmcuXG4gICAgdmFsdWUgPSBidWZmZXIgKyB2YWx1ZS50b1N0cmluZyhlbmNvZGluZylcbiAgICBzdGFydFBvc2l0aW9uID0gMFxuICAgIGJ1ZmZlciA9ICcnXG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICAvLyBUbyBkbzogYG1hcmtkb3duLXJzYCBhY3R1YWxseSBwYXJzZXMgQk9NcyAoYnl0ZSBvcmRlciBtYXJrKS5cbiAgICAgIGlmICh2YWx1ZS5jaGFyQ29kZUF0KDApID09PSA2NTI3OSkge1xuICAgICAgICBzdGFydFBvc2l0aW9uKytcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gdW5kZWZpbmVkXG4gICAgfVxuICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICBzZWFyY2gubGFzdEluZGV4ID0gc3RhcnRQb3NpdGlvblxuICAgICAgbWF0Y2ggPSBzZWFyY2guZXhlYyh2YWx1ZSlcbiAgICAgIGVuZFBvc2l0aW9uID1cbiAgICAgICAgbWF0Y2ggJiYgbWF0Y2guaW5kZXggIT09IHVuZGVmaW5lZCA/IG1hdGNoLmluZGV4IDogdmFsdWUubGVuZ3RoXG4gICAgICBjb2RlID0gdmFsdWUuY2hhckNvZGVBdChlbmRQb3NpdGlvbilcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgYnVmZmVyID0gdmFsdWUuc2xpY2Uoc3RhcnRQb3NpdGlvbilcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChjb2RlID09PSAxMCAmJiBzdGFydFBvc2l0aW9uID09PSBlbmRQb3NpdGlvbiAmJiBhdENhcnJpYWdlUmV0dXJuKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKC0zKVxuICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdW5kZWZpbmVkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYXRDYXJyaWFnZVJldHVybikge1xuICAgICAgICAgIGNodW5rcy5wdXNoKC01KVxuICAgICAgICAgIGF0Q2FycmlhZ2VSZXR1cm4gPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgY2h1bmtzLnB1c2godmFsdWUuc2xpY2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKVxuICAgICAgICAgIGNvbHVtbiArPSBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb25cbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICBjYXNlIDA6IHtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKDY1NTMzKVxuICAgICAgICAgICAgY29sdW1uKytcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgOToge1xuICAgICAgICAgICAgbmV4dCA9IE1hdGguY2VpbChjb2x1bW4gLyA0KSAqIDRcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKC0yKVxuICAgICAgICAgICAgd2hpbGUgKGNvbHVtbisrIDwgbmV4dCkgY2h1bmtzLnB1c2goLTEpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIDEwOiB7XG4gICAgICAgICAgICBjaHVua3MucHVzaCgtNClcbiAgICAgICAgICAgIGNvbHVtbiA9IDFcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGF0Q2FycmlhZ2VSZXR1cm4gPSB0cnVlXG4gICAgICAgICAgICBjb2x1bW4gPSAxXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFydFBvc2l0aW9uID0gZW5kUG9zaXRpb24gKyAxXG4gICAgfVxuICAgIGlmIChlbmQpIHtcbiAgICAgIGlmIChhdENhcnJpYWdlUmV0dXJuKSBjaHVua3MucHVzaCgtNSlcbiAgICAgIGlmIChidWZmZXIpIGNodW5rcy5wdXNoKGJ1ZmZlcilcbiAgICAgIGNodW5rcy5wdXNoKG51bGwpXG4gICAgfVxuICAgIHJldHVybiBjaHVua3NcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5FdmVudH0gRXZlbnRcbiAqL1xuXG5pbXBvcnQge3N1YnRva2VuaXplfSBmcm9tICdtaWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZSdcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gZXZlbnRzXG4gKiBAcmV0dXJucyB7QXJyYXk8RXZlbnQ+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9zdHByb2Nlc3MoZXZlbnRzKSB7XG4gIHdoaWxlICghc3VidG9rZW5pemUoZXZlbnRzKSkge1xuICAgIC8vIEVtcHR5XG4gIH1cbiAgcmV0dXJuIGV2ZW50c1xufVxuIiwgIi8qKlxuICogVHVybiB0aGUgbnVtYmVyIChpbiBzdHJpbmcgZm9ybSBhcyBlaXRoZXIgaGV4YS0gb3IgcGxhaW4gZGVjaW1hbCkgY29taW5nIGZyb21cbiAqIGEgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlIGludG8gYSBjaGFyYWN0ZXIuXG4gKlxuICogU29ydCBvZiBsaWtlIGBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlci5wYXJzZUludCh2YWx1ZSwgYmFzZSkpYCwgYnV0IG1ha2VzXG4gKiBub24tY2hhcmFjdGVycyBhbmQgY29udHJvbCBjaGFyYWN0ZXJzIHNhZmUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiAgIFZhbHVlIHRvIGRlY29kZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiYXNlXG4gKiAgIE51bWVyaWMgYmFzZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIENoYXJhY3Rlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUsIGJhc2UpIHtcbiAgY29uc3QgY29kZSA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgYmFzZSlcbiAgaWYgKFxuICAgIC8vIEMwIGV4Y2VwdCBmb3IgSFQsIExGLCBGRiwgQ1IsIHNwYWNlLlxuICAgIGNvZGUgPCA5IHx8XG4gICAgY29kZSA9PT0gMTEgfHxcbiAgICAoY29kZSA+IDEzICYmIGNvZGUgPCAzMikgfHxcbiAgICAvLyBDb250cm9sIGNoYXJhY3RlciAoREVMKSBvZiBDMCwgYW5kIEMxIGNvbnRyb2xzLlxuICAgIChjb2RlID4gMTI2ICYmIGNvZGUgPCAxNjApIHx8XG4gICAgLy8gTG9uZSBoaWdoIHN1cnJvZ2F0ZXMgYW5kIGxvdyBzdXJyb2dhdGVzLlxuICAgIChjb2RlID4gNTUyOTUgJiYgY29kZSA8IDU3MzQ0KSB8fFxuICAgIC8vIE5vbmNoYXJhY3RlcnMuXG4gICAgKGNvZGUgPiA2NDk3NSAmJiBjb2RlIDwgNjUwMDgpIC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi8gfHxcbiAgICAoY29kZSAmIDY1NTM1KSA9PT0gNjU1MzUgfHxcbiAgICAoY29kZSAmIDY1NTM1KSA9PT0gNjU1MzQgLyogZXNsaW50LWVuYWJsZSBuby1iaXR3aXNlICovIHx8XG4gICAgLy8gT3V0IG9mIHJhbmdlXG4gICAgY29kZSA+IDExMTQxMTFcbiAgKSB7XG4gICAgcmV0dXJuICdcXHVGRkZEJ1xuICB9XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpXG59XG4iLCAiaW1wb3J0IHtkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZX0gZnJvbSAnZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UnXG5pbXBvcnQge2RlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWRlY29kZS1udW1lcmljLWNoYXJhY3Rlci1yZWZlcmVuY2UnXG5jb25zdCBjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSA9XG4gIC9cXFxcKFshLS86LUBbLWB7LX5dKXwmKCMoPzpcXGR7MSw3fXx4W1xcZGEtZl17MSw2fSl8W1xcZGEtel17MSwzMX0pOy9naVxuXG4vKipcbiAqIERlY29kZSBtYXJrZG93biBzdHJpbmdzICh3aGljaCBvY2N1ciBpbiBwbGFjZXMgc3VjaCBhcyBmZW5jZWQgY29kZSBpbmZvXG4gKiBzdHJpbmdzLCBkZXN0aW5hdGlvbnMsIGxhYmVscywgYW5kIHRpdGxlcykuXG4gKlxuICogVGhlIFx1MjAxQ3N0cmluZ1x1MjAxRCBjb250ZW50IHR5cGUgYWxsb3dzIGNoYXJhY3RlciBlc2NhcGVzIGFuZCAtcmVmZXJlbmNlcy5cbiAqIFRoaXMgZGVjb2RlcyB0aG9zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqICAgVmFsdWUgdG8gZGVjb2RlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRGVjb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVN0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZShjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSwgZGVjb2RlKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSAkMFxuICogQHBhcmFtIHtzdHJpbmd9ICQxXG4gKiBAcGFyYW0ge3N0cmluZ30gJDJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGRlY29kZSgkMCwgJDEsICQyKSB7XG4gIGlmICgkMSkge1xuICAgIC8vIEVzY2FwZS5cbiAgICByZXR1cm4gJDFcbiAgfVxuXG4gIC8vIFJlZmVyZW5jZS5cbiAgY29uc3QgaGVhZCA9ICQyLmNoYXJDb2RlQXQoMClcbiAgaWYgKGhlYWQgPT09IDM1KSB7XG4gICAgY29uc3QgaGVhZCA9ICQyLmNoYXJDb2RlQXQoMSlcbiAgICBjb25zdCBoZXggPSBoZWFkID09PSAxMjAgfHwgaGVhZCA9PT0gODhcbiAgICByZXR1cm4gZGVjb2RlTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSgkMi5zbGljZShoZXggPyAyIDogMSksIGhleCA/IDE2IDogMTApXG4gIH1cbiAgcmV0dXJuIGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKCQyKSB8fCAkMFxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5FbmNvZGluZ30gRW5jb2RpbmdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21pY3JvbWFyay11dGlsLXR5cGVzJykuRXZlbnR9IEV2ZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlBhcnNlT3B0aW9uc30gUGFyc2VPcHRpb25zXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtaWNyb21hcmstdXRpbC10eXBlcycpLlRva2VufSBUb2tlblxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5Ub2tlbml6ZUNvbnRleHR9IFRva2VuaXplQ29udGV4dFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWljcm9tYXJrLXV0aWwtdHlwZXMnKS5WYWx1ZX0gVmFsdWVcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBhcmVudH0gVW5pc3RQYXJlbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUG9pbnR9IFBvaW50XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5QaHJhc2luZ0NvbnRlbnR9IFBocmFzaW5nQ29udGVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5TdGF0aWNQaHJhc2luZ0NvbnRlbnR9IFN0YXRpY1BocmFzaW5nQ29udGVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5Db250ZW50fSBDb250ZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkJyZWFrfSBCcmVha1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5CbG9ja3F1b3RlfSBCbG9ja3F1b3RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkNvZGV9IENvZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuRGVmaW5pdGlvbn0gRGVmaW5pdGlvblxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5FbXBoYXNpc30gRW1waGFzaXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuSGVhZGluZ30gSGVhZGluZ1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5IVE1MfSBIVE1MXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkltYWdlfSBJbWFnZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5JbWFnZVJlZmVyZW5jZX0gSW1hZ2VSZWZlcmVuY2VcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuSW5saW5lQ29kZX0gSW5saW5lQ29kZVxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5MaW5rfSBMaW5rXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLkxpbmtSZWZlcmVuY2V9IExpbmtSZWZlcmVuY2VcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuTGlzdH0gTGlzdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5MaXN0SXRlbX0gTGlzdEl0ZW1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuUGFyYWdyYXBofSBQYXJhZ3JhcGhcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuUm9vdH0gUm9vdFxuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5TdHJvbmd9IFN0cm9uZ1xuICogQHR5cGVkZWYge2ltcG9ydCgnbWRhc3QnKS5UZXh0fSBUZXh0XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlRoZW1hdGljQnJlYWt9IFRoZW1hdGljQnJlYWtcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0JykuUmVmZXJlbmNlVHlwZX0gUmVmZXJlbmNlVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vaW5kZXguanMnKS5Db21waWxlRGF0YX0gQ29tcGlsZURhdGFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtSb290IHwgQ29udGVudH0gTm9kZVxuICogQHR5cGVkZWYge0V4dHJhY3Q8Tm9kZSwgVW5pc3RQYXJlbnQ+fSBQYXJlbnRcbiAqXG4gKiBAdHlwZWRlZiB7T21pdDxVbmlzdFBhcmVudCwgJ3R5cGUnIHwgJ2NoaWxkcmVuJz4gJiB7dHlwZTogJ2ZyYWdtZW50JywgY2hpbGRyZW46IEFycmF5PFBocmFzaW5nQ29udGVudD59fSBGcmFnbWVudFxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIFRyYW5zZm9ybVxuICogICBFeHRyYSB0cmFuc2Zvcm0sIHRvIGNoYW5nZSB0aGUgQVNUIGFmdGVyd2FyZHMuXG4gKiBAcGFyYW0ge1Jvb3R9IHRyZWVcbiAqICAgVHJlZSB0byB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7Um9vdCB8IHVuZGVmaW5lZCB8IG51bGwgfCB2b2lkfVxuICogICBOZXcgdHJlZSBvciBub3RoaW5nIChpbiB3aGljaCBjYXNlIHRoZSBjdXJyZW50IHRyZWUgaXMgdXNlZCkuXG4gKlxuICogQGNhbGxiYWNrIEhhbmRsZVxuICogICBIYW5kbGUgYSB0b2tlbi5cbiAqIEBwYXJhbSB7Q29tcGlsZUNvbnRleHR9IHRoaXNcbiAqICAgQ29udGV4dC5cbiAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG4gKiAgIEN1cnJlbnQgdG9rZW4uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqICAgTm90aGluZy5cbiAqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgSGFuZGxlPn0gSGFuZGxlc1xuICogICBUb2tlbiB0eXBlcyBtYXBwaW5nIHRvIGhhbmRsZXNcbiAqXG4gKiBAY2FsbGJhY2sgT25FbnRlckVycm9yXG4gKiAgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgYHJpZ2h0YCB0b2tlbiBpcyBvcGVuLCBidXQgaXQgaXMgY2xvc2VkIChieSB0aGVcbiAqICAgYGxlZnRgIHRva2VuKSBvciBiZWNhdXNlIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuXG4gKiBAcGFyYW0ge09taXQ8Q29tcGlsZUNvbnRleHQsICdzbGljZVNlcmlhbGl6ZSc+fSB0aGlzXG4gKiAgIENvbnRleHQuXG4gKiBAcGFyYW0ge1Rva2VuIHwgdW5kZWZpbmVkfSBsZWZ0XG4gKiAgIExlZnQgdG9rZW4uXG4gKiBAcGFyYW0ge1Rva2VufSByaWdodFxuICogICBSaWdodCB0b2tlbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogICBOb3RoaW5nLlxuICpcbiAqIEBjYWxsYmFjayBPbkV4aXRFcnJvclxuICogICBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGByaWdodGAgdG9rZW4gaXMgb3BlbiBidXQgaXQgaXMgY2xvc2VkIGJ5XG4gKiAgIGV4aXRpbmcgdGhlIGBsZWZ0YCB0b2tlbi5cbiAqIEBwYXJhbSB7T21pdDxDb21waWxlQ29udGV4dCwgJ3NsaWNlU2VyaWFsaXplJz59IHRoaXNcbiAqICAgQ29udGV4dC5cbiAqIEBwYXJhbSB7VG9rZW59IGxlZnRcbiAqICAgTGVmdCB0b2tlbi5cbiAqIEBwYXJhbSB7VG9rZW59IHJpZ2h0XG4gKiAgIFJpZ2h0IHRva2VuLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiAgIE5vdGhpbmcuXG4gKlxuICogQHR5cGVkZWYge1tUb2tlbiwgT25FbnRlckVycm9yIHwgdW5kZWZpbmVkXX0gVG9rZW5UdXBsZVxuICogICBPcGVuIHRva2VuIG9uIHRoZSBzdGFjaywgd2l0aCBhbiBvcHRpb25hbCBlcnJvciBoYW5kbGVyIGZvciB3aGVuXG4gKiAgIHRoYXQgdG9rZW4gaXNuXHUyMDE5dCBjbG9zZWQgcHJvcGVybHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBDb25maWdcbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqXG4gKiAgIFdlIGhhdmUgb3VyIGRlZmF1bHRzLCBidXQgZXh0ZW5zaW9ucyB3aWxsIGFkZCBtb3JlLlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+fSBjYW5Db250YWluRW9sc1xuICogICBUb2tlbiB0eXBlcyB3aGVyZSBsaW5lIGVuZGluZ3MgYXJlIHVzZWQuXG4gKiBAcHJvcGVydHkge0hhbmRsZXN9IGVudGVyXG4gKiAgIE9wZW5pbmcgaGFuZGxlcy5cbiAqIEBwcm9wZXJ0eSB7SGFuZGxlc30gZXhpdFxuICogICBDbG9zaW5nIGhhbmRsZXMuXG4gKiBAcHJvcGVydHkge0FycmF5PFRyYW5zZm9ybT59IHRyYW5zZm9ybXNcbiAqICAgVHJlZSB0cmFuc2Zvcm1zLlxuICpcbiAqIEB0eXBlZGVmIHtQYXJ0aWFsPENvbmZpZz59IEV4dGVuc2lvblxuICogICBDaGFuZ2UgaG93IG1hcmtkb3duIHRva2VucyBmcm9tIG1pY3JvbWFyayBhcmUgdHVybmVkIGludG8gbWRhc3QuXG4gKlxuICogQHR5cGVkZWYgQ29tcGlsZUNvbnRleHRcbiAqICAgbWRhc3QgY29tcGlsZXIgY29udGV4dC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8Tm9kZSB8IEZyYWdtZW50Pn0gc3RhY2tcbiAqICAgU3RhY2sgb2Ygbm9kZXMuXG4gKiBAcHJvcGVydHkge0FycmF5PFRva2VuVHVwbGU+fSB0b2tlblN0YWNrXG4gKiAgIFN0YWNrIG9mIHRva2Vucy5cbiAqIEBwcm9wZXJ0eSB7PEtleSBleHRlbmRzIGtleW9mIENvbXBpbGVEYXRhPihrZXk6IEtleSkgPT4gQ29tcGlsZURhdGFbS2V5XX0gZ2V0RGF0YVxuICogICBHZXQgZGF0YSBmcm9tIHRoZSBrZXkvdmFsdWUgc3RvcmUuXG4gKiBAcHJvcGVydHkgezxLZXkgZXh0ZW5kcyBrZXlvZiBDb21waWxlRGF0YT4oa2V5OiBLZXksIHZhbHVlPzogQ29tcGlsZURhdGFbS2V5XSkgPT4gdm9pZH0gc2V0RGF0YVxuICogICBTZXQgZGF0YSBpbnRvIHRoZSBrZXkvdmFsdWUgc3RvcmUuXG4gKiBAcHJvcGVydHkgeyh0aGlzOiBDb21waWxlQ29udGV4dCkgPT4gdm9pZH0gYnVmZmVyXG4gKiAgIENhcHR1cmUgc29tZSBvZiB0aGUgb3V0cHV0IGRhdGEuXG4gKiBAcHJvcGVydHkgeyh0aGlzOiBDb21waWxlQ29udGV4dCkgPT4gc3RyaW5nfSByZXN1bWVcbiAqICAgU3RvcCBjYXB0dXJpbmcgYW5kIGFjY2VzcyB0aGUgb3V0cHV0IGRhdGEuXG4gKiBAcHJvcGVydHkgezxLaW5kIGV4dGVuZHMgTm9kZT4odGhpczogQ29tcGlsZUNvbnRleHQsIG5vZGU6IEtpbmQsIHRva2VuOiBUb2tlbiwgb25FcnJvcj86IE9uRW50ZXJFcnJvcikgPT4gS2luZH0gZW50ZXJcbiAqICAgRW50ZXIgYSB0b2tlbi5cbiAqIEBwcm9wZXJ0eSB7KHRoaXM6IENvbXBpbGVDb250ZXh0LCB0b2tlbjogVG9rZW4sIG9uRXJyb3I/OiBPbkV4aXRFcnJvcikgPT4gTm9kZX0gZXhpdFxuICogICBFeGl0IGEgdG9rZW4uXG4gKiBAcHJvcGVydHkge1Rva2VuaXplQ29udGV4dFsnc2xpY2VTZXJpYWxpemUnXX0gc2xpY2VTZXJpYWxpemVcbiAqICAgR2V0IHRoZSBzdHJpbmcgdmFsdWUgb2YgYSB0b2tlbi5cbiAqIEBwcm9wZXJ0eSB7Q29uZmlnfSBjb25maWdcbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqXG4gKiBAdHlwZWRlZiBGcm9tTWFya2Rvd25PcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24gZm9yIGhvdyB0byBidWlsZCBtZGFzdC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RXh0ZW5zaW9uIHwgQXJyYXk8RXh0ZW5zaW9uPj4gfCBudWxsIHwgdW5kZWZpbmVkfSBbbWRhc3RFeHRlbnNpb25zXVxuICogICBFeHRlbnNpb25zIGZvciB0aGlzIHV0aWxpdHkgdG8gY2hhbmdlIGhvdyB0b2tlbnMgYXJlIHR1cm5lZCBpbnRvIGEgdHJlZS5cbiAqXG4gKiBAdHlwZWRlZiB7UGFyc2VPcHRpb25zICYgRnJvbU1hcmtkb3duT3B0aW9uc30gT3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uLlxuICovXG5cbi8vIFRvIGRvOiBtaWNyb21hcms6IGNyZWF0ZSBhIHJlZ2lzdHJ5IG9mIHRva2Vucz9cbi8vIFRvIGRvOiBuZXh0IG1ham9yOiBkb25cdTIwMTl0IHJldHVybiBnaXZlbiBgTm9kZWAgZnJvbSBgZW50ZXJgLlxuLy8gVG8gZG86IG5leHQgbWFqb3I6IHJlbW92ZSBzZXR0ZXIvZ2V0dGVyLlxuXG5pbXBvcnQge3RvU3RyaW5nfSBmcm9tICdtZGFzdC11dGlsLXRvLXN0cmluZydcbmltcG9ydCB7cGFyc2V9IGZyb20gJ21pY3JvbWFyay9saWIvcGFyc2UuanMnXG5pbXBvcnQge3ByZXByb2Nlc3N9IGZyb20gJ21pY3JvbWFyay9saWIvcHJlcHJvY2Vzcy5qcydcbmltcG9ydCB7cG9zdHByb2Nlc3N9IGZyb20gJ21pY3JvbWFyay9saWIvcG9zdHByb2Nlc3MuanMnXG5pbXBvcnQge2RlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2V9IGZyb20gJ21pY3JvbWFyay11dGlsLWRlY29kZS1udW1lcmljLWNoYXJhY3Rlci1yZWZlcmVuY2UnXG5pbXBvcnQge2RlY29kZVN0cmluZ30gZnJvbSAnbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZydcbmltcG9ydCB7bm9ybWFsaXplSWRlbnRpZmllcn0gZnJvbSAnbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXInXG5pbXBvcnQge2RlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlfSBmcm9tICdkZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZSdcbmltcG9ydCB7c3RyaW5naWZ5UG9zaXRpb259IGZyb20gJ3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uJ1xuY29uc3Qgb3duID0ge30uaGFzT3duUHJvcGVydHlcblxuLyoqXG4gKiBAcGFyYW0gdmFsdWVcbiAqICAgTWFya2Rvd24gdG8gcGFyc2UuXG4gKiBAcGFyYW0gZW5jb2RpbmdcbiAqICAgQ2hhcmFjdGVyIGVuY29kaW5nIGZvciB3aGVuIGB2YWx1ZWAgaXMgYEJ1ZmZlcmAuXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uLlxuICogQHJldHVybnNcbiAqICAgbWRhc3QgdHJlZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGZyb21NYXJrZG93biA9XG4gIC8qKlxuICAgKiBAdHlwZSB7KFxuICAgKiAgICgodmFsdWU6IFZhbHVlLCBlbmNvZGluZzogRW5jb2RpbmcsIG9wdGlvbnM/OiBPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gUm9vdCkgJlxuICAgKiAgICgodmFsdWU6IFZhbHVlLCBvcHRpb25zPzogT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWQpID0+IFJvb3QpXG4gICAqICl9XG4gICAqL1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1ZhbHVlfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0VuY29kaW5nIHwgT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmNvZGluZ11cbiAgICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gICAqIEByZXR1cm5zIHtSb290fVxuICAgKi9cbiAgZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZywgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zID0gZW5jb2RpbmdcbiAgICAgIGVuY29kaW5nID0gdW5kZWZpbmVkXG4gICAgfVxuICAgIHJldHVybiBjb21waWxlcihvcHRpb25zKShcbiAgICAgIHBvc3Rwcm9jZXNzKFxuICAgICAgICBwYXJzZShvcHRpb25zKS5kb2N1bWVudCgpLndyaXRlKHByZXByb2Nlc3MoKSh2YWx1ZSwgZW5jb2RpbmcsIHRydWUpKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4vKipcbiAqIE5vdGUgdGhpcyBjb21waWxlciBvbmx5IHVuZGVyc3RhbmQgY29tcGxldGUgYnVmZmVyaW5nLCBub3Qgc3RyZWFtaW5nLlxuICpcbiAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICovXG5mdW5jdGlvbiBjb21waWxlcihvcHRpb25zKSB7XG4gIC8qKiBAdHlwZSB7Q29uZmlnfSAqL1xuICBjb25zdCBjb25maWcgPSB7XG4gICAgdHJhbnNmb3JtczogW10sXG4gICAgY2FuQ29udGFpbkVvbHM6IFsnZW1waGFzaXMnLCAnZnJhZ21lbnQnLCAnaGVhZGluZycsICdwYXJhZ3JhcGgnLCAnc3Ryb25nJ10sXG4gICAgZW50ZXI6IHtcbiAgICAgIGF1dG9saW5rOiBvcGVuZXIobGluayksXG4gICAgICBhdXRvbGlua1Byb3RvY29sOiBvbmVudGVyZGF0YSxcbiAgICAgIGF1dG9saW5rRW1haWw6IG9uZW50ZXJkYXRhLFxuICAgICAgYXR4SGVhZGluZzogb3BlbmVyKGhlYWRpbmcpLFxuICAgICAgYmxvY2tRdW90ZTogb3BlbmVyKGJsb2NrUXVvdGUpLFxuICAgICAgY2hhcmFjdGVyRXNjYXBlOiBvbmVudGVyZGF0YSxcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZTogb25lbnRlcmRhdGEsXG4gICAgICBjb2RlRmVuY2VkOiBvcGVuZXIoY29kZUZsb3cpLFxuICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogYnVmZmVyLFxuICAgICAgY29kZUZlbmNlZEZlbmNlTWV0YTogYnVmZmVyLFxuICAgICAgY29kZUluZGVudGVkOiBvcGVuZXIoY29kZUZsb3csIGJ1ZmZlciksXG4gICAgICBjb2RlVGV4dDogb3BlbmVyKGNvZGVUZXh0LCBidWZmZXIpLFxuICAgICAgY29kZVRleHREYXRhOiBvbmVudGVyZGF0YSxcbiAgICAgIGRhdGE6IG9uZW50ZXJkYXRhLFxuICAgICAgY29kZUZsb3dWYWx1ZTogb25lbnRlcmRhdGEsXG4gICAgICBkZWZpbml0aW9uOiBvcGVuZXIoZGVmaW5pdGlvbiksXG4gICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IGJ1ZmZlcixcbiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogYnVmZmVyLFxuICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBidWZmZXIsXG4gICAgICBlbXBoYXNpczogb3BlbmVyKGVtcGhhc2lzKSxcbiAgICAgIGhhcmRCcmVha0VzY2FwZTogb3BlbmVyKGhhcmRCcmVhayksXG4gICAgICBoYXJkQnJlYWtUcmFpbGluZzogb3BlbmVyKGhhcmRCcmVhayksXG4gICAgICBodG1sRmxvdzogb3BlbmVyKGh0bWwsIGJ1ZmZlciksXG4gICAgICBodG1sRmxvd0RhdGE6IG9uZW50ZXJkYXRhLFxuICAgICAgaHRtbFRleHQ6IG9wZW5lcihodG1sLCBidWZmZXIpLFxuICAgICAgaHRtbFRleHREYXRhOiBvbmVudGVyZGF0YSxcbiAgICAgIGltYWdlOiBvcGVuZXIoaW1hZ2UpLFxuICAgICAgbGFiZWw6IGJ1ZmZlcixcbiAgICAgIGxpbms6IG9wZW5lcihsaW5rKSxcbiAgICAgIGxpc3RJdGVtOiBvcGVuZXIobGlzdEl0ZW0pLFxuICAgICAgbGlzdEl0ZW1WYWx1ZTogb25lbnRlcmxpc3RpdGVtdmFsdWUsXG4gICAgICBsaXN0T3JkZXJlZDogb3BlbmVyKGxpc3QsIG9uZW50ZXJsaXN0b3JkZXJlZCksXG4gICAgICBsaXN0VW5vcmRlcmVkOiBvcGVuZXIobGlzdCksXG4gICAgICBwYXJhZ3JhcGg6IG9wZW5lcihwYXJhZ3JhcGgpLFxuICAgICAgcmVmZXJlbmNlOiBvbmVudGVycmVmZXJlbmNlLFxuICAgICAgcmVmZXJlbmNlU3RyaW5nOiBidWZmZXIsXG4gICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBidWZmZXIsXG4gICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBidWZmZXIsXG4gICAgICBzZXRleHRIZWFkaW5nOiBvcGVuZXIoaGVhZGluZyksXG4gICAgICBzdHJvbmc6IG9wZW5lcihzdHJvbmcpLFxuICAgICAgdGhlbWF0aWNCcmVhazogb3BlbmVyKHRoZW1hdGljQnJlYWspXG4gICAgfSxcbiAgICBleGl0OiB7XG4gICAgICBhdHhIZWFkaW5nOiBjbG9zZXIoKSxcbiAgICAgIGF0eEhlYWRpbmdTZXF1ZW5jZTogb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlLFxuICAgICAgYXV0b2xpbms6IGNsb3NlcigpLFxuICAgICAgYXV0b2xpbmtFbWFpbDogb25leGl0YXV0b2xpbmtlbWFpbCxcbiAgICAgIGF1dG9saW5rUHJvdG9jb2w6IG9uZXhpdGF1dG9saW5rcHJvdG9jb2wsXG4gICAgICBibG9ja1F1b3RlOiBjbG9zZXIoKSxcbiAgICAgIGNoYXJhY3RlckVzY2FwZVZhbHVlOiBvbmV4aXRkYXRhLFxuICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcixcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWM6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcixcbiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSxcbiAgICAgIGNvZGVGZW5jZWQ6IGNsb3NlcihvbmV4aXRjb2RlZmVuY2VkKSxcbiAgICAgIGNvZGVGZW5jZWRGZW5jZTogb25leGl0Y29kZWZlbmNlZGZlbmNlLFxuICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogb25leGl0Y29kZWZlbmNlZGZlbmNlaW5mbyxcbiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IG9uZXhpdGNvZGVmZW5jZWRmZW5jZW1ldGEsXG4gICAgICBjb2RlRmxvd1ZhbHVlOiBvbmV4aXRkYXRhLFxuICAgICAgY29kZUluZGVudGVkOiBjbG9zZXIob25leGl0Y29kZWluZGVudGVkKSxcbiAgICAgIGNvZGVUZXh0OiBjbG9zZXIob25leGl0Y29kZXRleHQpLFxuICAgICAgY29kZVRleHREYXRhOiBvbmV4aXRkYXRhLFxuICAgICAgZGF0YTogb25leGl0ZGF0YSxcbiAgICAgIGRlZmluaXRpb246IGNsb3NlcigpLFxuICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsXG4gICAgICBkZWZpbml0aW9uTGFiZWxTdHJpbmc6IG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZyxcbiAgICAgIGRlZmluaXRpb25UaXRsZVN0cmluZzogb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nLFxuICAgICAgZW1waGFzaXM6IGNsb3NlcigpLFxuICAgICAgaGFyZEJyZWFrRXNjYXBlOiBjbG9zZXIob25leGl0aGFyZGJyZWFrKSxcbiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBjbG9zZXIob25leGl0aGFyZGJyZWFrKSxcbiAgICAgIGh0bWxGbG93OiBjbG9zZXIob25leGl0aHRtbGZsb3cpLFxuICAgICAgaHRtbEZsb3dEYXRhOiBvbmV4aXRkYXRhLFxuICAgICAgaHRtbFRleHQ6IGNsb3NlcihvbmV4aXRodG1sdGV4dCksXG4gICAgICBodG1sVGV4dERhdGE6IG9uZXhpdGRhdGEsXG4gICAgICBpbWFnZTogY2xvc2VyKG9uZXhpdGltYWdlKSxcbiAgICAgIGxhYmVsOiBvbmV4aXRsYWJlbCxcbiAgICAgIGxhYmVsVGV4dDogb25leGl0bGFiZWx0ZXh0LFxuICAgICAgbGluZUVuZGluZzogb25leGl0bGluZWVuZGluZyxcbiAgICAgIGxpbms6IGNsb3NlcihvbmV4aXRsaW5rKSxcbiAgICAgIGxpc3RJdGVtOiBjbG9zZXIoKSxcbiAgICAgIGxpc3RPcmRlcmVkOiBjbG9zZXIoKSxcbiAgICAgIGxpc3RVbm9yZGVyZWQ6IGNsb3NlcigpLFxuICAgICAgcGFyYWdyYXBoOiBjbG9zZXIoKSxcbiAgICAgIHJlZmVyZW5jZVN0cmluZzogb25leGl0cmVmZXJlbmNlc3RyaW5nLFxuICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZyxcbiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IG9uZXhpdHJlc291cmNldGl0bGVzdHJpbmcsXG4gICAgICByZXNvdXJjZTogb25leGl0cmVzb3VyY2UsXG4gICAgICBzZXRleHRIZWFkaW5nOiBjbG9zZXIob25leGl0c2V0ZXh0aGVhZGluZyksXG4gICAgICBzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlLFxuICAgICAgc2V0ZXh0SGVhZGluZ1RleHQ6IG9uZXhpdHNldGV4dGhlYWRpbmd0ZXh0LFxuICAgICAgc3Ryb25nOiBjbG9zZXIoKSxcbiAgICAgIHRoZW1hdGljQnJlYWs6IGNsb3NlcigpXG4gICAgfVxuICB9XG4gIGNvbmZpZ3VyZShjb25maWcsIChvcHRpb25zIHx8IHt9KS5tZGFzdEV4dGVuc2lvbnMgfHwgW10pXG5cbiAgLyoqIEB0eXBlIHtDb21waWxlRGF0YX0gKi9cbiAgY29uc3QgZGF0YSA9IHt9XG4gIHJldHVybiBjb21waWxlXG5cbiAgLyoqXG4gICAqIFR1cm4gbWljcm9tYXJrIGV2ZW50cyBpbnRvIGFuIG1kYXN0IHRyZWUuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBldmVudHNcbiAgICogICBFdmVudHMuXG4gICAqIEByZXR1cm5zIHtSb290fVxuICAgKiAgIG1kYXN0IHRyZWUuXG4gICAqL1xuICBmdW5jdGlvbiBjb21waWxlKGV2ZW50cykge1xuICAgIC8qKiBAdHlwZSB7Um9vdH0gKi9cbiAgICBsZXQgdHJlZSA9IHtcbiAgICAgIHR5cGU6ICdyb290JyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH1cbiAgICAvKiogQHR5cGUge09taXQ8Q29tcGlsZUNvbnRleHQsICdzbGljZVNlcmlhbGl6ZSc+fSAqL1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBzdGFjazogW3RyZWVdLFxuICAgICAgdG9rZW5TdGFjazogW10sXG4gICAgICBjb25maWcsXG4gICAgICBlbnRlcixcbiAgICAgIGV4aXQsXG4gICAgICBidWZmZXIsXG4gICAgICByZXN1bWUsXG4gICAgICBzZXREYXRhLFxuICAgICAgZ2V0RGF0YVxuICAgIH1cbiAgICAvKiogQHR5cGUge0FycmF5PG51bWJlcj59ICovXG4gICAgY29uc3QgbGlzdFN0YWNrID0gW11cbiAgICBsZXQgaW5kZXggPSAtMVxuICAgIHdoaWxlICgrK2luZGV4IDwgZXZlbnRzLmxlbmd0aCkge1xuICAgICAgLy8gV2UgcHJlcHJvY2VzcyBsaXN0cyB0byBhZGQgYGxpc3RJdGVtYCB0b2tlbnMsIGFuZCB0byBpbmZlciB3aGV0aGVyXG4gICAgICAvLyBpdGVtcyB0aGUgbGlzdCBpdHNlbGYgYXJlIHNwcmVhZCBvdXQuXG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50c1tpbmRleF1bMV0udHlwZSA9PT0gJ2xpc3RPcmRlcmVkJyB8fFxuICAgICAgICBldmVudHNbaW5kZXhdWzFdLnR5cGUgPT09ICdsaXN0VW5vcmRlcmVkJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChldmVudHNbaW5kZXhdWzBdID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgbGlzdFN0YWNrLnB1c2goaW5kZXgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFpbCA9IGxpc3RTdGFjay5wb3AoKVxuICAgICAgICAgIGluZGV4ID0gcHJlcGFyZUxpc3QoZXZlbnRzLCB0YWlsLCBpbmRleClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpbmRleCA9IC0xXG4gICAgd2hpbGUgKCsraW5kZXggPCBldmVudHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gY29uZmlnW2V2ZW50c1tpbmRleF1bMF1dXG4gICAgICBpZiAob3duLmNhbGwoaGFuZGxlciwgZXZlbnRzW2luZGV4XVsxXS50eXBlKSkge1xuICAgICAgICBoYW5kbGVyW2V2ZW50c1tpbmRleF1bMV0udHlwZV0uY2FsbChcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzbGljZVNlcmlhbGl6ZTogZXZlbnRzW2luZGV4XVsyXS5zbGljZVNlcmlhbGl6ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICApLFxuICAgICAgICAgIGV2ZW50c1tpbmRleF1bMV1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0b2tlbnMgc3RpbGwgYmVpbmcgb3Blbi5cbiAgICBpZiAoY29udGV4dC50b2tlblN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhaWwgPSBjb250ZXh0LnRva2VuU3RhY2tbY29udGV4dC50b2tlblN0YWNrLmxlbmd0aCAtIDFdXG4gICAgICBjb25zdCBoYW5kbGVyID0gdGFpbFsxXSB8fCBkZWZhdWx0T25FcnJvclxuICAgICAgaGFuZGxlci5jYWxsKGNvbnRleHQsIHVuZGVmaW5lZCwgdGFpbFswXSlcbiAgICB9XG5cbiAgICAvLyBGaWd1cmUgb3V0IGByb290YCBwb3NpdGlvbi5cbiAgICB0cmVlLnBvc2l0aW9uID0ge1xuICAgICAgc3RhcnQ6IHBvaW50KFxuICAgICAgICBldmVudHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gZXZlbnRzWzBdWzFdLnN0YXJ0XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGxpbmU6IDEsXG4gICAgICAgICAgICAgIGNvbHVtbjogMSxcbiAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICB9XG4gICAgICApLFxuICAgICAgZW5kOiBwb2ludChcbiAgICAgICAgZXZlbnRzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMl1bMV0uZW5kXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGxpbmU6IDEsXG4gICAgICAgICAgICAgIGNvbHVtbjogMSxcbiAgICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gQ2FsbCB0cmFuc2Zvcm1zLlxuICAgIGluZGV4ID0gLTFcbiAgICB3aGlsZSAoKytpbmRleCA8IGNvbmZpZy50cmFuc2Zvcm1zLmxlbmd0aCkge1xuICAgICAgdHJlZSA9IGNvbmZpZy50cmFuc2Zvcm1zW2luZGV4XSh0cmVlKSB8fCB0cmVlXG4gICAgfVxuICAgIHJldHVybiB0cmVlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxFdmVudD59IGV2ZW50c1xuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gcHJlcGFyZUxpc3QoZXZlbnRzLCBzdGFydCwgbGVuZ3RoKSB7XG4gICAgbGV0IGluZGV4ID0gc3RhcnQgLSAxXG4gICAgbGV0IGNvbnRhaW5lckJhbGFuY2UgPSAtMVxuICAgIGxldCBsaXN0U3ByZWFkID0gZmFsc2VcbiAgICAvKiogQHR5cGUge1Rva2VuIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBsaXN0SXRlbVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfSAqL1xuICAgIGxldCBsaW5lSW5kZXhcbiAgICAvKiogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgZmlyc3RCbGFua0xpbmVJbmRleFxuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgYXRNYXJrZXJcbiAgICB3aGlsZSAoKytpbmRleCA8PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4XVxuICAgICAgaWYgKFxuICAgICAgICBldmVudFsxXS50eXBlID09PSAnbGlzdFVub3JkZXJlZCcgfHxcbiAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gJ2xpc3RPcmRlcmVkJyB8fFxuICAgICAgICBldmVudFsxXS50eXBlID09PSAnYmxvY2tRdW90ZSdcbiAgICAgICkge1xuICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICBjb250YWluZXJCYWxhbmNlKytcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250YWluZXJCYWxhbmNlLS1cbiAgICAgICAgfVxuICAgICAgICBhdE1hcmtlciA9IHVuZGVmaW5lZFxuICAgICAgfSBlbHNlIGlmIChldmVudFsxXS50eXBlID09PSAnbGluZUVuZGluZ0JsYW5rJykge1xuICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsaXN0SXRlbSAmJlxuICAgICAgICAgICAgIWF0TWFya2VyICYmXG4gICAgICAgICAgICAhY29udGFpbmVyQmFsYW5jZSAmJlxuICAgICAgICAgICAgIWZpcnN0QmxhbmtMaW5lSW5kZXhcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZpcnN0QmxhbmtMaW5lSW5kZXggPSBpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgICBhdE1hcmtlciA9IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBldmVudFsxXS50eXBlID09PSAnbGluZVByZWZpeCcgfHxcbiAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gJ2xpc3RJdGVtVmFsdWUnIHx8XG4gICAgICAgIGV2ZW50WzFdLnR5cGUgPT09ICdsaXN0SXRlbU1hcmtlcicgfHxcbiAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gJ2xpc3RJdGVtUHJlZml4JyB8fFxuICAgICAgICBldmVudFsxXS50eXBlID09PSAnbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlJ1xuICAgICAgKSB7XG4gICAgICAgIC8vIEVtcHR5LlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXRNYXJrZXIgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKCFjb250YWluZXJCYWxhbmNlICYmXG4gICAgICAgICAgZXZlbnRbMF0gPT09ICdlbnRlcicgJiZcbiAgICAgICAgICBldmVudFsxXS50eXBlID09PSAnbGlzdEl0ZW1QcmVmaXgnKSB8fFxuICAgICAgICAoY29udGFpbmVyQmFsYW5jZSA9PT0gLTEgJiZcbiAgICAgICAgICBldmVudFswXSA9PT0gJ2V4aXQnICYmXG4gICAgICAgICAgKGV2ZW50WzFdLnR5cGUgPT09ICdsaXN0VW5vcmRlcmVkJyB8fFxuICAgICAgICAgICAgZXZlbnRbMV0udHlwZSA9PT0gJ2xpc3RPcmRlcmVkJykpXG4gICAgICApIHtcbiAgICAgICAgaWYgKGxpc3RJdGVtKSB7XG4gICAgICAgICAgbGV0IHRhaWxJbmRleCA9IGluZGV4XG4gICAgICAgICAgbGluZUluZGV4ID0gdW5kZWZpbmVkXG4gICAgICAgICAgd2hpbGUgKHRhaWxJbmRleC0tKSB7XG4gICAgICAgICAgICBjb25zdCB0YWlsRXZlbnQgPSBldmVudHNbdGFpbEluZGV4XVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0YWlsRXZlbnRbMV0udHlwZSA9PT0gJ2xpbmVFbmRpbmcnIHx8XG4gICAgICAgICAgICAgIHRhaWxFdmVudFsxXS50eXBlID09PSAnbGluZUVuZGluZ0JsYW5rJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmICh0YWlsRXZlbnRbMF0gPT09ICdleGl0JykgY29udGludWVcbiAgICAgICAgICAgICAgaWYgKGxpbmVJbmRleCkge1xuICAgICAgICAgICAgICAgIGV2ZW50c1tsaW5lSW5kZXhdWzFdLnR5cGUgPSAnbGluZUVuZGluZ0JsYW5rJ1xuICAgICAgICAgICAgICAgIGxpc3RTcHJlYWQgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPSAnbGluZUVuZGluZydcbiAgICAgICAgICAgICAgbGluZUluZGV4ID0gdGFpbEluZGV4XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICB0YWlsRXZlbnRbMV0udHlwZSA9PT0gJ2xpbmVQcmVmaXgnIHx8XG4gICAgICAgICAgICAgIHRhaWxFdmVudFsxXS50eXBlID09PSAnYmxvY2tRdW90ZVByZWZpeCcgfHxcbiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICdibG9ja1F1b3RlUHJlZml4V2hpdGVzcGFjZScgfHxcbiAgICAgICAgICAgICAgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICdibG9ja1F1b3RlTWFya2VyJyB8fFxuICAgICAgICAgICAgICB0YWlsRXZlbnRbMV0udHlwZSA9PT0gJ2xpc3RJdGVtSW5kZW50J1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIEVtcHR5XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaXJzdEJsYW5rTGluZUluZGV4ICYmXG4gICAgICAgICAgICAoIWxpbmVJbmRleCB8fCBmaXJzdEJsYW5rTGluZUluZGV4IDwgbGluZUluZGV4KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbGlzdEl0ZW0uX3NwcmVhZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGaXggcG9zaXRpb24uXG4gICAgICAgICAgbGlzdEl0ZW0uZW5kID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgbGluZUluZGV4ID8gZXZlbnRzW2xpbmVJbmRleF1bMV0uc3RhcnQgOiBldmVudFsxXS5lbmRcbiAgICAgICAgICApXG4gICAgICAgICAgZXZlbnRzLnNwbGljZShsaW5lSW5kZXggfHwgaW5kZXgsIDAsIFsnZXhpdCcsIGxpc3RJdGVtLCBldmVudFsyXV0pXG4gICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgIGxlbmd0aCsrXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgbGlzdCBpdGVtLlxuICAgICAgICBpZiAoZXZlbnRbMV0udHlwZSA9PT0gJ2xpc3RJdGVtUHJlZml4Jykge1xuICAgICAgICAgIGxpc3RJdGVtID0ge1xuICAgICAgICAgICAgdHlwZTogJ2xpc3RJdGVtJyxcbiAgICAgICAgICAgIF9zcHJlYWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50WzFdLnN0YXJ0KSxcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHdlXHUyMDE5bGwgYWRkIGBlbmRgIGluIGEgc2Vjb25kLlxuICAgICAgICAgICAgZW5kOiB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYGxpc3RJdGVtYCBpcyBtb3N0IGRlZmluaXRlbHkgZGVmaW5lZCwgVFMuLi5cbiAgICAgICAgICBldmVudHMuc3BsaWNlKGluZGV4LCAwLCBbJ2VudGVyJywgbGlzdEl0ZW0sIGV2ZW50WzJdXSlcbiAgICAgICAgICBpbmRleCsrXG4gICAgICAgICAgbGVuZ3RoKytcbiAgICAgICAgICBmaXJzdEJsYW5rTGluZUluZGV4ID0gdW5kZWZpbmVkXG4gICAgICAgICAgYXRNYXJrZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZXZlbnRzW3N0YXJ0XVsxXS5fc3ByZWFkID0gbGlzdFNwcmVhZFxuICAgIHJldHVybiBsZW5ndGhcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGF0YS5cbiAgICpcbiAgICogQHRlbXBsYXRlIHtrZXlvZiBDb21waWxlRGF0YX0gS2V5XG4gICAqICAgRmllbGQgdHlwZS5cbiAgICogQHBhcmFtIHtLZXl9IGtleVxuICAgKiAgIEtleSBvZiBmaWVsZC5cbiAgICogQHBhcmFtIHtDb21waWxlRGF0YVtLZXldfSBbdmFsdWVdXG4gICAqICAgTmV3IHZhbHVlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0RGF0YShrZXksIHZhbHVlKSB7XG4gICAgZGF0YVtrZXldID0gdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YS5cbiAgICpcbiAgICogQHRlbXBsYXRlIHtrZXlvZiBDb21waWxlRGF0YX0gS2V5XG4gICAqICAgRmllbGQgdHlwZS5cbiAgICogQHBhcmFtIHtLZXl9IGtleVxuICAgKiAgIEtleSBvZiBmaWVsZC5cbiAgICogQHJldHVybnMge0NvbXBpbGVEYXRhW0tleV19XG4gICAqICAgVmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBnZXREYXRhKGtleSkge1xuICAgIHJldHVybiBkYXRhW2tleV1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gb3BlbmVyIGhhbmRsZS5cbiAgICpcbiAgICogQHBhcmFtIHsodG9rZW46IFRva2VuKSA9PiBOb2RlfSBjcmVhdGVcbiAgICogICBDcmVhdGUgYSBub2RlLlxuICAgKiBAcGFyYW0ge0hhbmRsZX0gW2FuZF1cbiAgICogICBPcHRpb25hbCBmdW5jdGlvbiB0byBhbHNvIHJ1bi5cbiAgICogQHJldHVybnMge0hhbmRsZX1cbiAgICogICBIYW5kbGUuXG4gICAqL1xuICBmdW5jdGlvbiBvcGVuZXIoY3JlYXRlLCBhbmQpIHtcbiAgICByZXR1cm4gb3BlblxuXG4gICAgLyoqXG4gICAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgICAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgZnVuY3Rpb24gb3Blbih0b2tlbikge1xuICAgICAgZW50ZXIuY2FsbCh0aGlzLCBjcmVhdGUodG9rZW4pLCB0b2tlbilcbiAgICAgIGlmIChhbmQpIGFuZC5jYWxsKHRoaXMsIHRva2VuKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gYnVmZmVyKCkge1xuICAgIHRoaXMuc3RhY2sucHVzaCh7XG4gICAgICB0eXBlOiAnZnJhZ21lbnQnLFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGVtcGxhdGUge05vZGV9IEtpbmRcbiAgICogICBOb2RlIHR5cGUuXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogICBDb250ZXh0LlxuICAgKiBAcGFyYW0ge0tpbmR9IG5vZGVcbiAgICogICBOb2RlIHRvIGVudGVyLlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgKiAgIENvcnJlc3BvbmRpbmcgdG9rZW4uXG4gICAqIEBwYXJhbSB7T25FbnRlckVycm9yIHwgdW5kZWZpbmVkfSBbZXJyb3JIYW5kbGVyXVxuICAgKiAgIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGlzIHRva2VuIGlzIG9wZW4sIGJ1dCBpdCBpcyBjbG9zZWQgYnkgc29tZXRoaW5nIGVsc2UuXG4gICAqIEByZXR1cm5zIHtLaW5kfVxuICAgKiAgIFRoZSBnaXZlbiBub2RlLlxuICAgKi9cbiAgZnVuY3Rpb24gZW50ZXIobm9kZSwgdG9rZW4sIGVycm9ySGFuZGxlcikge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IEFzc3VtZSBgTm9kZWAgY2FuIGV4aXN0IGFzIGEgY2hpbGQgb2YgYHBhcmVudGAuXG4gICAgcGFyZW50LmNoaWxkcmVuLnB1c2gobm9kZSlcbiAgICB0aGlzLnN0YWNrLnB1c2gobm9kZSlcbiAgICB0aGlzLnRva2VuU3RhY2sucHVzaChbdG9rZW4sIGVycm9ySGFuZGxlcl0pXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYGVuZGAgd2lsbCBiZSBwYXRjaGVkIGxhdGVyLlxuICAgIG5vZGUucG9zaXRpb24gPSB7XG4gICAgICBzdGFydDogcG9pbnQodG9rZW4uc3RhcnQpXG4gICAgfVxuICAgIHJldHVybiBub2RlXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvc2VyIGhhbmRsZS5cbiAgICpcbiAgICogQHBhcmFtIHtIYW5kbGV9IFthbmRdXG4gICAqICAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gYWxzbyBydW4uXG4gICAqIEByZXR1cm5zIHtIYW5kbGV9XG4gICAqICAgSGFuZGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xvc2VyKGFuZCkge1xuICAgIHJldHVybiBjbG9zZVxuXG4gICAgLyoqXG4gICAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgICAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvc2UodG9rZW4pIHtcbiAgICAgIGlmIChhbmQpIGFuZC5jYWxsKHRoaXMsIHRva2VuKVxuICAgICAgZXhpdC5jYWxsKHRoaXMsIHRva2VuKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqICAgQ29udGV4dC5cbiAgICogQHBhcmFtIHtUb2tlbn0gdG9rZW5cbiAgICogICBDb3JyZXNwb25kaW5nIHRva2VuLlxuICAgKiBAcGFyYW0ge09uRXhpdEVycm9yIHwgdW5kZWZpbmVkfSBbb25FeGl0RXJyb3JdXG4gICAqICAgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFub3RoZXIgdG9rZW4gaXMgb3Blbi5cbiAgICogQHJldHVybnMge05vZGV9XG4gICAqICAgVGhlIGNsb3NlZCBub2RlLlxuICAgKi9cbiAgZnVuY3Rpb24gZXhpdCh0b2tlbiwgb25FeGl0RXJyb3IpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFjay5wb3AoKVxuICAgIGNvbnN0IG9wZW4gPSB0aGlzLnRva2VuU3RhY2sucG9wKClcbiAgICBpZiAoIW9wZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBjbG9zZSBgJyArXG4gICAgICAgICAgdG9rZW4udHlwZSArXG4gICAgICAgICAgJ2AgKCcgK1xuICAgICAgICAgIHN0cmluZ2lmeVBvc2l0aW9uKHtcbiAgICAgICAgICAgIHN0YXJ0OiB0b2tlbi5zdGFydCxcbiAgICAgICAgICAgIGVuZDogdG9rZW4uZW5kXG4gICAgICAgICAgfSkgK1xuICAgICAgICAgICcpOiBpdFx1MjAxOXMgbm90IG9wZW4nXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChvcGVuWzBdLnR5cGUgIT09IHRva2VuLnR5cGUpIHtcbiAgICAgIGlmIChvbkV4aXRFcnJvcikge1xuICAgICAgICBvbkV4aXRFcnJvci5jYWxsKHRoaXMsIHRva2VuLCBvcGVuWzBdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IG9wZW5bMV0gfHwgZGVmYXVsdE9uRXJyb3JcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIHRva2VuLCBvcGVuWzBdKVxuICAgICAgfVxuICAgIH1cbiAgICBub2RlLnBvc2l0aW9uLmVuZCA9IHBvaW50KHRva2VuLmVuZClcbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIHJlc3VtZSgpIHtcbiAgICByZXR1cm4gdG9TdHJpbmcodGhpcy5zdGFjay5wb3AoKSlcbiAgfVxuXG4gIC8vXG4gIC8vIEhhbmRsZXJzLlxuICAvL1xuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVybGlzdG9yZGVyZWQoKSB7XG4gICAgc2V0RGF0YSgnZXhwZWN0aW5nRmlyc3RMaXN0SXRlbVZhbHVlJywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW12YWx1ZSh0b2tlbikge1xuICAgIGlmIChnZXREYXRhKCdleHBlY3RpbmdGaXJzdExpc3RJdGVtVmFsdWUnKSkge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl1cbiAgICAgIGFuY2VzdG9yLnN0YXJ0ID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLCAxMClcbiAgICAgIHNldERhdGEoJ2V4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZScpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8oKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKClcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgbm9kZS5sYW5nID0gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZW1ldGEoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKClcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgbm9kZS5tZXRhID0gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZSgpIHtcbiAgICAvLyBFeGl0IGlmIHRoaXMgaXMgdGhlIGNsb3NpbmcgZmVuY2UuXG4gICAgaWYgKGdldERhdGEoJ2Zsb3dDb2RlSW5zaWRlJykpIHJldHVyblxuICAgIHRoaXMuYnVmZmVyKClcbiAgICBzZXREYXRhKCdmbG93Q29kZUluc2lkZScsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBub2RlLnZhbHVlID0gZGF0YS5yZXBsYWNlKC9eKFxccj9cXG58XFxyKXwoXFxyP1xcbnxcXHIpJC9nLCAnJylcbiAgICBzZXREYXRhKCdmbG93Q29kZUluc2lkZScpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0Y29kZWluZGVudGVkKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIG5vZGUudmFsdWUgPSBkYXRhLnJlcGxhY2UoLyhcXHI/XFxufFxccikkL2csICcnKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb25sYWJlbHN0cmluZyh0b2tlbikge1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBub2RlLmxhYmVsID0gbGFiZWxcbiAgICBub2RlLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKFxuICAgICAgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbilcbiAgICApLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9udGl0bGVzdHJpbmcoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKClcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgbm9kZS50aXRsZSA9IGRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKClcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgbm9kZS51cmwgPSBkYXRhXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlKHRva2VuKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGlmICghbm9kZS5kZXB0aCkge1xuICAgICAgY29uc3QgZGVwdGggPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5sZW5ndGhcbiAgICAgIG5vZGUuZGVwdGggPSBkZXB0aFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5ndGV4dCgpIHtcbiAgICBzZXREYXRhKCdzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nJywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlKHRva2VuKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIG5vZGUuZGVwdGggPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5jaGFyQ29kZUF0KDApID09PSA2MSA/IDEgOiAyXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZygpIHtcbiAgICBzZXREYXRhKCdzZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZW50ZXJkYXRhKHRva2VuKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGxldCB0YWlsID0gbm9kZS5jaGlsZHJlbltub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdXG4gICAgaWYgKCF0YWlsIHx8IHRhaWwudHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgICAvLyBBZGQgYSBuZXcgdGV4dCBub2RlLlxuICAgICAgdGFpbCA9IHRleHQoKVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2VcdTIwMTlsbCBhZGQgYGVuZGAgbGF0ZXIuXG4gICAgICB0YWlsLnBvc2l0aW9uID0ge1xuICAgICAgICBzdGFydDogcG9pbnQodG9rZW4uc3RhcnQpXG4gICAgICB9XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBBc3N1bWUgYHBhcmVudGAgYWNjZXB0cyBgdGV4dGAuXG4gICAgICBub2RlLmNoaWxkcmVuLnB1c2godGFpbClcbiAgICB9XG4gICAgdGhpcy5zdGFjay5wdXNoKHRhaWwpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRkYXRhKHRva2VuKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMuc3RhY2sucG9wKClcbiAgICB0YWlsLnZhbHVlICs9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pXG4gICAgdGFpbC5wb3NpdGlvbi5lbmQgPSBwb2ludCh0b2tlbi5lbmQpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRsaW5lZW5kaW5nKHRva2VuKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIC8vIElmIHdlXHUyMDE5cmUgYXQgYSBoYXJkIGJyZWFrLCBpbmNsdWRlIHRoZSBsaW5lIGVuZGluZyBpbiB0aGVyZS5cbiAgICBpZiAoZ2V0RGF0YSgnYXRIYXJkQnJlYWsnKSkge1xuICAgICAgY29uc3QgdGFpbCA9IGNvbnRleHQuY2hpbGRyZW5bY29udGV4dC5jaGlsZHJlbi5sZW5ndGggLSAxXVxuICAgICAgdGFpbC5wb3NpdGlvbi5lbmQgPSBwb2ludCh0b2tlbi5lbmQpXG4gICAgICBzZXREYXRhKCdhdEhhcmRCcmVhaycpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKFxuICAgICAgIWdldERhdGEoJ3NldGV4dEhlYWRpbmdTbHVycExpbmVFbmRpbmcnKSAmJlxuICAgICAgY29uZmlnLmNhbkNvbnRhaW5Fb2xzLmluY2x1ZGVzKGNvbnRleHQudHlwZSlcbiAgICApIHtcbiAgICAgIG9uZW50ZXJkYXRhLmNhbGwodGhpcywgdG9rZW4pXG4gICAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0aGFyZGJyZWFrKCkge1xuICAgIHNldERhdGEoJ2F0SGFyZEJyZWFrJywgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGh0bWxmbG93KCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIG5vZGUudmFsdWUgPSBkYXRhXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRodG1sdGV4dCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBub2RlLnZhbHVlID0gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0Y29kZXRleHQoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdW1lKClcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgbm9kZS52YWx1ZSA9IGRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGxpbmsoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIC8vIE5vdGU6IHRoZXJlIGFyZSBhbHNvIGBpZGVudGlmaWVyYCBhbmQgYGxhYmVsYCBmaWVsZHMgb24gdGhpcyBsaW5rIG5vZGUhXG4gICAgLy8gVGhlc2UgYXJlIHVzZWQgLyBjbGVhbmVkIGhlcmUuXG4gICAgLy8gVG8gZG86IGNsZWFuLlxuICAgIGlmIChnZXREYXRhKCdpblJlZmVyZW5jZScpKSB7XG4gICAgICAvKiogQHR5cGUge1JlZmVyZW5jZVR5cGV9ICovXG4gICAgICBjb25zdCByZWZlcmVuY2VUeXBlID0gZ2V0RGF0YSgncmVmZXJlbmNlVHlwZScpIHx8ICdzaG9ydGN1dCdcbiAgICAgIG5vZGUudHlwZSArPSAnUmVmZXJlbmNlJ1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgbm9kZS5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgZGVsZXRlIG5vZGUudXJsXG4gICAgICBkZWxldGUgbm9kZS50aXRsZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBtdXRhdGUuXG4gICAgICBkZWxldGUgbm9kZS5pZGVudGlmaWVyXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBtdXRhdGUuXG4gICAgICBkZWxldGUgbm9kZS5sYWJlbFxuICAgIH1cbiAgICBzZXREYXRhKCdyZWZlcmVuY2VUeXBlJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIG9uZXhpdGltYWdlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICAvLyBOb3RlOiB0aGVyZSBhcmUgYWxzbyBgaWRlbnRpZmllcmAgYW5kIGBsYWJlbGAgZmllbGRzIG9uIHRoaXMgbGluayBub2RlIVxuICAgIC8vIFRoZXNlIGFyZSB1c2VkIC8gY2xlYW5lZCBoZXJlLlxuICAgIC8vIFRvIGRvOiBjbGVhbi5cbiAgICBpZiAoZ2V0RGF0YSgnaW5SZWZlcmVuY2UnKSkge1xuICAgICAgLyoqIEB0eXBlIHtSZWZlcmVuY2VUeXBlfSAqL1xuICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IGdldERhdGEoJ3JlZmVyZW5jZVR5cGUnKSB8fCAnc2hvcnRjdXQnXG4gICAgICBub2RlLnR5cGUgKz0gJ1JlZmVyZW5jZSdcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IG11dGF0ZS5cbiAgICAgIG5vZGUucmVmZXJlbmNlVHlwZSA9IHJlZmVyZW5jZVR5cGVcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IG11dGF0ZS5cbiAgICAgIGRlbGV0ZSBub2RlLnVybFxuICAgICAgZGVsZXRlIG5vZGUudGl0bGVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgZGVsZXRlIG5vZGUuaWRlbnRpZmllclxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbXV0YXRlLlxuICAgICAgZGVsZXRlIG5vZGUubGFiZWxcbiAgICB9XG4gICAgc2V0RGF0YSgncmVmZXJlbmNlVHlwZScpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRsYWJlbHRleHQodG9rZW4pIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKVxuICAgIGNvbnN0IGFuY2VzdG9yID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDJdXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc3Rhc2ggdGhpcyBvbiB0aGUgbm9kZSwgYXMgaXQgbWlnaHQgYmVjb21lIGEgcmVmZXJlbmNlXG4gICAgLy8gbGF0ZXIuXG4gICAgYW5jZXN0b3IubGFiZWwgPSBkZWNvZGVTdHJpbmcoc3RyaW5nKVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHNhbWUgYXMgYWJvdmUuXG4gICAgYW5jZXN0b3IuaWRlbnRpZmllciA9IG5vcm1hbGl6ZUlkZW50aWZpZXIoc3RyaW5nKS50b0xvd2VyQ2FzZSgpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRsYWJlbCgpIHtcbiAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICAvLyBBc3N1bWUgYSByZWZlcmVuY2UuXG4gICAgc2V0RGF0YSgnaW5SZWZlcmVuY2UnLCB0cnVlKVxuICAgIGlmIChub2RlLnR5cGUgPT09ICdsaW5rJykge1xuICAgICAgLyoqIEB0eXBlIHtBcnJheTxTdGF0aWNQaHJhc2luZ0NvbnRlbnQ+fSAqL1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogQXNzdW1lIHN0YXRpYyBwaHJhc2luZyBjb250ZW50LlxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBmcmFnbWVudC5jaGlsZHJlblxuICAgICAgbm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuYWx0ID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VtZSgpXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgIG5vZGUudXJsID0gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZygpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBub2RlLnRpdGxlID0gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2UoKSB7XG4gICAgc2V0RGF0YSgnaW5SZWZlcmVuY2UnKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25lbnRlcnJlZmVyZW5jZSgpIHtcbiAgICBzZXREYXRhKCdyZWZlcmVuY2VUeXBlJywgJ2NvbGxhcHNlZCcpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cblxuICBmdW5jdGlvbiBvbmV4aXRyZWZlcmVuY2VzdHJpbmcodG9rZW4pIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMucmVzdW1lKClcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc3Rhc2ggdGhpcyBvbiB0aGUgbm9kZSwgYXMgaXQgbWlnaHQgYmVjb21lIGEgcmVmZXJlbmNlXG4gICAgLy8gbGF0ZXIuXG4gICAgbm9kZS5sYWJlbCA9IGxhYmVsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogc2FtZSBhcyBhYm92ZS5cbiAgICBub2RlLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKFxuICAgICAgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbilcbiAgICApLnRvTG93ZXJDYXNlKClcbiAgICBzZXREYXRhKCdyZWZlcmVuY2VUeXBlJywgJ2Z1bGwnKVxuICB9XG5cbiAgLyoqXG4gICAqIEB0aGlzIHtDb21waWxlQ29udGV4dH1cbiAgICogQHR5cGUge0hhbmRsZX1cbiAgICovXG5cbiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyKHRva2VuKSB7XG4gICAgc2V0RGF0YSgnY2hhcmFjdGVyUmVmZXJlbmNlVHlwZScsIHRva2VuLnR5cGUpXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUodG9rZW4pIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbilcbiAgICBjb25zdCB0eXBlID0gZ2V0RGF0YSgnY2hhcmFjdGVyUmVmZXJlbmNlVHlwZScpXG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgbGV0IHZhbHVlXG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIHZhbHVlID0gZGVjb2RlTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZShcbiAgICAgICAgZGF0YSxcbiAgICAgICAgdHlwZSA9PT0gJ2NoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMnID8gMTAgOiAxNlxuICAgICAgKVxuICAgICAgc2V0RGF0YSgnY2hhcmFjdGVyUmVmZXJlbmNlVHlwZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKGRhdGEpXG4gICAgICB2YWx1ZSA9IHJlc3VsdFxuICAgIH1cbiAgICBjb25zdCB0YWlsID0gdGhpcy5zdGFjay5wb3AoKVxuICAgIHRhaWwudmFsdWUgKz0gdmFsdWVcbiAgICB0YWlsLnBvc2l0aW9uLmVuZCA9IHBvaW50KHRva2VuLmVuZClcbiAgfVxuXG4gIC8qKlxuICAgKiBAdGhpcyB7Q29tcGlsZUNvbnRleHR9XG4gICAqIEB0eXBlIHtIYW5kbGV9XG4gICAqL1xuICBmdW5jdGlvbiBvbmV4aXRhdXRvbGlua3Byb3RvY29sKHRva2VuKSB7XG4gICAgb25leGl0ZGF0YS5jYWxsKHRoaXMsIHRva2VuKVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV1cbiAgICBub2RlLnVybCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pXG4gIH1cblxuICAvKipcbiAgICogQHRoaXMge0NvbXBpbGVDb250ZXh0fVxuICAgKiBAdHlwZSB7SGFuZGxlfVxuICAgKi9cbiAgZnVuY3Rpb24gb25leGl0YXV0b2xpbmtlbWFpbCh0b2tlbikge1xuICAgIG9uZXhpdGRhdGEuY2FsbCh0aGlzLCB0b2tlbilcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdXG4gICAgbm9kZS51cmwgPSAnbWFpbHRvOicgKyB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKVxuICB9XG5cbiAgLy9cbiAgLy8gQ3JlYXRlcnMuXG4gIC8vXG5cbiAgLyoqIEByZXR1cm5zIHtCbG9ja3F1b3RlfSAqL1xuICBmdW5jdGlvbiBibG9ja1F1b3RlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnYmxvY2txdW90ZScsXG4gICAgICBjaGlsZHJlbjogW11cbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge0NvZGV9ICovXG4gIGZ1bmN0aW9uIGNvZGVGbG93KCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnY29kZScsXG4gICAgICBsYW5nOiBudWxsLFxuICAgICAgbWV0YTogbnVsbCxcbiAgICAgIHZhbHVlOiAnJ1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7SW5saW5lQ29kZX0gKi9cbiAgZnVuY3Rpb24gY29kZVRleHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdpbmxpbmVDb2RlJyxcbiAgICAgIHZhbHVlOiAnJ1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7RGVmaW5pdGlvbn0gKi9cbiAgZnVuY3Rpb24gZGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2RlZmluaXRpb24nLFxuICAgICAgaWRlbnRpZmllcjogJycsXG4gICAgICBsYWJlbDogbnVsbCxcbiAgICAgIHRpdGxlOiBudWxsLFxuICAgICAgdXJsOiAnJ1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7RW1waGFzaXN9ICovXG4gIGZ1bmN0aW9uIGVtcGhhc2lzKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZW1waGFzaXMnLFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtIZWFkaW5nfSAqL1xuICBmdW5jdGlvbiBoZWFkaW5nKCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGRlcHRoYCB3aWxsIGJlIHNldCBsYXRlci5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgZGVwdGg6IHVuZGVmaW5lZCxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7QnJlYWt9ICovXG4gIGZ1bmN0aW9uIGhhcmRCcmVhaygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2JyZWFrJ1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7SFRNTH0gKi9cbiAgZnVuY3Rpb24gaHRtbCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2h0bWwnLFxuICAgICAgdmFsdWU6ICcnXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtJbWFnZX0gKi9cbiAgZnVuY3Rpb24gaW1hZ2UoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICB0aXRsZTogbnVsbCxcbiAgICAgIHVybDogJycsXG4gICAgICBhbHQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge0xpbmt9ICovXG4gIGZ1bmN0aW9uIGxpbmsoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdsaW5rJyxcbiAgICAgIHRpdGxlOiBudWxsLFxuICAgICAgdXJsOiAnJyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlblxuICAgKiBAcmV0dXJucyB7TGlzdH1cbiAgICovXG4gIGZ1bmN0aW9uIGxpc3QodG9rZW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgb3JkZXJlZDogdG9rZW4udHlwZSA9PT0gJ2xpc3RPcmRlcmVkJyxcbiAgICAgIHN0YXJ0OiBudWxsLFxuICAgICAgc3ByZWFkOiB0b2tlbi5fc3ByZWFkLFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG4gICAqIEByZXR1cm5zIHtMaXN0SXRlbX1cbiAgICovXG4gIGZ1bmN0aW9uIGxpc3RJdGVtKHRva2VuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdsaXN0SXRlbScsXG4gICAgICBzcHJlYWQ6IHRva2VuLl9zcHJlYWQsXG4gICAgICBjaGVja2VkOiBudWxsLFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQYXJhZ3JhcGh9ICovXG4gIGZ1bmN0aW9uIHBhcmFncmFwaCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3BhcmFncmFwaCcsXG4gICAgICBjaGlsZHJlbjogW11cbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge1N0cm9uZ30gKi9cbiAgZnVuY3Rpb24gc3Ryb25nKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnc3Ryb25nJyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7VGV4dH0gKi9cbiAgZnVuY3Rpb24gdGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgdmFsdWU6ICcnXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtUaGVtYXRpY0JyZWFrfSAqL1xuICBmdW5jdGlvbiB0aGVtYXRpY0JyZWFrKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAndGhlbWF0aWNCcmVhaydcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb3B5IGEgcG9pbnQtbGlrZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge1BvaW50fSBkXG4gKiAgIFBvaW50LWxpa2UgdmFsdWUuXG4gKiBAcmV0dXJucyB7UG9pbnR9XG4gKiAgIHVuaXN0IHBvaW50LlxuICovXG5mdW5jdGlvbiBwb2ludChkKSB7XG4gIHJldHVybiB7XG4gICAgbGluZTogZC5saW5lLFxuICAgIGNvbHVtbjogZC5jb2x1bW4sXG4gICAgb2Zmc2V0OiBkLm9mZnNldFxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb25maWd9IGNvbWJpbmVkXG4gKiBAcGFyYW0ge0FycmF5PEV4dGVuc2lvbiB8IEFycmF5PEV4dGVuc2lvbj4+fSBleHRlbnNpb25zXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlKGNvbWJpbmVkLCBleHRlbnNpb25zKSB7XG4gIGxldCBpbmRleCA9IC0xXG4gIHdoaWxlICgrK2luZGV4IDwgZXh0ZW5zaW9ucy5sZW5ndGgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV4dGVuc2lvbnNbaW5kZXhdXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25maWd1cmUoY29tYmluZWQsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBleHRlbnNpb24oY29tYmluZWQsIHZhbHVlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Q29uZmlnfSBjb21iaW5lZFxuICogQHBhcmFtIHtFeHRlbnNpb259IGV4dGVuc2lvblxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGV4dGVuc2lvbihjb21iaW5lZCwgZXh0ZW5zaW9uKSB7XG4gIC8qKiBAdHlwZSB7a2V5b2YgRXh0ZW5zaW9ufSAqL1xuICBsZXQga2V5XG4gIGZvciAoa2V5IGluIGV4dGVuc2lvbikge1xuICAgIGlmIChvd24uY2FsbChleHRlbnNpb24sIGtleSkpIHtcbiAgICAgIGlmIChrZXkgPT09ICdjYW5Db250YWluRW9scycpIHtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb25ba2V5XVxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICBjb21iaW5lZFtrZXldLnB1c2goLi4ucmlnaHQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndHJhbnNmb3JtcycpIHtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb25ba2V5XVxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICBjb21iaW5lZFtrZXldLnB1c2goLi4ucmlnaHQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZW50ZXInIHx8IGtleSA9PT0gJ2V4aXQnKSB7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gZXh0ZW5zaW9uW2tleV1cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihjb21iaW5lZFtrZXldLCByaWdodClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiogQHR5cGUge09uRW50ZXJFcnJvcn0gKi9cbmZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGxlZnQsIHJpZ2h0KSB7XG4gIGlmIChsZWZ0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBjbG9zZSBgJyArXG4gICAgICAgIGxlZnQudHlwZSArXG4gICAgICAgICdgICgnICtcbiAgICAgICAgc3RyaW5naWZ5UG9zaXRpb24oe1xuICAgICAgICAgIHN0YXJ0OiBsZWZ0LnN0YXJ0LFxuICAgICAgICAgIGVuZDogbGVmdC5lbmRcbiAgICAgICAgfSkgK1xuICAgICAgICAnKTogYSBkaWZmZXJlbnQgdG9rZW4gKGAnICtcbiAgICAgICAgcmlnaHQudHlwZSArXG4gICAgICAgICdgLCAnICtcbiAgICAgICAgc3RyaW5naWZ5UG9zaXRpb24oe1xuICAgICAgICAgIHN0YXJ0OiByaWdodC5zdGFydCxcbiAgICAgICAgICBlbmQ6IHJpZ2h0LmVuZFxuICAgICAgICB9KSArXG4gICAgICAgICcpIGlzIG9wZW4nXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYW5ub3QgY2xvc2UgZG9jdW1lbnQsIGEgdG9rZW4gKGAnICtcbiAgICAgICAgcmlnaHQudHlwZSArXG4gICAgICAgICdgLCAnICtcbiAgICAgICAgc3RyaW5naWZ5UG9zaXRpb24oe1xuICAgICAgICAgIHN0YXJ0OiByaWdodC5zdGFydCxcbiAgICAgICAgICBlbmQ6IHJpZ2h0LmVuZFxuICAgICAgICB9KSArXG4gICAgICAgICcpIGlzIHN0aWxsIG9wZW4nXG4gICAgKVxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdCcpLlJvb3R9IFJvb3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bicpLk9wdGlvbnN9IE9wdGlvbnNcbiAqL1xuXG5pbXBvcnQge2Zyb21NYXJrZG93bn0gZnJvbSAnbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duJ1xuXG4vKipcbiAqIEB0aGlzIHtpbXBvcnQoJ3VuaWZpZWQnKS5Qcm9jZXNzb3J9XG4gKiBAdHlwZSB7aW1wb3J0KCd1bmlmaWVkJykuUGx1Z2luPFtPcHRpb25zP10gfCB2b2lkW10sIHN0cmluZywgUm9vdD59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbWFya1BhcnNlKG9wdGlvbnMpIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3VuaWZpZWQnKS5QYXJzZXJGdW5jdGlvbjxSb290Pn0gKi9cbiAgY29uc3QgcGFyc2VyID0gKGRvYykgPT4ge1xuICAgIC8vIEFzc3VtZSBvcHRpb25zLlxuICAgIGNvbnN0IHNldHRpbmdzID0gLyoqIEB0eXBlIHtPcHRpb25zfSAqLyAodGhpcy5kYXRhKCdzZXR0aW5ncycpKVxuXG4gICAgcmV0dXJuIGZyb21NYXJrZG93bihcbiAgICAgIGRvYyxcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCBvcHRpb25zLCB7XG4gICAgICAgIC8vIE5vdGU6IHRoZXNlIG9wdGlvbnMgYXJlIG5vdCBpbiB0aGUgcmVhZG1lLlxuICAgICAgICAvLyBUaGUgZ29hbCBpcyBmb3IgdGhlbSB0byBiZSBzZXQgYnkgcGx1Z2lucyBvbiBgZGF0YWAgaW5zdGVhZCBvZiBiZWluZ1xuICAgICAgICAvLyBwYXNzZWQgYnkgdXNlcnMuXG4gICAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZGF0YSgnbWljcm9tYXJrRXh0ZW5zaW9ucycpIHx8IFtdLFxuICAgICAgICBtZGFzdEV4dGVuc2lvbnM6IHRoaXMuZGF0YSgnZnJvbU1hcmtkb3duRXh0ZW5zaW9ucycpIHx8IFtdXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIE9iamVjdC5hc3NpZ24odGhpcywge1BhcnNlcjogcGFyc2VyfSlcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQUFBLFNBQTJDQSxJQUFNQyxJQUFBQTtBQUMxQixrQkFBQSxPQUFaQyxXQUEwQyxZQUFBLE9BQVhDLFVBQ3hDQSxRQUFPRCxVQUFVRCxHQUFBQSxJQUNRLGNBQUEsT0FBWEcsVUFBeUJBLE9BQU9DLE1BQzlDRCxPQUFPLENBQUEsR0FBSUgsRUFBQUEsSUFDZSxZQUFBLE9BQVpDLFVBQ2RBLFFBQWUsUUFBSUQsR0FBQUEsSUFFbkJELEdBQVksUUFBSUMsR0FBQUE7SUFBQUEsRUFDZkssTUFBTSxXQUFBO0FBQ1QsY0FBQSxNQUFBO0FBQUE7QUNUQSxZQUFJQyxLQUFzQixFQ0ExQixHQUF3QixDQUFDTCxJQUFTTSxP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UUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sY0FBYztBQUFBLEVBQ2QsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osY0FBYztBQUFBLEVBQ2QsVUFBVTtBQUFBLEVBQ1YsWUFBWTtBQUFBLEVBQ1osT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2QsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsaUJBQWlCO0FBQUEsRUFDakIsWUFBWTtBQUFBLEVBQ1osY0FBYztBQUFBLEVBQ2QsT0FBTztBQUFBLEVBQ1AsTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsaUJBQWlCO0FBQUEsRUFDakIsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsNEJBQTRCO0FBQUEsRUFDNUIsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AscUJBQXFCO0FBQUEsRUFDckIsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsaUJBQWlCO0FBQUEsRUFDakIsTUFBTTtBQUFBLEVBQ04sYUFBYTtBQUFBLEVBQ2IsVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsT0FBTztBQUFBLEVBQ1AsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2Isc0JBQXNCO0FBQUEsRUFDdEIsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsYUFBYTtBQUFBLEVBQ2IsWUFBWTtBQUFBLEVBQ1osYUFBYTtBQUFBLEVBQ2IsV0FBVztBQUFBLEVBQ1gsV0FBVztBQUFBLEVBQ1gsZUFBZTtBQUFBLEVBQ2Ysa0JBQWtCO0FBQUEsRUFDbEIsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsYUFBYTtBQUFBLEVBQ2IsUUFBUTtBQUFBLEVBQ1IsZUFBZTtBQUFBLEVBQ2YsU0FBUztBQUFBLEVBQ1QsU0FBUztBQUFBLEVBQ1QsZ0JBQWdCO0FBQUEsRUFDaEIsZ0JBQWdCO0FBQUEsRUFDaEIsY0FBYztBQUFBLEVBQ2QsT0FBTztBQUFBLEVBQ1AsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsWUFBWTtBQUFBLEVBQ1osTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsU0FBUztBQUFBLEVBQ1QsY0FBYztBQUFBLEVBQ2QsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04scUJBQXFCO0FBQUEsRUFDckIsVUFBVTtBQUFBLEVBQ1YsYUFBYTtBQUFBLEVBQ2IsT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsbUJBQW1CO0FBQUEsRUFDbkIsY0FBYztBQUFBLEVBQ2QsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1IsY0FBYztBQUFBLEVBQ2QsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sY0FBYztBQUFBLEVBQ2QsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsY0FBYztBQUFBLEVBQ2QsYUFBYTtBQUFBLEVBQ2IsWUFBWTtBQUFBLEVBQ1osU0FBUztBQUFBLEVBQ1QsY0FBYztBQUFBLEVBQ2QsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsY0FBYztBQUFBLEVBQ2QsVUFBVTtBQUFBLEVBQ1YsY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ1osYUFBYTtBQUFBLEVBQ2IsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sS0FBSztBQUFBLEVBQ0wsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1Isa0JBQWtCO0FBQUEsRUFDbEIsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsaUJBQWlCO0FBQUEsRUFDakIsY0FBYztBQUFBLEVBQ2QsZ0JBQWdCO0FBQUEsRUFDaEIsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsWUFBWTtBQUFBLEVBQ1osT0FBTztBQUFBLEVBQ1AsaUJBQWlCO0FBQUEsRUFDakIsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sY0FBYztBQUFBLEVBQ2QsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsU0FBUztBQUFBLEVBQ1QsaUJBQWlCO0FBQUEsRUFDakIsVUFBVTtBQUFBLEVBQ1YsV0FBVztBQUFBLEVBQ1gsaUJBQWlCO0FBQUEsRUFDakIsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sV0FB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QVc7QUFBQSxFQUNYLFNBQVE7QUFBQSxFQUNSLFdBQVU7QUFBQSxFQUNWLFVBQVM7QUFBQSxFQUNULGNBQWE7QUFBQSxFQUNiLFFBQU87QUFBQSxFQUNQLFFBQU87QUFBQSxFQUNQLFFBQU87QUFBQSxFQUNQLFNBQVE7QUFBQSxFQUNSLG1CQUFrQjtBQUFBLEVBQ2xCLGNBQWE7QUFBQSxFQUNiLFFBQU87QUFBQSxFQUNQLFFBQU87QUFBQSxFQUNQLFFBQU87QUFBQSxFQUNQLFNBQVE7QUFBQSxFQUNSLFNBQVE7QUFBQSxFQUNSLE9BQU07QUFBQSxFQUNOLE9BQU07QUFBQSxFQUNOLFFBQU87QUFBQSxFQUNQLGNBQWE7QUFBQSxFQUNiLFFBQU87QUFBQSxFQUNQLFNBQVE7QUFBQSxFQUNSLFFBQU87QUFBQSxFQUNQLFVBQVM7QUFBQSxFQUNULFlBQVc7QUFBQSxFQUNYLFFBQU87QUFBQSxFQUNQLE1BQUs7QUFBQSxFQUNMLFVBQVM7QUFBQSxFQUNULFVBQVM7QUFBQSxFQUNULFVBQVM7QUFBQSxFQUNULGFBQVk7QUFBQSxFQUNaLE9BQU07QUFBQSxFQUNOLFVBQVM7QUFBQSxFQUNULE1BQUs7QUFBQSxFQUNMLGNBQWE7QUFBQSxFQUNiLFNBQVE7QUFBQSxFQUNSLFFBQU87QUFBQSxFQUNQLE9BQU07QUFBQSxFQUNOLFVBQVM7QUFBQSxFQUNULGNBQWE7QUFBQSxFQUNiLGFBQVk7QUFBQSxFQUNaLFlBQVc7QUFBQSxFQUNYLFNBQVE7QUFBQSxFQUNSLGNBQWE7QUFBQSxFQUNiLE1BQUs7QUFBQSxFQUNMLFdBQVU7QUFBQSxFQUNWLGNBQWE7QUFBQSxFQUNiLGNBQWE7QUFBQSxFQUNiLFVBQVM7QUFBQSxFQUNULFVBQVM7QUFBQSxFQUNULGNBQWE7QUFBQSxFQUNiLFlBQVc7QUFBQSxFQUNYLE9BQU07QUFBQSxFQUNOLFVBQVM7QUFBQSxFQUNULFFBQU87QUFBQSxFQUNQLGFBQVk7QUFBQSxFQUNaLFVBQVM7QUFBQSxFQUNULGNBQWE7QUFBQSxFQUNiLFFBQU87QUFBQSxFQUNQLFVBQVM7QUFBQSxFQUNU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QUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxnQ0FBZ0M7QUFBQSxFQUNoQyxzQkFBc0I7QUFBQSxFQUN0QixVQUFVO0FBQUEsRUFDVixZQUFZO0FBQUEsRUFDWixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixjQUFjO0FBQUEsRUFDZCxXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixjQUFjO0FBQUEsRUFDZCxRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixjQUFjO0FBQUEsRUFDZCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixpQkFBaUI7QUFBQSxFQUNqQixlQUFlO0FBQUEsRUFDZixTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixjQUFjO0FBQUEsRUFDZCxZQUFZO0FBQUEsRUFDWixjQUFjO0FBQUEsRUFDZCxjQUFjO0FB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QU87QUFBQSxFQUNQLFVBQVU7QUFBQSxFQUNWLE1BQU07QUFBQSxFQUNOLDRCQUE0QjtBQUFBLEVBQzVCLFFBQVE7QUFBQSxFQUNSLFdBQVc7QUFBQSxFQUNYLGdDQUFnQztBQUFBLEVBQ2hDLHNCQUFzQjtBQUFBLEVBQ3RCLFVBQVU7QUFBQSxFQUNWLFlBQVk7QUFBQSxFQUNaLE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFBQSxFQUNOLFVBQVU7QUFBQSxFQUNWLFdBQVc7QUFBQSxFQUNYLFVBQVU7QUFBQSxFQUNWLFFBQVE7QUFBQSxFQUNSLGNBQWM7QUFBQSxFQUNkLFdBQVc7QUFBQSxFQUNYLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLFFBQVE7QUFBQSxFQUNSLFNBQVM7QUFBQSxFQUNULE9BQU87QUFBQSxFQUNQLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLGNBQWM7QUFBQSxFQUNkLFFBQVE7QUFBQSxFQUNSLFNBQVM7QUFBQSxFQUNULFNBQVM7QUFBQSxFQUNULFVBQVU7QUFBQSxFQUNWLFNBQVM7QUFBQSxFQUNULFNBQVM7QUFBQSxFQUNULFFBQVE7QUFBQSxFQUNSLFVBQVU7QUFBQSxFQUNWLFFBQVE7QUFBQSxFQUNSLGNBQWM7QUFBQSxFQUNkLFlBQVk7QUFBQSxFQUNaLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLGFBQWE7QUFBQSxFQUNiLE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULE9BQU87QUFBQSxFQUNQLE9BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLGlCQUFpQjtBQUFBLEVBQ2pCLGVBQWU7QUFBQSxFQUNmLFNBQVM7QUFBQSxFQUNULFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLFVBQVU7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VUEsR0FBRSxVQUFRLFdBQVVBLEdBQUUsT0FBSyxXQUFVQSxHQUFFLFdBQVMsV0FBVUEsR0FBRSxXQUFTLFdBQVVBLEdBQUUsZ0JBQWMsV0FBVUEsR0FBRSxXQUFTLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFdBQVMsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsY0FBWSxXQUFVQSxHQUFFLGlCQUFlLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLGFBQVcsV0FBVUEsR0FBRSxVQUFRLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLGVBQWEsV0FBVUEsR0FBRSxnQkFBYyxXQUFVQSxHQUFFLGdCQUFjLFdBQVVBLEdBQUUsZ0JBQWMsV0FBVUEsR0FBRSxnQkFBYyxXQUFVQSxHQUFFLGFBQVcsV0FBVUEsR0FBRSxXQUFTLFdBQVVBLEdBQUUsY0FBWSxXQUFVQSxHQUFFLFVBQVEsV0FBVUEsR0FBRSxVQUFRLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxjQUFZLFdBQVVBLEdBQUUsY0FBWSxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxhQUFXLFdBQVVBLEdBQUUsT0FBSyxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxjQUFZLFdBQVVBLEdBQUUsT0FBSyxXQUFVQSxHQUFFLFdBQVMsV0FBVUEsR0FBRSxVQUFRLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFNBQU8sV0FBVUEsR0FBRSxRQUFNLFdBQVVBLEdBQUUsUUFBTSxXQUFVQSxHQUFFLFdBQVMsV0FBVUEsR0FBRSxnQkFBYyxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxlQUFhLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGFBQVcsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsdUJBQXFCLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGFBQVcsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGNBQVksV0FBVUEsR0FBRSxnQkFBYyxXQUFVQSxHQUFFLGVBQWEsV0FBVUEsR0FBRSxpQkFBZSxXQUFVQSxHQUFFLGlCQUFlLFdBQVVBLEdBQUUsaUJBQWUsV0FBVUEsR0FBRSxjQUFZLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFFBQU0sV0FBVUEsR0FBRSxVQUFRLFdBQVVBLEdBQUUsbUJBQWlCLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLGVBQWEsV0FBVUEsR0FBRSxlQUFhLFdBQVVBLEdBQUUsaUJBQWUsV0FBVUEsR0FBRSxrQkFBZ0IsV0FBVUEsR0FBRSxvQkFBa0IsV0FBVUEsR0FBRSxrQkFBZ0IsV0FBVUEsR0FBRSxrQkFBZ0IsV0FBVUEsR0FBRSxlQUFhLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxXQUFTLFdBQVVBLEdBQUUsY0FBWSxXQUFVQSxHQUFFLFVBQVEsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFNBQU8sV0FBVUEsR0FBRSxnQkFBYyxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxnQkFBYyxXQUFVQSxHQUFFLGdCQUFjLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxPQUFLLFdBQVVBLEdBQUUsT0FBSyxXQUFVQSxHQUFFLE9BQUssV0FBVUEsR0FBRSxhQUFXLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxjQUFZLFdBQVVBLEdBQUUsU0FBTyxXQUFVQSxHQUFFLGFBQVcsV0FBVUEsR0FBRSxXQUFTLFdBQVVBLEdBQUUsV0FBUyxXQUFVQSxHQUFFLFNBQU8sV0FBVUEsR0FBRSxVQUFRLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsT0FBSyxXQUFVQSxHQUFFLGNBQVksV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsTUFBSSxXQUFVQSxHQUFFLFVBQVEsV0FBVUEsR0FBRSxTQUFPLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFNBQU8s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RSxHQUFFLEVBQUVBLEdBQUUsQ0FBQyxLQUFHQSxHQUFFLENBQUMsQ0FBQyxHQUFFLEdBQUUsRUFBRUEsR0FBRSxDQUFDLEtBQUdBLEdBQUUsQ0FBQyxDQUFDLEVBQUMsR0FBRUUsS0FBRUYsR0FBRSxDQUFDLEtBQUdBLEdBQUUsQ0FBQztBQUFFLFNBQU8sV0FBU0UsT0FBSUQsR0FBRSxJQUFFLEVBQUVDLEVBQUMsSUFBRSxNQUFLRDtBQUFDLEdBQUUsRUFBRSxFQUFFLEdBQUcsSUFBRSxTQUFTRixJQUFFO0FBQUMsTUFBSUMsS0FBRUQsR0FBRSxNQUFNLEVBQUUsR0FBRyxHQUFFRSxLQUFFLEVBQUVELEdBQUUsQ0FBQyxLQUFHQSxHQUFFLENBQUMsQ0FBQyxHQUFFRSxLQUFFLEVBQUVGLEdBQUUsQ0FBQyxLQUFHQSxHQUFFLENBQUMsQ0FBQyxHQUFFRyxLQUFFLEVBQUVILEdBQUUsQ0FBQyxLQUFHQSxHQUFFLENBQUMsQ0FBQyxHQUFFSSxLQUFFSixHQUFFLENBQUMsS0FBR0EsR0FBRSxDQUFDLEdBQUUyQixLQUFFLEVBQUMsR0FBRSxLQUFLLElBQUkxQixJQUFFLEdBQUcsR0FBRSxHQUFFLEtBQUssSUFBSUMsSUFBRSxHQUFHLEdBQUUsR0FBRSxLQUFLLElBQUlDLElBQUUsR0FBRyxFQUFDO0FBQUUsU0FBTyxXQUFTQyxPQUFJdUIsR0FBRSxJQUFFLEdBQUd2QixFQUFDLElBQUd1QjtBQUFDLEdBQUUsRUFBRSxFQUFFLEdBQUcsSUFBRSxTQUFTNUIsSUFBRTtBQUFDLE1BQUlDLEtBQUVELEdBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRUUsS0FBRSxFQUFFRCxHQUFFLENBQUMsS0FBR0EsR0FBRSxDQUFDLENBQUMsR0FBRUUsS0FBRSxFQUFFRixHQUFFLENBQUMsS0FBR0EsR0FBRSxDQUFDLENBQUMsR0FBRUcsS0FBRSxFQUFFSCxHQUFFLENBQUMsS0FBR0EsR0FBRSxDQUFDLENBQUMsR0FBRUksS0FBRUosR0FBRSxDQUFDLEtBQUdBLEdBQUUsQ0FBQyxHQUFFMkIsS0FBRSxFQUFFMUIsSUFBRUMsSUFB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LElBQUUsRUFBRUQsSUFBRSxHQUFHLElBQUUsRUFBRSxNQUFJQSxHQUFFLENBQUMsSUFBRSxRQUFPQztBQUFDLEdBQUUsRUFBRSxFQUFFLEdBQUcsSUFBRSxTQUFTRCxJQUFFQyxJQUFFO0FBQUMsTUFBSUMsS0FBRSxHQUFHRixJQUFFQyxFQUFDO0FBQUUsU0FBTyxFQUFFQyxJQUFFLEdBQUcsS0FBRyxPQUFPQSxHQUFFLEdBQUVBO0FBQUMsR0FBRSxFQUFFLE9BQUssU0FBU0YsSUFBRUMsSUFBRTtBQUFDLE1BQUlDLEtBQUUsR0FBRyxJQUFJRixJQUFFQyxFQUFDO0FBQUUsU0FBT0MsR0FBRSxJQUFFLEVBQUVGLElBQUUsR0FBRyxJQUFFLEVBQUVBLEdBQUUsQ0FBQyxJQUFFLEdBQUVFO0FBQUMsR0FBRSxFQUFFLEVBQUUsR0FBRyxJQUFFLFNBQVNGLElBQUVDLElBQUU7QUFBQyxNQUFJQyxLQUFFLEVBQUVGLEdBQUUsR0FBRUEsR0FBRSxHQUFFQSxHQUFFLENBQUM7QUFBRSxTQUFPLE9BQU9FLEdBQUUsR0FBRSxHQUFHQSxJQUFFRCxFQUFDO0FBQUMsR0FBRSxFQUFFLE9BQUssU0FBU0QsSUFBRUMsSUFBRTtBQUFDLE1BQUlDLEtBQUUsR0FBRyxJQUFJRixJQUFFQyxFQUFDO0FBQUUsU0FBT0MsR0FBRSxJQUFFLEVBQUVGLElBQUUsR0FBRyxJQUFFLEVBQUVBLEdBQUUsR0FBRUMsRUFBQyxJQUFFLEdBQUVDO0FBQUMsR0FBRSxFQUFFLEVBQUUsSUFBSSxJQUFFLFNBQVNGLElBQUVDLElBQUU7QUFBQyxTQUFPLEdBQUcsRUFBRUQsR0FBRSxHQUFFQSxHQUFFLEdBQUVBLEdBQUUsQ0FBQyxHQUFFQyxFQUFDO0FBQUMsR0FBRSxFQUFFLFFBQU0sU0FBU0QsSUFBRUMsSUFBRTtBQUFDLE1BQUlDLEtBQUUsR0FBRyxLQUFLRixJQUFFQyxFQUFDO0FBQUUsU0FBT0MsR0FBRSxJQUFFLEVBQUVGLElBQUUsR0FBRyxJQUFFLEVBQUVBLEdBQUUsR0FBRUMsRUFBQyxJQUFFLEdBQUVDO0FBQUMsR0FBRTtBQUE1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LEVBQUU7QUFBQSxJQUFJO0FBQVEsYUFBT0UsS0FBRSxLQUFLLEtBQUssR0FBR0QsSUFBRSxDQUFDLEdBQUVMLElBQUVFLElBQUVLLEVBQUMsSUFBRSxLQUFLLElBQUksR0FBR0YsSUFBRSxDQUFDLEdBQUVMLElBQUVFLElBQUVLLEVBQUM7QUFBQSxJQUFFLEtBQUssRUFBRTtBQUFJLGFBQU9ELEtBQUUsS0FBSyxLQUFLRCxJQUFFTCxJQUFFRSxJQUFFSyxJQUFFSixFQUFDLElBQUUsS0FBSyxJQUFJRSxJQUFFTCxJQUFFRSxJQUFFSyxJQUFFSixFQUFDO0FBQUEsSUFBRSxLQUFLLEVBQUU7QUFBSSxhQUFPRyxLQUFFLEtBQUssS0FBS0QsSUFBRUwsSUFBRUUsSUFBRUssSUFBRUosRUFBQyxJQUFFLEtBQUssSUFBSUUsSUFBRUwsSUFBRUUsSUFBRUssSUFBRUosRUFBQztBQUFBLEVBQUM7QUFBQyxFQUFDLEdBQUcsRUFBRSxHQUFHLElBQUUsU0FBU0osSUFBRUMsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLFNBQU9GLEdBQUVELElBQUVFLEVBQUMsRUFBRSxJQUFLLFNBQVNGLElBQUU7QUFBQyxXQUFPRyxLQUFFLEVBQUUsSUFBSSxFQUFFSCxHQUFFLEdBQUVBLEdBQUUsR0FBRUEsR0FBRSxDQUFDLENBQUMsSUFBRSxHQUFHLElBQUksRUFBRUEsR0FBRSxHQUFFQSxHQUFFLEdBQUVBLEdBQUUsQ0FBQyxDQUFDO0FBQUEsRUFBQyxDQUFFO0FBQUMsR0FBRSxFQUFFLE9BQUssU0FBU0MsSUFBRUMsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLFNBQU9GLEdBQUVELElBQUVFLEVBQUMsRUFBRSxJQUFLLFNBQVNGLElBQUU7QUFBQyxXQUFPRyxLQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUVILEdBQUUsR0FBRUEsR0FBRSxHQUFFQSxHQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUMsR0FBRSxNQUFJLEdBQUdBLEdBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUVBLEdBQUUsR0FBRUEsR0FBRSxHQUFFQSxHQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUMsR0FBRSxHQUFHQSxHQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7QUFBQSxFQUFDLENBQUU7QUFBQyxHQUFFLEVBQUUsRUFBRSxHQUFHLElBQUUsU0FBU0QsSUFBRUMsSUFBRUMsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLFNBQU9ILEdBQUVELElBQUVFLEVBQUMsRUFBRSxJQUFLLFNBQVNGLElBQUU7QUFBQyxXQUFPRyxLQUFFLEVBQUUsSUFBSSxFQUFFSCxHQUFFLEdBQUVBLEdBQUUsR0FBRUEsR0FBRSxDQUFDLEdBQUVJLEVBQUMsSUFBRSxHQUFHLElBQUksRUFBRUosR0FBRSxHQUFFQSxHQUFFLEdBQUVBLEdBQUUsQ0FBQyxHQUFFSSxHQUFFLFFBQVE7QUFBQSxFQUFDLENBQUU7QUFBQyxHQUFFLEVBQUUsT0FBSyxTQUFTSCxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsU0FBT0gsR0FBRUQsSUFBRUUsRUFBQyxFQUFFLElBQUssU0FBU0YsSUFBRTtBQUFDLFdBQU9HLEtBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRUgsR0FBRSxHQUFFQSxHQUFFLEdBQUVBLEdBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBQyxHQUFFLEdBQUdBLEdBQUUsQ0FBQyxFQUFDLENBQUMsR0FBRUksRUFBQyxJQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFFLEVBQUVKLEdBQUUsR0FBRUEsR0FBRSxHQUFFQSxHQUFFLENBQUMsQ0FBQyxHQUFFLEVBQUMsR0FBRSxHQUFHQSxHQUFFLENBQUMsRUFBQyxDQUFDLEdBQUVJLEdBQUUsUUFBUTtBQUFBLEVBQUMsQ0FBRTtBQUFDLEdBQUUsRUFBRSxFQUFFLEdBQUcsSUFBRSxTQUFTTCxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsU0FBT0gsR0FBRUQsSUFBRUUsRUFBQyxFQUFFLElBQUssU0FBU0YsSUFBRTtBQUFD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LGlCQUFpQjtBQUFBLEVBQUMsR0FBRUUsR0FBRSxVQUFVLE9BQUssU0FBU0YsSUFBRTtBQUFDLFdBQU8sS0FBSyxJQUFJLElBQUUsRUFBRUEsSUFBRSxHQUFFLEdBQUcsR0FBRSxLQUFLLGlCQUFpQjtBQUFBLEVBQUMsR0FBRUUsR0FBRSxVQUFVLE9BQUssU0FBU0YsSUFBRTtBQUFDLFdBQU8sS0FBSyxJQUFJLElBQUUsRUFBRUEsSUFBRSxHQUFFLEdBQUcsR0FBRSxLQUFLLGlCQUFpQjtBQUFBLEVBQUMsR0FBRUUsR0FBRSxVQUFVLE9BQUssU0FBU0YsSUFBRTtBQUFDLFdBQU8sS0FBSyxJQUFJLElBQUUsS0FBSyxJQUFJLElBQUUsRUFBRUEsSUFBRSxHQUFFLENBQUMsR0FBRTtBQUFBLEVBQUksR0FBRUUsR0FBRSxVQUFVLE9BQUssU0FBU0YsSUFBRTtBQUFDLFdBQU8sS0FBSyxLQUFLLElBQUUsRUFBRUEsSUFBRSxHQUFFLEdBQUcsR0FBRSxLQUFLLGdCQUFnQjtBQUFBLEVBQUMsR0FBRUUsR0FBRSxVQUFVLE9BQUssU0FBU0YsSUFBRTtBQUFDLFdBQU8sS0FBSyxLQUFLLElBQUUsRUFBRUEsSUFBRSxHQUFFLEdBQUcsR0FBRSxLQUFLLGdCQUFnQjtBQUFBLEVBQUMsR0FBRUUsR0FBRSxVQUFVLE9BQUssU0FBU0YsSUFBRTtBQUFDLFdBQU8sS0FBSyxLQUFLLElBQUUsRUFBRUEsSUFBRSxHQUFFLEdBQUcsR0FBRSxLQUFLLGdCQUFnQjtBQUFBLEVBQUMsR0FBRUUsR0FBRSxVQUFVLE9BQUssU0FBU0YsSUFBRTtBQUFDLFdBQU8sS0FBSyxLQUFLLElBQUUsRUFBRUEsSUFBRSxHQUFFLEdBQUcsR0FBRSxLQUFLLGdCQUFnQjtBQUFBLEVBQUMsR0FBRSxPQUFPLGVBQWVFLEdBQUUsV0FBVSxXQUFVLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxLQUFLO0FBQUEsRUFBUSxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLEtBQUksRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUUsS0FBSyxRQUFRLFFBQVE7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsS0FBSSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLElBQUksR0FBRSxLQUFLLFFBQVEsUUFBUTtBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxLQUFJLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEtBQUssSUFBSSxHQUFFLEtBQUssUUFBUSxRQUFRO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLEtBQUksRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUUsS0FBSyxRQUFRLFFBQVE7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsS0FBSSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLElBQUksR0FBRSxLQUFLLFFBQVEsUUFBUTtBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxLQUFJLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEtBQUssSUFBSSxHQUFFLEtBQUssUUFBUSxRQUFRO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLEtBQUksRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUUsS0FBSyxRQUFRLFFBQVE7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsS0FBSSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLEtBQUssR0FBRSxLQUFLLFFBQVEsUUFBUTtBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxLQUFJLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEtBQUssS0FBSyxHQUFFLEtBQUssUUFBUSxRQUFRO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLEtBQUksRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsS0FBSyxLQUFLLEdBQUUsS0FBSyxRQUFRLFFBQVE7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsS0FBSSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLEtBQUssR0FBRSxLQUFLLFFBQVEsUUFBUTtBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxhQUFZLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxHQUFHLElBQUksS0FBSyxHQUFHO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLGNBQWEsRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEdBQUcsS0FBSyxLQUFLLEdBQUc7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsYUFBWSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU0sRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssRUFBQztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxjQUFhLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFFLEtBQUssU0FBUyxHQUFFLEVBQUMsR0FBRSxLQUFLLEVBQUMsQ0FBQztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxhQUFZLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTSxFQUFDLEdBQUUsS0FBSyxHQUFFLEdBQUUsS0FBSyxHQUFFLEdBQUUsS0FBSyxFQUFDO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLGNBQWEsRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUUsS0FBSyxTQUFTLEdBQUUsRUFBQyxHQUFFLEtBQUssRUFBQyxDQUFDO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLGNBQWEsRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFNLEVBQUMsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEVBQUM7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsZUFBYyxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxFQUFFLENBQUMsR0FBRSxLQUFLLFVBQVUsR0FBRSxFQUFDLEdBQUUsS0FBSyxFQUFDLENBQUM7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsT0FBTSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxJQUFJLEVBQUMsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEVBQUMsQ0FBQztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxRQUFPLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLElBQUksRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLE1BQUksS0FBSyxFQUFDLENBQUM7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsT0FBTSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxJQUFJLEVBQUMsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEVBQUMsR0FBRSxLQUFLLE9BQU87QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsUUFBTyxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxJQUFJLEVBQUMsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEVBQUMsR0FBRSxLQUFLLE9BQU87QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsT0FBTSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxJQUFJLEVBQUMsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEVBQUMsR0FBRSxLQUFLLE9BQU87QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsUUFBTyxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxJQUFJLEVBQUMsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEVBQUMsR0FBRSxLQUFLLE9BQU87QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsUUFBTyxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLEVBQUMsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEVBQUMsR0FBRSxLQUFLLE9BQU87QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsU0FBUSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLEVBQUMsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEVBQUMsR0FBRSxLQUFLLE9BQU87QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUVBLEdBQUUsY0FBWSxTQUFTRixJQUFFO0FBQUMsUUFBSUMsS0FBRSxHQUFHRCxFQUFDO0FBQUUsV0FBTyxHQUFHQSxJQUFFQyxJQUFFLEdBQUUsR0FBRyxHQUFHO0FBQUEsRUFBQyxHQUFFQyxHQUFFLFFBQU0sU0FBU0YsSUFBRTtBQUFDLFdBQU8sRUFBRSxJQUFJRSxHQUFFLFlBQVlGLEVBQUMsQ0FBQztBQUFBLEVBQUMsR0FBRUUsR0FBRSxlQUFhLFNBQVNGLElBQUU7QUFBQyxRQUFJQyxLQUFFLEdBQUdELEVBQUM7QUFBRSxXQUFPLEdBQUdBLElBQUVDLElBQUUsR0FBRSxHQUFHLElBQUk7QUFBQSxFQUFDLEdBQUVDLEdBQUUsU0FBTyxTQUFTRixJQUFFO0FBQUMsV0FBTyxFQUFFLElBQUlFLEdBQUUsYUFBYUYsRUFBQyxDQUFDO0FBQUEsRUFBQyxHQUFFRSxHQUFFLGNBQVksU0FBU0YsSUFBRUMsSUFBRTtBQUFDLGVBQVNBLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsR0FBR0YsRUFBQztBQUFFLFdBQU8sR0FBR0EsSUFBRUUsSUFBRUQsR0FBRSxVQUFTLEdBQUcsR0FBRztBQUFBLEVBQUMsR0FBRUMsR0FBRSxRQUFNLFNBQVNGLElBQUVDLElBQUU7QUFBQyxlQUFTQSxPQUFJQSxLQUFFLENBQUM7QUFBRyxRQUFJQyxLQUFFLEdBQUdGLEVBQUMsR0FBRUcsS0FBRSxFQUFFRixJQUFFRCxFQUFDLEdBQUVJLEtBQUUsR0FBR0osSUFBRUUsSUFBRSxHQUFFLEdBQUcsR0FBRztBQUFFLFdBQU8sRUFBRSxJQUFJRSxJQUFFRCxFQUFDO0FBQUEsRUFBQyxHQUFFRCxHQUFFLGVBQWEsU0FBU0YsSUFBRUMsSUFBRTtBQUFDLGVBQVNBLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsR0FBR0YsRUFBQztBQUFFLFdBQU8sR0FBR0EsSUFBRUUsSUFBRUQsR0FBRSxVQUFTLEdBQUcsSUFBSTtBQUFBLEVBQUMsR0FBRUMsR0FBRSxTQUFPLFNBQVNGLElBQUVDLElBQUU7QUFBQyxlQUFTQSxPQUFJQSxLQUFFLENBQUM7QUFBRyxRQUFJQyxLQUFFLEdBQUdGLEVBQUMsR0FBRUcsS0FBRSxFQUFFRixJQUFFRCxFQUFDLEdBQUVJLEtBQUUsR0FBR0osSUFBRUUsSUFBRSxHQUFFLEdBQUcsSUFBSTtBQUFFLFdBQU8sRUFBRSxJQUFJRSxJQUFFRCxFQUFDO0FBQUEsRUFBQyxHQUFFRCxHQUFFLGNBQVksU0FBU0YsSUFBRUMsSUFBRTtBQUFDLGVBQVNBLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsR0FBR0YsRUFBQztBQUFFLFdBQU8sR0FBR0EsSUFBRUUsSUFBRUQsR0FBRSxVQUFTLEdBQUcsR0FBRztBQUFBLEVBQUMsR0FBRUMsR0FBRSxRQUFNLFNBQVNGLElBQUVDLElBQUU7QUFBQyxlQUFTQSxPQUFJQSxLQUFFLENBQUM7QUFBRyxRQUFJQyxLQUFFLEdBQUdGLEVBQUMsR0FBRUcsS0FBRSxFQUFFRixJQUFFRCxFQUFDLEdBQUVJLEtBQUUsR0FBR0osSUFBRUUsSUFBRSxHQUFFLEdBQUcsR0FBRztBQUFFLFdBQU8sRUFBRSxJQUFJRSxJQUFFRCxFQUFDO0FBQUEsRUFBQyxHQUFFRCxHQUFFLGVBQWEsU0FBU0YsSUFBRUMsSUFBRTtBQUFDLGVBQVNBLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsR0FBR0YsRUFBQztBQUFFLFdBQU8sR0FBR0EsSUFBRUUsSUFBRUQsR0FBRSxVQUFTLEdBQUcsSUFBSTtBQUFBLEVBQUMsR0FBRUMsR0FBRSxTQUFPLFNBQVNGLElBQUVDLElBQUU7QUFBQyxlQUFTQSxPQUFJQSxLQUFFLENBQUM7QUFBRyxRQUFJQyxLQUFFLEdBQUdGLEVBQUMsR0FBRUcsS0FBRSxFQUFFRixJQUFFRCxFQUFDLEdBQUVJLEtBQUUsR0FBR0osSUFBRUUsSUFBRSxHQUFFLEdBQUcsSUFBSTtBQUFFLFdBQU8sRUFBRSxJQUFJRSxJQUFFRCxFQUFDO0FBQUEsRUFBQyxHQUFFRCxHQUFFLGVBQWEsU0FBU0YsSUFBRUMsSUFBRTtBQUFDLGVBQVNBLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsR0FBR0YsRUFBQztBQUFFLFdBQU8sR0FBR0EsSUFBRUUsSUFBRUQsR0FBRSxVQUFTLEdBQUcsSUFBSTtBQUFBLEVBQUMsR0FBRUMsR0FBRSxTQUFPLFNBQVNGLElBQUVDLElBQUU7QUFBQyxlQUFTQSxPQUFJQSxLQUFFLENBQUM7QUFBRyxRQUFJQyxLQUFFLEdBQUdGLEVBQUMsR0FBRUcsS0FBRSxFQUFFRixJQUFFRCxFQUFDLEdBQUVJLEtBQUUsR0FBR0osSUFBRUUsSUFBRSxHQUFFLEdBQUcsSUFBSTtBQUFFLFdBQU8sRUFBRSxLQUFLRSxJQUFFRCxFQUFDO0FBQUEsRUFBQyxHQUFFRCxHQUFFLGdCQUFjLFNBQVNGLElBQUVDLElBQUU7QUFBQyxlQUFTQSxPQUFJQSxLQUFFLENBQUM7QUFBRyxRQUFJQyxLQUFFLEdBQUdGLEVBQUM7QUFBRSxXQUFPLEdBQUdBLElBQUVFLElBQUVELEdBQUUsVUFBUyxHQUFHLEtBQUs7QUFBQSxFQUFDLEdBQUVDLEdBQUUsVUFBUSxTQUFTRixJQUFFQyxJQUFFO0FBQUMsZUFBU0EsT0FBSUEsS0FBRSxDQUFDO0FBQUcsUUFBSUMsS0FBRSxHQUFHRixFQUFDLEdBQUVHLEtBQUUsRUFBRUYsSUFBRUQsRUFBQyxHQUFFSSxLQUFFLEdBQUdKLElBQUVFLElBQUUsR0FBRSxHQUFHLEtBQUs7QUFBRSxXQUFPLEVBQUUsS0FBS0UsSUFBRUQsRUFBQztBQUFBLEVBQUMsR0FBRUQsR0FBRSxvQkFBa0IsU0FBU0YsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLFdBQU8sV0FBU0EsT0FBSUEsS0FBRSxJQUFHLEdBQUdGLElBQUVDLElBQUVDLElBQUUsR0FBRSxHQUFHLEdBQUc7QUFBQSxFQUFDLEdBQUVBLEdBQUUsY0FBWSxTQUFTRixJQUFFQyxJQUFFRSxJQUFFO0FBQUMsV0FBTyxXQUFTQSxPQUFJQSxLQUFFLElBQUdELEdBQUUsa0JBQWtCRixJQUFFQyxJQUFFRSxFQUFDLEVBQUUsSUFBSyxTQUFTSCxJQUFFO0FBQUMsYUFBTyxFQUFFLElBQUlBLEVBQUM7QUFBQSxJQUFDLENBQUU7QUFBQSxFQUFDLEdBQUVFLEdBQUUscUJBQW1CLFNBQVNGLElBQUVDLElBQUVDLElBQUU7QUFBQyxXQUFPLFdBQVNBLE9BQUlBLEtBQUUsSUFBRyxHQUFHRixJQUFFQyxJQUFFQyxJQUFFLEdBQUUsR0FBRyxJQUFJO0FBQUEsRUFBQyxHQUFFQSxHQUFFLGVBQWEsU0FBU0YsSUFBRUMsSUFBRUUsSUFBRTtBQUFDLFdBQU8sV0FBU0EsT0FBSUEsS0FBRSxJQUFHRCxHQUFFLG1CQUFtQkYsSUFBRUMsSUFBRUUsRUFBQyxFQUFFLElBQUssU0FBU0gsSUFBRTtBQUFDLGFBQU8sRUFBRSxJQUFJQSxFQUFDO0FBQUEsSUFBQyxDQUFFO0FBQUEsRUFBQyxHQUFFRSxHQUFFLG9CQUFrQixTQUFTRixJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsV0FBTyxXQUFTRCxPQUFJQSxLQUFFLElBQUcsV0FBU0MsT0FBSUEsS0FBRSxDQUFDLElBQUcsR0FBR0gsSUFBRUMsSUFBRUMsSUFBRUMsR0FBRSxVQUFTLEdBQUcsR0FBRztBQUFBLEVBQUMsR0FBRUQsR0FBRSxjQUFZLFNBQVNGLElBQUVDLElBQUVDLElBQUVDLElBQUU7QUFBQyxXQUFPLFdBQVNELE9BQUlBLEtBQUUsSUFBRyxXQUFTQyxPQUFJQSxLQUFFLENBQUMsSUFBRyxHQUFHSCxJQUFFQyxJQUFFQyxJQUFFLEdBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSyxTQUFTQSxJQUFFO0FBQUMsYUFBTyxFQUFFLElBQUlBLElBQUUsRUFBRUMsSUFBRUgsSUFBRUMsRUFBQyxDQUFDO0FBQUEsSUFBQyxDQUFFO0FBQUEsRUFBQyxHQUFFQyxHQUFFLHFCQUFtQixTQUFTRixJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsV0FBTyxXQUFTRCxPQUFJQSxLQUFFLElBQUcsV0FBU0MsT0FBSUEsS0FBRSxDQUFDLElBQUcsR0FBR0gsSUFBRUMsSUFBRUMsSUFBRUMsR0FBRSxVQUFTLEdBQUcsSUFBSTtBQUFBLEVBQUMsR0FBRUQsR0FBRSxlQUFhLFNBQVNGLElBQUVDLElBQUVDLElBQUVDLElBQUU7QUFBQyxXQUFPLFdBQVNELE9BQUlBLEtBQUUsSUFBRyxXQUFTQyxPQUFJQSxLQUFFLENBQUMsSUFBRyxHQUFHSCxJQUFFQyxJQUFFQyxJQUFFLEdBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSyxTQUFTQSxJQUFFO0FBQUMsYUFBTyxFQUFFLElBQUlBLElBQUUsRUFBRUMsSUFBRUgsSUFBRUMsRUFBQyxDQUFDO0FBQUEsSUFBQyxDQUFFO0FBQUEsRUFBQyxHQUFFQyxHQUFFLG9CQUFrQixTQUFTRixJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsV0FBTyxXQUFTRCxPQUFJQSxLQUFFLElBQUcsV0FBU0MsT0FBSUEsS0FBRSxDQUFDLElBQUcsR0FBR0gsSUFBRUMsSUFBRUMsSUFBRUMsR0FBRSxVQUFTLEdBQUcsR0FBRztBQUFBLEVBQUMsR0FBRUQsR0FBRSxjQUFZLFNBQVNGLElBQUVDLElBQUVDLElBQUVDLElBQUU7QUFBQyxlQUFTRCxPQUFJQSxLQUFFLElBQUcsV0FBU0MsT0FBSUEsS0FBRSxDQUFDO0FBQUcsUUFBSUMsS0FBRSxF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U0FBUyxLQUFLLFFBQVE7QUFDakMsU0FBSyxJQUFJLFVBQVUsY0FBYztBQUNqQyxrQkFBYyxLQUFLLFVBQVMsS0FBSyxHQUFHO0FBQUEsRUFDckM7QUFBQSxFQUVBLGtCQUFrQjtBQUNqQixTQUFLLElBQUksVUFBVSxrQkFBa0IsQ0FBQyxTQUF3QjtBQUM3RCxVQUFJLEtBQUssZ0JBQWdCLGlDQUFnQixLQUFLLEtBQUssUUFBUSxNQUFNO0FBQ2hFLGFBQUssS0FBSyxZQUFZLFNBQVMsSUFBSTtBQUFBLElBQ3JDLENBQUM7QUFBQSxFQUNGO0FBQ0Q7IiwKICAibmFtZXMiOiBbInJvb3QiLCAiZmFjdG9yeSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJkZWZpbmUiLCAiYW1kIiwgInNlbGYiLCAiX193ZWJwYWNrX3JlcXVpcmVfXyIsICJkZWZpbml0aW9uIiwgImtleSIsICJvIiwgIk9iamVjdCIsICJkZWZpbmVQcm9wZXJ0eSIsICJlbnVtZXJhYmxlIiwgImdldCIsICJvYmoiLCAicHJvcCIsICJwcm90b3R5cGUiLCAiaGFzT3duUHJvcGVydHkiLCAiY2FsbCIsICJTeW1ib2wiLCAidG9TdHJpbmdUYWciLCAidmFsdWUiLCAiZSIsICJ0IiwgIkwiLCAiZXZlbnRMaXN0ZW5lciIsICJtZXRob2QiLCAiZWxlbWVudHMiLCAiZXZlbnRzIiwgImZuIiwgIm9wdGlvbnMiLCAiSFRNTENvbGxlY3Rpb24iLCAiTm9kZUxpc3QiLCAiQXJyYXkiLCAiZnJvbSIsICJpc0FycmF5IiwgImVsIiwgImV2IiwgImNhcHR1cmUiLCAic2xpY2UiLCAiYXJndW1lbnRzIiwgInAiLCAiciIsICJhIiwgImwiLCAicyIsICJpIiwgImMiLCAib24iLCAiYmluZCIsICJvZmYiLCAiY3JlYXRlRWxlbWVudEZyb21TdHJpbmciLCAiaHRtbCIsICJkaXYiLCAiZG9jdW1lbnQiLCAiY3JlYXRlRWxlbWVudCIsICJpbm5lckhUTUwiLCAidHJpbSIsICJmaXJzdEVsZW1lbnRDaGlsZCIsICJjcmVhdGVGcm9tVGVtcGxhdGUiLCAic3RyIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJuYW1lIiwgImdldEF0dHJpYnV0ZSIsICJyZXNvbHZlIiwgImVsZW1lbnQiLCAiYmFzZSIsICJjb24iLCAic3VidHJlZSIsICJjaGlsZCIsICJjaGlsZHJlbiIsICJhcnIiLCAic3ViIiwgInB1c2giLCAia2V5cyIsICJsZW5ndGgiLCAiZXZlbnRQYXRoIiwgImV2dCIsICJwYXRoIiwgImNvbXBvc2VkUGF0aCIsICJ0YXJnZXQiLCAicGFyZW50RWxlbWVudCIsICJ3aW5kb3ciLCAicmVzb2x2ZUVsZW1lbnQiLCAidmFsIiwgIkVsZW1lbnQiLCAic3BsaXQiLCAicmVkdWNlIiwgInB2IiwgImN2IiwgImNpIiwgInF1ZXJ5U2VsZWN0b3IiLCAic2hhZG93Um9vdCIsICJhZGp1c3RhYmxlSW5wdXROdW1iZXJzIiwgIm1hcHBlciIsICJ2IiwgImhhbmRsZVNjcm9sbCIsICJpbmMiLCAiTnVtYmVyIiwgInNoaWZ0S2V5IiwgImN0cmxLZXkiLCAiZGVsdGFZIiwgImluZGV4IiwgInNlbGVjdGlvblN0YXJ0IiwgInJlcGxhY2UiLCAiZm9jdXMiLCAic2V0U2VsZWN0aW9uUmFuZ2UiLCAicHJldmVudERlZmF1bHQiLCAiZGlzcGF0Y2hFdmVudCIsICJFdmVudCIsICJwYXNzaXZlIiwgIm1pbiIsICJtYXgiLCAiZmxvb3IiLCAicm91bmQiLCAiTWF0aCIsICJoc3ZUb1JnYiIsICJoIiwgImYiLCAicSIsICJtb2QiLCAiaHN2VG9Ic2wiLCAicmdiVG9Ic3YiLCAiZyIsICJiIiwgIm1pblZhbCIsICJtYXhWYWwiLCAiZGVsdGEiLCAiZHIiLCAiZGciLCAiZGIiLCAiY215a1RvSHN2IiwgIm0iLCAieSIsICJrIiwgImhzbFRvSHN2IiwgIm5zIiwgImlzTmFOIiwgImhleFRvSHN2IiwgImhleCIsICJtYXRjaCIsICJtYXAiLCAicGFyc2VJbnQiLCAicGFyc2VUb0hTVkEiLCAidG9Mb3dlckNhc2UiLCAiY3R4IiwgImdldENvbnRleHQiLCAiZmlsbFN0eWxlIiwgInJlZ2V4IiwgImNteWsiLCAicmdiYSIsICJoc2xhIiwgImhzdmEiLCAiaGV4YSIsICJudW1hcml6ZSIsICJhcnJheSIsICJ0ZXN0IiwgInVuZGVmaW5lZCIsICJpbnZhbGlkIiwgInR5cGUiLCAiZXhlYyIsICJhbHBoYVZhbGlkIiwgInZhbHVlcyIsICJqb2luIiwgInJhdyIsICJzdWJzdHJpbmciLCAiSFNWYUNvbG9yIiwgIm9yaWdpbmFsIiwgIm5leHQiLCAicHJlY2lzaW9uIiwgInRvRml4ZWQiLCAidGhhdCIsICJ0b0hTVkEiLCAidG9TdHJpbmciLCAidG9IU0xBIiwgInRvUkdCQSIsICJ0b0NNWUsiLCAicmdiIiwgInRvSEVYQSIsICJwYWRTdGFydCIsICJhbHBoYSIsICJ0b1VwcGVyQ2FzZSIsICJjbG9uZSIsICJjbGFtcCIsICJNb3ZlYWJsZSIsICJvcHQiLCAiYXNzaWduIiwgImxvY2siLCAib25jaGFuZ2UiLCAib25zdG9wIiwgIl9rZXlib2FyZCIsICJhY3RpdmVFbGVtZW50IiwgIndyYXBwZXIiLCAidXAiLCAicmlnaHQiLCAiZG93biIsICJsZWZ0IiwgInhtIiwgInltIiwgInVwZGF0ZSIsICJjYWNoZSIsICJ4IiwgInN0YXJ0c1dpdGgiLCAiX3RhcHN0YXJ0IiwgIl8iLCAiX3RhcHN0b3AiLCAiX3RhcG1vdmUiLCAiY2FuY2VsYWJsZSIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAidG91Y2giLCAidG91Y2hlcyIsICJjbGllbnRYIiwgImNsaWVudFkiLCAid2lkdGgiLCAidG9wIiwgImhlaWdodCIsICJzdHlsZSIsICJvZmZzZXRXaWR0aCIsICJvZmZzZXRIZWlnaHQiLCAiY3giLCAiY3kiLCAidHJpZ2dlciIsICJkZXN0cm95IiwgIlNlbGVjdGFibGUiLCAiY2xhc3NOYW1lIiwgIm9uVGFwIiwgImZvckVhY2giLCAiY2xhc3NMaXN0IiwgInN0b3BQcm9wYWdhdGlvbiIsICJkZWZhdWx0cyIsICJ2YXJpYW50RmxpcE9yZGVyIiwgInN0YXJ0IiwgIm1pZGRsZSIsICJlbmQiLCAicG9zaXRpb25GbGlwT3JkZXIiLCAiYm90dG9tIiwgInBvc2l0aW9uIiwgIm1hcmdpbiIsICJyZXBvc2l0aW9uIiwgInJlZmVyZW5jZSIsICJwb3BwZXIiLCAiY29udGFpbmVyIiwgImRvY3VtZW50RWxlbWVudCIsICJvcmlnaW5hbExlZnQiLCAib3JpZ2luYWxUb3AiLCAicmVmQm94IiwgInBvcEJveCIsICJwb3NpdGlvblN0b3JlIiwgInZhcmlhbnRTdG9yZSIsICJ2cyIsICJ2bSIsICJ2ZSIsICJocyIsICJobSIsICJoZSIsICJwb3NLZXkiLCAidmFyS2V5IiwgInBvc2l0aW9ucyIsICJ2YXJpYW50cyIsICJ2ZXJ0aWNhbCIsICJwb3NpdGlvblZhbCIsICJwb3NpdGlvbktleSIsICJ2YXJpYW50S2V5IiwgInBvc2l0aW9uU2l6ZSIsICJ2YXJpYW50U2l6ZSIsICJwb3NpdGlvbk1heGltdW0iLCAidmFyaWFudE1heGltdW0iLCAicG9zaXRpb25NaW5pbXVtIiwgInZhcmlhbnRNaW5pbXVtIiwgInZhcmlhbnRWYWwiLCAiRSIsICJQaWNrciIsICJjb25zdHJ1Y3RvciIsICJpbml0IiwgInNhdmUiLCAiaGlkZSIsICJzaG93IiwgImNsZWFyIiwgImNoYW5nZSIsICJjaGFuZ2VzdG9wIiwgImNhbmNlbCIsICJzd2F0Y2hzZWxlY3QiLCAidGhpcyIsICJERUZBVUxUX09QVElPTlMiLCAic3dhdGNoZXMiLCAiY29tcG9uZW50cyIsICJ0aGVtZSIsICJzbGlkZXJzIiwgImxvY2tPcGFjaXR5IiwgInBhZGRpbmciLCAiaW5jbHVkZXMiLCAiaW50ZXJhY3Rpb24iLCAicHJldmlldyIsICJvcGFjaXR5IiwgImh1ZSIsICJwYWxldHRlIiwgIl9wcmVCdWlsZCIsICJfYnVpbGRDb21wb25lbnRzIiwgIl9iaW5kRXZlbnRzIiwgIl9maW5hbEJ1aWxkIiwgImNvbG9yIiwgImFkZFN3YXRjaCIsICJidXR0b24iLCAiYXBwIiwgIl9yb290IiwgIl9uYW5vcG9wIiwgImJhc2VPcHRpb25zIiwgIkhUTUxFbGVtZW50IiwgIltvYmplY3QgT2JqZWN0XSIsICJFcnJvciIsICJzZXRBdHRyaWJ1dGUiLCAiX3QiLCAiX3NldHVwQW5pbWF0aW9uRnJhbWUiLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgImNiIiwgInNldENvbG9yIiwgImRlZmF1bHQiLCAiX3JlUG9zaXRpb25pbmdQaWNrZXIiLCAiZGVmYXVsdFJlcHJlc2VudGF0aW9uIiwgIl9yZXByZXNlbnRhdGlvbiIsICJzZXRDb2xvclJlcHJlc2VudGF0aW9uIiwgInNob3dBbHdheXMiLCAiX2luaXRpYWxpemluZ0FjdGl2ZSIsICJfZW1pdCIsICJpbnN0YW5jZSIsICJ1c2VBc0J1dHRvbiIsICJpbmxpbmUiLCAiYXBwQ2xhc3MiLCAiaGlkZGVuIiwgImlucHV0IiwgImludCIsICJmaW5kIiwgImFkZCIsICJjb250YWlucyIsICJhcHBlbmRDaGlsZCIsICJyZW1vdmVDaGlsZCIsICJwYXJlbnQiLCAibmV4dFNpYmxpbmciLCAiaW5zZXJ0QmVmb3JlIiwgInJlbW92ZSIsICJwYXJlbnROb2RlIiwgInJlcGxhY2VDaGlsZCIsICJkaXNhYmxlZCIsICJkaXNhYmxlIiwgImNvbXBhcmlzb24iLCAidHJhbnNpdGlvbiIsICJsYXN0Q29sb3IiLCAiaW5zdCIsICJjcyIsICJyZXBlYXQiLCAic28iLCAic2giLCAiZ2V0Q29sb3IiLCAiX2NvbG9yIiwgIl9sYXN0Q29sb3IiLCAicGlja2VyIiwgImN1cnJlbnRDb2xvciIsICJfcmVjYWxjIiwgIl91cGRhdGVPdXRwdXQiLCAiY3NzUkdCYVN0cmluZyIsICJiYWNrZ3JvdW5kIiwgInNldFByb3BlcnR5IiwgIl9zd2F0Y2hDb2xvcnMiLCAic2xpZGVyIiwgImJhY2tncm91bmRDb2xvciIsICJzZWxlY3RhYmxlIiwgIl9jb21wb25lbnRzIiwgImV2ZW50QmluZGluZ3MiLCAiX2NsZWFyQ29sb3IiLCAic2V0SFNWQSIsICJhcHBseUNvbG9yIiwgInJlc3VsdCIsICJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCAiY2siLCAiY2xvc2VXaXRoS2V5IiwgImlzT3BlbiIsICJjb2RlIiwgInNvbWUiLCAiYWRqdXN0YWJsZU51bWJlcnMiLCAicmFuZ2VzIiwgInN0ZXAiLCAicmFuZ2UiLCAiZ2V0Q29sb3JSZXByZXNlbnRhdGlvbiIsICJudiIsICJ0b1ByZWNpc2lvbiIsICJhdXRvUmVwb3NpdGlvbiIsICJ0aW1lb3V0IiwgImNsb3NlT25TY3JvbGwiLCAic2V0VGltZW91dCIsICJycyIsICJjbGVhclRpbWVvdXQiLCAiX2V2ZW50QmluZGluZ3MiLCAiYm9keSIsICJlYiIsICJpbm5lckhlaWdodCIsICJpbm5lcldpZHRoIiwgImV2ZW50U291cmNlIiwgIm91dHB1dFByZWNpc2lvbiIsICJzaWxlbnQiLCAiX3BhcnNlTG9jYWxDb2xvciIsICJhbHBoYU1ha2VzQUNoYW5nZSIsICJpMThuIiwgIkkxOE5fREVGQVVMVFMiLCAiZXZlbnQiLCAiYXJncyIsICJfZXZlbnRMaXN0ZW5lciIsICJjYWxsQmFja3MiLCAiaW5kZXhPZiIsICJzcGxpY2UiLCAicmVtb3ZlU3dhdGNoIiwgInN3YXRjaENvbG9yIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgImRlc3Ryb3lBbmRSZW1vdmUiLCAicmVjYWxjIiwgInN0cmluZyIsICJ1dHlwZSIsICJjbGljayIsICJnZXRTZWxlY3RlZENvbG9yIiwgImdldFJvb3QiLCAiZW5hYmxlIiwgIlZFUlNJT04iLCAibW9kdWxlIiwgImlzQnVmZmVyIiwgIm1vZHVsZSIsICJpc0FycmF5IiwgImlzUGxhaW5PYmplY3QiLCAic2V0UHJvcGVydHkiLCAiZ2V0UHJvcGVydHkiLCAiZXh0ZW5kIiwgImkiLCAiaW1wb3J0X29ic2lkaWFuIiwgInQiLCAiZSIsICJuIiwgInIiLCAiaSIsICJvIiwgImMiLCAidSIsICJzIiwgImQiLCAiYiIsICJBIiwgIkYiLCAidiIsICJIIiwgIkIiLCAiQyIsICJrIiwgIlMiLCAiUiIsICJNIiwgIk8iLCAiTCIsICJHIiwgImoiLCAiWCIsICJJIiwgIlkiLCAiYSIsICJsIiwgImYiLCAiaCIsICJwIiwgImciLCAibSIsICJ5IiwgIkUiLCAidGV4dCIsICJ2YWx1ZSIsICJlIiwgIlBpY2tyIiwgImkiLCAiaW1wb3J0X29ic2lkaWFuIiwgImNvZGVTZWN0aW9uIiwgImNvZGVUZXh0IiwgIl8iLCAiZSIsICJ0ZXh0IiwgImkiLCAidmFsdWUiLCAiX2EiLCAidGV4dCIsICJmcm9tIiwgInRvIiwgImVtcHR5IiwgImxhbmd1YWdlSWNvbnMiLCAicG9zaXRpb24iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9pc19idWZmZXIiLCAiaW5kZXgiLCAicG9pbnQiLCAicG9zaXRpb24iLCAiaW5kZXgiLCAicGF0aCIsICJpbmRleCIsICJwYXRoIiwgImluZGV4IiwgImluZGV4IiwgInByb3AiLCAicGF0aCIsICJkaXJuYW1lIiwgImFzc2VydFBhdGgiLCAiYmFzZW5hbWUiLCAiZXh0bmFtZSIsICJidWZmZXJMaWtlIiwgInBhcnNlIiwgImluZGV4IiwgImV4dGVuZCIsICJ2YWx1ZSIsICJvcHRpb25zIiwgIm5vZGUiLCAiZmlsZSIsICJpc0J1ZmZlciIsICJpbmRleCIsICJhbGwiLCAibm9kZSIsICJkIiwgImlzIiwgIm5vZGUiLCAiaW5kZXgiLCAidmlzaXQiLCAibm9kZSIsICJpbmRleCIsICJpbmRleCIsICJsaXN0IiwgImFsbCIsICJpbmRleCIsICJleHRlbnNpb24iLCAibGlzdCIsICJvayIsICJwcmV2aW91cyIsICJkb2N1bWVudCIsICJzZWxmIiwgInBvaW50IiwgImluZGV4IiwgIm9rIiwgImNvbnN0cnVjdHMiLCAiaW5kZXgiLCAiaW5kZXgiLCAidGV4dCIsICJvayIsICJhdHRlbnRpb25NYXJrZXJzIiwgInByZXZpb3VzIiwgInBvaW50IiwgIm9rIiwgIm9rIiwgIm9rIiwgInNlbGYiLCAib2siLCAiY2hhcmFjdGVyUmVmZXJlbmNlIiwgIm9rIiwgInNlbGYiLCAib2siLCAic2VsZiIsICJlZmZlY3RzIiwgIm5vayIsICJzdGFydCIsICJvayIsICJzZWxmIiwgImZ1cnRoZXJTdGFydCIsICJpbmRleCIsICJvayIsICJzZWxmIiwgImluZGV4IiwgInByZXZpb3VzIiwgInN0YXJ0IiwgImNvbnRlbnQiLCAib2siLCAicHJldmlvdXMiLCAic2VsZiIsICJvayIsICJvayIsICJzZWxmIiwgIm9rIiwgIm9rIiwgIm9rIiwgInNlbGYiLCAidGl0bGVCZWZvcmUiLCAib2siLCAiY29udGVudCIsICJ0ZXh0IiwgIm9rIiwgImluZGV4IiwgIm9rIiwgInNlbGYiLCAiYnVmZmVyIiwgIm9rIiwgInNlbGYiLCAiaW5kZXgiLCAiaW5kZXgiLCAidGV4dCIsICJvayIsICJzZWxmIiwgIm9rIiwgInNlbGYiLCAib2siLCAic2VsZiIsICJvayIsICJvayIsICJvayIsICJzZWxmIiwgImluZGV4IiwgImNvbnRlbnQiLCAidGV4dCIsICJkZWZpbml0aW9uIiwgIm9rIiwgInNlbGYiLCAic2VsZiIsICJjb250ZW50IiwgInNlbGYiLCAiY29uc3RydWN0cyIsICJ0ZXh0IiwgImxpc3QiLCAiaW5kZXgiLCAicG9pbnQiLCAiZXhpdCIsICJfIiwgImNvbnN0cnVjdHMiLCAiYWxsIiwgImxpc3QiLCAib2siLCAiZnJvbSIsICJpbmRleCIsICJkb2N1bWVudCIsICJmbG93IiwgInN0cmluZyIsICJ0ZXh0IiwgImRvY3VtZW50IiwgImZsb3ciLCAic3RyaW5nIiwgInRleHQiLCAiY29uc3RydWN0cyIsICJkb2N1bWVudCIsICJidWZmZXIiLCAiYmFzZSIsICJoZWFkIiwgIm93biIsICJibG9ja1F1b3RlIiwgImJ1ZmZlciIsICJjb2RlVGV4dCIsICJkZWZpbml0aW9uIiwgImxpc3QiLCAidGhlbWF0aWNCcmVhayIsICJleGl0IiwgImluZGV4IiwgInBvaW50IiwgImxpc3RJdGVtIiwgIm5vZGUiLCAiZGF0YSIsICJ0ZXh0IiwgInN0cmluZyIsICJkIiwgImV4dGVuc2lvbiIsICJlbGVtZW50IiwgIl8iLCAidGV4dCIsICJpbmRleCIsICJub2RlIl0KfQo=