@decaf-ts/fabric-weaver
Version:
template for ts projects
122 lines • 22.8 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.border = void 0;
exports.getSlogan = getSlogan;
exports.printBorder = printBorder;
exports.printBanner = printBanner;
const logging_1 = require("@decaf-ts/logging");
const styled_string_builder_1 = require("styled-string-builder");
const slogans_json_1 = __importDefault(require("../assets/slogans.json"));
const bannerBorder = "##########################################################################################";
const banner1 = [];
const banner2 = [];
const banner3 = [];
function banner1Creation(log) {
banner1.push("# #");
banner1.push("# ░▒▓████████▓▒░▒▓██████▓▒░░▒▓███████▓▒░░▒▓███████▓▒░░▒▓█▓▒░░▒▓██████▓▒░ #");
banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ #");
banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░ #");
banner1.push("# ░▒▓██████▓▒░░▒▓████████▓▒░▒▓███████▓▒░░▒▓███████▓▒░░▒▓█▓▒░▒▓█▓▒░ #");
banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░ #");
banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ #");
banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓██████▓▒░ #");
banner1.push("# #");
banner1.push("# #");
banner1.forEach((line) => {
log.info.bind(log)((0, styled_string_builder_1.style)(line || "").raw(getColor()).text);
});
}
function banner2Creation(log) {
banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░▒▓███████▓▒░ #");
banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ #");
banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ #");
banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓██████▓▒░ ░▒▓████████▓▒░░▒▓█▓▒▒▓█▓▒░░▒▓██████▓▒░ ░▒▓███████▓▒░ #");
banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ #");
banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ #");
banner2.push("# ░▒▓█████████████▓▒░░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓██▓▒░ ░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░ #");
banner2.push("# #");
banner2.forEach((line) => {
log.info.bind(log)((0, styled_string_builder_1.style)(line || "").raw(getColor()).text);
});
}
function banner3Creation(log) {
const message = getSlogan();
const maxLength = banner1.reduce((max, line) => Math.max(max, line.length), 0);
banner3.push(`# ${message.Slogan.padStart(maxLength - 5)} #`);
message.Tags = message.Tags.split(", ")
.map((tag) => `#${tag.split(" ").join("")}`)
.join(" ");
banner3.push("# #");
banner3.push(`# ${message.Tags.padStart(maxLength - 5)} #`);
banner3.push("# #");
banner3.forEach((line, index) => {
log.info.bind(log)((0, styled_string_builder_1.style)(line || "").raw(colors[index]).text);
});
}
const colors = [
"\x1b[38;5;215m", // soft orange
"\x1b[38;5;209m", // coral
"\x1b[38;5;205m", // pink
"\x1b[38;5;210m", // peachy
"\x1b[38;5;217m", // salmon
"\x1b[38;5;216m", // light coral
"\x1b[38;5;224m", // light peach
"\x1b[38;5;230m", // soft cream
"\x1b[38;5;230m", // soft cream
];
let counter = 0;
function getColor() {
counter++;
if (counter >= colors.length) {
counter = 0;
}
return colors[counter];
}
function getSlogan(i) {
try {
i =
typeof i === "undefined" ? Math.floor(Math.random() * slogans_json_1.default.length) : i;
return slogans_json_1.default[i];
}
catch (error) {
throw new Error(`Failed to retrieve slogans: ${error}`);
}
}
exports.border = bannerBorder
.split("")
.map((c) => {
return (0, styled_string_builder_1.style)(c || "").raw(getColor()).text;
})
.join("");
function printBorder(skipBorder = false) {
if (skipBorder)
return;
const log = logging_1.Logging.for(printBorder);
log.setConfig({
timestamp: false,
style: false,
context: false,
logLevel: false,
});
log.info(exports.border);
}
function printBanner(skipBanner = false) {
if (skipBanner)
return;
const log = logging_1.Logging.for(printBanner);
log.setConfig({
timestamp: false,
style: false,
context: false,
logLevel: false,
});
printBorder(skipBanner);
banner1Creation(log);
banner2Creation(log);
banner3Creation(log);
printBorder(skipBanner);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzLW9sZC9iYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBbUlBLDhCQVFDO0FBU0Qsa0NBWUM7QUFFRCxrQ0FtQkM7QUFyTEQsK0NBQW9EO0FBQ3BELGlFQUE4QztBQUM5QywwRUFBNkM7QUFFN0MsTUFBTSxZQUFZLEdBQ2hCLDRGQUE0RixDQUFDO0FBQy9GLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztBQUM3QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7QUFDN0IsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0FBRTdCLFNBQVMsZUFBZSxDQUFDLEdBQVc7SUFDbEMsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUVGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEZBQTRGLENBQzdGLENBQUM7SUFDRixPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEZBQTRGLENBQzdGLENBQUM7SUFDRixPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEZBQTRGLENBQzdGLENBQUM7SUFFRixPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUVGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN2QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFBLDZCQUFLLEVBQUMsSUFBSSxJQUFJ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SUFDckMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUNaLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLEtBQUssRUFBRSxLQUFLO1FBQ1osT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsS0FBSztLQUNoQixDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQU0sQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFnQixXQUFXLENBQUMsYUFBc0IsS0FBSztJQUNyRCxJQUFJLFVBQVU7UUFBRSxPQUFPO0lBRXZCLE1BQU0sR0FBRyxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXJDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDWixTQUFTLEVBQUUsS0FBSztRQUNoQixLQUFLLEVBQUUsS0FBSztRQUNaLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLEtBQUs7S0FDaEIsQ0FBQyxDQUFDO0lBRUgsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhCLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQixlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXJCLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBzdHlsZSB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCBzbG9nYW5zIGZyb20gXCIuLi9hc3NldHMvc2xvZ2Fucy5qc29uXCI7XG5cbmNvbnN0IGJhbm5lckJvcmRlcjogc3RyaW5nID1cbiAgXCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcIjtcbmNvbnN0IGJhbm5lcjE6IHN0cmluZ1tdID0gW107XG5jb25zdCBiYW5uZXIyOiBzdHJpbmdbXSA9IFtdO1xuY29uc3QgYmFubmVyMzogc3RyaW5nW10gPSBbXTtcblxuZnVuY3Rpb24gYmFubmVyMUNyZWF0aW9uKGxvZzogTG9nZ2VyKSB7XG4gIGJhbm5lcjEucHVzaChcbiAgICBcIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1wiXG4gICk7XG5cbiAgYmFubmVyMS5wdXNoKFxuICAgIFwiIyDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpHilpLilpPilojilojilojilojilojilojilpPilpLilpHilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpHilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICAgICAgICAgICAgICAgICNcIlxuICApO1xuICBiYW5uZXIxLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICNcIlxuICApO1xuICBiYW5uZXIxLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICAgICAgICAjXCJcbiAgKTtcbiAgYmFubmVyMS5wdXNoKFxuICAgIFwiIyDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpHilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpHilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgICAgICAgICNcIlxuICApO1xuICBiYW5uZXIxLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICAgICAgICAjXCJcbiAgKTtcbiAgYmFubmVyMS5wdXNoKFxuICAgIFwiIyDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAjXCJcbiAgKTtcbiAgYmFubmVyMS5wdXNoKFxuICAgIFwiIyDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAgI1wiXG4gICk7XG5cbiAgYmFubmVyMS5wdXNoKFxuICAgIFwiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjXCJcbiAgKTtcbiAgYmFubmVyMS5wdXNoKFxuICAgIFwiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjXCJcbiAgKTtcblxuICBiYW5uZXIxLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICBsb2cuaW5mby5iaW5kKGxvZykoc3R5bGUobGluZSB8fCBcIlwiKS5yYXcoZ2V0Q29sb3IoKSkudGV4dCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBiYW5uZXIyQ3JlYXRpb24obG9nOiBMb2dnZXIpIHtcbiAgYmFubmVyMi5wdXNoKFxuICAgIFwiIyDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpHilpHilpLilpPilojilojilojilojilojilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgICNcIlxuICApO1xuICBiYW5uZXIyLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSAjXCJcbiAgKTtcbiAgYmFubmVyMi5wdXNoKFxuICAgIFwiIyDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpEgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEgI1wiXG4gICk7XG4gIGJhbm5lcjIucHVzaChcbiAgICBcIiMg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgICNcIlxuICApO1xuICBiYW5uZXIyLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRICNcIlxuICApO1xuICBiYW5uZXIyLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRICNcIlxuICApO1xuICBiYW5uZXIyLnB1c2goXG4gICAgXCIjICDilpHilpLilpPilojilojilojilojilojilojilojilojilojilojilojilojilojilpPilpLilpHilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRICNcIlxuICApO1xuICBiYW5uZXIyLnB1c2goXG4gICAgXCIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNcIlxuICApO1xuXG4gIGJhbm5lcjIuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgIGxvZy5pbmZvLmJpbmQobG9nKShzdHlsZShsaW5lIHx8IFwiXCIpLnJhdyhnZXRDb2xvcigpKS50ZXh0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJhbm5lcjNDcmVhdGlvbihsb2c6IExvZ2dlcikge1xuICBjb25zdCBtZXNzYWdlID0gZ2V0U2xvZ2FuKCk7XG5cbiAgY29uc3QgbWF4TGVuZ3RoID0gYmFubmVyMS5yZWR1Y2UoXG4gICAgKG1heCwgbGluZSkgPT4gTWF0aC5tYXgobWF4LCBsaW5lLmxlbmd0aCksXG4gICAgMFxuICApO1xuXG4gIGJhbm5lcjMucHVzaChgIyAgJHttZXNzYWdlLlNsb2dhbi5wYWRTdGFydChtYXhMZW5ndGggLSA1KX0gI2ApO1xuXG4gIG1lc3NhZ2UuVGFncyA9IG1lc3NhZ2UuVGFncy5zcGxpdChcIiwgXCIpXG4gICAgLm1hcCgodGFnKSA9PiBgIyR7dGFnLnNwbGl0KFwiIFwiKS5qb2luKFwiXCIpfWApXG4gICAgLmpvaW4oXCIgXCIpO1xuXG4gIGJhbm5lcjMucHVzaChcbiAgICBcIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1wiXG4gICk7XG5cbiAgYmFubmVyMy5wdXNoKGAjICAke21lc3NhZ2UuVGFncy5wYWRTdGFydChtYXhMZW5ndGggLSA1KX0gI2ApO1xuICBiYW5uZXIzLnB1c2goXG4gICAgXCIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNcIlxuICApO1xuXG4gIGJhbm5lcjMuZm9yRWFjaCgobGluZSwgaW5kZXgpID0+IHtcbiAgICBsb2cuaW5mby5iaW5kKGxvZykoc3R5bGUobGluZSB8fCBcIlwiKS5yYXcoY29sb3JzW2luZGV4XSkudGV4dCk7XG4gIH0pO1xufVxuXG5jb25zdCBjb2xvcnMgPSBbXG4gIFwiXFx4MWJbMzg7NTsyMTVtXCIsIC8vIHNvZnQgb3JhbmdlXG4gIFwiXFx4MWJbMzg7NTsyMDltXCIsIC8vIGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMDVtXCIsIC8vIHBpbmtcbiAgXCJcXHgxYlszODs1OzIxMG1cIiwgLy8gcGVhY2h5XG4gIFwiXFx4MWJbMzg7NTsyMTdtXCIsIC8vIHNhbG1vblxuICBcIlxceDFiWzM4OzU7MjE2bVwiLCAvLyBsaWdodCBjb3JhbFxuICBcIlxceDFiWzM4OzU7MjI0bVwiLCAvLyBsaWdodCBwZWFjaFxuICBcIlxceDFiWzM4OzU7MjMwbVwiLCAvLyBzb2Z0IGNyZWFtXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbl07XG5cbmxldCBjb3VudGVyID0gMDtcbmZ1bmN0aW9uIGdldENvbG9yKCkge1xuICBjb3VudGVyKys7XG5cbiAgaWYgKGNvdW50ZXIgPj0gY29sb3JzLmxlbmd0aCkge1xuICAgIGNvdW50ZXIgPSAwO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9yc1tjb3VudGVyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb2dhbihpPzogbnVtYmVyKTogeyBTbG9nYW46IHN0cmluZzsgVGFnczogc3RyaW5nIH0ge1xuICB0cnkge1xuICAgIGkgPVxuICAgICAgdHlwZW9mIGkgPT09IFwidW5kZWZpbmVkXCIgPyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzbG9nYW5zLmxlbmd0aCkgOiBpO1xuICAgIHJldHVybiBzbG9nYW5zW2ldO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJldHJpZXZlIHNsb2dhbnM6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGJvcmRlciA9IGJhbm5lckJvcmRlclxuICAuc3BsaXQoXCJcIilcbiAgLm1hcCgoYykgPT4ge1xuICAgIHJldHVybiBzdHlsZShjIHx8IFwiXCIpLnJhdyhnZXRDb2xvcigpKS50ZXh0O1xuICB9KVxuICAuam9pbihcIlwiKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50Qm9yZGVyKHNraXBCb3JkZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xuICBpZiAoc2tpcEJvcmRlcikgcmV0dXJuO1xuXG4gIGNvbnN0IGxvZyA9IExvZ2dpbmcuZm9yKHByaW50Qm9yZGVyKTtcbiAgbG9nLnNldENvbmZpZyh7XG4gICAgdGltZXN0YW1wOiBmYWxzZSxcbiAgICBzdHlsZTogZmFsc2UsXG4gICAgY29udGV4dDogZmFsc2UsXG4gICAgbG9nTGV2ZWw6IGZhbHNlLFxuICB9KTtcblxuICBsb2cuaW5mbyhib3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRCYW5uZXIoc2tpcEJhbm5lcjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIGlmIChza2lwQmFubmVyKSByZXR1cm47XG5cbiAgY29uc3QgbG9nID0gTG9nZ2luZy5mb3IocHJpbnRCYW5uZXIpO1xuXG4gIGxvZy5zZXRDb25maWcoe1xuICAgIHRpbWVzdGFtcDogZmFsc2UsXG4gICAgc3R5bGU6IGZhbHNlLFxuICAgIGNvbnRleHQ6IGZhbHNlLFxuICAgIGxvZ0xldmVsOiBmYWxzZSxcbiAgfSk7XG5cbiAgcHJpbnRCb3JkZXIoc2tpcEJhbm5lcik7XG5cbiAgYmFubmVyMUNyZWF0aW9uKGxvZyk7XG4gIGJhbm5lcjJDcmVhdGlvbihsb2cpO1xuICBiYW5uZXIzQ3JlYXRpb24obG9nKTtcblxuICBwcmludEJvcmRlcihza2lwQmFubmVyKTtcbn1cbiJdfQ==