terminal-text-effect
Version:
SGR wrapper for js. Make effect text (color, rgb, bold underline etc) for terminal console.log
736 lines • 46.4 kB
JavaScript
export var EffectedTerminalText;
(function (EffectedTerminalText) {
const CONTROL_SEQUENCE_INTRODUCER = "\x1b[";
const SGR_FUNC_NAME = "m";
let SGR;
(function (SGR) {
SGR["reset"] = "0";
SGR["bold"] = "1";
SGR["faintDecreasedIntensityOrDim"] = "2";
SGR["italic"] = "3";
SGR["underline"] = "4";
SGR["blinkSlowly"] = "5";
SGR["blinkRapidly"] = "6";
SGR["reverse"] = "7";
SGR["hide"] = "8";
SGR["strike"] = "9";
SGR["primaryFont"] = "10";
SGR["gothic"] = "20";
SGR["doublyUnderlinedOrNotBold"] = "21";
SGR["normalIntensity"] = "22";
SGR["neitherItalicNorBlackLetter"] = "23";
SGR["notUnderlined"] = "24";
SGR["notBlinking"] = "25";
SGR["proportionalSpacing"] = "26";
SGR["notReversed"] = "27";
SGR["reveal"] = "28";
SGR["notStrike"] = "29";
SGR["foregroundColorBlack"] = "30";
SGR["foregroundColorRed"] = "31";
SGR["foregroundColorGreen"] = "32";
SGR["foregroundColorYellow"] = "33";
SGR["foregroundColorBlue"] = "34";
SGR["foregroundColorMagenta"] = "35";
SGR["foregroundColorCyan"] = "36";
SGR["foregroundColorWhite"] = "37";
SGR["setForegroundColor"] = "38";
SGR["defaultForegroundColor"] = "39";
SGR["backgroundColorBlack"] = "40";
SGR["backgroundColorRed"] = "41";
SGR["backgroundColorGreen"] = "42";
SGR["backgroundColorYellow"] = "43";
SGR["backgroundColorBlue"] = "44";
SGR["backgroundColorMagenta"] = "45";
SGR["backgroundColorCyan"] = "46";
SGR["backgroundColorWhite"] = "47";
SGR["setBackgroundColor"] = "48";
SGR["defaultBackgroundColor"] = "49";
SGR["disableProportionalSpacing"] = "50";
SGR["framed"] = "51";
SGR["encircled"] = "52";
SGR["overlined"] = "53";
SGR["neitherFramedNorEncircled"] = "54";
SGR["notOverlined"] = "55";
SGR["setUnderlineColor"] = "58";
SGR["defaultUnderlineColor"] = "59";
SGR["ideogramUnderlineOrRightSideLine"] = "60";
SGR["ideogramDoubleUnderlineOrDoubleLineOnTheRightSide"] = "61";
SGR["ideogramOverlineOrLeftSideLine"] = "62";
SGR["ideogramDoubleOverlineOrDoubleLineOnTheLeftSide"] = "63";
SGR["ideogramStressMarking"] = "64";
SGR["noIdeogramAttributes"] = "65";
SGR["superscript"] = "73";
SGR["subscript"] = "74";
SGR["neitherSuperscriptNorSubscript"] = "75";
SGR["foregroundColorBrightBlack"] = "90";
SGR["foregroundColorBrightRed"] = "91";
SGR["foregroundColorBrightGreen"] = "92";
SGR["foregroundColorBrightYellow"] = "93";
SGR["foregroundColorBrightBlue"] = "94";
SGR["foregroundColorBrightMagenta"] = "95";
SGR["foregroundColorBrightCyan"] = "96";
SGR["foregroundColorBrightWhite"] = "97";
SGR["backgroundColorBrightBlack"] = "100";
SGR["backgroundColorBrightRed"] = "101";
SGR["backgroundColorBrightGreen"] = "102";
SGR["backgroundColorBrightYellow"] = "103";
SGR["backgroundColorBrightBlue"] = "104";
SGR["backgroundColorBrightMagenta"] = "105";
SGR["backgroundColorBrightCyan"] = "106";
SGR["backgroundColorBrightWhite"] = "107";
})(SGR || (SGR = {}));
class EffectedText {
constructor() { }
#controlSequence = "";
#addResetTag() {
return CONTROL_SEQUENCE_INTRODUCER + SGR.reset + SGR_FUNC_NAME;
}
reset() {
this.#controlSequence = "";
return this;
}
bold() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.bold + SGR_FUNC_NAME;
return this;
}
faintDecreasedIntensityOrDim() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.faintDecreasedIntensityOrDim +
SGR_FUNC_NAME;
return this;
}
italic() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.italic + SGR_FUNC_NAME;
return this;
}
underline() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.underline + SGR_FUNC_NAME;
return this;
}
blinkSlowly() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.blinkSlowly + SGR_FUNC_NAME;
return this;
}
blinkRapidly() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.blinkRapidly + SGR_FUNC_NAME;
return this;
}
reverse() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.reverse + SGR_FUNC_NAME;
return this;
}
hide() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.hide + SGR_FUNC_NAME;
return this;
}
strike() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.strike + SGR_FUNC_NAME;
return this;
}
primaryFont() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.primaryFont + SGR_FUNC_NAME;
return this;
}
gothic() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.gothic + SGR_FUNC_NAME;
return this;
}
doublyUnderlinedOrNotBold() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.doublyUnderlinedOrNotBold +
SGR_FUNC_NAME;
return this;
}
normalIntensity() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.normalIntensity +
SGR_FUNC_NAME;
return this;
}
neitherItalicNorBlackLetter() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.neitherItalicNorBlackLetter +
SGR_FUNC_NAME;
return this;
}
notUnderlined() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.notUnderlined + SGR_FUNC_NAME;
return this;
}
notBlinking() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.notBlinking + SGR_FUNC_NAME;
return this;
}
proportionalSpacing() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.proportionalSpacing +
SGR_FUNC_NAME;
return this;
}
notReversed() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.notReversed + SGR_FUNC_NAME;
return this;
}
reveal() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.reveal + SGR_FUNC_NAME;
return this;
}
notStrike() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.notStrike + SGR_FUNC_NAME;
return this;
}
black() {
return this.foregroundColorBlack();
}
red() {
return this.foregroundColorRed();
}
green() {
return this.foregroundColorGreen();
}
yellow() {
return this.foregroundColorYellow();
}
blue() {
return this.foregroundColorBlue();
}
magenta() {
return this.foregroundColorMagenta();
}
cyan() {
return this.foregroundColorCyan();
}
white() {
return this.foregroundColorWhite();
}
foregroundColorBlack() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBlack +
SGR_FUNC_NAME;
return this;
}
foregroundColorRed() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorRed +
SGR_FUNC_NAME;
return this;
}
foregroundColorGreen() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorGreen +
SGR_FUNC_NAME;
return this;
}
foregroundColorYellow() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorYellow +
SGR_FUNC_NAME;
return this;
}
foregroundColorBlue() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBlue +
SGR_FUNC_NAME;
return this;
}
foregroundColorMagenta() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorMagenta +
SGR_FUNC_NAME;
return this;
}
foregroundColorCyan() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorCyan +
SGR_FUNC_NAME;
return this;
}
foregroundColorWhite() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorWhite +
SGR_FUNC_NAME;
return this;
}
colorByRGB(r, g, b) {
return this.setBackgroundColorByRGB(r, g, b);
}
colorByRGBHex(code) {
return this.setForegroundColorByRGBHex(code);
}
colorBy256ColorMode(code) {
return this.setForegroundColorBy256ColorMode(code);
}
setForegroundColorByRGB(r, g, b) {
function prepareValidNumber(arg) {
if (isNaN(arg) || arg == undefined || arg == null) {
return "0";
}
arg = arg % 256;
return Math.floor(arg).toString();
}
// this.#controlSequence +=
// CONTROL_SEQUENCE_INTRODUCER + "38;2;255;0;0m";
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.setForegroundColor +
";2;" +
prepareValidNumber(r) +
";" +
prepareValidNumber(g) +
";" +
prepareValidNumber(b) +
SGR_FUNC_NAME;
return this;
}
setForegroundColorByRGBHex(code) {
function RGBFromHex(code) {
let reg = /^#([\dabcdefABCDEF]{2})([\dabcdefABCDEF]{2})([\dabcdefABCDEF]{2})$/;
if (!code.match(reg)) {
return [0, 0, 0];
}
else {
return [
parseInt("0x" + code.slice(1, 3)),
parseInt("0x" + code.slice(3, 5)),
parseInt("0x" + code.slice(5)),
];
}
}
let rtn = RGBFromHex(code);
return this.setForegroundColorByRGB(rtn[0], rtn[1], rtn[2]);
}
setForegroundColorBy256ColorMode(code) {
function prepareValidNumber(arg) {
if (isNaN(arg) || arg == undefined || arg == null) {
return "0";
}
arg = arg % 256;
return Math.floor(arg).toString();
}
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.setForegroundColor +
";5;" +
prepareValidNumber(code) +
SGR_FUNC_NAME;
return this;
}
defaultForegroundColor() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.defaultForegroundColor +
SGR_FUNC_NAME;
return this;
}
backgroundColorBlack() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBlack +
SGR_FUNC_NAME;
return this;
}
backgroundColorRed() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorRed +
SGR_FUNC_NAME;
return this;
}
backgroundColorGreen() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorGreen +
SGR_FUNC_NAME;
return this;
}
backgroundColorYellow() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorYellow +
SGR_FUNC_NAME;
return this;
}
backgroundColorBlue() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBlue +
SGR_FUNC_NAME;
return this;
}
backgroundColorMagenta() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorMagenta +
SGR_FUNC_NAME;
return this;
}
backgroundColorCyan() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorCyan +
SGR_FUNC_NAME;
return this;
}
backgroundColorWhite() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorWhite +
SGR_FUNC_NAME;
return this;
}
setBackgroundColorByRGB(r, g, b) {
function prepareValidNumber(arg) {
if (isNaN(arg) || arg == undefined || arg == null) {
return "0";
}
arg = arg % 256;
return Math.floor(arg).toString();
}
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.setBackgroundColor +
";2;" +
prepareValidNumber(r) +
";" +
prepareValidNumber(g) +
";" +
prepareValidNumber(b) +
SGR_FUNC_NAME;
return this;
}
setBackgroundColorByRGBHex(code) {
function RGBFromHex(code) {
let reg = /^#([\dabcdefABCDEF]{2})([\dabcdefABCDEF]{2})([\dabcdefABCDEF]{2})$/;
if (!code.match(reg)) {
return [0, 0, 0];
}
else {
return [
parseInt("0x" + code.slice(1, 3)),
parseInt("0x" + code.slice(3, 5)),
parseInt("0x" + code.slice(5)),
];
}
}
let rtn = RGBFromHex(code);
return this.setBackgroundColorByRGB(rtn[0], rtn[1], rtn[2]);
}
setBackgroundColorBy256ColorMode(code) {
function prepareValidNumber(arg) {
if (isNaN(arg) || arg == undefined || arg == null) {
return "0";
}
arg = arg % 256;
return Math.floor(arg).toString();
}
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.setBackgroundColor +
";5;" +
prepareValidNumber(code) +
SGR_FUNC_NAME;
return this;
}
defaultBackgroundColor() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.defaultBackgroundColor +
SGR_FUNC_NAME;
return this;
}
disableProportionalSpacing() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.disableProportionalSpacing +
SGR_FUNC_NAME;
return this;
}
framed() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.framed + SGR_FUNC_NAME;
return this;
}
encircled() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.encircled + SGR_FUNC_NAME;
return this;
}
overlined() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.overlined + SGR_FUNC_NAME;
return this;
}
neitherFramedNorEncircled() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.neitherFramedNorEncircled +
SGR_FUNC_NAME;
return this;
}
notOverlined() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.notOverlined + SGR_FUNC_NAME;
return this;
}
setUnderlineColor() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.setUnderlineColor +
SGR_FUNC_NAME;
return this;
}
defaultUnderlineColor() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.defaultUnderlineColor +
SGR_FUNC_NAME;
return this;
}
ideogramUnderlineOrRightSideLine() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.ideogramUnderlineOrRightSideLine +
SGR_FUNC_NAME;
return this;
}
ideogramDoubleUnderlineOrDoubleLineOnTheRightSide() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.ideogramDoubleUnderlineOrDoubleLineOnTheRightSide +
SGR_FUNC_NAME;
return this;
}
ideogramOverlineOrLeftSideLine() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.ideogramOverlineOrLeftSideLine +
SGR_FUNC_NAME;
return this;
}
ideogramDoubleOverlineOrDoubleLineOnTheLeftSide() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.ideogramDoubleOverlineOrDoubleLineOnTheLeftSide +
SGR_FUNC_NAME;
return this;
}
ideogramStressMarking() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.ideogramStressMarking +
SGR_FUNC_NAME;
return this;
}
noIdeogramAttributes() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.noIdeogramAttributes +
SGR_FUNC_NAME;
return this;
}
superscript() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.superscript + SGR_FUNC_NAME;
return this;
}
subscript() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER + SGR.subscript + SGR_FUNC_NAME;
return this;
}
neitherSuperscriptNorSubscript() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.neitherSuperscriptNorSubscript +
SGR_FUNC_NAME;
return this;
}
foregroundColorBrightBlack() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBrightBlack +
SGR_FUNC_NAME;
return this;
}
foregroundColorBrightRed() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBrightRed +
SGR_FUNC_NAME;
return this;
}
foregroundColorBrightGreen() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBrightGreen +
SGR_FUNC_NAME;
return this;
}
foregroundColorBrightYellow() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBrightYellow +
SGR_FUNC_NAME;
return this;
}
foregroundColorBrightBlue() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBrightBlue +
SGR_FUNC_NAME;
return this;
}
foregroundColorBrightMagenta() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBrightMagenta +
SGR_FUNC_NAME;
return this;
}
foregroundColorBrightCyan() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBrightCyan +
SGR_FUNC_NAME;
return this;
}
foregroundColorBrightWhite() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.foregroundColorBrightWhite +
SGR_FUNC_NAME;
return this;
}
backgroundColorBrightBlack() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBrightBlack +
SGR_FUNC_NAME;
return this;
}
backgroundColorBrightRed() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBrightRed +
SGR_FUNC_NAME;
return this;
}
backgroundColorBrightGreen() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBrightGreen +
SGR_FUNC_NAME;
return this;
}
backgroundColorBrightYellow() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBrightYellow +
SGR_FUNC_NAME;
return this;
}
backgroundColorBrightBlue() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBrightBlue +
SGR_FUNC_NAME;
return this;
}
backgroundColorBrightMagenta() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBrightMagenta +
SGR_FUNC_NAME;
return this;
}
backgroundColorBrightCyan() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBrightCyan +
SGR_FUNC_NAME;
return this;
}
backgroundColorBrightWhite() {
this.#controlSequence +=
CONTROL_SEQUENCE_INTRODUCER +
SGR.backgroundColorBrightWhite +
SGR_FUNC_NAME;
return this;
}
parse(str) {
let rtn = this.#controlSequence + str + this.#addResetTag();
return rtn;
}
parseAndReset(str) {
let rtn = this.#controlSequence + str + this.#addResetTag();
this.#controlSequence = "";
return rtn;
}
print(...args) {
console.log(this.#controlSequence, ...args, this.#addResetTag());
return this;
}
printAndReset(...args) {
this.print(...args);
this.reset();
return this;
}
#messageBuffer = [];
bufferToPrint(...args) {
this.#messageBuffer = this.#messageBuffer.concat([
this.#controlSequence,
...args,
this.#addResetTag(),
]);
return this;
}
commitPrint() {
console.log(...this.#messageBuffer);
this.#messageBuffer = [];
return this;
}
clearBuffer() {
this.#messageBuffer = [];
return this;
}
mergeEffect(other) {
this.#controlSequence += other.#controlSequence;
return this;
}
}
EffectedTerminalText.EffectedText = EffectedText;
function newEffect() {
return new EffectedText();
}
EffectedTerminalText.newEffect = newEffect;
})(EffectedTerminalText || (EffectedTerminalText = {}));
export default EffectedTerminalText;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLEtBQVcsb0JBQW9CLENBbXdCcEM7QUFud0JELFdBQWlCLG9CQUFvQjtJQUNqQyxNQUFNLDJCQUEyQixHQUFHLE9BQU8sQ0FBQztJQUM1QyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7SUFFMUIsSUFBSyxHQTJFSjtJQTNFRCxXQUFLLEdBQUc7UUFDSixrQkFBVyxDQUFBO1FBQ1gsaUJBQVUsQ0FBQTtRQUNWLHlDQUFrQyxDQUFBO1FBQ2xDLG1CQUFZLENBQUE7UUFDWixzQkFBZSxDQUFBO1FBQ2Ysd0JBQWlCLENBQUE7UUFDakIseUJBQWtCLENBQUE7UUFDbEIsb0JBQWEsQ0FBQTtRQUNiLGlCQUFVLENBQUE7UUFDVixtQkFBWSxDQUFBO1FBQ1oseUJBQWtCLENBQUE7UUFDbEIsb0JBQWEsQ0FBQTtRQUNiLHVDQUFnQyxDQUFBO1FBQ2hDLDZCQUFzQixDQUFBO1FBQ3RCLHlDQUFrQyxDQUFBO1FBQ2xDLDJCQUFvQixDQUFBO1FBQ3BCLHlCQUFrQixDQUFBO1FBQ2xCLGlDQUEwQixDQUFBO1FBQzFCLHlCQUFrQixDQUFBO1FBQ2xCLG9CQUFhLENBQUE7UUFDYix1QkFBZ0IsQ0FBQTtRQUNoQixrQ0FBMkIsQ0FBQTtRQUMzQixnQ0FBeUIsQ0FBQTtRQUN6QixrQ0FBMkIsQ0FBQTtRQUMzQixtQ0FBNEIsQ0FBQTtRQUM1QixpQ0FBMEIsQ0FBQTtRQUMxQixvQ0FBNkIsQ0FBQTtRQUM3QixpQ0FBMEIsQ0FBQTtRQUMxQixrQ0FBMkIsQ0FBQTtRQUMzQixnQ0FBeUIsQ0FBQTtRQUN6QixvQ0FBNkIsQ0FBQTtRQUM3QixrQ0FBMkIsQ0FBQTtRQUMzQixnQ0FBeUIsQ0FBQTtRQUN6QixrQ0FBMkIsQ0FBQTtRQUMzQixtQ0FBNEIsQ0FBQTtRQUM1QixpQ0FBMEIsQ0FBQTtRQUMxQixvQ0FBNkIsQ0FBQTtRQUM3QixpQ0FBMEIsQ0FBQTtRQUMxQixrQ0FBMkIsQ0FBQTtRQUMzQixnQ0FBeUIsQ0FBQTtRQUN6QixvQ0FBNkIsQ0FBQTtRQUM3Qix3Q0FBaUMsQ0FBQTtRQUNqQyxvQkFBYSxDQUFBO1FBQ2IsdUJBQWdCLENBQUE7UUFDaEIsdUJBQWdCLENBQUE7UUFDaEIsdUNBQWdDLENBQUE7UUFDaEMsMEJBQW1CLENBQUE7UUFDbkIsK0JBQXdCLENBQUE7UUFDeEIsbUNBQTRCLENBQUE7UUFDNUIsOENBQXVDLENBQUE7UUFDdkMsK0RBQXdELENBQUE7UUFDeEQsNENBQXFDLENBQUE7UUFDckMsNkRBQXNELENBQUE7UUFDdEQsbUNBQTRCLENBQUE7UUFDNUIsa0NBQTJCLENBQUE7UUFDM0IseUJBQWtCLENBQUE7UUFDbEIsdUJBQWdCLENBQUE7UUFDaEIsNENBQXFDLENBQUE7UUFDckMsd0NBQWlDLENBQUE7UUFDakMsc0NBQStCLENBQUE7UUFDL0Isd0NBQWlDLENBQUE7UUFDakMseUNBQWtDLENBQUE7UUFDbEMsdUNBQWdDLENBQUE7UUFDaEMsMENBQW1DLENBQUE7UUFDbkMsdUNBQWdDLENBQUE7UUFDaEMsd0NBQWlDLENBQUE7UUFDakMseUNBQWtDLENBQUE7UUFDbEMsdUNBQWdDLENBQUE7UUFDaEMseUNBQWtDLENBQUE7UUFDbEMsMENBQW1DLENBQUE7UUFDbkMsd0NBQWlDLENBQUE7UUFDakMsMkNBQW9DLENBQUE7UUFDcEMsd0NBQWlDLENBQUE7UUFDakMseUNBQWtDLENBQUE7SUFDdEMsQ0FBQyxFQTNFSSxHQUFHLEtBQUgsR0FBRyxRQTJFUDtJQUVELE1BQWEsWUFBWTtRQUNyQixnQkFBZSxDQUFDO1FBRWhCLGdCQUFnQixHQUFXLEVBQUUsQ0FBQztRQUU5QixZQUFZO1lBQ1IsT0FBTywyQkFBMkIsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQztRQUNuRSxDQUFDO1FBRUQsS0FBSztZQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUk7WUFDQSxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkIsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztZQUMzRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsNEJBQTRCO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLDRCQUE0QjtvQkFDaEMsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELFNBQVM7WUFDTCxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkIsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztZQUNoRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsV0FBVztZQUNQLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO1lBQ2xFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxZQUFZO1lBQ1IsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCLEdBQUcsR0FBRyxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUM7WUFDbkUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU87WUFDSCxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkIsR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztZQUM5RCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsSUFBSTtZQUNBLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQzNELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELFdBQVc7WUFDUCxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkIsR0FBRyxHQUFHLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTTtZQUNGLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1lBQzdELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCx5QkFBeUI7WUFDckIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMseUJBQXlCO29CQUM3QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELGVBQWU7WUFDWCxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxlQUFlO29CQUNuQixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELDJCQUEyQjtZQUN2QixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQywyQkFBMkI7b0JBQy9CLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsYUFBYTtZQUNULElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxXQUFXO1lBQ1AsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCLEdBQUcsR0FBRyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7WUFDbEUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELG1CQUFtQjtZQUNmLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLG1CQUFtQjtvQkFDdkIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxXQUFXO1lBQ1AsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCLEdBQUcsR0FBRyxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7WUFDbEUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU07WUFDRixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkIsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztZQUM3RCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsU0FBUztZQUNMLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxLQUFLO1lBQ0QsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBRUQsR0FBRztZQUNDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELEtBQUs7WUFDRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxNQUFNO1lBQ0YsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBRUQsSUFBSTtZQUNBLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUVELE9BQU87WUFDSCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJO1lBQ0EsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBRUQsS0FBSztZQUNELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVELG9CQUFvQjtZQUNoQixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxvQkFBb0I7b0JBQ3hCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsa0JBQWtCO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsa0JBQWtCO29CQUN0QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELG9CQUFvQjtZQUNoQixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxvQkFBb0I7b0JBQ3hCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QscUJBQXFCO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLHFCQUFxQjtvQkFDekIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxtQkFBbUI7WUFDZixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxtQkFBbUI7b0JBQ3ZCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0Qsc0JBQXNCO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLHNCQUFzQjtvQkFDMUIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxtQkFBbUI7WUFDZixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxtQkFBbUI7b0JBQ3ZCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0Qsb0JBQW9CO1lBQ2hCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLG9CQUFvQjtvQkFDeEIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxVQUFVLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELGFBQWEsQ0FBQyxJQUFZO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxtQkFBbUIsQ0FBQyxJQUFZO1lBQzVCLE9BQU8sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCx1QkFBdUIsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7WUFDbkQsU0FBUyxrQkFBa0IsQ0FBQyxHQUFXO2dCQUNuQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7b0JBQy9DLE9BQU8sR0FBRyxDQUFDO2lCQUNkO2dCQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO2dCQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUVELDJCQUEyQjtZQUMzQixxREFBcUQ7WUFDckQsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsa0JBQWtCO29CQUN0QixLQUFLO29CQUNMLGtCQUFrQixDQUFDLENBQUMsQ0FBQztvQkFDckIsR0FBRztvQkFDSCxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7b0JBQ3JCLEdBQUc7b0JBQ0gsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO29CQUNyQixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELDBCQUEwQixDQUFDLElBQVk7WUFDbkMsU0FBUyxVQUFVLENBQUMsSUFBWTtnQkFDNUIsSUFBSSxHQUFHLEdBQ0gsb0VBQW9FLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNsQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDcEI7cUJBQU07b0JBQ0gsT0FBTzt3QkFDSCxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNqQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDLENBQUM7aUJBQ0w7WUFDTCxDQUFDO1lBQ0QsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELGdDQUFnQyxDQUFDLElBQVk7WUFDekMsU0FBUyxrQkFBa0IsQ0FBQyxHQUFXO2dCQUNuQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7b0JBQy9DLE9BQU8sR0FBRyxDQUFDO2lCQUNkO2dCQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO2dCQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsQ0FBQztZQUNELElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLGtCQUFrQjtvQkFDdEIsS0FBSztvQkFDTCxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7b0JBQ3hCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsc0JBQXNCO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLHNCQUFzQjtvQkFDMUIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxvQkFBb0I7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsb0JBQW9CO29CQUN4QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELGtCQUFrQjtZQUNkLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLGtCQUFrQjtvQkFDdEIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxvQkFBb0I7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsb0JBQW9CO29CQUN4QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELHFCQUFxQjtZQUNqQixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxxQkFBcUI7b0JBQ3pCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsbUJBQW1CO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsbUJBQW1CO29CQUN2QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELHNCQUFzQjtZQUNsQixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxzQkFBc0I7b0JBQzFCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsbUJBQW1CO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsbUJBQW1CO29CQUN2QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELG9CQUFvQjtZQUNoQixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxvQkFBb0I7b0JBQ3hCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsdUJBQXVCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO1lBQ25ELFNBQVMsa0JBQWtCLENBQUMsR0FBVztnQkFDbkMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO29CQUMvQyxPQUFPLEdBQUcsQ0FBQztpQkFDZDtnQkFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztnQkFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxrQkFBa0I7b0JBQ3RCLEtBQUs7b0JBQ0wsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO29CQUNyQixHQUFHO29CQUNILGtCQUFrQixDQUFDLENBQUMsQ0FBQztvQkFDckIsR0FBRztvQkFDSCxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7b0JBQ3JCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsMEJBQTBCLENBQUMsSUFBWTtZQUNuQyxTQUFTLFVBQVUsQ0FBQyxJQUFZO2dCQUM1QixJQUFJLEdBQUcsR0FDSCxvRUFBb0UsQ0FBQztnQkFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2xCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNwQjtxQkFBTTtvQkFDSCxPQUFPO3dCQUNILFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDakMsQ0FBQztpQkFDTDtZQUNMLENBQUM7WUFDRCxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsZ0NBQWdDLENBQUMsSUFBWTtZQUN6QyxTQUFTLGtCQUFrQixDQUFDLEdBQVc7Z0JBQ25DLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtvQkFDL0MsT0FBTyxHQUFHLENBQUM7aUJBQ2Q7Z0JBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsa0JBQWtCO29CQUN0QixLQUFLO29CQUNMLGtCQUFrQixDQUFDLElBQUksQ0FBQztvQkFDeEIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxzQkFBc0I7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsc0JBQXNCO29CQUMxQixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELDBCQUEwQjtZQUN0QixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQywwQkFBMEI7b0JBQzlCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTTtZQUNGLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1lBQzdELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxTQUFTO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUM7WUFDaEUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELFNBQVM7WUFDTCxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkIsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQztZQUNoRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QseUJBQXlCO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLHlCQUF5QjtvQkFDN0IsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxZQUFZO1lBQ1IsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCLEdBQUcsR0FBRyxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUM7WUFDbkUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELGlCQUFpQjtZQUNiLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLGlCQUFpQjtvQkFDckIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxxQkFBcUI7WUFDakIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMscUJBQXFCO29CQUN6QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELGdDQUFnQztZQUM1QixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyxnQ0FBZ0M7b0JBQ3BDLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsaURBQWlEO1lBQzdDLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLGlEQUFpRDtvQkFDckQsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCw4QkFBOEI7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsOEJBQThCO29CQUNsQyxhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELCtDQUErQztZQUMzQyxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQywrQ0FBK0M7b0JBQ25ELGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QscUJBQXFCO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLHFCQUFxQjtvQkFDekIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxvQkFBb0I7WUFDaEIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsb0JBQW9CO29CQUN4QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELFdBQVc7WUFDUCxJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkIsR0FBRyxHQUFHLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsU0FBUztZQUNMLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCw4QkFBOEI7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsOEJBQThCO29CQUNsQyxhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELDBCQUEwQjtZQUN0QixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQywwQkFBMEI7b0JBQzlCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0Qsd0JBQXdCO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLHdCQUF3QjtvQkFDNUIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCwwQkFBMEI7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsMEJBQTBCO29CQUM5QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELDJCQUEyQjtZQUN2QixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQywyQkFBMkI7b0JBQy9CLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QseUJBQXlCO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLHlCQUF5QjtvQkFDN0IsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCw0QkFBNEI7WUFDeEIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsNEJBQTRCO29CQUNoQyxhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELHlCQUF5QjtZQUNyQixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyx5QkFBeUI7b0JBQzdCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsMEJBQTBCO1lBQ3RCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLDBCQUEwQjtvQkFDOUIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCwwQkFBMEI7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsMEJBQTBCO29CQUM5QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELHdCQUF3QjtZQUNwQixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyx3QkFBd0I7b0JBQzVCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsMEJBQTBCO1lBQ3RCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLDBCQUEwQjtvQkFDOUIsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCwyQkFBMkI7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMsMkJBQTJCO29CQUMvQixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELHlCQUF5QjtZQUNyQixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQyx5QkFBeUI7b0JBQzdCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsNEJBQTRCO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLDJCQUEyQjtvQkFDM0IsR0FBRyxDQUFDLDRCQUE0QjtvQkFDaEMsYUFBYSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCx5QkFBeUI7WUFDckIsSUFBSSxDQUFDLGdCQUFnQjtnQkFDakIsMkJBQTJCO29CQUMzQixHQUFHLENBQUMseUJBQXlCO29CQUM3QixhQUFhLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELDBCQUEwQjtZQUN0QixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQiwyQkFBMkI7b0JBQzNCLEdBQUcsQ0FBQywwQkFBMEI7b0JBQzlCLGFBQWEsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsS0FBSyxDQUFDLEdBQVc7WUFDYixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1RCxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUM7UUFFRCxhQUFhLENBQUMsR0FBVztZQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQztRQUVELEtBQUssQ0FBQyxHQUFHLElBQVc7WUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDakUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELGFBQWEsQ0FBQyxHQUFHLElBQVc7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxjQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLGFBQWEsQ0FBQyxHQUFHLElBQVc7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDN0MsSUFBSSxDQUFDLGdCQUFnQjtnQkFDckIsR0FBRyxJQUFJO2dCQUNQLElBQUksQ0FBQyxZQUFZLEVBQUU7YUFDdEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELFdBQVc7WUFDUCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxXQUFXO1lBQ1AsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELFdBQVcsQ0FBQyxLQUFtQjtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FNSjtJQTdxQlksaUNBQVksZUE2cUJ4QixDQUFBO0lBRUQsU0FBZ0IsU0FBUztRQUNyQixPQUFPLElBQUksWUFBWSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUZlLDhCQUFTLFlBRXhCLENBQUE7QUFDTCxDQUFDLEVBbndCZ0Isb0JBQW9CLEtBQXBCLG9CQUFvQixRQW13QnBDO0FBRUQsZUFBZSxvQkFBb0IsQ0FBQyJ9