'use strict'; var obsidian = require('obsidian'); /*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); } var version = '5.12.0'; var version_1 = version; // Copyright (C) 2014-2018 Gregory Dyke (gregdyke at gmail dot com) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var spacing = {}; spacing.FONTEM = 360; spacing.FONTSIZE = 30; spacing.STEP = spacing.FONTSIZE*93/720; spacing.SPACE = 10; spacing.TOPNOTE = 15; spacing.STAVEHEIGHT = 100; spacing.INDENT = 50; var abc_spacing = spacing; // abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure. // Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var parseCommon = {}; parseCommon.clone = function(source) { var destination = {}; for (var property in source) if (source.hasOwnProperty(property)) destination[property] = source[property]; return destination; }; parseCommon.cloneArray = function(source) { var destination = []; for (var i = 0; i < source.length; i++) { destination.push(parseCommon.clone(source[i])); } return destination; }; parseCommon.cloneHashOfHash = function(source) { var destination = {}; for (var property in source) if (source.hasOwnProperty(property)) destination[property] = parseCommon.clone(source[property]); return destination; }; parseCommon.cloneHashOfArrayOfHash = function(source) { var destination = {}; for (var property in source) if (source.hasOwnProperty(property)) destination[property] = parseCommon.cloneArray(source[property]); return destination; }; parseCommon.gsub = function(source, pattern, replacement) { return source.split(pattern).join(replacement); }; parseCommon.strip = function(str) { return str.replace(/^\s+/, '').replace(/\s+$/, ''); }; parseCommon.startsWith = function(str, pattern) { return str.indexOf(pattern) === 0; }; parseCommon.endsWith = function(str, pattern) { var d = str.length - pattern.length; return d >= 0 && str.lastIndexOf(pattern) === d; }; parseCommon.each = function(arr, iterator, context) { for (var i = 0, length = arr.length; i < length; i++) iterator.apply(context, [arr[i],i]); }; parseCommon.last = function(arr) { if (arr.length === 0) return null; return arr[arr.length-1]; }; parseCommon.compact = function(arr) { var output = []; for (var i = 0; i < arr.length; i++) { if (arr[i]) output.push(arr[i]); } return output; }; parseCommon.detect = function(arr, iterator) { for (var i = 0; i < arr.length; i++) { if (iterator(arr[i])) return true; } return false; }; // The following is a polyfill for Object.remove for IE9, IE10, and IE11. // from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md (function (arr) { arr.forEach(function (item) { if (item.hasOwnProperty('remove')) { return; } Object.defineProperty(item, 'remove', { configurable: true, enumerable: true, writable: true, value: function remove() { if (this.parentNode !== null) this.parentNode.removeChild(this); } }); }); })([Element.prototype, CharacterData.prototype, DocumentType.prototype]); var abc_common = parseCommon; var TimingCallbacks = function(target, params) { var self = this; if (!params) params = {}; self.qpm = params.qpm ? parseInt(params.qpm, 10) : null; if (!self.qpm) { var tempo = target.metaText ? target.metaText.tempo : null; self.qpm = target.getBpm(tempo); } self.extraMeasuresAtBeginning = params.extraMeasuresAtBeginning ? parseInt(params.extraMeasuresAtBeginning, 10) : 0; self.beatCallback = params.beatCallback; // This is called for each beat. self.eventCallback = params.eventCallback; // This is called for each note or rest encountered. self.lineEndCallback = params.lineEndCallback; // This is called when the end of a line is approaching. self.lineEndAnticipation = params.lineEndAnticipation ? parseInt(params.lineEndAnticipation, 10) : 0; // How many milliseconds before the end should the call happen. self.beatSubdivisions = params.beatSubdivisions ? parseInt(params.beatSubdivisions, 10) : 1; // how many callbacks per beat is desired. self.replaceTarget = function(newTarget) { newTarget.setTiming(self.qpm, self.extraMeasuresAtBeginning); if (newTarget.noteTimings.length === 0) newTarget.setTiming(0,0); if (self.lineEndCallback) { self.lineEndTimings = getLineEndTimings(newTarget.noteTimings, self.lineEndAnticipation); } self.noteTimings = newTarget.noteTimings; }; self.replaceTarget(target); if (self.noteTimings.length === 0) return; // noteTimings contains an array of events sorted by time. Events that happen at the same time are in the same element of the array. self.noteTimings = target.noteTimings; self.millisecondsPerBeat = 1000 / (self.qpm / 60) / self.beatSubdivisions; self.lastMoment = self.noteTimings[self.noteTimings.length-1].milliseconds; self.totalBeats = Math.round(self.lastMoment / self.millisecondsPerBeat); self.startTime = null; self.currentBeat = 0; self.currentEvent = 0; self.isPaused = false; self.isRunning = false; self.pausedTime = null; self.justUnpaused = false; self.newSeekPercent = 0; self.justSeeked = false; function setCurrentLocation(timestamp) { // First find the relative amount to move: that is, the difference between the current percentage and the passed in percent. var currentPercent = (timestamp - self.startTime) / self.lastMoment; var percentDifference = currentPercent - self.newSeekPercent; var timeDifference = self.lastMoment * percentDifference; self.startTime = self.startTime + timeDifference; var currentTime = timestamp - self.startTime; currentTime += 50; // Add a little slop because this function isn't called exactly. var oldBeat = self.currentBeat; self.currentBeat = Math.floor(currentTime / self.millisecondsPerBeat); if (self.beatCallback && oldBeat !== self.currentBeat) // If the movement caused the beat to change, then immediately report it to the client. self.beatCallback(self.currentBeat / self.beatSubdivisions, self.totalBeats / self.beatSubdivisions, self.lastMoment); self.currentEvent = 0; while (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < currentTime) { self.currentEvent++; } if (self.eventCallback && self.currentEvent > 0 && self.noteTimings[self.currentEvent - 1].type === 'event') self.eventCallback(self.noteTimings[self.currentEvent - 1]); // console.log("currentPercent="+currentPercent+ // " newSeekPercent="+self.newSeekPercent+ // " percentDifference="+percentDifference+ // " timeDifference=",timeDifference+ // " currentBeat="+self.currentBeat+ // " currentEvent="+self.currentEvent); } self.doTiming = function (timestamp) { if (!self.startTime) { self.startTime = timestamp; } else if (self.justUnpaused) { // Add the amount we paused to the start time to get the right place. var timePaused = (timestamp - self.pausedTime); self.startTime += timePaused; } self.justUnpaused = false; if (self.justSeeked) { setCurrentLocation(timestamp); self.justSeeked = false; } if (self.isPaused) { self.pausedTime = timestamp; } else if (self.isRunning) { var currentTime = timestamp - self.startTime; currentTime += 50; // Add a little slop because this function isn't called exactly. while (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < currentTime) { if (self.eventCallback && self.noteTimings[self.currentEvent].type === 'event') self.eventCallback(self.noteTimings[self.currentEvent]); self.currentEvent++; } if (currentTime < self.lastMoment) { requestAnimationFrame(self.doTiming); if (self.currentBeat * self.millisecondsPerBeat < currentTime) { if (self.beatCallback) self.beatCallback(self.currentBeat / self.beatSubdivisions, self.totalBeats / self.beatSubdivisions, self.lastMoment); self.currentBeat++; } } else if (self.currentBeat <= self.totalBeats) { // Because of timing issues (for instance, if the browser tab isn't active), the beat callbacks might not have happened when they are supposed to. To keep the client programs from having to deal with that, this will keep calling the loop until all of them have been sent. if (self.beatCallback) { self.beatCallback(self.currentBeat / self.beatSubdivisions, self.totalBeats / self.beatSubdivisions, self.lastMoment); self.currentBeat++; requestAnimationFrame(self.doTiming); } } if (self.lineEndCallback && self.lineEndTimings.length && self.lineEndTimings[0].milliseconds <= currentTime) { self.lineEndCallback(self.lineEndTimings[0]); self.lineEndTimings.shift(); } if (currentTime >= self.lastMoment && self.eventCallback) self.eventCallback(null); } }; self.start = function() { self.isRunning = true; if (self.isPaused) { self.isPaused = false; self.justUnpaused = true; } requestAnimationFrame(self.doTiming); }; self.pause = function() { self.isPaused = true; self.isRunning = false; }; self.reset = function() { self.currentBeat = 0; self.currentEvent = 0; self.startTime = null; self.pausedTime = null; if (self.lineEndCallback) { self.lineEndTimings = getLineEndTimings(self.noteTimings, self.lineEndAnticipation); } }; self.stop = function() { self.pause(); self.reset(); }; self.setProgress = function(percent) { // this is passed a value between 0 and 1. // the effect of this function is to move startTime so that the callbacks happen correctly for the new seek. if (percent < 0) percent = 0; if (percent > 1) percent = 1; self.newSeekPercent = percent; self.justSeeked = true; requestAnimationFrame(self.doTiming); }; }; function getLineEndTimings(timings, anticipation) { // Returns an array of milliseconds to call the lineEndCallback. // This figures out the timing of the beginning of each line and subtracts the anticipation from it. var callbackTimes = []; var lastTop = null; for (var i = 0; i < timings.length; i++) { var timing = timings[i]; if (timing.top !== lastTop) { callbackTimes.push({ milliseconds: timing.milliseconds - anticipation, top: timing.top, bottom: timing.top+timing.height }); lastTop = timing.top; } } return callbackTimes; } var abc_timing_callbacks = TimingCallbacks; // abc_animation.js: handles animating the music in real time. // Copyright (C) 2014-2018 Paul Rosen (paul at paulrosen dot net) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var animation = {}; (function() { var timer; var cursor; animation.startAnimation = function(paper, tune, options) { //options.bpm //options.showCursor //options.hideCurrentMeasure //options.hideFinishedMeasures if (timer) { timer.stop(); timer = undefined; } if (options.showCursor) { cursor = paper.querySelector('.abcjs-cursor'); if (!cursor) { cursor = document.createElement('DIV'); cursor.className = 'abcjs-cursor cursor'; cursor.style.position = 'absolute'; paper.appendChild(cursor); paper.style.position = 'relative'; } } function hideMeasures(elements) { for (var i = 0; i < elements.length; i++) { var element = elements[i]; if (!element.classList.contains('abcjs-bar')) element.style.display = "none"; } } var lastMeasure; function disappearMeasuresAfter(selector) { if (lastMeasure) { var elements = paper.querySelectorAll(lastMeasure); hideMeasures(elements); } lastMeasure = selector; } function disappearMeasuresBefore(selector) { var elements = paper.querySelectorAll(selector); hideMeasures(elements); } function measureCallback(selector) { if (options.hideCurrentMeasure) { disappearMeasuresBefore(selector); } else if (options.hideFinishedMeasures) { disappearMeasuresAfter(selector); } } function getLineAndMeasure(element) { return '.abcjs-l' + element.line + '.abcjs-m' + element.measureNumber; } function setCursor(range) { if (range) { if (range.measureStart) { var selector = getLineAndMeasure(range); if (selector) measureCallback(selector); } if (cursor) { cursor.style.left = range.left + "px"; cursor.style.top = range.top + "px"; cursor.style.width = range.width + "px"; cursor.style.height = range.height + "px"; } } else { timer.stop(); timer = undefined; } } timer = new abc_timing_callbacks(tune, { qpm: options.bpm, eventCallback: setCursor }); timer.start(); }; animation.pauseAnimation = function(pause) { if (timer) { if (pause) timer.pause(); else timer.start(); } }; animation.stopAnimation = function() { if (timer) { timer.stop(); timer = undefined; } }; })(); var abc_animation = animation; /*global window */ var parseDirective = {}; (function() { var tokenizer; var warn; var multilineVars; var tune; parseDirective.initialize = function(tokenizer_, warn_, multilineVars_, tune_) { tokenizer = tokenizer_; warn = warn_; multilineVars = multilineVars_; tune = tune_; initializeFonts(); }; function initializeFonts() { multilineVars.annotationfont = { face: "Helvetica", size: 12, weight: "normal", style: "normal", decoration: "none" }; multilineVars.gchordfont = { face: "Helvetica", size: 12, weight: "normal", style: "normal", decoration: "none" }; multilineVars.historyfont = { face: "\"Times New Roman\"", size: 16, weight: "normal", style: "normal", decoration: "none" }; multilineVars.infofont = { face: "\"Times New Roman\"", size: 14, weight: "normal", style: "italic", decoration: "none" }; multilineVars.measurefont = { face: "\"Times New Roman\"", size: 14, weight: "normal", style: "italic", decoration: "none" }; multilineVars.partsfont = { face: "\"Times New Roman\"", size: 15, weight: "normal", style: "normal", decoration: "none" }; multilineVars.repeatfont = { face: "\"Times New Roman\"", size: 13, weight: "normal", style: "normal", decoration: "none" }; multilineVars.textfont = { face: "\"Times New Roman\"", size: 16, weight: "normal", style: "normal", decoration: "none" }; multilineVars.tripletfont = {face: "Times", size: 11, weight: "normal", style: "italic", decoration: "none"}; multilineVars.vocalfont = { face: "\"Times New Roman\"", size: 13, weight: "bold", style: "normal", decoration: "none" }; multilineVars.wordsfont = { face: "\"Times New Roman\"", size: 16, weight: "normal", style: "normal", decoration: "none" }; // These fonts are global for the entire tune. tune.formatting.composerfont = { face: "\"Times New Roman\"", size: 14, weight: "normal", style: "italic", decoration: "none" }; tune.formatting.subtitlefont = { face: "\"Times New Roman\"", size: 16, weight: "normal", style: "normal", decoration: "none" }; tune.formatting.tempofont = { face: "\"Times New Roman\"", size: 15, weight: "bold", style: "normal", decoration: "none" }; tune.formatting.titlefont = { face: "\"Times New Roman\"", size: 20, weight: "normal", style: "normal", decoration: "none" }; tune.formatting.footerfont = { face: "\"Times New Roman\"", size: 12, weight: "normal", style: "normal", decoration: "none" }; tune.formatting.headerfont = { face: "\"Times New Roman\"", size: 12, weight: "normal", style: "normal", decoration: "none" }; tune.formatting.voicefont = { face: "\"Times New Roman\"", size: 13, weight: "bold", style: "normal", decoration: "none" }; // these are the default fonts for these element types. In the printer, these fonts might change as the tune progresses. tune.formatting.annotationfont = multilineVars.annotationfont; tune.formatting.gchordfont = multilineVars.gchordfont; tune.formatting.historyfont = multilineVars.historyfont; tune.formatting.infofont = multilineVars.infofont; tune.formatting.measurefont = multilineVars.measurefont; tune.formatting.partsfont = multilineVars.partsfont; tune.formatting.repeatfont = multilineVars.repeatfont; tune.formatting.textfont = multilineVars.textfont; tune.formatting.tripletfont = multilineVars.tripletfont; tune.formatting.vocalfont = multilineVars.vocalfont; tune.formatting.wordsfont = multilineVars.wordsfont; } var fontTypeCanHaveBox = { gchordfont: true, measurefont: true, partsfont: true }; var fontTranslation = function(fontFace) { // This translates Postscript fonts for a web alternative. // Note that the postscript fonts contain italic and bold info in them, so what is returned is a hash. switch (fontFace) { case "Arial-Italic": return { face: "Arial", weight: "normal", style: "italic", decoration: "none" }; case "Arial-Bold": return { face: "Arial", weight: "bold", style: "normal", decoration: "none" }; case "Bookman-Demi": return { face: "Bookman,serif", weight: "bold", style: "normal", decoration: "none" }; case "Bookman-DemiItalic": return { face: "Bookman,serif", weight: "bold", style: "italic", decoration: "none" }; case "Bookman-Light": return { face: "Bookman,serif", weight: "normal", style: "normal", decoration: "none" }; case "Bookman-LightItalic": return { face: "Bookman,serif", weight: "normal", style: "italic", decoration: "none" }; case "Courier": return { face: "\"Courier New\"", weight: "normal", style: "normal", decoration: "none" }; case "Courier-Oblique": return { face: "\"Courier New\"", weight: "normal", style: "italic", decoration: "none" }; case "Courier-Bold": return { face: "\"Courier New\"", weight: "bold", style: "normal", decoration: "none" }; case "Courier-BoldOblique": return { face: "\"Courier New\"", weight: "bold", style: "italic", decoration: "none" }; case "AvantGarde-Book": return { face: "AvantGarde,Arial", weight: "normal", style: "normal", decoration: "none" }; case "AvantGarde-BookOblique": return { face: "AvantGarde,Arial", weight: "normal", style: "italic", decoration: "none" }; case "AvantGarde-Demi": case "Avant-Garde-Demi": return { face: "AvantGarde,Arial", weight: "bold", style: "normal", decoration: "none" }; case "AvantGarde-DemiOblique": return { face: "AvantGarde,Arial", weight: "bold", style: "italic", decoration: "none" }; case "Helvetica-Oblique": return { face: "Helvetica", weight: "normal", style: "italic", decoration: "none" }; case "Helvetica-Bold": return { face: "Helvetica", weight: "bold", style: "normal", decoration: "none" }; case "Helvetica-BoldOblique": return { face: "Helvetica", weight: "bold", style: "italic", decoration: "none" }; case "Helvetica-Narrow": return { face: "\"Helvetica Narrow\",Helvetica", weight: "normal", style: "normal", decoration: "none" }; case "Helvetica-Narrow-Oblique": return { face: "\"Helvetica Narrow\",Helvetica", weight: "normal", style: "italic", decoration: "none" }; case "Helvetica-Narrow-Bold": return { face: "\"Helvetica Narrow\",Helvetica", weight: "bold", style: "normal", decoration: "none" }; case "Helvetica-Narrow-BoldOblique": return { face: "\"Helvetica Narrow\",Helvetica", weight: "bold", style: "italic", decoration: "none" }; case "Palatino-Roman": return { face: "Palatino", weight: "normal", style: "normal", decoration: "none" }; case "Palatino-Italic": return { face: "Palatino", weight: "normal", style: "italic", decoration: "none" }; case "Palatino-Bold": return { face: "Palatino", weight: "bold", style: "normal", decoration: "none" }; case "Palatino-BoldItalic": return { face: "Palatino", weight: "bold", style: "italic", decoration: "none" }; case "NewCenturySchlbk-Roman": return { face: "\"New Century\",serif", weight: "normal", style: "normal", decoration: "none" }; case "NewCenturySchlbk-Italic": return { face: "\"New Century\",serif", weight: "normal", style: "italic", decoration: "none" }; case "NewCenturySchlbk-Bold": return { face: "\"New Century\",serif", weight: "bold", style: "normal", decoration: "none" }; case "NewCenturySchlbk-BoldItalic": return { face: "\"New Century\",serif", weight: "bold", style: "italic", decoration: "none" }; case "Times": case "Times-Roman": case "Times-Narrow": case "Times-Courier": case "Times-New-Roman": return { face: "\"Times New Roman\"", weight: "normal", style: "normal", decoration: "none" }; case "Times-Italic": case "Times-Italics": return { face: "\"Times New Roman\"", weight: "normal", style: "italic", decoration: "none" }; case "Times-Bold": return { face: "\"Times New Roman\"", weight: "bold", style: "normal", decoration: "none" }; case "Times-BoldItalic": return { face: "\"Times New Roman\"", weight: "bold", style: "italic", decoration: "none" }; case "ZapfChancery-MediumItalic": return { face: "\"Zapf Chancery\",cursive,serif", weight: "normal", style: "normal", decoration: "none" }; default: return null; } }; var getFontParameter = function(tokens, currentSetting, str, position, cmd) { // Every font parameter has the following format: // // Where: // face: either a standard web font name, or a postscript font, enumerated in fontTranslation. This could also be an * or be missing if the face shouldn't change. // utf8: This is optional, and specifies utf8. That's all that is supported so the field is just silently ignored. // size: The size, in pixels. This may be omitted if the size is not changing. // modifiers: zero or more of "bold", "italic", "underline" // box: Only applies to the measure numbers, gchords, and the parts. If present, then a box is drawn around the characters. // If face is present, then all the modifiers are cleared. If face is absent, then the modifiers are illegal. // The face can be a single word, a set of words separated by hyphens, or a quoted string. // // So, in practicality, there are three types of font definitions: a number only, an asterisk and a number only, or the full definition (with an optional size). function processNumberOnly() { var size = parseInt(tokens[0].token); tokens.shift(); if (!currentSetting) { warn("Can't set just the size of the font since there is no default value.", str, position); return { face: "\"Times New Roman\"", weight: "normal", style: "normal", decoration: "none", size: size}; } if (tokens.length === 0) { return { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size}; } if (tokens.length === 1 && tokens[0].token === "box" && fontTypeCanHaveBox[cmd]) return { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size, box: true}; warn("Extra parameters in font definition.", str, position); return { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size}; } // format 1: asterisk and number only if (tokens[0].token === '*') { tokens.shift(); if (tokens[0].type === 'number') return processNumberOnly(); else { warn("Expected font size number after *.", str, position); } } // format 2: number only if (tokens[0].type === 'number') { return processNumberOnly(); } // format 3: whole definition var face = []; var size; var weight = "normal"; var style = "normal"; var decoration = "none"; var box = false; var state = 'face'; var hyphenLast = false; while (tokens.length) { var currToken = tokens.shift(); var word = currToken.token.toLowerCase(); switch (state) { case 'face': if (hyphenLast || (word !== 'utf' && currToken.type !== 'number' && word !== "bold" && word !== "italic" && word !== "underline" && word !== "box")) { if (face.length > 0 && currToken.token === '-') { hyphenLast = true; face[face.length-1] = face[face.length-1] + currToken.token; } else { if (hyphenLast) { hyphenLast = false; face[face.length-1] = face[face.length-1] + currToken.token; } else face.push(currToken.token); } } else { if (currToken.type === 'number') { if (size) { warn("Font size specified twice in font definition.", str, position); } else { size = currToken.token; } state = 'modifier'; } else if (word === "bold") weight = "bold"; else if (word === "italic") style = "italic"; else if (word === "underline") decoration = "underline"; else if (word === "box") { if (fontTypeCanHaveBox[cmd]) box = true; else warn("This font style doesn't support \"box\"", str, position); state = "finished"; } else if (word === "utf") { currToken = tokens.shift(); // this gets rid of the "8" after "utf" state = "size"; } else warn("Unknown parameter " + currToken.token + " in font definition.", str, position); } break; case "size": if (currToken.type === 'number') { if (size) { warn("Font size specified twice in font definition.", str, position); } else { size = currToken.token; } } else { warn("Expected font size in font definition.", str, position); } state = 'modifier'; break; case "modifier": if (word === "bold") weight = "bold"; else if (word === "italic") style = "italic"; else if (word === "underline") decoration = "underline"; else if (word === "box") { if (fontTypeCanHaveBox[cmd]) box = true; else warn("This font style doesn't support \"box\"", str, position); state = "finished"; } else warn("Unknown parameter " + currToken.token + " in font definition.", str, position); break; case "finished": warn("Extra characters found after \"box\" in font definition.", str, position); break; } } if (size === undefined) { if (!currentSetting) { warn("Must specify the size of the font since there is no default value.", str, position); size = 12; } else size = currentSetting.size; } else size = parseFloat(size); face = face.join(' '); var psFont = fontTranslation(face); var font = {}; if (psFont) { font.face = psFont.face; font.weight = psFont.weight; font.style = psFont.style; font.decoration = psFont.decoration; font.size = size; if (box) font.box = true; return font; } font.face = face; font.weight = weight; font.style = style; font.decoration = decoration; font.size = size; if (box) font.box = true; return font; }; var getChangingFont = function(cmd, tokens, str) { if (tokens.length === 0) return "Directive \"" + cmd + "\" requires a font as a parameter."; multilineVars[cmd] = getFontParameter(tokens, multilineVars[cmd], str, 0, cmd); if (multilineVars.is_in_header) // If the font appears in the header, then it becomes the default font. tune.formatting[cmd] = multilineVars[cmd]; return null; }; var getGlobalFont = function(cmd, tokens, str) { if (tokens.length === 0) return "Directive \"" + cmd + "\" requires a font as a parameter."; tune.formatting[cmd] = getFontParameter(tokens, tune.formatting[cmd], str, 0, cmd); return null; }; var setScale = function(cmd, tokens) { var scratch = ""; abc_common.each(tokens, function(tok) { scratch += tok.token; }); var num = parseFloat(scratch); if (isNaN(num) || num === 0) return "Directive \"" + cmd + "\" requires a number as a parameter."; tune.formatting.scale = num; }; var getRequiredMeasurement = function(cmd, tokens) { var points = tokenizer.getMeasurement(tokens); if (points.used === 0 || tokens.length !== 0) return { error: "Directive \"" + cmd + "\" requires a measurement as a parameter."}; return points.value; }; var oneParameterMeasurement = function(cmd, tokens) { var points = tokenizer.getMeasurement(tokens); if (points.used === 0 || tokens.length !== 0) return "Directive \"" + cmd + "\" requires a measurement as a parameter."; tune.formatting[cmd] = points.value; return null; }; var addMultilineVar = function(key, cmd, tokens, min, max) { if (tokens.length !== 1 || tokens[0].type !== 'number') return "Directive \"" + cmd + "\" requires a number as a parameter."; var i = tokens[0].intt; if (min !== undefined && i < min) return "Directive \"" + cmd + "\" requires a number greater than or equal to " + min + " as a parameter."; if (max !== undefined && i > max) return "Directive \"" + cmd + "\" requires a number less than or equal to " + max + " as a parameter."; multilineVars[key] = i; return null; }; var addMultilineVarBool = function(key, cmd, tokens) { if (tokens.length === 1 && (tokens[0].token === 'true' || tokens[0].token === 'false')) { multilineVars[key] = tokens[0].token === 'true'; return null; } var str = addMultilineVar(key, cmd, tokens, 0, 1); if (str !== null) return str; multilineVars[key] = (multilineVars[key] === 1); return null; }; var addMultilineVarOneParamChoice = function(key, cmd, tokens, choices) { if (tokens.length !== 1) return "Directive \"" + cmd + "\" requires one of [ " + choices.join(", ") + " ] as a parameter."; var choice = tokens[0].token; var found = false; for (var i = 0; !found && i < choices.length; i++) { if (choices[i] === choice) found = true; } if (!found) return "Directive \"" + cmd + "\" requires one of [ " + choices.join(", ") + " ] as a parameter."; multilineVars[key] = choice; return null; }; var midiCmdParam0 = [ "nobarlines", "barlines", "beataccents", "nobeataccents", "droneon", "droneoff", "drumon", "drumoff", "fermatafixed", "fermataproportional", "gchordon", "gchordoff", "controlcombo", "temperamentnormal", "noportamento" ]; var midiCmdParam1String = [ "gchord", "ptstress", "beatstring" ]; var midiCmdParam1Integer = [ "bassvol", "chordvol", "c", "channel", "beatmod", "deltaloudness", "drumbars", "gracedivider", "makechordchannels", "randomchordattack", "chordattack", "stressmodel", "transpose", "rtranspose", "vol", "volinc" ]; var midiCmdParam1Integer1OptionalInteger = [ "program" ]; var midiCmdParam2Integer = [ "ratio", "snt", "bendvelocity", "pitchbend", "control", "temperamentlinear" ]; var midiCmdParam4Integer = [ "beat" ]; var midiCmdParam5Integer = [ "drone" ]; var midiCmdParam1String1Integer = [ "portamento" ]; var midiCmdParamFraction = [ "expand", "grace", "trim" ]; var midiCmdParam1StringVariableIntegers = [ "drum", "chordname" ]; var parseMidiCommand = function(midi, tune, restOfString) { var midi_cmd = midi.shift().token; var midi_params = []; if (midiCmdParam0.indexOf(midi_cmd) >= 0) { // NO PARAMETERS if (midi.length !== 0) warn("Unexpected parameter in MIDI " + midi_cmd, restOfString, 0); } else if (midiCmdParam1String.indexOf(midi_cmd) >= 0) { // ONE STRING PARAMETER if (midi.length !== 1) warn("Expected one parameter in MIDI " + midi_cmd, restOfString, 0); else midi_params.push(midi[0].token); } else if (midiCmdParam1Integer.indexOf(midi_cmd) >= 0) { // ONE INT PARAMETER if (midi.length !== 1) warn("Expected one parameter in MIDI " + midi_cmd, restOfString, 0); else if (midi[0].type !== "number") warn("Expected one integer parameter in MIDI " + midi_cmd, restOfString, 0); else midi_params.push(midi[0].intt); } else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) { // ONE INT PARAMETER, ONE OPTIONAL PARAMETER if (midi.length !== 1 && midi.length !== 2) warn("Expected one or two parameters in MIDI " + midi_cmd, restOfString, 0); else if (midi[0].type !== "number") warn("Expected integer parameter in MIDI " + midi_cmd, restOfString, 0); else if (midi.length === 2 && midi[1].type !== "number") warn("Expected integer parameter in MIDI " + midi_cmd, restOfString, 0); else { midi_params.push(midi[0].intt); if (midi.length === 2) midi_params.push(midi[1].intt); } } else if (midiCmdParam2Integer.indexOf(midi_cmd) >= 0) { // TWO INT PARAMETERS if (midi.length !== 2) warn("Expected two parameters in MIDI " + midi_cmd, restOfString, 0); else if (midi[0].type !== "number" || midi[1].type !== "number") warn("Expected two integer parameters in MIDI " + midi_cmd, restOfString, 0); else { midi_params.push(midi[0].intt); midi_params.push(midi[1].intt); } } else if (midiCmdParam1String1Integer.indexOf(midi_cmd) >= 0) { // ONE STRING PARAMETER, ONE INT PARAMETER if (midi.length !== 2) warn("Expected two parameters in MIDI " + midi_cmd, restOfString, 0); else if (midi[0].type !== "alpha" || midi[1].type !== "number") warn("Expected one string and one integer parameters in MIDI " + midi_cmd, restOfString, 0); else { midi_params.push(midi[0].token); midi_params.push(midi[1].intt); } } else if (midi_cmd === 'drummap') { // BUILD AN OBJECT OF ABC NOTE => MIDI NOTE if (midi.length === 2 && midi[0].type === 'alpha' && midi[1].type === 'number') { if (!tune.formatting) tune.formatting = {}; if (!tune.formatting.midi) tune.formatting.midi = {}; if (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {}; tune.formatting.midi.drummap[midi[0].token] = midi[1].intt; midi_params = tune.formatting.midi.drummap; } else if (midi.length === 3 && midi[0].type === 'punct' && midi[1].type === 'alpha' && midi[2].type === 'number') { if (!tune.formatting) tune.formatting = {}; if (!tune.formatting.midi) tune.formatting.midi = {}; if (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {}; tune.formatting.midi.drummap[midi[0].token+midi[1].token] = midi[2].intt; midi_params = tune.formatting.midi.drummap; } else { warn("Expected one note name and one integer parameter in MIDI " + midi_cmd, restOfString, 0); } } else if (midiCmdParamFraction.indexOf(midi_cmd) >= 0) { // ONE FRACTION PARAMETER if (midi.length !== 3) warn("Expected fraction parameter in MIDI " + midi_cmd, restOfString, 0); else if (midi[0].type !== "number" || midi[1].token !== "/" || midi[2].type !== "number") warn("Expected fraction parameter in MIDI " + midi_cmd, restOfString, 0); else { midi_params.push(midi[0].intt); midi_params.push(midi[2].intt); } } else if (midiCmdParam4Integer.indexOf(midi_cmd) >= 0) { // FOUR INT PARAMETERS if (midi.length !== 4) warn("Expected four parameters in MIDI " + midi_cmd, restOfString, 0); else if (midi[0].type !== "number" || midi[1].type !== "number" || midi[2].type !== "number" || midi[3].type !== "number") warn("Expected four integer parameters in MIDI " + midi_cmd, restOfString, 0); else { midi_params.push(midi[0].intt); midi_params.push(midi[1].intt); midi_params.push(midi[2].intt); midi_params.push(midi[3].intt); } } else if (midiCmdParam5Integer.indexOf(midi_cmd) >= 0) { // FIVE INT PARAMETERS if (midi.length !== 5) warn("Expected five parameters in MIDI " + midi_cmd, restOfString, 0); else if (midi[0].type !== "number" || midi[1].type !== "number" || midi[2].type !== "number" || midi[3].type !== "number" || midi[4].type !== "number") warn("Expected five integer parameters in MIDI " + midi_cmd, restOfString, 0); else { midi_params.push(midi[0].intt); midi_params.push(midi[1].intt); midi_params.push(midi[2].intt); midi_params.push(midi[3].intt); midi_params.push(midi[4].intt); } } else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) { // ONE INT PARAMETER, ONE OPTIONAL OCTAVE PARAMETER if (midi.length !== 1 || midi.length !== 4) warn("Expected one or two parameters in MIDI " + midi_cmd, restOfString, 0); else if (midi[0].type !== "number") warn("Expected integer parameter in MIDI " + midi_cmd, restOfString, 0); else if (midi.length === 4) { if (midi[1].token !== "octave") warn("Expected octave parameter in MIDI " + midi_cmd, restOfString, 0); if (midi[2].token !== "=") warn("Expected octave parameter in MIDI " + midi_cmd, restOfString, 0); if (midi[3].type !== "number") warn("Expected integer parameter for octave in MIDI " + midi_cmd, restOfString, 0); } else { midi_params.push(midi[0].intt); if (midi.length === 4) midi_params.push(midi[3].intt); } } else if (midiCmdParam1StringVariableIntegers.indexOf(midi_cmd) >= 0) { // ONE STRING, VARIABLE INT PARAMETERS if (midi.length < 2) warn("Expected string parameter and at least one integer parameter in MIDI " + midi_cmd, restOfString, 0); else if (midi[0].type !== "alpha") warn("Expected string parameter and at least one integer parameter in MIDI " + midi_cmd, restOfString, 0); else { var p = midi.shift(); midi_params.push(p.token); while (midi.length > 0) { p = midi.shift(); if (p.type !== "number") warn("Expected integer parameter in MIDI " + midi_cmd, restOfString, 0); midi_params.push(p.intt); } } } if (tune.hasBeginMusic()) tune.appendElement('midi', -1, -1, { cmd: midi_cmd, params: midi_params }); else { if (tune.formatting['midi'] === undefined) tune.formatting['midi'] = {}; tune.formatting['midi'][midi_cmd] = midi_params; } }; parseDirective.parseFontChangeLine = function(textstr) { var textParts = textstr.split('$'); if (textParts.length > 1 && multilineVars.setfont) { var textarr = [ { text: textParts[0] }]; for (var i = 1; i < textParts.length; i++) { if (textParts[i].charAt(0) === '0') textarr.push({ text: textParts[i].substring(1) }); else if (textParts[i].charAt(0) === '1' && multilineVars.setfont[1]) textarr.push({font: multilineVars.setfont[1], text: textParts[i].substring(1) }); else if (textParts[i].charAt(0) === '2' && multilineVars.setfont[2]) textarr.push({font: multilineVars.setfont[2], text: textParts[i].substring(1) }); else if (textParts[i].charAt(0) === '3' && multilineVars.setfont[3]) textarr.push({font: multilineVars.setfont[3], text: textParts[i].substring(1) }); else if (textParts[i].charAt(0) === '4' && multilineVars.setfont[4]) textarr.push({font: multilineVars.setfont[4], text: textParts[i].substring(1) }); else textarr[textarr.length-1].text += '$' + textParts[i]; } if (textarr.length > 1) return textarr; } return textstr; }; var positionChoices = [ 'auto', 'above', 'below', 'hidden' ]; parseDirective.addDirective = function(str) { var tokens = tokenizer.tokenize(str, 0, str.length); // 3 or more % in a row, or just spaces after %% is just a comment if (tokens.length === 0 || tokens[0].type !== 'alpha') return null; var restOfString = str.substring(str.indexOf(tokens[0].token)+tokens[0].token.length); restOfString = tokenizer.stripComment(restOfString); var cmd = tokens.shift().token.toLowerCase(); var scratch = ""; switch (cmd) { // The following directives were added to abc_parser_lint, but haven't been implemented here. // Most of them are direct translations from the directives that will be parsed in. See abcm2ps's format.txt for info on each of these. // alignbars: { type: "number", optional: true }, // aligncomposer: { type: "string", Enum: [ 'left', 'center','right' ], optional: true }, // bstemdown: { type: "boolean", optional: true }, // continueall: { type: "boolean", optional: true }, // dynalign: { type: "boolean", optional: true }, // exprabove: { type: "boolean", optional: true }, // exprbelow: { type: "boolean", optional: true }, // gchordbox: { type: "boolean", optional: true }, // graceslurs: { type: "boolean", optional: true }, // gracespacebefore: { type: "number", optional: true }, // gracespaceinside: { type: "number", optional: true }, // gracespaceafter: { type: "number", optional: true }, // infospace: { type: "number", optional: true }, // lineskipfac: { type: "number", optional: true }, // maxshrink: { type: "number", optional: true }, // maxstaffsep: { type: "number", optional: true }, // maxsysstaffsep: { type: "number", optional: true }, // notespacingfactor: { type: "number", optional: true }, // parskipfac: { type: "number", optional: true }, // slurheight: { type: "number", optional: true }, // splittune: { type: "boolean", optional: true }, // squarebreve: { type: "boolean", optional: true }, // stemheight: { type: "number", optional: true }, // straightflags: { type: "boolean", optional: true }, // stretchstaff: { type: "boolean", optional: true }, // titleformat: { type: "string", optional: true }, case "bagpipes":tune.formatting.bagpipes = true;break; case "flatbeams":tune.formatting.flatbeams = true;break; case "landscape":multilineVars.landscape = true;break; case "papersize":multilineVars.papersize = restOfString;break; case "slurgraces":tune.formatting.slurgraces = true;break; case "stretchlast":tune.formatting.stretchlast = true;break; case "titlecaps":multilineVars.titlecaps = true;break; case "titleleft":tune.formatting.titleleft = true;break; case "measurebox":tune.formatting.measurebox = true;break; case "vocal": return addMultilineVarOneParamChoice("vocalPosition", cmd, tokens, positionChoices); case "dynamic": return addMultilineVarOneParamChoice("dynamicPosition", cmd, tokens, positionChoices); case "gchord": return addMultilineVarOneParamChoice("chordPosition", cmd, tokens, positionChoices); case "ornament": return addMultilineVarOneParamChoice("ornamentPosition", cmd, tokens, positionChoices); case "volume": return addMultilineVarOneParamChoice("volumePosition", cmd, tokens, positionChoices); case "botmargin": case "botspace": case "composerspace": case "indent": case "leftmargin": case "linesep": case "musicspace": case "partsspace": case "pageheight": case "pagewidth": case "rightmargin": case "staffsep": case "staffwidth": case "subtitlespace": case "sysstaffsep": case "systemsep": case "textspace": case "titlespace": case "topmargin": case "topspace": case "vocalspace": case "wordsspace": return oneParameterMeasurement(cmd, tokens); case "voicescale": if (tokens.length !== 1 || tokens[0].type !== 'number') return "voicescale requires one float as a parameter"; var voiceScale = tokens.shift(); if (multilineVars.currentVoice) { multilineVars.currentVoice.scale = voiceScale.floatt; tune.changeVoiceScale(multilineVars.currentVoice.scale); } return null; case "vskip": var vskip = getRequiredMeasurement(cmd, tokens); if (vskip.error) return vskip.error; tune.addSpacing(vskip); return null; case "scale": setScale(cmd, tokens); break; case "sep": if (tokens.length === 0) tune.addSeparator(); else { var points = tokenizer.getMeasurement(tokens); if (points.used === 0) return "Directive \"" + cmd + "\" requires 3 numbers: space above, space below, length of line"; var spaceAbove = points.value; points = tokenizer.getMeasurement(tokens); if (points.used === 0) return "Directive \"" + cmd + "\" requires 3 numbers: space above, space below, length of line"; var spaceBelow = points.value; points = tokenizer.getMeasurement(tokens); if (points.used === 0 || tokens.length !== 0) return "Directive \"" + cmd + "\" requires 3 numbers: space above, space below, length of line"; var lenLine = points.value; tune.addSeparator(spaceAbove, spaceBelow, lenLine); } break; case "barsperstaff": scratch = addMultilineVar('barsperstaff', cmd, tokens); if (scratch !== null) return scratch; break; case "staffnonote": // The sense of the boolean is opposite here. "0" means true. if (tokens.length !== 1) return "Directive staffnonote requires one parameter: 0 or 1"; if (tokens[0].token === '0') multilineVars.staffnonote = true; else if (tokens[0].token === '1') multilineVars.staffnonote = false; else return "Directive staffnonote requires one parameter: 0 or 1 (received " + tokens[0].token + ')'; break; case "printtempo": scratch = addMultilineVarBool('printTempo', cmd, tokens); if (scratch !== null) return scratch; break; case "partsbox": scratch = addMultilineVarBool('partsBox', cmd, tokens); if (scratch !== null) return scratch; multilineVars.partsfont.box = multilineVars.partsBox; break; case "freegchord": scratch = addMultilineVarBool('freegchord', cmd, tokens); if (scratch !== null) return scratch; break; case "measurenb": case "barnumbers": scratch = addMultilineVar('barNumbers', cmd, tokens); if (scratch !== null) return scratch; break; case "setbarnb": if (tokens.length !== 1 || tokens[0].type !== 'number') { return 'Directive setbarnb requires a number as a parameter.'; } multilineVars.currBarNumber = tune.setBarNumberImmediate(tokens[0].intt); break; case "begintext": multilineVars.inTextBlock = true; break; case "continueall": multilineVars.continueall = true; break; case "beginps": multilineVars.inPsBlock = true; warn("Postscript ignored", str, 0); break; case "deco": if (restOfString.length > 0) multilineVars.ignoredDecorations.push(restOfString.substring(0, restOfString.indexOf(' '))); warn("Decoration redefinition ignored", str, 0); break; case "text": var textstr = tokenizer.translateString(restOfString); tune.addText(parseDirective.parseFontChangeLine(textstr)); break; case "center": var centerstr = tokenizer.translateString(restOfString); tune.addCentered(parseDirective.parseFontChangeLine(centerstr)); break; case "font": // don't need to do anything for this; it is a useless directive break; case "setfont": var sfTokens = tokenizer.tokenize(restOfString, 0, restOfString.length); // var sfDone = false; if (sfTokens.length >= 4) { if (sfTokens[0].token === '-' && sfTokens[1].type === 'number') { var sfNum = parseInt(sfTokens[1].token); if (sfNum >= 1 && sfNum <= 4) { if (!multilineVars.setfont) multilineVars.setfont = []; sfTokens.shift(); sfTokens.shift(); multilineVars.setfont[sfNum] = getFontParameter(sfTokens, multilineVars.setfont[sfNum], str, 0, 'setfont'); // var sfSize = sfTokens.pop(); // if (sfSize.type === 'number') { // sfSize = parseInt(sfSize.token); // var sfFontName = ''; // for (var sfi = 2; sfi < sfTokens.length; sfi++) // sfFontName += sfTokens[sfi].token; // multilineVars.setfont[sfNum] = { face: sfFontName, size: sfSize }; // sfDone = true; // } } } } // if (!sfDone) // return "Bad parameters: " + cmd; break; case "gchordfont": case "partsfont": case "tripletfont": case "vocalfont": case "textfont": case "annotationfont": case "historyfont": case "infofont": case "measurefont": case "repeatfont": case "wordsfont": return getChangingFont(cmd, tokens, str); case "composerfont": case "subtitlefont": case "tempofont": case "titlefont": case "voicefont": case "footerfont": case "headerfont": return getGlobalFont(cmd, tokens, str); case "barlabelfont": case "barnumberfont": case "barnumfont": return getChangingFont("measurefont", tokens, str); case "staves": case "score": multilineVars.score_is_present = true; var addVoice = function(id, newStaff, bracket, brace, continueBar) { if (newStaff || multilineVars.staves.length === 0) { multilineVars.staves.push({index: multilineVars.staves.length, numVoices: 0}); } var staff = abc_common.last(multilineVars.staves); if (bracket !== undefined) staff.bracket = bracket; if (brace !== undefined) staff.brace = brace; if (continueBar) staff.connectBarLines = 'end'; if (multilineVars.voices[id] === undefined) { multilineVars.voices[id] = {staffNum: staff.index, index: staff.numVoices}; staff.numVoices++; } }; var openParen = false; var openBracket = false; var openBrace = false; var justOpenParen = false; var justOpenBracket = false; var justOpenBrace = false; var continueBar = false; var lastVoice; var addContinueBar = function() { continueBar = true; if (lastVoice) { var ty = 'start'; if (lastVoice.staffNum > 0) { if (multilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'start' || multilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'continue') ty = 'continue'; } multilineVars.staves[lastVoice.staffNum].connectBarLines = ty; } }; while (tokens.length) { var t = tokens.shift(); switch (t.token) { case '(': if (openParen) warn("Can't nest parenthesis in %%score", str, t.start); else {openParen = true;justOpenParen = true;} break; case ')': if (!openParen || justOpenParen) warn("Unexpected close parenthesis in %%score", str, t.start); else openParen = false; break; case '[': if (openBracket) warn("Can't nest brackets in %%score", str, t.start); else {openBracket = true;justOpenBracket = true;} break; case ']': if (!openBracket || justOpenBracket) warn("Unexpected close bracket in %%score", str, t.start); else {openBracket = false;multilineVars.staves[lastVoice.staffNum].bracket = 'end';} break; case '{': if (openBrace ) warn("Can't nest braces in %%score", str, t.start); else {openBrace = true;justOpenBrace = true;} break; case '}': if (!openBrace || justOpenBrace) warn("Unexpected close brace in %%score", str, t.start); else {openBrace = false;multilineVars.staves[lastVoice.staffNum].brace = 'end';} break; case '|': addContinueBar(); break; default: var vc = ""; while (t.type === 'alpha' || t.type === 'number') { vc += t.token; if (t.continueId) t = tokens.shift(); else break; } var newStaff = !openParen || justOpenParen; var bracket = justOpenBracket ? 'start' : openBracket ? 'continue' : undefined; var brace = justOpenBrace ? 'start' : openBrace ? 'continue' : undefined; addVoice(vc, newStaff, bracket, brace, continueBar); justOpenParen = false; justOpenBracket = false; justOpenBrace = false; continueBar = false; lastVoice = multilineVars.voices[vc]; if (cmd === 'staves') addContinueBar(); break; } } break; case "newpage": var pgNum = tokenizer.getInt(restOfString); tune.addNewPage(pgNum.digits === 0 ? -1 : pgNum.value); break; case "abc": var arr = restOfString.split(' '); switch (arr[0]) { case "-copyright": case "-creator": case "-edited-by": case "-version": case "-charset": var subCmd = arr.shift(); tune.addMetaText(cmd+subCmd, arr.join(' ')); break; default: return "Unknown directive: " + cmd+arr[0]; } break; case "header": case "footer": var footerStr = tokenizer.getMeat(restOfString, 0, restOfString.length); footerStr = restOfString.substring(footerStr.start, footerStr.end); if (footerStr.charAt(0) === '"' && footerStr.charAt(footerStr.length-1) === '"' ) footerStr = footerStr.substring(1, footerStr.length-1); var footerArr = footerStr.split('\t'); var footer = {}; if (footerArr.length === 1) footer = { left: "", center: footerArr[0], right: "" }; else if (footerArr.length === 2) footer = { left: footerArr[0], center: footerArr[1], right: "" }; else footer = { left: footerArr[0], center: footerArr[1], right: footerArr[2] }; if (footerArr.length > 3) warn("Too many tabs in " + cmd + ": " + footerArr.length + " found.", restOfString, 0); tune.addMetaTextObj(cmd, footer); break; case "midi": var midi = tokenizer.tokenize(restOfString, 0, restOfString.length, true); if (midi.length > 0 && midi[0].token === '=') midi.shift(); if (midi.length === 0) warn("Expected midi command", restOfString, 0); else parseMidiCommand(midi, tune, restOfString); break; case "map": case "percmap": case "playtempo": case "auquality": case "continuous": case "nobarcheck": // TODO-PER: Actually handle the parameters of these tune.formatting[cmd] = restOfString; break; default: return "Unknown directive: " + cmd; } return null; }; parseDirective.globalFormatting = function(formatHash) { for (var cmd in formatHash) { if (formatHash.hasOwnProperty(cmd)) { var value = ''+formatHash[cmd]; var tokens = tokenizer.tokenize(value, 0, value.length); var scratch; switch (cmd) { case "titlefont": case "gchordfont": case "composerfont": case "footerfont": case "headerfont": case "historyfont": case "infofont": case "measurefont": case "partsfont": case "repeatfont": case "subtitlefont": case "tempofont": case "textfont": case "voicefont": case "tripletfont": case "vocalfont": case "wordsfont": case "annotationfont": getChangingFont(cmd, tokens, value); break; case "scale": setScale(cmd, tokens); break; case "partsbox": scratch = addMultilineVarBool('partsBox', cmd, tokens); if (scratch !== null) warn(scratch); multilineVars.partsfont.box = multilineVars.partsBox; break; case "freegchord": scratch = addMultilineVarBool('freegchord', cmd, tokens); if (scratch !== null) warn(scratch); default: warn("Formatting directive unrecognized: ", cmd, 0); } } } }; })(); var abc_parse_directive = parseDirective; // abc_transpose.js: Handles the automatic transposition of key signatures, chord symbols, and notes. // Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var transpose = {}; var keyIndex = { 'C': 0, 'C#': 1, 'Db': 1, 'D': 2, 'D#': 3, 'Eb': 3, 'E': 4, 'F': 5, 'F#': 6, 'Gb': 6, 'G': 7, 'G#': 8, 'Ab': 8, 'A': 9, 'A#': 10, 'Bb': 10, 'B': 11 }; var newKey = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'F#', 'G', 'Ab', 'A', 'Bb', 'B']; var newKeyMinor = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'Bb', 'B']; transpose.keySignature = function(multilineVars, keys, keyName, root, acc, localTranspose) { if (!localTranspose) localTranspose = 0; multilineVars.localTransposeVerticalMovement = 0; multilineVars.localTransposePreferFlats = false; var k = keys[keyName]; if (!k) return multilineVars.key; // If the key isn't in the list, it is non-standard. We won't attempt to transpose it. multilineVars.localTranspose = (multilineVars.globalTranspose ? multilineVars.globalTranspose : 0) + localTranspose; if (!multilineVars.localTranspose) return { accidentals: k, root: root, acc: acc }; multilineVars.globalTransposeOrigKeySig = k; if (multilineVars.localTranspose % 12 === 0) { multilineVars.localTransposeVerticalMovement = (multilineVars.localTranspose / 12) * 7; return { accidentals: k, root: root, acc: acc }; } var baseKey = keyName[0]; if (keyName[1] === 'b' || keyName[1] === '#') { baseKey += keyName[1]; keyName = keyName.substr(2); } else keyName = keyName.substr(1); var index = keyIndex[baseKey] + multilineVars.localTranspose; while (index < 0) index += 12; if (index > 11) index = index % 12; var newKeyName = (keyName[0] === 'm' ? newKeyMinor[index] : newKey[index]); var transposedKey = newKeyName + keyName; var newKeySig = keys[transposedKey]; if (newKeySig.length > 0 && newKeySig[0].acc === 'flat') multilineVars.localTransposePreferFlats = true; var distance = transposedKey.charCodeAt(0) - baseKey.charCodeAt(0); if (multilineVars.localTranspose > 0) { if (distance < 0) distance += 7; else if (distance === 0) { // There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A. // If the distance is positive (we are raising pitch), and the change is higher (that is, Ab -> A), then raise an octave. // This test is easier because we know the keys are not equal (or we wouldn't get this far), so if the base key is a flat key, then // the transposed key must be higher. Likewise, if the transposed key is sharp, then the base key must be lower. And one // of those two things must be true because they are not both natural. if (baseKey[1] === '#' || transposedKey[1] === 'b') distance += 7; } } else if (multilineVars.localTranspose < 0) { if (distance > 0) distance -= 7; else if (distance === 0) { // There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A. // If the distance is negative (we are dropping pitch), and the change is lower (that is, A -> Ab), then drop an octave. if (baseKey[1] === 'b' || transposedKey[1] === '#') distance -= 7; } } if (multilineVars.localTranspose > 0) multilineVars.localTransposeVerticalMovement = distance + Math.floor(multilineVars.localTranspose / 12) * 7; else multilineVars.localTransposeVerticalMovement = distance + Math.ceil(multilineVars.localTranspose / 12) * 7; return { accidentals: newKeySig, root: newKeyName[0], acc: newKeyName.length > 1 ? newKeyName[1] : "" }; }; var sharpChords = [ 'C', 'C♯', 'D', "D♯", 'E', 'F', "F♯", 'G', 'G♯', 'A', 'A♯', 'B']; var flatChords = [ 'C', 'D♭', 'D', 'E♭', 'E', 'F', 'G♭', 'G', 'A♭', 'A', 'B♭', 'B']; var sharpChordsFree = [ 'C', 'C#', 'D', "D#", 'E', 'F', "F#", 'G', 'G#', 'A', 'A#', 'B']; var flatChordsFree = [ 'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B']; transpose.chordName = function(multilineVars, chord) { if (multilineVars.localTranspose && (multilineVars.localTranspose % 12 !== 0)) { // The chords are the same if it is an exact octave change. var transposeFactor = multilineVars.localTranspose; while (transposeFactor < 0) transposeFactor += 12; if (transposeFactor > 11) transposeFactor = transposeFactor % 12; if (multilineVars.freegchord) { chord = chord.replace(/Cb/g, "`~11`"); chord = chord.replace(/Db/g, "`~1`"); chord = chord.replace(/Eb/g, "`~3`"); chord = chord.replace(/Fb/g, "`~4`"); chord = chord.replace(/Gb/g, "`~6`"); chord = chord.replace(/Ab/g, "`~8`"); chord = chord.replace(/Bb/g, "`~10`"); chord = chord.replace(/C#/g, "`~1`"); chord = chord.replace(/D#/g, "`~3`"); chord = chord.replace(/E#/g, "`~5`"); chord = chord.replace(/F#/g, "`~6`"); chord = chord.replace(/G#/g, "`~8`"); chord = chord.replace(/A#/g, "`~10`"); chord = chord.replace(/B#/g, "`~0`"); } else { chord = chord.replace(/C♭/g, "`~11`"); chord = chord.replace(/D♭/g, "`~1`"); chord = chord.replace(/E♭/g, "`~3`"); chord = chord.replace(/F♭/g, "`~4`"); chord = chord.replace(/G♭/g, "`~6`"); chord = chord.replace(/A♭/g, "`~8`"); chord = chord.replace(/B♭/g, "`~10`"); chord = chord.replace(/C♯/g, "`~1`"); chord = chord.replace(/D♯/g, "`~3`"); chord = chord.replace(/E♯/g, "`~5`"); chord = chord.replace(/F♯/g, "`~6`"); chord = chord.replace(/G♯/g, "`~8`"); chord = chord.replace(/A♯/g, "`~10`"); chord = chord.replace(/B♯/g, "`~0`"); } chord = chord.replace(/C/g, "`~0`"); chord = chord.replace(/D/g, "`~2`"); chord = chord.replace(/E/g, "`~4`"); chord = chord.replace(/F/g, "`~5`"); chord = chord.replace(/G/g, "`~7`"); chord = chord.replace(/A/g, "`~9`"); chord = chord.replace(/B/g, "`~11`"); var arr = chord.split("`"); for (var i = 0; i < arr.length; i++) { if (arr[i][0] === '~') { var chordNum = parseInt(arr[i].substr(1),10); chordNum += transposeFactor; if (chordNum > 11) chordNum -= 12; if (multilineVars.freegchord) arr[i] = multilineVars.localTransposePreferFlats ? flatChordsFree[chordNum] : sharpChordsFree[chordNum]; else arr[i] = multilineVars.localTransposePreferFlats ? flatChords[chordNum] : sharpChords[chordNum]; } } chord = arr.join(""); } return chord; }; var pitchToLetter = [ 'c', 'd', 'e', 'f', 'g', 'a', 'b' ]; function accidentalChange(origPitch, newPitch, accidental, origKeySig, newKeySig) { var origPitchLetter = pitchToLetter[(origPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing. var origAccidental = 0; for (var i = 0; i < origKeySig.length; i++) { if (origKeySig[i].note.toLowerCase() === origPitchLetter) origAccidental = accidentals[origKeySig[i].acc]; } var currentAccidental = accidentals[accidental]; var delta = currentAccidental - origAccidental; var newPitchLetter = pitchToLetter[(newPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing. var newAccidental = 0; for (var j = 0; j < newKeySig.accidentals.length; j++) { if (newKeySig.accidentals[j].note.toLowerCase() === newPitchLetter) newAccidental = accidentals[newKeySig.accidentals[j].acc]; } var calcAccidental = delta + newAccidental; if (calcAccidental < -2) { newPitch--; calcAccidental += (newPitchLetter === 'c' || newPitchLetter === 'f') ? 1 : 2; } if (calcAccidental > 2) { newPitch++; calcAccidental -= (newPitchLetter === 'b' || newPitchLetter === 'e') ? 1 : 2; } return [newPitch, calcAccidental]; } var accidentals = { dblflat: -2, flat: -1, natural: 0, sharp: 1, dblsharp: 2 }; var accidentals2 = { "-2": "dblflat", "-1": "flat", "0": "natural", "1": "sharp", "2": "dblsharp" }; transpose.note = function(multilineVars, el) { // the "el" that is passed in has el.accidental, and el.pitch. "pitch" is the vertical position (0=middle C) // localTranspose is the number of half steps // localTransposeVerticalMovement is the vertical distance to move. if (!multilineVars.localTranspose) return; var origPitch = el.pitch; el.pitch = el.pitch + multilineVars.localTransposeVerticalMovement; if (el.accidental) { var ret = accidentalChange(origPitch, el.pitch, el.accidental, multilineVars.globalTransposeOrigKeySig, multilineVars.targetKey); el.pitch = ret[0]; el.accidental = accidentals2[ret[1]]; } }; var abc_transpose = transpose; /*global window */ var parseKeyVoice = {}; (function() { var tokenizer; var warn; var multilineVars; var tune; parseKeyVoice.initialize = function(tokenizer_, warn_, multilineVars_, tune_) { tokenizer = tokenizer_; warn = warn_; multilineVars = multilineVars_; tune = tune_; }; parseKeyVoice.standardKey = function(keyName, root, acc, localTranspose) { var key1sharp = {acc: 'sharp', note: 'f'}; var key2sharp = {acc: 'sharp', note: 'c'}; var key3sharp = {acc: 'sharp', note: 'g'}; var key4sharp = {acc: 'sharp', note: 'd'}; var key5sharp = {acc: 'sharp', note: 'A'}; var key6sharp = {acc: 'sharp', note: 'e'}; var key7sharp = {acc: 'sharp', note: 'B'}; var key1flat = {acc: 'flat', note: 'B'}; var key2flat = {acc: 'flat', note: 'e'}; var key3flat = {acc: 'flat', note: 'A'}; var key4flat = {acc: 'flat', note: 'd'}; var key5flat = {acc: 'flat', note: 'G'}; var key6flat = {acc: 'flat', note: 'c'}; var key7flat = {acc: 'flat', note: 'F'}; var keys = { 'C#': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], 'A#m': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], 'G#Mix': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], 'D#Dor': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], 'E#Phr': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], 'F#Lyd': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], 'B#Loc': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], 'F#': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], 'D#m': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], 'C#Mix': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], 'G#Dor': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], 'A#Phr': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], 'BLyd': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], 'E#Loc': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], 'B': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], 'G#m': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], 'F#Mix': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], 'C#Dor': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], 'D#Phr': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], 'ELyd': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], 'A#Loc': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], 'E': [ key1sharp, key2sharp, key3sharp, key4sharp ], 'C#m': [ key1sharp, key2sharp, key3sharp, key4sharp ], 'BMix': [ key1sharp, key2sharp, key3sharp, key4sharp ], 'F#Dor': [ key1sharp, key2sharp, key3sharp, key4sharp ], 'G#Phr': [ key1sharp, key2sharp, key3sharp, key4sharp ], 'ALyd': [ key1sharp, key2sharp, key3sharp, key4sharp ], 'D#Loc': [ key1sharp, key2sharp, key3sharp, key4sharp ], 'A': [ key1sharp, key2sharp, key3sharp ], 'F#m': [ key1sharp, key2sharp, key3sharp ], 'EMix': [ key1sharp, key2sharp, key3sharp ], 'BDor': [ key1sharp, key2sharp, key3sharp ], 'C#Phr': [ key1sharp, key2sharp, key3sharp ], 'DLyd': [ key1sharp, key2sharp, key3sharp ], 'G#Loc': [ key1sharp, key2sharp, key3sharp ], 'D': [ key1sharp, key2sharp ], 'Bm': [ key1sharp, key2sharp ], 'AMix': [ key1sharp, key2sharp ], 'EDor': [ key1sharp, key2sharp ], 'F#Phr': [ key1sharp, key2sharp ], 'GLyd': [ key1sharp, key2sharp ], 'C#Loc': [ key1sharp, key2sharp ], 'G': [ key1sharp ], 'Em': [ key1sharp ], 'DMix': [ key1sharp ], 'ADor': [ key1sharp ], 'BPhr': [ key1sharp ], 'CLyd': [ key1sharp ], 'F#Loc': [ key1sharp ], 'C': [], 'Am': [], 'GMix': [], 'DDor': [], 'EPhr': [], 'FLyd': [], 'BLoc': [], 'F': [ key1flat ], 'Dm': [ key1flat ], 'CMix': [ key1flat ], 'GDor': [ key1flat ], 'APhr': [ key1flat ], 'BbLyd': [ key1flat ], 'ELoc': [ key1flat ], 'Bb': [ key1flat, key2flat ], 'Gm': [ key1flat, key2flat ], 'FMix': [ key1flat, key2flat ], 'CDor': [ key1flat, key2flat ], 'DPhr': [ key1flat, key2flat ], 'EbLyd': [ key1flat, key2flat ], 'ALoc': [ key1flat, key2flat ], 'Eb': [ key1flat, key2flat, key3flat ], 'Cm': [ key1flat, key2flat, key3flat ], 'BbMix': [ key1flat, key2flat, key3flat ], 'FDor': [ key1flat, key2flat, key3flat ], 'GPhr': [ key1flat, key2flat, key3flat ], 'AbLyd': [ key1flat, key2flat, key3flat ], 'DLoc': [ key1flat, key2flat, key3flat ], 'Ab': [ key1flat, key2flat, key3flat, key4flat ], 'Fm': [ key1flat, key2flat, key3flat, key4flat ], 'EbMix': [ key1flat, key2flat, key3flat, key4flat ], 'BbDor': [ key1flat, key2flat, key3flat, key4flat ], 'CPhr': [ key1flat, key2flat, key3flat, key4flat ], 'DbLyd': [ key1flat, key2flat, key3flat, key4flat ], 'GLoc': [ key1flat, key2flat, key3flat, key4flat ], 'Db': [ key1flat, key2flat, key3flat, key4flat, key5flat ], 'Bbm': [ key1flat, key2flat, key3flat, key4flat, key5flat ], 'AbMix': [ key1flat, key2flat, key3flat, key4flat, key5flat ], 'EbDor': [ key1flat, key2flat, key3flat, key4flat, key5flat ], 'FPhr': [ key1flat, key2flat, key3flat, key4flat, key5flat ], 'GbLyd': [ key1flat, key2flat, key3flat, key4flat, key5flat ], 'CLoc': [ key1flat, key2flat, key3flat, key4flat, key5flat ], 'Gb': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], 'Ebm': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], 'DbMix': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], 'AbDor': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], 'BbPhr': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], 'CbLyd': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], 'FLoc': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], 'Cb': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], 'Abm': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], 'GbMix': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], 'DbDor': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], 'EbPhr': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], 'FbLyd': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], 'BbLoc': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], // The following are not in the 2.0 spec, but seem normal enough. // TODO-PER: These SOUND the same as what's written, but they aren't right 'A#': [ key1flat, key2flat ], 'B#': [], 'D#': [ key1flat, key2flat, key3flat ], 'E#': [ key1flat ], 'G#': [ key1flat, key2flat, key3flat, key4flat ], 'Gbm': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ] }; return abc_transpose.keySignature(multilineVars, keys, keyName, root, acc, localTranspose); }; var clefLines = { 'treble': { clef: 'treble', pitch: 4, mid: 0 }, 'treble+8': { clef: 'treble+8', pitch: 4, mid: 0 }, 'treble-8': { clef: 'treble-8', pitch: 4, mid: 0 }, 'treble^8': { clef: 'treble+8', pitch: 4, mid: 0 }, 'treble_8': { clef: 'treble-8', pitch: 4, mid: 0 }, 'treble1': { clef: 'treble', pitch: 2, mid: 2 }, 'treble2': { clef: 'treble', pitch: 4, mid: 0 }, 'treble3': { clef: 'treble', pitch: 6, mid: -2 }, 'treble4': { clef: 'treble', pitch: 8, mid: -4 }, 'treble5': { clef: 'treble', pitch: 10, mid: -6 }, 'perc': { clef: 'perc', pitch: 6, mid: 0 }, 'none': { clef: 'none', mid: 0 }, 'bass': { clef: 'bass', pitch: 8, mid: -12 }, 'bass+8': { clef: 'bass+8', pitch: 8, mid: -12 }, 'bass-8': { clef: 'bass-8', pitch: 8, mid: -12 }, 'bass^8': { clef: 'bass+8', pitch: 8, mid: -12 }, 'bass_8': { clef: 'bass-8', pitch: 8, mid: -12 }, 'bass+16': { clef: 'bass', pitch: 8, mid: -12 }, 'bass-16': { clef: 'bass', pitch: 8, mid: -12 }, 'bass^16': { clef: 'bass', pitch: 8, mid: -12 }, 'bass_16': { clef: 'bass', pitch: 8, mid: -12 }, 'bass1': { clef: 'bass', pitch: 2, mid: -6 }, 'bass2': { clef: 'bass', pitch: 4, mid: -8 }, 'bass3': { clef: 'bass', pitch: 6, mid: -10 }, 'bass4': { clef: 'bass', pitch: 8, mid: -12 }, 'bass5': { clef: 'bass', pitch: 10, mid: -14 }, 'tenor': { clef: 'alto', pitch: 8, mid: -8 }, 'tenor1': { clef: 'alto', pitch: 2, mid: -2 }, 'tenor2': { clef: 'alto', pitch: 4, mid: -4 }, 'tenor3': { clef: 'alto', pitch: 6, mid: -6 }, 'tenor4': { clef: 'alto', pitch: 8, mid: -8 }, 'tenor5': { clef: 'alto', pitch: 10, mid: -10 }, 'alto': { clef: 'alto', pitch: 6, mid: -6 }, 'alto1': { clef: 'alto', pitch: 2, mid: -2 }, 'alto2': { clef: 'alto', pitch: 4, mid: -4 }, 'alto3': { clef: 'alto', pitch: 6, mid: -6 }, 'alto4': { clef: 'alto', pitch: 8, mid: -8 }, 'alto5': { clef: 'alto', pitch: 10, mid: -10 }, 'alto+8': { clef: 'alto+8', pitch: 6, mid: -6 }, 'alto-8': { clef: 'alto-8', pitch: 6, mid: -6 }, 'alto^8': { clef: 'alto+8', pitch: 6, mid: -6 }, 'alto_8': { clef: 'alto-8', pitch: 6, mid: -6 } }; var calcMiddle = function(clef, oct) { var value = clefLines[clef]; var mid = value ? value.mid : 0; return mid+oct; }; parseKeyVoice.fixClef = function(clef) { var value = clefLines[clef.type]; if (value) { clef.clefPos = value.pitch; clef.type = value.clef; } }; parseKeyVoice.deepCopyKey = function(key) { var ret = { accidentals: [], root: key.root, acc: key.acc, mode: key.mode }; abc_common.each(key.accidentals, function(k) { ret.accidentals.push(abc_common.clone(k)); }); return ret; }; var pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11}; parseKeyVoice.addPosToKey = function(clef, key) { // Shift the key signature from the treble positions to whatever position is needed for the clef. // This may put the key signature unnaturally high or low, so if it does, then shift it. var mid = clef.verticalPos; abc_common.each(key.accidentals, function(acc) { var pitch = pitches[acc.note]; pitch = pitch - mid; acc.verticalPos = pitch; }); if (key.impliedNaturals) abc_common.each(key.impliedNaturals, function(acc) { var pitch = pitches[acc.note]; pitch = pitch - mid; acc.verticalPos = pitch; }); if (mid < -10) { abc_common.each(key.accidentals, function(acc) { acc.verticalPos -= 7; if (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat')) acc.verticalPos -= 7; if (acc.note === 'A' && acc.acc === 'sharp' ) acc.verticalPos -=7; if ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' ) acc.verticalPos -=7; }); if (key.impliedNaturals) abc_common.each(key.impliedNaturals, function(acc) { acc.verticalPos -= 7; if (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat')) acc.verticalPos -= 7; if (acc.note === 'A' && acc.acc === 'sharp' ) acc.verticalPos -=7; if ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' ) acc.verticalPos -=7; }); } else if (mid < -4) { abc_common.each(key.accidentals, function(acc) { acc.verticalPos -= 7; if (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' ) acc.verticalPos -=7; }); if (key.impliedNaturals) abc_common.each(key.impliedNaturals, function(acc) { acc.verticalPos -= 7; if (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' ) acc.verticalPos -=7; }); } else if (mid >= 7) { abc_common.each(key.accidentals, function(acc) { acc.verticalPos += 7; }); if (key.impliedNaturals) abc_common.each(key.impliedNaturals, function(acc) { acc.verticalPos += 7; }); } }; parseKeyVoice.fixKey = function(clef, key) { var fixedKey = abc_common.clone(key); parseKeyVoice.addPosToKey(clef, fixedKey); return fixedKey; }; var parseMiddle = function(str) { var i = 0; var p = str.charAt(i++); if (p === '^' || p === '_') p = str.charAt(i++); var mid = pitches[p]; if (mid === undefined) mid = 6; // If a legal middle note wasn't received, just ignore it. for ( ; i < str.length; i++) { if (str.charAt(i) === ',') mid -= 7; else if (str.charAt(i) === "'") mid += 7; else break; } return { mid: mid - 6, str: str.substring(i) }; // We get the note in the middle of the staff. We want the note that appears as the first ledger line below the staff. }; var normalizeAccidentals = function(accs) { for (var i = 0; i < accs.length; i++) { if (accs[i].note === 'b') accs[i].note = 'B'; else if (accs[i].note === 'a') accs[i].note = 'A'; else if (accs[i].note === 'F') accs[i].note = 'f'; else if (accs[i].note === 'E') accs[i].note = 'e'; else if (accs[i].note === 'D') accs[i].note = 'd'; else if (accs[i].note === 'C') accs[i].note = 'c'; else if (accs[i].note === 'G' && accs[i].acc === 'sharp') accs[i].note = 'g'; else if (accs[i].note === 'g' && accs[i].acc === 'flat') accs[i].note = 'G'; } }; parseKeyVoice.parseKey = function(str) // (and clef) { // returns: // { foundClef: true, foundKey: true } // Side effects: // calls warn() when there is a syntax error // sets these members of multilineVars: // clef // key // style // // The format is: // K: [⟨key⟩] [⟨modifiers⟩*] // modifiers are any of the following in any order: // [⟨clef⟩] [middle=⟨pitch⟩] [transpose=[-]⟨number⟩] [stafflines=⟨number⟩] [staffscale=⟨number⟩][style=⟨style⟩] // key is none|HP|Hp|⟨specified_key⟩ // clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8] // specified_key is ⟨pitch⟩[#|b][mode(first three chars are significant)][accidentals*] if (str.length === 0) { // an empty K: field is the same as K:none str = 'none'; } var tokens = tokenizer.tokenize(str, 0, str.length); var ret = {}; // first the key switch (tokens[0].token) { case 'HP': abc_parse_directive.addDirective("bagpipes"); multilineVars.key = { root: "HP", accidentals: [], acc: "", mode: "" }; ret.foundKey = true; tokens.shift(); break; case 'Hp': abc_parse_directive.addDirective("bagpipes"); multilineVars.key = { root: "Hp", accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}], acc: "", mode: "" }; ret.foundKey = true; tokens.shift(); break; case 'none': // we got the none key - that's the same as C to us multilineVars.key = { root: "none", accidentals: [], acc: "", mode: "" }; ret.foundKey = true; tokens.shift(); break; default: var retPitch = tokenizer.getKeyPitch(tokens[0].token); if (retPitch.len > 0) { ret.foundKey = true; var acc = ""; var mode = ""; // The accidental and mode might be attached to the pitch, so we might want to just remove the first character. if (tokens[0].token.length > 1) tokens[0].token = tokens[0].token.substring(1); else tokens.shift(); var key = retPitch.token; // We got a pitch to start with, so we might also have an accidental and a mode if (tokens.length > 0) { var retAcc = tokenizer.getSharpFlat(tokens[0].token); if (retAcc.len > 0) { if (tokens[0].token.length > 1) tokens[0].token = tokens[0].token.substring(1); else tokens.shift(); key += retAcc.token; acc = retAcc.token; } if (tokens.length > 0) { var retMode = tokenizer.getMode(tokens[0].token); if (retMode.len > 0) { tokens.shift(); key += retMode.token; mode = retMode.token; } } // Be sure that the key specified is in the list: not all keys are physically possible, like Cbmin. if (parseKeyVoice.standardKey(key, retPitch.token, acc, 0) === undefined) { warn("Unsupported key signature: " + key, str, 0); return ret; } } // We need to do a deep copy because we are going to modify it var oldKey = parseKeyVoice.deepCopyKey(multilineVars.key); //TODO-PER: HACK! To get the local transpose to work, the transposition is done for each line. This caused the global transposition variable to be factored in twice, so, instead of rewriting that right now, I'm just subtracting one of them here. var keyCompensate = multilineVars.globalTranspose ? -multilineVars.globalTranspose : 0; multilineVars.key = parseKeyVoice.deepCopyKey(parseKeyVoice.standardKey(key, retPitch.token, acc, keyCompensate)); multilineVars.key.mode = mode; if (oldKey) { // Add natural in all places that the old key had an accidental. var kk; for (var k = 0; k < multilineVars.key.accidentals.length; k++) { for (kk = 0; kk < oldKey.accidentals.length; kk++) { if (oldKey.accidentals[kk].note && multilineVars.key.accidentals[k].note.toLowerCase() === oldKey.accidentals[kk].note.toLowerCase()) oldKey.accidentals[kk].note = null; } } for (kk = 0; kk < oldKey.accidentals.length; kk++) { if (oldKey.accidentals[kk].note) { if (!multilineVars.key.impliedNaturals) multilineVars.key.impliedNaturals = []; multilineVars.key.impliedNaturals.push({ acc: 'natural', note: oldKey.accidentals[kk].note }); } } } } break; } // There are two special cases of deprecated syntax. Ignore them if they occur if (tokens.length === 0) return ret; if (tokens[0].token === 'exp') tokens.shift(); if (tokens.length === 0) return ret; if (tokens[0].token === 'oct') tokens.shift(); // now see if there are extra accidentals if (tokens.length === 0) return ret; var accs = tokenizer.getKeyAccidentals2(tokens); if (accs.warn) warn(accs.warn, str, 0); // If we have extra accidentals, first replace ones that are of the same pitch before adding them to the end. if (accs.accs) { if (!ret.foundKey) { // if there are only extra accidentals, make sure this is set. ret.foundKey = true; multilineVars.key = { root: "none", acc: "", mode: "", accidentals: [] }; } normalizeAccidentals(accs.accs); for (var i = 0; i < accs.accs.length; i++) { var found = false; for (var j = 0; j < multilineVars.key.accidentals.length && !found; j++) { if (multilineVars.key.accidentals[j].note === accs.accs[i].note) { found = true; if (multilineVars.key.accidentals[j].acc !== accs.accs[i].acc) { // If the accidental is different, then replace it. If it is the same, then the declaration was redundant, so just ignore it. multilineVars.key.accidentals[j].acc = accs.accs[i].acc; if (!multilineVars.key.explicitAccidentals) multilineVars.key.explicitAccidentals = []; multilineVars.key.explicitAccidentals.push(accs.accs[i]); } } } if (!found) { if (!multilineVars.key.explicitAccidentals) multilineVars.key.explicitAccidentals = []; multilineVars.key.explicitAccidentals.push(accs.accs[i]); multilineVars.key.accidentals.push(accs.accs[i]); if (multilineVars.key.impliedNaturals) { for (var kkk = 0; kkk < multilineVars.key.impliedNaturals.length; kkk++) { if (multilineVars.key.impliedNaturals[kkk].note === accs.accs[i].note) multilineVars.key.impliedNaturals.splice(kkk, 1); } } } } } // Now see if any optional parameters are present. They have the form "key=value", except that "clef=" is optional var token; while (tokens.length > 0) { switch (tokens[0].token) { case "m": case "middle": tokens.shift(); if (tokens.length === 0) { warn("Expected = after middle", str, 0); return ret; } token = tokens.shift(); if (token.token !== "=") { warn("Expected = after middle", str, token.start); break; } if (tokens.length === 0) { warn("Expected parameter after middle=", str, 0); return ret; } var pitch = tokenizer.getPitchFromTokens(tokens); if (pitch.warn) warn(pitch.warn, str, 0); if (pitch.position) multilineVars.clef.verticalPos = pitch.position - 6; // we get the position from the middle line, but want to offset it to the first ledger line. break; case "transpose": tokens.shift(); if (tokens.length === 0) { warn("Expected = after transpose", str, 0); return ret; } token = tokens.shift(); if (token.token !== "=") { warn("Expected = after transpose", str, token.start); break; } if (tokens.length === 0) { warn("Expected parameter after transpose=", str, 0); return ret; } if (tokens[0].type !== 'number') { warn("Expected number after transpose", str, tokens[0].start); break; } multilineVars.clef.transpose = tokens[0].intt; tokens.shift(); break; case "stafflines": tokens.shift(); if (tokens.length === 0) { warn("Expected = after stafflines", str, 0); return ret; } token = tokens.shift(); if (token.token !== "=") { warn("Expected = after stafflines", str, token.start); break; } if (tokens.length === 0) { warn("Expected parameter after stafflines=", str, 0); return ret; } if (tokens[0].type !== 'number') { warn("Expected number after stafflines", str, tokens[0].start); break; } multilineVars.clef.stafflines = tokens[0].intt; tokens.shift(); break; case "staffscale": tokens.shift(); if (tokens.length === 0) { warn("Expected = after staffscale", str, 0); return ret; } token = tokens.shift(); if (token.token !== "=") { warn("Expected = after staffscale", str, token.start); break; } if (tokens.length === 0) { warn("Expected parameter after staffscale=", str, 0); return ret; } if (tokens[0].type !== 'number') { warn("Expected number after staffscale", str, tokens[0].start); break; } multilineVars.clef.staffscale = tokens[0].floatt; tokens.shift(); break; case "style": tokens.shift(); if (tokens.length === 0) { warn("Expected = after style", str, 0); return ret; } token = tokens.shift(); if (token.token !== "=") { warn("Expected = after style", str, token.start); break; } if (tokens.length === 0) { warn("Expected parameter after style=", str, 0); return ret; } switch (tokens[0].token) { case "normal": case "harmonic": case "rhythm": case "x": multilineVars.style = tokens[0].token; tokens.shift(); break; default: warn("error parsing style element: " + tokens[0].token, str, tokens[0].start); break; } break; case "clef": tokens.shift(); if (tokens.length === 0) { warn("Expected = after clef", str, 0); return ret; } token = tokens.shift(); if (token.token !== "=") { warn("Expected = after clef", str, token.start); break; } if (tokens.length === 0) { warn("Expected parameter after clef=", str, 0); return ret; } //break; yes, we want to fall through. That allows "clef=" to be optional. case "treble": case "bass": case "alto": case "tenor": case "perc": // clef is [clef=] [⟨clef type⟩] [⟨line number⟩] [+8|-8] var clef = tokens.shift(); switch (clef.token) { case 'treble': case 'tenor': case 'alto': case 'bass': case 'perc': case 'none': break; case 'C': clef.token = 'alto'; break; case 'F': clef.token = 'bass'; break; case 'G': clef.token = 'treble'; break; case 'c': clef.token = 'alto'; break; case 'f': clef.token = 'bass'; break; case 'g': clef.token = 'treble'; break; default: warn("Expected clef name. Found " + clef.token, str, clef.start); break; } if (tokens.length > 0 && tokens[0].type === 'number') { clef.token += tokens[0].token; tokens.shift(); } if (tokens.length > 1 && (tokens[0].token === '-' || tokens[0].token === '+' || tokens[0].token === '^' || tokens[0].token === '_') && tokens[1].token === '8') { clef.token += tokens[0].token + tokens[1].token; tokens.shift(); tokens.shift(); } multilineVars.clef = {type: clef.token, verticalPos: calcMiddle(clef.token, 0)}; if (multilineVars.currentVoice && multilineVars.currentVoice.transpose !== undefined) multilineVars.clef.transpose = multilineVars.currentVoice.transpose; ret.foundClef = true; break; default: warn("Unknown parameter: " + tokens[0].token, str, tokens[0].start); tokens.shift(); } } return ret; }; var setCurrentVoice = function(id) { multilineVars.currentVoice = multilineVars.voices[id]; tune.setCurrentVoice(multilineVars.currentVoice.staffNum, multilineVars.currentVoice.index); }; parseKeyVoice.parseVoice = function(line, i, e) { //First truncate the string to the first non-space character after V: through either the //end of the line or a % character. Then remove trailing spaces, too. var ret = tokenizer.getMeat(line, i, e); var start = ret.start; var end = ret.end; //The first thing on the line is the ID. It can be any non-space string and terminates at the //first space. var id = tokenizer.getToken(line, start, end); if (id.length === 0) { warn("Expected a voice id", line, start); return; } var isNew = false; if (multilineVars.voices[id] === undefined) { multilineVars.voices[id] = {}; isNew = true; if (multilineVars.score_is_present) warn("Can't have an unknown V: id when the %score directive is present", line, start); } start += id.length; start += tokenizer.eatWhiteSpace(line, start); var staffInfo = {startStaff: isNew}; var addNextTokenToStaffInfo = function(name) { var attr = tokenizer.getVoiceToken(line, start, end); if (attr.warn !== undefined) warn("Expected value for " + name + " in voice: " + attr.warn, line, start); else if (attr.token.length === 0 && line.charAt(start) !== '"') warn("Expected value for " + name + " in voice", line, start); else staffInfo[name] = attr.token; start += attr.len; }; var addNextTokenToVoiceInfo = function(id, name, type) { var attr = tokenizer.getVoiceToken(line, start, end); if (attr.warn !== undefined) warn("Expected value for " + name + " in voice: " + attr.warn, line, start); else if (attr.token.length === 0 && line.charAt(start) !== '"') warn("Expected value for " + name + " in voice", line, start); else { if (type === 'number') attr.token = parseFloat(attr.token); multilineVars.voices[id][name] = attr.token; } start += attr.len; }; var getNextToken = function(name, type) { var attr = tokenizer.getVoiceToken(line, start, end); if (attr.warn !== undefined) warn("Expected value for " + name + " in voice: " + attr.warn, line, start); else if (attr.token.length === 0 && line.charAt(start) !== '"') warn("Expected value for " + name + " in voice", line, start); else { if (type === 'number') attr.token = parseFloat(attr.token); return attr.token; } start += attr.len; }; var addNextNoteTokenToVoiceInfo = function(id, name) { var noteToTransposition = { "_B": 2, "_E": 9, "_b": -10, "_e": -3 }; var attr = tokenizer.getVoiceToken(line, start, end); if (attr.warn !== undefined) warn("Expected one of (_B, _E, _b, _e) for " + name + " in voice: " + attr.warn, line, start); else if (attr.token.length === 0 && line.charAt(start) !== '"') warn("Expected one of (_B, _E, _b, _e) for " + name + " in voice", line, start); else { var t = noteToTransposition[attr.token]; if (!t) warn("Expected one of (_B, _E, _b, _e) for " + name + " in voice", line, start); else multilineVars.voices[id][name] = t; } start += attr.len; }; //Then the following items can occur in any order: while (start < end) { var token = tokenizer.getVoiceToken(line, start, end); start += token.len; if (token.warn) { warn("Error parsing voice: " + token.warn, line, start); } else { var attr = null; switch (token.token) { case 'clef': case 'cl': addNextTokenToStaffInfo('clef'); // TODO-PER: check for a legal clef; do octavizing var oct = 0; // for (var ii = 0; ii < staffInfo.clef.length; ii++) { // if (staffInfo.clef[ii] === ',') oct -= 7; // else if (staffInfo.clef[ii] === "'") oct += 7; // } if (staffInfo.clef !== undefined) { staffInfo.clef = staffInfo.clef.replace(/[',]/g, ""); //'//comment for emacs formatting of regexp if (staffInfo.clef.indexOf('+16') !== -1) { oct += 14; staffInfo.clef = staffInfo.clef.replace('+16', ''); } staffInfo.verticalPos = calcMiddle(staffInfo.clef, oct); } break; case 'treble': case 'bass': case 'tenor': case 'alto': case 'perc': case 'none': case 'treble\'': case 'bass\'': case 'tenor\'': case 'alto\'': case 'none\'': case 'treble\'\'': case 'bass\'\'': case 'tenor\'\'': case 'alto\'\'': case 'none\'\'': case 'treble,': case 'bass,': case 'tenor,': case 'alto,': case 'none,': case 'treble,,': case 'bass,,': case 'tenor,,': case 'alto,,': case 'none,,': // TODO-PER: handle the octave indicators on the clef by changing the middle property var oct2 = 0; // for (var iii = 0; iii < token.token.length; iii++) { // if (token.token[iii] === ',') oct2 -= 7; // else if (token.token[iii] === "'") oct2 += 7; // } staffInfo.clef = token.token.replace(/[',]/g, ""); //'//comment for emacs formatting of regexp staffInfo.verticalPos = calcMiddle(staffInfo.clef, oct2); multilineVars.voices[id].clef = token.token; break; case 'staves': case 'stave': case 'stv': addNextTokenToStaffInfo('staves'); break; case 'brace': case 'brc': addNextTokenToStaffInfo('brace'); break; case 'bracket': case 'brk': addNextTokenToStaffInfo('bracket'); break; case 'name': case 'nm': addNextTokenToStaffInfo('name'); break; case 'subname': case 'sname': case 'snm': addNextTokenToStaffInfo('subname'); break; case 'merge': staffInfo.startStaff = false; break; case 'stem': case 'stems': attr = tokenizer.getVoiceToken(line, start, end); if (attr.warn !== undefined) warn("Expected value for stems in voice: " + attr.warn, line, start); else if (attr.token === 'up' || attr.token === 'down') multilineVars.voices[id].stem = attr.token; else warn("Expected up or down for voice stem", line, start); start += attr.len; break; case 'up': case 'down': multilineVars.voices[id].stem = token.token; break; case 'middle': case 'm': addNextTokenToStaffInfo('verticalPos'); staffInfo.verticalPos = parseMiddle(staffInfo.verticalPos).mid; break; case 'gchords': case 'gch': multilineVars.voices[id].suppressChords = true; // gchords can stand on its own, or it could be gchords=0. attr = tokenizer.getVoiceToken(line, start, end); if (attr.token === "0") start = start + attr.len; break; case 'space': case 'spc': addNextTokenToStaffInfo('spacing'); break; case 'scale': addNextTokenToVoiceInfo(id, 'scale', 'number'); break; case 'score': addNextNoteTokenToVoiceInfo(id, 'scoreTranspose'); break; case 'transpose': addNextTokenToVoiceInfo(id, 'transpose', 'number'); break; case 'stafflines': addNextTokenToVoiceInfo(id, 'stafflines', 'number'); break; case 'staffscale': // TODO-PER: This is passed to the engraver, but the engraver ignores it. addNextTokenToVoiceInfo(id, 'staffscale', 'number'); break; case 'octave': // TODO-PER: This is accepted, but not implemented, yet. addNextTokenToVoiceInfo(id, 'octave', 'number'); break; case 'volume': // TODO-PER: This is accepted, but not implemented, yet. addNextTokenToVoiceInfo(id, 'volume', 'number'); break; case 'cue': // TODO-PER: This is accepted, but not implemented, yet. var cue = getNextToken('cue', 'string'); if (cue === 'on') multilineVars.voices[id].scale = 0.6; else multilineVars.voices[id].scale = 1; break; case "style": attr = tokenizer.getVoiceToken(line, start, end); if (attr.warn !== undefined) warn("Expected value for style in voice: " + attr.warn, line, start); else if (attr.token === 'normal' || attr.token === 'harmonic' || attr.token === 'rhythm' || attr.token === 'x') multilineVars.voices[id].style = attr.token; else warn("Expected one of [normal, harmonic, rhythm, x] for voice style", line, start); start += attr.len; break; // default: // Use this to find V: usages that aren't handled. // console.log("parse voice", token, tune.metaText.title); } } start += tokenizer.eatWhiteSpace(line, start); } // now we've filled up staffInfo, figure out what to do with this voice // TODO-PER: It is unclear from the standard and the examples what to do with brace, bracket, and staves, so they are ignored for now. if (staffInfo.startStaff || multilineVars.staves.length === 0) { multilineVars.staves.push({index: multilineVars.staves.length, meter: multilineVars.origMeter}); if (!multilineVars.score_is_present) multilineVars.staves[multilineVars.staves.length-1].numVoices = 0; } if (multilineVars.voices[id].staffNum === undefined) { // store where to write this for quick access later. multilineVars.voices[id].staffNum = multilineVars.staves.length-1; var vi = 0; for(var v in multilineVars.voices) { if(multilineVars.voices.hasOwnProperty(v)) { if (multilineVars.voices[v].staffNum === multilineVars.voices[id].staffNum) vi++; } } multilineVars.voices[id].index = vi-1; } var s = multilineVars.staves[multilineVars.voices[id].staffNum]; if (!multilineVars.score_is_present) s.numVoices++; if (staffInfo.clef) s.clef = {type: staffInfo.clef, verticalPos: staffInfo.verticalPos}; if (staffInfo.spacing) s.spacing_below_offset = staffInfo.spacing; if (staffInfo.verticalPos) s.verticalPos = staffInfo.verticalPos; if (staffInfo.name) {if (s.name) s.name.push(staffInfo.name); else s.name = [ staffInfo.name ];} if (staffInfo.subname) {if (s.subname) s.subname.push(staffInfo.subname); else s.subname = [ staffInfo.subname ];} setCurrentVoice(id); }; })(); var abc_parse_key_voice = parseKeyVoice; // abc_parse_header.js: parses a the header fields from a string representing ABC Music Notation into a usable internal structure. // Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /*global window */ var ParseHeader = function(tokenizer, warn, multilineVars, tune) { this.reset = function(tokenizer, warn, multilineVars, tune) { abc_parse_key_voice.initialize(tokenizer, warn, multilineVars, tune); abc_parse_directive.initialize(tokenizer, warn, multilineVars, tune); }; this.reset(tokenizer, warn, multilineVars, tune); this.setTitle = function(title) { if (multilineVars.hasMainTitle) tune.addSubtitle(tokenizer.translateString(tokenizer.stripComment(title))); // display secondary title else { var titleStr = tokenizer.translateString(tokenizer.theReverser(tokenizer.stripComment(title))); if (multilineVars.titlecaps) titleStr = titleStr.toUpperCase(); tune.addMetaText("title", titleStr); multilineVars.hasMainTitle = true; } }; this.setMeter = function(line) { line = tokenizer.stripComment(line); if (line === 'C') { if (multilineVars.havent_set_length === true) { multilineVars.default_length = 0.125; multilineVars.havent_set_length = false; } return {type: 'common_time'}; } else if (line === 'C|') { if (multilineVars.havent_set_length === true) { multilineVars.default_length = 0.125; multilineVars.havent_set_length = false; } return {type: 'cut_time'}; } else if (line === 'o') { if (multilineVars.havent_set_length === true) { multilineVars.default_length = 0.125; multilineVars.havent_set_length = false; } return {type: 'tempus_perfectum'}; } else if (line === 'c') { if (multilineVars.havent_set_length === true) { multilineVars.default_length = 0.125; multilineVars.havent_set_length = false; } return {type: 'tempus_imperfectum'}; } else if (line === 'o.') { if (multilineVars.havent_set_length === true) { multilineVars.default_length = 0.125; multilineVars.havent_set_length = false; } return {type: 'tempus_perfectum_prolatio'}; } else if (line === 'c.') { if (multilineVars.havent_set_length === true) { multilineVars.default_length = 0.125; multilineVars.havent_set_length = false; } return {type: 'tempus_imperfectum_prolatio'}; } else if (line.length === 0 || line.toLowerCase() === 'none') { if (multilineVars.havent_set_length === true) { multilineVars.default_length = 0.125; multilineVars.havent_set_length = false; } return null; } else { var tokens = tokenizer.tokenize(line, 0, line.length); // the form is [open_paren] decimal [ plus|dot decimal ]... [close_paren] slash decimal [plus same_as_before] try { var parseNum = function() { // handles this much: [open_paren] decimal [ plus|dot decimal ]... [close_paren] var ret = {value: 0, num: ""}; var tok = tokens.shift(); if (tok.token === '(') tok = tokens.shift(); while (1) { if (tok.type !== 'number') throw "Expected top number of meter"; ret.value += parseInt(tok.token); ret.num += tok.token; if (tokens.length === 0 || tokens[0].token === '/') return ret; tok = tokens.shift(); if (tok.token === ')') { if (tokens.length === 0 || tokens[0].token === '/') return ret; throw "Unexpected paren in meter"; } if (tok.token !== '.' && tok.token !== '+') throw "Expected top number of meter"; ret.num += tok.token; if (tokens.length === 0) throw "Expected top number of meter"; tok = tokens.shift(); } return ret; // just to suppress warning }; var parseFraction = function() { // handles this much: parseNum slash decimal var ret = parseNum(); if (tokens.length === 0) return ret; var tok = tokens.shift(); if (tok.token !== '/') throw "Expected slash in meter"; tok = tokens.shift(); if (tok.type !== 'number') throw "Expected bottom number of meter"; ret.den = tok.token; ret.value = ret.value / parseInt(ret.den); return ret; }; if (tokens.length === 0) throw "Expected meter definition in M: line"; var meter = {type: 'specified', value: [ ]}; var totalLength = 0; while (1) { var ret = parseFraction(); totalLength += ret.value; var mv = { num: ret.num }; if (ret.den !== undefined) mv.den = ret.den; meter.value.push(mv); if (tokens.length === 0) break; //var tok = tokens.shift(); //if (tok.token !== '+') throw "Extra characters in M: line"; } if (multilineVars.havent_set_length === true) { multilineVars.default_length = totalLength < 0.75 ? 0.0625 : 0.125; multilineVars.havent_set_length = false; } return meter; } catch (e) { warn(e, line, 0); } } return null; }; this.calcTempo = function(relTempo) { var dur = 1/4; if (multilineVars.meter && multilineVars.meter.type === 'specified') { dur = 1 / parseInt(multilineVars.meter.value[0].den); } else if (multilineVars.origMeter && multilineVars.origMeter.type === 'specified') { dur = 1 / parseInt(multilineVars.origMeter.value[0].den); } //var dur = multilineVars.default_length ? multilineVars.default_length : 1; for (var i = 0; i < relTempo.duration; i++) relTempo.duration[i] = dur * relTempo.duration[i]; return relTempo; }; this.resolveTempo = function() { if (multilineVars.tempo) { // If there's a tempo waiting to be resolved this.calcTempo(multilineVars.tempo); tune.metaText.tempo = multilineVars.tempo; delete multilineVars.tempo; } }; this.addUserDefinition = function(line, start, end) { var equals = line.indexOf('=', start); if (equals === -1) { warn("Need an = in a macro definition", line, start); return; } var before = abc_common.strip(line.substring(start, equals)); var after = abc_common.strip(line.substring(equals+1)); if (before.length !== 1) { warn("Macro definitions can only be one character", line, start); return; } var legalChars = "HIJKLMNOPQRSTUVWXYhijklmnopqrstuvw~"; if (legalChars.indexOf(before) === -1) { warn("Macro definitions must be H-Y, h-w, or tilde", line, start); return; } if (after.length === 0) { warn("Missing macro definition", line, start); return; } if (multilineVars.macros === undefined) multilineVars.macros = {}; multilineVars.macros[before] = after; }; this.setDefaultLength = function(line, start, end) { var len = abc_common.gsub(line.substring(start, end), " ", ""); var len_arr = len.split('/'); if (len_arr.length === 2) { var n = parseInt(len_arr[0]); var d = parseInt(len_arr[1]); if (d > 0) { multilineVars.default_length = n / d; // a whole note is 1 multilineVars.havent_set_length = false; } } else if (len_arr.length === 1 && len_arr[0] === '1') { multilineVars.default_length = 1; multilineVars.havent_set_length = false; } }; var tempoString = { larghissimo: 20, adagissimo: 24, sostenuto: 28, grave: 32, largo: 40, lento: 50, larghetto: 60, adagio: 68, adagietto: 74, andante: 80, andantino: 88, "marcia moderato": 84, "andante moderato": 100, moderato: 112, allegretto: 116, "allegro moderato": 120, allegro: 126, animato: 132, agitato: 140, veloce: 148, "mosso vivo": 156, vivace: 164, vivacissimo: 172, allegrissimo: 176, presto: 184, prestissimo: 210, }; this.setTempo = function(line, start, end) { //Q - tempo; can be used to specify the notes per minute, e.g. If //the meter denominator is a 4 note then Q:120 or Q:C=120 //is 120 quarter notes per minute. Similarly Q:C3=40 would be 40 //dotted half notes per minute. An absolute tempo may also be //set, e.g. Q:1/8=120 is 120 eighth notes per minute, //irrespective of the meter's denominator. // // This is either a number, "C=number", "Cnumber=number", or fraction [fraction...]=number // It depends on the M: field, which may either not be present, or may appear after this. // If M: is not present, an eighth note is used. // That means that this field can't be calculated until the end, if it is the first three types, since we don't know if we'll see an M: field. // So, if it is the fourth type, set it here, otherwise, save the info in the multilineVars. // The temporary variables we keep are the duration and the bpm. In the first two forms, the duration is 1. // In addition, a quoted string may both precede and follow. If a quoted string is present, then the duration part is optional. try { var tokens = tokenizer.tokenize(line, start, end); if (tokens.length === 0) throw "Missing parameter in Q: field"; var tempo = {}; var delaySet = true; var token = tokens.shift(); if (token.type === 'quote') { tempo.preString = token.token; token = tokens.shift(); if (tokens.length === 0) { // It's ok to just get a string for the tempo // If the string is a well-known tempo, put in the bpm if (tempoString[tempo.preString.toLowerCase()]) { tempo.bpm = tempoString[tempo.preString.toLowerCase()]; tempo.suppressBpm = true; } return {type: 'immediate', tempo: tempo}; } } if (token.type === 'alpha' && token.token === 'C') { // either type 2 or type 3 if (tokens.length === 0) throw "Missing tempo after C in Q: field"; token = tokens.shift(); if (token.type === 'punct' && token.token === '=') { // This is a type 2 format. The duration is an implied 1 if (tokens.length === 0) throw "Missing tempo after = in Q: field"; token = tokens.shift(); if (token.type !== 'number') throw "Expected number after = in Q: field"; tempo.duration = [1]; tempo.bpm = parseInt(token.token); } else if (token.type === 'number') { // This is a type 3 format. tempo.duration = [parseInt(token.token)]; if (tokens.length === 0) throw "Missing = after duration in Q: field"; token = tokens.shift(); if (token.type !== 'punct' || token.token !== '=') throw "Expected = after duration in Q: field"; if (tokens.length === 0) throw "Missing tempo after = in Q: field"; token = tokens.shift(); if (token.type !== 'number') throw "Expected number after = in Q: field"; tempo.bpm = parseInt(token.token); } else throw "Expected number or equal after C in Q: field"; } else if (token.type === 'number') { // either type 1 or type 4 var num = parseInt(token.token); if (tokens.length === 0 || tokens[0].type === 'quote') { // This is type 1 tempo.duration = [1]; tempo.bpm = num; } else { // This is type 4 delaySet = false; token = tokens.shift(); if (token.type !== 'punct' && token.token !== '/') throw "Expected fraction in Q: field"; token = tokens.shift(); if (token.type !== 'number') throw "Expected fraction in Q: field"; var den = parseInt(token.token); tempo.duration = [num/den]; // We got the first fraction, keep getting more as long as we find them. while (tokens.length > 0 && tokens[0].token !== '=' && tokens[0].type !== 'quote') { token = tokens.shift(); if (token.type !== 'number') throw "Expected fraction in Q: field"; num = parseInt(token.token); token = tokens.shift(); if (token.type !== 'punct' && token.token !== '/') throw "Expected fraction in Q: field"; token = tokens.shift(); if (token.type !== 'number') throw "Expected fraction in Q: field"; den = parseInt(token.token); tempo.duration.push(num/den); } token = tokens.shift(); if (token.type !== 'punct' && token.token !== '=') throw "Expected = in Q: field"; token = tokens.shift(); if (token.type !== 'number') throw "Expected tempo in Q: field"; tempo.bpm = parseInt(token.token); } } else throw "Unknown value in Q: field"; if (tokens.length !== 0) { token = tokens.shift(); if (token.type === 'quote') { tempo.postString = token.token; token = tokens.shift(); } if (tokens.length !== 0) throw "Unexpected string at end of Q: field"; } if (multilineVars.printTempo === false) tempo.suppress = true; return {type: delaySet?'delaySet':'immediate', tempo: tempo}; } catch (msg) { warn(msg, line, start); return {type: 'none'}; } }; this.letter_to_inline_header = function(line, i) { var ws = tokenizer.eatWhiteSpace(line, i); i +=ws; if (line.length >= i+5 && line.charAt(i) === '[' && line.charAt(i+2) === ':') { var e = line.indexOf(']', i); var startChar = multilineVars.iChar + i; var endChar = multilineVars.iChar + e + 1; switch(line.substring(i, i+3)) { case "[I:": var err = abc_parse_directive.addDirective(line.substring(i+3, e)); if (err) warn(err, line, i); return [ e-i+1+ws ]; case "[M:": var meter = this.setMeter(line.substring(i+3, e)); if (tune.hasBeginMusic() && meter) tune.appendStartingElement('meter', startChar, endChar, meter); else multilineVars.meter = meter; return [ e-i+1+ws ]; case "[K:": var result = abc_parse_key_voice.parseKey(line.substring(i+3, e)); if (result.foundClef && tune.hasBeginMusic()) tune.appendStartingElement('clef', startChar, endChar, multilineVars.clef); if (result.foundKey && tune.hasBeginMusic()) tune.appendStartingElement('key', startChar, endChar, abc_parse_key_voice.fixKey(multilineVars.clef, multilineVars.key)); return [ e-i+1+ws ]; case "[P:": if (tune.lines.length <= tune.lineNum) multilineVars.partForNextLine = { title: line.substring(i+3, e), startChar: startChar, endChar: endChar }; else tune.appendElement('part', startChar, endChar, {title: line.substring(i+3, e)}); return [ e-i+1+ws ]; case "[L:": this.setDefaultLength(line, i+3, e); return [ e-i+1+ws ]; case "[Q:": if (e > 0) { var tempo = this.setTempo(line, i+3, e); if (tempo.type === 'delaySet') tune.appendElement('tempo', startChar, endChar, this.calcTempo(tempo.tempo)); else if (tempo.type === 'immediate') tune.appendElement('tempo', startChar, endChar, tempo.tempo); return [ e-i+1+ws, line.charAt(i+1), line.substring(i+3, e)]; } break; case "[V:": if (e > 0) { abc_parse_key_voice.parseVoice(line, i+3, e); //startNewLine(); return [ e-i+1+ws, line.charAt(i+1), line.substring(i+3, e)]; } break; // TODO: complain about unhandled header } } return [ 0 ]; }; this.letter_to_body_header = function(line, i) { if (line.length >= i+3) { switch(line.substring(i, i+2)) { case "I:": var err = abc_parse_directive.addDirective(line.substring(i+2)); if (err) warn(err, line, i); return [ line.length ]; case "M:": var meter = this.setMeter(line.substring(i+2)); if (tune.hasBeginMusic() && meter) tune.appendStartingElement('meter', multilineVars.iChar + i, multilineVars.iChar + line.length, meter); return [ line.length ]; case "K:": var result = abc_parse_key_voice.parseKey(line.substring(i+2)); if (result.foundClef && tune.hasBeginMusic()) tune.appendStartingElement('clef', multilineVars.iChar + i, multilineVars.iChar + line.length, multilineVars.clef); if (result.foundKey && tune.hasBeginMusic()) tune.appendStartingElement('key', multilineVars.iChar + i, multilineVars.iChar + line.length, abc_parse_key_voice.fixKey(multilineVars.clef, multilineVars.key)); return [ line.length ]; case "P:": if (tune.hasBeginMusic()) tune.appendElement('part', multilineVars.iChar + i, multilineVars.iChar + line.length, {title: line.substring(i+2)}); return [ line.length ]; case "L:": this.setDefaultLength(line, i+2, line.length); return [ line.length ]; case "Q:": var e = line.indexOf('\x12', i+2); if (e === -1) e = line.length; var tempo = this.setTempo(line, i+2, e); if (tempo.type === 'delaySet') tune.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, this.calcTempo(tempo.tempo)); else if (tempo.type === 'immediate') tune.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, tempo.tempo); return [ e, line.charAt(i), abc_common.strip(line.substring(i+2))]; case "V:": abc_parse_key_voice.parseVoice(line, i+2, line.length); // startNewLine(); return [ line.length, line.charAt(i), abc_common.strip(line.substring(i+2))]; // TODO: complain about unhandled header } } return [ 0 ]; }; var metaTextHeaders = { A: 'author', B: 'book', C: 'composer', D: 'discography', F: 'url', G: 'group', I: 'instruction', N: 'notes', O: 'origin', R: 'rhythm', S: 'source', W: 'unalignedWords', Z: 'transcription' }; this.parseHeader = function(line) { if (abc_common.startsWith(line, '%%')) { var err = abc_parse_directive.addDirective(line.substring(2)); if (err) warn(err, line, 2); return {}; } var i = line.indexOf('%'); if (i >= 0) line = line.substring(0, i); line = line.replace(/\s+$/, ''); if (line.length === 0) return {}; if (line.length >= 2) { if (line.charAt(1) === ':') { var nextLine = ""; if (line.indexOf('\x12') >= 0 && line.charAt(0) !== 'w') { // w: is the only header field that can have a continuation. nextLine = line.substring(line.indexOf('\x12')+1); line = line.substring(0, line.indexOf('\x12')); //This handles a continuation mark on a header field } var field = metaTextHeaders[line.charAt(0)]; if (field !== undefined) { if (field === 'unalignedWords') tune.addMetaTextArray(field, abc_parse_directive.parseFontChangeLine(tokenizer.translateString(tokenizer.stripComment(line.substring(2))))); else tune.addMetaText(field, tokenizer.translateString(tokenizer.stripComment(line.substring(2)))); return {}; } else { var startChar = multilineVars.iChar; var endChar = startChar + line.length; switch(line.charAt(0)) { case 'H': tune.addMetaText("history", tokenizer.translateString(tokenizer.stripComment(line.substring(2)))); multilineVars.is_in_history = true; break; case 'K': // since the key is the last thing that can happen in the header, we can resolve the tempo now this.resolveTempo(); var result = abc_parse_key_voice.parseKey(line.substring(2)); if (!multilineVars.is_in_header && tune.hasBeginMusic()) { if (result.foundClef) tune.appendStartingElement('clef', startChar, endChar, multilineVars.clef); if (result.foundKey) tune.appendStartingElement('key', startChar, endChar, abc_parse_key_voice.fixKey(multilineVars.clef, multilineVars.key)); } multilineVars.is_in_header = false; // The first key signifies the end of the header. break; case 'L': this.setDefaultLength(line, 2, line.length); break; case 'M': multilineVars.origMeter = multilineVars.meter = this.setMeter(line.substring(2)); break; case 'P': // TODO-PER: There is more to do with parts, but the writer doesn't care. if (multilineVars.is_in_header) tune.addMetaText("partOrder", tokenizer.translateString(tokenizer.stripComment(line.substring(2)))); else multilineVars.partForNextLine = { title: tokenizer.translateString(tokenizer.stripComment(line.substring(2))), startChar: startChar, endChar: endChar}; break; case 'Q': var tempo = this.setTempo(line, 2, line.length); if (tempo.type === 'delaySet') multilineVars.tempo = tempo.tempo; else if (tempo.type === 'immediate') tune.metaText.tempo = tempo.tempo; break; case 'T': this.setTitle(line.substring(2)); break; case 'U': this.addUserDefinition(line, 2, line.length); break; case 'V': abc_parse_key_voice.parseVoice(line, 2, line.length); if (!multilineVars.is_in_header) return {newline: true}; break; case 's': return {symbols: true}; case 'w': return {words: true}; case 'X': break; case 'E': case 'm': warn("Ignored header", line, 0); break; default: // It wasn't a recognized header value, so parse it as music. if (nextLine.length) nextLine = "\x12" + nextLine; //parseRegularMusicLine(line+nextLine); //nextLine = ""; return {regular: true, str: line+nextLine}; } } if (nextLine.length > 0) return {recurse: true, str: nextLine}; return {}; } } // If we got this far, we have a regular line of mulsic return {regular: true, str: line}; }; }; var abc_parse_header = ParseHeader; // abc_tokenizer.js: tokenizes an ABC Music Notation string to support abc_parse. // Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // this is a series of functions that get a particular element out of the passed stream. // the return is the number of characters consumed, so 0 means that the element wasn't found. // also returned is the element found. This may be a different length because spaces may be consumed that aren't part of the string. // The return structure for most calls is { len: num_chars_consumed, token: str } var Tokenizer = function() { this.skipWhiteSpace = function(str) { for (var i = 0; i < str.length; i++) { if (!this.isWhiteSpace(str.charAt(i))) return i; } return str.length; // It must have been all white space }; var finished = function(str, i) { return i >= str.length; }; this.eatWhiteSpace = function(line, index) { for (var i = index; i < line.length; i++) { if (!this.isWhiteSpace(line.charAt(i))) return i-index; } return i-index; }; // This just gets the basic pitch letter, ignoring leading spaces, and normalizing it to a capital this.getKeyPitch = function(str) { var i = this.skipWhiteSpace(str); if (finished(str, i)) return {len: 0}; switch (str.charAt(i)) { case 'A':return {len: i+1, token: 'A'}; case 'B':return {len: i+1, token: 'B'}; case 'C':return {len: i+1, token: 'C'}; case 'D':return {len: i+1, token: 'D'}; case 'E':return {len: i+1, token: 'E'}; case 'F':return {len: i+1, token: 'F'}; case 'G':return {len: i+1, token: 'G'}; // case 'a':return {len: i+1, token: 'A'}; // case 'b':return {len: i+1, token: 'B'}; // case 'c':return {len: i+1, token: 'C'}; // case 'd':return {len: i+1, token: 'D'}; // case 'e':return {len: i+1, token: 'E'}; // case 'f':return {len: i+1, token: 'F'}; // case 'g':return {len: i+1, token: 'G'}; } return {len: 0}; }; // This just gets the basic accidental, ignoring leading spaces, and only the ones that appear in a key this.getSharpFlat = function(str) { if (str === 'bass') return {len: 0}; switch (str.charAt(0)) { case '#':return {len: 1, token: '#'}; case 'b':return {len: 1, token: 'b'}; } return {len: 0}; }; this.getMode = function(str) { var skipAlpha = function(str, start) { // This returns the index of the next non-alphabetic char, or the entire length of the string if not found. while (start < str.length && ((str.charAt(start) >= 'a' && str.charAt(start) <= 'z') || (str.charAt(start) >= 'A' && str.charAt(start) <= 'Z'))) start++; return start; }; var i = this.skipWhiteSpace(str); if (finished(str, i)) return {len: 0}; var firstThree = str.substring(i,i+3).toLowerCase(); if (firstThree.length > 1 && firstThree.charAt(1) === ' ' || firstThree.charAt(1) === '^' || firstThree.charAt(1) === '_' || firstThree.charAt(1) === '=') firstThree = firstThree.charAt(0); // This will handle the case of 'm' switch (firstThree) { case 'mix':return {len: skipAlpha(str, i), token: 'Mix'}; case 'dor':return {len: skipAlpha(str, i), token: 'Dor'}; case 'phr':return {len: skipAlpha(str, i), token: 'Phr'}; case 'lyd':return {len: skipAlpha(str, i), token: 'Lyd'}; case 'loc':return {len: skipAlpha(str, i), token: 'Loc'}; case 'aeo':return {len: skipAlpha(str, i), token: 'm'}; case 'maj':return {len: skipAlpha(str, i), token: ''}; case 'ion':return {len: skipAlpha(str, i), token: ''}; case 'min':return {len: skipAlpha(str, i), token: 'm'}; case 'm':return {len: skipAlpha(str, i), token: 'm'}; } return {len: 0}; }; this.getClef = function(str, bExplicitOnly) { var strOrig = str; var i = this.skipWhiteSpace(str); if (finished(str, i)) return {len: 0}; // The word 'clef' is optional, but if it appears, a clef MUST appear var needsClef = false; var strClef = str.substring(i); if (abc_common.startsWith(strClef, 'clef=')) { needsClef = true; strClef = strClef.substring(5); i += 5; } if (strClef.length === 0 && needsClef) return {len: i+5, warn: "No clef specified: " + strOrig}; var j = this.skipWhiteSpace(strClef); if (finished(strClef, j)) return {len: 0}; if (j > 0) { i += j; strClef = strClef.substring(j); } var name = null; if (abc_common.startsWith(strClef, 'treble')) name = 'treble'; else if (abc_common.startsWith(strClef, 'bass3')) name = 'bass3'; else if (abc_common.startsWith(strClef, 'bass')) name = 'bass'; else if (abc_common.startsWith(strClef, 'tenor')) name = 'tenor'; else if (abc_common.startsWith(strClef, 'alto2')) name = 'alto2'; else if (abc_common.startsWith(strClef, 'alto1')) name = 'alto1'; else if (abc_common.startsWith(strClef, 'alto')) name = 'alto'; else if (!bExplicitOnly && (needsClef && abc_common.startsWith(strClef, 'none'))) name = 'none'; else if (abc_common.startsWith(strClef, 'perc')) name = 'perc'; else if (!bExplicitOnly && (needsClef && abc_common.startsWith(strClef, 'C'))) name = 'tenor'; else if (!bExplicitOnly && (needsClef && abc_common.startsWith(strClef, 'F'))) name = 'bass'; else if (!bExplicitOnly && (needsClef && abc_common.startsWith(strClef, 'G'))) name = 'treble'; else return {len: i+5, warn: "Unknown clef specified: " + strOrig}; strClef = strClef.substring(name.length); j = this.isMatch(strClef, '+8'); if (j > 0) name += "+8"; else { j = this.isMatch(strClef, '-8'); if (j > 0) name += "-8"; } return {len: i+name.length, token: name, explicit: needsClef}; }; // This returns one of the legal bar lines // This is called alot and there is no obvious tokenable items, so this is broken apart. this.getBarLine = function(line, i) { switch (line.charAt(i)) { case ']': ++i; switch (line.charAt(i)) { case '|': return {len: 2, token: "bar_thick_thin"}; case '[': ++i; if ((line.charAt(i) >= '1' && line.charAt(i) <= '9') || line.charAt(i) === '"') return {len: 2, token: "bar_invisible"}; return {len: 1, warn: "Unknown bar symbol"}; default: return {len: 1, token: "bar_invisible"}; } case ':': ++i; switch (line.charAt(i)) { case ':': return {len: 2, token: "bar_dbl_repeat"}; case '|': // :| ++i; switch (line.charAt(i)) { case ']': // :|] ++i; switch (line.charAt(i)) { case '|': // :|]| ++i; if (line.charAt(i) === ':') return {len: 5, token: "bar_dbl_repeat"}; return {len: 3, token: "bar_right_repeat"}; default: return {len: 3, token: "bar_right_repeat"}; } case '|': // :|| ++i; if (line.charAt(i) === ':') return {len: 4, token: "bar_dbl_repeat"}; return {len: 3, token: "bar_right_repeat"}; default: return {len: 2, token: "bar_right_repeat"}; } default: return {len: 1, warn: "Unknown bar symbol"}; } case '[': // [ ++i; if (line.charAt(i) === '|') { // [| ++i; switch (line.charAt(i)) { case ':': return {len: 3, token: "bar_left_repeat"}; case ']': return {len: 3, token: "bar_invisible"}; default: return {len: 2, token: "bar_thick_thin"}; } } else { if ((line.charAt(i) >= '1' && line.charAt(i) <= '9') || line.charAt(i) === '"') return {len: 1, token: "bar_invisible"}; return {len: 0}; } case '|': // | ++i; switch (line.charAt(i)) { case ']': return {len: 2, token: "bar_thin_thick"}; case '|': // || ++i; if (line.charAt(i) === ':') return {len: 3, token: "bar_left_repeat"}; return {len: 2, token: "bar_thin_thin"}; case ':': // |: var colons = 0; while (line.charAt(i+colons) === ':') colons++; return { len: 1+colons, token: "bar_left_repeat"}; default: return {len: 1, token: "bar_thin"}; } } return {len: 0}; }; // this returns all the characters in the string that match one of the characters in the legalChars string this.getTokenOf = function(str, legalChars) { for (var i = 0; i < str.length; i++) { if (legalChars.indexOf(str.charAt(i)) < 0) return {len: i, token: str.substring(0, i)}; } return {len: i, token: str}; }; this.getToken = function(str, start, end) { // This returns the next set of chars that doesn't contain spaces var i = start; while (i < end && !this.isWhiteSpace(str.charAt(i))) i++; return str.substring(start, i); }; // This just sees if the next token is the word passed in, with possible leading spaces this.isMatch = function(str, match) { var i = this.skipWhiteSpace(str); if (finished(str, i)) return 0; if (abc_common.startsWith(str.substring(i), match)) return i+match.length; return 0; }; this.getPitchFromTokens = function(tokens) { var ret = { }; var pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11}; ret.position = pitches[tokens[0].token]; if (ret.position === undefined) return { warn: "Pitch expected. Found: " + tokens[0].token }; tokens.shift(); while (tokens.length) { switch (tokens[0].token) { case ',': ret.position -= 7; tokens.shift(); break; case '\'': ret.position += 7; tokens.shift(); break; default: return ret; } } return ret; }; this.getKeyAccidentals2 = function(tokens) { var accs; // find and strip off all accidentals in the token list while (tokens.length > 0) { var acc; if (tokens[0].token === '^') { acc = 'sharp'; tokens.shift(); if (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc}; switch (tokens[0].token) { case '^': acc = 'dblsharp'; tokens.shift(); break; case '/': acc = 'quartersharp'; tokens.shift(); break; } } else if (tokens[0].token === '=') { acc = 'natural'; tokens.shift(); } else if (tokens[0].token === '_') { acc = 'flat'; tokens.shift(); if (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc}; switch (tokens[0].token) { case '_': acc = 'dblflat'; tokens.shift(); break; case '/': acc = 'quarterflat'; tokens.shift(); break; } } else { // Not an accidental, we'll assume that a later parse will recognize it. return { accs: accs }; } if (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc}; switch (tokens[0].token.charAt(0)) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': if (accs === undefined) accs = []; accs.push({ acc: acc, note: tokens[0].token.charAt(0) }); if (tokens[0].token.length === 1) tokens.shift(); else tokens[0].token = tokens[0].token.substring(1); break; default: return {accs: accs, warn: 'Expected note name after ' + acc + ' Found: ' + tokens[0].token }; } } return { accs: accs }; }; // This gets an accidental marking for the key signature. It has the accidental then the pitch letter. this.getKeyAccidental = function(str) { var accTranslation = { '^': 'sharp', '^^': 'dblsharp', '=': 'natural', '_': 'flat', '__': 'dblflat', '_/': 'quarterflat', '^/': 'quartersharp' }; var i = this.skipWhiteSpace(str); if (finished(str, i)) return {len: 0}; var acc = null; switch (str.charAt(i)) { case '^': case '_': case '=': acc = str.charAt(i); break; default:return {len: 0}; } i++; if (finished(str, i)) return {len: 1, warn: 'Expected note name after accidental'}; switch (str.charAt(i)) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': return {len: i+1, token: {acc: accTranslation[acc], note: str.charAt(i)}}; case '^': case '_': case '/': acc += str.charAt(i); i++; if (finished(str, i)) return {len: 2, warn: 'Expected note name after accidental'}; switch (str.charAt(i)) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': return {len: i+1, token: {acc: accTranslation[acc], note: str.charAt(i)}}; default: return {len: 2, warn: 'Expected note name after accidental'}; } break; default: return {len: 1, warn: 'Expected note name after accidental'}; } }; this.isWhiteSpace = function(ch) { return ch === ' ' || ch === '\t' || ch === '\x12'; }; this.getMeat = function(line, start, end) { // This removes any comments starting with '%' and trims the ends of the string so that there are no leading or trailing spaces. // it returns just the start and end characters that contain the meat. var comment = line.indexOf('%', start); if (comment >= 0 && comment < end) end = comment; while (start < end && (line.charAt(start) === ' ' || line.charAt(start) === '\t' || line.charAt(start) === '\x12')) start++; while (start < end && (line.charAt(end-1) === ' ' || line.charAt(end-1) === '\t' || line.charAt(end-1) === '\x12')) end--; return {start: start, end: end}; }; var isLetter = function(ch) { return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'); }; var isNumber = function(ch) { return (ch >= '0' && ch <= '9'); }; this.tokenize = function(line, start, end, alphaUntilWhiteSpace) { // this returns all the tokens inside the passed string. A token is a punctuation mark, a string of digits, a string of letters. // Quoted strings are one token. // If there is a minus sign next to a number, then it is included in the number. // If there is a period immediately after a number, with a number immediately following, then a float is returned. // The type of token is returned: quote, alpha, number, punct // If alphaUntilWhiteSpace is true, then the behavior of the alpha token changes. var ret = this.getMeat(line, start, end); start = ret.start; end = ret.end; var tokens = []; var i; while (start < end) { if (line.charAt(start) === '"') { i = start+1; while (i < end && line.charAt(i) !== '"') i++; tokens.push({ type: 'quote', token: line.substring(start+1, i), start: start+1, end: i}); i++; } else if (isLetter(line.charAt(start))) { i = start+1; if (alphaUntilWhiteSpace) while (i < end && !this.isWhiteSpace(line.charAt(i))) i++; else while (i < end && isLetter(line.charAt(i))) i++; tokens.push({ type: 'alpha', token: line.substring(start, i), continueId: isNumber(line.charAt(i)), start: start, end: i}); start = i + 1; } else if (line.charAt(start) === '.' && isNumber(line.charAt(i+1))) { i = start+1; var int2 = null; var float2 = null; while (i < end && isNumber(line.charAt(i))) i++; float2 = parseFloat(line.substring(start, i)); tokens.push({ type: 'number', token: line.substring(start, i), intt: int2, floatt: float2, continueId: isLetter(line.charAt(i)), start: start, end: i}); start = i + 1; } else if (isNumber(line.charAt(start)) || (line.charAt(start) === '-' && isNumber(line.charAt(i+1)))) { i = start+1; var intt = null; var floatt = null; while (i < end && isNumber(line.charAt(i))) i++; if (line.charAt(i) === '.' && isNumber(line.charAt(i+1))) { i++; while (i < end && isNumber(line.charAt(i))) i++; } else intt = parseInt(line.substring(start, i)); floatt = parseFloat(line.substring(start, i)); tokens.push({ type: 'number', token: line.substring(start, i), intt: intt, floatt: floatt, continueId: isLetter(line.charAt(i)), start: start, end: i}); start = i + 1; } else if (line.charAt(start) === ' ' || line.charAt(start) === '\t') { i = start+1; } else { tokens.push({ type: 'punct', token: line.charAt(start), start: start, end: start+1}); i = start+1; } start = i; } return tokens; }; this.getVoiceToken = function(line, start, end) { // This finds the next token. A token is delimited by a space or an equal sign. If it starts with a quote, then the portion between the quotes is returned. var i = start; while (i < end && this.isWhiteSpace(line.charAt(i)) || line.charAt(i) === '=') i++; if (line.charAt(i) === '"') { var close = line.indexOf('"', i+1); if (close === -1 || close >= end) return {len: 1, err: "Missing close quote"}; return {len: close-start+1, token: this.translateString(line.substring(i+1, close))}; } else { var ii = i; while (ii < end && !this.isWhiteSpace(line.charAt(ii)) && line.charAt(ii) !== '=') ii++; return {len: ii-start+1, token: line.substring(i, ii)}; } }; var charMap = { "`a": 'à', "'a": "á", "^a": "â", "~a": "ã", "\"a": "ä", "oa": "å", "aa": "å", "=a": "ā", "ua": "ă", ";a": "ą", "`e": 'è', "'e": "é", "^e": "ê", "\"e": "ë", "=e": "ē", "ue": "ĕ", ";e": "ę", ".e": "ė", "`i": 'ì', "'i": "í", "^i": "î", "\"i": "ï", "=i": "ī", "ui": "ĭ", ";i": "į", "`o": 'ò', "'o": "ó", "^o": "ô", "~o": "õ", "\"o": "ö", "=o": "ō", "uo": "ŏ", "/o": "ø", "`u": 'ù', "'u": "ú", "^u": "û", "~u": "ũ", "\"u": "ü", "ou": "ů", "=u": "ū", "uu": "ŭ", ";u": "ų", "`A": 'À', "'A": "Á", "^A": "Â", "~A": "Ã", "\"A": "Ä", "oA": "Å", "AA": "Å", "=A": "Ā", "uA": "Ă", ";A": "Ą", "`E": 'È', "'E": "É", "^E": "Ê", "\"E": "Ë", "=E": "Ē", "uE": "Ĕ", ";E": "Ę", ".E": "Ė", "`I": 'Ì', "'I": "Í", "^I": "Î", "~I": "Ĩ", "\"I": "Ï", "=I": "Ī", "uI": "Ĭ", ";I": "Į", ".I": "İ", "`O": 'Ò', "'O": "Ó", "^O": "Ô", "~O": "Õ", "\"O": "Ö", "=O": "Ō", "uO": "Ŏ", "/O": "Ø", "`U": 'Ù', "'U": "Ú", "^U": "Û", "~U": "Ũ", "\"U": "Ü", "oU": "Ů", "=U": "Ū", "uU": "Ŭ", ";U": "Ų", "ae": "æ", "AE": "Æ", "oe": "œ", "OE": "Œ", "ss": "ß", "'c": "ć", "^c": "ĉ", "uc": "č", "cc": "ç", ".c": "ċ", "cC": "Ç", "'C": "Ć", "^C": "Ĉ", "uC": "Č", ".C": "Ċ", "~N": "Ñ", "~n": "ñ", "=s": "š", "vs": "š", "DH": "Ð", "dh": "ð", "HO": "Ő", "Ho": "ő", "HU": "Ű", "Hu": "ű", "'Y": "Ý", "'y": "ý", "^Y": "Ŷ", "^y": "ŷ", "\"Y": "Ÿ", "\"y": "ÿ", "vS": "Š", "vZ": "Ž", "vz": 'ž' // More chars: IJ ij Ď ď Đ đ Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š Ţ ţ Ť ť Ŧ ŧ Ŵ ŵ Ź ź Ż ż Ž }; var charMap1 = { "#": "♯", "b": "♭", "=": "♮" }; var charMap2 = { "201": "♯", "202": "♭", "203": "♮", "241": "¡", "242": "¢", "252": "a", "262": "2", "272": "o", "302": "Â", "312": "Ê", "322": "Ò", "332": "Ú", "342": "â", "352": "ê", "362": "ò", "372": "ú", "243": "£", "253": "«", "263": "3", "273": "»", "303": "Ã", "313": "Ë", "323": "Ó", "333": "Û", "343": "ã", "353": "ë", "363": "ó", "373": "û", "244": "¤", "254": "¬", "264": " ́", "274": "1⁄4", "304": "Ä", "314": "Ì", "324": "Ô", "334": "Ü", "344": "ä", "354": "ì", "364": "ô", "374": "ü", "245": "¥", "255": "-", "265": "μ", "275": "1⁄2", "305": "Å", "315": "Í", "325": "Õ", "335": "Ý", "345": "å", "355": "í", "365": "õ", "375": "ý", "246": "¦", "256": "®", "266": "¶", "276": "3⁄4", "306": "Æ", "316": "Î", "326": "Ö", "336": "Þ", "346": "æ", "356": "î", "366": "ö", "376": "þ", "247": "§", "257": " ̄", "267": "·", "277": "¿", "307": "Ç", "317": "Ï", "327": "×", "337": "ß", "347": "ç", "357": "ï", "367": "÷", "377": "ÿ", "250": " ̈", "260": "°", "270": " ̧", "300": "À", "310": "È", "320": "Ð", "330": "Ø", "340": "à", "350": "è", "360": "ð", "370": "ø", "251": "©", "261": "±", "271": "1", "301": "Á", "311": "É", "321": "Ñ", "331": "Ù", "341": "á", "351": "é", "361": "ñ", "371": "ù" }; this.translateString = function(str) { var arr = str.split('\\'); if (arr.length === 1) return str; var out = null; abc_common.each(arr, function(s) { if (out === null) out = s; else { var c = charMap[s.substring(0, 2)]; if (c !== undefined) out += c + s.substring(2); else { c = charMap2[s.substring(0, 3)]; if (c !== undefined) out += c + s.substring(3); else { c = charMap1[s.substring(0, 1)]; if (c !== undefined) out += c + s.substring(1); else out += "\\" + s; } } } }); return out; }; this.getNumber = function(line, index) { var num = 0; while (index < line.length) { switch (line.charAt(index)) { case '0':num = num*10;index++;break; case '1':num = num*10+1;index++;break; case '2':num = num*10+2;index++;break; case '3':num = num*10+3;index++;break; case '4':num = num*10+4;index++;break; case '5':num = num*10+5;index++;break; case '6':num = num*10+6;index++;break; case '7':num = num*10+7;index++;break; case '8':num = num*10+8;index++;break; case '9':num = num*10+9;index++;break; default: return {num: num, index: index}; } } return {num: num, index: index}; }; this.getFraction = function(line, index) { var num = 1; var den = 1; if (line.charAt(index) !== '/') { var ret = this.getNumber(line, index); num = ret.num; index = ret.index; } if (line.charAt(index) === '/') { index++; if (line.charAt(index) === '/') { var div = 0.5; while (line.charAt(index++) === '/') div = div /2; return {value: num * div, index: index-1}; } else { var iSave = index; var ret2 = this.getNumber(line, index); if (ret2.num === 0 && iSave === index) // If we didn't use any characters, it is an implied 2 ret2.num = 2; if (ret2.num !== 0) den = ret2.num; index = ret2.index; } } return {value: num/den, index: index}; }; this.theReverser = function(str) { if (abc_common.endsWith(str, ", The")) return "The " + str.substring(0, str.length-5); if (abc_common.endsWith(str, ", A")) return "A " + str.substring(0, str.length-3); return str; }; this.stripComment = function(str) { var i = str.indexOf('%'); if (i >= 0) return abc_common.strip(str.substring(0, i)); return abc_common.strip(str); }; this.getInt = function(str) { // This parses the beginning of the string for a number and returns { value: num, digits: num } // If digits is 0, then the string didn't point to a number. var x = parseInt(str); if (isNaN(x)) return {digits: 0}; var s = "" + x; var i = str.indexOf(s); // This is to account for leading spaces return {value: x, digits: i+s.length}; }; this.getFloat = function(str) { // This parses the beginning of the string for a number and returns { value: num, digits: num } // If digits is 0, then the string didn't point to a number. var x = parseFloat(str); if (isNaN(x)) return {digits: 0}; var s = "" + x; var i = str.indexOf(s); // This is to account for leading spaces return {value: x, digits: i+s.length}; }; this.getMeasurement = function(tokens) { if (tokens.length === 0) return { used: 0 }; var used = 1; var num = ''; if (tokens[0].token === '-') { tokens.shift(); num = '-'; used++; } else if (tokens[0].type !== 'number') return { used: 0 }; num += tokens.shift().token; if (tokens.length === 0) return { used: 1, value: parseInt(num) }; var x = tokens.shift(); if (x.token === '.') { used++; if (tokens.length === 0) return { used: used, value: parseInt(num) }; if (tokens[0].type === 'number') { x = tokens.shift(); num = num + '.' + x.token; used++; if (tokens.length === 0) return { used: used, value: parseFloat(num) }; } x = tokens.shift(); } switch (x.token) { case 'pt': return { used: used+1, value: parseFloat(num) }; case 'cm': return { used: used+1, value: parseFloat(num)/2.54*72 }; case 'in': return { used: used+1, value: parseFloat(num)*72 }; default: tokens.unshift(x); return { used: used, value: parseFloat(num) }; } }; var substInChord = function(str) { while ( str.indexOf("\\n") !== -1) { str = str.replace("\\n", "\n"); } return str; }; this.getBrackettedSubstring = function(line, i, maxErrorChars, _matchChar) { // This extracts the sub string by looking at the first character and searching for that // character later in the line (or search for the optional _matchChar). // For instance, if the first character is a quote it will look for // the end quote. If the end of the line is reached, then only up to the default number // of characters are returned, so that a missing end quote won't eat up the entire line. // It returns the substring and the number of characters consumed. // The number of characters consumed is normally two more than the size of the substring, // but in the error case it might not be. var matchChar = _matchChar || line.charAt(i); var pos = i+1; while ((pos < line.length) && (line.charAt(pos) !== matchChar)) ++pos; if (line.charAt(pos) === matchChar) return [pos-i+1,substInChord(line.substring(i+1, pos)), true]; else // we hit the end of line, so we'll just pick an arbitrary num of chars so the line doesn't disappear. { pos = i+maxErrorChars; if (pos > line.length-1) pos = line.length-1; return [pos-i+1, substInChord(line.substring(i+1, pos)), false]; } }; }; var abc_tokenizer = Tokenizer; // wrap_lines.js: does line wrap on an already parsed tune. // Copyright (C) 2018 Paul Rosen (paul at paulrosen dot net) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. function wrapLines(tune, lineBreaks) { if (!lineBreaks || tune.lines.length === 0) return; // tune.lines contains nested arrays: there is an array of lines (that's the part this function rewrites), // there is an array of staffs per line (for instance, piano will have 2, orchestra will have many) // there is an array of voices per staff (for instance, 4-part harmony might have bass and tenor on a single staff) // The measure numbers start at zero for each staff, but on the succeeding lines, the measure numbers are reset to the beginning of the line. var newLines = []; // keep track of our counters for each staff and voice var startNewLine = []; var currentLine = []; var measureNumber = []; var measureMarker = []; var lastMeter = ''; var voiceStart = {}; var linesWithoutStaff = 0; for (var i = 0; i < tune.lines.length; i++) { var line = tune.lines[i]; if (line.staff) { var staffs = line.staff; for (var j = 0; j < staffs.length; j++) { if (startNewLine[j] === undefined) { startNewLine[j] = []; currentLine[j] = []; measureNumber[j] = []; measureMarker[j] = []; } var staff = staffs[j]; var voices = staff.voices; for (var k = 0; k < voices.length; k++) { if (startNewLine[j][k] === undefined) { startNewLine[j][k] = true; currentLine[j][k] = 0; measureNumber[j][k] = 0; measureMarker[j][k] = 0; } if (linesWithoutStaff > 0) currentLine[j][k] += linesWithoutStaff; var voice = voices[k]; for (var e = 0; e < voice.length; e++) { if (startNewLine[j][k]) { if (!newLines[currentLine[j][k]]) newLines[currentLine[j][k]] = { staff: [] }; if (!newLines[currentLine[j][k]].staff[j]) { newLines[currentLine[j][k]].staff[j] = {voices: []}; for (var key in staff) { if (staff.hasOwnProperty(key)) { if (key === 'meter') { if (newLines.length === 1 || lastMeter !== JSON.stringify(staff[key])) { lastMeter = JSON.stringify(staff[key]); newLines[currentLine[j][k]].staff[j][key] = staff[key]; } } else if (key !== 'voices') { newLines[currentLine[j][k]].staff[j][key] = staff[key]; } } } } if (measureMarker[j][k]) newLines[currentLine[j][k]].staff[j].barNumber = measureMarker[j][k]; startNewLine[j][k] = false; } var element = voice[e]; if (!newLines[currentLine[j][k]].staff[j].voices[k]) { newLines[currentLine[j][k]].staff[j].voices[k] = []; for (var startItem in voiceStart) { if (voiceStart.hasOwnProperty(startItem)) { newLines[currentLine[j][k]].staff[j].voices[k].push(voiceStart[startItem]); } } } newLines[currentLine[j][k]].staff[j].voices[k].push(element); if (element.el_type === 'stem') { // This is a nice trick to just pay attention to the last setting of each type. voiceStart[element.el_type] = element; } if (element.el_type === 'bar') { measureNumber[j][k]++; if (lineBreaks[measureNumber[j][k]]) { startNewLine[j][k] = true; currentLine[j][k]++; measureMarker[j][k] = element.barNumber; delete element.barNumber; } } } } } linesWithoutStaff = 0; } else { newLines.push(line); linesWithoutStaff++; } } tune.lines = newLines; } function freeFormLineBreaks(widths, lineBreakPoint) { var lineBreaks = []; var totals = []; var totalThisLine = 0; // run through each measure and see if the accumulation is less than the ideal. // if it passes the ideal, then see whether the last or this one is closer to the ideal. for (var i = 0; i < widths.length; i++) { var width = widths[i]; var attemptedWidth = totalThisLine + width; if (attemptedWidth < lineBreakPoint) totalThisLine = attemptedWidth; else { // This just passed the ideal, so see whether the previous or the current number of measures is closer. var oldDistance = lineBreakPoint - totalThisLine; var newDistance = attemptedWidth - lineBreakPoint; if (oldDistance < newDistance && totalThisLine > 0) { lineBreaks.push(i - 1); totals.push(Math.round(totalThisLine - width)); totalThisLine = width; } else { if (i < widths.length-1) { lineBreaks.push(i); totals.push(Math.round(totalThisLine)); totalThisLine = 0; } } } } totals.push(Math.round(totalThisLine)); return { lineBreaks: lineBreaks, totals: totals }; } function clone(arr) { var newArr = []; for (var i = 0; i < arr.length; i++) newArr.push(arr[i]); return newArr; } function oneTry(measureWidths, idealWidths, accumulator, lineAccumulator, lineWidths, lastVariance, highestVariance, currLine, lineBreaks, startIndex, otherTries) { for (var i = startIndex; i < measureWidths.length; i++) { var measureWidth = measureWidths[i]; accumulator += measureWidth; lineAccumulator += measureWidth; var thisVariance = Math.abs(accumulator - idealWidths[currLine]); var varianceIsClose = Math.abs(thisVariance - lastVariance) < idealWidths[0] / 10; // see if the difference is less than 10%, if so, run the test both ways. if (varianceIsClose) { if (thisVariance < lastVariance) { // Also attempt one less measure on the current line - sometimes that works out better. var newWidths = clone(lineWidths); var newBreaks = clone(lineBreaks); newBreaks.push(i-1); newWidths.push(lineAccumulator - measureWidth); otherTries.push({ accumulator: accumulator, lineAccumulator: measureWidth, lineWidths: newWidths, lastVariance: Math.abs(accumulator - idealWidths[currLine+1]), highestVariance: Math.max(highestVariance, lastVariance), currLine: currLine+1, lineBreaks: newBreaks, startIndex: i+1}); } else if (thisVariance > lastVariance && i < measureWidths.length-1) { // Also attempt one extra measure on this line. newWidths = clone(lineWidths); newBreaks = clone(lineBreaks); // newBreaks[newBreaks.length-1] = i; // newWidths[newWidths.length-1] = lineAccumulator; otherTries.push({ accumulator: accumulator, lineAccumulator: lineAccumulator, lineWidths: newWidths, lastVariance: thisVariance, highestVariance: Math.max(highestVariance, thisVariance), currLine: currLine, lineBreaks: newBreaks, startIndex: i+1}); } } if (thisVariance > lastVariance) { lineBreaks.push(i - 1); currLine++; highestVariance = Math.max(highestVariance, lastVariance); lastVariance = Math.abs(accumulator - idealWidths[currLine]); lineWidths.push(lineAccumulator - measureWidth); lineAccumulator = measureWidth; } else { lastVariance = thisVariance; } } lineWidths.push(lineAccumulator); } function optimizeLineWidths(widths, lineBreakPoint, lineBreaks, explanation) { // figure out how many lines - That's one more than was tried before. var numLines = Math.ceil(widths.total / lineBreakPoint) + 1; // get the ideal width for a line (cumulative width / num lines) - approx the same as lineBreakPoint except for rounding var idealWidth = Math.floor(widths.total / numLines); // get each ideal line width (1*ideal, 2*ideal, 3*ideal, etc) var idealWidths = []; for (var i = 0; i < numLines; i++) idealWidths.push(idealWidth*(i+1)); // from first measure, step through accum. Widths until the abs of the ideal is greater than the last one. // This can sometimes look funny in edge cases, so when the length is within 10%, try one more or one less to see which is better. // This is better than trying all the possibilities because that would get to be a huge number for even a medium size piece. // This method seems to never generate more than about 16 tries and it is usually 4 or less. var otherTries = []; otherTries.push({ accumulator: 0, lineAccumulator: 0, lineWidths: [], lastVariance: 999999, highestVariance: 0, currLine: 0, lineBreaks: [], // These are the zero-based last measure on each line startIndex: 0}); var index = 0; while (index < otherTries.length) { oneTry(widths.measureWidths, idealWidths, otherTries[index].accumulator, otherTries[index].lineAccumulator, otherTries[index].lineWidths, otherTries[index].lastVariance, otherTries[index].highestVariance, otherTries[index].currLine, otherTries[index].lineBreaks, otherTries[index].startIndex, otherTries); index++; } for (i = 0; i < otherTries.length; i++) { var otherTry = otherTries[i]; otherTry.variances = []; otherTry.aveVariance = 0; for (var j = 0; j < otherTry.lineWidths.length; j++) { var lineWidth = otherTry.lineWidths[j]; otherTry.variances.push(lineWidth - idealWidths[0]); otherTry.aveVariance += Math.abs(lineWidth - idealWidths[0]); } otherTry.aveVariance = otherTry.aveVariance / otherTry.lineWidths.length; explanation.attempts.push({ type: "optimizeLineWidths", lineBreaks: otherTry.lineBreaks, variances: otherTry.variances, aveVariance: otherTry.aveVariance, widths: widths.measureWidths }); } var smallest = 9999999; var smallestIndex = -1; for (i = 0; i < otherTries.length; i++) { otherTry = otherTries[i]; if (otherTry.aveVariance < smallest) { smallest = otherTry.aveVariance; smallestIndex = i; } } return { failed: false, lineBreaks: otherTries[smallestIndex].lineBreaks, variance: otherTries[smallestIndex].highestVariance }; } // // Instead of having to try all the different combinations to find the best, we start with an important piece of knowledge about the lineBreaks we are given: // // If there is a line too short, it is the last one. // // So, let's just do a couple of tweaks to see how it works to add one or two measures to the last line. // var avg = widths.total / (lineBreaks.length + 1); // var variance = getVariance(widths, lineBreaks); // var variancePct = variance/lineBreakPoint*100; // // if (lineBreaks.length === 0) // return { failed: true, reason: "Only one line." }; // // var lastLineStart = lineBreaks[lineBreaks.length-1]+1; // var lastLineVariance = lineVariance(widths.measureWidths, lastLineStart, widths.measureWidths.length, avg); // if (variance > lastLineVariance) // return { failed: true, reason: "Last line is not too short." }; // // // Let's get a list of all combinations that have a possibility of working. That is, all combinations where no line has a variance larger than "variance". // var lastLines = lastLinePossibilities(widths.measureWidths, lastLineStart, avg - variance, avg + variance); // var attempts = getAttempts(widths.measureWidths, 0, lineBreaks.length, avg - variance, avg + variance, lastLines); // //console.log(attempts, avg - variance, avg + variance); // // var failed = true; // for (var i = 0; i < attempts.length; i++) { // var newVariance = getVariance(widths, attempts[i]); // if (newVariance < variance) { // explanation.attempts.push({ // type: "Optimize try", lineBreaks: attempts[i], // variance: Math.round(variance), newVariance: Math.round(newVariance), // totalAttempts: attempts.length // }); // variance = newVariance; // lineBreaks = attempts[i]; // failed = false; // } // } // if (failed) { // explanation.attempts.push({ type: "Optimize try", lineBreaks: lineBreaks, variance: variance, reason: "None of the " + attempts.length + " attempts were better." }); // // TODO-PER: This shouldn't be necessary, but just try to move one measure down and see if it helps. // if (lineBreaks.length > 0) { // var attempt = [].concat(lineBreaks); // attempt[attempt.length - 1]--; // newVariance = getVariance(widths, attempt); // explanation.attempts.push({ // type: "Optimize last try", lineBreaks: attempts[i], // variance: Math.round(variance), newVariance: Math.round(newVariance), // totalAttempts: attempts.length // }); // if (newVariance < variance) { // variance = newVariance; // lineBreaks = attempt; // failed = false; // } // } // } // // Let's squeeze the line successively until it spills onto an extra line, then take the option with the lowest variance // // var targetNumLines = lineBreaks.length; // // var newNumLines = targetNumLines; // // var TRY_INCREMENT = 1; // // var tryBreakPoint = lineBreakPoint - TRY_INCREMENT; // // var failed = true; // // while (targetNumLines === newNumLines && tryBreakPoint > 50) { // // var ff = freeFormLineBreaks(widths.measureWidths, tryBreakPoint); // // newNumLines = ff.lineBreaks.length; // // if (newNumLines === targetNumLines) { // // var newVariance = getVariance(widths, ff.lineBreaks); // // var newVariancePct = newVariance/tryBreakPoint*100; // // explanation.attempts.push({type: "Optimize try", tryBreakPoint: Math.round(tryBreakPoint), lineBreaks: ff.lineBreaks, totals: ff.totals, // // variance: Math.round(variance), newVariance: Math.round(newVariance), variancePct: Math.round(variancePct), newVariancePct: Math.round(newVariancePct) // // }); // // if (newVariancePct < variancePct) { // // variancePct = newVariancePct; // // lineBreaks = ff.lineBreaks; // // failed = false; // // } // // } else { // // explanation.attempts.push({type: "Optimize try", explanation: "Exceeded number of lines." , tryBreakPoint: Math.round(tryBreakPoint), lineBreaks: ff.lineBreaks, totals: ff.totals, variance: variance, avg: avg, variancePct: variancePct}); // // } // // tryBreakPoint -= TRY_INCREMENT; // // } // // return { failed: failed, lineBreaks: lineBreaks, variance: variance }; // } // function fixedNumLinesBreaks(widths, numLines, allowOver, allowableVariance) { // var idealLineBreak = widths.total / numLines; // // If all the measures had the same amount of stuff, then the ave would be correct. // // We will test all the combinations from one less to one more than the average. // var averageMeasuresPerLine = Math.round(widths.measureWidths.length / numLines); // var minMeasuresPerLine = Math.max(averageMeasuresPerLine - 1, 1); // var maxMeasuresPerLine = averageMeasuresPerLine + 1; // var tries = createLineTestArray(numLines, widths.measureWidths.length, maxMeasuresPerLine, minMeasuresPerLine); // console.log("fixedNumLinesBreaks tests ("+minMeasuresPerLine+'-'+maxMeasuresPerLine+")", numLines, tries.length) // // // For each possible number of measures per line, see which has the closest spacing to the ideal. // var bestCase = -1; // var bestCaseVariance = 1000000; // for (var i = 0 ; i < tries.length; i++) { // var attempt = tries[i]; // var variance = getVariance(attempt, idealLineBreak, widths.measureWidths, allowOver ? allowableVariance : 0); // if (variance !== null) { // if (variance < bestCaseVariance) { // bestCaseVariance = variance; // bestCase = i; // } // } // } // var failed = true; // // For debugging, recreate the line widths // var totals = []; // if (bestCase >= 0) { // failed = false; // var index = 0; // for (i = 0; i < tries[bestCase].length; i++) { // var total = 0; // for (var j = 0; j < tries[bestCase][i]; j++) { // total += widths.measureWidths[index++]; // } // totals.push(Math.round(total)); // } // // We now have an array that contains the number of measures per line, but we want to return the absolute measure number to break on. // if (tries[bestCase].length > 0) { // tries[bestCase][0]--; // The results should contain the last measure number on the line, zero-based. // for (i = 1; i < tries[bestCase].length; i++) // tries[bestCase][i] += tries[bestCase][i - 1]; // This sets the zero-based measure number // // The last line is implied and we don't need to return it // tries[bestCase].pop(); // } // } // return { failed: failed, lineBreaks: tries[bestCase], bestCaseVariance: Math.round(bestCaseVariance), totals: totals }; // } function fixedMeasureLineBreaks(widths, lineBreakPoint, preferredMeasuresPerLine) { var lineBreaks = []; var totals = []; var thisWidth = 0; var failed = false; for (var i = 0; i < widths.length; i++) { thisWidth += widths[i]; if (thisWidth > lineBreakPoint) { failed = true; } if (i % preferredMeasuresPerLine === (preferredMeasuresPerLine-1)) { if (i !== widths.length-1) // Don't bother putting a line break for the last line - it's already a break. lineBreaks.push(i); totals.push(Math.round(thisWidth)); thisWidth = 0; } } return { failed: failed, totals: totals, lineBreaks: lineBreaks }; } function getRevisedTune(lineBreaks, staffWidth, abcString, params, Parse) { var abcParser = new Parse(); var revisedParams = { lineBreaks: lineBreaks, staffwidth: staffWidth }; for (var key in params) { if (params.hasOwnProperty(key) && key !== 'wrap' && key !== 'staffwidth') { revisedParams[key] = params[key]; } } abcParser.parse(abcString, revisedParams); return { tune: abcParser.getTune(), revisedParams: revisedParams }; } function calcLineWraps(tune, widths, abcString, params, Parse, engraver_controller) { // For calculating how much can go on the line, it depends on the width of the line. It is a convenience to just divide it here // by the minimum spacing instead of multiplying the min spacing later. // The scaling works differently: this is done by changing the scaling of the outer SVG, so the scaling needs to be compensated // for here, because the actual width will be different from the calculated numbers. // If the desired width is less than the margin, just punt and return the original tune if (params.staffwidth < widths.left) { return { explanation: "Staffwidth is narrower than the margin", tune: tune, revisedParams: params }; } var scale = params.scale ? Math.max(params.scale, 0.1) : 1; var minSpacing = params.wrap.minSpacing ? Math.max(parseFloat(params.wrap.minSpacing), 1) : 1; var minSpacingLimit = params.wrap.minSpacingLimit ? Math.max(parseFloat(params.wrap.minSpacingLimit), 1) : minSpacing - 0.1; var maxSpacing = params.wrap.maxSpacing ? Math.max(parseFloat(params.wrap.maxSpacing), 1) : undefined; if (params.wrap.lastLineLimit && !maxSpacing) maxSpacing = Math.max(parseFloat(params.wrap.lastLineLimit), 1); var targetHeight = params.wrap.targetHeight ? Math.max(parseInt(params.wrap.targetHeight, 10), 100) : undefined; var preferredMeasuresPerLine = params.wrap.preferredMeasuresPerLine ? Math.max(parseInt(params.wrap.preferredMeasuresPerLine, 10), 1) : undefined; var lineBreakPoint = (params.staffwidth - widths.left) / minSpacing / scale; var minLineSize = (params.staffwidth - widths.left) / maxSpacing / scale; var allowableVariance = (params.staffwidth - widths.left) / minSpacingLimit / scale; var explanation = { widths: widths, lineBreakPoint: lineBreakPoint, minLineSize: minLineSize, attempts: [], staffWidth: params.staffwidth, minWidth: Math.round(allowableVariance) }; // If there is a preferred number of measures per line, test that first. If none of the lines is too long, then we're finished. var lineBreaks = null; if (preferredMeasuresPerLine) { var f = fixedMeasureLineBreaks(widths.measureWidths, lineBreakPoint, preferredMeasuresPerLine); explanation.attempts.push({ type: "Fixed Measures Per Line", preferredMeasuresPerLine: preferredMeasuresPerLine, lineBreaks: f.lineBreaks, failed: f.failed, totals: f.totals }); if (!f.failed) lineBreaks = f.lineBreaks; } // If we don't have lineBreaks yet, use the free form method of line breaks. // This will be called either if Preferred Measures is not used, or if the music is just weird - like a single measure is way too crowded. if (!lineBreaks) { var ff = freeFormLineBreaks(widths.measureWidths, lineBreakPoint); explanation.attempts.push({ type: "Free Form", lineBreaks: ff.lineBreaks, totals: ff.totals }); lineBreaks = ff.lineBreaks; // We now have an acceptable number of lines, but the measures may not be optimally distributed. See if there is a better distribution. ff = optimizeLineWidths(widths, lineBreakPoint, lineBreaks, explanation); explanation.attempts.push({ type: "Optimize", failed: ff.failed, reason: ff.reason, lineBreaks: ff.lineBreaks, totals: ff.totals }); if (!ff.failed) lineBreaks = ff.lineBreaks; } // If the vertical space exceeds targetHeight, remove a line and try again. If that is too crowded, then don't use it. var staffWidth = params.staffwidth; var ret = getRevisedTune(lineBreaks, staffWidth, abcString, params, Parse); var newWidths = engraver_controller.getMeasureWidths(ret.tune); var gotTune = true; // If we adjust the num lines, set this to false explanation.attempts.push({type: "heightCheck", height: newWidths.height }); // if all of the lines are too sparse, make the width narrower. // TODO-PER: implement this case. // If one line and the spacing is > maxSpacing, make the width narrower. if (lineBreaks.length === 0 && minLineSize > widths.total) { staffWidth = (widths.total * maxSpacing * scale) + widths.left; explanation.attempts.push({type: "too sparse", newWidth: Math.round(staffWidth)}); gotTune = false; } // if (ret.lineBreaks.length === 0) { // // Everything fits on one line, so see if there is TOO much space and the staff width needs to be shortened. // if (minLineSize > 0 && ret.totalThisLine > 0 && ret.totalThisLine < minLineSize) // staffWidth = staffWidth / (minLineSize / ret.totalThisLine); // } else if (ret.totalThisLine < minLineSize) { // // the last line is too short, so attempt to redistribute by changing the min. // // We will try more and less space alternatively. The space can't be less than 1.0, and we'll try in 0.1 increments. // var minTrys = []; // if (minSpacing > 1.1) // minTrys.push(minSpacing - 0.1); // minTrys.push(minSpacing + 0.1); // if (minSpacing > 1.2) // minTrys.push(minSpacing - 0.2); // minTrys.push(minSpacing + 0.2); // if (minSpacing > 1.3) // minTrys.push(minSpacing - 0.3); // minTrys.push(minSpacing + 0.3); // for (var i = 0; i < minTrys.length && ret.totalThisLine < minLineSize; i++) { // lineBreakPoint = (params.staffwidth - widths.left) / minTrys[i] / scale; // ret = calcLineBreaks(widths.measureWidths, lineBreakPoint); // } // } if (!gotTune) ret = getRevisedTune(lineBreaks, staffWidth, abcString, params, Parse); ret.explanation = explanation; return ret; } var wrap_lines = { wrapLines: wrapLines, calcLineWraps: calcLineWraps }; // abc_tune.js: a computer usable internal structure representing one tune. // Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /** * This is the data for a single ABC tune. It is created and populated by the window.ABCJS.parse.Parse class. * Also known as the ABCJS Abstract Syntax Tree * @alternateClassName ABCJS.Tune */ var Tune = function() { // The structure consists of a hash with the following two items: // metaText: a hash of {key, value}, where key is one of: title, author, rhythm, source, transcription, unalignedWords, etc... // tempo: { noteLength: number (e.g. .125), bpm: number } // lines: an array of elements, or one of the following: // // STAFF: array of elements // SUBTITLE: string // // TODO: actually, the start and end char should modify each part of the note type // The elements all have a type field and a start and end char // field. The rest of the fields depend on the type and are listed below: // REST: duration=1,2,4,8; chord: string // NOTE: accidental=none,dbl_flat,flat,natural,sharp,dbl_sharp // pitch: "C" is 0. The numbers refer to the pitch letter. // duration: .5 (sixteenth), .75 (dotted sixteenth), 1 (eighth), 1.5 (dotted eighth) // 2 (quarter), 3 (dotted quarter), 4 (half), 6 (dotted half) 8 (whole) // chord: { name:chord, position: one of 'default', 'above', 'below' } // end_beam = true or undefined if this is the last note in a beam. // lyric: array of { syllable: xxx, divider: one of " -_" } // startTie = true|undefined // endTie = true|undefined // startTriplet = num <- that is the number to print // endTriplet = true|undefined (the last note of the triplet) // TODO: actually, decoration should be an array. // decoration: upbow, downbow, accent // BAR: type=bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat // number: 1 or 2: if it is the start of a first or second ending // CLEF: type=treble,bass // KEY-SIG: // accidentals[]: { acc:sharp|dblsharp|natural|flat|dblflat, note:a|b|c|d|e|f|g } // METER: type: common_time,cut_time,specified // if specified, { num: 99, den: 99 } this.getBeatLength = function() { for (var i = 0; i < this.lines.length; i++) { if (this.lines[i].staff) { for (var j = 0; j < this.lines[i].staff.length; j++) { if (this.lines[i].staff[j].meter) { var meter = this.lines[i].staff[j].meter; if (meter.type === "specified") { if (meter.value.length > 0) { var num = parseInt(meter.value[0].num, 10); var den = parseInt(meter.value[0].den, 10); if (num === 3 && den === 8) return 3/8; if (num === 6 && den === 8) return 3/8; if (num === 6 && den === 4) return 3/4; if (num === 9 && den === 8) return 3/8; if (num === 12 && den === 8) return 3/8; return 1/den; } else return 1/4; // No meter was specified, so use this default } else if (meter.type === 'cut_time') { return 1/2; } else { return 1/4; // TODO-PER: this works for common time, but not for the ancient meters. } } } } } return 1/4; // No meter was specified, so use this default }; this.getPickupLength = function() { var pickupLength = 0; var barLength = this.getBarLength(); for (var i = 0; i < this.lines.length; i++) { if (this.lines[i].staff) { for (var j = 0; j < this.lines[i].staff.length; j++) { for (var v = 0; v < this.lines[i].staff[j].voices.length; v++) { var voice = this.lines[i].staff[j].voices[v]; var tripletMultiplier = 1; for (var el = 0; el < voice.length; el++) { var isSpacer = voice[el].rest && voice[el].rest.type === "spacer"; if (voice[el].startTriplet) tripletMultiplier = voice[el].tripletMultiplier; if (voice[el].duration && !isSpacer) pickupLength += voice[el].duration * tripletMultiplier; if (voice[el].endTriplet) tripletMultiplier = 1; if (pickupLength >= barLength) pickupLength -= barLength; if (voice[el].el_type === 'bar') return pickupLength; } } } } } return pickupLength; }; this.getBarLength = function() { var meter = this.getMeterFraction(); return meter.num / meter.den; }; this.millisecondsPerMeasure = function(bpmOverride) { var bpm; if (bpmOverride) { bpm = bpmOverride; } else { var tempo = this.metaText ? this.metaText.tempo : null; bpm = this.getBpm(tempo); } if (bpm <= 0) bpm = 1; // I don't think this can happen, but we don't want a possibility of dividing by zero. var beatsPerMeasure = this.getBeatsPerMeasure(); var minutesPerMeasure = beatsPerMeasure / bpm; return minutesPerMeasure * 60000; }; this.getBeatsPerMeasure = function() { var beatsPerMeasure; var meter = this.getMeterFraction(); if (meter.den === 8) { beatsPerMeasure = meter.num / 3; } else { beatsPerMeasure = meter.num; } if (beatsPerMeasure <= 0) // This probably won't happen in any normal case - but it is possible that the meter could be set to something nonsensical. beatsPerMeasure = 1; return beatsPerMeasure; }; this.reset = function () { this.version = "1.0.1"; this.media = "screen"; this.metaText = {}; this.formatting = {}; this.lines = []; this.staffNum = 0; this.voiceNum = 0; this.lineNum = 0; }; this.resolveOverlays = function() { var madeChanges = false; for (var i = 0; i < this.lines.length; i++) { var line = this.lines[i]; if (line.staff) { for (var j = 0; j < line.staff.length; j++) { var staff = line.staff[j]; var overlayVoice = []; for (var k = 0; k < staff.voices.length; k++) { var voice = staff.voices[k]; overlayVoice.push({ hasOverlay: false, voice: [], snip: []}); var durationThisBar = 0; var inOverlay = false; var snipStart = -1; for (var kk = 0; kk < voice.length; kk++) { var event = voice[kk]; if (event.el_type === "overlay" && !inOverlay) { madeChanges = true; inOverlay = true; snipStart = kk; overlayVoice[k].hasOverlay = true; } else if (event.el_type === "bar") { if (inOverlay) { // delete the overlay events from this array without messing up this loop. inOverlay = false; overlayVoice[k].snip.push({ start: snipStart, len: kk - snipStart}); overlayVoice[k].voice.push(event); // Also end the overlay with the barline. } else { // This keeps the voices lined up: if the overlay isn't in the first measure then we need a bunch of invisible rests. if (durationThisBar > 0) overlayVoice[k].voice.push({ el_type: "note", duration: durationThisBar, rest: {type: "invisible"}, startChar: event.startChar, endChar: event.endChar }); overlayVoice[k].voice.push(event); } durationThisBar = 0; } else if (event.el_type === "note") { if (inOverlay) { overlayVoice[k].voice.push(event); } else { durationThisBar += event.duration; } } else if (event.el_type === "scale" || event.el_type === "stem" || event.el_type === "overlay" || event.el_type === "style" || event.el_type === "transpose") { // These types of events are duplicated on the overlay layer. overlayVoice[k].voice.push(event); } } if (overlayVoice[k].hasOverlay && overlayVoice[k].snip.length === 0) { // there was no closing bar, so we didn't set the snip amount. overlayVoice[k].snip.push({ start: snipStart, len: voice.length - snipStart}); } } for (k = 0; k < overlayVoice.length; k++) { var ov = overlayVoice[k]; if (ov.hasOverlay) { staff.voices.push(ov.voice); for (var kkk = ov.snip.length-1; kkk >= 0; kkk--) { var snip = ov.snip[kkk]; staff.voices[k].splice(snip.start, snip.len); } // remove ending marks from the overlay voice so they are not repeated for (kkk = 0; kkk < staff.voices[staff.voices.length-1].length; kkk++) { staff.voices[staff.voices.length-1][kkk] = abc_common.clone(staff.voices[staff.voices.length-1][kkk]); var el = staff.voices[staff.voices.length-1][kkk]; if (el.el_type === 'bar' && el.startEnding) { delete el.startEnding; } if (el.el_type === 'bar' && el.endEnding) delete el.endEnding; } } } } } } return madeChanges; }; function fixTitles(lines) { // We might have name and subname defined. We now know what line everything is on, so we can determine which to use. var firstMusicLine = true; for (var i = 0; i < lines.length; i++) { var line = lines[i]; if (line.staff) { for (var j = 0; j < line.staff.length; j++) { var staff = line.staff[j]; if (staff.title) { var hasATitle = false; for (var k = 0; k < staff.title.length; k++) { if (staff.title[k]) { staff.title[k] = (firstMusicLine) ? staff.title[k].name : staff.title[k].subname; if (staff.title[k]) hasATitle = true; else staff.title[k] = ''; } else staff.title[k] = ''; } if (!hasATitle) delete staff.title; } } firstMusicLine = false; } } } this.cleanUp = function(defWidth, defLength, barsperstaff, staffnonote, currSlur) { this.closeLine(); // Close the last line. // If the tempo was created with a string like "Allegro", then the duration of a beat needs to be set at the last moment, when it is most likely known. if (this.metaText.tempo && this.metaText.tempo.bpm && !this.metaText.tempo.duration) this.metaText.tempo.duration = [ this.getBeatLength() ]; // Remove any blank lines var anyDeleted = false; var i, s, v; for (i = 0; i < this.lines.length; i++) { if (this.lines[i].staff !== undefined) { var hasAny = false; for (s = 0; s < this.lines[i].staff.length; s++) { if (this.lines[i].staff[s] === undefined) { anyDeleted = true; this.lines[i].staff[s] = null; //this.lines[i].staff[s] = { voices: []}; // TODO-PER: There was a part missing in the abc music. How should we recover? } else { for (v = 0; v < this.lines[i].staff[s].voices.length; v++) { if (this.lines[i].staff[s].voices[v] === undefined) this.lines[i].staff[s].voices[v] = []; // TODO-PER: There was a part missing in the abc music. How should we recover? else if (this.containsNotes(this.lines[i].staff[s].voices[v])) hasAny = true; } } } if (!hasAny) { this.lines[i] = null; anyDeleted = true; } } } if (anyDeleted) { this.lines = abc_common.compact(this.lines); abc_common.each(this.lines, function(line) { if (line.staff) line.staff = abc_common.compact(line.staff); }); } // if we exceeded the number of bars allowed on a line, then force a new line if (barsperstaff) { while (wrapMusicLines(this.lines, barsperstaff)) { // This will keep wrapping until the end of the piece. } } // If we were passed staffnonote, then we want to get rid of all staffs that contain only rests. if (staffnonote) { anyDeleted = false; for (i = 0; i < this.lines.length; i++) { if (this.lines[i].staff !== undefined) { for (s = 0; s < this.lines[i].staff.length; s++) { var keepThis = false; for (v = 0; v < this.lines[i].staff[s].voices.length; v++) { if (this.containsNotesStrict(this.lines[i].staff[s].voices[v])) { keepThis = true; } } if (!keepThis) { anyDeleted = true; this.lines[i].staff[s] = null; } } } } if (anyDeleted) { abc_common.each(this.lines, function(line) { if (line.staff) line.staff = abc_common.compact(line.staff); }); } } fixTitles(this.lines); // Remove the temporary working variables for (i = 0; i < this.lines.length; i++) { if (this.lines[i].staff) { for (s = 0; s < this.lines[i].staff.length; s++) delete this.lines[i].staff[s].workingClef; } } // If there are overlays, create new voices for them. while (this.resolveOverlays()) { // keep resolving overlays as long as any are found. } function cleanUpSlursInLine(line) { var x; // var lyr = null; // TODO-PER: debugging. var addEndSlur = function(obj, num, chordPos) { if (currSlur[chordPos] === undefined) { // There isn't an exact match for note position, but we'll take any other open slur. for (x = 0; x < currSlur.length; x++) { if (currSlur[x] !== undefined) { chordPos = x; break; } } if (currSlur[chordPos] === undefined) { var offNum = chordPos*100+1; abc_common.each(obj.endSlur, function(x) { if (offNum === x) --offNum; }); currSlur[chordPos] = [offNum]; } } var slurNum; for (var i = 0; i < num; i++) { slurNum = currSlur[chordPos].pop(); obj.endSlur.push(slurNum); // lyr.syllable += '<' + slurNum; // TODO-PER: debugging } if (currSlur[chordPos].length === 0) delete currSlur[chordPos]; return slurNum; }; var addStartSlur = function(obj, num, chordPos, usedNums) { obj.startSlur = []; if (currSlur[chordPos] === undefined) { currSlur[chordPos] = []; } var nextNum = chordPos*100+1; for (var i = 0; i < num; i++) { if (usedNums) { abc_common.each(usedNums, function(x) { if (nextNum === x) ++nextNum; }); abc_common.each(usedNums, function(x) { if (nextNum === x) ++nextNum; }); abc_common.each(usedNums, function(x) { if (nextNum === x) ++nextNum; }); } abc_common.each(currSlur[chordPos], function(x) { if (nextNum === x) ++nextNum; }); abc_common.each(currSlur[chordPos], function(x) { if (nextNum === x) ++nextNum; }); currSlur[chordPos].push(nextNum); obj.startSlur.push({ label: nextNum }); // lyr.syllable += ' ' + nextNum + '>'; // TODO-PER:debugging nextNum++; } }; for (var i = 0; i < line.length; i++) { var el = line[i]; // if (el.lyric === undefined) // TODO-PER: debugging // el.lyric = [{ divider: '-' }]; // TODO-PER: debugging // lyr = el.lyric[0]; // TODO-PER: debugging // lyr.syllable = ''; // TODO-PER: debugging if (el.el_type === 'note') { if (el.gracenotes) { for (var g = 0; g < el.gracenotes.length; g++) { if (el.gracenotes[g].endSlur) { var gg = el.gracenotes[g].endSlur; el.gracenotes[g].endSlur = []; for (var ggg = 0; ggg < gg; ggg++) addEndSlur(el.gracenotes[g], 1, 20); } if (el.gracenotes[g].startSlur) { x = el.gracenotes[g].startSlur; addStartSlur(el.gracenotes[g], x, 20); } } } if (el.endSlur) { x = el.endSlur; el.endSlur = []; addEndSlur(el, x, 0); } if (el.startSlur) { x = el.startSlur; addStartSlur(el, x, 0); } if (el.pitches) { var usedNums = []; for (var p = 0; p < el.pitches.length; p++) { if (el.pitches[p].endSlur) { var k = el.pitches[p].endSlur; el.pitches[p].endSlur = []; for (var j = 0; j < k; j++) { var slurNum = addEndSlur(el.pitches[p], 1, p+1); usedNums.push(slurNum); } } } for (p = 0; p < el.pitches.length; p++) { if (el.pitches[p].startSlur) { x = el.pitches[p].startSlur; addStartSlur(el.pitches[p], x, p+1, usedNums); } } // Correct for the weird gracenote case where ({g}a) should match. // The end slur was already assigned to the note, and needs to be moved to the first note of the graces. if (el.gracenotes && el.pitches[0].endSlur && el.pitches[0].endSlur[0] === 100 && el.pitches[0].startSlur) { if (el.gracenotes[0].endSlur) el.gracenotes[0].endSlur.push(el.pitches[0].startSlur[0].label); else el.gracenotes[0].endSlur = [el.pitches[0].startSlur[0].label]; if (el.pitches[0].endSlur.length === 1) delete el.pitches[0].endSlur; else if (el.pitches[0].endSlur[0] === 100) el.pitches[0].endSlur.shift(); else if (el.pitches[0].endSlur[el.pitches[0].endSlur.length-1] === 100) el.pitches[0].endSlur.pop(); if (currSlur[1].length === 1) delete currSlur[1]; else currSlur[1].pop(); } } } } } // TODO-PER: This could be done faster as we go instead of as the last step. function fixClefPlacement(el) { abc_parse_key_voice.fixClef(el); //if (el.el_type === 'clef') { // var min = -2; // var max = 5; // switch(el.type) { // case 'treble+8': // case 'treble-8': // break; // case 'bass': // case 'bass+8': // case 'bass-8': // el.verticalPos = 20 + el.verticalPos; min += 6; max += 6; // break; // case 'tenor': // case 'tenor+8': // case 'tenor-8': // el.verticalPos = - el.verticalPos; min = -40; max = 40; //// el.verticalPos+=2; min += 6; max += 6; // break; // case 'alto': // case 'alto+8': // case 'alto-8': // el.verticalPos = - el.verticalPos; min = -40; max = 40; //// el.verticalPos-=2; min += 4; max += 4; // break; // } // if (el.verticalPos < min) { // while (el.verticalPos < min) // el.verticalPos += 7; // } else if (el.verticalPos > max) { // while (el.verticalPos > max) // el.verticalPos -= 7; // } //} } function wrapMusicLines(lines, barsperstaff) { for (i = 0; i < lines.length; i++) { if (lines[i].staff !== undefined) { for (s = 0; s < lines[i].staff.length; s++) { var permanentItems = []; for (v = 0; v < lines[i].staff[s].voices.length; v++) { var voice = lines[i].staff[s].voices[v]; var barNumThisLine = 0; for (var n = 0; n < voice.length; n++) { if (voice[n].el_type === 'bar') { barNumThisLine++; if (barNumThisLine >= barsperstaff) { // push everything else to the next line, if there is anything else, // and there is a next line. If there isn't a next line, create one. if (n < voice.length - 1) { var nextLine = getNextMusicLine(lines, i); if (!nextLine) { var cp = JSON.parse(JSON.stringify(lines[i])); lines.push(abc_common.clone(cp)); nextLine = lines[lines.length - 1]; for (var ss = 0; ss < nextLine.staff.length; ss++) { for (var vv = 0; vv < nextLine.staff[ss].voices.length; vv++) nextLine.staff[ss].voices[vv] = []; } } var startElement = n + 1; var section = lines[i].staff[s].voices[v].slice(startElement); lines[i].staff[s].voices[v] = lines[i].staff[s].voices[v].slice(0, startElement); nextLine.staff[s].voices[v] = permanentItems.concat(section.concat(nextLine.staff[s].voices[v])); return true; } } } else if (!voice[n].duration) { permanentItems.push(voice[n]); } } } } } } return false; } function getNextMusicLine(lines, currentLine) { currentLine++; while (lines.length > currentLine) { if (lines[currentLine].staff) return lines[currentLine]; currentLine++; } return null; } for (this.lineNum = 0; this.lineNum < this.lines.length; this.lineNum++) { var staff = this.lines[this.lineNum].staff; if (staff) { for (this.staffNum = 0; this.staffNum < staff.length; this.staffNum++) { if (staff[this.staffNum].clef) fixClefPlacement(staff[this.staffNum].clef); for (this.voiceNum = 0; this.voiceNum < staff[this.staffNum].voices.length; this.voiceNum++) { var voice = staff[this.staffNum].voices[this.voiceNum]; cleanUpSlursInLine(voice); for (var j = 0; j < voice.length; j++) { if (voice[j].el_type === 'clef') fixClefPlacement(voice[j]); } if (voice.length > 0 && voice[voice.length-1].barNumber) { // Don't hang a bar number on the last bar line: it should go on the next line. var nextLine = getNextMusicLine(this.lines, this.lineNum); if (nextLine) nextLine.staff[0].barNumber = voice[voice.length-1].barNumber; delete voice[voice.length-1].barNumber; } } } } } if (!this.formatting.pagewidth) this.formatting.pagewidth = defWidth; if (!this.formatting.pageheight) this.formatting.pageheight = defLength; // Remove temporary variables that the outside doesn't need to know about delete this.staffNum; delete this.voiceNum; delete this.lineNum; delete this.potentialStartBeam; delete this.potentialEndBeam; delete this.vskipPending; return currSlur; }; this.reset(); this.getLastNote = function() { if (this.lines[this.lineNum] && this.lines[this.lineNum].staff && this.lines[this.lineNum].staff[this.staffNum] && this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum]) { for (var i = this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum].length-1; i >= 0; i--) { var el = this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum][i]; if (el.el_type === 'note') { return el; } } } return null; }; this.addTieToLastNote = function() { // TODO-PER: if this is a chord, which note? var el = this.getLastNote(); if (el && el.pitches && el.pitches.length > 0) { el.pitches[0].startTie = {}; return true; } return false; }; this.getDuration = function(el) { if (el.duration) return el.duration; //if (el.pitches && el.pitches.length > 0) return el.pitches[0].duration; return 0; }; this.closeLine = function() { if (this.potentialStartBeam && this.potentialEndBeam) { this.potentialStartBeam.startBeam = true; this.potentialEndBeam.endBeam = true; } delete this.potentialStartBeam; delete this.potentialEndBeam; }; this.appendElement = function(type, startChar, endChar, hashParams) { var This = this; var pushNote = function(hp) { var currStaff = This.lines[This.lineNum].staff[This.staffNum]; if (!currStaff) { // TODO-PER: This prevents a crash, but it drops the element. Need to figure out how to start a new line, or delay adding this. return; } if (hp.pitches !== undefined) { var mid = currStaff.workingClef.verticalPos; abc_common.each(hp.pitches, function(p) { p.verticalPos = p.pitch - mid; }); } if (hp.gracenotes !== undefined) { var mid2 = currStaff.workingClef.verticalPos; abc_common.each(hp.gracenotes, function(p) { p.verticalPos = p.pitch - mid2; }); } currStaff.voices[This.voiceNum].push(hp); }; hashParams.el_type = type; if (startChar !== null) hashParams.startChar = startChar; if (endChar !== null) hashParams.endChar = endChar; var endBeamHere = function() { This.potentialStartBeam.startBeam = true; hashParams.endBeam = true; delete This.potentialStartBeam; delete This.potentialEndBeam; }; var endBeamLast = function() { if (This.potentialStartBeam !== undefined && This.potentialEndBeam !== undefined) { // Do we have a set of notes to beam? This.potentialStartBeam.startBeam = true; This.potentialEndBeam.endBeam = true; } delete This.potentialStartBeam; delete This.potentialEndBeam; }; if (type === 'note') { // && (hashParams.rest !== undefined || hashParams.end_beam === undefined)) { // Now, add the startBeam and endBeam where it is needed. // end_beam is already set on the places where there is a forced end_beam. We'll remove that here after using that info. // this.potentialStartBeam either points to null or the start beam. // this.potentialEndBeam either points to null or the start beam. // If we have a beam break (note is longer than a quarter, or an end_beam is on this element), then set the beam if we have one. // reset the variables for the next notes. var dur = This.getDuration(hashParams); if (dur >= 0.25) { // The beam ends on the note before this. endBeamLast(); } else if (hashParams.force_end_beam_last && This.potentialStartBeam !== undefined) { endBeamLast(); } else if (hashParams.end_beam && This.potentialStartBeam !== undefined) { // the beam is forced to end on this note, probably because of a space in the ABC if (hashParams.rest === undefined) endBeamHere(); else endBeamLast(); } else if (hashParams.rest === undefined) { // this a short note and we aren't about to end the beam if (This.potentialStartBeam === undefined) { // We aren't collecting notes for a beam, so start here. if (!hashParams.end_beam) { This.potentialStartBeam = hashParams; delete This.potentialEndBeam; } } else { This.potentialEndBeam = hashParams; // Continue the beaming, look for the end next note. } } // end_beam goes on rests and notes which precede rests _except_ when a rest (or set of adjacent rests) has normal notes on both sides (no spaces) // if (hashParams.rest !== undefined) // { // hashParams.end_beam = true; // var el2 = this.getLastNote(); // if (el2) el2.end_beam = true; // // TODO-PER: implement exception mentioned in the comment. // } } else { // It's not a note, so there definitely isn't beaming after it. endBeamLast(); } delete hashParams.end_beam; // We don't want this temporary variable hanging around. delete hashParams.force_end_beam_last; // We don't want this temporary variable hanging around. pushNote(hashParams); }; this.appendStartingElement = function(type, startChar, endChar, hashParams2) { // If we're in the middle of beaming, then end the beam. this.closeLine(); // We only ever want implied naturals the first time. var impliedNaturals; if (type === 'key') { impliedNaturals = hashParams2.impliedNaturals; delete hashParams2.impliedNaturals; delete hashParams2.explicitAccidentals; } // Clone the object because it will be sticking around for the next line and we don't want the extra fields in it. var hashParams = abc_common.clone(hashParams2); if (this.lines[this.lineNum].staff) { // be sure that we are on a music type line before doing the following. // If this is the first item in this staff, then we might have to initialize the staff, first. if (this.lines[this.lineNum].staff.length <= this.staffNum) { this.lines[this.lineNum].staff[this.staffNum] = {}; this.lines[this.lineNum].staff[this.staffNum].clef = abc_common.clone(this.lines[this.lineNum].staff[0].clef); this.lines[this.lineNum].staff[this.staffNum].key = abc_common.clone(this.lines[this.lineNum].staff[0].key); if (this.lines[this.lineNum].staff[0].meter) this.lines[this.lineNum].staff[this.staffNum].meter = abc_common.clone(this.lines[this.lineNum].staff[0].meter); this.lines[this.lineNum].staff[this.staffNum].workingClef = abc_common.clone(this.lines[this.lineNum].staff[0].workingClef); this.lines[this.lineNum].staff[this.staffNum].voices = [[]]; } // If this is a clef type, then we replace the working clef on the line. This is kept separate from // the clef in case there is an inline clef field. We need to know what the current position for // the note is. if (type === 'clef') { this.lines[this.lineNum].staff[this.staffNum].workingClef = hashParams; } // These elements should not be added twice, so if the element exists on this line without a note or bar before it, just replace the staff version. var voice = this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum]; for (var i = 0; i < voice.length; i++) { if (voice[i].el_type === 'note' || voice[i].el_type === 'bar') { hashParams.el_type = type; hashParams.startChar = startChar; hashParams.endChar = endChar; if (impliedNaturals) hashParams.accidentals = impliedNaturals.concat(hashParams.accidentals); voice.push(hashParams); return; } if (voice[i].el_type === type) { hashParams.el_type = type; hashParams.startChar = startChar; hashParams.endChar = endChar; if (impliedNaturals) hashParams.accidentals = impliedNaturals.concat(hashParams.accidentals); voice[i] = hashParams; return; } } // We didn't see either that type or a note, so replace the element to the staff. this.lines[this.lineNum].staff[this.staffNum][type] = hashParams2; } }; this.getNumLines = function() { return this.lines.length; }; this.pushLine = function(hash) { if (this.vskipPending) { hash.vskip = this.vskipPending; delete this.vskipPending; } this.lines.push(hash); }; this.addSubtitle = function(str) { this.pushLine({subtitle: str}); }; this.addSpacing = function(num) { this.vskipPending = num; }; this.addNewPage = function(num) { this.pushLine({newpage: num}); }; this.addSeparator = function(spaceAbove, spaceBelow, lineLength) { this.pushLine({separator: {spaceAbove: spaceAbove, spaceBelow: spaceBelow, lineLength: lineLength}}); }; this.addText = function(str) { this.pushLine({text: str}); }; this.addCentered = function(str) { this.pushLine({text: [{text: str, center: true }]}); }; this.containsNotes = function(voice) { for (var i = 0; i < voice.length; i++) { if (voice[i].el_type === 'note' || voice[i].el_type === 'bar') return true; } return false; }; this.containsNotesStrict = function(voice) { for (var i = 0; i < voice.length; i++) { if (voice[i].el_type === 'note' && voice[i].rest === undefined) return true; } return false; }; // anyVoiceContainsNotes: function(line) { // for (var i = 0; i < line.staff.voices.length; i++) { // if (this.containsNotes(line.staff.voices[i])) // return true; // } // return false; // }, this.changeVoiceScale = function(scale) { var This = this; This.appendElement('scale', null, null, { size: scale} ); }; this.startNewLine = function(params) { // If the pointed to line doesn't exist, just create that. If the line does exist, but doesn't have any music on it, just use it. // If it does exist and has music, then increment the line number. If the new element doesn't exist, create it. var This = this; this.closeLine(); // Close the previous line. var createVoice = function(params) { var thisStaff = This.lines[This.lineNum].staff[This.staffNum]; thisStaff.voices[This.voiceNum] = []; if (!thisStaff.title) thisStaff.title = []; thisStaff.title[This.voiceNum] = { name: params.name, subname: params.subname }; if (params.style) This.appendElement('style', null, null, {head: params.style}); if (params.stem) This.appendElement('stem', null, null, {direction: params.stem}); else if (This.voiceNum > 0) { if (thisStaff.voices[0]!== undefined) { var found = false; for (var i = 0; i < thisStaff.voices[0].length; i++) { if (thisStaff.voices[0].el_type === 'stem') found = true; } if (!found) { var stem = { el_type: 'stem', direction: 'up' }; thisStaff.voices[0].splice(0,0,stem); } } This.appendElement('stem', null, null, {direction: 'down'}); } if (params.scale) This.appendElement('scale', null, null, { size: params.scale} ); }; var createStaff = function(params) { if (params.key && params.key.impliedNaturals) { params.key.accidentals = params.key.accidentals.concat(params.key.impliedNaturals); delete params.key.impliedNaturals; } This.lines[This.lineNum].staff[This.staffNum] = {voices: [ ], clef: params.clef, key: params.key, workingClef: params.clef }; if (params.stafflines !== undefined) { This.lines[This.lineNum].staff[This.staffNum].clef.stafflines = params.stafflines; This.lines[This.lineNum].staff[This.staffNum].workingClef.stafflines = params.stafflines; } if (params.staffscale) { This.lines[This.lineNum].staff[This.staffNum].staffscale = params.staffscale; } if (params.tripletfont) This.lines[This.lineNum].staff[This.staffNum].tripletfont = params.tripletfont; if (params.vocalfont) This.lines[This.lineNum].staff[This.staffNum].vocalfont = params.vocalfont; if (params.bracket) This.lines[This.lineNum].staff[This.staffNum].bracket = params.bracket; if (params.brace) This.lines[This.lineNum].staff[This.staffNum].brace = params.brace; if (params.connectBarLines) This.lines[This.lineNum].staff[This.staffNum].connectBarLines = params.connectBarLines; if (params.barNumber) This.lines[This.lineNum].staff[This.staffNum].barNumber = params.barNumber; createVoice(params); // Some stuff just happens for the first voice if (params.part) This.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title}); if (params.meter !== undefined) This.lines[This.lineNum].staff[This.staffNum].meter = params.meter; }; var createLine = function(params) { This.lines[This.lineNum] = {staff: []}; createStaff(params); }; if (this.lines[this.lineNum] === undefined) createLine(params); else if (this.lines[this.lineNum].staff === undefined) { this.lineNum++; this.startNewLine(params); } else if (this.lines[this.lineNum].staff[this.staffNum] === undefined) createStaff(params); else if (this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum] === undefined) createVoice(params); else if (!this.containsNotes(this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum])) return; else { this.lineNum++; this.startNewLine(params); } }; this.setBarNumberImmediate = function(barNumber) { // If this is called right at the beginning of a line, then correct the measure number that is already written. // If this is called at the beginning of a measure, then correct the measure number that was just created. // If this is called in the middle of a measure, then subtract one from it, because it will be incremented before applied. var currentVoice = this.getCurrentVoice(); if (currentVoice && currentVoice.length > 0) { var lastElement = currentVoice[currentVoice.length-1]; if (lastElement.el_type === 'bar') { if (lastElement.barNumber !== undefined) // the measure number might not be written for this bar, don't override that. lastElement.barNumber = barNumber; } else return barNumber-1; } return barNumber; }; this.hasBeginMusic = function() { // return true if there exists at least one line that contains "staff" for (var i = 0; i < this.lines.length; i++) { if (this.lines[i].staff) return true; } return false; }; this.isFirstLine = function(index) { for (var i = index-1; i >= 0; i--) { if (this.lines[i].staff !== undefined) return false; } return true; }; this.getMeter = function() { for (var i = 0; i < this.lines.length; i++) { var line = this.lines[i]; if (line.staff) { for (var j = 0; j < line.staff.length; j++) { var meter = line.staff[j].meter; if (meter) { return meter; } } } } return { type: "common_time" }; }; this.getMeterFraction = function() { var meter = this.getMeter(); var num = 4; var den = 4; if (meter) { if (meter.type === 'specified') { num = parseInt(meter.value[0].num, 10); den = parseInt(meter.value[0].den,10); } else if (meter.type === 'cut_time') { num = 2; den = 2; } else if (meter.type === 'common_time') { num = 4; den = 4; } } this.meter = { num: num, den: den }; return this.meter; // TODO-PER: is this saved value used anywhere? A get function shouldn't change state. }; this.getKeySignature = function() { for (var i = 0; i < this.lines.length; i++) { var line = this.lines[i]; if (line.staff) { for (var j = 0; j < line.staff.length; j++) { if (line.staff[j].key) return line.staff[j].key; } } } return { }; }; this.getCurrentVoice = function() { if (this.lines[this.lineNum] !== undefined && this.lines[this.lineNum].staff[this.staffNum] !== undefined && this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum] !== undefined) return this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum]; else return null; }; this.setCurrentVoice = function(staffNum, voiceNum) { this.staffNum = staffNum; this.voiceNum = voiceNum; for (var i = 0; i < this.lines.length; i++) { if (this.lines[i].staff) { if (this.lines[i].staff[staffNum] === undefined || this.lines[i].staff[staffNum].voices[voiceNum] === undefined || !this.containsNotes(this.lines[i].staff[staffNum].voices[voiceNum] )) { this.lineNum = i; return; } } } this.lineNum = i; }; this.addMetaText = function(key, value) { if (this.metaText[key] === undefined) this.metaText[key] = value; else this.metaText[key] += "\n" + value; }; this.addMetaTextArray = function(key, value) { if (this.metaText[key] === undefined) this.metaText[key] = [value]; else this.metaText[key].push(value); }; this.addMetaTextObj = function(key, value) { this.metaText[key] = value; }; function addVerticalInfo(timingEvents) { // Add vertical info to the bar events: put the next event's top, and the event after the next measure's top. var lastBarTop; var lastBarBottom; var lastEventTop; var lastEventBottom; for (var e = timingEvents.length - 1; e >= 0; e--) { var ev = timingEvents[e]; if (ev.type === 'bar') { ev.top = lastEventTop; ev.nextTop = lastBarTop; lastBarTop = lastEventTop; ev.bottom = lastEventBottom; ev.nextBottom = lastBarBottom; lastBarBottom = lastEventBottom; } else if (ev.type === 'event') { lastEventTop = ev.top; lastEventBottom = ev.top + ev.height; } } } function makeSortedArray(hash) { var arr = []; for (var k in hash) { if (hash.hasOwnProperty(k)) arr.push(hash[k]); } arr = arr.sort(function (a, b) { var diff = a.milliseconds - b.milliseconds; // if the events have the same time, make sure a bar comes before a note if (diff !== 0) { return diff; } else { return a.type === "bar" ? -1 : 1; } }); return arr; } this.addElementToEvents = function(eventHash, element, voiceTimeMilliseconds, top, height, line, measureNumber, timeDivider, isTiedState, nextIsBar) { if (element.hint) return { isTiedState: undefined, duration: 0 }; var realDuration = element.durationClass ? element.durationClass : element.duration; if (element.abcelem.rest && element.abcelem.rest.type === "spacer") realDuration = 0; if (realDuration > 0) { var es = []; // If there is an invisible rest, then there are not elements, so don't push a null one. for (var i = 0; i < element.elemset.length; i++) { if (element.elemset[i] !== null) es.push(element.elemset[i]); } var isTiedToNext = element.startTie; if (isTiedState !== undefined) { eventHash["event" + isTiedState].elements.push(es); // Add the tied note to the first note that it is tied to if (nextIsBar) { if (!eventHash["event" + voiceTimeMilliseconds]) { eventHash["event" + voiceTimeMilliseconds] = { type: "event", milliseconds: voiceTimeMilliseconds, line: line, measureNumber: measureNumber, top: top, height: height, left: null, width: 0, elements: [], startChar: null, endChar: null, startCharArray: [], endCharArray: [] }; } eventHash["event" + voiceTimeMilliseconds].measureStart = true; nextIsBar = false; } if (!isTiedToNext) isTiedState = undefined; } else { // the last note wasn't tied. if (!eventHash["event" + voiceTimeMilliseconds]) { eventHash["event" + voiceTimeMilliseconds] = { type: "event", milliseconds: voiceTimeMilliseconds, line: line, measureNumber: measureNumber, top: top, height: height, left: element.x, width: element.w, elements: [es], startChar: element.abcelem.startChar, endChar: element.abcelem.endChar, startCharArray: [element.abcelem.startChar], endCharArray: [element.abcelem.endChar], midiPitches: element.abcelem.midiPitches ? abc_common.cloneArray(element.abcelem.midiPitches) : [] }; if (element.abcelem.midiGraceNotePitches) eventHash["event" + voiceTimeMilliseconds].midiGraceNotePitches = abc_common.cloneArray(element.abcelem.midiGraceNotePitches); } else { // If there is more than one voice then two notes can fall at the same time. Usually they would be lined up in the same place, but if it is a whole rest, then it is placed funny. In any case, the left most element wins. if (eventHash["event" + voiceTimeMilliseconds].left) eventHash["event" + voiceTimeMilliseconds].left = Math.min(eventHash["event" + voiceTimeMilliseconds].left, element.x); else eventHash["event" + voiceTimeMilliseconds].left = element.x; eventHash["event" + voiceTimeMilliseconds].elements.push(es); eventHash["event" + voiceTimeMilliseconds].startCharArray.push(element.abcelem.startChar); eventHash["event" + voiceTimeMilliseconds].endCharArray.push(element.abcelem.endChar); if (eventHash["event" + voiceTimeMilliseconds].startChar === null) eventHash["event" + voiceTimeMilliseconds].startChar =element.abcelem.startChar; if (eventHash["event" + voiceTimeMilliseconds].endChar === null) eventHash["event" + voiceTimeMilliseconds].endChar =element.abcelem.endChar; if (element.abcelem.midiPitches && element.abcelem.midiPitches.length) { if (!eventHash["event" + voiceTimeMilliseconds].midiPitches) eventHash["event" + voiceTimeMilliseconds].midiPitches = []; for (var i = 0; i < element.abcelem.midiPitches.length; i++) eventHash["event" + voiceTimeMilliseconds].midiPitches.push(element.abcelem.midiPitches[i]); } if (element.abcelem.midiGraceNotePitches && element.abcelem.midiGraceNotePitches.length) { if (!eventHash["event" + voiceTimeMilliseconds].midiGraceNotePitches) eventHash["event" + voiceTimeMilliseconds].midiGraceNotePitches = []; for (var j = 0; j < element.abcelem.midiGraceNotePitches.length; j++) eventHash["event" + voiceTimeMilliseconds].midiGraceNotePitches.push(element.abcelem.midiGraceNotePitches[j]); } } if (nextIsBar) { eventHash["event" + voiceTimeMilliseconds].measureStart = true; nextIsBar = false; } if (isTiedToNext) isTiedState = voiceTimeMilliseconds; } } return { isTiedState: isTiedState, duration: realDuration / timeDivider, nextIsBar: nextIsBar || element.type === 'bar' }; }; this.makeVoicesArray = function() { // First make a new array that is arranged by voice so that the repeats that span different lines are handled correctly. var voicesArr = []; for (var line = 0; line < this.engraver.staffgroups.length; line++) { var group = this.engraver.staffgroups[line]; var firstStaff = group.staffs[0]; var middleC = firstStaff.absoluteY; var top = middleC - firstStaff.top * abc_spacing.STEP; var lastStaff = group.staffs[group.staffs.length - 1]; middleC = lastStaff.absoluteY; var bottom = middleC - lastStaff.bottom * abc_spacing.STEP; var height = bottom - top; var voices = group.voices; for (var v = 0; v < voices.length; v++) { var measureNumber = 0; var noteFound = false; if (!voicesArr[v]) voicesArr[v] = []; var elements = voices[v].children; for (var elem = 0; elem < elements.length; elem++) { voicesArr[v].push({top: top, height: height, line: line, measureNumber: measureNumber, elem: elements[elem]}); if (elements[elem].type === 'bar' && noteFound) // Count the measures by counting the bar lines, but skip a bar line that appears at the left of the music, before any notes. measureNumber++; if (elements[elem].type === 'note' || elements[elem].type === 'rest') noteFound = true; } } } return voicesArr; }; this.setupEvents = function(startingDelay, timeDivider, bpm) { var timingEvents = []; var eventHash = {}; // The time is the number of seconds from the beginning of the piece. // The units we are scanning are in notation units (i.e. 0.25 is a quarter note) var time = startingDelay; var isTiedState; var nextIsBar = true; var voices = this.makeVoicesArray(); for (var v = 0; v < voices.length; v++) { var voiceTime = time; var voiceTimeMilliseconds = Math.round(voiceTime * 1000); var startingRepeatElem = 0; var endingRepeatElem = -1; var elements = voices[v]; for (var elem = 0; elem < elements.length; elem++) { var element = elements[elem].elem; if (element.abcelem.el_type === "tempo") { var bpm = this.getBpm(element.abcelem); var beatLength = this.getBeatLength(); var beatsPerSecond = bpm / 60; timeDivider = beatLength * beatsPerSecond; } var ret = this.addElementToEvents(eventHash, element, voiceTimeMilliseconds, elements[elem].top, elements[elem].height, elements[elem].line, elements[elem].measureNumber, timeDivider, isTiedState, nextIsBar); isTiedState = ret.isTiedState; nextIsBar = ret.nextIsBar; voiceTime += ret.duration; voiceTimeMilliseconds = Math.round(voiceTime * 1000); if (element.type === 'bar') { var barType = element.abcelem.type; var endRepeat = (barType === "bar_right_repeat" || barType === "bar_dbl_repeat"); var startEnding = (element.abcelem.startEnding === '1'); var startRepeat = (barType === "bar_left_repeat" || barType === "bar_dbl_repeat" || barType === "bar_right_repeat"); if (endRepeat) { if (endingRepeatElem === -1) endingRepeatElem = elem; for (var el2 = startingRepeatElem; el2 < endingRepeatElem; el2++) { var element2 = elements[el2].elem; ret = this.addElementToEvents(eventHash, element2, voiceTimeMilliseconds, elements[el2].top, elements[el2].height, elements[el2].line, elements[el2].measureNumber, timeDivider, isTiedState, nextIsBar); isTiedState = ret.isTiedState; nextIsBar = ret.nextIsBar; voiceTime += ret.duration; voiceTimeMilliseconds = Math.round(voiceTime * 1000); } nextIsBar = true; endingRepeatElem = -1; } if (startEnding) endingRepeatElem = elem; if (startRepeat) startingRepeatElem = elem; } } } // now we have all the events, but if there are multiple voices then there may be events out of order or duplicated, so normalize it. timingEvents = makeSortedArray(eventHash); addVerticalInfo(timingEvents); timingEvents.push({ type: "end", milliseconds: voiceTimeMilliseconds }); this.addUsefulCallbackInfo(timingEvents, bpm); return timingEvents; }; this.addUsefulCallbackInfo = function(timingEvents, bpm) { var millisecondsPerMeasure = this.millisecondsPerMeasure(bpm); for (var i = 0; i < timingEvents.length; i++) { var ev = timingEvents[i]; ev.millisecondsPerMeasure = millisecondsPerMeasure; } }; this.getBpm = function(tempo) { var bpm; if (tempo) { bpm = tempo.bpm; var beatLength = this.getBeatLength(); var statedBeatLength = tempo.duration && tempo.duration.length > 0 ? tempo.duration[0] : beatLength; bpm = bpm * statedBeatLength / beatLength; } if (!bpm) { bpm = 180; // Compensate for compound meter, where the beat isn't a beat. var meter = this.getMeterFraction(); if (meter && meter.den === 8) { bpm = 120; } } return bpm; }; this.setTiming = function (bpm, measuresOfDelay) { if (!bpm) { var tempo = this.metaText ? this.metaText.tempo : null; bpm = this.getBpm(tempo); } var beatLength = this.getBeatLength(); var beatsPerSecond = bpm / 60; var measureLength = this.getBarLength(); var startingDelay = measureLength / beatLength * measuresOfDelay / beatsPerSecond; if (startingDelay) startingDelay -= this.getPickupLength() / beatLength / beatsPerSecond; var timeDivider = beatLength * beatsPerSecond; this.noteTimings = this.setupEvents(startingDelay, timeDivider, bpm); }; }; var abc_tune = Tune; // abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure. // Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /*global window */ var Parse = function() { var tune = new abc_tune(); var tokenizer = new abc_tokenizer(); this.getTune = function() { return { formatting: tune.formatting, lines: tune.lines, media: tune.media, metaText: tune.metaText, version: tune.version, addElementToEvents: tune.addElementToEvents, addUsefulCallbackInfo: tune.addUsefulCallbackInfo, getBarLength: tune.getBarLength, getBeatLength: tune.getBeatLength, getBeatsPerMeasure: tune.getBeatsPerMeasure, getBpm: tune.getBpm, getMeter: tune.getMeter, getMeterFraction: tune.getMeterFraction, getPickupLength: tune.getPickupLength, getKeySignature: tune.getKeySignature, makeVoicesArray: tune.makeVoicesArray, millisecondsPerMeasure: tune.millisecondsPerMeasure, setupEvents: tune.setupEvents, setTiming: tune.setTiming }; }; function addPositioning(el, type, value) { if (!el.positioning) el.positioning = {}; el.positioning[type] = value; } function addFont(el, type, value) { if (!el.fonts) el.fonts = {}; el.fonts[type] = value; } var multilineVars = { reset: function() { for (var property in this) { if (this.hasOwnProperty(property) && typeof this[property] !== "function") { delete this[property]; } } this.iChar = 0; this.key = {accidentals: [], root: 'none', acc: '', mode: '' }; this.meter = null; // if no meter is specified, free meter is assumed this.origMeter = null; // this is for new voices that are created after we set the meter. this.hasMainTitle = false; this.default_length = 0.125; this.clef = { type: 'treble', verticalPos: 0 }; this.next_note_duration = 0; this.start_new_line = true; this.is_in_header = true; this.is_in_history = false; this.partForNextLine = {}; this.havent_set_length = true; this.voices = {}; this.staves = []; this.macros = {}; this.currBarNumber = 1; this.barCounter = {}; this.inTextBlock = false; this.inPsBlock = false; this.ignoredDecorations = []; this.textBlock = ""; this.score_is_present = false; // Can't have original V: lines when there is the score directive this.inEnding = false; this.inTie = []; this.inTieChord = {}; this.vocalPosition = "auto"; this.dynamicPosition = "auto"; this.chordPosition = "auto"; this.ornamentPosition = "auto"; this.volumePosition = "auto"; this.openSlurs = []; this.freegchord = false; }, differentFont: function(type, defaultFonts) { if (this[type].decoration !== defaultFonts[type].decoration) return true; if (this[type].face !== defaultFonts[type].face) return true; if (this[type].size !== defaultFonts[type].size) return true; if (this[type].style !== defaultFonts[type].style) return true; if (this[type].weight !== defaultFonts[type].weight) return true; return false; }, addFormattingOptions: function(el, defaultFonts, elType) { if (elType === 'note') { if (this.vocalPosition !== 'auto') addPositioning(el, 'vocalPosition', this.vocalPosition); if (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition); if (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition); if (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition); if (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition); if (this.differentFont("annotationfont", defaultFonts)) addFont(el, 'annotationfont', this.annotationfont); if (this.differentFont("gchordfont", defaultFonts)) addFont(el, 'gchordfont', this.gchordfont); if (this.differentFont("vocalfont", defaultFonts)) addFont(el, 'vocalfont', this.vocalfont); if (this.differentFont("tripletfont", defaultFonts)) addFont(el, 'tripletfont', this.tripletfont); } else if (elType === 'bar') { if (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition); if (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition); if (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition); if (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition); if (this.differentFont("measurefont", defaultFonts)) addFont(el, 'measurefont', this.measurefont); if (this.differentFont("repeatfont", defaultFonts)) addFont(el, 'repeatfont', this.repeatfont); } } }; var addWarning = function(str) { if (!multilineVars.warnings) multilineVars.warnings = []; multilineVars.warnings.push(str); }; var addWarningObject = function(warningObject) { if (!multilineVars.warningObjects) multilineVars.warningObjects = []; multilineVars.warningObjects.push(warningObject); }; var encode = function(str) { var ret = abc_common.gsub(str, '\x12', ' '); ret = abc_common.gsub(ret, '&', '&'); ret = abc_common.gsub(ret, '<', '<'); return abc_common.gsub(ret, '>', '>'); }; var warn = function(str, line, col_num) { if (!line) line = " "; var bad_char = line.charAt(col_num); if (bad_char === ' ') bad_char = "SPACE"; var clean_line = encode(line.substring(0, col_num)) + '' + bad_char + '' + encode(line.substring(col_num+1)); addWarning("Music Line:" + tune.getNumLines() + ":" + (col_num+1) + ': ' + str + ": " + clean_line); addWarningObject({message:str, line:line, startChar: multilineVars.iChar + col_num, column: col_num}); }; var header = new abc_parse_header(tokenizer, warn, multilineVars, tune); this.getWarnings = function() { return multilineVars.warnings; }; this.getWarningObjects = function() { return multilineVars.warningObjects; }; var letter_to_chord = function(line, i) { if (line.charAt(i) === '"') { var chord = tokenizer.getBrackettedSubstring(line, i, 5); if (!chord[2]) warn("Missing the closing quote while parsing the chord symbol", line , i); // If it starts with ^, then the chord appears above. // If it starts with _ then the chord appears below. // (note that the 2.0 draft standard defines them as not chords, but annotations and also defines @.) if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '^') { chord[1] = chord[1].substring(1); chord[2] = 'above'; } else if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '_') { chord[1] = chord[1].substring(1); chord[2] = 'below'; } else if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '<') { chord[1] = chord[1].substring(1); chord[2] = 'left'; } else if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '>') { chord[1] = chord[1].substring(1); chord[2] = 'right'; } else if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '@') { // @-15,5.7 chord[1] = chord[1].substring(1); var x = tokenizer.getFloat(chord[1]); if (x.digits === 0) warn("Missing first position in absolutely positioned annotation.", line , i); chord[1] = chord[1].substring(x.digits); if (chord[1][0] !== ',') warn("Missing comma absolutely positioned annotation.", line , i); chord[1] = chord[1].substring(1); var y = tokenizer.getFloat(chord[1]); if (y.digits === 0) warn("Missing second position in absolutely positioned annotation.", line , i); chord[1] = chord[1].substring(y.digits); var ws = tokenizer.skipWhiteSpace(chord[1]); chord[1] = chord[1].substring(ws); chord[2] = null; chord[3] = { x: x.value, y: y.value }; } else { if (multilineVars.freegchord !== true) { chord[1] = chord[1].replace(/([ABCDEFG0-9])b/g, "$1♭"); chord[1] = chord[1].replace(/([ABCDEFG0-9])#/g, "$1♯"); } chord[2] = 'default'; chord[1] = abc_transpose.chordName(multilineVars, chord[1]); } return chord; } return [0, ""]; }; var legalAccents = [ "trill", "lowermordent", "uppermordent", "mordent", "pralltriller", "accent", "fermata", "invertedfermata", "tenuto", "0", "1", "2", "3", "4", "5", "+", "wedge", "open", "thumb", "snap", "turn", "roll", "breath", "shortphrase", "mediumphrase", "longphrase", "segno", "coda", "D.S.", "D.C.", "fine", "slide", "^", "marcato", "upbow", "downbow", "/", "//", "///", "////", "trem1", "trem2", "trem3", "trem4", "turnx", "invertedturn", "invertedturnx", "trill(", "trill)", "arpeggio", "xstem", "mark", "umarcato", "style=normal", "style=harmonic", "style=rhythm", "style=x" ]; var volumeDecorations = [ "p", "pp", "f", "ff", "mf", "mp", "ppp", "pppp", "fff", "ffff", "sfz" ]; var dynamicDecorations = ["crescendo(", "crescendo)", "diminuendo(", "diminuendo)"]; var accentPseudonyms = [ ["<", "accent"], [">", "accent"], ["tr", "trill"], ["plus", "+"], [ "emphasis", "accent"], [ "^", "umarcato" ], [ "marcato", "umarcato" ] ]; var accentDynamicPseudonyms = [ ["<(", "crescendo("], ["<)", "crescendo)"], [">(", "diminuendo("], [">)", "diminuendo)"] ]; var letter_to_accent = function(line, i) { var macro = multilineVars.macros[line.charAt(i)]; if (macro !== undefined) { if (macro.charAt(0) === '!' || macro.charAt(0) === '+') macro = macro.substring(1); if (macro.charAt(macro.length-1) === '!' || macro.charAt(macro.length-1) === '+') macro = macro.substring(0, macro.length-1); if (abc_common.detect(legalAccents, function(acc) { return (macro === acc); })) return [ 1, macro ]; else if (abc_common.detect(volumeDecorations, function(acc) { return (macro === acc); })) { if (multilineVars.volumePosition === 'hidden') macro = ""; return [1, macro]; } else if (abc_common.detect(dynamicDecorations, function(acc) { if (multilineVars.dynamicPosition === 'hidden') macro = ""; return (macro === acc); })) { return [1, macro]; } else { if (!abc_common.detect(multilineVars.ignoredDecorations, function(dec) { return (macro === dec); })) warn("Unknown macro: " + macro, line, i); return [1, '' ]; } } switch (line.charAt(i)) { case '.':return [1, 'staccato']; case 'u':return [1, 'upbow']; case 'v':return [1, 'downbow']; case '~':return [1, 'irishroll']; case '!': case '+': var ret = tokenizer.getBrackettedSubstring(line, i, 5); // Be sure that the accent is recognizable. if (ret[1].length > 0 && (ret[1].charAt(0) === '^' || ret[1].charAt(0) ==='_')) ret[1] = ret[1].substring(1); // TODO-PER: The test files have indicators forcing the ornament to the top or bottom, but that isn't in the standard. We'll just ignore them. if (abc_common.detect(legalAccents, function(acc) { return (ret[1] === acc); })) return ret; if (abc_common.detect(volumeDecorations, function(acc) { return (ret[1] === acc); })) { if (multilineVars.volumePosition === 'hidden' ) ret[1] = ''; return ret; } if (abc_common.detect(dynamicDecorations, function(acc) { return (ret[1] === acc); })) { if (multilineVars.dynamicPosition === 'hidden' ) ret[1] = ''; return ret; } if (abc_common.detect(accentPseudonyms, function(acc) { if (ret[1] === acc[0]) { ret[1] = acc[1]; return true; } else return false; })) return ret; if (abc_common.detect(accentDynamicPseudonyms, function(acc) { if (ret[1] === acc[0]) { ret[1] = acc[1]; return true; } else return false; })) { if (multilineVars.dynamicPosition === 'hidden' ) ret[1] = ''; return ret; } // We didn't find the accent in the list, so consume the space, but don't return an accent. // Although it is possible that ! was used as a line break, so accept that. if (line.charAt(i) === '!' && (ret[0] === 1 || line.charAt(i+ret[0]-1) !== '!')) return [1, null ]; warn("Unknown decoration: " + ret[1], line, i); ret[1] = ""; return ret; case 'H':return [1, 'fermata']; case 'J':return [1, 'slide']; case 'L':return [1, 'accent']; case 'M':return [1, 'mordent']; case 'O':return [1, 'coda']; case 'P':return [1, 'pralltriller']; case 'R':return [1, 'roll']; case 'S':return [1, 'segno']; case 'T':return [1, 'trill']; } return [0, 0]; }; var letter_to_spacer = function(line, i) { var start = i; while (tokenizer.isWhiteSpace(line.charAt(i))) i++; return [ i-start ]; }; // returns the class of the bar line // the number of the repeat // and the number of characters used up // if 0 is returned, then the next element was not a bar line var letter_to_bar = function(line, curr_pos) { var ret = tokenizer.getBarLine(line, curr_pos); if (ret.len === 0) return [0,""]; if (ret.warn) { warn(ret.warn, line, curr_pos); return [ret.len,""]; } // Now see if this is a repeated ending // A repeated ending is all of the characters 1,2,3,4,5,6,7,8,9,0,-, and comma // It can also optionally start with '[', which is ignored. // Also, it can have white space before the '['. for (var ws = 0; ws < line.length; ws++) if (line.charAt(curr_pos + ret.len + ws) !== ' ') break; var orig_bar_len = ret.len; if (line.charAt(curr_pos+ret.len+ws) === '[') { ret.len += ws + 1; } // It can also be a quoted string. It is unclear whether that construct requires '[', but it seems like it would. otherwise it would be confused with a regular chord. if (line.charAt(curr_pos+ret.len) === '"' && line.charAt(curr_pos+ret.len-1) === '[') { var ending = tokenizer.getBrackettedSubstring(line, curr_pos+ret.len, 5); return [ret.len+ending[0], ret.token, ending[1]]; } var retRep = tokenizer.getTokenOf(line.substring(curr_pos+ret.len), "1234567890-,"); if (retRep.len === 0 || retRep.token[0] === '-') return [orig_bar_len, ret.token]; return [ret.len+retRep.len, ret.token, retRep.token]; }; var tripletQ = { 2: 3, 3: 2, 4: 3, 5: 2, // TODO-PER: not handling 6/8 rhythm yet 6: 2, 7: 2, // TODO-PER: not handling 6/8 rhythm yet 8: 3, 9: 2 // TODO-PER: not handling 6/8 rhythm yet }; var letter_to_open_slurs_and_triplets = function(line, i) { // consume spaces, and look for all the open parens. If there is a number after the open paren, // that is a triplet. Otherwise that is a slur. Collect all the slurs and the first triplet. var ret = {}; var start = i; while (line.charAt(i) === '(' || tokenizer.isWhiteSpace(line.charAt(i))) { if (line.charAt(i) === '(') { if (i+1 < line.length && (line.charAt(i+1) >= '2' && line.charAt(i+1) <= '9')) { if (ret.triplet !== undefined) warn("Can't nest triplets", line, i); else { ret.triplet = line.charAt(i+1) - '0'; ret.tripletQ = tripletQ[ret.triplet]; ret.num_notes = ret.triplet; if (i+2 < line.length && line.charAt(i+2) === ':') { // We are expecting "(p:q:r" or "(p:q" or "(p::r" // That is: "put p notes into the time of q for the next r notes" // if r is missing, then it is equal to p. // if q is missing, it is determined from this table: // (2 notes in the time of 3 // (3 notes in the time of 2 // (4 notes in the time of 3 // (5 notes in the time of n | if time sig is (6/8, 9/8, 12/8), n=3, else n=2 // (6 notes in the time of 2 // (7 notes in the time of n // (8 notes in the time of 3 // (9 notes in the time of n if (i+3 < line.length && line.charAt(i+3) === ':') { // The second number, 'q', is not present. if (i+4 < line.length && (line.charAt(i+4) >= '1' && line.charAt(i+4) <= '9')) { ret.num_notes = line.charAt(i+4) - '0'; i += 3; } else warn("expected number after the two colons after the triplet to mark the duration", line, i); } else if (i+3 < line.length && (line.charAt(i+3) >= '1' && line.charAt(i+3) <= '9')) { ret.tripletQ = line.charAt(i+3) - '0'; if (i+4 < line.length && line.charAt(i+4) === ':') { if (i+5 < line.length && (line.charAt(i+5) >= '1' && line.charAt(i+5) <= '9')) { ret.num_notes = line.charAt(i+5) - '0'; i += 4; } } else { i += 2; } } else warn("expected number after the triplet to mark the duration", line, i); } } i++; } else { if (ret.startSlur === undefined) ret.startSlur = 1; else ret.startSlur++; } } i++; } ret.consumed = i-start; return ret; }; var addWords = function(line, words) { if (!line) { warn("Can't add words before the first line of music", line, 0); return; } words = abc_common.strip(words); if (words.charAt(words.length-1) !== '-') words = words + ' '; // Just makes it easier to parse below, since every word has a divider after it. var word_list = []; // first make a list of words from the string we are passed. A word is divided on either a space or dash. var last_divider = 0; var replace = false; var addWord = function(i) { var word = abc_common.strip(words.substring(last_divider, i)); last_divider = i+1; if (word.length > 0) { if (replace) word = abc_common.gsub(word,'~', ' '); var div = words.charAt(i); if (div !== '_' && div !== '-') div = ' '; word_list.push({syllable: tokenizer.translateString(word), divider: div}); replace = false; return true; } return false; }; for (var i = 0; i < words.length; i++) { switch (words.charAt(i)) { case ' ': case '\x12': addWord(i); break; case '-': if (!addWord(i) && word_list.length > 0) { abc_common.last(word_list).divider = '-'; word_list.push({skip: true, to: 'next'}); } break; case '_': addWord(i); word_list.push({skip: true, to: 'slur'}); break; case '*': addWord(i); word_list.push({skip: true, to: 'next'}); break; case '|': addWord(i); word_list.push({skip: true, to: 'bar'}); break; case '~': replace = true; break; } } var inSlur = false; abc_common.each(line, function(el) { if (word_list.length !== 0) { if (word_list[0].skip) { switch (word_list[0].to) { case 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break; case 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break; case 'bar': if (el.el_type === 'bar') word_list.shift(); break; } if (el.el_type !== 'bar') { if (el.lyric === undefined) el.lyric = [{syllable: "", divider: " "}]; else el.lyric.push({syllable: "", divider: " "}); } } else { if (el.el_type === 'note' && el.rest === undefined && !inSlur) { var lyric = word_list.shift(); if (lyric.syllable) lyric.syllable = lyric.syllable.replace(/ +/g,'\xA0'); if (el.lyric === undefined) el.lyric = [ lyric ]; else el.lyric.push(lyric); } } } }); }; var addSymbols = function(line, words) { // TODO-PER: Currently copied from w: line. This needs to be read as symbols instead. if (!line) { warn("Can't add symbols before the first line of music", line, 0); return; } words = abc_common.strip(words); if (words.charAt(words.length-1) !== '-') words = words + ' '; // Just makes it easier to parse below, since every word has a divider after it. var word_list = []; // first make a list of words from the string we are passed. A word is divided on either a space or dash. var last_divider = 0; var replace = false; var addWord = function(i) { var word = abc_common.strip(words.substring(last_divider, i)); last_divider = i+1; if (word.length > 0) { if (replace) word = abc_common.gsub(word, '~', ' '); var div = words.charAt(i); if (div !== '_' && div !== '-') div = ' '; word_list.push({syllable: tokenizer.translateString(word), divider: div}); replace = false; return true; } return false; }; for (var i = 0; i < words.length; i++) { switch (words.charAt(i)) { case ' ': case '\x12': addWord(i); break; case '-': if (!addWord(i) && word_list.length > 0) { abc_common.last(word_list).divider = '-'; word_list.push({skip: true, to: 'next'}); } break; case '_': addWord(i); word_list.push({skip: true, to: 'slur'}); break; case '*': addWord(i); word_list.push({skip: true, to: 'next'}); break; case '|': addWord(i); word_list.push({skip: true, to: 'bar'}); break; case '~': replace = true; break; } } var inSlur = false; abc_common.each(line, function(el) { if (word_list.length !== 0) { if (word_list[0].skip) { switch (word_list[0].to) { case 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break; case 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break; case 'bar': if (el.el_type === 'bar') word_list.shift(); break; } } else { if (el.el_type === 'note' && el.rest === undefined && !inSlur) { var lyric = word_list.shift(); if (el.lyric === undefined) el.lyric = [ lyric ]; else el.lyric.push(lyric); } } } }); }; var getBrokenRhythm = function(line, index) { switch (line.charAt(index)) { case '>': if (index < line.length - 1 && line.charAt(index+1) === '>') // double >> return [2, 1.75, 0.25]; else return [1, 1.5, 0.5]; case '<': if (index < line.length - 1 && line.charAt(index+1) === '<') // double << return [2, 0.25, 1.75]; else return [1, 0.5, 1.5]; } return null; }; // TODO-PER: make this a method in el. var addEndBeam = function(el) { if (el.duration !== undefined && el.duration < 0.25) el.end_beam = true; return el; }; var pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11}; var rests = {x: 'invisible', y: 'spacer', z: 'rest', Z: 'multimeasure' }; var getCoreNote = function(line, index, el, canHaveBrokenRhythm) { //var el = { startChar: index }; var isComplete = function(state) { return (state === 'octave' || state === 'duration' || state === 'Zduration' || state === 'broken_rhythm' || state === 'end_slur'); }; var state = 'startSlur'; var durationSetByPreviousNote = false; while (1) { switch(line.charAt(index)) { case '(': if (state === 'startSlur') { if (el.startSlur === undefined) el.startSlur = 1; else el.startSlur++; } else if (isComplete(state)) {el.endChar = index;return el;} else return null; break; case ')': if (isComplete(state)) { if (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++; } else return null; break; case '^': if (state === 'startSlur') {el.accidental = 'sharp';state = 'sharp2';} else if (state === 'sharp2') {el.accidental = 'dblsharp';state = 'pitch';} else if (isComplete(state)) {el.endChar = index;return el;} else return null; break; case '_': if (state === 'startSlur') {el.accidental = 'flat';state = 'flat2';} else if (state === 'flat2') {el.accidental = 'dblflat';state = 'pitch';} else if (isComplete(state)) {el.endChar = index;return el;} else return null; break; case '=': if (state === 'startSlur') {el.accidental = 'natural';state = 'pitch';} else if (isComplete(state)) {el.endChar = index;return el;} else return null; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': if (state === 'startSlur' || state === 'sharp2' || state === 'flat2' || state === 'pitch') { el.pitch = pitches[line.charAt(index)]; abc_transpose.note(multilineVars, el); state = 'octave'; // At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below if (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) { el.duration = multilineVars.default_length * multilineVars.next_note_duration; multilineVars.next_note_duration = 0; durationSetByPreviousNote = true; } else el.duration = multilineVars.default_length; // If the clef is percussion, there is probably some translation of the pitch to a particular drum kit item. if ((multilineVars.clef && multilineVars.clef.type === "perc") || (multilineVars.currentVoice && multilineVars.currentVoice.clef === "perc")) { var key = line.charAt(index); if (el.accidental) { var accMap = { 'dblflat': '__', 'flat': '_', 'natural': '=', 'sharp': '^', 'dblsharp': '^^'}; key = accMap[el.accidental] + key; } if (tune.formatting && tune.formatting.midi && tune.formatting.midi.drummap) el.midipitch = tune.formatting.midi.drummap[key]; } } else if (isComplete(state)) {el.endChar = index;return el;} else return null; break; case ',': if (state === 'octave') {el.pitch -= 7;} else if (isComplete(state)) {el.endChar = index;return el;} else return null; break; case '\'': if (state === 'octave') {el.pitch += 7;} else if (isComplete(state)) {el.endChar = index;return el;} else return null; break; case 'x': case 'y': case 'z': case 'Z': if (state === 'startSlur') { el.rest = { type: rests[line.charAt(index)] }; // There shouldn't be some of the properties that notes have. If some sneak in due to bad syntax in the abc file, // just nix them here. delete el.accidental; delete el.startSlur; delete el.startTie; delete el.endSlur; delete el.endTie; delete el.end_beam; delete el.grace_notes; // At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below if (el.rest.type === 'multimeasure') { el.duration = 1; state = 'Zduration'; } else { if (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) { el.duration = multilineVars.default_length * multilineVars.next_note_duration; multilineVars.next_note_duration = 0; durationSetByPreviousNote = true; } else el.duration = multilineVars.default_length; state = 'duration'; } } else if (isComplete(state)) {el.endChar = index;return el;} else return null; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': case '/': if (state === 'octave' || state === 'duration') { var fraction = tokenizer.getFraction(line, index); //if (!durationSetByPreviousNote) el.duration = el.duration * fraction.value; // TODO-PER: We can test the returned duration here and give a warning if it isn't the one expected. el.endChar = fraction.index; while (fraction.index < line.length && (tokenizer.isWhiteSpace(line.charAt(fraction.index)) || line.charAt(fraction.index) === '-')) { if (line.charAt(fraction.index) === '-') el.startTie = {}; else el = addEndBeam(el); fraction.index++; } index = fraction.index-1; state = 'broken_rhythm'; } else if (state === 'sharp2') { el.accidental = 'quartersharp';state = 'pitch'; } else if (state === 'flat2') { el.accidental = 'quarterflat';state = 'pitch'; } else if (state === 'Zduration') { var num = tokenizer.getNumber(line, index); el.duration = num.num; el.endChar = num.index; return el; } else return null; break; case '-': if (state === 'startSlur') { // This is the first character, so it must have been meant for the previous note. Correct that here. tune.addTieToLastNote(); el.endTie = true; } else if (state === 'octave' || state === 'duration' || state === 'end_slur') { el.startTie = {}; if (!durationSetByPreviousNote && canHaveBrokenRhythm) state = 'broken_rhythm'; else { // Peek ahead to the next character. If it is a space, then we have an end beam. if (tokenizer.isWhiteSpace(line.charAt(index + 1))) addEndBeam(el); el.endChar = index+1; return el; } } else if (state === 'broken_rhythm') {el.endChar = index;return el;} else return null; break; case ' ': case '\t': if (isComplete(state)) { el.end_beam = true; // look ahead to see if there is a tie do { if (line.charAt(index) === '-') el.startTie = {}; index++; } while (index < line.length && (tokenizer.isWhiteSpace(line.charAt(index)) || line.charAt(index) === '-')); el.endChar = index; if (!durationSetByPreviousNote && canHaveBrokenRhythm && (line.charAt(index) === '<' || line.charAt(index) === '>')) { // TODO-PER: Don't need the test for < and >, but that makes the endChar work out for the regression test. index--; state = 'broken_rhythm'; } else return el; } else return null; break; case '>': case '<': if (isComplete(state)) { if (canHaveBrokenRhythm) { var br2 = getBrokenRhythm(line, index); index += br2[0] - 1; // index gets incremented below, so we'll let that happen multilineVars.next_note_duration = br2[2]; el.duration = br2[1]*el.duration; state = 'end_slur'; } else { el.endChar = index; return el; } } else return null; break; default: if (isComplete(state)) { el.endChar = index; return el; } return null; } index++; if (index === line.length) { if (isComplete(state)) {el.endChar = index;return el;} else return null; } } return null; }; function startNewLine() { var params = { startChar: -1, endChar: -1}; if (multilineVars.partForNextLine.title) params.part = multilineVars.partForNextLine; params.clef = multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].clef !== undefined ? abc_common.clone(multilineVars.staves[multilineVars.currentVoice.staffNum].clef) : abc_common.clone(multilineVars.clef); var scoreTranspose = multilineVars.currentVoice ? multilineVars.currentVoice.scoreTranspose : 0; params.key = abc_parse_key_voice.standardKey(multilineVars.key.root+multilineVars.key.acc+multilineVars.key.mode, multilineVars.key.root, multilineVars.key.acc, scoreTranspose); params.key.mode = multilineVars.key.mode; if (multilineVars.key.impliedNaturals) params.key.impliedNaturals = multilineVars.key.impliedNaturals; if (multilineVars.key.explicitAccidentals) { for (var i = 0; i < multilineVars.key.explicitAccidentals.length; i++) { var found = false; for (var j = 0; j < params.key.accidentals.length; j++) { if (params.key.accidentals[j].note === multilineVars.key.explicitAccidentals[i].note) { // If the note is already in the list, override it with the new value params.key.accidentals[j].acc = multilineVars.key.explicitAccidentals[i].acc; found = true; } } if (!found) params.key.accidentals.push(multilineVars.key.explicitAccidentals[i]); } } multilineVars.targetKey = params.key; if (params.key.explicitAccidentals) delete params.key.explicitAccidentals; abc_parse_key_voice.addPosToKey(params.clef, params.key); if (multilineVars.meter !== null) { if (multilineVars.currentVoice) { abc_common.each(multilineVars.staves, function(st) { st.meter = multilineVars.meter; }); params.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter; multilineVars.staves[multilineVars.currentVoice.staffNum].meter = null; } else params.meter = multilineVars.meter; multilineVars.meter = null; } else if (multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].meter) { // Make sure that each voice gets the meter marking. params.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter; multilineVars.staves[multilineVars.currentVoice.staffNum].meter = null; } if (multilineVars.currentVoice && multilineVars.currentVoice.name) params.name = multilineVars.currentVoice.name; if (multilineVars.vocalfont) params.vocalfont = multilineVars.vocalfont; if (multilineVars.tripletfont) params.tripletfont = multilineVars.tripletfont; if (multilineVars.style) params.style = multilineVars.style; if (multilineVars.currentVoice) { var staff = multilineVars.staves[multilineVars.currentVoice.staffNum]; if (staff.brace) params.brace = staff.brace; if (staff.bracket) params.bracket = staff.bracket; if (staff.connectBarLines) params.connectBarLines = staff.connectBarLines; if (staff.name) params.name = staff.name[multilineVars.currentVoice.index]; if (staff.subname) params.subname = staff.subname[multilineVars.currentVoice.index]; if (multilineVars.currentVoice.stem) params.stem = multilineVars.currentVoice.stem; if (multilineVars.currentVoice.stafflines) params.stafflines = multilineVars.currentVoice.stafflines; if (multilineVars.currentVoice.staffscale) params.staffscale = multilineVars.currentVoice.staffscale; if (multilineVars.currentVoice.scale) params.scale = multilineVars.currentVoice.scale; if (multilineVars.currentVoice.style) params.style = multilineVars.currentVoice.style; if (multilineVars.currentVoice.transpose) params.clef.transpose = multilineVars.currentVoice.transpose; } var isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0); if (multilineVars.barNumbers === 0 && isFirstVoice && multilineVars.currBarNumber !== 1) params.barNumber = multilineVars.currBarNumber; tune.startNewLine(params); if (multilineVars.key.impliedNaturals) delete multilineVars.key.impliedNaturals; multilineVars.partForNextLine = {}; } var letter_to_grace = function(line, i) { // Grace notes are an array of: startslur, note, endslur, space; where note is accidental, pitch, duration if (line.charAt(i) === '{') { // fetch the gracenotes string and consume that into the array var gra = tokenizer.getBrackettedSubstring(line, i, 1, '}'); if (!gra[2]) warn("Missing the closing '}' while parsing grace note", line, i); // If there is a slur after the grace construction, then move it to the last note inside the grace construction if (line[i+gra[0]] === ')') { gra[0]++; gra[1] += ')'; } var gracenotes = []; var ii = 0; var inTie = false; while (ii < gra[1].length) { var acciaccatura = false; if (gra[1].charAt(ii) === '/') { acciaccatura = true; ii++; } var note = getCoreNote(gra[1], ii, {}, false); if (note !== null) { // The grace note durations should not be affected by the default length: they should be based on 1/16, so if that isn't the default, then multiply here. note.duration = note.duration / (multilineVars.default_length * 8); if (acciaccatura) note.acciaccatura = true; gracenotes.push(note); if (inTie) { note.endTie = true; inTie = false; } if (note.startTie) inTie = true; ii = note.endChar; delete note.endChar; } else { // We shouldn't get anything but notes or a space here, so report an error if (gra[1].charAt(ii) === ' ') { if (gracenotes.length > 0) gracenotes[gracenotes.length-1].end_beam = true; } else warn("Unknown character '" + gra[1].charAt(ii) + "' while parsing grace note", line, i); ii++; } } if (gracenotes.length) return [gra[0], gracenotes]; } return [ 0 ]; }; function letter_to_overlay(line, i) { if (line.charAt(i) === '&') { var start = i; while (line.charAt(i) && line.charAt(i) !== ':' && line.charAt(i) !== '|') i++; return [ i-start, line.substring(start+1, i) ]; } return [ 0 ]; } function durationOfMeasure(multilineVars) { // TODO-PER: This could be more complicated if one of the unusual measures is used. var meter = multilineVars.origMeter; if (!meter || meter.type !== 'specified') return 1; if (!meter.value || meter.value.length === 0) return 1; return parseInt(meter.value[0].num, 10) / parseInt(meter.value[0].den, 10); } // // Parse line of music // // This is a stream of <(bar-marking|header|note-group)...> in any order, with optional spaces between each element // core-note is with no spaces within that // chord is with no spaces within that // grace-notes is spaces are allowed // note-group is spaces are allowed between items // bar-marking is or spaces allowed // header is spaces can occur between the colon, in the field, and before the close bracket // header can also be the only thing on a line. This is true even if it is a continuation line. In this case the brackets are not required. // a space is a back-tick, a space, or a tab. If it is a back-tick, then there is no end-beam. // Line preprocessing: anything after a % is ignored (the double %% should have been taken care of before this) // Then, all leading and trailing spaces are ignored. // If there was a line continuation, the \n was replaced by a \r and the \ was replaced by a space. This allows the construct // of having a header mid-line conceptually, but actually be at the start of the line. This is equivolent to putting the header in [ ]. // TODO-PER: How to handle ! for line break? // TODO-PER: dots before bar, dots before slur // TODO-PER: U: redefinable symbols. // Ambiguous symbols: // "[" can be the start of a chord, the start of a header element or part of a bar line. // --- if it is immediately followed by "|", it is a bar line // --- if it is immediately followed by K: L: M: V: it is a header (note: there are other headers mentioned in the standard, but I'm not sure how they would be used.) // --- otherwise it is the beginning of a chord // "(" can be the start of a slur or a triplet // --- if it is followed by a number from 2-9, then it is a triplet // --- otherwise it is a slur // "]" // --- if there is a chord open, then this is the close // --- if it is after a [|, then it is an invisible bar line // --- otherwise, it is par of a bar // "." can be a bar modifier or a slur modifier, or a decoration // --- if it comes immediately before a bar, it is a bar modifier // --- if it comes immediately before a slur, it is a slur modifier // --- otherwise it is a decoration for the next note. // number: // --- if it is after a bar, with no space, it is an ending marker // --- if it is after a ( with no space, it is a triplet count // --- if it is after a pitch or octave or slash, then it is a duration // Unambiguous symbols (except inside quoted strings): // vertical-bar, colon: part of a bar // ABCDEFGabcdefg: pitch // xyzZ: rest // comma, prime: octave // close-paren: end-slur // hyphen: tie // tilde, v, u, bang, plus, THLMPSO: decoration // carat, underscore, equal: accidental // ampersand: time reset // open-curly, close-curly: grace notes // double-quote: chord symbol // less-than, greater-than, slash: duration // back-tick, space, tab: space var nonDecorations = "ABCDEFGabcdefgxyzZ[]|^_{"; // use this to prescreen so we don't have to look for a decoration at every note. var parseRegularMusicLine = function(line) { header.resolveTempo(); //multilineVars.havent_set_length = false; // To late to set this now. multilineVars.is_in_header = false; // We should have gotten a key header by now, but just in case, this is definitely out of the header. var i = 0; var startOfLine = multilineVars.iChar; // see if there is nothing but a comment on this line. If so, just ignore it. A full line comment is optional white space followed by % while (tokenizer.isWhiteSpace(line.charAt(i)) && i < line.length) i++; if (i === line.length || line.charAt(i) === '%') return; // Start with the standard staff, clef and key symbols on each line var delayStartNewLine = multilineVars.start_new_line; if (multilineVars.continueall === undefined) multilineVars.start_new_line = true; else multilineVars.start_new_line = false; var tripletNotesLeft = 0; // See if the line starts with a header field var retHeader = header.letter_to_body_header(line, i); if (retHeader[0] > 0) { i += retHeader[0]; if (retHeader[1] === 'V') delayStartNewLine = true; // fixes bug on this: c[V:2]d // TODO-PER: Handle inline headers } var el = { }; var overlayLevel = 0; while (i < line.length) { var startI = i; if (line.charAt(i) === '%') break; var retInlineHeader = header.letter_to_inline_header(line, i); if (retInlineHeader[0] > 0) { i += retInlineHeader[0]; if (retInlineHeader[1] === 'V') delayStartNewLine = true; // fixes bug on this: c[V:2]d // TODO-PER: Handle inline headers //multilineVars.start_new_line = false; } else { // Wait until here to actually start the line because we know we're past the inline statements. if (delayStartNewLine) { startNewLine(); delayStartNewLine = false; } // We need to decide if the following characters are a bar-marking or a note-group. // Unfortunately, that is ambiguous. Both can contain chord symbols and decorations. // If there is a grace note either before or after the chord symbols and decorations, then it is definitely a note-group. // If there is a bar marker, it is definitely a bar-marking. // If there is either a core-note or chord, it is definitely a note-group. // So, loop while we find grace-notes, chords-symbols, or decorations. [It is an error to have more than one grace-note group in a row; the others can be multiple] // Then, if there is a grace-note, we know where to go. // Else see if we have a chord, core-note, slur, triplet, or bar. var ret; while (1) { ret = tokenizer.eatWhiteSpace(line, i); if (ret > 0) { i += ret; } if (i > 0 && line.charAt(i-1) === '\x12') { // there is one case where a line continuation isn't the same as being on the same line, and that is if the next character after it is a header. ret = header.letter_to_body_header(line, i); if (ret[0] > 0) { if (ret[1] === 'V') startNewLine(); // fixes bug on this: c\\nV:2]\\nd // TODO: insert header here i = ret[0]; multilineVars.start_new_line = false; } } // gather all the grace notes, chord symbols and decorations ret = letter_to_spacer(line, i); if (ret[0] > 0) { i += ret[0]; } ret = letter_to_chord(line, i); if (ret[0] > 0) { // There could be more than one chord here if they have different positions. // If two chords have the same position, then connect them with newline. if (!el.chord) el.chord = []; var chordName = tokenizer.translateString(ret[1]); chordName = chordName.replace(/;/g, "\n"); var addedChord = false; for (var ci = 0; ci < el.chord.length; ci++) { if (el.chord[ci].position === ret[2]) { addedChord = true; el.chord[ci].name += "\n" + chordName; } } if (addedChord === false) { if (ret[2] === null && ret[3]) el.chord.push({name: chordName, rel_position: ret[3]}); else el.chord.push({name: chordName, position: ret[2]}); } i += ret[0]; var ii = tokenizer.skipWhiteSpace(line.substring(i)); if (ii > 0) el.force_end_beam_last = true; i += ii; } else { if (nonDecorations.indexOf(line.charAt(i)) === -1) ret = letter_to_accent(line, i); else ret = [ 0 ]; if (ret[0] > 0) { if (ret[1] === null) { if (i + 1 < line.length) startNewLine(); // There was a ! in the middle of the line. Start a new line if there is anything after it. } else if (ret[1].length > 0) { if (ret[1].indexOf("style=") === 0) { el.style = ret[1].substr(6); } else { if (el.decoration === undefined) el.decoration = []; el.decoration.push(ret[1]); } } i += ret[0]; } else { ret = letter_to_grace(line, i); // TODO-PER: Be sure there aren't already grace notes defined. That is an error. if (ret[0] > 0) { el.gracenotes = ret[1]; i += ret[0]; } else break; } } } ret = letter_to_bar(line, i); if (ret[0] > 0) { // This is definitely a bar overlayLevel = 0; if (el.gracenotes !== undefined) { // Attach the grace note to an invisible note el.rest = { type: 'spacer' }; el.duration = 0.125; // TODO-PER: I don't think the duration of this matters much, but figure out if it does. multilineVars.addFormattingOptions(el, tune.formatting, 'note'); tune.appendElement('note', startOfLine+i, startOfLine+i+ret[0], el); multilineVars.measureNotEmpty = true; el = {}; } var bar = {type: ret[1]}; if (bar.type.length === 0) warn("Unknown bar type", line, i); else { if (multilineVars.inEnding && bar.type !== 'bar_thin') { bar.endEnding = true; multilineVars.inEnding = false; } if (ret[2]) { bar.startEnding = ret[2]; if (multilineVars.inEnding) bar.endEnding = true; multilineVars.inEnding = true; } if (el.decoration !== undefined) bar.decoration = el.decoration; if (el.chord !== undefined) bar.chord = el.chord; if (bar.startEnding && multilineVars.barFirstEndingNum === undefined) multilineVars.barFirstEndingNum = multilineVars.currBarNumber; else if (bar.startEnding && bar.endEnding && multilineVars.barFirstEndingNum) multilineVars.currBarNumber = multilineVars.barFirstEndingNum; else if (bar.endEnding) multilineVars.barFirstEndingNum = undefined; if (bar.type !== 'bar_invisible' && multilineVars.measureNotEmpty) { var isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0); if (isFirstVoice) { multilineVars.currBarNumber++; if (multilineVars.barNumbers && multilineVars.currBarNumber % multilineVars.barNumbers === 0) bar.barNumber = multilineVars.currBarNumber; } } multilineVars.addFormattingOptions(el, tune.formatting, 'bar'); tune.appendElement('bar', startOfLine+i, startOfLine+i+ret[0], bar); multilineVars.measureNotEmpty = false; el = {}; } i += ret[0]; var cv = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum + '-' + multilineVars.currentVoice.index : 'ONLY'; // if (multilineVars.lineBreaks) { // if (!multilineVars.barCounter[cv]) // multilineVars.barCounter[cv] = 0; // var breakNow = multilineVars.lineBreaks[''+multilineVars.barCounter[cv]]; // multilineVars.barCounter[cv]++; // if (breakNow) // startNewLine(); // } } else if (line[i] === '&') { // backtrack to beginning of measure ret = letter_to_overlay(line, i); if (ret[0] > 0) { tune.appendElement('overlay', startOfLine, startOfLine+1, {}); i += 1; overlayLevel++; } } else { // This is definitely a note group // // Look for as many open slurs and triplets as there are. (Note: only the first triplet is valid.) ret = letter_to_open_slurs_and_triplets(line, i); if (ret.consumed > 0) { if (ret.startSlur !== undefined) el.startSlur = ret.startSlur; if (ret.triplet !== undefined) { if (tripletNotesLeft > 0) warn("Can't nest triplets", line, i); else { el.startTriplet = ret.triplet; el.tripletMultiplier = ret.tripletQ / ret.triplet; tripletNotesLeft = ret.num_notes === undefined ? ret.triplet : ret.num_notes; } } i += ret.consumed; } // handle chords. if (line.charAt(i) === '[') { var chordStartChar = i; i++; var chordDuration = null; var rememberEndBeam = false; var done = false; while (!done) { var accent = letter_to_accent(line, i); if (accent[0] > 0) { i += accent[0]; } var chordNote = getCoreNote(line, i, {}, false); if (chordNote !== null) { if (accent[0] > 0) { // If we found a decoration above, it modifies the entire chord. "style" is handled below. if (accent[1].indexOf("style=") !== 0) { if (el.decoration === undefined) el.decoration = []; el.decoration.push(accent[1]); } } if (chordNote.end_beam) { el.end_beam = true; delete chordNote.end_beam; } if (el.pitches === undefined) { el.duration = chordNote.duration; el.pitches = [ chordNote ]; } else // Just ignore the note lengths of all but the first note. The standard isn't clear here, but this seems less confusing. el.pitches.push(chordNote); delete chordNote.duration; if (accent[0] > 0) { // If we found a style above, it modifies the individual pitch, not the entire chord. if (accent[1].indexOf("style=") === 0) { el.pitches[el.pitches.length-1].style = accent[1].substr(6); } } if (multilineVars.inTieChord[el.pitches.length]) { chordNote.endTie = true; multilineVars.inTieChord[el.pitches.length] = undefined; } if (chordNote.startTie) multilineVars.inTieChord[el.pitches.length] = true; i = chordNote.endChar; delete chordNote.endChar; } else if (line.charAt(i) === ' ') { // Spaces are not allowed in chords, but we can recover from it by ignoring it. warn("Spaces are not allowed in chords", line, i); i++; } else { if (i < line.length && line.charAt(i) === ']') { // consume the close bracket i++; if (multilineVars.next_note_duration !== 0) { el.duration = el.duration * multilineVars.next_note_duration; multilineVars.next_note_duration = 0; } if (isInTie(multilineVars, overlayLevel, el)) { abc_common.each(el.pitches, function(pitch) { pitch.endTie = true; }); setIsInTie(multilineVars, overlayLevel, false); } if (tripletNotesLeft > 0) { tripletNotesLeft--; if (tripletNotesLeft === 0) { el.endTriplet = true; } } var postChordDone = false; while (i < line.length && !postChordDone) { switch (line.charAt(i)) { case ' ': case '\t': addEndBeam(el); break; case ')': if (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++; break; case '-': abc_common.each(el.pitches, function(pitch) { pitch.startTie = {}; }); setIsInTie(multilineVars, overlayLevel, true); break; case '>': case '<': var br2 = getBrokenRhythm(line, i); i += br2[0] - 1; // index gets incremented below, so we'll let that happen multilineVars.next_note_duration = br2[2]; if (chordDuration) chordDuration = chordDuration * br2[1]; else chordDuration = br2[1]; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '/': var fraction = tokenizer.getFraction(line, i); chordDuration = fraction.value; i = fraction.index; if (line.charAt(i) === ' ') rememberEndBeam = true; if (line.charAt(i) === '-' || line.charAt(i) === ')' || line.charAt(i) === ' ' || line.charAt(i) === '<' || line.charAt(i) === '>') i--; // Subtracting one because one is automatically added below else postChordDone = true; break; default: postChordDone = true; break; } if (!postChordDone) { i++; } } } else warn("Expected ']' to end the chords", line, i); if (el.pitches !== undefined) { if (chordDuration !== null) { el.duration = el.duration * chordDuration; if (rememberEndBeam) addEndBeam(el); } multilineVars.addFormattingOptions(el, tune.formatting, 'note'); tune.appendElement('note', startOfLine+chordStartChar, startOfLine+i, el); multilineVars.measureNotEmpty = true; el = {}; } done = true; } } } else { // Single pitch var el2 = {}; var core = getCoreNote(line, i, el2, true); if (el2.endTie !== undefined) setIsInTie(multilineVars, overlayLevel, true); if (core !== null) { if (core.pitch !== undefined) { el.pitches = [ { } ]; // TODO-PER: straighten this out so there is not so much copying: getCoreNote shouldn't change e' if (core.accidental !== undefined) el.pitches[0].accidental = core.accidental; el.pitches[0].pitch = core.pitch; if (core.midipitch) el.pitches[0].midipitch = core.midipitch; if (core.endSlur !== undefined) el.pitches[0].endSlur = core.endSlur; if (core.endTie !== undefined) el.pitches[0].endTie = core.endTie; if (core.startSlur !== undefined) el.pitches[0].startSlur = core.startSlur; if (el.startSlur !== undefined) el.pitches[0].startSlur = el.startSlur; if (core.startTie !== undefined) el.pitches[0].startTie = core.startTie; if (el.startTie !== undefined) el.pitches[0].startTie = el.startTie; } else { el.rest = core.rest; if (core.endSlur !== undefined) el.endSlur = core.endSlur; if (core.endTie !== undefined) el.rest.endTie = core.endTie; if (core.startSlur !== undefined) el.startSlur = core.startSlur; if (core.startTie !== undefined) el.rest.startTie = core.startTie; if (el.startTie !== undefined) el.rest.startTie = el.startTie; } if (core.chord !== undefined) el.chord = core.chord; if (core.duration !== undefined) el.duration = core.duration; if (core.decoration !== undefined) el.decoration = core.decoration; if (core.graceNotes !== undefined) el.graceNotes = core.graceNotes; delete el.startSlur; if (isInTie(multilineVars, overlayLevel, el)) { if (el.pitches !== undefined) { el.pitches[0].endTie = true; } else if (el.rest.type !== 'spacer') { el.rest.endTie = true; } setIsInTie(multilineVars, overlayLevel, false); } if (core.startTie || el.startTie) setIsInTie(multilineVars, overlayLevel, true); i = core.endChar; if (tripletNotesLeft > 0) { tripletNotesLeft--; if (tripletNotesLeft === 0) { el.endTriplet = true; } } if (core.end_beam) addEndBeam(el); // If there is a whole rest, then it should be the duration of the measure, not it's own duration. We need to special case it. // If the time signature length is greater than 4/4, though, then a whole rest has no special treatment. if (el.rest && el.rest.type === 'rest' && el.duration === 1 && durationOfMeasure(multilineVars) <= 1) { el.rest.type = 'whole'; el.duration = durationOfMeasure(multilineVars); } multilineVars.addFormattingOptions(el, tune.formatting, 'note'); tune.appendElement('note', startOfLine+startI, startOfLine+i, el); multilineVars.measureNotEmpty = true; el = {}; } } if (i === startI) { // don't know what this is, so ignore it. if (line.charAt(i) !== ' ' && line.charAt(i) !== '`') warn("Unknown character ignored", line, i); i++; } } } } }; var isInTie = function(multilineVars, overlayLevel, el) { if (multilineVars.inTie[overlayLevel] === undefined) return false; // If this is single voice music then the voice index isn't set, so we use the first voice. var voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.index : 0; if (multilineVars.inTie[overlayLevel][voiceIndex]) { if (el.pitches !== undefined || el.rest.type !== 'spacer') return true; } return false; }; var setIsInTie =function(multilineVars, overlayLevel, value) { // If this is single voice music then the voice index isn't set, so we use the first voice. var voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.index : 0; if (multilineVars.inTie[overlayLevel] === undefined) multilineVars.inTie[overlayLevel] = []; multilineVars.inTie[overlayLevel][voiceIndex] = value; }; var parseLine = function(line) { var ret = header.parseHeader(line); if (ret.regular) parseRegularMusicLine(ret.str); if (ret.newline) startNewLine(); if (ret.words) addWords(tune.getCurrentVoice(), line.substring(2)); if (ret.symbols) addSymbols(tune.getCurrentVoice(), line.substring(2)); if (ret.recurse) parseLine(ret.str); }; function appendLastMeasure(voice, nextVoice) { voice.push({ el_type: 'hint' }); for (var i = 0; i < nextVoice.length; i++) { var element = nextVoice[i]; var hint = abc_common.clone(element); voice.push(hint); if (element.el_type === 'bar') return; } } function addHintMeasure(staff, nextStaff) { for (var i = 0; i < staff.length; i++) { var stave = staff[i]; var nextStave = nextStaff[i]; if (nextStave) { // Be sure there is the same number of staves on the next line. for (var j = 0; j < nextStave.voices.length; j++) { var nextVoice = nextStave.voices[j]; var voice = stave.voices[j]; if (voice) { // Be sure there are the same number of voices on the previous line. appendLastMeasure(voice, nextVoice); } } } } } function addHintMeasures() { for (var i = 0; i < tune.lines.length; i++) { var line = tune.lines[i].staff; if (line) { var j = i+1; while (j < tune.lines.length && tune.lines[j].staff === undefined) j++; if (j < tune.lines.length) { var nextLine = tune.lines[j].staff; addHintMeasure(line, nextLine); } } } } this.parse = function(strTune, switches, startPos) { // the switches are optional and cause a difference in the way the tune is parsed. // switches.header_only : stop parsing when the header is finished // switches.stop_on_warning : stop at the first warning encountered. // switches.print: format for the page instead of the browser. // switches.format: a hash of the desired formatting commands. // switches.hint_measures: put the next measure at the end of the current line. // switches.transpose: change the key signature, chords, and notes by a number of half-steps. if (!switches) switches = {}; if (!startPos) startPos = 0; tune.reset(); if (switches.print) tune.media = 'print'; multilineVars.reset(); multilineVars.iChar = startPos; if (switches.visualTranspose) { multilineVars.globalTranspose = parseInt(switches.visualTranspose); if (multilineVars.globalTranspose === 0) multilineVars.globalTranspose = undefined; } else multilineVars.globalTranspose = undefined; if (switches.lineBreaks) { // change the format of the the line breaks for easy testing. // The line break numbers are 0-based and they reflect the last measure of the current line. multilineVars.lineBreaks = {}; //multilineVars.continueall = true; for (var i = 0; i < switches.lineBreaks.length; i++) multilineVars.lineBreaks[''+(switches.lineBreaks[i]+1)] = true; // Add 1 so that the line break is the first measure of the next line. } header.reset(tokenizer, warn, multilineVars, tune); // Take care of whatever line endings come our way strTune = abc_common.gsub(strTune, '\r\n', '\n'); strTune = abc_common.gsub(strTune, '\r', '\n'); strTune += '\n'; // Tacked on temporarily to make the last line continuation work strTune = strTune.replace(/\n\\.*\n/g, "\n"); // get rid of latex commands. var continuationReplacement = function(all, backslash, comment){ var spaces = " "; var padding = comment ? spaces.substring(0, comment.length) : ""; return backslash + " \x12" + padding; }; strTune = strTune.replace(/\\([ \t]*)(%.*)*\n/g, continuationReplacement); // take care of line continuations right away, but keep the same number of characters var lines = strTune.split('\n'); if (abc_common.last(lines).length === 0) // remove the blank line we added above. lines.pop(); try { if (switches.format) { abc_parse_directive.globalFormatting(switches.format); } abc_common.each(lines, function(line) { if (switches.header_only && multilineVars.is_in_header === false) throw "normal_abort"; if (switches.stop_on_warning && multilineVars.warnings) throw "normal_abort"; if (multilineVars.is_in_history) { if (line.charAt(1) === ':') { multilineVars.is_in_history = false; parseLine(line); } else tune.addMetaText("history", tokenizer.translateString(tokenizer.stripComment(line))); } else if (multilineVars.inTextBlock) { if (abc_common.startsWith(line, "%%endtext")) { //tune.addMetaText("textBlock", multilineVars.textBlock); tune.addText(multilineVars.textBlock); multilineVars.inTextBlock = false; } else { if (abc_common.startsWith(line, "%%")) multilineVars.textBlock += ' ' + line.substring(2); else multilineVars.textBlock += ' ' + line; } } else if (multilineVars.inPsBlock) { if (abc_common.startsWith(line, "%%endps")) { // Just ignore postscript multilineVars.inPsBlock = false; } else multilineVars.textBlock += ' ' + line; } else parseLine(line); multilineVars.iChar += line.length + 1; }); var ph = 11*72; var pl = 8.5*72; switch (multilineVars.papersize) { //case "letter": ph = 11*72; pl = 8.5*72; break; case "legal": ph = 14*72; pl = 8.5*72; break; case "A4": ph = 11.7*72; pl = 8.3*72; break; } if (multilineVars.landscape) { var x = ph; ph = pl; pl = x; } multilineVars.openSlurs = tune.cleanUp(pl, ph, multilineVars.barsperstaff, multilineVars.staffnonote, multilineVars.openSlurs); } catch (err) { if (err !== "normal_abort") throw err; } if (switches.hint_measures) { addHintMeasures(); } wrap_lines.wrapLines(tune, multilineVars.lineBreaks); }; }; var abc_parse = Parse; // abc_tunebook.js: splits a string representing ABC Music Notation into individual tunes. // Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /*global document */ /*global window, ABCJS, console */ var tunebook = {}; (function() { tunebook.numberOfTunes = function(abc) { var tunes = abc.split("\nX:"); var num = tunes.length; if (num === 0) num = 1; return num; }; var TuneBook = tunebook.TuneBook = function(book) { var This = this; var directives = ""; book = abc_common.strip(book); var tunes = book.split("\nX:"); for (var i = 1; i < tunes.length; i++) // Put back the X: that we lost when splitting the tunes. tunes[i] = "X:" + tunes[i]; // Keep track of the character position each tune starts with. var pos = 0; This.tunes = []; abc_common.each(tunes, function(tune) { This.tunes.push({ abc: tune, startPos: pos}); pos += tune.length + 1; // We also lost a newline when splitting, so count that. }); if (This.tunes.length > 1 && !abc_common.startsWith(This.tunes[0].abc, 'X:')) { // If there is only one tune, the X: might be missing, otherwise assume the top of the file is "intertune" // There could be file-wide directives in this, if so, we need to insert it into each tune. We can probably get away with // just looking for file-wide directives here (before the first tune) and inserting them at the bottom of each tune, since // the tune is parsed all at once. The directives will be seen before the engraver begins processing. var dir = This.tunes.shift(); var arrDir = dir.abc.split('\n'); abc_common.each(arrDir, function(line) { if (abc_common.startsWith(line, '%%')) directives += line + '\n'; }); } This.header = directives; // Now, the tune ends at a blank line, so truncate it if needed. There may be "intertune" stuff. abc_common.each(This.tunes, function(tune) { var end = tune.abc.indexOf('\n\n'); if (end > 0) tune.abc = tune.abc.substring(0, end); tune.pure = tune.abc; tune.abc = directives + tune.abc; // for the user's convenience, parse and store the title separately. The title is between the first T: and the next \n var title = tune.pure.split("T:"); if (title.length > 1) { title = title[1].split("\n"); tune.title = title[0].replace(/^\s+|\s+$/g, ''); } else tune.title = ""; // for the user's convenience, parse and store the id separately. The id is between the first X: and the next \n var id = tune.pure.substring(2, tune.pure.indexOf("\n")); tune.id = id.replace(/^\s+|\s+$/g, ''); }); }; TuneBook.prototype.getTuneById = function(id) { for (var i = 0; i < this.tunes.length; i++) { if (this.tunes[i].id === ''+id) return this.tunes[i]; } return null; }; TuneBook.prototype.getTuneByTitle = function(title) { for (var i = 0; i < this.tunes.length; i++) { if (this.tunes[i].title === title) return this.tunes[i]; } return null; }; tunebook.parseOnly = function(abc, params) { var numTunes = tunebook.numberOfTunes(abc); // this just needs to be passed in because this tells the engine how many tunes to process. var output = []; for (var i = 0; i < numTunes; i++) { output.push(1); } function callback() { // Don't need to do anything with the parsed tunes. } return tunebook.renderEngine(callback, output, abc, params); }; tunebook.renderEngine = function (callback, output, abc, params) { var ret = []; var isArray = function(testObject) { return testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number'; }; // check and normalize input parameters if (output === undefined || abc === undefined) return; if (!isArray(output)) output = [ output ]; if (params === undefined) params = {}; var currentTune = params.startingTune ? parseInt(params.startingTune, 10) : 0; // parse the abc string var book = new TuneBook(abc); var abcParser = new abc_parse(); // output each tune, if it exists. Otherwise clear the div. for (var i = 0; i < output.length; i++) { var div = output[i]; if (div === "*") ; else if (typeof(div) === "string") div = document.getElementById(div); if (div) { if (currentTune >= 0 && currentTune < book.tunes.length) { abcParser.parse(book.tunes[currentTune].abc, params, book.tunes[currentTune].startPos - book.header.length); var tune = abcParser.getTune(); var override = callback(div, tune, i, book.tunes[currentTune].abc); ret.push(override ? override : tune); } else { if (div.hasOwnProperty('innerHTML')) div.innerHTML = ""; } } currentTune++; } return ret; }; tunebook.extractMeasures = function(abc) { var tunes = []; var book = new TuneBook(abc); for (var i = 0; i < book.tunes.length; i++) { var tune = book.tunes[i]; var arr = tune.abc.split("K:"); var arr2 = arr[1].split("\n"); var header = arr[0] + "K:" + arr2[0] + "\n"; var lastChord = null; var measureStartChord = null; var fragStart = null; var measures = []; var hasNotes = false; var tuneObj = tunebook.parseOnly(tune.abc)[0]; var hasPickup = tuneObj.getPickupLength() > 0; // var staves = flattenTune(tuneObj); // for (var s = 0; s < staves.length; s++) { // var voices = measuresParser(staves[s], tune); // if (s === 0) // measures = voices; // else { // for (var ss = 0; ss < voices.length; ss++) { // var voice = voices[ss]; // if (measures.length <= ss) // measures.push([]); // var measureVoice = measures[ss]; // for (var sss = 0; sss < voice.length; sss++) { // if (measureVoice.length > sss) // measureVoice[sss].abc += "\n" + voice[sss].abc; // else // measures.push(voice[sss]); // } // } // } // console.log(voices); // } // measures = measures[0]; for (var j = 0; j < tuneObj.lines.length; j++) { var line = tuneObj.lines[j]; if (line.staff) { for (var k = 0; k < 1 /*line.staff.length*/; k++) { var staff = line.staff[k]; for (var kk = 0; kk < 1 /*staff.voices.length*/; kk++) { var voice = staff.voices[kk]; for (var kkk = 0; kkk < voice.length; kkk++) { var elem = voice[kkk]; if (fragStart === null && elem.startChar >= 0) { fragStart = elem.startChar; if (elem.chord === undefined) measureStartChord = lastChord; else measureStartChord = null; } if (elem.chord) lastChord = elem; if (elem.el_type === 'bar') { if (hasNotes) { var frag = tune.abc.substring(fragStart, elem.endChar); var measure = {abc: frag}; lastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null; if (lastChord) measure.lastChord = lastChord; if (elem.startEnding) measure.startEnding = elem.startEnding; if (elem.endEnding) measure.endEnding = elem.endEnding; measures.push(measure); fragStart = null; hasNotes = false; } } else if (elem.el_type === 'note') { hasNotes = true; } } } } } } tunes.push({ header: header, measures: measures, hasPickup: hasPickup }); } return tunes; }; })(); var abc_tunebook = tunebook; // abc_absolute_element.js: Definition of the AbsoluteElement class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // duration - actual musical duration - different from notehead duration in triplets. refer to abcelem to get the notehead duration // minspacing - spacing which must be taken on top of the width defined by the duration // type is a meta-type for the element. It is not necessary for drawing, but it is useful to make semantic sense of the element. For instance, it can be used in the element's class name. var AbsoluteElement = function AbsoluteElement(abcelem, duration, minspacing, type, tuneNumber, options) { //console.log("Absolute:",abcelem, type); if (!options) options = {}; this.tuneNumber = tuneNumber; this.abcelem = abcelem; this.duration = duration; this.durationClass = options.durationClassOveride ? options.durationClassOveride : this.duration; this.minspacing = minspacing || 0; this.x = 0; this.children = []; this.heads = []; this.extra = []; this.extraw = 0; //this.decs = []; this.w = 0; this.right = []; this.invisible = false; this.bottom = undefined; this.top = undefined; this.type = type; // these are the heights of all of the vertical elements that can't be placed until the end of the line. // the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric // the vertical order of elements that are below is: lyric, chord, volume/dynamic this.specialY = { tempoHeightAbove: 0, partHeightAbove: 0, volumeHeightAbove: 0, dynamicHeightAbove: 0, endingHeightAbove: 0, chordHeightAbove: 0, lyricHeightAbove: 0, lyricHeightBelow: 0, chordHeightBelow: 0, volumeHeightBelow: 0, dynamicHeightBelow: 0 }; }; // For each of the relative elements that can't be placed in advance (because their vertical placement depends on everything // else on the line), this iterates through them and sets their pitch. By the time this is called, specialYResolved contains a // hash with the vertical placement (in pitch units) for each type. // TODO-PER: I think this needs to be separated by "above" and "below". How do we know that for dynamics at the point where they are being defined, though? We need a pass through all the relative elements to set "above" and "below". AbsoluteElement.prototype.setUpperAndLowerElements = function(specialYResolved) { // specialYResolved contains the actual pitch for each of the classes of elements. for (var i = 0; i < this.children.length; i++) { var child = this.children[i]; for (var key in this.specialY) { // for each class of element that needs to be placed vertically if (this.specialY.hasOwnProperty(key)) { if (child[key]) { // If this relative element has defined a height for this class of element child.pitch = specialYResolved[key]; if (child.top === undefined) { // TODO-PER: HACK! Not sure this is the right place to do this. child.setUpperAndLowerElements(specialYResolved); this.pushTop(child.top); this.pushBottom(child.bottom); } } } } } }; AbsoluteElement.prototype.getMinWidth = function () { // absolute space taken to the right of the note return this.w; }; AbsoluteElement.prototype.getExtraWidth = function () { // space needed to the left of the note return -this.extraw; }; AbsoluteElement.prototype.addExtra = function (extra) { if (extra.dxthis.w) this.w = right.dx+right.w; this.right[this.right.length] = right; this.addChild(right); }; AbsoluteElement.prototype.addCentered = function (elem) { var half = elem.w/2; if (-halfthis.w) this.w = elem.dx+half; this.right[this.right.length] = elem; this.addChild(elem); }; AbsoluteElement.prototype.setLimit = function(member, child) { if (!child[member]) return; if (!this.specialY[member]) this.specialY[member] = child[member]; else this.specialY[member] = Math.max(this.specialY[member], child[member]); }; AbsoluteElement.prototype.addChild = function (child) { //console.log("Relative:",child); child.parent = this; this.children[this.children.length] = child; this.pushTop(child.top); this.pushBottom(child.bottom); this.setLimit('tempoHeightAbove', child); this.setLimit('partHeightAbove', child); this.setLimit('volumeHeightAbove', child); this.setLimit('dynamicHeightAbove', child); this.setLimit('endingHeightAbove', child); this.setLimit('chordHeightAbove', child); this.setLimit('lyricHeightAbove', child); this.setLimit('lyricHeightBelow', child); this.setLimit('chordHeightBelow', child); this.setLimit('volumeHeightBelow', child); this.setLimit('dynamicHeightBelow', child); }; AbsoluteElement.prototype.pushTop = function (top) { if (top !== undefined) { if (this.top === undefined) this.top = top; else this.top = Math.max(top, this.top); } }; AbsoluteElement.prototype.pushBottom = function (bottom) { if (bottom !== undefined) { if (this.bottom === undefined) this.bottom = bottom; else this.bottom = Math.min(bottom, this.bottom); } }; AbsoluteElement.prototype.setX = function (x) { this.x = x; for (var i=0; i 0) { if (kls.length > 0 && kls.charAt(kls.length - 1) !== ' ') kls += " "; kls += addClass; } el.setAttribute("class", kls); } }; AbsoluteElement.prototype.highlight = function (klass, color) { if (klass === undefined) klass = "abcjs-note_selected"; if (color === undefined) color = "#ff0000"; this.setClass(klass, "", color); }; AbsoluteElement.prototype.unhighlight = function (klass, color) { if (klass === undefined) klass = "abcjs-note_selected"; if (color === undefined) color = "#000000"; this.setClass("", klass, color); }; var abc_absolute_element = AbsoluteElement; // abc_relative_element.js: Definition of the RelativeElement class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var RelativeElement = function RelativeElement(c, dx, w, pitch, opt) { opt = opt || {}; this.x = 0; this.c = c; // character or path or string this.dx = dx; // relative x position this.w = w; // minimum width taken up by this element (can include gratuitous space) this.pitch = pitch; // relative y position by pitch this.scalex = opt.scalex || 1; // should the character/path be scaled? this.scaley = opt.scaley || 1; // should the character/path be scaled? this.type = opt.type || "symbol"; // cheap types. this.pitch2 = opt.pitch2; this.linewidth = opt.linewidth; this.klass = opt.klass; this.top = pitch; if (this.pitch2 !== undefined && this.pitch2 > this.top) this.top = this.pitch2; this.bottom = pitch; if (this.pitch2 !== undefined && this.pitch2 < this.bottom) this.bottom = this.pitch2; if (opt.thickness) { this.top += opt.thickness/2; this.bottom -= opt.thickness/2; } if (opt.stemHeight) { if (opt.stemHeight > 0) this.top += opt.stemHeight; else this.bottom += opt.stemHeight; } //if (this.type === "symbol") { // var offset = glyphs.getYCorr(this.c); // this.top += offset; // this.bottom += offset; //} this.height = opt.height ? opt.height : 4; // The +1 is to give a little bit of padding. this.centerVertically = false; switch (this.type) { case "debug": this.chordHeightAbove = this.height; break; case "lyric": if (opt.position && opt.position === 'below') this.lyricHeightBelow = this.height; else this.lyricHeightAbove = this.height; break; case "chord": if (opt.position && opt.position === 'below') this.chordHeightBelow = this.height; else this.chordHeightAbove = this.height; break; case "text": if (this.pitch === undefined) { if (opt.position && opt.position === 'below') this.chordHeightBelow = this.height; else this.chordHeightAbove = this.height; } else this.centerVertically = true; break; case "part": this.partHeightAbove = this.height; break; } }; RelativeElement.prototype.setX = function (x) { this.x = x+this.dx; }; RelativeElement.prototype.setUpperAndLowerElements = function(positionY) { switch(this.type) { case "part": this.top = positionY.partHeightAbove + this.height; this.bottom = positionY.partHeightAbove; break; case "text": case "chord": if (this.chordHeightAbove) { this.top = positionY.chordHeightAbove; this.bottom = positionY.chordHeightAbove; } else { this.top = positionY.chordHeightBelow; this.bottom = positionY.chordHeightBelow; } break; case "lyric": if (this.lyricHeightAbove) { this.top = positionY.lyricHeightAbove; this.bottom = positionY.lyricHeightAbove; } else { this.top = positionY.lyricHeightBelow; this.bottom = positionY.lyricHeightBelow; } break; case "debug": this.top = positionY.chordHeightAbove; this.bottom = positionY.chordHeightAbove; break; } if (this.pitch === undefined || this.top === undefined) window.console.error("RelativeElement position not set.", this.type, this.pitch, this.top, positionY); }; RelativeElement.prototype.draw = function (renderer, bartop) { if (this.pitch === undefined) window.console.error(this.type + " Relative Element y-coordinate not set."); var y = renderer.calcY(this.pitch); switch(this.type) { case "symbol": if (this.c===null) return null; var klass = "symbol"; if (this.klass) klass += " " + this.klass; this.graphelem = renderer.printSymbol(this.x, this.pitch, this.c, this.scalex, this.scaley, renderer.addClasses(klass)); break; case "debug": this.graphelem = renderer.renderText(this.x, renderer.calcY(15), ""+this.c, "debugfont", 'debug-msg', 'start'); break; case "barNumber": this.graphelem = renderer.renderText(this.x, y, ""+this.c, "measurefont", 'bar-number', "middle"); break; case "lyric": this.graphelem = renderer.renderText(this.x, y, this.c, "vocalfont", 'lyric', "middle"); break; case "chord": this.graphelem = renderer.renderText(this.x, y, this.c, 'gchordfont', "chord", "middle"); break; case "decoration": this.graphelem = renderer.renderText(this.x, y, this.c, 'annotationfont', "annotation", "middle", true); break; case "text": this.graphelem = renderer.renderText(this.x, y, this.c, 'annotationfont', "annotation", "start", this.centerVertically); break; case "multimeasure-text": this.graphelem = renderer.renderText(this.x+this.w/2, y, this.c, 'tempofont', "rest", "middle", false); break; case "part": this.graphelem = renderer.renderText(this.x, y, this.c, 'partsfont', "part", "start"); break; case "bar": this.graphelem = renderer.printStem(this.x, this.linewidth, y, (bartop)?bartop:renderer.calcY(this.pitch2)); break; // bartop can't be 0 case "stem": this.graphelem = renderer.printStem(this.x, this.linewidth, y, renderer.calcY(this.pitch2)); break; case "ledger": this.graphelem = renderer.printStaveLine(this.x, this.x+this.w, this.pitch); break; } if (this.scalex!==1 && this.graphelem) { renderer.scaleExistingElem(this.graphelem, this.scalex, this.scaley, this.x, y); } return this.graphelem; }; var abc_relative_element = RelativeElement; // abc_beam_element.js: Definition of the BeamElem class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var getDurlog = function(duration) { // TODO-PER: This is a hack to prevent a Chrome lockup. Duration should have been defined already, // but there's definitely a case where it isn't. [Probably something to do with triplets.] if (duration === undefined) { return 0; } // console.log("getDurlog: " + duration); return Math.floor(Math.log(duration)/Math.log(2)); }; // Most elements on the page are related to a particular absolute element -- notes, rests, bars, etc. Beams, however, span multiple elements. // This means that beams can't be laid out until the absolute elements are placed. There is the further complication that the stems for beamed // notes can't be laid out until the beams are because we don't know how long they will be until we know the slope of the beam and the horizontal // spacing of the absolute elements. // // So, when a beam is detected, a BeamElem is created, then all notes belonging to that beam are added to it. These notes are not given stems at that time. // Then, after the horizontal layout is complete, all of the BeamElem are iterated to set the beam position, then all of the notes that are beamed are given // stems. After that, we are ready for the drawing step. // There are three phases: the setup phase, when new elements are being discovered, the layout phase, when everything is calculated, and the drawing phase, // when the object is not changed, but is used to put the elements on the page. var BeamElem; (function() { // // Setup phase // BeamElem = function BeamElem(stemHeight, type, flat) { // type is "grace", "up", "down", or undefined. flat is used to force flat beams, as it commonly found in the grace notes of bagpipe music. this.isflat = flat; this.isgrace = (type && type === "grace"); this.forceup = this.isgrace || (type && type === "up"); this.forcedown = (type && type === "down"); this.elems = []; // all the AbsoluteElements that this beam touches. It may include embedded rests. this.total = 0; this.allrests = true; this.stemHeight = stemHeight; this.beams = []; // During the layout phase, this will become a list of the beams that need to be drawn. }; BeamElem.prototype.setHint = function () { this.hint = true; }; BeamElem.prototype.add = function(abselem) { var pitch = abselem.abcelem.averagepitch; if (pitch === undefined) return; // don't include elements like spacers in beams this.allrests = this.allrests && abselem.abcelem.rest; abselem.beam = this; this.elems.push(abselem); //var pitch = abselem.abcelem.averagepitch; this.total += pitch; // TODO CHORD (get pitches from abselem.heads) if (this.min === undefined || abselem.abcelem.minpitch < this.min) { this.min = abselem.abcelem.minpitch; } if (this.max === undefined || abselem.abcelem.maxpitch > this.max) { this.max = abselem.abcelem.maxpitch; } }; var middleLine = 6; // hardcoded 6 is B BeamElem.prototype.calcDir = function() { if (this.forceup) return true; if (this.forcedown) return false; var average = calcAverage(this.total, this.elems.length); return average < middleLine; }; // // layout phase // BeamElem.prototype.layout = function() { if (this.elems.length === 0 || this.allrests) return; this.stemsUp = this.calcDir(); // True means the stems are facing up. var dy = calcDy(this.stemsUp, this.isgrace); // This is the width of the beam line. // create the main beam var firstElement = this.elems[0]; var lastElement = this.elems[this.elems.length - 1]; var minStemHeight = 0; // The following is to leave space for "!///!" marks. var referencePitch = this.stemsUp ? firstElement.abcelem.maxpitch : firstElement.abcelem.minpitch; minStemHeight = minStem(firstElement, this.stemsUp, referencePitch, minStemHeight); minStemHeight = minStem(lastElement, this.stemsUp, referencePitch, minStemHeight); minStemHeight = Math.max(this.stemHeight, minStemHeight + 3); // TODO-PER: The 3 is the width of a 16th beam. The actual height of the beam should be used instead. var yPos = calcYPos(this.total, this.elems.length, minStemHeight, this.stemsUp, firstElement.abcelem.averagepitch, lastElement.abcelem.averagepitch, this.isflat, this.min, this.max, this.isgrace); var xPos = calcXPos(this.stemsUp, firstElement, lastElement); this.beams.push({ startX: xPos[0], endX: xPos[1], startY: yPos[0], endY: yPos[1], dy: dy }); // create the rest of the beams (in the case of 1/16th notes, etc. var beams = createAdditionalBeams(this.elems, this.stemsUp, this.beams[0], this.isgrace, dy); for (var i = 0; i < beams.length; i++) this.beams.push(beams[i]); // Now that the main beam is defined, we know how tall the stems should be, so create them and attach them to the original notes. createStems(this.elems, this.stemsUp, this.beams[0], dy, this.mainNote); }; BeamElem.prototype.isAbove = function() { return this.stemsUp; }; // We can't just use the entire beam for the calculation. The range has to be passed in, because the beam might extend into some unrelated notes. for instance, (3_a'f'e'f'2 when L:16 BeamElem.prototype.heightAtMidpoint = function(startX, endX) { if (this.beams.length === 0) return 0; var beam = this.beams[0]; var midPoint = startX + (endX - startX) / 2; return getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, midPoint); }; BeamElem.prototype.yAtNote = function(element) { var beam = this.beams[0]; return getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, element.x); }; BeamElem.prototype.xAtMidpoint = function(startX, endX) { return startX + (endX - startX)/2; }; // // Drawing phase // BeamElem.prototype.draw = function(renderer) { if (this.beams.length === 0) return; renderer.beginGroup(); for (var i = 0; i < this.beams.length; i++) { var beam = this.beams[i]; drawBeam(renderer, beam.startX, beam.startY, beam.endX, beam.endY, beam.dy, this.hint); } renderer.endGroup('beam-elem'); }; // // private functions // function minStem(element, stemsUp, referencePitch, minStemHeight) { if (!element.children) return minStemHeight; for (var i = 0; i < element.children.length; i++) { var elem = element.children[i]; if (stemsUp && elem.top !== undefined && elem.c === "flags.ugrace") minStemHeight = Math.max(minStemHeight, elem.top - referencePitch); else if (!stemsUp && elem.bottom !== undefined && elem.c === "flags.ugrace") minStemHeight = Math.max(minStemHeight, referencePitch - elem.bottom + 7); // The extra 7 is because we are measuring the slash from the top. } return minStemHeight; } function calcSlant(leftAveragePitch, rightAveragePitch, numStems, isFlat) { if (isFlat) return 0; var slant = leftAveragePitch - rightAveragePitch; var maxSlant = numStems / 2; if (slant > maxSlant) slant = maxSlant; if (slant < -maxSlant) slant = -maxSlant; return slant; } function calcAverage(total, numElements) { if (!numElements) return 0; return total / numElements; } function getBarYAt(startx, starty, endx, endy, x) { return starty + (endy - starty) / (endx - startx) * (x - startx); } function calcDy(asc, isGrace) { var dy = (asc) ? abc_spacing.STEP : -abc_spacing.STEP; if (isGrace) dy = dy * 0.4; return dy; } function drawBeam(renderer, startX, startY, endX, endY, dy, isHint) { var klass = 'beam-elem'; if (isHint) klass += " abcjs-hint"; // the X coordinates are actual coordinates, but the Y coordinates are in pitches. startY = renderer.calcY(startY); endY = renderer.calcY(endY); var pathString = "M" + startX + " " + startY + " L" + endX + " " + endY + "L" + endX + " " + (endY + dy) + " L" + startX + " " + (startY + dy) + "z"; renderer.printPath({ path: pathString, stroke: "none", fill: "#000000", 'class': renderer.addClasses(klass) }); } function calcXPos(asc, firstElement, lastElement) { var starthead = firstElement.heads[asc ? 0 : firstElement.heads.length - 1]; var endhead = lastElement.heads[asc ? 0 : lastElement.heads.length - 1]; var startX = starthead.x; if (asc) startX += starthead.w - 0.6; var endX = endhead.x; if (asc) endX += endhead.w; return [ startX, endX ]; } function calcYPos(total, numElements, stemHeight, asc, firstAveragePitch, lastAveragePitch, isFlat, minPitch, maxPitch, isGrace) { var average = calcAverage(total, numElements); // This is the average pitch for the all the notes that will be beamed. var barpos = stemHeight - 2; // (isGrace)? 5:7; var barminpos = stemHeight - 2; var pos = Math.round(asc ? Math.max(average + barpos, maxPitch + barminpos) : Math.min(average - barpos, minPitch - barminpos)); var slant = calcSlant(firstAveragePitch, lastAveragePitch, numElements, isFlat); var startY = pos + Math.floor(slant / 2); var endY = pos + Math.floor(-slant / 2); // If the notes are too high or too low, make the beam go down to the middle if (!isGrace) { if (asc && pos < 6) { startY = 6; endY = 6; } else if (!asc && pos > 6) { startY = 6; endY = 6; } } return [ startY, endY]; } function createStems(elems, asc, beam, dy, mainNote) { for (var i = 0; i < elems.length; i++) { var elem = elems[i]; if (elem.abcelem.rest) continue; // TODO-PER: This is odd. If it is a regular beam then elems is an array of AbsoluteElements, if it is a grace beam then it is an array of objects , so we directly attach the element to the parent. We tell it if is a grace note because they are passed in as a generic object instead of an AbsoluteElement. var isGrace = elem.addExtra ? false : true; var parent = isGrace ? mainNote : elem; var furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1]; var ovalDelta = 1 / 5;//(isGrace)?1/3:1/5; var pitch = furthestHead.pitch + ((asc) ? ovalDelta : -ovalDelta); var dx = asc ? furthestHead.w : 0; // down-pointing stems start on the left side of the note, up-pointing stems start on the right side, so we offset by the note width. var x = furthestHead.x + dx; // this is now the actual x location in pixels. var bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x); var lineWidth = (asc) ? -0.6 : 0.6; if (!asc) bary -= (dy / 2) / abc_spacing.STEP; // TODO-PER: This is just a fudge factor so the down-pointing stems don't overlap. if (isGrace) dx += elem.heads[0].dx; // TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated: if (furthestHead.c === 'noteheads.slash.quarter') { if (asc) pitch += 1; else pitch -= 1; } var stem = new abc_relative_element(null, dx, 0, pitch, { "type": "stem", "pitch2": bary, linewidth: lineWidth }); stem.setX(parent.x); // This is after the x coordinates were set, so we have to set it directly. parent.addExtra(stem); } } function createAdditionalBeams(elems, asc, beam, isGrace, dy) { var beams = []; var auxBeams = []; // auxbeam will be {x, y, durlog, single} auxbeam[0] should match with durlog=-4 (16th) (j=-4-durlog) for (var i = 0; i < elems.length; i++) { var elem = elems[i]; if (elem.abcelem.rest) continue; var furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1]; var x = furthestHead.x + ((asc) ? furthestHead.w : 0); var bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x); var sy = (asc) ? -1.5 : 1.5; if (isGrace) sy = sy * 2 / 3; // This makes the second beam on grace notes closer to the first one. var duration = elem.abcelem.duration; // get the duration via abcelem because of triplets if (duration === 0) duration = 0.25; // if this is stemless, then we use quarter note as the duration. for (var durlog = getDurlog(duration); durlog < -3; durlog++) { if (auxBeams[-4 - durlog]) { auxBeams[-4 - durlog].single = false; } else { auxBeams[-4 - durlog] = { x: x + ((asc) ? -0.6 : 0), y: bary + sy * (-4 - durlog + 1), durlog: durlog, single: true }; } } for (var j = auxBeams.length - 1; j >= 0; j--) { if (i === elems.length - 1 || getDurlog(elems[i + 1].abcelem.duration) > (-j - 4)) { var auxBeamEndX = x; var auxBeamEndY = bary + sy * (j + 1); if (auxBeams[j].single) { auxBeamEndX = (i === 0) ? x + 5 : x - 5; auxBeamEndY = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, auxBeamEndX) + sy * (j + 1); } beams.push({ startX: auxBeams[j].x, endX: auxBeamEndX, startY: auxBeams[j].y, endY: auxBeamEndY, dy: dy }); auxBeams = auxBeams.slice(0, j); } } } return beams; } })(); var abc_beam_element = BeamElem; // abc_brace_element.js: Definition of the BraceElement class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var BraceElem = function BraceElem() { this.length = 1; }; BraceElem.prototype.increaseStavesIncluded = function() { this.length++; }; BraceElem.prototype.setLocation = function(x) { this.x = x; }; BraceElem.prototype.getWidth = function() { return 10; // TODO-PER: right now the drawing function doesn't vary the width at all. If it does in the future then this will change. }; BraceElem.prototype.layout = function (renderer, top, bottom) { this.startY = top; this.endY = bottom; }; BraceElem.prototype.draw = function (renderer, top, bottom) { this.layout(renderer, top, bottom); renderer.drawBrace(this.x,this.startY, this.endY); }; var abc_brace_element = BraceElem; /** * Glyphs and some methods to adjust for their x and y baseline */ var glyphs = {'0':{d:[['M',4.83,-14.97],['c',0.33,-0.03,1.11,0.00,1.47,0.06],['c',1.68,0.36,2.97,1.59,3.78,3.60],['c',1.20,2.97,0.81,6.96,-0.90,9.27],['c',-0.78,1.08,-1.71,1.71,-2.91,1.95],['c',-0.45,0.09,-1.32,0.09,-1.77,0.00],['c',-0.81,-0.18,-1.47,-0.51,-2.07,-1.02],['c',-2.34,-2.07,-3.15,-6.72,-1.74,-10.20],['c',0.87,-2.16,2.28,-3.42,4.14,-3.66],['z'],['m',1.11,0.87],['c',-0.21,-0.06,-0.69,-0.09,-0.87,-0.06],['c',-0.54,0.12,-0.87,0.42,-1.17,0.99],['c',-0.36,0.66,-0.51,1.56,-0.60,3.00],['c',-0.03,0.75,-0.03,4.59,0.00,5.31],['c',0.09,1.50,0.27,2.40,0.60,3.06],['c',0.24,0.48,0.57,0.78,0.96,0.90],['c',0.27,0.09,0.78,0.09,1.05,0.00],['c',0.39,-0.12,0.72,-0.42,0.96,-0.90],['c',0.33,-0.66,0.51,-1.56,0.60,-3.06],['c',0.03,-0.72,0.03,-4.56,0.00,-5.31],['c',-0.09,-1.47,-0.27,-2.37,-0.60,-3.03],['c',-0.24,-0.48,-0.54,-0.78,-0.93,-0.90],['z']],w:10.78,h:14.959}, '1':{d:[['M',3.30,-15.06],['c',0.06,-0.06,0.21,-0.03,0.66,0.15],['c',0.81,0.39,1.08,0.39,1.83,0.03],['c',0.21,-0.09,0.39,-0.15,0.42,-0.15],['c',0.12,0.00,0.21,0.09,0.27,0.21],['c',0.06,0.12,0.06,0.33,0.06,5.94],['c',0.00,3.93,0.00,5.85,0.03,6.03],['c',0.06,0.36,0.15,0.69,0.27,0.96],['c',0.36,0.75,0.93,1.17,1.68,1.26],['c',0.30,0.03,0.39,0.09,0.39,0.30],['c',0.00,0.15,-0.03,0.18,-0.09,0.24],['c',-0.06,0.06,-0.09,0.06,-0.48,0.06],['c',-0.42,0.00,-0.69,-0.03,-2.10,-0.24],['c',-0.90,-0.15,-1.77,-0.15,-2.67,0.00],['c',-1.41,0.21,-1.68,0.24,-2.10,0.24],['c',-0.39,0.00,-0.42,0.00,-0.48,-0.06],['c',-0.06,-0.06,-0.06,-0.09,-0.06,-0.24],['c',0.00,-0.21,0.06,-0.27,0.36,-0.30],['c',0.75,-0.09,1.32,-0.51,1.68,-1.26],['c',0.12,-0.27,0.21,-0.60,0.27,-0.96],['c',0.03,-0.18,0.03,-1.59,0.03,-4.29],['c',0.00,-3.87,0.00,-4.05,-0.06,-4.14],['c',-0.09,-0.15,-0.18,-0.24,-0.39,-0.24],['c',-0.12,0.00,-0.15,0.03,-0.21,0.06],['c',-0.03,0.06,-0.45,0.99,-0.96,2.13],['c',-0.48,1.14,-0.90,2.10,-0.93,2.16],['c',-0.06,0.15,-0.21,0.24,-0.33,0.24],['c',-0.24,0.00,-0.42,-0.18,-0.42,-0.39],['c',0.00,-0.06,3.27,-7.62,3.33,-7.74],['z']],w:8.94,h:15.058}, '2':{d:[['M',4.23,-14.97],['c',0.57,-0.06,1.68,0.00,2.34,0.18],['c',0.69,0.18,1.50,0.54,2.01,0.90],['c',1.35,0.96,1.95,2.25,1.77,3.81],['c',-0.15,1.35,-0.66,2.34,-1.68,3.15],['c',-0.60,0.48,-1.44,0.93,-3.12,1.65],['c',-1.32,0.57,-1.80,0.81,-2.37,1.14],['c',-0.57,0.33,-0.57,0.33,-0.24,0.27],['c',0.39,-0.09,1.26,-0.09,1.68,0.00],['c',0.72,0.15,1.41,0.45,2.10,0.90],['c',0.99,0.63,1.86,0.87,2.55,0.75],['c',0.24,-0.06,0.42,-0.15,0.57,-0.30],['c',0.12,-0.09,0.30,-0.42,0.30,-0.51],['c',0.00,-0.09,0.12,-0.21,0.24,-0.24],['c',0.18,-0.03,0.39,0.12,0.39,0.30],['c',0.00,0.12,-0.15,0.57,-0.30,0.87],['c',-0.54,1.02,-1.56,1.74,-2.79,2.01],['c',-0.42,0.09,-1.23,0.09,-1.62,0.03],['c',-0.81,-0.18,-1.32,-0.45,-2.01,-1.11],['c',-0.45,-0.45,-0.63,-0.57,-0.96,-0.69],['c',-0.84,-0.27,-1.89,0.12,-2.25,0.90],['c',-0.12,0.21,-0.21,0.54,-0.21,0.72],['c',0.00,0.12,-0.12,0.21,-0.27,0.24],['c',-0.15,0.00,-0.27,-0.03,-0.33,-0.15],['c',-0.09,-0.21,0.09,-1.08,0.33,-1.71],['c',0.24,-0.66,0.66,-1.26,1.29,-1.89],['c',0.45,-0.45,0.90,-0.81,1.92,-1.56],['c',1.29,-0.93,1.89,-1.44,2.34,-1.98],['c',0.87,-1.05,1.26,-2.19,1.20,-3.63],['c',-0.06,-1.29,-0.39,-2.31,-0.96,-2.91],['c',-0.36,-0.33,-0.72,-0.51,-1.17,-0.54],['c',-0.84,-0.03,-1.53,0.42,-1.59,1.05],['c',-0.03,0.33,0.12,0.60,0.57,1.14],['c',0.45,0.54,0.54,0.87,0.42,1.41],['c',-0.15,0.63,-0.54,1.11,-1.08,1.38],['c',-0.63,0.33,-1.20,0.33,-1.83,0.00],['c',-0.24,-0.12,-0.33,-0.18,-0.54,-0.39],['c',-0.18,-0.18,-0.27,-0.30,-0.36,-0.51],['c',-0.24,-0.45,-0.27,-0.84,-0.21,-1.38],['c',0.12,-0.75,0.45,-1.41,1.02,-1.98],['c',0.72,-0.72,1.74,-1.17,2.85,-1.32],['z']],w:10.764,h:14.97}, '3':{d:[['M',3.78,-14.97],['c',0.30,-0.03,1.41,0.00,1.83,0.06],['c',2.22,0.30,3.51,1.32,3.72,2.91],['c',0.03,0.33,0.03,1.26,-0.03,1.65],['c',-0.12,0.84,-0.48,1.47,-1.05,1.77],['c',-0.27,0.15,-0.36,0.24,-0.45,0.39],['c',-0.09,0.21,-0.09,0.36,0.00,0.57],['c',0.09,0.15,0.18,0.24,0.51,0.39],['c',0.75,0.42,1.23,1.14,1.41,2.13],['c',0.06,0.42,0.06,1.35,0.00,1.71],['c',-0.18,0.81,-0.48,1.38,-1.02,1.95],['c',-0.75,0.72,-1.80,1.20,-3.18,1.38],['c',-0.42,0.06,-1.56,0.06,-1.95,0.00],['c',-1.89,-0.33,-3.18,-1.29,-3.51,-2.64],['c',-0.03,-0.12,-0.03,-0.33,-0.03,-0.60],['c',0.00,-0.36,0.00,-0.42,0.06,-0.63],['c',0.12,-0.30,0.27,-0.51,0.51,-0.75],['c',0.24,-0.24,0.45,-0.39,0.75,-0.51],['c',0.21,-0.06,0.27,-0.06,0.60,-0.06],['c',0.33,0.00,0.39,0.00,0.60,0.06],['c',0.30,0.12,0.51,0.27,0.75,0.51],['c',0.36,0.33,0.57,0.75,0.60,1.20],['c',0.00,0.21,0.00,0.27,-0.06,0.42],['c',-0.09,0.18,-0.12,0.24,-0.54,0.54],['c',-0.51,0.36,-0.63,0.54,-0.60,0.87],['c',0.06,0.54,0.54,0.90,1.38,0.99],['c',0.36,0.06,0.72,0.03,0.96,-0.06],['c',0.81,-0.27,1.29,-1.23,1.44,-2.79],['c',0.03,-0.45,0.03,-1.95,-0.03,-2.37],['c',-0.09,-0.75,-0.33,-1.23,-0.75,-1.44],['c',-0.33,-0.18,-0.45,-0.18,-1.98,-0.18],['c',-1.35,0.00,-1.41,0.00,-1.50,-0.06],['c',-0.18,-0.12,-0.24,-0.39,-0.12,-0.60],['c',0.12,-0.15,0.15,-0.15,1.68,-0.15],['c',1.50,0.00,1.62,0.00,1.89,-0.15],['c',0.18,-0.09,0.42,-0.36,0.54,-0.57],['c',0.18,-0.42,0.27,-0.90,0.30,-1.95],['c',0.03,-1.20,-0.06,-1.80,-0.36,-2.37],['c',-0.24,-0.48,-0.63,-0.81,-1.14,-0.96],['c',-0.30,-0.06,-1.08,-0.06,-1.38,0.03],['c',-0.60,0.15,-0.90,0.42,-0.96,0.84],['c',-0.03,0.30,0.06,0.45,0.63,0.84],['c',0.33,0.24,0.42,0.39,0.45,0.63],['c',0.03,0.72,-0.57,1.50,-1.32,1.65],['c',-1.05,0.27,-2.10,-0.57,-2.10,-1.65],['c',0.00,-0.45,0.15,-0.96,0.39,-1.38],['c',0.12,-0.21,0.54,-0.63,0.81,-0.81],['c',0.57,-0.42,1.38,-0.69,2.25,-0.81],['z']],w:9.735,h:14.967}, '4':{d:[['M',8.64,-14.94],['c',0.27,-0.09,0.42,-0.12,0.54,-0.03],['c',0.09,0.06,0.15,0.21,0.15,0.30],['c',-0.03,0.06,-1.92,2.31,-4.23,5.04],['c',-2.31,2.73,-4.23,4.98,-4.26,5.01],['c',-0.03,0.06,0.12,0.06,2.55,0.06],['l',2.61,0.00],['l',0.00,-2.37],['c',0.00,-2.19,0.03,-2.37,0.06,-2.46],['c',0.03,-0.06,0.21,-0.18,0.57,-0.42],['c',1.08,-0.72,1.38,-1.08,1.86,-2.16],['c',0.12,-0.30,0.24,-0.54,0.27,-0.57],['c',0.12,-0.12,0.39,-0.06,0.45,0.12],['c',0.06,0.09,0.06,0.57,0.06,3.96],['l',0.00,3.90],['l',1.08,0.00],['c',1.05,0.00,1.11,0.00,1.20,0.06],['c',0.24,0.15,0.24,0.54,0.00,0.69],['c',-0.09,0.06,-0.15,0.06,-1.20,0.06],['l',-1.08,0.00],['l',0.00,0.33],['c',0.00,0.57,0.09,1.11,0.30,1.53],['c',0.36,0.75,0.93,1.17,1.68,1.26],['c',0.30,0.03,0.39,0.09,0.39,0.30],['c',0.00,0.15,-0.03,0.18,-0.09,0.24],['c',-0.06,0.06,-0.09,0.06,-0.48,0.06],['c',-0.42,0.00,-0.69,-0.03,-2.10,-0.24],['c',-0.90,-0.15,-1.77,-0.15,-2.67,0.00],['c',-1.41,0.21,-1.68,0.24,-2.10,0.24],['c',-0.39,0.00,-0.42,0.00,-0.48,-0.06],['c',-0.06,-0.06,-0.06,-0.09,-0.06,-0.24],['c',0.00,-0.21,0.06,-0.27,0.36,-0.30],['c',0.75,-0.09,1.32,-0.51,1.68,-1.26],['c',0.21,-0.42,0.30,-0.96,0.30,-1.53],['l',0.00,-0.33],['l',-2.70,0.00],['c',-2.91,0.00,-2.85,0.00,-3.09,-0.15],['c',-0.18,-0.12,-0.30,-0.39,-0.27,-0.54],['c',0.03,-0.06,0.18,-0.24,0.33,-0.45],['c',0.75,-0.90,1.59,-2.07,2.13,-3.03],['c',0.33,-0.54,0.84,-1.62,1.05,-2.16],['c',0.57,-1.41,0.84,-2.64,0.90,-4.05],['c',0.03,-0.63,0.06,-0.72,0.24,-0.81],['l',0.12,-0.06],['l',0.45,0.12],['c',0.66,0.18,1.02,0.24,1.47,0.27],['c',0.60,0.03,1.23,-0.09,2.01,-0.33],['z']],w:11.795,h:14.994}, '5':{d:[['M',1.02,-14.94],['c',0.12,-0.09,0.03,-0.09,1.08,0.06],['c',2.49,0.36,4.35,0.36,6.96,-0.06],['c',0.57,-0.09,0.66,-0.06,0.81,0.06],['c',0.15,0.18,0.12,0.24,-0.15,0.51],['c',-1.29,1.26,-3.24,2.04,-5.58,2.31],['c',-0.60,0.09,-1.20,0.12,-1.71,0.12],['c',-0.39,0.00,-0.45,0.00,-0.57,0.06],['c',-0.09,0.06,-0.15,0.12,-0.21,0.21],['l',-0.06,0.12],['l',0.00,1.65],['l',0.00,1.65],['l',0.21,-0.21],['c',0.66,-0.57,1.41,-0.96,2.19,-1.14],['c',0.33,-0.06,1.41,-0.06,1.95,0.00],['c',2.61,0.36,4.02,1.74,4.26,4.14],['c',0.03,0.45,0.03,1.08,-0.03,1.44],['c',-0.18,1.02,-0.78,2.01,-1.59,2.70],['c',-0.72,0.57,-1.62,1.02,-2.49,1.20],['c',-1.38,0.27,-3.03,0.06,-4.20,-0.54],['c',-1.08,-0.54,-1.71,-1.32,-1.86,-2.28],['c',-0.09,-0.69,0.09,-1.29,0.57,-1.74],['c',0.24,-0.24,0.45,-0.39,0.75,-0.51],['c',0.21,-0.06,0.27,-0.06,0.60,-0.06],['c',0.33,0.00,0.39,0.00,0.60,0.06],['c',0.30,0.12,0.51,0.27,0.75,0.51],['c',0.36,0.33,0.57,0.75,0.60,1.20],['c',0.00,0.21,0.00,0.27,-0.06,0.42],['c',-0.09,0.18,-0.12,0.24,-0.54,0.54],['c',-0.18,0.12,-0.36,0.30,-0.42,0.33],['c',-0.36,0.42,-0.18,0.99,0.36,1.26],['c',0.51,0.27,1.47,0.36,2.01,0.27],['c',0.93,-0.21,1.47,-1.17,1.65,-2.91],['c',0.06,-0.45,0.06,-1.89,0.00,-2.31],['c',-0.15,-1.20,-0.51,-2.10,-1.05,-2.55],['c',-0.21,-0.18,-0.54,-0.36,-0.81,-0.39],['c',-0.30,-0.06,-0.84,-0.03,-1.26,0.06],['c',-0.93,0.18,-1.65,0.60,-2.16,1.20],['c',-0.15,0.21,-0.27,0.30,-0.39,0.30],['c',-0.15,0.00,-0.30,-0.09,-0.36,-0.18],['c',-0.06,-0.09,-0.06,-0.15,-0.06,-3.66],['c',0.00,-3.39,0.00,-3.57,0.06,-3.66],['c',0.03,-0.06,0.09,-0.15,0.15,-0.18],['z']],w:10.212,h:14.997}, '6':{d:[['M',4.98,-14.97],['c',0.36,-0.03,1.20,0.00,1.59,0.06],['c',0.90,0.15,1.68,0.51,2.25,1.05],['c',0.57,0.51,0.87,1.23,0.84,1.98],['c',-0.03,0.51,-0.21,0.90,-0.60,1.26],['c',-0.24,0.24,-0.45,0.39,-0.75,0.51],['c',-0.21,0.06,-0.27,0.06,-0.60,0.06],['c',-0.33,0.00,-0.39,0.00,-0.60,-0.06],['c',-0.30,-0.12,-0.51,-0.27,-0.75,-0.51],['c',-0.39,-0.36,-0.57,-0.78,-0.57,-1.26],['c',0.00,-0.27,0.00,-0.30,0.09,-0.42],['c',0.03,-0.09,0.18,-0.21,0.30,-0.30],['c',0.12,-0.09,0.30,-0.21,0.39,-0.27],['c',0.09,-0.06,0.21,-0.18,0.27,-0.24],['c',0.06,-0.12,0.09,-0.15,0.09,-0.33],['c',0.00,-0.18,-0.03,-0.24,-0.09,-0.36],['c',-0.24,-0.39,-0.75,-0.60,-1.38,-0.57],['c',-0.54,0.03,-0.90,0.18,-1.23,0.48],['c',-0.81,0.72,-1.08,2.16,-0.96,5.37],['l',0.00,0.63],['l',0.30,-0.12],['c',0.78,-0.27,1.29,-0.33,2.10,-0.27],['c',1.47,0.12,2.49,0.54,3.27,1.29],['c',0.48,0.51,0.81,1.11,0.96,1.89],['c',0.06,0.27,0.06,0.42,0.06,0.93],['c',0.00,0.54,0.00,0.69,-0.06,0.96],['c',-0.15,0.78,-0.48,1.38,-0.96,1.89],['c',-0.54,0.51,-1.17,0.87,-1.98,1.08],['c',-1.14,0.30,-2.40,0.33,-3.24,0.03],['c',-1.50,-0.48,-2.64,-1.89,-3.27,-4.02],['c',-0.36,-1.23,-0.51,-2.82,-0.42,-4.08],['c',0.30,-3.66,2.28,-6.30,4.95,-6.66],['z'],['m',0.66,7.41],['c',-0.27,-0.09,-0.81,-0.12,-1.08,-0.06],['c',-0.72,0.18,-1.08,0.69,-1.23,1.71],['c',-0.06,0.54,-0.06,3.00,0.00,3.54],['c',0.18,1.26,0.72,1.77,1.80,1.74],['c',0.39,-0.03,0.63,-0.09,0.90,-0.27],['c',0.66,-0.42,0.90,-1.32,0.90,-3.24],['c',0.00,-2.22,-0.36,-3.12,-1.29,-3.42],['z']],w:9.956,h:14.982}, '7':{d:[['M',0.21,-14.97],['c',0.21,-0.06,0.45,0.00,0.54,0.15],['c',0.06,0.09,0.06,0.15,0.06,0.39],['c',0.00,0.24,0.00,0.33,0.06,0.42],['c',0.06,0.12,0.21,0.24,0.27,0.24],['c',0.03,0.00,0.12,-0.12,0.24,-0.21],['c',0.96,-1.20,2.58,-1.35,3.99,-0.42],['c',0.15,0.12,0.42,0.30,0.54,0.45],['c',0.48,0.39,0.81,0.57,1.29,0.60],['c',0.69,0.03,1.50,-0.30,2.13,-0.87],['c',0.09,-0.09,0.27,-0.30,0.39,-0.45],['c',0.12,-0.15,0.24,-0.27,0.30,-0.30],['c',0.18,-0.06,0.39,0.03,0.51,0.21],['c',0.06,0.18,0.06,0.24,-0.27,0.72],['c',-0.18,0.24,-0.54,0.78,-0.78,1.17],['c',-2.37,3.54,-3.54,6.27,-3.87,9.00],['c',-0.03,0.33,-0.03,0.66,-0.03,1.26],['c',0.00,0.90,0.00,1.08,0.15,1.89],['c',0.06,0.45,0.06,0.48,0.03,0.60],['c',-0.06,0.09,-0.21,0.21,-0.30,0.21],['c',-0.03,0.00,-0.27,-0.06,-0.54,-0.15],['c',-0.84,-0.27,-1.11,-0.30,-1.65,-0.30],['c',-0.57,0.00,-0.84,0.03,-1.56,0.27],['c',-0.60,0.18,-0.69,0.21,-0.81,0.15],['c',-0.12,-0.06,-0.21,-0.18,-0.21,-0.30],['c',0.00,-0.15,0.60,-1.44,1.20,-2.61],['c',1.14,-2.22,2.73,-4.68,5.10,-8.01],['c',0.21,-0.27,0.36,-0.48,0.33,-0.48],['c',0.00,0.00,-0.12,0.06,-0.27,0.12],['c',-0.54,0.30,-0.99,0.39,-1.56,0.39],['c',-0.75,0.03,-1.20,-0.18,-1.83,-0.75],['c',-0.99,-0.90,-1.83,-1.17,-2.31,-0.72],['c',-0.18,0.15,-0.36,0.51,-0.45,0.84],['c',-0.06,0.24,-0.06,0.33,-0.09,1.98],['c',0.00,1.62,-0.03,1.74,-0.06,1.80],['c',-0.15,0.24,-0.54,0.24,-0.69,0.00],['c',-0.06,-0.09,-0.06,-0.15,-0.06,-3.57],['c',0.00,-3.42,0.00,-3.48,0.06,-3.57],['c',0.03,-0.06,0.09,-0.12,0.15,-0.15],['z']],w:10.561,h:15.093}, '8':{d:[['M',4.98,-14.97],['c',0.33,-0.03,1.02,-0.03,1.32,0.00],['c',1.32,0.12,2.49,0.60,3.21,1.32],['c',0.39,0.39,0.66,0.81,0.78,1.29],['c',0.09,0.36,0.09,1.08,0.00,1.44],['c',-0.21,0.84,-0.66,1.59,-1.59,2.55],['l',-0.30,0.30],['l',0.27,0.18],['c',1.47,0.93,2.31,2.31,2.25,3.75],['c',-0.03,0.75,-0.24,1.35,-0.63,1.95],['c',-0.45,0.66,-1.02,1.14,-1.83,1.53],['c',-1.80,0.87,-4.20,0.87,-6.00,0.03],['c',-1.62,-0.78,-2.52,-2.16,-2.46,-3.66],['c',0.06,-0.99,0.54,-1.77,1.80,-2.97],['c',0.54,-0.51,0.54,-0.54,0.48,-0.57],['c',-0.39,-0.27,-0.96,-0.78,-1.20,-1.14],['c',-0.75,-1.11,-0.87,-2.40,-0.30,-3.60],['c',0.69,-1.35,2.25,-2.25,4.20,-2.40],['z'],['m',1.53,0.69],['c',-0.42,-0.09,-1.11,-0.12,-1.38,-0.06],['c',-0.30,0.06,-0.60,0.18,-0.81,0.30],['c',-0.21,0.12,-0.60,0.51,-0.72,0.72],['c',-0.51,0.87,-0.42,1.89,0.21,2.52],['c',0.21,0.21,0.36,0.30,1.95,1.23],['c',0.96,0.54,1.74,0.99,1.77,1.02],['c',0.09,0.00,0.63,-0.60,0.99,-1.11],['c',0.21,-0.36,0.48,-0.87,0.57,-1.23],['c',0.06,-0.24,0.06,-0.36,0.06,-0.72],['c',0.00,-0.45,-0.03,-0.66,-0.15,-0.99],['c',-0.39,-0.81,-1.29,-1.44,-2.49,-1.68],['z'],['m',-1.44,8.07],['l',-1.89,-1.08],['c',-0.03,0.00,-0.18,0.15,-0.39,0.33],['c',-1.20,1.08,-1.65,1.95,-1.59,3.00],['c',0.09,1.59,1.35,2.85,3.21,3.24],['c',0.33,0.06,0.45,0.06,0.93,0.06],['c',0.63,0.00,0.81,-0.03,1.29,-0.27],['c',0.90,-0.42,1.47,-1.41,1.41,-2.40],['c',-0.06,-0.66,-0.39,-1.29,-0.90,-1.65],['c',-0.12,-0.09,-1.05,-0.63,-2.07,-1.23],['z']],w:10.926,h:14.989}, '9':{d:[['M',4.23,-14.97],['c',0.42,-0.03,1.29,0.00,1.62,0.06],['c',0.51,0.12,0.93,0.30,1.38,0.57],['c',1.53,1.02,2.52,3.24,2.73,5.94],['c',0.18,2.55,-0.48,4.98,-1.83,6.57],['c',-1.05,1.26,-2.40,1.89,-3.93,1.83],['c',-1.23,-0.06,-2.31,-0.45,-3.03,-1.14],['c',-0.57,-0.51,-0.87,-1.23,-0.84,-1.98],['c',0.03,-0.51,0.21,-0.90,0.60,-1.26],['c',0.24,-0.24,0.45,-0.39,0.75,-0.51],['c',0.21,-0.06,0.27,-0.06,0.60,-0.06],['c',0.33,0.00,0.39,0.00,0.60,0.06],['c',0.30,0.12,0.51,0.27,0.75,0.51],['c',0.39,0.36,0.57,0.78,0.57,1.26],['c',0.00,0.27,0.00,0.30,-0.09,0.42],['c',-0.03,0.09,-0.18,0.21,-0.30,0.30],['c',-0.12,0.09,-0.30,0.21,-0.39,0.27],['c',-0.09,0.06,-0.21,0.18,-0.27,0.24],['c',-0.06,0.12,-0.06,0.15,-0.06,0.33],['c',0.00,0.18,0.00,0.24,0.06,0.36],['c',0.24,0.39,0.75,0.60,1.38,0.57],['c',0.54,-0.03,0.90,-0.18,1.23,-0.48],['c',0.81,-0.72,1.08,-2.16,0.96,-5.37],['l',0.00,-0.63],['l',-0.30,0.12],['c',-0.78,0.27,-1.29,0.33,-2.10,0.27],['c',-1.47,-0.12,-2.49,-0.54,-3.27,-1.29],['c',-0.48,-0.51,-0.81,-1.11,-0.96,-1.89],['c',-0.06,-0.27,-0.06,-0.42,-0.06,-0.96],['c',0.00,-0.51,0.00,-0.66,0.06,-0.93],['c',0.15,-0.78,0.48,-1.38,0.96,-1.89],['c',0.15,-0.12,0.33,-0.27,0.42,-0.36],['c',0.69,-0.51,1.62,-0.81,2.76,-0.93],['z'],['m',1.17,0.66],['c',-0.21,-0.06,-0.57,-0.06,-0.81,-0.03],['c',-0.78,0.12,-1.26,0.69,-1.41,1.74],['c',-0.12,0.63,-0.15,1.95,-0.09,2.79],['c',0.12,1.71,0.63,2.40,1.77,2.46],['c',1.08,0.03,1.62,-0.48,1.80,-1.74],['c',0.06,-0.54,0.06,-3.00,0.00,-3.54],['c',-0.15,-1.05,-0.51,-1.53,-1.26,-1.68],['z']],w:9.959,h:14.986}, 'rests.multimeasure':{d:[['M',0,-4],['l',0,16],['l',1,0],['l',0,-5],['l',40,0],['l',0,5],['l',1,0],['l',0,-16],['l',-1,0],['l',0,5],['l',-40,0],['l',0,-5],['z']],w:42,h:18}, 'rests.whole':{d:[['M',0.06,0.03],['l',0.09,-0.06],['l',5.46,0.00],['l',5.49,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,2.19],['l',0.00,2.19],['l',-0.06,0.09],['l',-0.09,0.06],['l',-5.49,0.00],['l',-5.46,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-2.19],['l',0.00,-2.19],['z']],w:11.25,h:4.68}, 'rests.half':{d:[['M',0.06,-4.62],['l',0.09,-0.06],['l',5.46,0.00],['l',5.49,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,2.19],['l',0.00,2.19],['l',-0.06,0.09],['l',-0.09,0.06],['l',-5.49,0.00],['l',-5.46,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-2.19],['l',0.00,-2.19],['z']],w:11.25,h:4.68}, 'rests.quarter':{d:[['M',1.89,-11.82],['c',0.12,-0.06,0.24,-0.06,0.36,-0.03],['c',0.09,0.06,4.74,5.58,4.86,5.82],['c',0.21,0.39,0.15,0.78,-0.15,1.26],['c',-0.24,0.33,-0.72,0.81,-1.62,1.56],['c',-0.45,0.36,-0.87,0.75,-0.96,0.84],['c',-0.93,0.99,-1.14,2.49,-0.60,3.63],['c',0.18,0.39,0.27,0.48,1.32,1.68],['c',1.92,2.25,1.83,2.16,1.83,2.34],['c',0.00,0.18,-0.18,0.36,-0.36,0.39],['c',-0.15,0.00,-0.27,-0.06,-0.48,-0.27],['c',-0.75,-0.75,-2.46,-1.29,-3.39,-1.08],['c',-0.45,0.09,-0.69,0.27,-0.90,0.69],['c',-0.12,0.30,-0.21,0.66,-0.24,1.14],['c',-0.03,0.66,0.09,1.35,0.30,2.01],['c',0.15,0.42,0.24,0.66,0.45,0.96],['c',0.18,0.24,0.18,0.33,0.03,0.42],['c',-0.12,0.06,-0.18,0.03,-0.45,-0.30],['c',-1.08,-1.38,-2.07,-3.36,-2.40,-4.83],['c',-0.27,-1.05,-0.15,-1.77,0.27,-2.07],['c',0.21,-0.12,0.42,-0.15,0.87,-0.15],['c',0.87,0.06,2.10,0.39,3.30,0.90],['l',0.39,0.18],['l',-1.65,-1.95],['c',-2.52,-2.97,-2.61,-3.09,-2.70,-3.27],['c',-0.09,-0.24,-0.12,-0.48,-0.03,-0.75],['c',0.15,-0.48,0.57,-0.96,1.83,-2.01],['c',0.45,-0.36,0.84,-0.72,0.93,-0.78],['c',0.69,-0.75,1.02,-1.80,0.90,-2.79],['c',-0.06,-0.33,-0.21,-0.84,-0.39,-1.11],['c',-0.09,-0.15,-0.45,-0.60,-0.81,-1.05],['c',-0.36,-0.42,-0.69,-0.81,-0.72,-0.87],['c',-0.09,-0.18,0.00,-0.42,0.21,-0.51],['z']],w:7.888,h:21.435}, 'rests.8th':{d:[['M',1.68,-6.12],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.60,0.48],['c',0.12,0.00,0.18,0.00,0.33,-0.09],['c',0.39,-0.18,1.32,-1.29,1.68,-1.98],['c',0.09,-0.21,0.24,-0.30,0.39,-0.30],['c',0.12,0.00,0.27,0.09,0.33,0.18],['c',0.03,0.06,-0.27,1.11,-1.86,6.42],['c',-1.02,3.48,-1.89,6.39,-1.92,6.42],['c',0.00,0.03,-0.12,0.12,-0.24,0.15],['c',-0.18,0.09,-0.21,0.09,-0.45,0.09],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.15,-0.57,1.68,-4.92],['c',0.96,-2.67,1.74,-4.89,1.71,-4.89],['l',-0.51,0.15],['c',-1.08,0.36,-1.74,0.48,-2.55,0.48],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:7.534,h:13.883}, 'rests.16th':{d:[['M',3.33,-6.12],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.15,0.39,0.57,0.57,0.87,0.42],['c',0.39,-0.18,1.20,-1.23,1.62,-2.07],['c',0.06,-0.15,0.24,-0.24,0.36,-0.24],['c',0.12,0.00,0.27,0.09,0.33,0.18],['c',0.03,0.06,-0.45,1.86,-2.67,10.17],['c',-1.50,5.55,-2.73,10.14,-2.76,10.17],['c',-0.03,0.03,-0.12,0.12,-0.24,0.15],['c',-0.18,0.09,-0.21,0.09,-0.45,0.09],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.12,-0.57,1.44,-4.92],['c',0.81,-2.67,1.47,-4.86,1.47,-4.89],['c',-0.03,0.00,-0.27,0.06,-0.54,0.15],['c',-1.08,0.36,-1.77,0.48,-2.58,0.48],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.72,-1.05,2.22,-1.23,3.06,-0.42],['c',0.30,0.33,0.42,0.60,0.60,1.38],['c',0.09,0.45,0.21,0.78,0.33,0.90],['c',0.09,0.09,0.27,0.18,0.45,0.21],['c',0.12,0.00,0.18,0.00,0.33,-0.09],['c',0.33,-0.15,1.02,-0.93,1.41,-1.59],['c',0.12,-0.21,0.18,-0.39,0.39,-1.08],['c',0.66,-2.10,1.17,-3.84,1.17,-3.87],['c',0.00,0.00,-0.21,0.06,-0.42,0.15],['c',-0.51,0.15,-1.20,0.33,-1.68,0.42],['c',-0.33,0.06,-0.51,0.06,-0.96,0.06],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:9.724,h:21.383}, 'rests.32nd':{d:[['M',4.23,-13.62],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.60,0.48],['c',0.12,0.00,0.18,0.00,0.27,-0.06],['c',0.33,-0.21,0.99,-1.11,1.44,-1.98],['c',0.09,-0.24,0.21,-0.33,0.39,-0.33],['c',0.12,0.00,0.27,0.09,0.33,0.18],['c',0.03,0.06,-0.57,2.67,-3.21,13.89],['c',-1.80,7.62,-3.30,13.89,-3.30,13.92],['c',-0.03,0.06,-0.12,0.12,-0.24,0.18],['c',-0.21,0.09,-0.24,0.09,-0.48,0.09],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.09,-0.57,1.23,-4.92],['c',0.69,-2.67,1.26,-4.86,1.29,-4.89],['c',0.00,-0.03,-0.12,-0.03,-0.48,0.12],['c',-1.17,0.39,-2.22,0.57,-3.00,0.54],['c',-0.42,-0.03,-0.75,-0.12,-1.11,-0.30],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.72,-1.05,2.22,-1.23,3.06,-0.42],['c',0.30,0.33,0.42,0.60,0.60,1.38],['c',0.09,0.45,0.21,0.78,0.33,0.90],['c',0.12,0.09,0.30,0.18,0.48,0.21],['c',0.12,0.00,0.18,0.00,0.30,-0.09],['c',0.42,-0.21,1.29,-1.29,1.56,-1.89],['c',0.03,-0.12,1.23,-4.59,1.23,-4.65],['c',0.00,-0.03,-0.18,0.03,-0.39,0.12],['c',-0.63,0.18,-1.20,0.36,-1.74,0.45],['c',-0.39,0.06,-0.54,0.06,-1.02,0.06],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.72,-1.05,2.22,-1.23,3.06,-0.42],['c',0.30,0.33,0.42,0.60,0.60,1.38],['c',0.09,0.45,0.21,0.78,0.33,0.90],['c',0.18,0.18,0.51,0.27,0.72,0.15],['c',0.30,-0.12,0.69,-0.57,1.08,-1.17],['c',0.42,-0.60,0.39,-0.51,1.05,-3.03],['c',0.33,-1.26,0.60,-2.31,0.60,-2.34],['c',0.00,0.00,-0.21,0.03,-0.45,0.12],['c',-0.57,0.18,-1.14,0.33,-1.62,0.42],['c',-0.33,0.06,-0.51,0.06,-0.96,0.06],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:11.373,h:28.883}, 'rests.64th':{d:[['M',5.13,-13.62],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.15,0.63,0.21,0.81,0.33,0.96],['c',0.18,0.21,0.54,0.30,0.75,0.18],['c',0.24,-0.12,0.63,-0.66,1.08,-1.56],['c',0.33,-0.66,0.39,-0.72,0.60,-0.72],['c',0.12,0.00,0.27,0.09,0.33,0.18],['c',0.03,0.06,-0.69,3.66,-3.54,17.64],['c',-1.95,9.66,-3.57,17.61,-3.57,17.64],['c',-0.03,0.06,-0.12,0.12,-0.24,0.18],['c',-0.21,0.09,-0.24,0.09,-0.48,0.09],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.06,-0.57,1.05,-4.95],['c',0.60,-2.70,1.08,-4.89,1.08,-4.92],['c',0.00,0.00,-0.24,0.06,-0.51,0.15],['c',-0.66,0.24,-1.20,0.36,-1.77,0.48],['c',-0.42,0.06,-0.57,0.06,-1.05,0.06],['c',-0.69,0.00,-0.87,-0.03,-1.35,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.72,-1.05,2.22,-1.23,3.06,-0.42],['c',0.30,0.33,0.42,0.60,0.60,1.38],['c',0.09,0.45,0.21,0.78,0.33,0.90],['c',0.09,0.09,0.27,0.18,0.45,0.21],['c',0.21,0.03,0.39,-0.09,0.72,-0.42],['c',0.45,-0.45,1.02,-1.26,1.17,-1.65],['c',0.03,-0.09,0.27,-1.14,0.54,-2.34],['c',0.27,-1.20,0.48,-2.19,0.51,-2.22],['c',0.00,-0.03,-0.09,-0.03,-0.48,0.12],['c',-1.17,0.39,-2.22,0.57,-3.00,0.54],['c',-0.42,-0.03,-0.75,-0.12,-1.11,-0.30],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.15,0.39,0.57,0.57,0.90,0.42],['c',0.36,-0.18,1.20,-1.26,1.47,-1.89],['c',0.03,-0.09,0.30,-1.20,0.57,-2.43],['l',0.51,-2.28],['l',-0.54,0.18],['c',-1.11,0.36,-1.80,0.48,-2.61,0.48],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.15,0.63,0.21,0.81,0.33,0.96],['c',0.21,0.21,0.54,0.30,0.75,0.18],['c',0.36,-0.18,0.93,-0.93,1.29,-1.68],['c',0.12,-0.24,0.18,-0.48,0.63,-2.55],['l',0.51,-2.31],['c',0.00,-0.03,-0.18,0.03,-0.39,0.12],['c',-1.14,0.36,-2.10,0.54,-2.82,0.51],['c',-0.42,-0.03,-0.75,-0.12,-1.11,-0.30],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:12.453,h:36.383}, 'rests.128th':{d:[['M',6.03,-21.12],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.60,0.48],['c',0.21,0.00,0.33,-0.06,0.54,-0.36],['c',0.15,-0.21,0.54,-0.93,0.78,-1.47],['c',0.15,-0.33,0.18,-0.39,0.30,-0.48],['c',0.18,-0.09,0.45,0.00,0.51,0.15],['c',0.03,0.09,-7.11,42.75,-7.17,42.84],['c',-0.03,0.03,-0.15,0.09,-0.24,0.15],['c',-0.18,0.06,-0.24,0.06,-0.45,0.06],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.03,-0.57,0.84,-4.98],['c',0.51,-2.70,0.93,-4.92,0.90,-4.92],['c',0.00,0.00,-0.15,0.06,-0.36,0.12],['c',-0.78,0.27,-1.62,0.48,-2.31,0.57],['c',-0.15,0.03,-0.54,0.03,-0.81,0.03],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.63,0.48],['c',0.12,0.00,0.18,0.00,0.30,-0.09],['c',0.42,-0.21,1.14,-1.11,1.50,-1.83],['c',0.12,-0.27,0.12,-0.27,0.54,-2.52],['c',0.24,-1.23,0.42,-2.25,0.39,-2.25],['c',0.00,0.00,-0.24,0.06,-0.51,0.18],['c',-1.26,0.39,-2.25,0.57,-3.06,0.54],['c',-0.42,-0.03,-0.75,-0.12,-1.11,-0.30],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.15,0.63,0.21,0.81,0.33,0.96],['c',0.18,0.21,0.51,0.30,0.75,0.18],['c',0.36,-0.15,1.05,-0.99,1.41,-1.77],['l',0.15,-0.30],['l',0.42,-2.25],['c',0.21,-1.26,0.42,-2.28,0.39,-2.28],['l',-0.51,0.15],['c',-1.11,0.39,-1.89,0.51,-2.70,0.51],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.15,0.63,0.21,0.81,0.33,0.96],['c',0.18,0.18,0.48,0.27,0.72,0.21],['c',0.33,-0.12,1.14,-1.26,1.41,-1.95],['c',0.00,-0.09,0.21,-1.11,0.45,-2.34],['c',0.21,-1.20,0.39,-2.22,0.39,-2.28],['c',0.03,-0.03,0.00,-0.03,-0.45,0.12],['c',-0.57,0.18,-1.20,0.33,-1.71,0.42],['c',-0.30,0.06,-0.51,0.06,-0.93,0.06],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.60,0.48],['c',0.18,0.00,0.36,-0.09,0.57,-0.33],['c',0.33,-0.36,0.78,-1.14,0.93,-1.56],['c',0.03,-0.12,0.24,-1.20,0.45,-2.40],['c',0.24,-1.20,0.42,-2.22,0.42,-2.28],['c',0.03,-0.03,0.00,-0.03,-0.39,0.09],['c',-1.05,0.36,-1.80,0.48,-2.58,0.48],['c',-0.63,0.00,-0.84,-0.03,-1.29,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:12.992,h:43.883}, 'accidentals.sharp':{d:[['M',5.73,-11.19],['c',0.21,-0.12,0.54,-0.03,0.66,0.24],['c',0.06,0.12,0.06,0.21,0.06,2.31],['c',0.00,1.23,0.00,2.22,0.03,2.22],['c',0.00,0.00,0.27,-0.12,0.60,-0.24],['c',0.69,-0.27,0.78,-0.30,0.96,-0.15],['c',0.21,0.15,0.21,0.18,0.21,1.38],['c',0.00,1.02,0.00,1.11,-0.06,1.20],['c',-0.03,0.06,-0.09,0.12,-0.12,0.15],['c',-0.06,0.03,-0.42,0.21,-0.84,0.36],['l',-0.75,0.33],['l',-0.03,2.43],['c',0.00,1.32,0.00,2.43,0.03,2.43],['c',0.00,0.00,0.27,-0.12,0.60,-0.24],['c',0.69,-0.27,0.78,-0.30,0.96,-0.15],['c',0.21,0.15,0.21,0.18,0.21,1.38],['c',0.00,1.02,0.00,1.11,-0.06,1.20],['c',-0.03,0.06,-0.09,0.12,-0.12,0.15],['c',-0.06,0.03,-0.42,0.21,-0.84,0.36],['l',-0.75,0.33],['l',-0.03,2.52],['c',0.00,2.28,-0.03,2.55,-0.06,2.64],['c',-0.21,0.36,-0.72,0.36,-0.93,0.00],['c',-0.03,-0.09,-0.06,-0.33,-0.06,-2.43],['l',0.00,-2.31],['l',-1.29,0.51],['l',-1.26,0.51],['l',0.00,2.43],['c',0.00,2.58,0.00,2.52,-0.15,2.67],['c',-0.06,0.09,-0.27,0.18,-0.36,0.18],['c',-0.12,0.00,-0.33,-0.09,-0.39,-0.18],['c',-0.15,-0.15,-0.15,-0.09,-0.15,-2.43],['c',0.00,-1.23,0.00,-2.22,-0.03,-2.22],['c',0.00,0.00,-0.27,0.12,-0.60,0.24],['c',-0.69,0.27,-0.78,0.30,-0.96,0.15],['c',-0.21,-0.15,-0.21,-0.18,-0.21,-1.38],['c',0.00,-1.02,0.00,-1.11,0.06,-1.20],['c',0.03,-0.06,0.09,-0.12,0.12,-0.15],['c',0.06,-0.03,0.42,-0.21,0.84,-0.36],['l',0.78,-0.33],['l',0.00,-2.43],['c',0.00,-1.32,0.00,-2.43,-0.03,-2.43],['c',0.00,0.00,-0.27,0.12,-0.60,0.24],['c',-0.69,0.27,-0.78,0.30,-0.96,0.15],['c',-0.21,-0.15,-0.21,-0.18,-0.21,-1.38],['c',0.00,-1.02,0.00,-1.11,0.06,-1.20],['c',0.03,-0.06,0.09,-0.12,0.12,-0.15],['c',0.06,-0.03,0.42,-0.21,0.84,-0.36],['l',0.78,-0.33],['l',0.00,-2.52],['c',0.00,-2.28,0.03,-2.55,0.06,-2.64],['c',0.21,-0.36,0.72,-0.36,0.93,0.00],['c',0.03,0.09,0.06,0.33,0.06,2.43],['l',0.03,2.31],['l',1.26,-0.51],['l',1.26,-0.51],['l',0.00,-2.43],['c',0.00,-2.28,0.00,-2.43,0.06,-2.55],['c',0.06,-0.12,0.12,-0.18,0.27,-0.24],['z'],['m',-0.33,10.65],['l',0.00,-2.43],['l',-1.29,0.51],['l',-1.26,0.51],['l',0.00,2.46],['l',0.00,2.43],['l',0.09,-0.03],['c',0.06,-0.03,0.63,-0.27,1.29,-0.51],['l',1.17,-0.48],['l',0.00,-2.46],['z']],w:8.25,h:22.462}, 'accidentals.halfsharp':{d:[['M',2.43,-10.05],['c',0.21,-0.12,0.54,-0.03,0.66,0.24],['c',0.06,0.12,0.06,0.21,0.06,2.01],['c',0.00,1.05,0.00,1.89,0.03,1.89],['l',0.72,-0.48],['c',0.69,-0.48,0.69,-0.51,0.87,-0.51],['c',0.15,0.00,0.18,0.03,0.27,0.09],['c',0.21,0.15,0.21,0.18,0.21,1.41],['c',0.00,1.11,-0.03,1.14,-0.09,1.23],['c',-0.03,0.03,-0.48,0.39,-1.02,0.75],['l',-0.99,0.66],['l',0.00,2.37],['c',0.00,1.32,0.00,2.37,0.03,2.37],['l',0.72,-0.48],['c',0.69,-0.48,0.69,-0.51,0.87,-0.51],['c',0.15,0.00,0.18,0.03,0.27,0.09],['c',0.21,0.15,0.21,0.18,0.21,1.41],['c',0.00,1.11,-0.03,1.14,-0.09,1.23],['c',-0.03,0.03,-0.48,0.39,-1.02,0.75],['l',-0.99,0.66],['l',0.00,2.25],['c',0.00,1.95,0.00,2.28,-0.06,2.37],['c',-0.06,0.12,-0.12,0.21,-0.24,0.27],['c',-0.27,0.12,-0.54,0.03,-0.69,-0.24],['c',-0.06,-0.12,-0.06,-0.21,-0.06,-2.01],['c',0.00,-1.05,0.00,-1.89,-0.03,-1.89],['l',-0.72,0.48],['c',-0.69,0.48,-0.69,0.48,-0.87,0.48],['c',-0.15,0.00,-0.18,0.00,-0.27,-0.06],['c',-0.21,-0.15,-0.21,-0.18,-0.21,-1.41],['c',0.00,-1.11,0.03,-1.14,0.09,-1.23],['c',0.03,-0.03,0.48,-0.39,1.02,-0.75],['l',0.99,-0.66],['l',0.00,-2.37],['c',0.00,-1.32,0.00,-2.37,-0.03,-2.37],['l',-0.72,0.48],['c',-0.69,0.48,-0.69,0.48,-0.87,0.48],['c',-0.15,0.00,-0.18,0.00,-0.27,-0.06],['c',-0.21,-0.15,-0.21,-0.18,-0.21,-1.41],['c',0.00,-1.11,0.03,-1.14,0.09,-1.23],['c',0.03,-0.03,0.48,-0.39,1.02,-0.75],['l',0.99,-0.66],['l',0.00,-2.25],['c',0.00,-2.13,0.00,-2.28,0.06,-2.40],['c',0.06,-0.12,0.12,-0.18,0.27,-0.24],['z']],w:5.25,h:20.174}, 'accidentals.nat':{d:[['M',0.21,-11.40],['c',0.24,-0.06,0.78,0.00,0.99,0.15],['c',0.03,0.03,0.03,0.48,0.00,2.61],['c',-0.03,1.44,-0.03,2.61,-0.03,2.61],['c',0.00,0.03,0.75,-0.09,1.68,-0.24],['c',0.96,-0.18,1.71,-0.27,1.74,-0.27],['c',0.15,0.03,0.27,0.15,0.36,0.30],['l',0.06,0.12],['l',0.09,8.67],['c',0.09,6.96,0.12,8.67,0.09,8.67],['c',-0.03,0.03,-0.12,0.06,-0.21,0.09],['c',-0.24,0.09,-0.72,0.09,-0.96,0.00],['c',-0.09,-0.03,-0.18,-0.06,-0.21,-0.09],['c',-0.03,-0.03,-0.03,-0.48,0.00,-2.61],['c',0.03,-1.44,0.03,-2.61,0.03,-2.61],['c',0.00,-0.03,-0.75,0.09,-1.68,0.24],['c',-0.96,0.18,-1.71,0.27,-1.74,0.27],['c',-0.15,-0.03,-0.27,-0.15,-0.36,-0.30],['l',-0.06,-0.15],['l',-0.09,-7.53],['c',-0.06,-4.14,-0.09,-8.04,-0.12,-8.67],['l',0.00,-1.11],['l',0.15,-0.06],['c',0.09,-0.03,0.21,-0.06,0.27,-0.09],['z'],['m',3.75,8.40],['c',0.00,-0.33,0.00,-0.42,-0.03,-0.42],['c',-0.12,0.00,-2.79,0.45,-2.79,0.48],['c',-0.03,0.00,-0.09,6.30,-0.09,6.33],['c',0.03,0.00,2.79,-0.45,2.82,-0.48],['c',0.00,0.00,0.09,-4.53,0.09,-5.91],['z']],w:5.4,h:22.8}, 'accidentals.flat':{d:[['M',-0.36,-14.07],['c',0.33,-0.06,0.87,0.00,1.08,0.15],['c',0.06,0.03,0.06,0.36,-0.03,5.25],['c',-0.06,2.85,-0.09,5.19,-0.09,5.19],['c',0.00,0.03,0.12,-0.03,0.24,-0.12],['c',0.63,-0.42,1.41,-0.66,2.19,-0.72],['c',0.81,-0.03,1.47,0.21,2.04,0.78],['c',0.57,0.54,0.87,1.26,0.93,2.04],['c',0.03,0.57,-0.09,1.08,-0.36,1.62],['c',-0.42,0.81,-1.02,1.38,-2.82,2.61],['c',-1.14,0.78,-1.44,1.02,-1.80,1.44],['c',-0.18,0.18,-0.39,0.39,-0.45,0.42],['c',-0.27,0.18,-0.57,0.15,-0.81,-0.06],['c',-0.06,-0.09,-0.12,-0.18,-0.15,-0.27],['c',-0.03,-0.06,-0.09,-3.27,-0.18,-8.34],['c',-0.09,-4.53,-0.15,-8.58,-0.18,-9.03],['l',0.00,-0.78],['l',0.12,-0.06],['c',0.06,-0.03,0.18,-0.09,0.27,-0.12],['z'],['m',3.18,11.01],['c',-0.21,-0.12,-0.54,-0.15,-0.81,-0.06],['c',-0.54,0.15,-0.99,0.63,-1.17,1.26],['c',-0.06,0.30,-0.12,2.88,-0.06,3.87],['c',0.03,0.42,0.03,0.81,0.06,0.90],['l',0.03,0.12],['l',0.45,-0.39],['c',0.63,-0.54,1.26,-1.17,1.56,-1.59],['c',0.30,-0.42,0.60,-0.99,0.72,-1.41],['c',0.18,-0.69,0.09,-1.47,-0.18,-2.07],['c',-0.15,-0.30,-0.33,-0.51,-0.60,-0.63],['z']],w:6.75,h:18.801}, 'accidentals.halfflat':{d:[['M',4.83,-14.07],['c',0.33,-0.06,0.87,0.00,1.08,0.15],['c',0.06,0.03,0.06,0.60,-0.12,9.06],['c',-0.09,5.55,-0.15,9.06,-0.18,9.12],['c',-0.03,0.09,-0.09,0.18,-0.15,0.27],['c',-0.24,0.21,-0.54,0.24,-0.81,0.06],['c',-0.06,-0.03,-0.27,-0.24,-0.45,-0.42],['c',-0.36,-0.42,-0.66,-0.66,-1.80,-1.44],['c',-1.23,-0.84,-1.83,-1.32,-2.25,-1.77],['c',-0.66,-0.78,-0.96,-1.56,-0.93,-2.46],['c',0.09,-1.41,1.11,-2.58,2.40,-2.79],['c',0.30,-0.06,0.84,-0.03,1.23,0.06],['c',0.54,0.12,1.08,0.33,1.53,0.63],['c',0.12,0.09,0.24,0.15,0.24,0.12],['c',0.00,0.00,-0.12,-8.37,-0.18,-9.75],['l',0.00,-0.66],['l',0.12,-0.06],['c',0.06,-0.03,0.18,-0.09,0.27,-0.12],['z'],['m',-1.65,10.95],['c',-0.60,-0.18,-1.08,0.09,-1.38,0.69],['c',-0.27,0.60,-0.36,1.38,-0.18,2.07],['c',0.12,0.42,0.42,0.99,0.72,1.41],['c',0.30,0.42,0.93,1.05,1.56,1.59],['l',0.48,0.39],['l',0.00,-0.12],['c',0.03,-0.09,0.03,-0.48,0.06,-0.90],['c',0.03,-0.57,0.03,-1.08,0.00,-2.22],['c',-0.03,-1.62,-0.03,-1.62,-0.24,-2.07],['c',-0.21,-0.42,-0.60,-0.75,-1.02,-0.84],['z']],w:6.728,h:18.801}, 'accidentals.dblflat':{d:[['M',-0.36,-14.07],['c',0.33,-0.06,0.87,0.00,1.08,0.15],['c',0.06,0.03,0.06,0.33,-0.03,4.89],['c',-0.06,2.67,-0.09,5.01,-0.09,5.22],['l',0.00,0.36],['l',0.15,-0.15],['c',0.36,-0.30,0.75,-0.51,1.20,-0.63],['c',0.33,-0.09,0.96,-0.09,1.26,-0.03],['c',0.27,0.09,0.63,0.27,0.87,0.45],['l',0.21,0.15],['l',0.00,-0.27],['c',0.00,-0.15,-0.03,-2.43,-0.09,-5.10],['c',-0.09,-4.56,-0.09,-4.86,-0.03,-4.89],['c',0.15,-0.12,0.39,-0.15,0.72,-0.15],['c',0.30,0.00,0.54,0.03,0.69,0.15],['c',0.06,0.03,0.06,0.33,-0.03,4.95],['c',-0.06,2.70,-0.09,5.04,-0.09,5.22],['l',0.03,0.30],['l',0.21,-0.15],['c',0.69,-0.48,1.44,-0.69,2.28,-0.69],['c',0.51,0.00,0.78,0.03,1.20,0.21],['c',1.32,0.63,2.01,2.28,1.53,3.69],['c',-0.21,0.57,-0.51,1.02,-1.05,1.56],['c',-0.42,0.42,-0.81,0.72,-1.92,1.50],['c',-1.26,0.87,-1.50,1.08,-1.86,1.50],['c',-0.39,0.45,-0.54,0.54,-0.81,0.51],['c',-0.18,0.00,-0.21,0.00,-0.33,-0.06],['l',-0.21,-0.21],['l',-0.06,-0.12],['l',-0.03,-0.99],['c',-0.03,-0.54,-0.03,-1.29,-0.06,-1.68],['l',0.00,-0.69],['l',-0.21,0.24],['c',-0.36,0.42,-0.75,0.75,-1.80,1.62],['c',-1.02,0.84,-1.20,0.99,-1.44,1.38],['c',-0.36,0.51,-0.54,0.60,-0.90,0.51],['c',-0.15,-0.03,-0.39,-0.27,-0.42,-0.42],['c',-0.03,-0.06,-0.09,-3.27,-0.18,-8.34],['c',-0.09,-4.53,-0.15,-8.58,-0.18,-9.03],['l',0.00,-0.78],['l',0.12,-0.06],['c',0.06,-0.03,0.18,-0.09,0.27,-0.12],['z'],['m',2.52,10.98],['c',-0.18,-0.09,-0.48,-0.12,-0.66,-0.06],['c',-0.39,0.15,-0.69,0.54,-0.84,1.14],['c',-0.06,0.24,-0.06,0.39,-0.09,1.74],['c',-0.03,1.44,0.00,2.73,0.06,3.18],['l',0.03,0.15],['l',0.27,-0.27],['c',0.93,-0.96,1.50,-1.95,1.74,-3.06],['c',0.06,-0.27,0.06,-0.39,0.06,-0.96],['c',0.00,-0.54,0.00,-0.69,-0.06,-0.93],['c',-0.09,-0.51,-0.27,-0.81,-0.51,-0.93],['z'],['m',5.43,0.00],['c',-0.18,-0.09,-0.51,-0.12,-0.72,-0.06],['c',-0.54,0.12,-0.96,0.63,-1.17,1.26],['c',-0.06,0.30,-0.12,2.88,-0.06,3.90],['c',0.03,0.42,0.03,0.81,0.06,0.90],['l',0.03,0.12],['l',0.36,-0.30],['c',0.42,-0.36,1.02,-0.96,1.29,-1.29],['c',0.36,-0.45,0.66,-0.99,0.81,-1.41],['c',0.42,-1.23,0.15,-2.76,-0.60,-3.12],['z']],w:11.613,h:18.804}, 'accidentals.dblsharp':{d:[['M',-0.18,-3.96],['c',0.06,-0.03,0.12,-0.06,0.15,-0.06],['c',0.09,0.00,2.76,0.27,2.79,0.30],['c',0.12,0.03,0.15,0.12,0.15,0.51],['c',0.06,0.96,0.24,1.59,0.57,2.10],['c',0.06,0.09,0.15,0.21,0.18,0.24],['l',0.09,0.06],['l',0.09,-0.06],['c',0.03,-0.03,0.12,-0.15,0.18,-0.24],['c',0.33,-0.51,0.51,-1.14,0.57,-2.10],['c',0.00,-0.39,0.03,-0.45,0.12,-0.51],['c',0.03,0.00,0.66,-0.09,1.44,-0.15],['c',1.47,-0.15,1.50,-0.15,1.56,-0.03],['c',0.03,0.06,0.00,0.42,-0.09,1.44],['c',-0.09,0.72,-0.15,1.35,-0.15,1.38],['c',0.00,0.03,-0.03,0.09,-0.06,0.12],['c',-0.06,0.06,-0.12,0.09,-0.51,0.09],['c',-1.08,0.06,-1.80,0.30,-2.28,0.75],['l',-0.12,0.09],['l',0.09,0.09],['c',0.12,0.15,0.39,0.33,0.63,0.45],['c',0.42,0.18,0.96,0.27,1.68,0.33],['c',0.39,0.00,0.45,0.03,0.51,0.09],['c',0.03,0.03,0.06,0.09,0.06,0.12],['c',0.00,0.03,0.06,0.66,0.15,1.38],['c',0.09,1.02,0.12,1.38,0.09,1.44],['c',-0.06,0.12,-0.09,0.12,-1.56,-0.03],['c',-0.78,-0.06,-1.41,-0.15,-1.44,-0.15],['c',-0.09,-0.06,-0.12,-0.12,-0.12,-0.54],['c',-0.06,-0.93,-0.24,-1.56,-0.57,-2.07],['c',-0.06,-0.09,-0.15,-0.21,-0.18,-0.24],['l',-0.09,-0.06],['l',-0.09,0.06],['c',-0.03,0.03,-0.12,0.15,-0.18,0.24],['c',-0.33,0.51,-0.51,1.14,-0.57,2.07],['c',0.00,0.42,-0.03,0.48,-0.12,0.54],['c',-0.03,0.00,-0.66,0.09,-1.44,0.15],['c',-1.47,0.15,-1.50,0.15,-1.56,0.03],['c',-0.03,-0.06,0.00,-0.42,0.09,-1.44],['c',0.09,-0.72,0.15,-1.35,0.15,-1.38],['c',0.00,-0.03,0.03,-0.09,0.06,-0.12],['c',0.06,-0.06,0.12,-0.09,0.51,-0.09],['c',0.72,-0.06,1.26,-0.15,1.68,-0.33],['c',0.24,-0.12,0.51,-0.30,0.63,-0.45],['l',0.09,-0.09],['l',-0.12,-0.09],['c',-0.48,-0.45,-1.20,-0.69,-2.28,-0.75],['c',-0.39,0.00,-0.45,-0.03,-0.51,-0.09],['c',-0.03,-0.03,-0.06,-0.09,-0.06,-0.12],['c',0.00,-0.03,-0.06,-0.63,-0.12,-1.38],['c',-0.09,-0.72,-0.15,-1.35,-0.15,-1.38],['z']],w:7.95,h:7.977}, 'dots.dot':{d:[['M',1.32,-1.68],['c',0.09,-0.03,0.27,-0.06,0.39,-0.06],['c',0.96,0.00,1.74,0.78,1.74,1.71],['c',0.00,0.96,-0.78,1.74,-1.71,1.74],['c',-0.96,0.00,-1.74,-0.78,-1.74,-1.71],['c',0.00,-0.78,0.54,-1.50,1.32,-1.68],['z']],w:3.45,h:3.45}, 'noteheads.dbl':{d:[['M',-0.69,-4.02],['c',0.18,-0.09,0.36,-0.09,0.54,0.00],['c',0.18,0.09,0.24,0.15,0.33,0.30],['c',0.06,0.15,0.06,0.18,0.06,1.41],['l',0.00,1.23],['l',0.12,-0.18],['c',0.72,-1.26,2.64,-2.31,4.86,-2.64],['c',0.81,-0.15,1.11,-0.15,2.13,-0.15],['c',0.99,0.00,1.29,0.00,2.10,0.15],['c',0.75,0.12,1.38,0.27,2.04,0.54],['c',1.35,0.51,2.34,1.26,2.82,2.10],['l',0.12,0.18],['l',0.00,-1.23],['c',0.00,-1.20,0.00,-1.26,0.06,-1.38],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['c',0.18,-0.09,0.36,-0.09,0.54,0.00],['c',0.18,0.09,0.24,0.15,0.33,0.30],['l',0.06,0.15],['l',0.00,3.54],['l',0.00,3.54],['l',-0.06,0.15],['c',-0.09,0.18,-0.15,0.24,-0.33,0.33],['c',-0.18,0.09,-0.36,0.09,-0.54,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.06,-0.12,-0.06,-0.18,-0.06,-1.38],['l',0.00,-1.23],['l',-0.12,0.18],['c',-0.48,0.84,-1.47,1.59,-2.82,2.10],['c',-0.84,0.33,-1.71,0.54,-2.85,0.66],['c',-0.45,0.06,-2.16,0.06,-2.61,0.00],['c',-1.14,-0.12,-2.01,-0.33,-2.85,-0.66],['c',-1.35,-0.51,-2.34,-1.26,-2.82,-2.10],['l',-0.12,-0.18],['l',0.00,1.23],['c',0.00,1.23,0.00,1.26,-0.06,1.38],['c',-0.09,0.18,-0.15,0.24,-0.33,0.33],['c',-0.18,0.09,-0.36,0.09,-0.54,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['l',-0.06,-0.15],['l',0.00,-3.54],['c',0.00,-3.48,0.00,-3.54,0.06,-3.66],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['z'],['m',7.71,0.63],['c',-0.36,-0.06,-0.90,-0.06,-1.14,0.00],['c',-0.30,0.03,-0.66,0.24,-0.87,0.42],['c',-0.60,0.54,-0.90,1.62,-0.75,2.82],['c',0.12,0.93,0.51,1.68,1.11,2.31],['c',0.75,0.72,1.83,1.20,2.85,1.26],['c',1.05,0.06,1.83,-0.54,2.10,-1.65],['c',0.21,-0.90,0.12,-1.95,-0.24,-2.82],['c',-0.36,-0.81,-1.08,-1.53,-1.95,-1.95],['c',-0.30,-0.15,-0.78,-0.30,-1.11,-0.39],['z']],w:16.83,h:8.145}, 'noteheads.whole':{d:[['M',6.51,-4.05],['c',0.51,-0.03,2.01,0.00,2.52,0.03],['c',1.41,0.18,2.64,0.51,3.72,1.08],['c',1.20,0.63,1.95,1.41,2.19,2.31],['c',0.09,0.33,0.09,0.90,0.00,1.23],['c',-0.24,0.90,-0.99,1.68,-2.19,2.31],['c',-1.08,0.57,-2.28,0.90,-3.75,1.08],['c',-0.66,0.06,-2.31,0.06,-2.97,0.00],['c',-1.47,-0.18,-2.67,-0.51,-3.75,-1.08],['c',-1.20,-0.63,-1.95,-1.41,-2.19,-2.31],['c',-0.09,-0.33,-0.09,-0.90,0.00,-1.23],['c',0.24,-0.90,0.99,-1.68,2.19,-2.31],['c',1.20,-0.63,2.61,-0.99,4.23,-1.11],['z'],['m',0.57,0.66],['c',-0.87,-0.15,-1.53,0.00,-2.04,0.51],['c',-0.15,0.15,-0.24,0.27,-0.33,0.48],['c',-0.24,0.51,-0.36,1.08,-0.33,1.77],['c',0.03,0.69,0.18,1.26,0.42,1.77],['c',0.60,1.17,1.74,1.98,3.18,2.22],['c',1.11,0.21,1.95,-0.15,2.34,-0.99],['c',0.24,-0.51,0.36,-1.08,0.33,-1.80],['c',-0.06,-1.11,-0.45,-2.04,-1.17,-2.76],['c',-0.63,-0.63,-1.47,-1.05,-2.40,-1.20],['z']],w:14.985,h:8.097}, 'noteheads.half':{d:[['M',7.44,-4.05],['c',0.06,-0.03,0.27,-0.03,0.48,-0.03],['c',1.05,0.00,1.71,0.24,2.10,0.81],['c',0.42,0.60,0.45,1.35,0.18,2.40],['c',-0.42,1.59,-1.14,2.73,-2.16,3.39],['c',-1.41,0.93,-3.18,1.44,-5.40,1.53],['c',-1.17,0.03,-1.89,-0.21,-2.28,-0.81],['c',-0.42,-0.60,-0.45,-1.35,-0.18,-2.40],['c',0.42,-1.59,1.14,-2.73,2.16,-3.39],['c',0.63,-0.42,1.23,-0.72,1.98,-0.96],['c',0.90,-0.30,1.65,-0.42,3.12,-0.54],['z'],['m',1.29,0.87],['c',-0.27,-0.09,-0.63,-0.12,-0.90,-0.03],['c',-0.72,0.24,-1.53,0.69,-3.27,1.80],['c',-2.34,1.50,-3.30,2.25,-3.57,2.79],['c',-0.36,0.72,-0.06,1.50,0.66,1.77],['c',0.24,0.12,0.69,0.09,0.99,0.00],['c',0.84,-0.30,1.92,-0.93,4.14,-2.37],['c',1.62,-1.08,2.37,-1.71,2.61,-2.19],['c',0.36,-0.72,0.06,-1.50,-0.66,-1.77],['z']],w:10.37,h:8.132}, 'noteheads.quarter':{d:[['M',6.09,-4.05],['c',0.36,-0.03,1.20,0.00,1.53,0.06],['c',1.17,0.24,1.89,0.84,2.16,1.83],['c',0.06,0.18,0.06,0.30,0.06,0.66],['c',0.00,0.45,0.00,0.63,-0.15,1.08],['c',-0.66,2.04,-3.06,3.93,-5.52,4.38],['c',-0.54,0.09,-1.44,0.09,-1.83,0.03],['c',-1.23,-0.27,-1.98,-0.87,-2.25,-1.86],['c',-0.06,-0.18,-0.06,-0.30,-0.06,-0.66],['c',0.00,-0.45,0.00,-0.63,0.15,-1.08],['c',0.24,-0.78,0.75,-1.53,1.44,-2.22],['c',1.20,-1.20,2.85,-2.01,4.47,-2.22],['z']],w:9.81,h:8.094}, 'noteheads.slash.nostem':{d:[['M',9.30,-7.77],['c',0.06,-0.06,0.18,-0.06,1.71,-0.06],['l',1.65,0.00],['l',0.09,0.09],['c',0.06,0.06,0.06,0.09,0.06,0.15],['c',-0.03,0.12,-9.21,15.24,-9.30,15.33],['c',-0.06,0.06,-0.18,0.06,-1.71,0.06],['l',-1.65,0.00],['l',-0.09,-0.09],['c',-0.06,-0.06,-0.06,-0.09,-0.06,-0.15],['c',0.03,-0.12,9.21,-15.24,9.30,-15.33],['z']],w:12.81,h:15.63}, 'noteheads.indeterminate':{d:[['M',0.78,-4.05],['c',0.12,-0.03,0.24,-0.03,0.36,0.03],['c',0.03,0.03,0.93,0.72,1.95,1.56],['l',1.86,1.50],['l',1.86,-1.50],['c',1.02,-0.84,1.92,-1.53,1.95,-1.56],['c',0.21,-0.12,0.33,-0.09,0.75,0.24],['c',0.30,0.27,0.36,0.36,0.36,0.54],['c',0.00,0.03,-0.03,0.12,-0.06,0.18],['c',-0.03,0.06,-0.90,0.75,-1.89,1.56],['l',-1.80,1.47],['c',0.00,0.03,0.81,0.69,1.80,1.50],['c',0.99,0.81,1.86,1.50,1.89,1.56],['c',0.03,0.06,0.06,0.15,0.06,0.18],['c',0.00,0.18,-0.06,0.27,-0.36,0.54],['c',-0.42,0.33,-0.54,0.36,-0.75,0.24],['c',-0.03,-0.03,-0.93,-0.72,-1.95,-1.56],['l',-1.86,-1.50],['l',-1.86,1.50],['c',-1.02,0.84,-1.92,1.53,-1.95,1.56],['c',-0.21,0.12,-0.33,0.09,-0.75,-0.24],['c',-0.30,-0.27,-0.36,-0.36,-0.36,-0.54],['c',0.00,-0.03,0.03,-0.12,0.06,-0.18],['c',0.03,-0.06,0.90,-0.75,1.89,-1.56],['l',1.80,-1.47],['c',0.00,-0.03,-0.81,-0.69,-1.80,-1.50],['c',-0.99,-0.81,-1.86,-1.50,-1.89,-1.56],['c',-0.06,-0.12,-0.09,-0.21,-0.03,-0.36],['c',0.03,-0.09,0.57,-0.57,0.72,-0.63],['z']],w:9.843,h:8.139}, 'scripts.ufermata':{d:[['M',-0.75,-10.77],['c',0.12,0.00,0.45,-0.03,0.69,-0.03],['c',2.91,-0.03,5.55,1.53,7.41,4.35],['c',1.17,1.71,1.95,3.72,2.43,6.03],['c',0.12,0.51,0.12,0.57,0.03,0.69],['c',-0.12,0.21,-0.48,0.27,-0.69,0.12],['c',-0.12,-0.09,-0.18,-0.24,-0.27,-0.69],['c',-0.78,-3.63,-3.42,-6.54,-6.78,-7.38],['c',-0.78,-0.21,-1.20,-0.24,-2.07,-0.24],['c',-0.63,0.00,-0.84,0.00,-1.20,0.06],['c',-1.83,0.27,-3.42,1.08,-4.80,2.37],['c',-1.41,1.35,-2.40,3.21,-2.85,5.19],['c',-0.09,0.45,-0.15,0.60,-0.27,0.69],['c',-0.21,0.15,-0.57,0.09,-0.69,-0.12],['c',-0.09,-0.12,-0.09,-0.18,0.03,-0.69],['c',0.33,-1.62,0.78,-3.00,1.47,-4.38],['c',1.77,-3.54,4.44,-5.67,7.56,-5.97],['z'],['m',0.33,7.47],['c',1.38,-0.30,2.58,0.90,2.31,2.25],['c',-0.15,0.72,-0.78,1.35,-1.47,1.50],['c',-1.38,0.27,-2.58,-0.93,-2.31,-2.31],['c',0.15,-0.69,0.78,-1.29,1.47,-1.44],['z']],w:19.748,h:11.289}, 'scripts.dfermata':{d:[['M',-9.63,-0.42],['c',0.15,-0.09,0.36,-0.06,0.51,0.03],['c',0.12,0.09,0.18,0.24,0.27,0.66],['c',0.78,3.66,3.42,6.57,6.78,7.41],['c',0.78,0.21,1.20,0.24,2.07,0.24],['c',0.63,0.00,0.84,0.00,1.20,-0.06],['c',1.83,-0.27,3.42,-1.08,4.80,-2.37],['c',1.41,-1.35,2.40,-3.21,2.85,-5.22],['c',0.09,-0.42,0.15,-0.57,0.27,-0.66],['c',0.21,-0.15,0.57,-0.09,0.69,0.12],['c',0.09,0.12,0.09,0.18,-0.03,0.69],['c',-0.33,1.62,-0.78,3.00,-1.47,4.38],['c',-1.92,3.84,-4.89,6.00,-8.31,6.00],['c',-3.42,0.00,-6.39,-2.16,-8.31,-6.00],['c',-0.48,-0.96,-0.84,-1.92,-1.14,-2.97],['c',-0.18,-0.69,-0.42,-1.74,-0.42,-1.92],['c',0.00,-0.12,0.09,-0.27,0.24,-0.33],['z'],['m',9.21,0.00],['c',1.20,-0.27,2.34,0.63,2.34,1.86],['c',0.00,0.90,-0.66,1.68,-1.50,1.89],['c',-1.38,0.27,-2.58,-0.93,-2.31,-2.31],['c',0.15,-0.69,0.78,-1.29,1.47,-1.44],['z']],w:19.744,h:11.274}, 'scripts.sforzato':{d:[['M',-6.45,-3.69],['c',0.06,-0.03,0.15,-0.06,0.18,-0.06],['c',0.06,0.00,2.85,0.72,6.24,1.59],['l',6.33,1.65],['c',0.33,0.06,0.45,0.21,0.45,0.51],['c',0.00,0.30,-0.12,0.45,-0.45,0.51],['l',-6.33,1.65],['c',-3.39,0.87,-6.18,1.59,-6.21,1.59],['c',-0.21,0.00,-0.48,-0.24,-0.51,-0.45],['c',0.00,-0.15,0.06,-0.36,0.18,-0.45],['c',0.09,-0.06,0.87,-0.27,3.84,-1.05],['c',2.04,-0.54,3.84,-0.99,4.02,-1.02],['c',0.15,-0.06,1.14,-0.24,2.22,-0.42],['c',1.05,-0.18,1.92,-0.36,1.92,-0.36],['c',0.00,0.00,-0.87,-0.18,-1.92,-0.36],['c',-1.08,-0.18,-2.07,-0.36,-2.22,-0.42],['c',-0.18,-0.03,-1.98,-0.48,-4.02,-1.02],['c',-2.97,-0.78,-3.75,-0.99,-3.84,-1.05],['c',-0.12,-0.09,-0.18,-0.30,-0.18,-0.45],['c',0.03,-0.15,0.15,-0.30,0.30,-0.39],['z']],w:13.5,h:7.5}, 'scripts.staccato':{d:[['M',-0.36,-1.47],['c',0.93,-0.21,1.86,0.51,1.86,1.47],['c',0.00,0.93,-0.87,1.65,-1.80,1.47],['c',-0.54,-0.12,-1.02,-0.57,-1.14,-1.08],['c',-0.21,-0.81,0.27,-1.65,1.08,-1.86],['z']],w:2.989,h:3.004}, 'scripts.tenuto':{d:[['M',-4.20,-0.48],['l',0.12,-0.06],['l',4.08,0.00],['l',4.08,0.00],['l',0.12,0.06],['c',0.39,0.21,0.39,0.75,0.00,0.96],['l',-0.12,0.06],['l',-4.08,0.00],['l',-4.08,0.00],['l',-0.12,-0.06],['c',-0.39,-0.21,-0.39,-0.75,0.00,-0.96],['z']],w:8.985,h:1.08}, 'scripts.umarcato':{d:[['M',-0.15,-8.19],['c',0.15,-0.12,0.36,-0.03,0.45,0.15],['c',0.21,0.42,3.45,7.65,3.45,7.71],['c',0.00,0.12,-0.12,0.27,-0.21,0.30],['c',-0.03,0.03,-0.51,0.03,-1.14,0.03],['c',-1.05,0.00,-1.08,0.00,-1.17,-0.06],['c',-0.09,-0.06,-0.24,-0.36,-1.17,-2.40],['c',-0.57,-1.29,-1.05,-2.34,-1.08,-2.34],['c',0.00,-0.03,-0.51,1.02,-1.08,2.34],['c',-0.93,2.07,-1.08,2.34,-1.14,2.40],['c',-0.06,0.03,-0.15,0.06,-0.18,0.06],['c',-0.15,0.00,-0.33,-0.18,-0.33,-0.33],['c',0.00,-0.06,3.24,-7.32,3.45,-7.71],['c',0.03,-0.06,0.09,-0.15,0.15,-0.15],['z']],w:7.5,h:8.245}, 'scripts.dmarcato':{d:[['M',-3.57,0.03],['c',0.03,0.00,0.57,-0.03,1.17,-0.03],['c',1.05,0.00,1.08,0.00,1.17,0.06],['c',0.09,0.06,0.24,0.36,1.17,2.40],['c',0.57,1.29,1.05,2.34,1.08,2.34],['c',0.00,0.03,0.51,-1.02,1.08,-2.34],['c',0.93,-2.07,1.08,-2.34,1.14,-2.40],['c',0.06,-0.03,0.15,-0.06,0.18,-0.06],['c',0.15,0.00,0.33,0.18,0.33,0.33],['c',0.00,0.09,-3.45,7.74,-3.54,7.83],['c',-0.12,0.12,-0.30,0.12,-0.42,0.00],['c',-0.09,-0.09,-3.54,-7.74,-3.54,-7.83],['c',0.00,-0.09,0.12,-0.27,0.18,-0.30],['z']],w:7.5,h:8.25}, 'scripts.stopped':{d:[['M',-0.27,-4.08],['c',0.18,-0.09,0.36,-0.09,0.54,0.00],['c',0.18,0.09,0.24,0.15,0.33,0.30],['l',0.06,0.15],['l',0.00,1.50],['l',0.00,1.47],['l',1.47,0.00],['l',1.50,0.00],['l',0.15,0.06],['c',0.15,0.09,0.21,0.15,0.30,0.33],['c',0.09,0.18,0.09,0.36,0.00,0.54],['c',-0.09,0.18,-0.15,0.24,-0.33,0.33],['c',-0.12,0.06,-0.18,0.06,-1.62,0.06],['l',-1.47,0.00],['l',0.00,1.47],['l',0.00,1.47],['l',-0.06,0.15],['c',-0.09,0.18,-0.15,0.24,-0.33,0.33],['c',-0.18,0.09,-0.36,0.09,-0.54,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['l',-0.06,-0.15],['l',0.00,-1.47],['l',0.00,-1.47],['l',-1.47,0.00],['c',-1.44,0.00,-1.50,0.00,-1.62,-0.06],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.09,-0.18,-0.09,-0.36,0.00,-0.54],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['l',0.15,-0.06],['l',1.47,0.00],['l',1.47,0.00],['l',0.00,-1.47],['c',0.00,-1.44,0.00,-1.50,0.06,-1.62],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['z']],w:8.295,h:8.295}, 'scripts.upbow':{d:[['M',-4.65,-15.54],['c',0.12,-0.09,0.36,-0.06,0.48,0.03],['c',0.03,0.03,0.09,0.09,0.12,0.15],['c',0.03,0.06,0.66,2.13,1.41,4.62],['c',1.35,4.41,1.38,4.56,2.01,6.96],['l',0.63,2.46],['l',0.63,-2.46],['c',0.63,-2.40,0.66,-2.55,2.01,-6.96],['c',0.75,-2.49,1.38,-4.56,1.41,-4.62],['c',0.06,-0.15,0.18,-0.21,0.36,-0.24],['c',0.15,0.00,0.30,0.06,0.39,0.18],['c',0.15,0.21,0.24,-0.18,-2.10,7.56],['c',-1.20,3.96,-2.22,7.32,-2.25,7.41],['c',0.00,0.12,-0.06,0.27,-0.09,0.30],['c',-0.12,0.21,-0.60,0.21,-0.72,0.00],['c',-0.03,-0.03,-0.09,-0.18,-0.09,-0.30],['c',-0.03,-0.09,-1.05,-3.45,-2.25,-7.41],['c',-2.34,-7.74,-2.25,-7.35,-2.10,-7.56],['c',0.03,-0.03,0.09,-0.09,0.15,-0.12],['z']],w:9.73,h:15.608}, 'scripts.downbow':{d:[['M',-5.55,-9.93],['l',0.09,-0.06],['l',5.46,0.00],['l',5.46,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,4.77],['c',0.00,5.28,0.00,4.89,-0.18,5.01],['c',-0.18,0.12,-0.42,0.06,-0.54,-0.12],['c',-0.06,-0.09,-0.06,-0.18,-0.06,-2.97],['l',0.00,-2.85],['l',-4.83,0.00],['l',-4.83,0.00],['l',0.00,2.85],['c',0.00,2.79,0.00,2.88,-0.06,2.97],['c',-0.15,0.24,-0.51,0.24,-0.66,0.00],['c',-0.06,-0.09,-0.06,-0.21,-0.06,-4.89],['l',0.00,-4.77],['z']],w:11.22,h:9.992}, 'scripts.turn':{d:[['M',-4.77,-3.90],['c',0.36,-0.06,1.05,-0.06,1.44,0.03],['c',0.78,0.15,1.50,0.51,2.34,1.14],['c',0.60,0.45,1.05,0.87,2.22,2.01],['c',1.11,1.08,1.62,1.50,2.22,1.86],['c',0.60,0.36,1.32,0.57,1.92,0.57],['c',0.90,0.00,1.71,-0.57,1.89,-1.35],['c',0.24,-0.93,-0.39,-1.89,-1.35,-2.10],['l',-0.15,-0.06],['l',-0.09,0.15],['c',-0.03,0.09,-0.15,0.24,-0.24,0.33],['c',-0.72,0.72,-2.04,0.54,-2.49,-0.36],['c',-0.48,-0.93,0.03,-1.86,1.17,-2.19],['c',0.30,-0.09,1.02,-0.09,1.35,0.00],['c',0.99,0.27,1.74,0.87,2.25,1.83],['c',0.69,1.41,0.63,3.00,-0.21,4.26],['c',-0.21,0.30,-0.69,0.81,-0.99,1.02],['c',-0.30,0.21,-0.84,0.45,-1.17,0.54],['c',-1.23,0.36,-2.49,0.15,-3.72,-0.60],['c',-0.75,-0.48,-1.41,-1.02,-2.85,-2.46],['c',-1.11,-1.08,-1.62,-1.50,-2.22,-1.86],['c',-0.60,-0.36,-1.32,-0.57,-1.92,-0.57],['c',-0.90,0.00,-1.71,0.57,-1.89,1.35],['c',-0.24,0.93,0.39,1.89,1.35,2.10],['l',0.15,0.06],['l',0.09,-0.15],['c',0.03,-0.09,0.15,-0.24,0.24,-0.33],['c',0.72,-0.72,2.04,-0.54,2.49,0.36],['c',0.48,0.93,-0.03,1.86,-1.17,2.19],['c',-0.30,0.09,-1.02,0.09,-1.35,0.00],['c',-0.99,-0.27,-1.74,-0.87,-2.25,-1.83],['c',-0.69,-1.41,-0.63,-3.00,0.21,-4.26],['c',0.21,-0.30,0.69,-0.81,0.99,-1.02],['c',0.48,-0.33,1.11,-0.57,1.74,-0.66],['z']],w:16.366,h:7.893}, 'scripts.trill':{d:[['M',-0.51,-16.02],['c',0.12,-0.09,0.21,-0.18,0.21,-0.18],['l',-0.81,4.02],['l',-0.81,4.02],['c',0.03,0.00,0.51,-0.27,1.08,-0.60],['c',0.60,-0.30,1.14,-0.63,1.26,-0.66],['c',1.14,-0.54,2.31,-0.60,3.09,-0.18],['c',0.27,0.15,0.54,0.36,0.60,0.51],['l',0.06,0.12],['l',0.21,-0.21],['c',0.90,-0.81,2.22,-0.99,3.12,-0.42],['c',0.60,0.42,0.90,1.14,0.78,2.07],['c',-0.15,1.29,-1.05,2.31,-1.95,2.25],['c',-0.48,-0.03,-0.78,-0.30,-0.96,-0.81],['c',-0.09,-0.27,-0.09,-0.90,-0.03,-1.20],['c',0.21,-0.75,0.81,-1.23,1.59,-1.32],['l',0.24,-0.03],['l',-0.09,-0.12],['c',-0.51,-0.66,-1.62,-0.63,-2.31,0.03],['c',-0.39,0.42,-0.30,0.09,-1.23,4.77],['l',-0.81,4.14],['c',-0.03,0.00,-0.12,-0.03,-0.21,-0.09],['c',-0.33,-0.15,-0.54,-0.18,-0.99,-0.18],['c',-0.42,0.00,-0.66,0.03,-1.05,0.18],['c',-0.12,0.06,-0.21,0.09,-0.21,0.09],['c',0.00,-0.03,0.36,-1.86,0.81,-4.11],['c',0.90,-4.47,0.87,-4.26,0.69,-4.53],['c',-0.21,-0.36,-0.66,-0.51,-1.17,-0.36],['c',-0.15,0.06,-2.22,1.14,-2.58,1.38],['c',-0.12,0.09,-0.12,0.09,-0.21,0.60],['l',-0.09,0.51],['l',0.21,0.24],['c',0.63,0.75,1.02,1.47,1.20,2.19],['c',0.06,0.27,0.06,0.36,0.06,0.81],['c',0.00,0.42,0.00,0.54,-0.06,0.78],['c',-0.15,0.54,-0.33,0.93,-0.63,1.35],['c',-0.18,0.24,-0.57,0.63,-0.81,0.78],['c',-0.24,0.15,-0.63,0.36,-0.84,0.42],['c',-0.27,0.06,-0.66,0.06,-0.87,0.03],['c',-0.81,-0.18,-1.32,-1.05,-1.38,-2.46],['c',-0.03,-0.60,0.03,-0.99,0.33,-2.46],['c',0.21,-1.08,0.24,-1.32,0.21,-1.29],['c',-1.20,0.48,-2.40,0.75,-3.21,0.72],['c',-0.69,-0.06,-1.17,-0.30,-1.41,-0.72],['c',-0.39,-0.75,-0.12,-1.80,0.66,-2.46],['c',0.24,-0.18,0.69,-0.42,1.02,-0.51],['c',0.69,-0.18,1.53,-0.15,2.31,0.09],['c',0.30,0.09,0.75,0.30,0.99,0.45],['c',0.12,0.09,0.15,0.09,0.15,0.03],['c',0.03,-0.03,0.33,-1.59,0.72,-3.45],['c',0.36,-1.86,0.66,-3.42,0.69,-3.45],['c',0.00,-0.03,0.03,-0.03,0.21,0.03],['c',0.21,0.06,0.27,0.06,0.48,0.06],['c',0.42,-0.03,0.78,-0.18,1.26,-0.48],['c',0.15,-0.12,0.36,-0.27,0.48,-0.39],['z'],['m',-5.73,7.68],['c',-0.27,-0.03,-0.96,-0.06,-1.20,-0.03],['c',-0.81,0.12,-1.35,0.57,-1.50,1.20],['c',-0.18,0.66,0.12,1.14,0.75,1.29],['c',0.66,0.12,1.92,-0.12,3.18,-0.66],['l',0.33,-0.15],['l',0.09,-0.39],['c',0.06,-0.21,0.09,-0.42,0.09,-0.45],['c',0.00,-0.03,-0.45,-0.30,-0.75,-0.45],['c',-0.27,-0.15,-0.66,-0.27,-0.99,-0.36],['z'],['m',4.29,3.63],['c',-0.24,-0.39,-0.51,-0.75,-0.51,-0.69],['c',-0.06,0.12,-0.39,1.92,-0.45,2.28],['c',-0.09,0.54,-0.12,1.14,-0.06,1.38],['c',0.06,0.42,0.21,0.60,0.51,0.57],['c',0.39,-0.06,0.75,-0.48,0.93,-1.14],['c',0.09,-0.33,0.09,-1.05,0.00,-1.38],['c',-0.09,-0.39,-0.24,-0.69,-0.42,-1.02],['z']],w:17.963,h:16.49}, 'scripts.segno':{d:[['M',-3.72,-11.22],['c',0.78,-0.09,1.59,0.03,2.31,0.42],['c',1.20,0.60,2.01,1.71,2.31,3.09],['c',0.09,0.42,0.09,1.20,0.03,1.50],['c',-0.15,0.45,-0.39,0.81,-0.66,0.93],['c',-0.33,0.18,-0.84,0.21,-1.23,0.15],['c',-0.81,-0.18,-1.32,-0.93,-1.26,-1.89],['c',0.03,-0.36,0.09,-0.57,0.24,-0.90],['c',0.15,-0.33,0.45,-0.60,0.72,-0.75],['c',0.12,-0.06,0.18,-0.09,0.18,-0.12],['c',0.00,-0.03,-0.03,-0.15,-0.09,-0.24],['c',-0.18,-0.45,-0.54,-0.87,-0.96,-1.08],['c',-1.11,-0.57,-2.34,-0.18,-2.88,0.90],['c',-0.24,0.51,-0.33,1.11,-0.24,1.83],['c',0.27,1.92,1.50,3.54,3.93,5.13],['c',0.48,0.33,1.26,0.78,1.29,0.78],['c',0.03,0.00,1.35,-2.19,2.94,-4.89],['l',2.88,-4.89],['l',0.84,0.00],['l',0.87,0.00],['l',-0.03,0.06],['c',-0.15,0.21,-6.15,10.41,-6.15,10.44],['c',0.00,0.00,0.21,0.15,0.48,0.27],['c',2.61,1.47,4.35,3.03,5.13,4.65],['c',1.14,2.34,0.51,5.07,-1.44,6.39],['c',-0.66,0.42,-1.32,0.63,-2.13,0.69],['c',-2.01,0.09,-3.81,-1.41,-4.26,-3.54],['c',-0.09,-0.42,-0.09,-1.20,-0.03,-1.50],['c',0.15,-0.45,0.39,-0.81,0.66,-0.93],['c',0.33,-0.18,0.84,-0.21,1.23,-0.15],['c',0.81,0.18,1.32,0.93,1.26,1.89],['c',-0.03,0.36,-0.09,0.57,-0.24,0.90],['c',-0.15,0.33,-0.45,0.60,-0.72,0.75],['c',-0.12,0.06,-0.18,0.09,-0.18,0.12],['c',0.00,0.03,0.03,0.15,0.09,0.24],['c',0.18,0.45,0.54,0.87,0.96,1.08],['c',1.11,0.57,2.34,0.18,2.88,-0.90],['c',0.24,-0.51,0.33,-1.11,0.24,-1.83],['c',-0.27,-1.92,-1.50,-3.54,-3.93,-5.13],['c',-0.48,-0.33,-1.26,-0.78,-1.29,-0.78],['c',-0.03,0.00,-1.35,2.19,-2.91,4.89],['l',-2.88,4.89],['l',-0.87,0.00],['l',-0.87,0.00],['l',0.03,-0.06],['c',0.15,-0.21,6.15,-10.41,6.15,-10.44],['c',0.00,0.00,-0.21,-0.15,-0.48,-0.30],['c',-2.61,-1.44,-4.35,-3.00,-5.13,-4.62],['c',-0.90,-1.89,-0.72,-4.02,0.48,-5.52],['c',0.69,-0.84,1.68,-1.41,2.73,-1.53],['z'],['m',8.76,9.09],['c',0.03,-0.03,0.15,-0.03,0.27,-0.03],['c',0.33,0.03,0.57,0.18,0.72,0.48],['c',0.09,0.18,0.09,0.57,0.00,0.75],['c',-0.09,0.18,-0.21,0.30,-0.36,0.39],['c',-0.15,0.06,-0.21,0.06,-0.39,0.06],['c',-0.21,0.00,-0.27,0.00,-0.39,-0.06],['c',-0.30,-0.15,-0.48,-0.45,-0.48,-0.75],['c',0.00,-0.39,0.24,-0.72,0.63,-0.84],['z'],['m',-10.53,2.61],['c',0.03,-0.03,0.15,-0.03,0.27,-0.03],['c',0.33,0.03,0.57,0.18,0.72,0.48],['c',0.09,0.18,0.09,0.57,0.00,0.75],['c',-0.09,0.18,-0.21,0.30,-0.36,0.39],['c',-0.15,0.06,-0.21,0.06,-0.39,0.06],['c',-0.21,0.00,-0.27,0.00,-0.39,-0.06],['c',-0.30,-0.15,-0.48,-0.45,-0.48,-0.75],['c',0.00,-0.39,0.24,-0.72,0.63,-0.84],['z']],w:15,h:22.504}, 'scripts.coda':{d:[['M',-0.21,-10.47],['c',0.18,-0.12,0.42,-0.06,0.54,0.12],['c',0.06,0.09,0.06,0.18,0.06,1.50],['l',0.00,1.38],['l',0.18,0.00],['c',0.39,0.06,0.96,0.24,1.38,0.48],['c',1.68,0.93,2.82,3.24,3.03,6.12],['c',0.03,0.24,0.03,0.45,0.03,0.45],['c',0.00,0.03,0.60,0.03,1.35,0.03],['c',1.50,0.00,1.47,0.00,1.59,0.18],['c',0.09,0.12,0.09,0.30,0.00,0.42],['c',-0.12,0.18,-0.09,0.18,-1.59,0.18],['c',-0.75,0.00,-1.35,0.00,-1.35,0.03],['c',0.00,0.00,0.00,0.21,-0.03,0.42],['c',-0.24,3.15,-1.53,5.58,-3.45,6.36],['c',-0.27,0.12,-0.72,0.24,-0.96,0.27],['l',-0.18,0.00],['l',0.00,1.38],['c',0.00,1.32,0.00,1.41,-0.06,1.50],['c',-0.15,0.24,-0.51,0.24,-0.66,0.00],['c',-0.06,-0.09,-0.06,-0.18,-0.06,-1.50],['l',0.00,-1.38],['l',-0.18,0.00],['c',-0.39,-0.06,-0.96,-0.24,-1.38,-0.48],['c',-1.68,-0.93,-2.82,-3.24,-3.03,-6.15],['c',-0.03,-0.21,-0.03,-0.42,-0.03,-0.42],['c',0.00,-0.03,-0.60,-0.03,-1.35,-0.03],['c',-1.50,0.00,-1.47,0.00,-1.59,-0.18],['c',-0.09,-0.12,-0.09,-0.30,0.00,-0.42],['c',0.12,-0.18,0.09,-0.18,1.59,-0.18],['c',0.75,0.00,1.35,0.00,1.35,-0.03],['c',0.00,0.00,0.00,-0.21,0.03,-0.45],['c',0.24,-3.12,1.53,-5.55,3.45,-6.33],['c',0.27,-0.12,0.72,-0.24,0.96,-0.27],['l',0.18,0.00],['l',0.00,-1.38],['c',0.00,-1.53,0.00,-1.50,0.18,-1.62],['z'],['m',-0.18,6.93],['c',0.00,-2.97,0.00,-3.15,-0.06,-3.15],['c',-0.09,0.00,-0.51,0.15,-0.66,0.21],['c',-0.87,0.51,-1.38,1.62,-1.56,3.51],['c',-0.06,0.54,-0.12,1.59,-0.12,2.16],['l',0.00,0.42],['l',1.20,0.00],['l',1.20,0.00],['l',0.00,-3.15],['z'],['m',1.17,-3.06],['c',-0.09,-0.03,-0.21,-0.06,-0.27,-0.09],['l',-0.12,0.00],['l',0.00,3.15],['l',0.00,3.15],['l',1.20,0.00],['l',1.20,0.00],['l',0.00,-0.81],['c',-0.06,-2.40,-0.33,-3.69,-0.93,-4.59],['c',-0.27,-0.39,-0.66,-0.69,-1.08,-0.81],['z'],['m',-1.17,10.14],['l',0.00,-3.15],['l',-1.20,0.00],['l',-1.20,0.00],['l',0.00,0.81],['c',0.03,0.96,0.06,1.47,0.15,2.13],['c',0.24,2.04,0.96,3.12,2.13,3.36],['l',0.12,0.00],['l',0.00,-3.15],['z'],['m',3.18,-2.34],['l',0.00,-0.81],['l',-1.20,0.00],['l',-1.20,0.00],['l',0.00,3.15],['l',0.00,3.15],['l',0.12,0.00],['c',1.17,-0.24,1.89,-1.32,2.13,-3.36],['c',0.09,-0.66,0.12,-1.17,0.15,-2.13],['z']],w:16.035,h:21.062}, 'scripts.comma':{d:[['M',1.14,-4.62],['c',0.30,-0.12,0.69,-0.03,0.93,0.15],['c',0.12,0.12,0.36,0.45,0.51,0.78],['c',0.90,1.77,0.54,4.05,-1.08,6.75],['c',-0.36,0.63,-0.87,1.38,-0.96,1.44],['c',-0.18,0.12,-0.42,0.06,-0.54,-0.12],['c',-0.09,-0.18,-0.09,-0.30,0.12,-0.60],['c',0.96,-1.44,1.44,-2.97,1.38,-4.35],['c',-0.06,-0.93,-0.30,-1.68,-0.78,-2.46],['c',-0.27,-0.39,-0.33,-0.63,-0.24,-0.96],['c',0.09,-0.27,0.36,-0.54,0.66,-0.63],['z']],w:3.042,h:9.237}, 'scripts.roll':{d:[['M',1.95,-6.00],['c',0.21,-0.09,0.36,-0.09,0.57,0.00],['c',0.39,0.15,0.63,0.39,1.47,1.35],['c',0.66,0.75,0.78,0.87,1.08,1.05],['c',0.75,0.45,1.65,0.42,2.40,-0.06],['c',0.12,-0.09,0.27,-0.27,0.54,-0.60],['c',0.42,-0.54,0.51,-0.63,0.69,-0.63],['c',0.09,0.00,0.30,0.12,0.36,0.21],['c',0.09,0.12,0.12,0.30,0.03,0.42],['c',-0.06,0.12,-3.15,3.90,-3.30,4.08],['c',-0.06,0.06,-0.18,0.12,-0.27,0.18],['c',-0.27,0.12,-0.60,0.06,-0.99,-0.27],['c',-0.27,-0.21,-0.42,-0.39,-1.08,-1.14],['c',-0.63,-0.72,-0.81,-0.90,-1.17,-1.08],['c',-0.36,-0.18,-0.57,-0.21,-0.99,-0.21],['c',-0.39,0.00,-0.63,0.03,-0.93,0.18],['c',-0.36,0.15,-0.51,0.27,-0.90,0.81],['c',-0.24,0.27,-0.45,0.51,-0.48,0.54],['c',-0.12,0.09,-0.27,0.06,-0.39,0.00],['c',-0.24,-0.15,-0.33,-0.39,-0.21,-0.60],['c',0.09,-0.12,3.18,-3.87,3.33,-4.02],['c',0.06,-0.06,0.18,-0.15,0.24,-0.21],['z']],w:10.817,h:6.125}, 'scripts.prall':{d:[['M',-4.38,-3.69],['c',0.06,-0.03,0.18,-0.06,0.24,-0.06],['c',0.30,0.00,0.27,-0.03,1.89,1.95],['l',1.53,1.83],['c',0.03,0.00,0.57,-0.84,1.23,-1.83],['c',1.14,-1.68,1.23,-1.83,1.35,-1.89],['c',0.06,-0.03,0.18,-0.06,0.24,-0.06],['c',0.30,0.00,0.27,-0.03,1.89,1.95],['l',1.53,1.83],['l',0.48,-0.69],['c',0.51,-0.78,0.54,-0.84,0.69,-0.90],['c',0.42,-0.18,0.87,0.15,0.81,0.60],['c',-0.03,0.12,-0.30,0.51,-1.50,2.37],['c',-1.38,2.07,-1.50,2.22,-1.62,2.28],['c',-0.06,0.03,-0.18,0.06,-0.24,0.06],['c',-0.30,0.00,-0.27,0.03,-1.89,-1.95],['l',-1.53,-1.83],['c',-0.03,0.00,-0.57,0.84,-1.23,1.83],['c',-1.14,1.68,-1.23,1.83,-1.35,1.89],['c',-0.06,0.03,-0.18,0.06,-0.24,0.06],['c',-0.30,0.00,-0.27,0.03,-1.89,-1.95],['l',-1.53,-1.83],['l',-0.48,0.69],['c',-0.51,0.78,-0.54,0.84,-0.69,0.90],['c',-0.42,0.18,-0.87,-0.15,-0.81,-0.60],['c',0.03,-0.12,0.30,-0.51,1.50,-2.37],['c',1.38,-2.07,1.50,-2.22,1.62,-2.28],['z']],w:15.011,h:7.5}, 'scripts.arpeggio':{d:[['M',1.5,0],['c',1.5,2,1.5,3,1.5,3],['s',0,1,-2,1.5],['s',-0.5,3,1,5.5],['l',1.5,0],['s',-1.75,-2,-1.9,-3.25],['s',2.15,-0.6,2.95,-1.6],['s',0.45,-1,0.5,-1.25],['s',0,-1,-2,-3.9],['l',-1.5,0],['z']],w:5,h:10}, 'scripts.mordent':{d:[['M',-0.21,-4.95],['c',0.27,-0.15,0.63,0.00,0.75,0.27],['c',0.06,0.12,0.06,0.24,0.06,1.44],['l',0.00,1.29],['l',0.57,-0.84],['c',0.51,-0.75,0.57,-0.84,0.69,-0.90],['c',0.06,-0.03,0.18,-0.06,0.24,-0.06],['c',0.30,0.00,0.27,-0.03,1.89,1.95],['l',1.53,1.83],['l',0.48,-0.69],['c',0.51,-0.78,0.54,-0.84,0.69,-0.90],['c',0.42,-0.18,0.87,0.15,0.81,0.60],['c',-0.03,0.12,-0.30,0.51,-1.50,2.37],['c',-1.38,2.07,-1.50,2.22,-1.62,2.28],['c',-0.06,0.03,-0.18,0.06,-0.24,0.06],['c',-0.30,0.00,-0.27,0.03,-1.83,-1.89],['c',-0.81,-0.99,-1.50,-1.80,-1.53,-1.86],['c',-0.06,-0.03,-0.06,-0.03,-0.12,0.03],['c',-0.06,0.06,-0.06,0.15,-0.06,2.28],['c',0.00,1.95,0.00,2.25,-0.06,2.34],['c',-0.18,0.45,-0.81,0.48,-1.05,0.03],['c',-0.03,-0.06,-0.06,-0.24,-0.06,-1.41],['l',0.00,-1.35],['l',-0.57,0.84],['c',-0.54,0.78,-0.60,0.87,-0.72,0.93],['c',-0.06,0.03,-0.18,0.06,-0.24,0.06],['c',-0.30,0.00,-0.27,0.03,-1.89,-1.95],['l',-1.53,-1.83],['l',-0.48,0.69],['c',-0.51,0.78,-0.54,0.84,-0.69,0.90],['c',-0.42,0.18,-0.87,-0.15,-0.81,-0.60],['c',0.03,-0.12,0.30,-0.51,1.50,-2.37],['c',1.38,-2.07,1.50,-2.22,1.62,-2.28],['c',0.06,-0.03,0.18,-0.06,0.24,-0.06],['c',0.30,0.00,0.27,-0.03,1.89,1.95],['l',1.53,1.83],['c',0.03,0.00,0.06,-0.06,0.09,-0.09],['c',0.06,-0.12,0.06,-0.15,0.06,-2.28],['c',0.00,-1.92,0.00,-2.22,0.06,-2.31],['c',0.06,-0.15,0.15,-0.24,0.30,-0.30],['z']],w:15.011,h:10.012}, 'flags.u8th':{d:[['M',-0.42,3.75],['l',0.00,-3.75],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,0.18],['c',0.00,0.30,0.06,0.84,0.12,1.23],['c',0.24,1.53,0.90,3.12,2.13,5.16],['l',0.99,1.59],['c',0.87,1.44,1.38,2.34,1.77,3.09],['c',0.81,1.68,1.20,3.06,1.26,4.53],['c',0.03,1.53,-0.21,3.27,-0.75,5.01],['c',-0.21,0.69,-0.51,1.50,-0.60,1.59],['c',-0.09,0.12,-0.27,0.21,-0.42,0.21],['c',-0.15,0.00,-0.42,-0.12,-0.51,-0.21],['c',-0.15,-0.18,-0.18,-0.42,-0.09,-0.66],['c',0.15,-0.33,0.45,-1.20,0.57,-1.62],['c',0.42,-1.38,0.60,-2.58,0.60,-3.90],['c',0.00,-0.66,0.00,-0.81,-0.06,-1.11],['c',-0.39,-2.07,-1.80,-4.26,-4.59,-7.14],['l',-0.42,-0.45],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-3.75],['z']],w:6.692,h:22.59}, 'flags.u16th':{d:[['M',-0.42,7.50],['l',0.00,-7.50],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,0.39],['c',0.06,1.08,0.39,2.19,0.99,3.39],['c',0.45,0.90,0.87,1.59,1.95,3.12],['c',1.29,1.86,1.77,2.64,2.22,3.57],['c',0.45,0.93,0.72,1.80,0.87,2.64],['c',0.06,0.51,0.06,1.50,0.00,1.92],['c',-0.12,0.60,-0.30,1.20,-0.54,1.71],['l',-0.09,0.24],['l',0.18,0.45],['c',0.51,1.20,0.72,2.22,0.69,3.42],['c',-0.06,1.53,-0.39,3.03,-0.99,4.53],['c',-0.30,0.75,-0.36,0.81,-0.57,0.90],['c',-0.15,0.09,-0.33,0.06,-0.48,0.00],['c',-0.18,-0.09,-0.27,-0.18,-0.33,-0.33],['c',-0.09,-0.18,-0.06,-0.30,0.12,-0.75],['c',0.66,-1.41,1.02,-2.88,1.08,-4.32],['c',0.00,-0.60,-0.03,-1.05,-0.18,-1.59],['c',-0.30,-1.20,-0.99,-2.40,-2.25,-3.87],['c',-0.42,-0.48,-1.53,-1.62,-2.19,-2.22],['l',-0.45,-0.42],['l',-0.03,1.11],['l',0.00,1.11],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-7.50],['z'],['m',1.65,0.09],['c',-0.30,-0.30,-0.69,-0.72,-0.90,-0.87],['l',-0.33,-0.33],['l',0.00,0.15],['c',0.00,0.30,0.06,0.81,0.15,1.26],['c',0.27,1.29,0.87,2.61,2.04,4.29],['c',0.15,0.24,0.60,0.87,0.96,1.38],['l',1.08,1.53],['l',0.42,0.63],['c',0.03,0.00,0.12,-0.36,0.21,-0.72],['c',0.06,-0.33,0.06,-1.20,0.00,-1.62],['c',-0.33,-1.71,-1.44,-3.48,-3.63,-5.70],['z']],w:6.693,h:26.337}, 'flags.u32nd':{d:[['M',-0.42,11.25],['l',0.00,-11.25],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,0.36],['c',0.09,1.68,0.69,3.27,2.07,5.46],['l',0.87,1.35],['c',1.02,1.62,1.47,2.37,1.86,3.18],['c',0.48,1.02,0.78,1.92,0.93,2.88],['c',0.06,0.48,0.06,1.50,0.00,1.89],['c',-0.09,0.42,-0.21,0.87,-0.36,1.26],['l',-0.12,0.30],['l',0.15,0.39],['c',0.69,1.56,0.84,2.88,0.54,4.38],['c',-0.09,0.45,-0.27,1.08,-0.45,1.47],['l',-0.12,0.24],['l',0.18,0.36],['c',0.33,0.72,0.57,1.56,0.69,2.34],['c',0.12,1.02,-0.06,2.52,-0.42,3.84],['c',-0.27,0.93,-0.75,2.13,-0.93,2.31],['c',-0.18,0.15,-0.45,0.18,-0.66,0.09],['c',-0.18,-0.09,-0.27,-0.18,-0.33,-0.33],['c',-0.09,-0.18,-0.06,-0.30,0.06,-0.60],['c',0.21,-0.36,0.42,-0.90,0.57,-1.38],['c',0.51,-1.41,0.69,-3.06,0.48,-4.08],['c',-0.15,-0.81,-0.57,-1.68,-1.20,-2.55],['c',-0.72,-0.99,-1.83,-2.13,-3.30,-3.33],['l',-0.48,-0.42],['l',-0.03,1.53],['l',0.00,1.56],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-11.25],['z'],['m',1.26,-3.96],['c',-0.27,-0.30,-0.54,-0.60,-0.66,-0.72],['l',-0.18,-0.21],['l',0.00,0.42],['c',0.06,0.87,0.24,1.74,0.66,2.67],['c',0.36,0.87,0.96,1.86,1.92,3.18],['c',0.21,0.33,0.63,0.87,0.87,1.23],['c',0.27,0.39,0.60,0.84,0.75,1.08],['l',0.27,0.39],['l',0.03,-0.12],['c',0.12,-0.45,0.15,-1.05,0.09,-1.59],['c',-0.27,-1.86,-1.38,-3.78,-3.75,-6.33],['z'],['m',-0.27,6.09],['c',-0.27,-0.21,-0.48,-0.42,-0.51,-0.45],['c',-0.06,-0.03,-0.06,-0.03,-0.06,0.21],['c',0.00,0.90,0.30,2.04,0.81,3.09],['c',0.48,1.02,0.96,1.77,2.37,3.63],['c',0.60,0.78,1.05,1.44,1.29,1.77],['c',0.06,0.12,0.15,0.21,0.15,0.18],['c',0.03,-0.03,0.18,-0.57,0.24,-0.87],['c',0.06,-0.45,0.06,-1.32,-0.03,-1.74],['c',-0.09,-0.48,-0.24,-0.90,-0.51,-1.44],['c',-0.66,-1.35,-1.83,-2.70,-3.75,-4.38],['z']],w:6.697,h:32.145}, 'flags.u64th':{d:[['M',-0.42,15.00],['l',0.00,-15.00],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,0.36],['c',0.06,1.20,0.39,2.37,1.02,3.66],['c',0.39,0.81,0.84,1.56,1.80,3.09],['c',0.81,1.26,1.05,1.68,1.35,2.22],['c',0.87,1.50,1.35,2.79,1.56,4.08],['c',0.06,0.54,0.06,1.56,-0.03,2.04],['c',-0.09,0.48,-0.21,0.99,-0.36,1.35],['l',-0.12,0.27],['l',0.12,0.27],['c',0.09,0.15,0.21,0.45,0.27,0.66],['c',0.69,1.89,0.63,3.66,-0.18,5.46],['l',-0.18,0.39],['l',0.15,0.33],['c',0.30,0.66,0.51,1.44,0.63,2.10],['c',0.06,0.48,0.06,1.35,0.00,1.71],['c',-0.15,0.57,-0.42,1.20,-0.78,1.68],['l',-0.21,0.27],['l',0.18,0.33],['c',0.57,1.05,0.93,2.13,1.02,3.18],['c',0.06,0.72,0.00,1.83,-0.21,2.79],['c',-0.18,1.02,-0.63,2.34,-1.02,3.09],['c',-0.15,0.33,-0.48,0.45,-0.78,0.30],['c',-0.18,-0.09,-0.27,-0.18,-0.33,-0.33],['c',-0.09,-0.18,-0.06,-0.30,0.03,-0.54],['c',0.75,-1.50,1.23,-3.45,1.17,-4.89],['c',-0.06,-1.02,-0.42,-2.01,-1.17,-3.15],['c',-0.48,-0.72,-1.02,-1.35,-1.89,-2.22],['c',-0.57,-0.57,-1.56,-1.50,-1.92,-1.77],['l',-0.12,-0.09],['l',0.00,1.68],['l',0.00,1.68],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-15.00],['z'],['m',0.93,-8.07],['c',-0.27,-0.30,-0.48,-0.54,-0.51,-0.54],['c',0.00,0.00,0.00,0.69,0.03,1.02],['c',0.15,1.47,0.75,2.94,2.04,4.83],['l',1.08,1.53],['c',0.39,0.57,0.84,1.20,0.99,1.44],['c',0.15,0.24,0.30,0.45,0.30,0.45],['c',0.00,0.00,0.03,-0.09,0.06,-0.21],['c',0.36,-1.59,-0.15,-3.33,-1.47,-5.40],['c',-0.63,-0.93,-1.35,-1.83,-2.52,-3.12],['z'],['m',0.06,6.72],['c',-0.24,-0.21,-0.48,-0.42,-0.51,-0.45],['l',-0.06,-0.06],['l',0.00,0.33],['c',0.00,1.20,0.30,2.34,0.93,3.60],['c',0.45,0.90,0.96,1.68,2.25,3.51],['c',0.39,0.54,0.84,1.17,1.02,1.44],['c',0.21,0.33,0.33,0.51,0.33,0.48],['c',0.06,-0.09,0.21,-0.63,0.30,-0.99],['c',0.06,-0.33,0.06,-0.45,0.06,-0.96],['c',0.00,-0.60,-0.03,-0.84,-0.18,-1.35],['c',-0.30,-1.08,-1.02,-2.28,-2.13,-3.57],['c',-0.39,-0.45,-1.44,-1.47,-2.01,-1.98],['z'],['m',0.00,6.72],['c',-0.24,-0.21,-0.48,-0.39,-0.51,-0.42],['l',-0.06,-0.06],['l',0.00,0.33],['c',0.00,1.41,0.45,2.82,1.38,4.35],['c',0.42,0.72,0.72,1.14,1.86,2.73],['c',0.36,0.45,0.75,0.99,0.87,1.20],['c',0.15,0.21,0.30,0.36,0.30,0.36],['c',0.06,0.00,0.30,-0.48,0.39,-0.75],['c',0.09,-0.36,0.12,-0.63,0.12,-1.05],['c',-0.06,-1.05,-0.45,-2.04,-1.20,-3.18],['c',-0.57,-0.87,-1.11,-1.53,-2.07,-2.49],['c',-0.36,-0.33,-0.84,-0.78,-1.08,-1.02],['z']],w:6.682,h:39.694}, 'flags.d8th':{d:[['M',5.67,-21.63],['c',0.24,-0.12,0.54,-0.06,0.69,0.15],['c',0.06,0.06,0.21,0.36,0.39,0.66],['c',0.84,1.77,1.26,3.36,1.32,5.10],['c',0.03,1.29,-0.21,2.37,-0.81,3.63],['c',-0.60,1.23,-1.26,2.13,-3.21,4.38],['c',-1.35,1.53,-1.86,2.19,-2.40,2.97],['c',-0.63,0.93,-1.11,1.92,-1.38,2.79],['c',-0.15,0.54,-0.27,1.35,-0.27,1.80],['l',0.00,0.15],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-3.75],['l',0.00,-3.75],['l',0.21,0.00],['l',0.21,0.00],['l',0.48,-0.30],['c',1.83,-1.11,3.12,-2.10,4.17,-3.12],['c',0.78,-0.81,1.32,-1.53,1.71,-2.31],['c',0.45,-0.93,0.60,-1.74,0.51,-2.88],['c',-0.12,-1.56,-0.63,-3.18,-1.47,-4.68],['c',-0.12,-0.21,-0.15,-0.33,-0.06,-0.51],['c',0.06,-0.15,0.15,-0.24,0.33,-0.33],['z']],w:8.492,h:21.691}, 'flags.ugrace':{d:[['M',6.03,6.93],['c',0.15,-0.09,0.33,-0.06,0.51,0.00],['c',0.15,0.09,0.21,0.15,0.30,0.33],['c',0.09,0.18,0.06,0.39,-0.03,0.54],['c',-0.06,0.15,-10.89,8.88,-11.07,8.97],['c',-0.15,0.09,-0.33,0.06,-0.48,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.09,-0.18,-0.06,-0.39,0.03,-0.54],['c',0.06,-0.15,10.89,-8.88,11.07,-8.97],['z']],w:12.019,h:9.954}, 'flags.dgrace':{d:[['M',-6.06,-15.93],['c',0.18,-0.09,0.33,-0.12,0.48,-0.06],['c',0.18,0.09,14.01,8.04,14.10,8.10],['c',0.12,0.12,0.18,0.33,0.18,0.51],['c',-0.03,0.21,-0.15,0.39,-0.36,0.48],['c',-0.18,0.09,-0.33,0.12,-0.48,0.06],['c',-0.18,-0.09,-14.01,-8.04,-14.10,-8.10],['c',-0.12,-0.12,-0.18,-0.33,-0.18,-0.51],['c',0.03,-0.21,0.15,-0.39,0.36,-0.48],['z']],w:15.12,h:9.212}, 'flags.d16th':{d:[['M',6.84,-22.53],['c',0.27,-0.12,0.57,-0.06,0.72,0.15],['c',0.15,0.15,0.33,0.87,0.45,1.56],['c',0.06,0.33,0.06,1.35,0.00,1.65],['c',-0.06,0.33,-0.15,0.78,-0.27,1.11],['c',-0.12,0.33,-0.45,0.96,-0.66,1.32],['l',-0.18,0.27],['l',0.09,0.18],['c',0.48,1.02,0.72,2.25,0.69,3.30],['c',-0.06,1.23,-0.42,2.28,-1.26,3.45],['c',-0.57,0.87,-0.99,1.32,-3.00,3.39],['c',-1.56,1.56,-2.22,2.40,-2.76,3.45],['c',-0.42,0.84,-0.66,1.80,-0.66,2.55],['l',0.00,0.15],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-7.50],['l',0.00,-7.50],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,1.14],['l',0.00,1.11],['l',0.27,-0.15],['c',1.11,-0.57,1.77,-0.99,2.52,-1.47],['c',2.37,-1.56,3.69,-3.15,4.05,-4.83],['c',0.03,-0.18,0.03,-0.39,0.03,-0.78],['c',0.00,-0.60,-0.03,-0.93,-0.24,-1.50],['c',-0.06,-0.18,-0.12,-0.39,-0.15,-0.45],['c',-0.03,-0.24,0.12,-0.48,0.36,-0.60],['z'],['m',-0.63,7.50],['c',-0.06,-0.18,-0.15,-0.36,-0.15,-0.36],['c',-0.03,0.00,-0.03,0.03,-0.06,0.06],['c',-0.06,0.12,-0.96,1.02,-1.95,1.98],['c',-0.63,0.57,-1.26,1.17,-1.44,1.35],['c',-1.53,1.62,-2.28,2.85,-2.55,4.32],['c',-0.03,0.18,-0.03,0.54,-0.06,0.99],['l',0.00,0.69],['l',0.18,-0.09],['c',0.93,-0.54,2.10,-1.29,2.82,-1.83],['c',0.69,-0.51,1.02,-0.81,1.53,-1.29],['c',1.86,-1.89,2.37,-3.66,1.68,-5.82],['z']],w:8.475,h:22.591}, 'flags.d32nd':{d:[['M',6.84,-29.13],['c',0.27,-0.12,0.57,-0.06,0.72,0.15],['c',0.12,0.12,0.27,0.63,0.36,1.11],['c',0.33,1.59,0.06,3.06,-0.81,4.47],['l',-0.18,0.27],['l',0.09,0.15],['c',0.12,0.24,0.33,0.69,0.45,1.05],['c',0.63,1.83,0.45,3.57,-0.57,5.22],['l',-0.18,0.30],['l',0.15,0.27],['c',0.42,0.87,0.60,1.71,0.57,2.61],['c',-0.06,1.29,-0.48,2.46,-1.35,3.78],['c',-0.54,0.81,-0.93,1.29,-2.46,3.00],['c',-0.51,0.54,-1.05,1.17,-1.26,1.41],['c',-1.56,1.86,-2.25,3.36,-2.37,5.01],['l',0.00,0.33],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-11.25],['l',0.00,-11.25],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,1.35],['l',0.03,1.35],['l',0.78,-0.39],['c',1.38,-0.69,2.34,-1.26,3.24,-1.92],['c',1.38,-1.02,2.28,-2.13,2.64,-3.21],['c',0.15,-0.48,0.18,-0.72,0.18,-1.29],['c',0.00,-0.57,-0.06,-0.90,-0.24,-1.47],['c',-0.06,-0.18,-0.12,-0.39,-0.15,-0.45],['c',-0.03,-0.24,0.12,-0.48,0.36,-0.60],['z'],['m',-0.63,7.20],['c',-0.09,-0.18,-0.12,-0.21,-0.12,-0.15],['c',-0.03,0.09,-1.02,1.08,-2.04,2.04],['c',-1.17,1.08,-1.65,1.56,-2.07,2.04],['c',-0.84,0.96,-1.38,1.86,-1.68,2.76],['c',-0.21,0.57,-0.27,0.99,-0.30,1.65],['l',0.00,0.54],['l',0.66,-0.33],['c',3.57,-1.86,5.49,-3.69,5.94,-5.70],['c',0.06,-0.39,0.06,-1.20,-0.03,-1.65],['c',-0.06,-0.39,-0.24,-0.90,-0.36,-1.20],['z'],['m',-0.06,7.20],['c',-0.06,-0.15,-0.12,-0.33,-0.15,-0.45],['l',-0.06,-0.18],['l',-0.18,0.21],['l',-1.83,1.83],['c',-0.87,0.90,-1.77,1.80,-1.95,2.01],['c',-1.08,1.29,-1.62,2.31,-1.89,3.51],['c',-0.06,0.30,-0.06,0.51,-0.09,0.93],['l',0.00,0.57],['l',0.09,-0.06],['c',0.75,-0.45,1.89,-1.26,2.52,-1.74],['c',0.81,-0.66,1.74,-1.53,2.22,-2.16],['c',1.26,-1.53,1.68,-3.06,1.32,-4.47],['z']],w:8.385,h:29.191}, 'flags.d64th':{d:[['M',7.08,-32.88],['c',0.30,-0.12,0.66,-0.03,0.78,0.24],['c',0.18,0.33,0.27,2.10,0.15,2.64],['c',-0.09,0.39,-0.21,0.78,-0.39,1.08],['l',-0.15,0.30],['l',0.09,0.27],['c',0.03,0.12,0.09,0.45,0.12,0.69],['c',0.27,1.44,0.18,2.55,-0.30,3.60],['l',-0.12,0.33],['l',0.06,0.42],['c',0.27,1.35,0.33,2.82,0.21,3.63],['c',-0.12,0.60,-0.30,1.23,-0.57,1.80],['l',-0.15,0.27],['l',0.03,0.42],['c',0.06,1.02,0.06,2.70,0.03,3.06],['c',-0.15,1.47,-0.66,2.76,-1.74,4.41],['c',-0.45,0.69,-0.75,1.11,-1.74,2.37],['c',-1.05,1.38,-1.50,1.98,-1.95,2.73],['c',-0.93,1.50,-1.38,2.82,-1.44,4.20],['l',0.00,0.42],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-15.00],['l',0.00,-15.00],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,1.86],['l',0.00,1.89],['c',0.00,0.00,0.21,-0.03,0.45,-0.09],['c',2.22,-0.39,4.08,-1.11,5.19,-2.01],['c',0.63,-0.54,1.02,-1.14,1.20,-1.80],['c',0.06,-0.30,0.06,-1.14,-0.03,-1.65],['c',-0.03,-0.18,-0.06,-0.39,-0.09,-0.48],['c',-0.03,-0.24,0.12,-0.48,0.36,-0.60],['z'],['m',-0.45,6.15],['c',-0.03,-0.18,-0.06,-0.42,-0.06,-0.54],['l',-0.03,-0.18],['l',-0.33,0.30],['c',-0.42,0.36,-0.87,0.72,-1.68,1.29],['c',-1.98,1.38,-2.25,1.59,-2.85,2.16],['c',-0.75,0.69,-1.23,1.44,-1.47,2.19],['c',-0.15,0.45,-0.18,0.63,-0.21,1.35],['l',0.00,0.66],['l',0.39,-0.18],['c',1.83,-0.90,3.45,-1.95,4.47,-2.91],['c',0.93,-0.90,1.53,-1.83,1.74,-2.82],['c',0.06,-0.33,0.06,-0.87,0.03,-1.32],['z'],['m',-0.27,4.86],['c',-0.03,-0.21,-0.06,-0.36,-0.06,-0.36],['c',0.00,-0.03,-0.12,0.09,-0.24,0.24],['c',-0.39,0.48,-0.99,1.08,-2.16,2.19],['c',-1.47,1.38,-1.92,1.83,-2.46,2.49],['c',-0.66,0.87,-1.08,1.74,-1.29,2.58],['c',-0.09,0.42,-0.15,0.87,-0.15,1.44],['l',0.00,0.54],['l',0.48,-0.33],['c',1.50,-1.02,2.58,-1.89,3.51,-2.82],['c',1.47,-1.47,2.25,-2.85,2.40,-4.26],['c',0.03,-0.39,0.03,-1.17,-0.03,-1.71],['z'],['m',-0.66,7.68],['c',0.03,-0.15,0.03,-0.60,0.03,-0.99],['l',0.00,-0.72],['l',-0.27,0.33],['l',-1.74,1.98],['c',-1.77,1.92,-2.43,2.76,-2.97,3.90],['c',-0.51,1.02,-0.72,1.77,-0.75,2.91],['c',0.00,0.63,0.00,0.63,0.06,0.60],['c',0.03,-0.03,0.30,-0.27,0.63,-0.54],['c',0.66,-0.60,1.86,-1.80,2.31,-2.31],['c',1.65,-1.89,2.52,-3.54,2.70,-5.16],['z']],w:8.485,h:32.932}, 'clefs.C':{d:[['M',0.06,-14.94],['l',0.09,-0.06],['l',1.92,0.00],['l',1.92,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,14.85],['l',0.00,14.82],['l',-0.06,0.09],['l',-0.09,0.06],['l',-1.92,0.00],['l',-1.92,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-14.82],['l',0.00,-14.85],['z'],['m',5.37,0.00],['c',0.09,-0.06,0.09,-0.06,0.57,-0.06],['c',0.45,0.00,0.45,0.00,0.54,0.06],['l',0.06,0.09],['l',0.00,7.14],['l',0.00,7.11],['l',0.09,-0.06],['c',0.18,-0.18,0.72,-0.84,0.96,-1.20],['c',0.30,-0.45,0.66,-1.17,0.84,-1.65],['c',0.36,-0.90,0.57,-1.83,0.60,-2.79],['c',0.03,-0.48,0.03,-0.54,0.09,-0.63],['c',0.12,-0.18,0.36,-0.21,0.54,-0.12],['c',0.18,0.09,0.21,0.15,0.24,0.66],['c',0.06,0.87,0.21,1.56,0.57,2.22],['c',0.51,1.02,1.26,1.68,2.22,1.92],['c',0.21,0.06,0.33,0.06,0.78,0.06],['c',0.45,0.00,0.57,0.00,0.84,-0.06],['c',0.45,-0.12,0.81,-0.33,1.08,-0.60],['c',0.57,-0.57,0.87,-1.41,0.99,-2.88],['c',0.06,-0.54,0.06,-3.00,0.00,-3.57],['c',-0.21,-2.58,-0.84,-3.87,-2.16,-4.50],['c',-0.48,-0.21,-1.17,-0.36,-1.77,-0.36],['c',-0.69,0.00,-1.29,0.27,-1.50,0.72],['c',-0.06,0.15,-0.06,0.21,-0.06,0.42],['c',0.00,0.24,0.00,0.30,0.06,0.45],['c',0.12,0.24,0.24,0.39,0.63,0.66],['c',0.42,0.30,0.57,0.48,0.69,0.72],['c',0.06,0.15,0.06,0.21,0.06,0.48],['c',0.00,0.39,-0.03,0.63,-0.21,0.96],['c',-0.30,0.60,-0.87,1.08,-1.50,1.26],['c',-0.27,0.06,-0.87,0.06,-1.14,0.00],['c',-0.78,-0.24,-1.44,-0.87,-1.65,-1.68],['c',-0.12,-0.42,-0.09,-1.17,0.09,-1.71],['c',0.51,-1.65,1.98,-2.82,3.81,-3.09],['c',0.84,-0.09,2.46,0.03,3.51,0.27],['c',2.22,0.57,3.69,1.80,4.44,3.75],['c',0.36,0.93,0.57,2.13,0.57,3.36],['c',0.00,1.44,-0.48,2.73,-1.38,3.81],['c',-1.26,1.50,-3.27,2.43,-5.28,2.43],['c',-0.48,0.00,-0.51,0.00,-0.75,-0.09],['c',-0.15,-0.03,-0.48,-0.21,-0.78,-0.36],['c',-0.69,-0.36,-0.87,-0.42,-1.26,-0.42],['c',-0.27,0.00,-0.30,0.00,-0.51,0.09],['c',-0.57,0.30,-0.81,0.90,-0.81,2.10],['c',0.00,1.23,0.24,1.83,0.81,2.13],['c',0.21,0.09,0.24,0.09,0.51,0.09],['c',0.39,0.00,0.57,-0.06,1.26,-0.42],['c',0.30,-0.15,0.63,-0.33,0.78,-0.36],['c',0.24,-0.09,0.27,-0.09,0.75,-0.09],['c',2.01,0.00,4.02,0.93,5.28,2.40],['c',0.90,1.11,1.38,2.40,1.38,3.84],['c',0.00,1.50,-0.30,2.88,-0.84,3.96],['c',-0.78,1.59,-2.19,2.64,-4.17,3.15],['c',-1.05,0.24,-2.67,0.36,-3.51,0.27],['c',-1.83,-0.27,-3.30,-1.44,-3.81,-3.09],['c',-0.18,-0.54,-0.21,-1.29,-0.09,-1.74],['c',0.15,-0.60,0.63,-1.20,1.23,-1.47],['c',0.36,-0.18,0.57,-0.21,0.99,-0.21],['c',0.42,0.00,0.63,0.03,1.02,0.21],['c',0.42,0.21,0.84,0.63,1.05,1.05],['c',0.18,0.36,0.21,0.60,0.21,0.96],['c',0.00,0.30,0.00,0.36,-0.06,0.51],['c',-0.12,0.24,-0.27,0.42,-0.69,0.72],['c',-0.57,0.42,-0.69,0.63,-0.69,1.08],['c',0.00,0.24,0.00,0.30,0.06,0.45],['c',0.12,0.21,0.30,0.39,0.57,0.54],['c',0.42,0.18,0.87,0.21,1.53,0.15],['c',1.08,-0.15,1.80,-0.57,2.34,-1.32],['c',0.54,-0.75,0.84,-1.83,0.99,-3.51],['c',0.06,-0.57,0.06,-3.03,0.00,-3.57],['c',-0.12,-1.47,-0.42,-2.31,-0.99,-2.88],['c',-0.27,-0.27,-0.63,-0.48,-1.08,-0.60],['c',-0.27,-0.06,-0.39,-0.06,-0.84,-0.06],['c',-0.45,0.00,-0.57,0.00,-0.78,0.06],['c',-1.14,0.27,-2.01,1.17,-2.46,2.49],['c',-0.21,0.57,-0.30,0.99,-0.33,1.65],['c',-0.03,0.51,-0.06,0.57,-0.24,0.66],['c',-0.12,0.06,-0.27,0.06,-0.39,0.00],['c',-0.21,-0.09,-0.21,-0.15,-0.24,-0.75],['c',-0.09,-1.92,-0.78,-3.72,-2.01,-5.19],['c',-0.18,-0.21,-0.36,-0.42,-0.39,-0.45],['l',-0.09,-0.06],['l',0.00,7.11],['l',0.00,7.14],['l',-0.06,0.09],['c',-0.09,0.06,-0.09,0.06,-0.54,0.06],['c',-0.48,0.00,-0.48,0.00,-0.57,-0.06],['l',-0.06,-0.09],['l',0.00,-14.82],['l',0.00,-14.85],['z']],w:20.31,h:29.97}, 'clefs.F':{d:[['M',6.30,-7.80],['c',0.36,-0.03,1.65,0.00,2.13,0.03],['c',3.60,0.42,6.03,2.10,6.93,4.86],['c',0.27,0.84,0.36,1.50,0.36,2.58],['c',0.00,0.90,-0.03,1.35,-0.18,2.16],['c',-0.78,3.78,-3.54,7.08,-8.37,9.96],['c',-1.74,1.05,-3.87,2.13,-6.18,3.12],['c',-0.39,0.18,-0.75,0.33,-0.81,0.36],['c',-0.06,0.03,-0.15,0.06,-0.18,0.06],['c',-0.15,0.00,-0.33,-0.18,-0.33,-0.33],['c',0.00,-0.15,0.06,-0.21,0.51,-0.48],['c',3.00,-1.77,5.13,-3.21,6.84,-4.74],['c',0.51,-0.45,1.59,-1.50,1.95,-1.95],['c',1.89,-2.19,2.88,-4.32,3.15,-6.78],['c',0.06,-0.42,0.06,-1.77,0.00,-2.19],['c',-0.24,-2.01,-0.93,-3.63,-2.04,-4.71],['c',-0.63,-0.63,-1.29,-1.02,-2.07,-1.20],['c',-1.62,-0.39,-3.36,0.15,-4.56,1.44],['c',-0.54,0.60,-1.05,1.47,-1.32,2.22],['l',-0.09,0.21],['l',0.24,-0.12],['c',0.39,-0.21,0.63,-0.24,1.11,-0.24],['c',0.30,0.00,0.45,0.00,0.66,0.06],['c',1.92,0.48,2.85,2.55,1.95,4.38],['c',-0.45,0.99,-1.41,1.62,-2.46,1.71],['c',-1.47,0.09,-2.91,-0.87,-3.39,-2.25],['c',-0.18,-0.57,-0.21,-1.32,-0.03,-2.28],['c',0.39,-2.25,1.83,-4.20,3.81,-5.19],['c',0.69,-0.36,1.59,-0.60,2.37,-0.69],['z'],['m',11.58,2.52],['c',0.84,-0.21,1.71,0.30,1.89,1.14],['c',0.30,1.17,-0.72,2.19,-1.89,1.89],['c',-0.99,-0.21,-1.50,-1.32,-1.02,-2.25],['c',0.18,-0.39,0.60,-0.69,1.02,-0.78],['z'],['m',0.00,7.50],['c',0.84,-0.21,1.71,0.30,1.89,1.14],['c',0.21,0.87,-0.30,1.71,-1.14,1.89],['c',-0.87,0.21,-1.71,-0.30,-1.89,-1.14],['c',-0.21,-0.84,0.30,-1.71,1.14,-1.89],['z']],w:20.153,h:23.142}, 'clefs.G':{d:[['M',9.69,-37.41],['c',0.09,-0.09,0.24,-0.06,0.36,0.00],['c',0.12,0.09,0.57,0.60,0.96,1.11],['c',1.77,2.34,3.21,5.85,3.57,8.73],['c',0.21,1.56,0.03,3.27,-0.45,4.86],['c',-0.69,2.31,-1.92,4.47,-4.23,7.44],['c',-0.30,0.39,-0.57,0.72,-0.60,0.75],['c',-0.03,0.06,0.00,0.15,0.18,0.78],['c',0.54,1.68,1.38,4.44,1.68,5.49],['l',0.09,0.42],['l',0.39,0.00],['c',1.47,0.09,2.76,0.51,3.96,1.29],['c',1.83,1.23,3.06,3.21,3.39,5.52],['c',0.09,0.45,0.12,1.29,0.06,1.74],['c',-0.09,1.02,-0.33,1.83,-0.75,2.73],['c',-0.84,1.71,-2.28,3.06,-4.02,3.72],['l',-0.33,0.12],['l',0.03,1.26],['c',0.00,1.74,-0.06,3.63,-0.21,4.62],['c',-0.45,3.06,-2.19,5.49,-4.47,6.21],['c',-0.57,0.18,-0.90,0.21,-1.59,0.21],['c',-0.69,0.00,-1.02,-0.03,-1.65,-0.21],['c',-1.14,-0.27,-2.13,-0.84,-2.94,-1.65],['c',-0.99,-0.99,-1.56,-2.16,-1.71,-3.54],['c',-0.09,-0.81,0.06,-1.53,0.45,-2.13],['c',0.63,-0.99,1.83,-1.56,3.00,-1.53],['c',1.50,0.09,2.64,1.32,2.73,2.94],['c',0.06,1.47,-0.93,2.70,-2.37,2.97],['c',-0.45,0.06,-0.84,0.03,-1.29,-0.09],['l',-0.21,-0.09],['l',0.09,0.12],['c',0.39,0.54,0.78,0.93,1.32,1.26],['c',1.35,0.87,3.06,1.02,4.35,0.36],['c',1.44,-0.72,2.52,-2.28,2.97,-4.35],['c',0.15,-0.66,0.24,-1.50,0.30,-3.03],['c',0.03,-0.84,0.03,-2.94,0.00,-3.00],['c',-0.03,0.00,-0.18,0.00,-0.36,0.03],['c',-0.66,0.12,-0.99,0.12,-1.83,0.12],['c',-1.05,0.00,-1.71,-0.06,-2.61,-0.30],['c',-4.02,-0.99,-7.11,-4.35,-7.80,-8.46],['c',-0.12,-0.66,-0.12,-0.99,-0.12,-1.83],['c',0.00,-0.84,0.00,-1.14,0.15,-1.92],['c',0.36,-2.28,1.41,-4.62,3.30,-7.29],['l',2.79,-3.60],['c',0.54,-0.66,0.96,-1.20,0.96,-1.23],['c',0.00,-0.03,-0.09,-0.33,-0.18,-0.69],['c',-0.96,-3.21,-1.41,-5.28,-1.59,-7.68],['c',-0.12,-1.38,-0.15,-3.09,-0.06,-3.96],['c',0.33,-2.67,1.38,-5.07,3.12,-7.08],['c',0.36,-0.42,0.99,-1.05,1.17,-1.14],['z'],['m',2.01,4.71],['c',-0.15,-0.30,-0.30,-0.54,-0.30,-0.54],['c',-0.03,0.00,-0.18,0.09,-0.30,0.21],['c',-2.40,1.74,-3.87,4.20,-4.26,7.11],['c',-0.06,0.54,-0.06,1.41,-0.03,1.89],['c',0.09,1.29,0.48,3.12,1.08,5.22],['c',0.15,0.42,0.24,0.78,0.24,0.81],['c',0.00,0.03,0.84,-1.11,1.23,-1.68],['c',1.89,-2.73,2.88,-5.07,3.15,-7.53],['c',0.09,-0.57,0.12,-1.74,0.06,-2.37],['c',-0.09,-1.23,-0.27,-1.92,-0.87,-3.12],['z'],['m',-2.94,20.70],['c',-0.21,-0.72,-0.39,-1.32,-0.42,-1.32],['c',0.00,0.00,-1.20,1.47,-1.86,2.37],['c',-2.79,3.63,-4.02,6.30,-4.35,9.30],['c',-0.03,0.21,-0.03,0.69,-0.03,1.08],['c',0.00,0.69,0.00,0.75,0.06,1.11],['c',0.12,0.54,0.27,0.99,0.51,1.47],['c',0.69,1.38,1.83,2.55,3.42,3.42],['c',0.96,0.54,2.07,0.90,3.21,1.08],['c',0.78,0.12,2.04,0.12,2.94,-0.03],['c',0.51,-0.06,0.45,-0.03,0.42,-0.30],['c',-0.24,-3.33,-0.72,-6.33,-1.62,-10.08],['c',-0.09,-0.39,-0.18,-0.75,-0.18,-0.78],['c',-0.03,-0.03,-0.42,0.00,-0.81,0.09],['c',-0.90,0.18,-1.65,0.57,-2.22,1.14],['c',-0.72,0.72,-1.08,1.65,-1.05,2.64],['c',0.06,0.96,0.48,1.83,1.23,2.58],['c',0.36,0.36,0.72,0.63,1.17,0.90],['c',0.33,0.18,0.36,0.21,0.42,0.33],['c',0.18,0.42,-0.18,0.90,-0.60,0.87],['c',-0.18,-0.03,-0.84,-0.36,-1.26,-0.63],['c',-0.78,-0.51,-1.38,-1.11,-1.86,-1.83],['c',-1.77,-2.70,-0.99,-6.42,1.71,-8.19],['c',0.30,-0.21,0.81,-0.48,1.17,-0.63],['c',0.30,-0.09,1.02,-0.30,1.14,-0.30],['c',0.06,0.00,0.09,0.00,0.09,-0.03],['c',0.03,-0.03,-0.51,-1.92,-1.23,-4.26],['z'],['m',3.78,7.41],['c',-0.18,-0.03,-0.36,-0.06,-0.39,-0.06],['c',-0.03,0.00,0.00,0.21,0.18,1.02],['c',0.75,3.18,1.26,6.30,1.50,9.09],['c',0.06,0.72,0.00,0.69,0.51,0.42],['c',0.78,-0.36,1.44,-0.96,1.98,-1.77],['c',1.08,-1.62,1.20,-3.69,0.30,-5.55],['c',-0.81,-1.62,-2.31,-2.79,-4.08,-3.15],['z']],w:19.051,h:57.057}, 'clefs.perc':{d:[['M',5.07,-7.44],['l',0.09,-0.06],['l',1.53,0.00],['l',1.53,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,7.35],['l',0.00,7.32],['l',-0.06,0.09],['l',-0.09,0.06],['l',-1.53,0.00],['l',-1.53,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-7.32],['l',0.00,-7.35],['z'],['m',6.63,0.00],['l',0.09,-0.06],['l',1.53,0.00],['l',1.53,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,7.35],['l',0.00,7.32],['l',-0.06,0.09],['l',-0.09,0.06],['l',-1.53,0.00],['l',-1.53,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-7.32],['l',0.00,-7.35],['z']],w:9.99,h:14.97}, 'timesig.common':{d:[['M',6.66,-7.83],['c',0.72,-0.06,1.41,-0.03,1.98,0.09],['c',1.20,0.27,2.34,0.96,3.09,1.92],['c',0.63,0.81,1.08,1.86,1.14,2.73],['c',0.06,1.02,-0.51,1.92,-1.44,2.22],['c',-0.24,0.09,-0.30,0.09,-0.63,0.09],['c',-0.33,0.00,-0.42,0.00,-0.63,-0.06],['c',-0.66,-0.24,-1.14,-0.63,-1.41,-1.20],['c',-0.15,-0.30,-0.21,-0.51,-0.24,-0.90],['c',-0.06,-1.08,0.57,-2.04,1.56,-2.37],['c',0.18,-0.06,0.27,-0.06,0.63,-0.06],['l',0.45,0.00],['c',0.06,0.03,0.09,0.03,0.09,0.00],['c',0.00,0.00,-0.09,-0.12,-0.24,-0.27],['c',-1.02,-1.11,-2.55,-1.68,-4.08,-1.50],['c',-1.29,0.15,-2.04,0.69,-2.40,1.74],['c',-0.36,0.93,-0.42,1.89,-0.42,5.37],['c',0.00,2.97,0.06,3.96,0.24,4.77],['c',0.24,1.08,0.63,1.68,1.41,2.07],['c',0.81,0.39,2.16,0.45,3.18,0.09],['c',1.29,-0.45,2.37,-1.53,3.03,-2.97],['c',0.15,-0.33,0.33,-0.87,0.39,-1.17],['c',0.09,-0.24,0.15,-0.36,0.30,-0.39],['c',0.21,-0.03,0.42,0.15,0.39,0.36],['c',-0.06,0.39,-0.42,1.38,-0.69,1.89],['c',-0.96,1.80,-2.49,2.94,-4.23,3.18],['c',-0.99,0.12,-2.58,-0.06,-3.63,-0.45],['c',-0.96,-0.36,-1.71,-0.84,-2.40,-1.50],['c',-1.11,-1.11,-1.80,-2.61,-2.04,-4.56],['c',-0.06,-0.60,-0.06,-2.01,0.00,-2.61],['c',0.24,-1.95,0.90,-3.45,2.01,-4.56],['c',0.69,-0.66,1.44,-1.11,2.37,-1.47],['c',0.63,-0.24,1.47,-0.42,2.22,-0.48],['z']],w:13.038,h:15.689}, 'timesig.cut':{d:[['M',6.24,-10.44],['c',0.09,-0.06,0.09,-0.06,0.48,-0.06],['c',0.36,0.00,0.36,0.00,0.45,0.06],['l',0.06,0.09],['l',0.00,1.23],['l',0.00,1.26],['l',0.27,0.00],['c',1.26,0.00,2.49,0.45,3.48,1.29],['c',1.05,0.87,1.80,2.28,1.89,3.48],['c',0.06,1.02,-0.51,1.92,-1.44,2.22],['c',-0.24,0.09,-0.30,0.09,-0.63,0.09],['c',-0.33,0.00,-0.42,0.00,-0.63,-0.06],['c',-0.66,-0.24,-1.14,-0.63,-1.41,-1.20],['c',-0.15,-0.30,-0.21,-0.51,-0.24,-0.90],['c',-0.06,-1.08,0.57,-2.04,1.56,-2.37],['c',0.18,-0.06,0.27,-0.06,0.63,-0.06],['l',0.45,0.00],['c',0.06,0.03,0.09,0.03,0.09,0.00],['c',0.00,-0.03,-0.45,-0.51,-0.66,-0.69],['c',-0.87,-0.69,-1.83,-1.05,-2.94,-1.11],['l',-0.42,0.00],['l',0.00,7.17],['l',0.00,7.14],['l',0.42,0.00],['c',0.69,-0.03,1.23,-0.18,1.86,-0.51],['c',1.05,-0.51,1.89,-1.47,2.46,-2.70],['c',0.15,-0.33,0.33,-0.87,0.39,-1.17],['c',0.09,-0.24,0.15,-0.36,0.30,-0.39],['c',0.21,-0.03,0.42,0.15,0.39,0.36],['c',-0.03,0.24,-0.21,0.78,-0.39,1.20],['c',-0.96,2.37,-2.94,3.90,-5.13,3.90],['l',-0.30,0.00],['l',0.00,1.26],['l',0.00,1.23],['l',-0.06,0.09],['c',-0.09,0.06,-0.09,0.06,-0.45,0.06],['c',-0.39,0.00,-0.39,0.00,-0.48,-0.06],['l',-0.06,-0.09],['l',0.00,-1.29],['l',0.00,-1.29],['l',-0.21,-0.03],['c',-1.23,-0.21,-2.31,-0.63,-3.21,-1.29],['c',-0.15,-0.09,-0.45,-0.36,-0.66,-0.57],['c',-1.11,-1.11,-1.80,-2.61,-2.04,-4.56],['c',-0.06,-0.60,-0.06,-2.01,0.00,-2.61],['c',0.24,-1.95,0.93,-3.45,2.04,-4.59],['c',0.42,-0.39,0.78,-0.66,1.26,-0.93],['c',0.75,-0.45,1.65,-0.75,2.61,-0.90],['l',0.21,-0.03],['l',0.00,-1.29],['l',0.00,-1.29],['z'],['m',-0.06,10.44],['c',0.00,-5.58,0.00,-6.99,-0.03,-6.99],['c',-0.15,0.00,-0.63,0.27,-0.87,0.45],['c',-0.45,0.36,-0.75,0.93,-0.93,1.77],['c',-0.18,0.81,-0.24,1.80,-0.24,4.74],['c',0.00,2.97,0.06,3.96,0.24,4.77],['c',0.24,1.08,0.66,1.68,1.41,2.07],['c',0.12,0.06,0.30,0.12,0.33,0.15],['l',0.09,0.00],['l',0.00,-6.96],['z']],w:13.038,h:20.97}, 'timesig.imperfectum':{d:[['M',13,-5],['a',8,8,0,1,0,0,10]],w:13.038,h:20.97}, 'timesig.imperfectum2':{d:[['M',13,-5],['a',8,8,0,1,0,0,10]],w:13.038,h:20.97}, 'timesig.perfectum':{d:[['M',13,-5],['a',8,8,0,1,0,0,10]],w:13.038,h:20.97}, 'timesig.perfectum2':{d:[['M',13,-5],['a',8,8,0,1,0,0,10]],w:13.038,h:20.97}, 'f':{d:[['M',9.93,-14.28],['c',1.53,-0.18,2.88,0.45,3.12,1.50],['c',0.12,0.51,0.00,1.32,-0.27,1.86],['c',-0.15,0.30,-0.42,0.57,-0.63,0.69],['c',-0.69,0.36,-1.56,0.03,-1.83,-0.69],['c',-0.09,-0.24,-0.09,-0.69,0.00,-0.87],['c',0.06,-0.12,0.21,-0.24,0.45,-0.42],['c',0.42,-0.24,0.57,-0.45,0.60,-0.72],['c',0.03,-0.33,-0.09,-0.39,-0.63,-0.42],['c',-0.30,0.00,-0.45,0.00,-0.60,0.03],['c',-0.81,0.21,-1.35,0.93,-1.74,2.46],['c',-0.06,0.27,-0.48,2.25,-0.48,2.31],['c',0.00,0.03,0.39,0.03,0.90,0.03],['c',0.72,0.00,0.90,0.00,0.99,0.06],['c',0.42,0.15,0.45,0.72,0.03,0.90],['c',-0.12,0.06,-0.24,0.06,-1.17,0.06],['l',-1.05,0.00],['l',-0.78,2.55],['c',-0.45,1.41,-0.87,2.79,-0.96,3.06],['c',-0.87,2.37,-2.37,4.74,-3.78,5.91],['c',-1.05,0.90,-2.04,1.23,-3.09,1.08],['c',-1.11,-0.18,-1.89,-0.78,-2.04,-1.59],['c',-0.12,-0.66,0.15,-1.71,0.54,-2.19],['c',0.69,-0.75,1.86,-0.54,2.22,0.39],['c',0.06,0.15,0.09,0.27,0.09,0.48],['c',0.00,0.24,-0.03,0.27,-0.12,0.42],['c',-0.03,0.09,-0.15,0.18,-0.27,0.27],['c',-0.09,0.06,-0.27,0.21,-0.36,0.27],['c',-0.24,0.18,-0.36,0.36,-0.39,0.60],['c',-0.03,0.33,0.09,0.39,0.63,0.42],['c',0.42,0.00,0.63,-0.03,0.90,-0.15],['c',0.60,-0.30,0.96,-0.96,1.38,-2.64],['c',0.09,-0.42,0.63,-2.55,1.17,-4.77],['l',1.02,-4.08],['c',0.00,-0.03,-0.36,-0.03,-0.81,-0.03],['c',-0.72,0.00,-0.81,0.00,-0.93,-0.06],['c',-0.42,-0.18,-0.39,-0.75,0.03,-0.90],['c',0.09,-0.06,0.27,-0.06,1.05,-0.06],['l',0.96,0.00],['l',0.00,-0.09],['c',0.06,-0.18,0.30,-0.72,0.51,-1.17],['c',1.20,-2.46,3.30,-4.23,5.34,-4.50],['z']],w:16.155,h:19.445}, 'm':{d:[['M',2.79,-8.91],['c',0.09,0.00,0.30,-0.03,0.45,-0.03],['c',0.24,0.03,0.30,0.03,0.45,0.12],['c',0.36,0.15,0.63,0.54,0.75,1.02],['l',0.03,0.21],['l',0.33,-0.30],['c',0.69,-0.69,1.38,-1.02,2.07,-1.02],['c',0.27,0.00,0.33,0.00,0.48,0.06],['c',0.21,0.09,0.48,0.36,0.63,0.60],['c',0.03,0.09,0.12,0.27,0.18,0.42],['c',0.03,0.15,0.09,0.27,0.12,0.27],['c',0.00,0.00,0.09,-0.09,0.18,-0.21],['c',0.33,-0.39,0.87,-0.81,1.29,-0.99],['c',0.78,-0.33,1.47,-0.21,2.01,0.33],['c',0.30,0.33,0.48,0.69,0.60,1.14],['c',0.09,0.42,0.06,0.54,-0.54,3.06],['c',-0.33,1.29,-0.57,2.40,-0.57,2.43],['c',0.00,0.12,0.09,0.21,0.21,0.21],['c',0.24,0.00,0.75,-0.30,1.20,-0.72],['c',0.45,-0.39,0.60,-0.45,0.78,-0.27],['c',0.18,0.18,0.09,0.36,-0.45,0.87],['c',-1.05,0.96,-1.83,1.47,-2.58,1.71],['c',-0.93,0.33,-1.53,0.21,-1.80,-0.33],['c',-0.06,-0.15,-0.06,-0.21,-0.06,-0.45],['c',0.00,-0.24,0.03,-0.48,0.60,-2.82],['c',0.42,-1.71,0.60,-2.64,0.63,-2.79],['c',0.03,-0.57,-0.30,-0.75,-0.84,-0.48],['c',-0.24,0.12,-0.54,0.39,-0.66,0.63],['c',-0.03,0.09,-0.42,1.38,-0.90,3.00],['c',-0.90,3.15,-0.84,3.00,-1.14,3.15],['l',-0.15,0.09],['l',-0.78,0.00],['c',-0.60,0.00,-0.78,0.00,-0.84,-0.06],['c',-0.09,-0.03,-0.18,-0.18,-0.18,-0.27],['c',0.00,-0.03,0.36,-1.38,0.84,-2.97],['c',0.57,-2.04,0.81,-2.97,0.84,-3.12],['c',0.03,-0.54,-0.30,-0.72,-0.84,-0.45],['c',-0.24,0.12,-0.57,0.42,-0.66,0.63],['c',-0.06,0.09,-0.51,1.44,-1.05,2.97],['c',-0.51,1.56,-0.99,2.85,-0.99,2.91],['c',-0.06,0.12,-0.21,0.24,-0.36,0.30],['c',-0.12,0.06,-0.21,0.06,-0.90,0.06],['c',-0.60,0.00,-0.78,0.00,-0.84,-0.06],['c',-0.09,-0.03,-0.18,-0.18,-0.18,-0.27],['c',0.00,-0.03,0.45,-1.38,0.99,-2.97],['c',1.05,-3.18,1.05,-3.18,0.93,-3.45],['c',-0.12,-0.27,-0.39,-0.30,-0.72,-0.15],['c',-0.54,0.27,-1.14,1.17,-1.56,2.40],['c',-0.06,0.15,-0.15,0.30,-0.18,0.36],['c',-0.21,0.21,-0.57,0.27,-0.72,0.09],['c',-0.09,-0.09,-0.06,-0.21,0.06,-0.63],['c',0.48,-1.26,1.26,-2.46,2.01,-3.21],['c',0.57,-0.54,1.20,-0.87,1.83,-1.02],['z']],w:14.687,h:9.126}, 'p':{d:[['M',1.92,-8.70],['c',0.27,-0.09,0.81,-0.06,1.11,0.03],['c',0.54,0.18,0.93,0.51,1.17,0.99],['c',0.09,0.15,0.15,0.33,0.18,0.36],['l',0.00,0.12],['l',0.30,-0.27],['c',0.66,-0.60,1.35,-1.02,2.13,-1.20],['c',0.21,-0.06,0.33,-0.06,0.78,-0.06],['c',0.45,0.00,0.51,0.00,0.84,0.09],['c',1.29,0.33,2.07,1.32,2.25,2.79],['c',0.09,0.81,-0.09,2.01,-0.45,2.79],['c',-0.54,1.26,-1.86,2.55,-3.18,3.03],['c',-0.45,0.18,-0.81,0.24,-1.29,0.24],['c',-0.69,-0.03,-1.35,-0.18,-1.86,-0.45],['c',-0.30,-0.15,-0.51,-0.18,-0.69,-0.09],['c',-0.09,0.03,-0.18,0.09,-0.18,0.12],['c',-0.09,0.12,-1.05,2.94,-1.05,3.06],['c',0.00,0.24,0.18,0.48,0.51,0.63],['c',0.18,0.06,0.54,0.15,0.75,0.15],['c',0.21,0.00,0.36,0.06,0.42,0.18],['c',0.12,0.18,0.06,0.42,-0.12,0.54],['c',-0.09,0.03,-0.15,0.03,-0.78,0.00],['c',-1.98,-0.15,-3.81,-0.15,-5.79,0.00],['c',-0.63,0.03,-0.69,0.03,-0.78,0.00],['c',-0.24,-0.15,-0.24,-0.57,0.03,-0.66],['c',0.06,-0.03,0.48,-0.09,0.99,-0.12],['c',0.87,-0.06,1.11,-0.09,1.35,-0.21],['c',0.18,-0.06,0.33,-0.18,0.39,-0.30],['c',0.06,-0.12,3.24,-9.42,3.27,-9.60],['c',0.06,-0.33,0.03,-0.57,-0.15,-0.69],['c',-0.09,-0.06,-0.12,-0.06,-0.30,-0.06],['c',-0.69,0.06,-1.53,1.02,-2.28,2.61],['c',-0.09,0.21,-0.21,0.45,-0.27,0.51],['c',-0.09,0.12,-0.33,0.24,-0.48,0.24],['c',-0.18,0.00,-0.36,-0.15,-0.36,-0.30],['c',0.00,-0.24,0.78,-1.83,1.26,-2.55],['c',0.72,-1.11,1.47,-1.74,2.28,-1.92],['z'],['m',5.37,1.47],['c',-0.27,-0.12,-0.75,-0.03,-1.14,0.21],['c',-0.75,0.48,-1.47,1.68,-1.89,3.15],['c',-0.45,1.47,-0.42,2.34,0.00,2.70],['c',0.45,0.39,1.26,0.21,1.83,-0.36],['c',0.51,-0.51,0.99,-1.68,1.38,-3.27],['c',0.30,-1.17,0.33,-1.74,0.15,-2.13],['c',-0.09,-0.15,-0.15,-0.21,-0.33,-0.30],['z']],w:14.689,h:13.127}, 'r':{d:[['M',6.33,-9.12],['c',0.27,-0.03,0.93,0.00,1.20,0.06],['c',0.84,0.21,1.23,0.81,1.02,1.53],['c',-0.24,0.75,-0.90,1.17,-1.56,0.96],['c',-0.33,-0.09,-0.51,-0.30,-0.66,-0.75],['c',-0.03,-0.12,-0.09,-0.24,-0.12,-0.30],['c',-0.09,-0.15,-0.30,-0.24,-0.48,-0.24],['c',-0.57,0.00,-1.38,0.54,-1.65,1.08],['c',-0.06,0.15,-0.33,1.17,-0.90,3.27],['c',-0.57,2.31,-0.81,3.12,-0.87,3.21],['c',-0.03,0.06,-0.12,0.15,-0.18,0.21],['l',-0.12,0.06],['l',-0.81,0.03],['c',-0.69,0.00,-0.81,0.00,-0.90,-0.03],['c',-0.09,-0.06,-0.18,-0.21,-0.18,-0.30],['c',0.00,-0.06,0.39,-1.62,0.90,-3.51],['c',0.84,-3.24,0.87,-3.45,0.87,-3.72],['c',0.00,-0.21,0.00,-0.27,-0.03,-0.36],['c',-0.12,-0.15,-0.21,-0.24,-0.42,-0.24],['c',-0.24,0.00,-0.45,0.15,-0.78,0.42],['c',-0.33,0.36,-0.45,0.54,-0.72,1.14],['c',-0.03,0.12,-0.21,0.24,-0.36,0.27],['c',-0.12,0.00,-0.15,0.00,-0.24,-0.06],['c',-0.18,-0.12,-0.18,-0.21,-0.06,-0.54],['c',0.21,-0.57,0.42,-0.93,0.78,-1.32],['c',0.54,-0.51,1.20,-0.81,1.95,-0.87],['c',0.81,-0.03,1.53,0.30,1.92,0.87],['l',0.12,0.18],['l',0.09,-0.09],['c',0.57,-0.45,1.41,-0.84,2.19,-0.96],['z']],w:9.41,h:9.132}, 's':{d:[['M',4.47,-8.73],['c',0.09,0.00,0.36,-0.03,0.57,-0.03],['c',0.75,0.03,1.29,0.24,1.71,0.63],['c',0.51,0.54,0.66,1.26,0.36,1.83],['c',-0.24,0.42,-0.63,0.57,-1.11,0.42],['c',-0.33,-0.09,-0.60,-0.36,-0.60,-0.57],['c',0.00,-0.03,0.06,-0.21,0.15,-0.39],['c',0.12,-0.21,0.15,-0.33,0.18,-0.48],['c',0.00,-0.24,-0.06,-0.48,-0.15,-0.60],['c',-0.15,-0.21,-0.42,-0.24,-0.75,-0.15],['c',-0.27,0.06,-0.48,0.18,-0.69,0.36],['c',-0.39,0.39,-0.51,0.96,-0.33,1.38],['c',0.09,0.21,0.42,0.51,0.78,0.72],['c',1.11,0.69,1.59,1.11,1.89,1.68],['c',0.21,0.39,0.24,0.78,0.15,1.29],['c',-0.18,1.20,-1.17,2.16,-2.52,2.52],['c',-1.02,0.24,-1.95,0.12,-2.70,-0.42],['c',-0.72,-0.51,-0.99,-1.47,-0.60,-2.19],['c',0.24,-0.48,0.72,-0.63,1.17,-0.42],['c',0.33,0.18,0.54,0.45,0.57,0.81],['c',0.00,0.21,-0.03,0.30,-0.33,0.51],['c',-0.33,0.24,-0.39,0.42,-0.27,0.69],['c',0.06,0.15,0.21,0.27,0.45,0.33],['c',0.30,0.09,0.87,0.09,1.20,0.00],['c',0.75,-0.21,1.23,-0.72,1.29,-1.35],['c',0.03,-0.42,-0.15,-0.81,-0.54,-1.20],['c',-0.24,-0.24,-0.48,-0.42,-1.41,-1.02],['c',-0.69,-0.42,-1.05,-0.93,-1.05,-1.47],['c',0.00,-0.39,0.12,-0.87,0.30,-1.23],['c',0.27,-0.57,0.78,-1.05,1.38,-1.35],['c',0.24,-0.12,0.63,-0.27,0.90,-0.30],['z']],w:6.632,h:8.758}, 'z':{d:[['M',2.64,-7.95],['c',0.36,-0.09,0.81,-0.03,1.71,0.27],['c',0.78,0.21,0.96,0.27,1.74,0.30],['c',0.87,0.06,1.02,0.03,1.38,-0.21],['c',0.21,-0.15,0.33,-0.15,0.48,-0.06],['c',0.15,0.09,0.21,0.30,0.15,0.45],['c',-0.03,0.06,-1.26,1.26,-2.76,2.67],['l',-2.73,2.55],['l',0.54,0.03],['c',0.54,0.03,0.72,0.03,2.01,0.15],['c',0.36,0.03,0.90,0.06,1.20,0.09],['c',0.66,0.00,0.81,-0.03,1.02,-0.24],['c',0.30,-0.30,0.39,-0.72,0.27,-1.23],['c',-0.06,-0.27,-0.06,-0.27,-0.03,-0.39],['c',0.15,-0.30,0.54,-0.27,0.69,0.03],['c',0.15,0.33,0.27,1.02,0.27,1.50],['c',0.00,1.47,-1.11,2.70,-2.52,2.79],['c',-0.57,0.03,-1.02,-0.09,-2.01,-0.51],['c',-1.02,-0.42,-1.23,-0.48,-2.13,-0.54],['c',-0.81,-0.06,-0.96,-0.03,-1.26,0.18],['c',-0.12,0.06,-0.24,0.12,-0.27,0.12],['c',-0.27,0.00,-0.45,-0.30,-0.36,-0.51],['c',0.03,-0.06,1.32,-1.32,2.91,-2.79],['l',2.88,-2.73],['c',-0.03,0.00,-0.21,0.03,-0.42,0.06],['c',-0.21,0.03,-0.78,0.09,-1.23,0.12],['c',-1.11,0.12,-1.23,0.15,-1.95,0.27],['c',-0.72,0.15,-1.17,0.18,-1.29,0.09],['c',-0.27,-0.18,-0.21,-0.75,0.12,-1.26],['c',0.39,-0.60,0.93,-1.02,1.59,-1.20],['z']],w:8.573,h:8.743}, '+':{d:[['M',3.48,-9.3],['c',0.18,-0.09,0.36,-0.09,0.54,0.00],['c',0.18,0.09,0.24,0.15,0.33,0.30],['l',0.06,0.15],['l',0.00,1.29],['l',0.00,1.29],['l',1.29,0.00],['c',1.23,0.00,1.29,0.00,1.41,0.06],['c',0.06,0.03,0.15,0.09,0.18,0.12],['c',0.12,0.09,0.21,0.33,0.21,0.48],['c',0.00,0.15,-0.09,0.39,-0.21,0.48],['c',-0.03,0.03,-0.12,0.09,-0.18,0.12],['c',-0.12,0.06,-0.18,0.06,-1.41,0.06],['l',-1.29,0.00],['l',0.00,1.29],['c',0.00,1.23,0.00,1.29,-0.06,1.41],['c',-0.09,0.18,-0.15,0.24,-0.30,0.33],['c',-0.21,0.09,-0.39,0.09,-0.57,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.06,-0.12,-0.06,-0.18,-0.06,-1.41],['l',0.00,-1.29],['l',-1.29,0.00],['c',-1.23,0.00,-1.29,0.00,-1.41,-0.06],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.09,-0.18,-0.09,-0.36,0.00,-0.54],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['l',0.15,-0.06],['l',1.26,0.00],['l',1.29,0.00],['l',0.00,-1.29],['c',0.00,-1.23,0.00,-1.29,0.06,-1.41],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['z']],w:7.507,h:7.515}, ',':{d:[['M',1.32,-3.36],['c',0.57,-0.15,1.17,0.03,1.59,0.45],['c',0.45,0.45,0.60,0.96,0.51,1.89],['c',-0.09,1.23,-0.42,2.46,-0.99,3.93],['c',-0.30,0.72,-0.72,1.62,-0.78,1.68],['c',-0.18,0.21,-0.51,0.18,-0.66,-0.06],['c',-0.03,-0.06,-0.06,-0.15,-0.06,-0.18],['c',0.00,-0.06,0.12,-0.33,0.24,-0.63],['c',0.84,-1.80,1.02,-2.61,0.69,-3.24],['c',-0.12,-0.24,-0.27,-0.36,-0.75,-0.60],['c',-0.36,-0.15,-0.42,-0.21,-0.60,-0.39],['c',-0.69,-0.69,-0.69,-1.71,0.00,-2.40],['c',0.21,-0.21,0.51,-0.39,0.81,-0.45],['z']],w:3.452,h:8.143}, '-':{d:[['M',0.18,-5.34],['c',0.09,-0.06,0.15,-0.06,2.31,-0.06],['c',2.46,0.00,2.37,0.00,2.46,0.21],['c',0.12,0.21,0.03,0.42,-0.15,0.54],['c',-0.09,0.06,-0.15,0.06,-2.28,0.06],['c',-2.16,0.00,-2.22,0.00,-2.31,-0.06],['c',-0.27,-0.15,-0.27,-0.54,-0.03,-0.69],['z']],w:5.001,h:0.81}, '.':{d:[['M',1.32,-3.36],['c',1.05,-0.27,2.10,0.57,2.10,1.65],['c',0.00,1.08,-1.05,1.92,-2.10,1.65],['c',-0.90,-0.21,-1.50,-1.14,-1.26,-2.04],['c',0.12,-0.63,0.63,-1.11,1.26,-1.26],['z']],w:3.413,h:3.402}, 'scripts.wedge':{d:[['M',-3.66,-7.44],['c',0.06,-0.09,0.00,-0.09,0.81,0.03],['c',1.86,0.30,3.84,0.30,5.73,0.00],['c',0.78,-0.12,0.72,-0.12,0.78,-0.03],['c',0.15,0.15,0.12,0.24,-0.24,0.60],['c',-0.93,0.93,-1.98,2.76,-2.67,4.62],['c',-0.30,0.78,-0.51,1.71,-0.51,2.13],['c',0.00,0.15,0.00,0.18,-0.06,0.27],['c',-0.12,0.09,-0.24,0.09,-0.36,0.00],['c',-0.06,-0.09,-0.06,-0.12,-0.06,-0.27],['c',0.00,-0.42,-0.21,-1.35,-0.51,-2.13],['c',-0.69,-1.86,-1.74,-3.69,-2.67,-4.62],['c',-0.36,-0.36,-0.39,-0.45,-0.24,-0.60],['z']],w:7.49,h:7.752}, 'scripts.thumb':{d:[['M',-0.54,-3.69],['c',0.15,-0.03,0.36,-0.06,0.51,-0.06],['c',1.44,0.00,2.58,1.11,2.94,2.85],['c',0.09,0.48,0.09,1.32,0.00,1.80],['c',-0.27,1.41,-1.08,2.43,-2.16,2.73],['l',-0.18,0.06],['l',0.00,0.12],['c',0.03,0.06,0.06,0.45,0.09,0.87],['c',0.03,0.57,0.03,0.78,0.00,0.84],['c',-0.09,0.27,-0.39,0.48,-0.66,0.48],['c',-0.27,0.00,-0.57,-0.21,-0.66,-0.48],['c',-0.03,-0.06,-0.03,-0.27,0.00,-0.84],['c',0.03,-0.42,0.06,-0.81,0.09,-0.87],['l',0.00,-0.12],['l',-0.18,-0.06],['c',-1.08,-0.30,-1.89,-1.32,-2.16,-2.73],['c',-0.09,-0.48,-0.09,-1.32,0.00,-1.80],['c',0.15,-0.84,0.51,-1.53,1.02,-2.04],['c',0.39,-0.39,0.84,-0.63,1.35,-0.75],['z'],['m',1.05,0.90],['c',-0.15,-0.09,-0.21,-0.09,-0.45,-0.12],['c',-0.15,0.00,-0.30,0.03,-0.39,0.03],['c',-0.57,0.18,-0.90,0.72,-1.08,1.74],['c',-0.06,0.48,-0.06,1.80,0.00,2.28],['c',0.15,0.90,0.42,1.44,0.90,1.65],['c',0.18,0.09,0.21,0.09,0.51,0.09],['c',0.30,0.00,0.33,0.00,0.51,-0.09],['c',0.48,-0.21,0.75,-0.75,0.90,-1.65],['c',0.03,-0.27,0.03,-0.54,0.03,-1.14],['c',0.00,-0.60,0.00,-0.87,-0.03,-1.14],['c',-0.15,-0.90,-0.45,-1.44,-0.90,-1.65],['z']],w:5.955,h:9.75}, 'scripts.open':{d:[['M',-0.54,-3.69],['c',0.15,-0.03,0.36,-0.06,0.51,-0.06],['c',1.44,0.00,2.58,1.11,2.94,2.85],['c',0.09,0.48,0.09,1.32,0.00,1.80],['c',-0.33,1.74,-1.47,2.85,-2.91,2.85],['c',-1.44,0.00,-2.58,-1.11,-2.91,-2.85],['c',-0.09,-0.48,-0.09,-1.32,0.00,-1.80],['c',0.15,-0.84,0.51,-1.53,1.02,-2.04],['c',0.39,-0.39,0.84,-0.63,1.35,-0.75],['z'],['m',1.11,0.90],['c',-0.21,-0.09,-0.27,-0.09,-0.51,-0.12],['c',-0.30,0.00,-0.42,0.03,-0.66,0.15],['c',-0.24,0.12,-0.51,0.39,-0.66,0.63],['c',-0.54,0.93,-0.63,2.64,-0.21,3.81],['c',0.21,0.54,0.51,0.90,0.93,1.11],['c',0.21,0.09,0.24,0.09,0.54,0.09],['c',0.30,0.00,0.33,0.00,0.54,-0.09],['c',0.42,-0.21,0.72,-0.57,0.93,-1.11],['c',0.36,-0.99,0.36,-2.37,0.00,-3.36],['c',-0.21,-0.54,-0.51,-0.90,-0.90,-1.11],['z']],w:5.955,h:7.5}, 'scripts.longphrase':{d:[['M',1.47,-15.09],['c',0.36,-0.09,0.66,-0.18,0.69,-0.18],['c',0.06,0.00,0.06,0.54,0.06,11.25],['l',0.00,11.25],['l',-0.63,0.15],['c',-0.66,0.18,-1.44,0.39,-1.50,0.39],['c',-0.03,0.00,-0.03,-3.39,-0.03,-11.25],['l',0.00,-11.25],['l',0.36,-0.09],['c',0.21,-0.06,0.66,-0.18,1.05,-0.27],['z']],w:2.16,h:23.04}, 'scripts.mediumphrase':{d:[['M',1.47,-7.59],['c',0.36,-0.09,0.66,-0.18,0.69,-0.18],['c',0.06,0.00,0.06,0.39,0.06,7.50],['l',0.00,7.50],['l',-0.63,0.15],['c',-0.66,0.18,-1.44,0.39,-1.50,0.39],['c',-0.03,0.00,-0.03,-2.28,-0.03,-7.50],['l',0.00,-7.50],['l',0.36,-0.09],['c',0.21,-0.06,0.66,-0.18,1.05,-0.27],['z']],w:2.16,h:15.54}, 'scripts.shortphrase':{d:[['M',1.47,-7.59],['c',0.36,-0.09,0.66,-0.18,0.69,-0.18],['c',0.06,0.00,0.06,0.21,0.06,3.75],['l',0.00,3.75],['l',-0.42,0.09],['c',-0.57,0.18,-1.65,0.45,-1.71,0.45],['c',-0.03,0.00,-0.03,-0.72,-0.03,-3.75],['l',0.00,-3.75],['l',0.36,-0.09],['c',0.21,-0.06,0.66,-0.18,1.05,-0.27],['z']],w:2.16,h:8.04}, 'scripts.snap':{d:[['M',4.50,-3.39],['c',0.36,-0.03,0.96,-0.03,1.35,0.00],['c',1.56,0.15,3.15,0.90,4.20,2.01],['c',0.24,0.27,0.33,0.42,0.33,0.60],['c',0.00,0.27,0.03,0.24,-2.46,2.22],['c',-1.29,1.02,-2.40,1.86,-2.49,1.92],['c',-0.18,0.09,-0.30,0.09,-0.48,0.00],['c',-0.09,-0.06,-1.20,-0.90,-2.49,-1.92],['c',-2.49,-1.98,-2.46,-1.95,-2.46,-2.22],['c',0.00,-0.18,0.09,-0.33,0.33,-0.60],['c',1.05,-1.08,2.64,-1.86,4.17,-2.01],['z'],['m',1.29,1.17],['c',-1.47,-0.15,-2.97,0.30,-4.14,1.20],['l',-0.18,0.15],['l',0.06,0.09],['c',0.15,0.12,3.63,2.85,3.66,2.85],['c',0.03,0.00,3.51,-2.73,3.66,-2.85],['l',0.06,-0.09],['l',-0.18,-0.15],['c',-0.84,-0.66,-1.89,-1.08,-2.94,-1.20],['z']],w:10.38,h:6.84}}; // Custom characters that weren't generated from the font: glyphs['noteheads.slash.whole'] = {d:[['M',5,-5],['l',1,1],['l',-5,5],['l',-1,-1],['z'],['m',4,6],['l',-5,-5],['l',2,-2],['l',5,5],['z'],['m',0,-2],['l',1,1],['l',-5,5],['l',-1,-1],['z'],['m',-4,6],['l',-5,-5],['l',2,-2],['l',5,5],['z']],w:10.81,h:15.63}; glyphs['noteheads.slash.quarter'] = {d:[['M',9,-6],['l',0,4],['l',-9,9],['l',0,-4],['z']],w:9,h:9}; glyphs['noteheads.harmonic.quarter'] = {d:[['M',3.63,-4.02],['c',0.09,-0.06,0.18,-0.09,0.24,-0.03],['c',0.03,0.03,0.87,0.93,1.83,2.01],['c',1.50,1.65,1.80,1.98,1.80,2.04],['c',0.00,0.06,-0.30,0.39,-1.80,2.04],['c',-0.96,1.08,-1.80,1.98,-1.83,2.01],['c',-0.06,0.06,-0.15,0.03,-0.24,-0.03],['c',-0.12,-0.09,-3.54,-3.84,-3.60,-3.93],['c',-0.03,-0.03,-0.03,-0.09,-0.03,-0.15],['c',0.03,-0.06,3.45,-3.84,3.63,-3.96],['z']],w:7.5,h:8.165}; var pathClone = function (pathArray) { var res = []; for (var i = 0, ii = pathArray.length; i < ii; i++) { res[i] = []; for (var j = 0, jj = pathArray[i].length; j < jj; j++) { res[i][j] = pathArray[i][j]; } } return res; }; var pathScale = function (pathArray, kx, ky) { for (var i = 0, ii = pathArray.length; i < ii; i++) { var p = pathArray[i]; var j, jj; for (j = 1, jj = p.length; j < jj; j++) { p[j] *= (j % 2) ? kx : ky; } } }; var Glyphs = { printSymbol: function (x,y,symb,paper, klass) { if (!glyphs[symb]) return null; var pathArray = pathClone(glyphs[symb].d); pathArray[0][1] +=x; pathArray[0][2] +=y; var path = ""; for (var i = 0; i < pathArray.length; i++) path += pathArray[i].join(" "); return paper.path({path:path, stroke:"none", fill:"#000000", 'class': klass }); }, getPathForSymbol: function (x,y,symb,scalex, scaley) { scalex = scalex || 1; scaley = scaley || 1; if (!glyphs[symb]) return null; var pathArray = pathClone(glyphs[symb].d); if (scalex!==1 || scaley!==1) pathScale(pathArray,scalex,scaley); pathArray[0][1] +=x; pathArray[0][2] +=y; return pathArray; }, getSymbolWidth: function (symbol) { if (glyphs[symbol]) return glyphs[symbol].w; return 0; }, symbolHeightInPitches: function(symbol) { var height = glyphs[symbol] ? glyphs[symbol].h : 0; return height / abc_spacing.STEP; }, getSymbolAlign: function (symbol) { if (symbol.substring(0,7)==="scripts" && symbol!=="scripts.roll") { return "center"; } return "left"; }, getYCorr: function (symbol) { switch(symbol) { case "0": case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": case "+": return -2; case "timesig.common": case "timesig.cut": return 0; case "flags.d32nd": return -1; case "flags.d64th": return -2; case "flags.u32nd": return 1; case "flags.u64th": return 3; case "rests.whole": return 1; case "rests.half": return -1; case "rests.8th": return -1; case "rests.quarter": return -1; case "rests.16th": return -1; case "rests.32nd": return -1; case "rests.64th": return -1; case "f": case "m": case "p": case "s": case "z": return -4; case "scripts.trill": case "scripts.upbow": case "scripts.downbow": return -2; case "scripts.ufermata": case "scripts.wedge": case "scripts.roll": case "scripts.shortphrase": case "scripts.longphrase": return -1; case "scripts.dfermata": return 1; default: return 0; } }, setSymbol: function(name, path) { glyphs[name] = path; } }; var abc_glyphs = Glyphs; // we need the glyphs for layout information // abc_create_clef.js // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var createClef; (function() { createClef = function(elem, tuneNumber) { var clef; var octave = 0; var abselem = new abc_absolute_element(elem,0,10, 'staff-extra', tuneNumber); abselem.isClef = true; switch (elem.type) { case "treble": clef = "clefs.G"; break; case "tenor": clef="clefs.C"; break; case "alto": clef="clefs.C"; break; case "bass": clef="clefs.F"; break; case 'treble+8': clef = "clefs.G"; octave = 1; break; case 'tenor+8':clef="clefs.C"; octave = 1; break; case 'bass+8': clef="clefs.F"; octave = 1; break; case 'alto+8': clef="clefs.C"; octave = 1; break; case 'treble-8': clef = "clefs.G"; octave = -1; break; case 'tenor-8':clef="clefs.C"; octave = -1; break; case 'bass-8': clef="clefs.F"; octave = -1; break; case 'alto-8': clef="clefs.C"; octave = -1; break; case 'none': return null; case 'perc': clef="clefs.perc"; break; default: abselem.addChild(new abc_relative_element("clef="+elem.type, 0, 0, undefined, {type:"debug"})); } // if (elem.verticalPos) { // pitch = elem.verticalPos; // } var dx =5; if (clef) { abselem.addRight(new abc_relative_element(clef, dx, abc_glyphs.getSymbolWidth(clef), elem.clefPos)); if (clef === 'clefs.G') { abselem.top = 13; abselem.bottom = -1; } else { abselem.top = 10; abselem.bottom = 2; } if (octave !== 0) { var scale = 2 / 3; var adjustspacing = (abc_glyphs.getSymbolWidth(clef) - abc_glyphs.getSymbolWidth("8") * scale) / 2; abselem.addRight(new abc_relative_element("8", dx + adjustspacing, abc_glyphs.getSymbolWidth("8") * scale, (octave > 0) ? abselem.top + 3 : abselem.bottom - 1, { scalex: scale, scaley: scale })); abselem.top += 2; } } return abselem; }; })(); var abc_create_clef = createClef; // abc_create_key_signature.js // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var createKeySignature; (function() { createKeySignature = function(elem, tuneNumber) { if (!elem.accidentals || elem.accidentals.length === 0) return null; var abselem = new abc_absolute_element(elem, 0, 10, 'staff-extra', tuneNumber); abselem.isKeySig = true; var dx = 0; abc_common.each(elem.accidentals, function(acc) { var symbol; switch(acc.acc) { case "sharp": symbol = "accidentals.sharp"; break; case "natural": symbol = "accidentals.nat"; break; case "flat": symbol = "accidentals.flat"; break; case "quartersharp": symbol = "accidentals.halfsharp"; break; case "quarterflat": symbol = "accidentals.halfflat"; break; default: symbol = "accidentals.flat"; } abselem.addRight(new abc_relative_element(symbol, dx, abc_glyphs.getSymbolWidth(symbol), acc.verticalPos, {thickness: abc_glyphs.symbolHeightInPitches(symbol)})); dx += abc_glyphs.getSymbolWidth(symbol) + 2; }, this); return abselem; }; })(); var abc_create_key_signature = createKeySignature; // abc_create_time_signature.js // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var createTimeSignature; (function() { createTimeSignature = function(elem, tuneNumber) { var abselem = new abc_absolute_element(elem,0,10, 'staff-extra', tuneNumber); if (elem.type === "specified") { var x = 0; for (var i = 0; i < elem.value.length; i++) { if (i !== 0) { abselem.addRight(new abc_relative_element('+', x+1, abc_glyphs.getSymbolWidth("+"), 6, {thickness: abc_glyphs.symbolHeightInPitches("+")})); x += abc_glyphs.getSymbolWidth("+")+2; } if (elem.value[i].den) { var numWidth = 0; for (var i2 = 0; i2 < elem.value[i].num.length; i2++) numWidth += abc_glyphs.getSymbolWidth(elem.value[i].num.charAt(i2)); var denWidth = 0; for (i2 = 0; i2 < elem.value[i].num.length; i2++) denWidth += abc_glyphs.getSymbolWidth(elem.value[i].den.charAt(i2)); var maxWidth = Math.max(numWidth, denWidth); abselem.addRight(new abc_relative_element(elem.value[i].num, x+(maxWidth-numWidth)/2, numWidth, 8, { thickness: abc_glyphs.symbolHeightInPitches(elem.value[i].num.charAt(0)) })); abselem.addRight(new abc_relative_element(elem.value[i].den, x+(maxWidth-denWidth)/2, denWidth, 4, { thickness: abc_glyphs.symbolHeightInPitches(elem.value[i].den.charAt(0)) })); x += maxWidth; } else { var thisWidth = 0; for (var i3 = 0; i3 < elem.value[i].num.length; i3++) thisWidth += abc_glyphs.getSymbolWidth(elem.value[i].num.charAt(i3)); abselem.addRight(new abc_relative_element(elem.value[i].num, x, thisWidth, 6, { thickness: abc_glyphs.symbolHeightInPitches(elem.value[i].num.charAt(0)) })); x += thisWidth; } } } else if (elem.type === "common_time") { abselem.addRight(new abc_relative_element("timesig.common", 0, abc_glyphs.getSymbolWidth("timesig.common"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.common") })); } else if (elem.type === "cut_time") { abselem.addRight(new abc_relative_element("timesig.cut", 0, abc_glyphs.getSymbolWidth("timesig.cut"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.cut") })); } else if (elem.type === "tempus_imperfectum") { abselem.addRight(new abc_relative_element("timesig.imperfectum", 0, abc_glyphs.getSymbolWidth("timesig.imperfectum"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.imperfectum") })); } else if (elem.type === "tempus_imperfectum_prolatio") { abselem.addRight(new abc_relative_element("timesig.imperfectum2", 0, abc_glyphs.getSymbolWidth("timesig.imperfectum2"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.imperfectum2") })); } else if (elem.type === "tempus_perfectum") { abselem.addRight(new abc_relative_element("timesig.perfectum", 0, abc_glyphs.getSymbolWidth("timesig.perfectum"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.perfectum") })); } else if (elem.type === "tempus_perfectum_prolatio") { abselem.addRight(new abc_relative_element("timesig.perfectum2", 0, abc_glyphs.getSymbolWidth("timesig.perfectum2"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.perfectum2") })); } else { console.log("time signature:",elem); } return abselem; }; })(); var abc_create_time_signature = createTimeSignature; // abc_dynamic_decoration.js: Definition of the DynamicDecoration class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var DynamicDecoration = function DynamicDecoration(anchor, dec, position) { this.anchor = anchor; this.dec = dec; if (position === 'below') this.volumeHeightBelow = 5; else this.volumeHeightAbove = 5; this.pitch = undefined; // This will be set later }; DynamicDecoration.prototype.setUpperAndLowerElements = function(positionY) { if (this.volumeHeightAbove) this.pitch = positionY.volumeHeightAbove; else this.pitch = positionY.volumeHeightBelow; }; DynamicDecoration.prototype.draw = function(renderer, linestartx, lineendx) { if (this.pitch === undefined) window.console.error("Dynamic Element y-coordinate not set."); var scalex = 1; var scaley = 1; renderer.printSymbol(this.anchor.x, this.pitch, this.dec, scalex, scaley, renderer.addClasses('decoration')); }; var abc_dynamic_decoration = DynamicDecoration; /** * sprintf() for JavaScript v.0.4 * Copyright (c) 2007-present, Alexandru Mărășteanu All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of this software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ //function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); } var sprintf = function() { var i = 0, a, f = arguments[i++], o = [], m, p, c, x; while (f) { if (m = /^[^\x25]+/.exec(f)) o.push(m[0]); else if (m = /^\x25{2}/.exec(f)) o.push('%'); else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) { if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments."); if (/[^s]/.test(m[7]) && (typeof(a) != 'number')) throw("Expecting number but found " + typeof(a)); switch (m[7]) { case 'b': a = a.toString(2); break; case 'c': a = String.fromCharCode(a); break; case 'd': a = parseInt(a); break; case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break; case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break; case 'o': a = a.toString(8); break; case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break; case 'u': a = Math.abs(a); break; case 'x': a = a.toString(16); break; case 'X': a = a.toString(16).toUpperCase(); break; } a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a); c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' '; x = m[5] - String(a).length; p = m[5] ? str_repeat(c, x) : ''; o.push(m[4] ? a + p : p + a); } else throw ("Huh ?!"); f = f.substring(m[0].length); } return o.join(''); }; var sprintf_1 = sprintf; // abc_crescendo_element.js: Definition of the CrescendoElem class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var CrescendoElem = function CrescendoElem(anchor1, anchor2, dir, positioning) { this.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the "beginning" of the line - after keysig) this.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line) this.dir = dir; // either "<" or ">" if (positioning === 'above') this.dynamicHeightAbove = 4; else this.dynamicHeightBelow = 4; this.pitch = undefined; // This will be set later }; CrescendoElem.prototype.setUpperAndLowerElements = function(positionY) { if (this.dynamicHeightAbove) this.pitch = positionY.dynamicHeightAbove; else this.pitch = positionY.dynamicHeightBelow; }; CrescendoElem.prototype.draw = function (renderer) { if (this.pitch === undefined) window.console.error("Crescendo Element y-coordinate not set."); var y = renderer.calcY(this.pitch) + 4; // This is the top pixel to use (it is offset a little so that it looks good with the volume marks.) var height = 8; if (this.dir === "<") { this.drawLine(renderer, y+height/2, y); this.drawLine(renderer, y+height/2, y+height); } else { this.drawLine(renderer, y, y+height/2); this.drawLine(renderer, y+height, y+height/2); } }; CrescendoElem.prototype.drawLine = function (renderer, y1, y2) { // TODO-PER: This is just a quick hack to make the dynamic marks not crash if they are mismatched. See the slur treatment for the way to get the beginning and end. var left = this.anchor1 ? this.anchor1.x : 0; var right = this.anchor2 ? this.anchor2.x : 800; var pathString = sprintf_1("M %f %f L %f %f", left, y1, right, y2); renderer.printPath({path:pathString, stroke:"#000000", 'class': renderer.addClasses('decoration')}); }; var abc_crescendo_element = CrescendoElem; // abc_tie_element.js: Definition of the TieElement class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var TieElem = function TieElem(options) { // console.log("constructor", options.anchor1 ? options.anchor1.pitch : "N/A", options.anchor2 ? options.anchor2.pitch : "N/A", options.isTie, options.isGrace); this.anchor1 = options.anchor1; // must have a .x and a .pitch, and a .parent property or be null (means starts at the "beginning" of the line - after keysig) this.anchor2 = options.anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line) if (options.isGrace) this.isGrace = true; if (options.fixedY) this.fixedY = true; if (options.stemDir) this.stemDir = options.stemDir; if (options.voiceNumber !== undefined) this.voiceNumber = options.voiceNumber; this.internalNotes = []; }; TieElem.prototype.addInternalNote = function(note) { this.internalNotes.push(note); }; TieElem.prototype.setEndAnchor = function(anchor2) { // console.log("end", this.anchor1 ? this.anchor1.pitch : "N/A", anchor2 ? anchor2.pitch : "N/A", this.isTie, this.isGrace); this.anchor2 = anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line) }; // If we encounter a repeat sign, then we don't want to extend either a tie or a slur past it, so these are called to be a limit. TieElem.prototype.setStartX = function(startLimitElem) { this.startLimitX = startLimitElem; }; TieElem.prototype.setEndX = function(endLimitElem) { this.endLimitX = endLimitElem; }; TieElem.prototype.setHint = function () { this.hint = true; }; TieElem.prototype.setUpperAndLowerElements = function(positionY) { // Doesn't depend on the highest and lowest, so there's nothing to do here. }; TieElem.prototype.calcTieDirection = function () { // The rules: // 1) If it is in a grace note group, then the direction is always BELOW. // 2) If it is in a single voice, then the direction is always OPPOSITE of the stem (or where the stem would have been in the case of whole notes.) // 3) If the stem direction is forced (probably because there are two voices on the same line), then the direction is the SAME as the stem direction. if (this.isGrace) this.above = false; else if (this.voiceNumber === 0) this.above = true; else if (this.voiceNumber > 0) this.above = false; else { var referencePitch; if (this.anchor1) referencePitch = this.anchor1.pitch; else if (this.anchor2) referencePitch = this.anchor2.pitch; else referencePitch = 14; // TODO-PER: this can't really happen normally. This would imply that a tie crossed over three lines, something like "C-\nz\nC" // Put the arc in the opposite direction of the stem. That isn't always the pitch if one or both of the notes are beamed with something that affects its stem. if ((this.anchor1 && this.anchor1.stemDir === 'down') && (this.anchor2 && this.anchor2.stemDir === "down")) this.above = true; else if ((this.anchor1 && this.anchor1.stemDir === 'up') && (this.anchor2 && this.anchor2.stemDir === "up")) this.above = false; else if (this.anchor1 && this.anchor2) this.above = referencePitch >= 6; else if (this.anchor1) this.above = this.anchor1.stemDir === "down"; else if (this.anchor2) this.above = this.anchor2.stemDir === "down"; else this.above = referencePitch >= 6; } }; // From "standard music notation practice" by Music Publishers’ Association: // 1) Slurs are placed under the note heads if all stems go up. // 2) Slurs are placed over the note heads if all stems go down. // 3) If there are both up stems and down stems, prefer placing the slur over. // 4) When the staff has opposite stemmed voices, all slurs should be on the stemmed side. TieElem.prototype.calcSlurDirection = function () { if (this.isGrace) this.above = false; else if (this.voiceNumber === 0) this.above = true; else if (this.voiceNumber > 0) this.above = false; else { var hasDownStem = false; if (this.anchor1 && this.anchor1.stemDir === "down") hasDownStem = true; if (this.anchor2 && this.anchor2.stemDir === "down") hasDownStem = true; for (var i = 0; i < this.internalNotes.length; i++) { var n = this.internalNotes[i]; if (n.stemDir === "down") hasDownStem = true; } this.above = hasDownStem; } }; TieElem.prototype.calcX = function (lineStartX, lineEndX) { if (this.anchor1) { this.startX = this.anchor1.x; // The normal case where there is a starting element to attach to. if (this.anchor1.scalex < 1) // this is a grace note - don't offset the tie as much. this.startX -= 3; } else if (this.startLimitX) this.startX = this.startLimitX.x+this.startLimitX.w; // if there is no start element, but there is a repeat mark before the start of the line. else this.startX = lineStartX; // There is no element and no repeat mark: extend to the beginning of the line. if (this.anchor2) this.endX = this.anchor2.x; // The normal case where there is a starting element to attach to. else if (this.endLimitX) this.endX = this.endLimitX.x; // if there is no start element, but there is a repeat mark before the start of the line. else this.endX = lineEndX; // There is no element and no repeat mark: extend to the beginning of the line. }; TieElem.prototype.calcTieY = function () { // If the tie comes from another line, then one or both anchors will be missing. if (this.anchor1) this.startY = this.anchor1.pitch; else if (this.anchor2) this.startY = this.anchor2.pitch; else this.startY = this.above ? 14 : 0; if (this.anchor2) this.endY = this.anchor2.pitch; else if (this.anchor1) this.endY = this.anchor1.pitch; else this.endY = this.above ? 14 : 0; }; // From "standard music notation practice" by Music Publishers’ Association: // 1) If the anchor note is down stem, the slur points to the note head. // 2) If the anchor note is up stem, and the slur is over, then point to middle of stem. TieElem.prototype.calcSlurY = function () { if (this.anchor1 && this.anchor2) { if (this.above && this.anchor1.stemDir === "up" && !this.fixedY) { this.startY = (this.anchor1.highestVert + this.anchor1.pitch) / 2; this.startX += this.anchor1.w/2; // When going to the middle of the stem, bump the line to the right a little bit to make it look right. } else this.startY = this.anchor1.pitch; // If the closing note has an up stem, and it is beamed, and it isn't the first note in the beam, then the beam will get in the way. var beamInterferes = this.anchor2.parent.beam && this.anchor2.parent.beam.stemsUp && this.anchor2.parent.beam.elems[0] !== this.anchor2.parent; var midPoint = (this.anchor2.highestVert + this.anchor2.pitch) / 2; if (this.above && this.anchor2.stemDir === "up" && !this.fixedY && !beamInterferes && (midPoint < this.startY)) { this.endY = midPoint; this.endX += this.anchor2.w/2; // When going to the middle of the stem, bump the line to the right a little bit to make it look right. } else this.endY = this.above && beamInterferes ? this.anchor2.highestVert : this.anchor2.pitch; } else if (this.anchor1) { this.startY = this.endY = this.anchor1.pitch; } else if (this.anchor2) { this.startY = this.endY = this.anchor2.pitch; } else { // This is the case where the slur covers the entire line. // TODO-PER: figure out where the real top and bottom of the line are. this.startY = this.above ? 14 : 0; this.endY = this.above ? 14 : 0; } }; TieElem.prototype.avoidCollisionAbove = function () { // Double check that an interior note in the slur isn't so high that it interferes. if (this.above) { var maxInnerHeight = -50; for (var i = 0; i < this.internalNotes.length; i++) { if (this.internalNotes[i].highestVert > maxInnerHeight) maxInnerHeight = this.internalNotes[i].highestVert; } if (maxInnerHeight > this.startY && maxInnerHeight > this.endY) this.startY = this.endY = maxInnerHeight - 1; } }; TieElem.prototype.layout = function (lineStartX, lineEndX) { // We now have all of the input variables set, so we can figure out the start and ending x,y coordinates, and finalize the direction of the arc. // Ties and slurs are handled a little differently, so do calculations for them separately. if (!this.anchor1 || !this.anchor2) this.isTie = true; // if the slur goes off the end of the line, then draw it like a tie else if (this.anchor1.pitch === this.anchor2.pitch && this.internalNotes.length === 0) this.isTie = true; else this.isTie = false; // TODO-PER: Not sure why this would be needed, but it would be better to figure out a way to have the anchors be immutable here anyway. // if (this.isTie) { // if (this.anchor1) // this can happen if the tie comes from the previous line. // this.anchor1.isTie = true; // if (this.anchor2) // this can happen if the tie does not go to the next line. // this.anchor2.isTie = true; // } if (this.isTie) { this.calcTieDirection(); // TODO-PER: Not sure why this would be needed, but it would be better to figure out a way to have the anchors be immutable here anyway. // if (this.anchor1) // this can happen if the tie comes from the previous line. // this.anchor1.tieAbove = this.above; // if (this.anchor2) // this can happen if the tie goes to the next line. // this.anchor2.tieAbove = this.above; this.calcX(lineStartX, lineEndX); this.calcTieY(); } else { this.calcSlurDirection(); this.calcX(lineStartX, lineEndX); this.calcSlurY(); } this.avoidCollisionAbove(); }; TieElem.prototype.draw = function (renderer, linestartx, lineendx) { this.layout(linestartx, lineendx); var klass; if (this.hint) klass = "abcjs-hint"; var fudgeY = this.fixedY ? 1.5 : 0; // TODO-PER: This just compensates for drawArc, which contains too much knowledge of ties and slurs. renderer.drawArc(this.startX, this.endX, this.startY+fudgeY, this.endY+fudgeY, this.above, klass, this.isTie); }; var abc_tie_element = TieElem; // abc_decoration.js: Creates a data structure suitable for printing a line of abc // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) & Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /*global window */ var Decoration; (function() { Decoration = function Decoration() { this.startDiminuendoX = undefined; this.startCrescendoX = undefined; this.minTop = 12; // TODO-PER: this is assuming a 5-line staff. Pass that info in. this.minBottom = 0; }; var closeDecoration = function(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch) { var yPos; for (var i=0;i9) yPos++; // take up some room of those that are above var deltaX = width/2; if (abc_glyphs.getSymbolAlign(symbol)!=="center") { deltaX -= (abc_glyphs.getSymbolWidth(symbol)/2); } abselem.addChild(new abc_relative_element(symbol, deltaX, abc_glyphs.getSymbolWidth(symbol), yPos)); } if (decoration[i]==="slide" && abselem.heads[0]) { var yPos2 = abselem.heads[0].pitch; yPos2 -= 2; // TODO-PER: not sure what this fudge factor is. var blank1 = new abc_relative_element("", -roomtaken-15, 0, yPos2-1); var blank2 = new abc_relative_element("", -roomtaken-5, 0, yPos2+1); abselem.addChild(blank1); abselem.addChild(blank2); voice.addOther(new abc_tie_element({ anchor1: blank1, anchor2: blank2, fixedY: true})); } } if (yPos === undefined) yPos = pitch; return { above: yPos, below: abselem.bottom }; }; var volumeDecoration = function(voice, decoration, abselem, positioning) { for (var i=0;i minBottom) y = minBottom; } return y; } function textDecoration(text, placement) { var y = getPlacement(placement); var textFudge = 2; var textHeight = 5; // TODO-PER: Get the height of the current font and use that for the thickness. abselem.addChild(new abc_relative_element(text, width/2, 0, y+textFudge, {type:"decoration", klass: 'ornament', thickness: 3})); incrementPlacement(placement, textHeight); } function symbolDecoration(symbol, placement) { var deltaX = width/2; if (abc_glyphs.getSymbolAlign(symbol) !== "center") { deltaX -= (abc_glyphs.getSymbolWidth(symbol) / 2); } var height = abc_glyphs.symbolHeightInPitches(symbol) + 1; // adding a little padding so nothing touches. var y = getPlacement(placement); y = (placement === 'above') ? y + height/2 : y - height/2;// Center the element vertically. abselem.addChild(new abc_relative_element(symbol, deltaX, abc_glyphs.getSymbolWidth(symbol), y, { klass: 'ornament', thickness: abc_glyphs.symbolHeightInPitches(symbol) })); incrementPlacement(placement, height); } var symbolList = { "+": "scripts.stopped", "open": "scripts.open", "snap": "scripts.snap", "wedge": "scripts.wedge", "thumb": "scripts.thumb", "shortphrase": "scripts.shortphrase", "mediumphrase": "scripts.mediumphrase", "longphrase": "scripts.longphrase", "trill": "scripts.trill", "roll": "scripts.roll", "irishroll": "scripts.roll", "marcato": "scripts.umarcato", "dmarcato": "scripts.dmarcato", "umarcato": "scripts.umarcato", "turn": "scripts.turn", "uppermordent": "scripts.prall", "pralltriller": "scripts.prall", "mordent": "scripts.mordent", "lowermordent": "scripts.mordent", "downbow": "scripts.downbow", "upbow": "scripts.upbow", "fermata": "scripts.ufermata", "invertedfermata": "scripts.dfermata", "breath": ",", "coda": "scripts.coda", "segno": "scripts.segno" }; var hasOne = false; for (var i=0;i", positioning)); } if (crescendo) { voice.addOther(new abc_crescendo_element(crescendo.start, crescendo.stop, "<", positioning)); } }; Decoration.prototype.createDecoration = function(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, positioning, hasVocals) { if (!positioning) positioning = { ornamentPosition: 'above', volumePosition: hasVocals ? 'above' :'below', dynamicPosition: hasVocals ? 'above' : 'below' }; // These decorations don't affect the placement of other decorations volumeDecoration(voice, decoration, abselem, positioning.volumePosition); this.dynamicDecoration(voice, decoration, abselem, positioning.dynamicPosition); compoundDecoration(decoration, pitch, width, abselem, dir); // treat staccato, accent, and tenuto first (may need to shift other markers) var yPos = closeDecoration(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch); // yPos is an object containing 'above' and 'below'. That is the placement of the next symbol on either side. yPos.above = Math.max(yPos.above, this.minTop); var hasOne = stackedDecoration(decoration, width, abselem, yPos, positioning.ornamentPosition, this.minTop, this.minBottom); leftDecoration(decoration, abselem, roomtaken); }; })(); var abc_decoration = Decoration; // abc_ending_element.js: Definition of the EndingElement class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var EndingElem = function EndingElem(text, anchor1, anchor2) { this.text = text; // text to be displayed top left this.anchor1 = anchor1; // must have a .x property or be null (means starts at the "beginning" of the line - after keysig) this.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line) this.endingHeightAbove = 5; this.pitch = undefined; // This will be set later }; EndingElem.prototype.setUpperAndLowerElements = function(positionY) { this.pitch = positionY.endingHeightAbove - 2; }; EndingElem.prototype.draw = function (renderer, linestartx, lineendx) { if (this.pitch === undefined) window.console.error("Ending Element y-coordinate not set."); var y = renderer.calcY(this.pitch); var height = 20; var pathString; if (this.anchor1) { linestartx = this.anchor1.x+this.anchor1.w; pathString = sprintf_1("M %f %f L %f %f", linestartx, y, linestartx, y+height); renderer.printPath({path:pathString, stroke:"#000000", fill:"#000000", 'class': renderer.addClasses('ending')}); renderer.renderText(linestartx+5, renderer.calcY(this.pitch-0.5), this.text, 'repeatfont', 'ending',"start"); } if (this.anchor2) { lineendx = this.anchor2.x; pathString = sprintf_1("M %f %f L %f %f", lineendx, y, lineendx, y+height); renderer.printPath({path:pathString, stroke:"#000000", fill:"#000000", 'class': renderer.addClasses('ending')}); } pathString = sprintf_1("M %f %f L %f %f", linestartx, y, lineendx, y); renderer.printPath({path:pathString, stroke:"#000000", fill:"#000000", 'class': renderer.addClasses('ending')}); }; var abc_ending_element = EndingElem; // abc_staff_group_element.js: Definition of the StaffGroupElement class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /*globals console */ // StaffGroupElement contains all the elements that go together to make one line of music. // That might be multiple staves that are tied together, and it might be multiple voices on one staff. // // Methods: // constructor: some basic initialization // addVoice(): Called once for each voice. May add a new staff if needed. // finished(): Called only internally by layout() // layout(): This does all the layout. It sets the following: spacingunits, startx, minspace, w, and the x-coordinate of each element in each voice. // draw(): Calls the underlying methods on the voice objects to do the drawing. Sets y and height. // // Members: // staffs: an array of all the staves in this group. Each staff contains the following elements: // { top, bottom, highest, lowest, y } // voices: array of VoiceElement objects. This is mostly passed in, but the VoiceElement objects are modified here. // // spacingunits: number of relative x-units in the line. Used by the calling function to pass back in as the "spacing" input parameter. // TODO-PER: This should actually be passed back as a return value. // minspace: smallest space between two notes. Used by the calling function to pass back in as the "spacing" input parameter. // TODO-PER: This should actually be passed back as a return value. // startx: The left edge, taking the margin and the optional voice name. Used by the draw() method. // w: The width of the line. Used by calling function to pass back in as the "spacing" input parameter, and the draw() method. // TODO-PER: This should actually be passed back as a return value. (TODO-PER: in pixels or spacing units?) // y: The top of the staff group, in pixels. This is set in the draw method. // TODO-PER: Where is that used? It looks like it might not be needed. // height: Set in the draw() method to the height actually used. Used by the calling function to know where to start the next staff group. // TODO-PER: This should actually be set in the layout method and passed back as a return value. var StaffGroupElement = function() { this.voices = []; this.staffs = []; this.brace = undefined; //tony }; StaffGroupElement.prototype.setLimit = function(member, voice) { if (!voice.specialY[member]) return; if (!voice.staff.specialY[member]) voice.staff.specialY[member] = voice.specialY[member]; else voice.staff.specialY[member] = Math.max(voice.staff.specialY[member], voice.specialY[member]); }; StaffGroupElement.prototype.addVoice = function (voice, staffnumber, stafflines) { var voiceNum = this.voices.length; this.voices[voiceNum] = voice; if (this.staffs[staffnumber]) this.staffs[staffnumber].voices.push(voiceNum); else { // TODO-PER: how does the min/max change when stafflines is not 5? this.staffs[this.staffs.length] = { top: 10, bottom: 2, lines: stafflines, voices: [voiceNum], specialY: { tempoHeightAbove: 0, partHeightAbove: 0, volumeHeightAbove: 0, dynamicHeightAbove: 0, endingHeightAbove: 0, chordHeightAbove: 0, lyricHeightAbove: 0, lyricHeightBelow: 0, chordHeightBelow: 0, volumeHeightBelow: 0, dynamicHeightBelow: 0 } }; } voice.staff = this.staffs[staffnumber]; }; StaffGroupElement.prototype.setStaffLimits = function (voice) { voice.staff.top = Math.max(voice.staff.top, voice.top); voice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom); this.setLimit('tempoHeightAbove', voice); this.setLimit('partHeightAbove', voice); this.setLimit('volumeHeightAbove', voice); this.setLimit('dynamicHeightAbove', voice); this.setLimit('endingHeightAbove', voice); this.setLimit('chordHeightAbove', voice); this.setLimit('lyricHeightAbove', voice); this.setLimit('lyricHeightBelow', voice); this.setLimit('chordHeightBelow', voice); this.setLimit('volumeHeightBelow', voice); this.setLimit('dynamicHeightBelow', voice); }; StaffGroupElement.prototype.setUpperAndLowerElements = function(renderer) { // Each staff already has the top and bottom set, now we see if there are elements that are always on top and bottom, and resolve their pitch. // Also, get the overall height of all the staves in this group. var lastStaffBottom; for (var i = 0; i < this.staffs.length; i++) { var staff = this.staffs[i]; // the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric // the vertical order of elements that are below is: lyric, chord, volume/dynamic var positionY = { tempoHeightAbove: 0, partHeightAbove: 0, volumeHeightAbove: 0, dynamicHeightAbove: 0, endingHeightAbove: 0, chordHeightAbove: 0, lyricHeightAbove: 0, lyricHeightBelow: 0, chordHeightBelow: 0, volumeHeightBelow: 0, dynamicHeightBelow: 0 }; if (staff.specialY.lyricHeightAbove) { staff.top += staff.specialY.lyricHeightAbove; positionY.lyricHeightAbove = staff.top; } if (staff.specialY.chordHeightAbove) { staff.top += staff.specialY.chordHeightAbove; positionY.chordHeightAbove = staff.top; } if (staff.specialY.endingHeightAbove) { if (staff.specialY.chordHeightAbove) staff.top += 2; else staff.top += staff.specialY.endingHeightAbove; positionY.endingHeightAbove = staff.top; } if (staff.specialY.dynamicHeightAbove && staff.specialY.volumeHeightAbove) { staff.top += Math.max(staff.specialY.dynamicHeightAbove, staff.specialY.volumeHeightAbove); positionY.dynamicHeightAbove = staff.top; positionY.volumeHeightAbove = staff.top; } else if (staff.specialY.dynamicHeightAbove) { staff.top += staff.specialY.dynamicHeightAbove; positionY.dynamicHeightAbove = staff.top; } else if (staff.specialY.volumeHeightAbove) { staff.top += staff.specialY.volumeHeightAbove; positionY.volumeHeightAbove = staff.top; } if (staff.specialY.partHeightAbove) { staff.top += staff.specialY.partHeightAbove; positionY.partHeightAbove = staff.top; } if (staff.specialY.tempoHeightAbove) { staff.top += staff.specialY.tempoHeightAbove; positionY.tempoHeightAbove = staff.top; } if (staff.specialY.lyricHeightBelow) { positionY.lyricHeightBelow = staff.bottom; staff.bottom -= staff.specialY.lyricHeightBelow; } if (staff.specialY.chordHeightBelow) { positionY.chordHeightBelow = staff.bottom; staff.bottom -= staff.specialY.chordHeightBelow; } if (staff.specialY.volumeHeightBelow && staff.specialY.dynamicHeightBelow) { positionY.volumeHeightBelow = staff.bottom; positionY.dynamicHeightBelow = staff.bottom; staff.bottom -= Math.max(staff.specialY.volumeHeightBelow, staff.specialY.dynamicHeightBelow); } else if (staff.specialY.volumeHeightBelow) { positionY.volumeHeightBelow = staff.bottom; staff.bottom -= staff.specialY.volumeHeightBelow; } else if (staff.specialY.dynamicHeightBelow) { positionY.dynamicHeightBelow = staff.bottom; staff.bottom -= staff.specialY.dynamicHeightBelow; } for (var j = 0; j < staff.voices.length; j++) { var voice = this.voices[staff.voices[j]]; voice.setUpperAndLowerElements(positionY); } // We might need a little space in between staves if the staves haven't been pushed far enough apart by notes or extra vertical stuff. // Only try to put in extra space if this isn't the top staff. if (lastStaffBottom !== undefined) { var thisStaffTop = staff.top - 10; var forcedSpacingBetween = lastStaffBottom + thisStaffTop; var minSpacingInPitches = renderer.spacing.systemStaffSeparation/abc_spacing.STEP; var addedSpace = minSpacingInPitches - forcedSpacingBetween; if (addedSpace > 0) staff.top += addedSpace; } lastStaffBottom = 2 - staff.bottom; // the staff starts at position 2 and the bottom variable is negative. Therefore to find out how large the bottom is, we reverse the sign of the bottom, and add the 2 in. // Now we need a little margin on the top, so we'll just throw that in. //staff.top += 4; //console.log("Staff Y: ",i,heightInPitches,staff.top,staff.bottom); } //console.log("Staff Height: ",heightInPitches,this.height); }; StaffGroupElement.prototype.finished = function() { for (var i=0;i epsilon) { othervoices.push(this.voices[i]); //console.log("out: voice ",i); } else { currentvoices.push(this.voices[i]); //if (debug) console.log("in: voice ",i); } } // among the current duration level find the one which needs starting furthest right spacingunit = 0; // number of spacingunits coming from the previously laid out element to this one var spacingduration = 0; for (i=0;ix) { x=currentvoices[i].getNextX(); spacingunit=currentvoices[i].getSpacingUnits(); spacingduration = currentvoices[i].spacingduration; } } spacingunits+=spacingunit; minspace = Math.min(minspace,spacingunit); if (debug) console.log("currentduration: ",currentduration, spacingunits, minspace); for (i=0;i0) { x = voicechildx; //update x for (var j=0;jx) { x=this.voices[i].getNextX(); spacingunit=this.voices[i].getSpacingUnits(); } } //console.log("greatest remaining",spacingunit,x); spacingunits+=spacingunit; this.w = x; for (i=0;i1) { renderer.printStem(this.startx, 0.6, topLine, bottomLine); } renderer.y = startY; }; var abc_staff_group_element = StaffGroupElement; // abc_tempo_element.js: Definition of the TempoElement class. // Copyright (C) 2014-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var TempoElement; (function() { var totalHeightInPitches = 5; TempoElement = function TempoElement(tempo, tuneNumber, createNoteHead) { this.tempo = tempo; this.tuneNumber = tuneNumber; this.tempoHeightAbove = totalHeightInPitches; this.pitch = undefined; // This will be set later if (this.tempo.duration && !this.tempo.suppressBpm) { this.note = this.createNote(createNoteHead, tempo, tuneNumber); } }; TempoElement.prototype.setUpperAndLowerElements = function(positionY) { // TODO-PER: This might not be called. this.pitch = positionY.tempoHeightAbove; this.top = positionY.tempoHeightAbove; this.bottom = positionY.tempoHeightAbove; if (this.note) { var tempoPitch = this.pitch - totalHeightInPitches + 1; // The pitch we receive is the top of the allotted area: change that to practically the bottom. this.note.top = tempoPitch; this.note.bottom = tempoPitch; for (var i = 0; i < this.note.children.length; i++) { var child = this.note.children[i]; child.top += tempoPitch; child.bottom += tempoPitch; child.pitch += tempoPitch; if (child.pitch2 !== undefined) child.pitch2 += tempoPitch; } } }; TempoElement.prototype.setX = function (x) { this.x = x; }; TempoElement.prototype.createNote = function(createNoteHead, tempo, tuneNumber) { var temposcale = 0.75; var duration = tempo.duration[0]; // TODO when multiple durations var absElem = new abc_absolute_element(tempo, duration, 1, 'tempo', tuneNumber); // There aren't an infinite number of note values, but we are passed a float, so just in case something is off upstream, // merge all of the in between points. var dot; var flag; var note; if (duration <= 1/32) { note = "noteheads.quarter"; flag = "flags.u32nd"; dot = 0; } else if (duration <= 1/16) { note = "noteheads.quarter"; flag = "flags.u16th"; dot = 0; } else if (duration <= 3/32) { note = "noteheads.quarter"; flag = "flags.u16nd"; dot = 1; } else if (duration <= 1/8) { note = "noteheads.quarter"; flag = "flags.u8th"; dot = 0; } else if (duration <= 3/16) { note = "noteheads.quarter"; flag = "flags.u8th"; dot = 1; } else if (duration <= 1/4) { note = "noteheads.quarter"; dot = 0; } else if (duration <= 3/8) { note = "noteheads.quarter"; dot = 1; } else if (duration <= 1/2) { note = "noteheads.half"; dot = 0; } else if (duration <= 3/4) { note = "noteheads.half"; dot = 1; } else if (duration <= 1) { note = "noteheads.whole"; dot = 0; } else if (duration <= 1.5) { note = "noteheads.whole"; dot = 1; } else if (duration <= 2) { note = "noteheads.dbl"; dot = 0; } else { note = "noteheads.dbl"; dot = 1; } var ret = createNoteHead(absElem, note, { verticalPos: 0}, // This is just temporary: we'll offset the vertical positioning when we get the actual vertical spot. "up", 0, 0, flag, dot, 0, temposcale, [], false ); var tempoNote = ret.notehead; absElem.addHead(tempoNote); var stem; if (note !== "noteheads.whole" && note !== "noteheads.dbl") { var p1 = 1 / 3 * temposcale; var p2 = 7 * temposcale; var dx = tempoNote.dx + tempoNote.w; var width = -0.6; stem = new abc_relative_element(null, dx, 0, p1, {"type": "stem", "pitch2": p2, linewidth: width}); absElem.addExtra(stem); } return absElem; }; TempoElement.prototype.draw = function(renderer) { var x = this.x; if (this.pitch === undefined) window.console.error("Tempo Element y-coordinate not set."); var y = renderer.calcY(this.pitch); var text; if (this.tempo.preString) { text = renderer.renderText(x, y, this.tempo.preString, 'tempofont', 'tempo', "start"); var size = renderer.getTextSize(this.tempo.preString, 'tempofont', 'tempo', text); var preWidth = size.width; var charWidth = preWidth / this.tempo.preString.length; // Just get some average number to increase the spacing. x += preWidth + charWidth; } if (this.note) { if (this.note) this.note.setX(x); for (var i = 0; i < this.note.children.length; i++) this.note.children[i].draw(renderer, x); x += (this.note.w + 5); var str = "= " + this.tempo.bpm; text = renderer.renderText(x, y, str, 'tempofont', 'tempo', "start"); size = renderer.getTextSize(str, 'tempofont', 'tempo', text); var postWidth = size.width; var charWidth2 = postWidth / str.length; // Just get some average number to increase the spacing. x += postWidth + charWidth2; } if (this.tempo.postString) { renderer.renderText(x, y, this.tempo.postString, 'tempofont', 'tempo', "start"); } }; })(); var abc_tempo_element = TempoElement; // abc_triplet_element.js: Definition of the TripletElem class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var TripletElem; (function() { TripletElem = function TripletElem(number, anchor1, options) { this.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the "beginning" of the line - after key signature) this.number = number; this.duration = (''+anchor1.parent.durationClass).replace(/\./, '-'); this.middleElems = []; // This is to calculate the highest interior pitch. It is used to make sure that the drawn bracket never crosses a really high middle note. this.flatBeams = options.flatBeams; }; TripletElem.prototype.isClosed = function() { return this.anchor2; }; TripletElem.prototype.middleNote = function(elem) { this.middleElems.push(elem); }; TripletElem.prototype.setCloseAnchor = function(anchor2) { this.anchor2 = anchor2; // TODO-PER: Unfortunately, I don't know if there is a beam above until after the vertical positioning is done, // so I don't know whether to leave room for the number above. Therefore, If there is a beam on the first note, I'll leave room just in case. if (this.anchor1.parent.beam) this.endingHeightAbove = 4; }; TripletElem.prototype.setUpperAndLowerElements = function(/*positionY*/) { }; TripletElem.prototype.layout = function() { // TODO end and beginning of line (PER: P.S. I'm not sure this can happen: I think the parser will always specify both the start and end points.) if (this.anchor1 && this.anchor2) { this.hasBeam = this.anchor1.parent.beam && this.anchor1.parent.beam === this.anchor2.parent.beam; if (this.hasBeam) { // If there is a beam then we don't need to draw anything except the text. The beam could either be above or below. var beam = this.anchor1.parent.beam; var left = beam.isAbove() ? this.anchor1.x + this.anchor1.w : this.anchor1.x; this.yTextPos = beam.heightAtMidpoint(left, this.anchor2.x); this.yTextPos += beam.isAbove() ? 3 : -2; // This creates some space between the beam and the number. this.top = this.yTextPos + 1; this.bottom = this.yTextPos - 2; if (beam.isAbove()) this.endingHeightAbove = 4; } else { // If there isn't a beam, then we need to draw the bracket and the text. The bracket is always above. // The bracket is never lower than the 'a' line, but is 4 pitches above the first and last notes. If there is // a tall note in the middle, the bracket is horizontal and above the highest note. this.startNote = Math.max(this.anchor1.parent.top, 9) + 4; this.endNote = Math.max(this.anchor2.parent.top, 9) + 4; // If it starts or ends on a rest, make the beam horizontal if (this.anchor1.parent.type === "rest" && this.anchor2.parent.type !== "rest") this.startNote = this.endNote; else if (this.anchor2.parent.type === "rest" && this.anchor1.parent.type !== "rest") this.endNote = this.startNote; // See if the middle note is really high. var max = 0; for (var i = 0; i < this.middleElems.length; i++) { max = Math.max(max, this.middleElems[i].top); } max += 4; if (max > this.startNote || max > this.endNote) { this.startNote = max; this.endNote = max; } if (this.flatBeams) { this.startNote = Math.max(this.startNote, this.endNote); this.endNote = Math.max(this.startNote, this.endNote); } this.yTextPos = this.startNote + (this.endNote - this.startNote) / 2; this.top = this.yTextPos + 1; } } delete this.middleElems; delete this.flatBeams; }; TripletElem.prototype.draw = function(renderer) { var xTextPos; if (this.hasBeam) { var left = this.anchor1.parent.beam.isAbove() ? this.anchor1.x + this.anchor1.w : this.anchor1.x; xTextPos = this.anchor1.parent.beam.xAtMidpoint(left, this.anchor2.x); } else { xTextPos = this.anchor1.x + (this.anchor2.x + this.anchor2.w - this.anchor1.x) / 2; drawBracket(renderer, this.anchor1.x, this.startNote, this.anchor2.x + this.anchor2.w, this.endNote, this.duration); } renderer.renderText(xTextPos, renderer.calcY(this.yTextPos), "" + this.number, 'tripletfont', renderer.addClasses('triplet d'+this.duration), "middle", true); }; function drawLine(renderer, l, t, r, b, duration) { var pathString = sprintf_1("M %f %f L %f %f", l, t, r, b); renderer.printPath({path: pathString, stroke: "#000000", 'class': renderer.addClasses('triplet d'+duration)}); } function drawBracket(renderer, x1, y1, x2, y2, duration) { y1 = renderer.calcY(y1); y2 = renderer.calcY(y2); var bracketHeight = 5; // Draw vertical lines at the beginning and end drawLine(renderer, x1, y1, x1, y1 + bracketHeight, duration); drawLine(renderer, x2, y2, x2, y2 + bracketHeight, duration); // figure out midpoints to draw the broken line. var midX = x1 + (x2-x1)/2; //var midY = y1 + (y2-y1)/2; var gapWidth = 8; var slope = (y2 - y1) / (x2 - x1); var leftEndX = midX - gapWidth; var leftEndY = y1 + (leftEndX - x1) * slope; drawLine(renderer, x1, y1, leftEndX, leftEndY, duration); var rightStartX = midX + gapWidth; var rightStartY = y1 + (rightStartX - x1) * slope; drawLine(renderer, rightStartX, rightStartY, x2, y2, duration); } })(); var abc_triplet_element = TripletElem; // abc_voice_element.js: Definition of the VoiceElement class. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var VoiceElement = function VoiceElement(voicenumber, voicetotal) { this.children = []; this.beams = []; this.otherchildren = []; // ties, slurs, triplets this.w = 0; this.duplicate = false; this.voicenumber = voicenumber; //number of the voice on a given stave (not staffgroup) this.voicetotal = voicetotal; this.bottom = 7; this.top = 7; this.specialY = { tempoHeightAbove: 0, partHeightAbove: 0, volumeHeightAbove: 0, dynamicHeightAbove: 0, endingHeightAbove: 0, chordHeightAbove: 0, lyricHeightAbove: 0, lyricHeightBelow: 0, chordHeightBelow: 0, volumeHeightBelow: 0, dynamicHeightBelow: 0 }; }; VoiceElement.prototype.addChild = function (child) { if (child.type === 'bar') { var firstItem = true; for (var i = 0; firstItem && i < this.children.length; i++) { if (this.children[i].type !== "staff-extra" && this.children[i].type !== "tempo") firstItem = false; } if (!firstItem) { this.beams.push("bar"); this.otherchildren.push("bar"); } } this.children[this.children.length] = child; this.setRange(child); }; VoiceElement.prototype.setLimit = function(member, child) { // Sometimes we get an absolute element in here and sometimes we get some type of relative element. // If there is a "specialY" element, then assume it is an absolute element. If that doesn't exist, look for the // same members at the top level, because that's where they are in relative elements. var specialY = child.specialY; if (!specialY) specialY = child; if (!specialY[member]) return; if (!this.specialY[member]) this.specialY[member] = specialY[member]; else this.specialY[member] = Math.max(this.specialY[member], specialY[member]); }; VoiceElement.prototype.moveDecorations = function(beam) { var padding = 1.5; // This is the vertical padding between elements, in pitches. for (var ch = 0; ch < beam.elems.length; ch++) { var child = beam.elems[ch]; if (child.top) { // We now know where the ornaments should have been placed, so move them if they would overlap. var top = beam.yAtNote(child); for (var i = 0; i < child.children.length; i++) { var el = child.children[i]; if (el.klass === 'ornament') { if (el.bottom - padding < top) { var distance = top - el.bottom + padding; // Find the distance that it needs to move and add a little margin so the element doesn't touch the beam. el.bottom += distance; el.top += distance; el.pitch += distance; top = child.top = el.top; } } } } } }; VoiceElement.prototype.adjustRange = function(child) { if (child.bottom !== undefined) this.bottom = Math.min(this.bottom, child.bottom); if (child.top !== undefined) this.top = Math.max(this.top, child.top); }; VoiceElement.prototype.setRange = function(child) { this.adjustRange(child); this.setLimit('tempoHeightAbove', child); this.setLimit('partHeightAbove', child); this.setLimit('volumeHeightAbove', child); this.setLimit('dynamicHeightAbove', child); this.setLimit('endingHeightAbove', child); this.setLimit('chordHeightAbove', child); this.setLimit('lyricHeightAbove', child); this.setLimit('lyricHeightBelow', child); this.setLimit('chordHeightBelow', child); this.setLimit('volumeHeightBelow', child); this.setLimit('dynamicHeightBelow', child); }; VoiceElement.prototype.setUpperAndLowerElements = function(positionY) { var i; for (i = 0; i < this.children.length; i++) { var abselem = this.children[i]; abselem.setUpperAndLowerElements(positionY); } for (i = 0; i < this.otherchildren.length; i++) { var abselem = this.otherchildren[i]; if (typeof abselem !== 'string') abselem.setUpperAndLowerElements(positionY); } }; VoiceElement.prototype.addOther = function (child) { this.otherchildren.push(child); this.setRange(child); }; VoiceElement.prototype.addBeam = function (child) { this.beams.push(child); }; VoiceElement.prototype.updateIndices = function () { if (!this.layoutEnded()) { this.durationindex += this.children[this.i].duration; if (this.children[this.i].type === 'bar') this.durationindex = Math.round(this.durationindex*64)/64; // everytime we meet a barline, do rounding to nearest 64th this.i++; } }; VoiceElement.prototype.layoutEnded = function () { return (this.i>=this.children.length); }; VoiceElement.prototype.getDurationIndex = function () { return this.durationindex - (this.children[this.i] && (this.children[this.i].duration>0)?0:0.0000005); // if the ith element doesn't have a duration (is not a note), its duration index is fractionally before. This enables CLEF KEYSIG TIMESIG PART, etc. to be laid out before we get to the first note of other voices }; // number of spacing units expected for next positioning VoiceElement.prototype.getSpacingUnits = function () { return Math.sqrt(this.spacingduration*8); // TODO-PER: On short lines, this would never trigger, so the spacing was wrong. I just changed this line empirically, though, so I don't know if there are other ramifications. //return (this.minx= 0; i--) { // var elem = voice.children[i]; // if (elem.abcelem.el_type === 'bar') // break; // width += elem.w; // } // return new RelativeElement(width.toFixed(2), -70, 0, undefined, {type:"debug"}); // } // return an array of AbsoluteElement AbstractEngraver.prototype.createABCElement = function(isFirstStaff, isSingleLineStaff, voice, elem) { var elemset = []; switch (elem.el_type) { case undefined: // it is undefined if we were passed an array in - an array means a set of notes that should be beamed together. elemset = this.createBeam(isSingleLineStaff, voice, elem); break; case "note": elemset[0] = this.createNote(elem, false, isSingleLineStaff, voice); if (this.triplet && this.triplet.isClosed()) { voice.addOther(this.triplet); this.triplet = null; this.tripletmultiplier = 1; } break; case "bar": elemset[0] = this.createBarLine(voice, elem, isFirstStaff); if (voice.duplicate && elemset.length > 0) elemset[0].invisible = true; // elemset[0].addChild(writeMeasureWidth(voice)); break; case "meter": elemset[0] = abc_create_time_signature(elem, this.tuneNumber); this.startlimitelem = elemset[0]; // limit ties here if (voice.duplicate && elemset.length > 0) elemset[0].invisible = true; break; case "clef": elemset[0] = abc_create_clef(elem, this.tuneNumber); if (!elemset[0]) return null; if (voice.duplicate && elemset.length > 0) elemset[0].invisible = true; break; case "key": var absKey = abc_create_key_signature(elem, this.tuneNumber); if (absKey) { elemset[0] = absKey; this.startlimitelem = elemset[0]; // limit ties here } if (voice.duplicate && elemset.length > 0) elemset[0].invisible = true; break; case "stem": this.stemdir=elem.direction; break; case "part": var abselem = new abc_absolute_element(elem,0,0, 'part', this.tuneNumber); var dim = this.renderer.getTextSize(elem.title, 'partsfont', "part"); abselem.addChild(new abc_relative_element(elem.title, 0, 0, undefined, {type:"part", height: dim.height/abc_spacing.STEP})); elemset[0] = abselem; break; case "tempo": var abselem3 = new abc_absolute_element(elem,0,0, 'tempo', this.tuneNumber); abselem3.addChild(new abc_tempo_element(elem, this.tuneNumber, createNoteHead)); elemset[0] = abselem3; break; case "style": if (elem.head === "normal") delete this.style; else this.style = elem.head; break; case "hint": hint = true; this.saveState(); break; case "midi": // This has no effect on the visible music, so just skip it. break; case "scale": this.voiceScale = elem.size; break; default: var abselem2 = new abc_absolute_element(elem,0,0, 'unsupported', this.tuneNumber); abselem2.addChild(new abc_relative_element("element type "+elem.el_type, 0, 0, undefined, {type:"debug"})); elemset[0] = abselem2; } return elemset; }; function setAveragePitch(elem) { if (elem.pitches) { sortPitch(elem); var sum = 0; for (var p = 0; p < elem.pitches.length; p++) { sum += elem.pitches[p].verticalPos; } elem.averagepitch = sum / elem.pitches.length; elem.minpitch = elem.pitches[0].verticalPos; elem.maxpitch = elem.pitches[elem.pitches.length - 1].verticalPos; } } AbstractEngraver.prototype.calcBeamDir = function (isSingleLineStaff, voice, elems) { if (this.stemdir) // If the user or voice is forcing the stem direction, we already know the answer. return this.stemdir; var beamelem = new abc_beam_element(this.stemHeight * this.voiceScale, this.stemdir, this.flatBeams); for (var i = 0; i < elems.length; i++) { beamelem.add({abcelem: elems[i]}); // This is a hack to call beam elem with just a minimum of processing: for our purposes, we don't need to construct the whole note. } var dir = beamelem.calcDir(); return dir ? "up" : "down"; }; AbstractEngraver.prototype.createBeam = function (isSingleLineStaff, voice, elems) { var abselemset = []; var dir = this.calcBeamDir(isSingleLineStaff, voice, elems); var beamelem = new abc_beam_element(this.stemHeight * this.voiceScale, dir, this.flatBeams); if (hint) beamelem.setHint(); var oldDir = this.stemdir; this.stemdir = dir; for (var i = 0; i < elems.length; i++) { var elem = elems[i]; var abselem = this.createNote(elem, true, isSingleLineStaff, voice); abselemset.push(abselem); beamelem.add(abselem); if (this.triplet && this.triplet.isClosed()) { voice.addOther(this.triplet); this.triplet = null; this.tripletmultiplier = 1; } } this.stemdir = oldDir; voice.addBeam(beamelem); return abselemset; }; var sortPitch = function(elem) { var sorted; do { sorted = true; for (var p = 0; pelem.pitches[p+1].pitch) { sorted = false; var tmp = elem.pitches[p]; elem.pitches[p] = elem.pitches[p+1]; elem.pitches[p+1] = tmp; } } } while (!sorted); }; var ledgerLines = function(abselem, minPitch, maxPitch, isRest, symbolWidth, additionalLedgers, dir, dx, scale) { for (var i=maxPitch; i>11; i--) { if (i%2===0 && !isRest) { abselem.addChild(new abc_relative_element(null, dx, (symbolWidth+4)*scale, i, {type:"ledger"})); } } for (i=minPitch; i<1; i++) { if (i%2===0 && !isRest) { abselem.addChild(new abc_relative_element(null, dx, (symbolWidth+4)*scale, i, {type:"ledger"})); } } for (i = 0; i < additionalLedgers.length; i++) { // PER: draw additional ledgers var ofs = symbolWidth; if (dir === 'down') ofs = -ofs; abselem.addChild(new abc_relative_element(null, ofs+dx, (symbolWidth+4)*scale, additionalLedgers[i], {type:"ledger"})); } }; AbstractEngraver.prototype.addGraceNotes = function (elem, voice, abselem, notehead, stemHeight, isBagpipes, roomtaken) { var gracescale = 3 / 5; var graceScaleStem = 3.5 / 5; // TODO-PER: empirically found constant. var gracebeam = null; var flag; if (elem.gracenotes.length > 1) { gracebeam = new abc_beam_element(stemHeight * graceScaleStem, "grace", isBagpipes); if (hint) gracebeam.setHint(); gracebeam.mainNote = abselem; // this gives us a reference back to the note this is attached to so that the stems can be attached somewhere. } var graceoffsets = []; for (i = elem.gracenotes.length - 1; i >= 0; i--) { // figure out where to place each gracenote roomtaken += 10; graceoffsets[i] = roomtaken; if (elem.gracenotes[i].accidental) { roomtaken += 7; } } var i; for (i = 0; i < elem.gracenotes.length; i++) { var gracepitch = elem.gracenotes[i].verticalPos; flag = (gracebeam) ? null : chartable.uflags[(isBagpipes) ? 5 : 3]; var accidentalSlot = []; var ret = createNoteHead(abselem, "noteheads.quarter", elem.gracenotes[i], "up", -graceoffsets[i], -graceoffsets[i], flag, 0, 0, gracescale*this.voiceScale, accidentalSlot, false); ret.notehead.highestVert = ret.notehead.pitch + stemHeight * graceScaleStem; var grace = ret.notehead; this.addSlursAndTies(abselem, elem.gracenotes[i], grace, voice, "up", true); abselem.addExtra(grace); // PER: added acciaccatura slash if (elem.gracenotes[i].acciaccatura) { var pos = elem.gracenotes[i].verticalPos + 7 * gracescale; // the same formula that determines the flag position. var dAcciaccatura = gracebeam ? 5 : 6; // just an offset to make it line up correctly. abselem.addRight(new abc_relative_element("flags.ugrace", -graceoffsets[i] + dAcciaccatura, 0, pos, {scalex: gracescale, scaley: gracescale})); } if (gracebeam) { // give the beam the necessary info var graceDuration = elem.gracenotes[i].duration / 2; if (isBagpipes) graceDuration /= 2; var pseudoabselem = { heads: [grace], abcelem: {averagepitch: gracepitch, minpitch: gracepitch, maxpitch: gracepitch, duration: graceDuration} }; gracebeam.add(pseudoabselem); } else { // draw the stem var p1 = gracepitch + 1 / 3 * gracescale; var p2 = gracepitch + 7 * gracescale; var dx = grace.dx + grace.w; var width = -0.6; abselem.addExtra(new abc_relative_element(null, dx, 0, p1, {"type": "stem", "pitch2": p2, linewidth: width})); } ledgerLines(abselem, gracepitch, gracepitch, false, abc_glyphs.getSymbolWidth("noteheads.quarter"), [], true, grace.dx - 1, 0.6); if (i === 0 && !isBagpipes && !(elem.rest && (elem.rest.type === "spacer" || elem.rest.type === "invisible"))) { // This is the overall slur that is under the grace notes. var isTie = (elem.gracenotes.length === 1 && grace.pitch === notehead.pitch); voice.addOther(new abc_tie_element({ anchor1: grace, anchor2: notehead, isGrace: true})); } } if (gracebeam) { voice.addBeam(gracebeam); } return roomtaken; }; function addRestToAbsElement(abselem, elem, duration, dot, isMultiVoice, stemdir, isSingleLineStaff, durlog, voiceScale) { var c; var restpitch = 7; var noteHead; var roomTaken; var roomTakenRight; if (isMultiVoice) { if (stemdir === "down") restpitch = 3; if (stemdir === "up") restpitch = 11; } // There is special placement for the percussion staff. If there is one staff line, then move the rest position. if (isSingleLineStaff) { // The half and whole rests are attached to different lines normally, so we need to tweak their position to get them to both be attached to the same one. if (duration < 0.5) restpitch = 7; else if (duration < 1) restpitch = 7; // half rest else restpitch = 5; // whole rest } switch (elem.rest.type) { case "whole": c = chartable.rest[0]; elem.averagepitch = restpitch; elem.minpitch = restpitch; elem.maxpitch = restpitch; dot = 0; break; case "rest": if (elem.style === "rhythm") // special case for rhythm: rests are a handy way to express the rhythm. c = chartable.rhythm[-durlog]; else c = chartable.rest[-durlog]; elem.averagepitch = restpitch; elem.minpitch = restpitch; elem.maxpitch = restpitch; break; case "invisible": case "spacer": c = ""; elem.averagepitch = restpitch; elem.minpitch = restpitch; elem.maxpitch = restpitch; break; case "multimeasure": c = chartable.rest['multi']; elem.averagepitch = restpitch; elem.minpitch = restpitch; elem.maxpitch = restpitch; dot = 0; var mmWidth = abc_glyphs.getSymbolWidth(c); abselem.addHead(new abc_relative_element(c, -mmWidth, mmWidth * 2, 7)); var numMeasures = new abc_relative_element("" + elem.duration, 0, mmWidth, 16, {type: "multimeasure-text"}); abselem.addExtra(numMeasures); } if (elem.rest.type !== "multimeasure") { var ret = createNoteHead(abselem, c, {verticalPos: restpitch}, null, 0, 0, null, dot, 0, voiceScale, [], false); noteHead = ret.notehead; if (noteHead) { abselem.addHead(noteHead); roomTaken = ret.accidentalshiftx; roomTakenRight = ret.dotshiftx; } } return { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight }; } function addIfNotExist(arr, item) { for (var i = 0; i < arr.length; i++) { if (JSON.stringify(arr[i]) === JSON.stringify(item)) return; } arr.push(item); } AbstractEngraver.prototype.addNoteToAbcElement = function(abselem, elem, dot, stemdir, style, zeroDuration, durlog, nostem, voice) { var dotshiftx = 0; // room taken by chords with displaced noteheads which cause dots to shift var noteHead; var roomTaken = 0; var roomTakenRight = 0; var min; var i; var additionalLedgers = []; // The accidentalSlot will hold a list of all the accidentals on this chord. Each element is a vertical place, // and contains a pitch, which is the last pitch that contains an accidental in that slot. The slots are numbered // from closest to the note to farther left. We only need to know the last accidental we placed because // we know that the pitches are sorted by now. var accidentalSlot = []; var symbolWidth = 0; var dir = (elem.averagepitch>=6) ? "down": "up"; if (stemdir) dir=stemdir; style = elem.style ? elem.style : style; // get the style of note head. if (!style || style === "normal") style = "note"; var noteSymbol; if (zeroDuration) noteSymbol = chartable[style].nostem; else noteSymbol = chartable[style][-durlog]; if (!noteSymbol) console.log("noteSymbol:", style, durlog, zeroDuration); // determine elements of chords which should be shifted var p; for (p=(dir==="down")?elem.pitches.length-2:1; (dir==="down")?p>=0:p 11 || curr.verticalPos < 1) { // PER: add extra ledger line additionalLedgers.push(curr.verticalPos - (curr.verticalPos%2)); } if (dir==="down") { roomTaken = abc_glyphs.getSymbolWidth(noteSymbol)+2; } else { dotshiftx = abc_glyphs.getSymbolWidth(noteSymbol)+2; } } } var pp = elem.pitches.length; for (p=0; p 0) noteHead.bottom = noteHead.bottom - 1; // If there is a tie to the grace notes, leave a little more room for the note to avoid collisions. abselem.addHead(noteHead); } roomTaken += ret.accidentalshiftx; roomTakenRight = Math.max(roomTakenRight,ret.dotshiftx); } // draw stem from the furthest note to a pitch above/below the stemmed note if (hasStem) { var stemHeight = 7 * this.voiceScale; var p1 = (dir==="down") ? elem.minpitch-stemHeight : elem.minpitch+1/3; // PER added stemdir test to make the line meet the note. if (p1>6 && !stemdir) p1=6; var p2 = (dir==="down") ? elem.maxpitch-1/3 : elem.maxpitch+stemHeight; // PER added stemdir test to make the line meet the note. if (p2<6 && !stemdir) p2=6; var dx = (dir==="down" || abselem.heads.length === 0)?0:abselem.heads[0].w; var width = (dir==="down")?1:-1; // TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated: if (noteHead.c === 'noteheads.slash.quarter') { if (dir === 'down') p2 -= 1; else p1 += 1; } abselem.addExtra(new abc_relative_element(null, dx, 0, p1, {"type": "stem", "pitch2":p2, linewidth: width})); //var RelativeElement = function RelativeElement(c, dx, w, pitch, opt) { min = Math.min(p1, p2); } return { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight, min: min, additionalLedgers: additionalLedgers, dir: dir, symbolWidth: symbolWidth }; }; AbstractEngraver.prototype.addLyric = function(abselem, elem) { var lyricStr = ""; abc_common.each(elem.lyric, function(ly) { var div = ly.divider === ' ' ? "" : ly.divider; lyricStr += ly.syllable + div + "\n"; }); var lyricDim = this.renderer.getTextSize(lyricStr, 'vocalfont', "lyric"); var position = elem.positioning ? elem.positioning.vocalPosition : 'below'; abselem.addCentered(new abc_relative_element(lyricStr, 0, lyricDim.width, undefined, {type:"lyric", position: position, height: lyricDim.height / abc_spacing.STEP })); }; AbstractEngraver.prototype.addChord = function(abselem, elem, roomTaken, roomTakenRight) { var chordMargin = 8; // If there are chords next to each other, this is how close they can get. for (var i = 0; i < elem.chord.length; i++) { var x = 0; var y; var dim = this.renderer.getTextSize(elem.chord[i].name, 'annotationfont', "annotation"); var chordWidth = dim.width; var chordHeight = dim.height / abc_spacing.STEP; switch (elem.chord[i].position) { case "left": roomTaken+=chordWidth+7; x = -roomTaken; // TODO-PER: This is just a guess from trial and error y = elem.averagepitch; abselem.addExtra(new abc_relative_element(elem.chord[i].name, x, chordWidth+4, y, {type:"text", height: chordHeight})); break; case "right": roomTakenRight+=4; x = roomTakenRight;// TODO-PER: This is just a guess from trial and error y = elem.averagepitch; abselem.addRight(new abc_relative_element(elem.chord[i].name, x, chordWidth+4, y, {type:"text", height: chordHeight})); break; case "below": // setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is. abselem.addRight(new abc_relative_element(elem.chord[i].name, 0, chordWidth+chordMargin, undefined, {type: "text", position: "below", height: chordHeight})); break; case "above": // setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is. abselem.addRight(new abc_relative_element(elem.chord[i].name, 0, chordWidth+chordMargin, undefined, {type: "text", height: chordHeight})); break; default: if (elem.chord[i].rel_position) { var relPositionY = elem.chord[i].rel_position.y + 3*abc_spacing.STEP; // TODO-PER: this is a fudge factor to make it line up with abcm2ps abselem.addChild(new abc_relative_element(elem.chord[i].name, x + elem.chord[i].rel_position.x, 0, elem.minpitch + relPositionY / abc_spacing.STEP, {type: "text", height: chordHeight})); } else { // setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is. var pos2 = 'above'; if (elem.positioning && elem.positioning.chordPosition) pos2 = elem.positioning.chordPosition; dim = this.renderer.getTextSize(elem.chord[i].name, 'gchordfont', "chord"); chordHeight = dim.height / abc_spacing.STEP; chordWidth = dim.width; // Since the chord is centered, we only use half the width. abselem.addCentered(new abc_relative_element(elem.chord[i].name, x, chordWidth, undefined, {type: "chord", position: pos2, height: chordHeight })); } } } return { roomTaken: roomTaken, roomTakenRight: roomTakenRight }; }; AbstractEngraver.prototype.createNote = function(elem, nostem, isSingleLineStaff, voice) { //stem presence: true for drawing stemless notehead var notehead = null; var roomtaken = 0; // room needed to the left of the note var roomtakenright = 0; // room needed to the right of the note var symbolWidth = 0; var additionalLedgers = []; // PER: handle the case of [bc'], where the b doesn't have a ledger line var dir; var duration = getDuration(elem); var zeroDuration = false; if (duration === 0) { zeroDuration = true; duration = 0.25; nostem = true; } //PER: zero duration will draw a quarter note head. var durlog = Math.floor(Math.log(duration)/Math.log(2)); //TODO use getDurlog var dot=0; for (var tot = Math.pow(2,durlog), inc=tot/2; tot 1, this.stemdir, isSingleLineStaff, durlog, this.voiceScale); notehead = ret1.noteHead; roomtaken = ret1.roomTaken; roomtakenright = ret1.roomTakenRight; } else { var ret2 = this.addNoteToAbcElement(abselem, elem, dot, this.stemdir, this.style, zeroDuration, durlog, nostem, voice); if (ret2.min !== undefined) this.minY = Math.min(ret2.min, this.minY); notehead = ret2.noteHead; roomtaken = ret2.roomTaken; roomtakenright = ret2.roomTakenRight; additionalLedgers = ret2.additionalLedgers; dir = ret2.dir; symbolWidth = ret2.symbolWidth; } if (elem.lyric !== undefined) { this.addLyric(abselem, elem); } if (elem.gracenotes !== undefined) { roomtaken += this.addGraceNotes(elem, voice, abselem, notehead, this.stemHeight * this.voiceScale, this.isBagpipes, roomtaken); } if (elem.decoration) { this.decoration.createDecoration(voice, elem.decoration, abselem.top, (notehead)?notehead.w:0, abselem, roomtaken, dir, abselem.bottom, elem.positioning, this.hasVocals); } if (elem.barNumber) { abselem.addChild(new abc_relative_element(elem.barNumber, -10, 0, 0, {type:"barNumber"})); } // ledger lines ledgerLines(abselem, elem.minpitch, elem.maxpitch, elem.rest, symbolWidth, additionalLedgers, dir, -2, 1); if (elem.chord !== undefined) { var ret3 = this.addChord(abselem, elem, roomtaken, roomtakenright); roomtaken = ret3.roomTaken; roomtakenright = ret3.roomTakenRight; } if (elem.startTriplet) { this.triplet = new abc_triplet_element(elem.startTriplet, notehead, { flatBeams: this.flatBeams }); // above is opposite from case of slurs } if (elem.endTriplet && this.triplet) { this.triplet.setCloseAnchor(notehead); } if (this.triplet && !elem.startTriplet && !elem.endTriplet) { this.triplet.middleNote(notehead); } return abselem; }; var createNoteHead = function(abselem, c, pitchelem, dir, headx, extrax, flag, dot, dotshiftx, scale, accidentalSlot, shouldExtendStem) { // TODO scale the dot as well var pitch = pitchelem.verticalPos; var notehead; var accidentalshiftx = 0; var newDotShiftX = 0; var extraLeft = 0; if (c === undefined) abselem.addChild(new abc_relative_element("pitch is undefined", 0, 0, 0, {type:"debug"})); else if (c==="") { notehead = new abc_relative_element(null, 0, 0, pitch); } else { var shiftheadx = headx; if (pitchelem.printer_shift) { var adjust = (pitchelem.printer_shift==="same")?1:0; shiftheadx = (dir==="down")?-abc_glyphs.getSymbolWidth(c)*scale+adjust:abc_glyphs.getSymbolWidth(c)*scale-adjust; } var opts = {scalex:scale, scaley: scale, thickness: abc_glyphs.symbolHeightInPitches(c)*scale }; notehead = new abc_relative_element(c, shiftheadx, abc_glyphs.getSymbolWidth(c)*scale, pitch, opts); notehead.stemDir = dir; if (flag) { var pos = pitch+((dir==="down")?-7:7)*scale; // if this is a regular note, (not grace or tempo indicator) then the stem will have been stretched to the middle line if it is far from the center. if (shouldExtendStem) { if (dir==="down" && pos > 6) pos = 6; if (dir==="up" && pos < 6) pos = 6; } //if (scale===1 && (dir==="down")?(pos>6):(pos<6)) pos=6; var xdelta = (dir==="down")?headx:headx+notehead.w-0.6; abselem.addRight(new abc_relative_element(flag, xdelta, abc_glyphs.getSymbolWidth(flag)*scale, pos, {scalex:scale, scaley: scale})); } newDotShiftX = notehead.w+dotshiftx-2+5*dot; for (;dot>0;dot--) { var dotadjusty = (1-Math.abs(pitch)%2); //PER: take abs value of the pitch. And the shift still happens on ledger lines. abselem.addRight(new abc_relative_element("dots.dot", notehead.w+dotshiftx-2+5*dot, abc_glyphs.getSymbolWidth("dots.dot"), pitch+dotadjusty)); } } if (notehead) notehead.highestVert = pitchelem.highestVert; if (pitchelem.accidental) { var symb; switch (pitchelem.accidental) { case "quartersharp": symb = "accidentals.halfsharp"; break; case "dblsharp": symb = "accidentals.dblsharp"; break; case "sharp": symb = "accidentals.sharp"; break; case "quarterflat": symb = "accidentals.halfflat"; break; case "flat": symb = "accidentals.flat"; break; case "dblflat": symb = "accidentals.dblflat"; break; case "natural": symb = "accidentals.nat"; } // if a note is at least a sixth away, it can share a slot with another accidental var accSlotFound = false; var accPlace = extrax; for (var j = 0; j < accidentalSlot.length; j++) { if (pitch - accidentalSlot[j][0] >= 6) { accidentalSlot[j][0] = pitch; accPlace = accidentalSlot[j][1]; accSlotFound = true; break; } } if (accSlotFound === false) { accPlace -= (abc_glyphs.getSymbolWidth(symb)*scale+2); accidentalSlot.push([pitch,accPlace]); accidentalshiftx = (abc_glyphs.getSymbolWidth(symb)*scale+2); } abselem.addExtra(new abc_relative_element(symb, accPlace, abc_glyphs.getSymbolWidth(symb), pitch, {scalex:scale, scaley: scale})); extraLeft = abc_glyphs.getSymbolWidth(symb) / 2; // TODO-PER: We need a little extra width if there is an accidental, but I'm not sure why it isn't the full width of the accidental. } return { notehead: notehead, accidentalshiftx: accidentalshiftx, dotshiftx: newDotShiftX, extraLeft: extraLeft }; }; AbstractEngraver.prototype.addSlursAndTies = function(abselem, pitchelem, notehead, voice, dir, isGrace) { if (pitchelem.endTie) { if (this.ties.length > 0) { // If there are multiple open ties, find the one that applies by matching the pitch, if possible. var found = false; for (var j = 0; j < this.ties.length; j++) { if (this.ties[j].anchor1 && this.ties[j].anchor1.pitch === notehead.pitch) { this.ties[j].setEndAnchor(notehead); this.ties.splice(j, 1); found = true; break; } } if (!found) { this.ties[0].setEndAnchor(notehead); this.ties.splice(0, 1); } } } var voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber; if (pitchelem.startTie) { var tie = new abc_tie_element({ anchor1: notehead, force: (this.stemdir==="down" || this.stemdir==="up"), stemDir: this.stemdir, isGrace: isGrace, voiceNumber: voiceNumber}); if (hint) tie.setHint(); this.ties[this.ties.length]=tie; voice.addOther(tie); // HACK-PER: For the animation, we need to know if a note is tied to the next one, so here's a flag. // Unfortunately, only some of the notes in the current event might be tied, but this will consider it // tied if any one of them is. That will work for most cases. abselem.startTie = true; } if (pitchelem.endSlur) { for (var i=0; i= 0) debugger; el.setAttributeNS(null, key, attr[key]); } } this.append(el); return el; }; Svg.prototype.text = function(text, attr, target) { var el = document.createElementNS(svgNS, 'text'); for (var key in attr) { if (attr.hasOwnProperty(key)) { el.setAttribute(key, attr[key]); } } var lines = (""+text).split("\n"); for (var i = 0; i < lines.length; i++) { var line = document.createElementNS(svgNS, 'tspan'); line.textContent = lines[i]; line.setAttribute("x", attr.x ? attr.x : 0); if (i !== 0) line.setAttribute("dy", "1.2em"); el.appendChild(line); } if (target) target.appendChild(el); else this.append(el); return el; }; Svg.prototype.guessWidth = function(text, attr) { var svg = this.createDummySvg(); var el = this.text(text, attr, svg); var size; try { size = el.getBBox(); if (isNaN(size.height) || !size.height) // TODO-PER: I don't think this can happen unless there isn't a browser at all. size = { width: attr['font-size']/2, height: attr['font-size'] + 2 }; // Just a wild guess. else size = {width: size.width, height: size.height}; } catch (ex) { size = { width: attr['font-size']/2, height: attr['font-size'] + 2 }; // Just a wild guess. } svg.removeChild(el); return size; }; Svg.prototype.createDummySvg = function() { if (!this.dummySvg) { this.dummySvg = createSvg(); var styles = [ "display: block !important;", "height: 1px;", "width: 1px;", "position: absolute;" ]; this.dummySvg.setAttribute('style', styles.join("")); var body = document.querySelector('body'); body.appendChild(this.dummySvg); } return this.dummySvg; }; Svg.prototype.getTextSize = function(text, attr, el) { if (typeof text === 'number') text = ''+text; if (!text || text.match(/^\s+$/)) return { width: 0, height: 0 }; var removeLater = !el; if (!el) el = this.text(text, attr); var size; try { size = el.getBBox(); if (isNaN(size.height) || !size.height) size = this.guessWidth(text, attr); else size = {width: size.width, height: size.height}; } catch (ex) { size = this.guessWidth(text, attr); } if (removeLater) { if (this.currentGroup) this.currentGroup.removeChild(el); else this.svg.removeChild(el); } return size; }; Svg.prototype.openGroup = function(options) { options = options ? options : {}; var el = document.createElementNS(svgNS, "g"); if (options.prepend) this.svg.insertBefore(el, this.svg.firstChild); else this.svg.appendChild(el); this.currentGroup = el; return el; }; Svg.prototype.closeGroup = function() { var g = this.currentGroup; this.currentGroup = null; return g; }; Svg.prototype.path = function(attr) { var el = document.createElementNS(svgNS, "path"); for (var key in attr) { if (attr.hasOwnProperty(key)) { if (key === 'path') el.setAttributeNS(null, 'd', attr.path); else el.setAttributeNS(null, key, attr[key]); } } this.append(el); return el; }; Svg.prototype.pathToBack = function(attr) { var el = document.createElementNS(svgNS, "path"); for (var key in attr) { if (attr.hasOwnProperty(key)) { if (key === 'path') el.setAttributeNS(null, 'd', attr.path); else el.setAttributeNS(null, key, attr[key]); } } this.prepend(el); return el; }; Svg.prototype.append = function(el) { if (this.currentGroup) this.currentGroup.appendChild(el); else this.svg.appendChild(el); }; Svg.prototype.prepend = function(el) { // The entire group is prepended, so don't prepend the individual elements. if (this.currentGroup) this.currentGroup.appendChild(el); else this.svg.insertBefore(el, this.svg.firstChild); }; Svg.prototype.setAttributeOnElement = function(el, attr) { for (var key in attr) { if (attr.hasOwnProperty(key)) { el.setAttributeNS(null, key, attr[key]); } } }; function createSvg() { var svg = document.createElementNS(svgNS, "svg"); svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); svg.setAttribute('role', 'img'); // for accessibility return svg; } var svg = Svg; // abc_renderer.js: API to render to SVG/Raphael/whatever rendering engine // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /*global Math, console */ /** * Implements the API for rendering ABCJS Abstract Rendering Structure to a canvas/paper (e.g. SVG, Raphael, etc) * @param {Object} paper * @param {bool} doRegression */ var Renderer = function(paper, doRegression, shouldAddClasses) { this.paper = new svg(paper); this.controller = null; //TODO-GD only used when drawing the ABCJS ARS to connect the controller with the elements for highlighting this.space = 3*abc_spacing.SPACE; this.padding = {}; // renderer's padding is managed by the controller this.doRegression = doRegression; this.shouldAddClasses = shouldAddClasses; if (this.doRegression) this.regressionLines = []; this.reset(); }; Renderer.prototype.reset = function() { this.paper.clear(); this.y = 0; this.abctune = null; this.lastM = null; this.ingroup = false; this.path = null; this.isPrint = false; this.initVerticalSpace(); if (this.doRegression) this.regressionLines = []; // HACK-PER: There was a problem in Raphael where every path string that was sent to it was cached. // That was causing the browser's memory to steadily grow until the browser went slower and slower until // it crashed. The fix to that was a patch to Raphael, so it is only patched on the versions of this library that // bundle Raphael with it. Also, if Raphael gets an update, then that patch will be lost. On version 2.1.2 of Raphael, // the patch is on line 1542 and 1545 and it is: // p[ps].sleep = 1; }; Renderer.prototype.newTune = function(abcTune) { this.abctune = abcTune; // TODO-PER: this is just to get the font info. this.setVerticalSpace(abcTune.formatting); this.measureNumber = null; this.noteNumber = null; this.setPrintMode(abcTune.media === 'print'); this.setPadding(abcTune); }; Renderer.prototype.createElemSet = function() { return this.paper.openGroup(); }; Renderer.prototype.closeElemSet = function() { return this.paper.closeGroup(); }; /** * Set whether we are formatting this for the screen, or as a preview for creating a PDF version. * @param {bool} isPrint */ Renderer.prototype.setPrintMode = function (isPrint) { this.isPrint = isPrint; }; /** * Set the size of the canvas. * @param {object} maxwidth * @param {object} scale */ Renderer.prototype.setPaperSize = function (maxwidth, scale, responsive) { var w = (maxwidth+this.padding.right)*scale; var h = (this.y+this.padding.bottom)*scale; if (this.isPrint) h = Math.max(h, 1056); // 11in x 72pt/in x 1.33px/pt // TODO-PER: We are letting the page get as long as it needs now, but eventually that should go to a second page. if (this.doRegression) this.regressionLines.push("PAPER SIZE: ("+w+","+h+")"); // for accessibility var text = "Sheet Music"; if (this.abctune && this.abctune.metaText && this.abctune.metaText.title) text += " for \"" + this.abctune.metaText.title + '"'; this.paper.setTitle(text); var parentStyles = { overflow: "hidden" }; if (responsive === 'resize') { this.paper.setResponsiveWidth(w, h); } else { parentStyles.width = ""; parentStyles.height = h + "px"; if (scale < 1) { parentStyles.width = w + "px"; this.paper.setSize(w / scale, h / scale); } else this.paper.setSize(w, h); } this.paper.setScale(scale); this.paper.setParentStyles(parentStyles); }; /** * Set the padding * @param {object} params */ Renderer.prototype.setPaddingOverride = function(params) { this.paddingOverride = { top: params.paddingtop, bottom: params.paddingbottom, right: params.paddingright, left: params.paddingleft }; }; /** * Set the padding * @param {object} params */ Renderer.prototype.setPadding = function(abctune) { // If the padding is set in the tune, then use that. // Otherwise, if the padding is set in the override, use that. // Otherwise, use the defaults (there are a different set of defaults for screen and print.) function setPaddingVariable(self, paddingKey, formattingKey, printDefault, screenDefault) { if (abctune.formatting[formattingKey] !== undefined) self.padding[paddingKey] = abctune.formatting[formattingKey]; else if (self.paddingOverride[paddingKey] !== undefined) self.padding[paddingKey] = self.paddingOverride[paddingKey]; else if (self.isPrint) self.padding[paddingKey] = printDefault; else self.padding[paddingKey] = screenDefault; } // 1cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 38px // 1.8cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 68px setPaddingVariable(this, 'top', 'topmargin', 38, 15); setPaddingVariable(this, 'bottom', 'botmargin', 38, 15); setPaddingVariable(this, 'left', 'leftmargin', 68, 15); setPaddingVariable(this, 'right', 'rightmargin', 68, 15); }; /** * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling. * @param {float} scale */ Renderer.prototype.adjustNonScaledItems = function (scale) { this.padding.top /= scale; this.padding.bottom /= scale; this.padding.left /= scale; this.padding.right /= scale; this.abctune.formatting.headerfont.size /= scale; this.abctune.formatting.footerfont.size /= scale; }; /** * Set the the values for all the configurable vertical space options. */ Renderer.prototype.initVerticalSpace = function() { // conversion: 37.7953 = conversion factor for cm to px. // All of the following values are in px. this.spacing = { composer: 7.56, // Set the vertical space above the composer. graceBefore: 8.67, // Define the space before, inside and after the grace notes. graceInside: 10.67, graceAfter: 16, info: 0, // Set the vertical space above the infoline. lineSkipFactor: 1.1, // Set the factor for spacing between lines of text. (multiply this by the font size) music: 7.56, // Set the vertical space above the first staff. paragraphSkipFactor: 0.4, // Set the factor for spacing between text paragraphs. (multiply this by the font size) parts: 11.33, // Set the vertical space above a new part. slurHeight: 1.0, // Set the slur height factor. staffSeparation: 61.33, // Do not put a staff system closer than from the previous system. stemHeight: 26.67+10, // Set the stem height. subtitle: 3.78, // Set the vertical space above the subtitle. systemStaffSeparation: 48, // Do not place the staves closer than inside a system. * This values applies to all staves when in the tune header. Otherwise, it applies to the next staff text: 18.9, // Set the vertical space above the history. title: 7.56, // Set the vertical space above the title. top: 30.24, //Set the vertical space above the tunes and on the top of the continuation pages. vocal: 30.67, // Set the vertical space above the lyrics under the staves. words: 0 // Set the vertical space above the lyrics at the end of the tune. }; /* TODO-PER: Handle the x-coordinate spacing items, too. maxshrink Default: 0.65 Set how much to compress horizontally when music line breaks are automatic. must be between 0 (natural spacing) and 1 (max shrinking). // This next value is used to compute the natural spacing of // the notes. The base spacing of the crotchet is always // 40 pts. When the duration of a note type is twice the // duration of an other note type, its spacing is multiplied // by this factor. // The default value causes the note spacing to be multiplied // by 2 when its duration is multiplied by 4, i.e. the // space of the semibreve is 80 pts and the space of the // semiquaver is 20 pts. // Setting this value to 1 sets all note spacing to 40 pts. noteSpacingFactor: 1.414, // Set the note spacing factor to (range 1..2). scale Default: 0.75 Set the page scale factor. Note that the header and footer are not scaled. stretchlast Default: 0.8 Stretch the last music line of a tune when it exceeds the fraction of the page width. range is 0.0 to 1.0. */ }; Renderer.prototype.setVerticalSpace = function(formatting) { // conversion from pts to px 4/3 if (formatting.staffsep !== undefined) this.spacing.staffSeparation = formatting.staffsep *4/3; if (formatting.composerspace !== undefined) this.spacing.composer = formatting.composerspace *4/3; if (formatting.partsspace !== undefined) this.spacing.parts = formatting.partsspace *4/3; if (formatting.textspace !== undefined) this.spacing.text = formatting.textspace *4/3; if (formatting.musicspace !== undefined) this.spacing.music = formatting.musicspace *4/3; if (formatting.titlespace !== undefined) this.spacing.title = formatting.titlespace *4/3; if (formatting.sysstaffsep !== undefined) this.spacing.systemStaffSeparation = formatting.sysstaffsep *4/3; if (formatting.subtitlespace !== undefined) this.spacing.subtitle = formatting.subtitlespace *4/3; if (formatting.topspace !== undefined) this.spacing.top = formatting.topspace *4/3; if (formatting.vocalspace !== undefined) this.spacing.vocal = formatting.vocalspace *4/3; if (formatting.wordsspace !== undefined) this.spacing.words = formatting.wordsspace *4/3; }; /** * Leave space at the top of the paper * @param {object} abctune */ Renderer.prototype.topMargin = function(abctune) { this.moveY(this.padding.top); }; /** * Leave space before printing the music */ Renderer.prototype.addMusicPadding = function() { this.moveY(this.spacing.music); }; /** * Leave space before printing a staff system */ Renderer.prototype.addStaffPadding = function(lastStaffGroup, thisStaffGroup) { var lastStaff = lastStaffGroup.staffs[lastStaffGroup.staffs.length-1]; var lastBottomLine = -(lastStaff.bottom - 2); // The 2 is because the scale goes to 2 below the last line. var nextTopLine = thisStaffGroup.staffs[0].top - 10; // Because 10 represents the top line. var naturalSeparation = nextTopLine + lastBottomLine; // This is how far apart they'd be without extra spacing var separationInPixels = naturalSeparation * abc_spacing.STEP; if (separationInPixels < this.spacing.staffSeparation) this.moveY(this.spacing.staffSeparation-separationInPixels); }; /** * Text that goes above the score * @param {number} width * @param {object} abctune */ Renderer.prototype.engraveTopText = function(width, abctune) { if (abctune.metaText.header && this.isPrint) { // Note: whether there is a header or not doesn't change any other positioning, so this doesn't change the Y-coordinate. // This text goes above the margin, so we'll temporarily move up. var headerTextHeight = this.getTextSize("XXXX", "headerfont", 'abcjs-header abcjs-meta-top').height; this.y -=headerTextHeight; this.outputTextIf(this.padding.left, abctune.metaText.header.left, 'headerfont', 'header meta-top', 0, null, 'start'); this.outputTextIf(this.padding.left + width / 2, abctune.metaText.header.center, 'headerfont', 'header meta-top', 0, null, 'middle'); this.outputTextIf(this.padding.left + width, abctune.metaText.header.right, 'headerfont', 'header meta-top', 0, null, 'end'); this.y += headerTextHeight; } if (this.isPrint) this.moveY(this.spacing.top); this.outputTextIf(this.padding.left + width / 2, abctune.metaText.title, 'titlefont', 'title meta-top', this.spacing.title, 0, 'middle'); if (abctune.lines[0]) this.outputTextIf(this.padding.left + width / 2, abctune.lines[0].subtitle, 'subtitlefont', 'text meta-top', this.spacing.subtitle, 0, 'middle'); if (abctune.metaText.rhythm || abctune.metaText.origin || abctune.metaText.composer) { this.moveY(this.spacing.composer); var rSpace = this.outputTextIf(this.padding.left, abctune.metaText.rhythm, 'infofont', 'meta-top', 0, null, "start"); var composerLine = ""; if (abctune.metaText.composer) composerLine += abctune.metaText.composer; if (abctune.metaText.origin) composerLine += ' (' + abctune.metaText.origin + ')'; if (composerLine.length > 0) { var space = this.outputTextIf(this.padding.left + width, composerLine, 'composerfont', 'meta-top', 0, null, "end"); this.moveY(space[1]); } else { this.moveY(rSpace[1]); } // TODO-PER: The following is a hack to make the elements line up with abcm2ps. Don't know where the extra space is coming from. this.moveY(-6); //} else if (this.isPrint) { // // abcm2ps adds this space whether there is anything to write or not. // this.moveY(this.spacing.composer); // var space2 = this.getTextSize("M", 'composerfont', 'meta-top'); // this.moveY(space2.height); } this.outputTextIf(this.padding.left + width, abctune.metaText.author, 'composerfont', 'meta-top', 0, 0, "end"); //this.skipSpaceY(); this.outputTextIf(this.padding.left, abctune.metaText.partOrder, 'partsfont', 'meta-bottom', 0, 0, "start"); }; /** * Text that goes below the score * @param {number} width * @param {object} abctune */ Renderer.prototype.engraveExtraText = function(width, abctune) { this.lineNumber = null; this.measureNumber = null; this.noteNumber = null; this.voiceNumber = null; if (abctune.metaText.unalignedWords) { var hash = this.getFontAndAttr("wordsfont", 'meta-bottom'); var space = this.getTextSize("i", 'wordsfont', 'meta-bottom'); if (abctune.metaText.unalignedWords.length > 0) this.moveY(this.spacing.words, 1); for (var j = 0; j < abctune.metaText.unalignedWords.length; j++) { if (abctune.metaText.unalignedWords[j] === '') this.moveY(hash.font.size, 1); else if (typeof abctune.metaText.unalignedWords[j] === 'string') { this.outputTextIf(this.padding.left + abc_spacing.INDENT, abctune.metaText.unalignedWords[j], 'wordsfont', 'meta-bottom', 0, 0, "start"); } else { var largestY = 0; var offsetX = 0; for (var k = 0; k < abctune.metaText.unalignedWords[j].length; k++) { var thisWord = abctune.metaText.unalignedWords[j][k]; var type = (thisWord.font) ? thisWord.font : "wordsfont"; var el = this.renderText(this.padding.left + abc_spacing.INDENT + offsetX, this.y, thisWord.text, type, 'meta-bottom', false); var size = this.getTextSize(thisWord.text, type, 'meta-bottom'); largestY = Math.max(largestY, size.height); offsetX += size.width; // If the phrase ends in a space, then that is not counted in the width, so we need to add that in ourselves. if (thisWord.text[thisWord.text.length-1] === ' ') { offsetX += space.width; } } this.moveY(largestY, 1); } } if (abctune.metaText.unalignedWords.length > 0) this.moveY(hash.font.size, 2); } var extraText = ""; if (abctune.metaText.book) extraText += "Book: " + abctune.metaText.book + "\n"; if (abctune.metaText.source) extraText += "Source: " + abctune.metaText.source + "\n"; if (abctune.metaText.discography) extraText += "Discography: " + abctune.metaText.discography + "\n"; if (abctune.metaText.notes) extraText += "Notes: " + abctune.metaText.notes + "\n"; if (abctune.metaText.transcription) extraText += "Transcription: " + abctune.metaText.transcription + "\n"; if (abctune.metaText.history) extraText += "History: " + abctune.metaText.history + "\n"; if (abctune.metaText['abc-copyright']) extraText += "Copyright: " + abctune.metaText['abc-copyright'] + "\n"; if (abctune.metaText['abc-creator']) extraText += "Creator: " + abctune.metaText['abc-creator'] + "\n"; if (abctune.metaText['abc-edited-by']) extraText += "Edited By: " + abctune.metaText['abc-edited-by'] + "\n"; this.outputTextIf(this.padding.left, extraText, 'historyfont', 'meta-bottom', this.spacing.info, 0, "start"); if (abctune.metaText.footer && this.isPrint) { // Note: whether there is a footer or not doesn't change any other positioning, so this doesn't change the Y-coordinate. this.outputTextIf(this.padding.left, abctune.metaText.footer.left, 'footerfont', 'header meta-bottom', 0, null, 'start'); this.outputTextIf(this.padding.left + width / 2, abctune.metaText.footer.center, 'footerfont', 'header meta-bottom', 0, null, 'middle'); this.outputTextIf(this.padding.left + width, abctune.metaText.footer.right, 'footerfont', 'header meta-bottom', 0, null, 'end'); } }; /** * Output text defined with %%text. * @param {array or string} text */ Renderer.prototype.outputFreeText = function (text, vskip) { if (vskip) this.moveY(vskip); var hash = this.getFontAndAttr('textfont', 'defined-text'); if (text === "") { // we do want to print out blank lines if they have been specified. this.moveY(hash.attr['font-size'] * 2); // move the distance of the line, plus the distance of the margin, which is also one line. } else if (typeof text === 'string') { this.moveY(hash.attr['font-size']/2); // TODO-PER: move down some - the y location should be the top of the text, but we output text specifying the center line. this.outputTextIf(this.padding.left, text, 'textfont', 'defined-text', 0, 0, "start"); } else { var str = ""; var isCentered = false; // The structure is wrong here: it requires an array to do centering, but it shouldn't have. for (var i = 0; i < text.length; i++) { if (text[i].font) str += "FONT(" + text[i].font + ")"; str += text[i].text; if (text[i].center) isCentered = true; } var alignment = isCentered ? 'middle' : 'start'; var x = isCentered ? this.controller.width / 2 : this.padding.left; this.outputTextIf(x, str, 'textfont', 'defined-text', 0, 1, alignment); } }; Renderer.prototype.outputSeparator = function (separator) { if (!separator.lineLength) return; this.moveY(separator.spaceAbove); this.printSeparator(separator.lineLength); this.moveY(separator.spaceBelow); }; /** * Output an extra subtitle that is defined later in the tune. */ Renderer.prototype.outputSubtitle = function (width, subtitle) { this.outputTextIf(this.padding.left + width / 2, subtitle, 'subtitlefont', 'text meta-top', this.spacing.subtitle, 0, 'middle'); }; /** * Begin a group of glyphs that will always be moved, scaled and highlighted together */ Renderer.prototype.beginGroup = function () { this.path = []; this.lastM = [0,0]; this.ingroup = true; }; /** * Add a path to the current group * @param {Array} path * @private */ Renderer.prototype.addPath = function (path) { path = path || []; if (path.length===0) return; path[0][0]="m"; path[0][1]-=this.lastM[0]; path[0][2]-=this.lastM[1]; this.lastM[0]+=path[0][1]; this.lastM[1]+=path[0][2]; this.path.push(path[0]); for (var i=1,ii=path.length;i 1 && symbol.indexOf(".") < 0) { this.paper.openGroup(); var dx = 0; for (var i = 0; i < symbol.length; i++) { var s = symbol.charAt(i); ycorr = abc_glyphs.getYCorr(s); el = abc_glyphs.printSymbol(x + dx, this.calcY(offset + ycorr), s, this.paper, klass); if (el) { if (this.doRegression) this.addToRegression(el); //elemset.push(el); if (i < symbol.length - 1) dx += kernSymbols(s, symbol.charAt(i + 1), abc_glyphs.getSymbolWidth(s)); } else { this.renderText(x, this.y, "no symbol:" + symbol, "debugfont", 'debug-msg', 'start'); } } return this.paper.closeGroup(); } else { ycorr = abc_glyphs.getYCorr(symbol); if (this.ingroup) { this.addPath(abc_glyphs.getPathForSymbol(x, this.calcY(offset + ycorr), symbol, scalex, scaley)); } else { el = abc_glyphs.printSymbol(x, this.calcY(offset + ycorr), symbol, this.paper, klass); if (el) { if (this.doRegression) this.addToRegression(el); return el; } else this.renderText(x, this.y, "no symbol:" + symbol, "debugfont", 'debug-msg', 'start'); } return null; } }; Renderer.prototype.scaleExistingElem = function (elem, scaleX, scaleY, x, y) { this.paper.setAttributeOnElement(elem, { style: "transform:scale("+scaleX+","+scaleY + ");transform-origin:" + x + "px " + y + "px;"}); }; Renderer.prototype.printPath = function (attrs) { var ret = this.paper.path(attrs); if (this.doRegression) this.addToRegression(ret); return ret; }; Renderer.prototype.drawBrace = function(xLeft, yTop, yBottom) {//Tony var yHeight = yBottom - yTop; var xCurve = [7.5, -8, 21, 0, 18.5, -10.5, 7.5]; var yCurve = [0, yHeight/5.5, yHeight/3.14, yHeight/2, yHeight/2.93, yHeight/4.88, 0]; var pathString = sprintf_1("M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z", xLeft+xCurve[0], yTop+yCurve[0], xLeft+xCurve[1], yTop+yCurve[1], xLeft+xCurve[2], yTop+yCurve[2], xLeft+xCurve[3], yTop+yCurve[3], xLeft+xCurve[4], yTop+yCurve[4], xLeft+xCurve[5], yTop+yCurve[5], xLeft+xCurve[6], yTop+yCurve[6]); var ret1 = this.paper.path({path:pathString, stroke:"#000000", fill:"#000000", 'class': this.addClasses('brace')}); xCurve = [0, 17.5, -7.5, 6.6, -5, 20, 0]; yCurve = [yHeight/2, yHeight/1.46, yHeight/1.22, yHeight, yHeight/1.19, yHeight/1.42, yHeight/2]; pathString = sprintf_1("M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z", xLeft+xCurve[ 0], yTop+yCurve[0], xLeft+xCurve[1], yTop+yCurve[1], xLeft+xCurve[2], yTop+yCurve[2], xLeft+xCurve[3], yTop+yCurve[3], xLeft+xCurve[4], yTop+yCurve[4], xLeft+xCurve[5], yTop+yCurve[5], xLeft+xCurve[6], yTop+yCurve[6]); var ret2 = this.paper.path({path:pathString, stroke:"#000000", fill:"#000000", 'class': this.addClasses('brace')}); if (this.doRegression){ this.addToRegression(ret1); this.addToRegression(ret2); } return ret1 + ret2; }; Renderer.prototype.drawArc = function(x1, x2, pitch1, pitch2, above, klass, isTie) { // If it is a tie vs. a slur, draw it shallower. var spacing = isTie ? 1.2 : 1.5; x1 = x1 + 6; x2 = x2 + 4; pitch1 = pitch1 + ((above)?spacing:-spacing); pitch2 = pitch2 + ((above)?spacing:-spacing); var y1 = this.calcY(pitch1); var y2 = this.calcY(pitch2); //unit direction vector var dx = x2-x1; var dy = y2-y1; var norm= Math.sqrt(dx*dx+dy*dy); var ux = dx/norm; var uy = dy/norm; var flatten = norm/3.5; var maxFlatten = isTie ? 10 : 25; // If it is a tie vs. a slur, draw it shallower. var curve = ((above)?-1:1)*Math.min(maxFlatten, Math.max(4, flatten)); var controlx1 = x1+flatten*ux-curve*uy; var controly1 = y1+flatten*uy+curve*ux; var controlx2 = x2-flatten*ux-curve*uy; var controly2 = y2-flatten*uy+curve*ux; var thickness = 2; var pathString = sprintf_1("M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z", x1, y1, controlx1, controly1, controlx2, controly2, x2, y2, controlx2-thickness*uy, controly2+thickness*ux, controlx1-thickness*uy, controly1+thickness*ux, x1, y1); if (klass) klass += ' slur'; else klass = 'slur'; var ret = this.paper.path({path:pathString, stroke:"none", fill:"#000000", 'class': this.addClasses(klass)}); if (this.doRegression) this.addToRegression(ret); return ret; }; /** * Calculates the y for a given pitch value (relative to the stave the renderer is currently printing) * @param {number} ofs pitch value (bottom C on a G clef = 0, D=1, etc.) */ Renderer.prototype.calcY = function(ofs) { return this.y - ofs*abc_spacing.STEP; }; /** * Print @param {number} numLines. If there is 1 line it is the B line. Otherwise the bottom line is the E line. */ Renderer.prototype.printStave = function (startx, endx, numLines) { var klass = "top-line"; this.paper.openGroup({ prepend: true }); // If there is one line, it is the B line. Otherwise, the bottom line is the E line. if (numLines === 1) { this.printStaveLine(startx,endx,6, klass); return; } for (var i = numLines-1; i >= 0; i--) { this.printStaveLine(startx,endx,(i+1)*2, klass); klass = undefined; } this.paper.closeGroup(); }; /** * * @private */ Renderer.prototype.addClasses = function (c, isNote) { if (!this.shouldAddClasses) return ""; var ret = []; if (c.length > 0) ret.push(c); if (this.lineNumber !== null && this.lineNumber !== undefined) ret.push("l"+this.lineNumber); if (this.measureNumber !== null && this.measureNumber !== undefined) ret.push("m"+this.measureNumber); if (this.voiceNumber !== null && this.voiceNumber !== undefined) ret.push("v"+this.voiceNumber); if ((c.indexOf('note') >= 0 || c.indexOf('rest') >= 0 || c.indexOf('lyric') >= 0 ) && this.noteNumber !== null && this.noteNumber !== undefined) ret.push("n"+this.noteNumber); // add a prefix to all classes that abcjs adds. if (ret.length > 0) { ret = ret.join(' '); // Some strings are compound classes - that is, specify more than one class in a string. ret = ret.split(' '); for (var i = 0; i < ret.length; i++) { if (ret[i].indexOf('abcjs-') !== 0 && ret[i].length > 0) // if the prefix doesn't already exist and the class is not blank. ret[i] = 'abcjs-' + ret[i]; } } return ret.join(' '); }; Renderer.prototype.getFontAndAttr = function(type, klass) { var font; if (typeof type === 'string') { font = this.abctune.formatting[type]; // Raphael deliberately changes the font units to pixels for some reason, so we need to change points to pixels here. if (font) font = {face: font.face, size: font.size * 4 / 3, decoration: font.decoration, style: font.style, weight: font.weight, box: font.box}; else font = {face: "Arial", size: 12 * 4 / 3, decoration: "underline", style: "normal", weight: "normal"}; } else font = {face: type.face, size: type.size * 4 / 3, decoration: type.decoration, style: type.style, weight: type.weight, box: type.box}; var attr = {"font-size": font.size, 'font-style': font.style, "font-family": font.face, 'font-weight': font.weight, 'text-decoration': font.decoration, 'class': this.addClasses(klass) }; attr.font = ""; // There is a spurious font definition that is put on all text elements. This overwrites it. return { font: font, attr: attr }; }; Renderer.prototype.getTextSize = function(text, type, klass, el) { var hash = this.getFontAndAttr(type, klass); var size = this.paper.getTextSize(text, hash.attr, el); if (hash.font.box) { size.height += 8; size.width += 8; } return size; }; Renderer.prototype.renderText = function(x, y, text, type, klass, anchor, centerVertically) { var hash = this.getFontAndAttr(type, klass); if (anchor) hash.attr["text-anchor"] = anchor; hash.attr.x = x; hash.attr.y = y + 7; // TODO-PER: Not sure why the text appears to be 7 pixels off. if (!centerVertically) hash.attr.dy = "0.5em"; if (type === 'debugfont') { console.log("Debug msg: " + text); hash.attr.stroke = "#ff0000"; } text = text.replace(/\n\n/g, "\n \n"); text = text.replace(/^\n/, "\xA0\n"); if (hash.font.box) { hash.attr.x += 2; hash.attr.y += 4; } var el = this.paper.text(text, hash.attr); if (hash.font.box) { var size = this.getTextSize(text, type, klass); var padding = 2; var margin = 2; this.paper.rect({ x: x - padding, y: y, width: size.width + padding*2, height: size.height + padding*2 - margin, stroke: "#888888", fill: "transparent"}); //size.height += 8; } if (this.doRegression) this.addToRegression(el); return el; }; Renderer.prototype.moveY = function (em, numLines) { if (numLines === undefined) numLines = 1; this.y += em*numLines; }; Renderer.prototype.skipSpaceY = function () { this.y += this.space; }; // Call with 'kind' being the font type to use, // if marginBottom === null then don't increment the Y after printing, otherwise that is the extra number of em's to leave below the line. // and alignment being "start", "middle", or "end". Renderer.prototype.outputTextIf = function(x, str, kind, klass, marginTop, marginBottom, alignment) { if (str) { if (marginTop) this.moveY(marginTop); var el = this.renderText(x, this.y, str, kind, klass, alignment); var bb = this.getTextSize(str, kind, klass); var width = isNaN(bb.width) ? 0 : bb.width; var height = isNaN(bb.height) ? 0 : bb.height; var hash = this.getFontAndAttr(kind, klass); if (hash.font.box) { width += 8; height += 8; } if (marginBottom !== null) { var numLines = str.split("\n").length; if (!isNaN(bb.height)) this.moveY(height/numLines, (numLines + marginBottom)); } return [width, height]; } return [0,0]; }; Renderer.prototype.addInvisibleMarker = function (className) { var dy = 0.35; var fill = "rgba(0,0,0,0)"; var y = this.y; y = Math.round(y); var x1 = 0; var x2 = 100; var pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x1, y-dy, x1+x2, y-dy, x2, y+dy, x1, y+dy); this.paper.pathToBack({path:pathString, stroke:"none", fill:fill, "fill-opacity": 0, 'class': this.addClasses(className), 'data-vertical': y }); }; Renderer.prototype.printSeparator = function(width) { var fill = "rgba(0,0,0,255)"; var stroke = "rgba(0,0,0,0)"; var y = Math.round(this.y); var staffWidth = this.controller.width; var x1 = (staffWidth - width)/2; var x2 = x1 + width; var pathString = 'M ' + x1 + ' ' + y + ' L ' + x2 + ' ' + y + ' L ' + x2 + ' ' + (y+1) + ' L ' + x1 + ' ' + (y+1) + ' L ' + x1 + ' ' + y + ' z'; this.paper.pathToBack({path:pathString, stroke:stroke, fill:fill, 'class': this.addClasses('defined-text')}); }; // For debugging, it is sometimes useful to know where you are vertically. Renderer.prototype.printHorizontalLine = function (width, vertical, comment) { var dy = 0.35; var fill = "rgba(0,0,255,.4)"; var y = this.y; if (vertical) y = vertical; y = Math.round(y); this.paper.text(""+Math.round(y), {x: 10, y: y, "text-anchor": "start", "font-size":"18px", fill: fill, stroke: fill }); var x1 = 50; var x2 = width; var pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x1, y-dy, x1+x2, y-dy, x2, y+dy, x1, y+dy); this.paper.pathToBack({path:pathString, stroke:"none", fill:fill, 'class': this.addClasses('staff')}); for (var i = 1; i < width/100; i++) { pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", i*100-dy, y-5, i*100-dy, y+5, i*100+dy, y-5, i*100+dy, y+5); this.paper.pathToBack({path:pathString, stroke:"none", fill:fill, 'class': this.addClasses('staff')}); } if (comment) this.paper.text(comment, {x: width+70, y: y, "text-anchor": "start", "font-size":"18px", fill: fill, stroke: fill }); }; Renderer.prototype.printShadedBox = function (x, y, width, height, color, opacity, comment) { var box = this.paper.rect({ x: x, y: y, width: width, height: height, fill: color, stroke: color, "fill-opacity": opacity, "stroke-opacity": opacity }); if (comment) this.paper.text(comment, {x: 0, y: y+7, "text-anchor": "start", "font-size":"14px", fill: "rgba(0,0,255,.4)", stroke: "rgba(0,0,255,.4)" }); return box; }; Renderer.prototype.printVerticalLine = function (x, y1, y2) { var dy = 0.35; var fill = "#00aaaa"; var pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x - dy, y1, x - dy, y2, x + dy, y1, x + dy, y2); this.paper.pathToBack({path: pathString, stroke: "none", fill: fill, 'class': this.addClasses('staff')}); pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x - 20, y1, x - 20, y1+3, x, y1, x, y1+3); this.paper.pathToBack({path: pathString, stroke: "none", fill: fill, 'class': this.addClasses('staff')}); pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x + 20, y2, x + 20, y2+3, x, y2, x, y2+3); this.paper.pathToBack({path: pathString, stroke: "none", fill: fill, 'class': this.addClasses('staff')}); }; /** * @private */ Renderer.prototype.addToRegression = function (el) { var box; try { box = el.getBBox(); } catch(e) { box = { width: 0, height: 0 }; } //var str = "("+box.x+","+box.y+")["+box.width+","+box.height+"] " var str = el.type + ' ' + box.toString() + ' '; var attrs = []; for (var key in el.attrs) { if (el.attrs.hasOwnProperty(key)) { if (key === 'class') str = el.attrs[key] + " " + str; else attrs.push(key+": "+el.attrs[key]); } } attrs.sort(); str += "{ " +attrs.join(" ") + " }"; this.regressionLines.push(str); }; var abc_renderer = Renderer; // abc_engraver_controller.js: Controls the engraving process of an ABCJS abstract syntax tree as produced by ABCJS/parse // Copyright (C) 2014-2018 Gregory Dyke (gregdyke at gmail dot com) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /*global Math */ var spacing$1 = abc_spacing; /** * @class * Controls the engraving process, from ABCJS Abstract Syntax Tree (ABCJS AST) to rendered score sheet * * Call engraveABC to run the process. This creates a graphelems ABCJS Abstract Engraving Structure (ABCJS AES) that can be accessed through this.staffgroups * this data structure is first laid out (giving the graphelems x and y coordinates) and then drawn onto the renderer * each ABCJS AES represents a single staffgroup - all elements that are not in a staffgroup are rendered directly by the controller * * elements in ABCJS AES know their "source data" in the ABCJS AST, and their "target shape" * in the renderer for highlighting purposes * * @param {Object} paper div element that will wrap the SVG * @param {Object} params all the params -- documented on github //TODO-GD move some of that documentation here */ var EngraverController = function(paper, params) { params = params || {}; this.responsive = params.responsive; this.space = 3*spacing$1.SPACE; this.scale = params.scale ? parseFloat(params.scale) : 0; if (!(this.scale > 0.1)) this.scale = undefined; if (params.staffwidth) { // Note: Normally all measurements to the engraver are in POINTS. However, if a person is formatting for the // screen and directly inputting the width, then it is more logical to have the measurement in pixels. this.staffwidthScreen = params.staffwidth; this.staffwidthPrint = params.staffwidth; } else { this.staffwidthScreen = 740; // TODO-PER: Not sure where this number comes from, but this is how it's always been. this.staffwidthPrint = 680; // The number of pixels in 8.5", after 1cm of margin has been removed. } this.editable = params.editable || false; this.listeners = []; if (params.clickListener) this.addSelectListener(params.clickListener); this.renderer=new abc_renderer(paper, params.regression, params.add_classes); this.renderer.setPaddingOverride(params); this.renderer.controller = this; // TODO-GD needed for highlighting this.reset(); }; EngraverController.prototype.reset = function() { this.selected = []; this.ingroup = false; this.staffgroups = []; this.lastStaffGroupIndex = -1; if (this.engraver) this.engraver.reset(); this.engraver = null; this.renderer.reset(); }; /** * run the engraving process * @param {ABCJS.Tune|ABCJS.Tune[]} abctunes */ EngraverController.prototype.engraveABC = function(abctunes, tuneNumber) { if (abctunes[0]===undefined) { abctunes = [abctunes]; } this.reset(); for (var i = 0; i < abctunes.length; i++) { if (tuneNumber === undefined) tuneNumber = i; this.engraveTune(abctunes[i], tuneNumber); } if (this.renderer.doRegression) return this.renderer.regressionLines.join("\n"); }; /** * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling. * @param {float} scale */ EngraverController.prototype.adjustNonScaledItems = function (scale) { this.width /= scale; this.renderer.adjustNonScaledItems(scale); }; EngraverController.prototype.getMeasureWidths = function(abcTune) { this.reset(); this.renderer.lineNumber = null; this.renderer.newTune(abcTune); this.engraver = new abc_abstract_engraver(this.renderer, 0, { bagpipes: abcTune.formatting.bagpipes, flatbeams: abcTune.formatting.flatbeams }); this.engraver.setStemHeight(this.renderer.spacing.stemHeight); if (abcTune.formatting.staffwidth) { this.width = abcTune.formatting.staffwidth * 1.33; // The width is expressed in pt; convert to px. } else { this.width = this.renderer.isPrint ? this.staffwidthPrint : this.staffwidthScreen; } var scale = abcTune.formatting.scale ? abcTune.formatting.scale : this.scale; if (this.responsive === "resize") // The resizing will mess with the scaling, so just don't do it explicitly. scale = undefined; if (scale === undefined) scale = this.renderer.isPrint ? 0.75 : 1; this.adjustNonScaledItems(scale); var ret = { left: 0, measureWidths: [], height: 0, total: 0 }; // TODO-PER: need to add the height of the title block, too. ret.height = this.renderer.padding.top + this.renderer.spacing.music + this.renderer.padding.bottom + 24; // the 24 is the empirical value added to the bottom of all tunes. var debug = false; var hasPrintedTempo = false; for(var i=0; i 0) { var voice = abcLine.staffGroup.voices[0]; var foundNotStaffExtra = false; var lastXPosition = 0; for (var k = 0; k < voice.children.length; k++) { var child = voice.children[k]; if (!foundNotStaffExtra && !child.isClef && !child.isKeySig) { foundNotStaffExtra = true; ret.left = child.x; lastXPosition = child.x; } if (child.type === 'bar') { ret.measureWidths.push(child.x - lastXPosition); ret.total += (child.x - lastXPosition); lastXPosition = child.x; } } } hasPrintedTempo = true; ret.height += abcLine.staffGroup.calcHeight() * spacing$1.STEP; } } return ret; }; /** * Run the engraving process on a single tune * @param {ABCJS.Tune} abctune */ EngraverController.prototype.engraveTune = function (abctune, tuneNumber) { this.renderer.lineNumber = null; this.renderer.newTune(abctune); this.engraver = new abc_abstract_engraver(this.renderer, tuneNumber, { bagpipes: abctune.formatting.bagpipes, flatbeams: abctune.formatting.flatbeams }); this.engraver.setStemHeight(this.renderer.spacing.stemHeight); this.engraver.measureLength = abctune.getMeterFraction().num/abctune.getMeterFraction().den; if (abctune.formatting.staffwidth) { this.width = abctune.formatting.staffwidth * 1.33; // The width is expressed in pt; convert to px. } else { this.width = this.renderer.isPrint ? this.staffwidthPrint : this.staffwidthScreen; } var scale = abctune.formatting.scale ? abctune.formatting.scale : this.scale; if (this.responsive === "resize") // The resizing will mess with the scaling, so just don't do it explicitly. scale = undefined; if (scale === undefined) scale = this.renderer.isPrint ? 0.75 : 1; this.adjustNonScaledItems(scale); // Generate the raw staff line data var i; var abcLine; var hasPrintedTempo = false; for(i=0; i maxWidth) maxWidth = abcLine.staffGroup.w; } } // Layout the beams and add the stems to the beamed notes. for(i=0; i 0) { spacing = (targetWidth - constSpace) / spacingUnits; if (spacing * minSpace > 50) { spacing = 50 / minSpace; } return spacing; } return null; } /** * Do the x-axis positioning for a single line (a group of related staffs) * @param {ABCJS.Tune} abctune an ABCJS AST * @param {Object} staffGroup an staffGroup * @param {Object} formatting an formatting * @param {boolean} isLastLine is this the last line to be printed? * @private */ EngraverController.prototype.setXSpacing = function (staffGroup, formatting, isLastLine, debug) { var newspace = this.space; for (var it = 0; it < 8; it++) { // TODO-PER: shouldn't need multiple passes, but each pass gets it closer to the right spacing. (Only affects long lines: normal lines break out of this loop quickly.) var ret = staffGroup.layout(newspace, this.renderer, debug); var stretchLast = formatting.stretchlast ? formatting.stretchlast : false; newspace = calcHorizontalSpacing(isLastLine, stretchLast, this.width+this.renderer.padding.left, staffGroup.w, newspace, ret.spacingUnits, ret.minSpace); if (debug) console.log("setXSpace", it, staffGroup.w, newspace, staffGroup.minspace); if (newspace === null) break; } centerWholeRests(staffGroup.voices); //this.renderer.printHorizontalLine(this.width); }; /** * Engrave a single line (a group of related staffs) * @param {ABCJS.Tune} abctune an ABCJS AST * @param {Object} staffGroup an staffGroup * @private */ EngraverController.prototype.engraveStaffLine = function (staffGroup) { if (this.lastStaffGroupIndex > -1) this.renderer.addStaffPadding(this.staffgroups[this.lastStaffGroupIndex], staffGroup); this.renderer.voiceNumber = null; staffGroup.draw(this.renderer); var height = staffGroup.height * spacing$1.STEP; //this.renderer.printVerticalLine(this.width+this.renderer.padding.left, this.renderer.y, this.renderer.y+height); this.staffgroups[this.staffgroups.length] = staffGroup; this.lastStaffGroupIndex = this.staffgroups.length-1; this.renderer.y += height; }; /** * Called by the Abstract Engraving Structure or any other (e.g. midi playback) to say it was selected (notehead clicked on) * @protected */ EngraverController.prototype.notifySelect = function (abselem, tuneNumber, classes) { this.clearSelection(); if (abselem.highlight) { this.selected = [abselem]; abselem.highlight(); } var abcelem = abselem.abcelem || {}; for (var i=0; ielStart && start=start && elems[elem].abcelem.endChar<=end) { this.selected[this.selected.length]=elems[elem]; elems[elem].highlight(); } } } } }; function centerWholeRests(voices) { // whole rests are a special case: if they are by themselves in a measure, then they should be centered. // (If they are not by themselves, that is probably a user error, but we'll just center it between the two items to either side of it.) for (var i = 0; i < voices.length; i++) { var voice = voices[i]; // Look through all of the elements except for the first and last. If the whole note appears there then there isn't anything to center it between anyway. for (var j = 1; j < voice.children.length-1; j++) { var absElem = voice.children[j]; if (absElem.abcelem.rest && (absElem.abcelem.rest.type === 'whole' || absElem.abcelem.rest.type === 'multimeasure')) { var before = voice.children[j-1]; var after = voice.children[j+1]; var midpoint = (after.x - before.x) / 2 + before.x; absElem.x = midpoint - absElem.w / 2; for (var k = 0; k < absElem.children.length; k++) absElem.children[k].x = absElem.x; } } } } var abc_engraver_controller = EngraverController; var resizeDivs = {}; function resizeOuter() { var width = window.innerWidth; for (var id in resizeDivs) { if (resizeDivs.hasOwnProperty(id)) { var outer = resizeDivs[id]; var ofs = outer.offsetLeft; width -= ofs * 2; outer.style.width = width + "px"; } } } window.addEventListener("resize", resizeOuter); window.addEventListener("orientationChange", resizeOuter); function renderOne(div, tune, params, tuneNumber) { if (params.viewportHorizontal) { // Create an inner div that holds the music, so that the passed in div will be the viewport. div.innerHTML = '
'; if (params.scrollHorizontal) { div.style.overflowX = "auto"; div.style.overflowY = "hidden"; } else div.style.overflow = "hidden"; resizeDivs[div.id] = div; // We use a hash on the element's id so that multiple calls won't keep adding to the list. div = div.children[0]; // The music should be rendered in the inner div. } else if (params.viewportVertical) { // Create an inner div that holds the music, so that the passed in div will be the viewport. div.innerHTML = '
'; div.style.overflowX = "hidden"; div.style.overflowY = "auto"; div = div.children[0]; // The music should be rendered in the inner div. } else div.innerHTML = ""; var engraver_controller = new abc_engraver_controller(div, params); engraver_controller.engraveABC(tune, tuneNumber); tune.engraver = engraver_controller; if (params.viewportVertical || params.viewportHorizontal) { // If we added a wrapper around the div, then we need to size the wrapper, too. var parent = div.parentNode; parent.style.width = div.style.width; } } function renderEachLineSeparately(div, tune, params, tuneNumber) { function initializeTuneLine(tune) { var obj = new abc_tune(); obj.formatting = tune.formatting; obj.media = tune.media; obj.version = tune.version; obj.metaText = {}; obj.lines = []; return obj; } // Before rendering, chop up the returned tune into an array where each element is a line. // The first element of the array gets the title and other items that go on top, the last element // of the array gets the extra text that goes on bottom. Each element gets any non-music info that comes before it. var tunes = []; var tuneLine; for (var i = 0; i < tune.lines.length; i++) { var line = tune.lines[i]; if (!tuneLine) tuneLine = initializeTuneLine(tune); if (i === 0) { // These items go on top of the music tuneLine.metaText.tempo = tune.metaText.tempo; tuneLine.metaText.title = tune.metaText.title; tuneLine.metaText.header = tune.metaText.header; tuneLine.metaText.rhythm = tune.metaText.rhythm; tuneLine.metaText.origin = tune.metaText.origin; tuneLine.metaText.composer = tune.metaText.composer; tuneLine.metaText.author = tune.metaText.author; tuneLine.metaText.partOrder = tune.metaText.partOrder; } // push the lines until we get to a music line tuneLine.lines.push(line); if (line.staff) { tunes.push(tuneLine); tuneLine = undefined; } } // Add any extra stuff to the last line. if (tuneLine) { var lastLine = tunes[tunes.length-1]; for (var j = 0; j < tuneLine.lines.length; j++) lastLine.lines.push(tuneLine.lines[j]); } // These items go below the music tuneLine = tunes[tunes.length-1]; tuneLine.metaText.unalignedWords = tune.metaText.unalignedWords; tuneLine.metaText.book = tune.metaText.book; tuneLine.metaText.source = tune.metaText.source; tuneLine.metaText.discography = tune.metaText.discography; tuneLine.metaText.notes = tune.metaText.notes; tuneLine.metaText.transcription = tune.metaText.transcription; tuneLine.metaText.history = tune.metaText.history; tuneLine.metaText['abc-copyright'] = tune.metaText['abc-copyright']; tuneLine.metaText['abc-creator'] = tune.metaText['abc-creator']; tuneLine.metaText['abc-edited-by'] = tune.metaText['abc-edited-by']; tuneLine.metaText.footer = tune.metaText.footer; // Now create sub-divs and render each line. Need to copy the params to change the padding for the interior slices. var ep = {}; for (var key in params) { if (params.hasOwnProperty(key)) { ep[key] = params[key]; } } var origPaddingTop = ep.paddingtop; var origPaddingBottom = ep.paddingbottom; div.innerHTML = ""; for (var k = 0; k < tunes.length; k++) { var lineEl = document.createElement("div"); div.appendChild(lineEl); if (k === 0) { ep.paddingtop = origPaddingTop; ep.paddingbottom = -20; } else if (k === tunes.length-1) { ep.paddingtop = 10; ep.paddingbottom = origPaddingBottom; } else { ep.paddingtop = 10; ep.paddingbottom = -20; } renderOne(lineEl, tunes[k], ep, tuneNumber); if (k === 0) tune.engraver = tunes[k].engraver; else { if (!tune.engraver.staffgroups) tune.engraver.staffgroups = tunes[k].engraver.staffgroups; else if (tunes[k].engraver.staffgroups.length > 0) tune.engraver.staffgroups.push(tunes[k].engraver.staffgroups[0]); } } } // A quick way to render a tune from javascript when interactivity is not required. // This is used when a javascript routine has some abc text that it wants to render // in a div or collection of divs. One tune or many can be rendered. // // parameters: // output: an array of divs that the individual tunes are rendered to. // If the number of tunes exceeds the number of divs in the array, then // only the first tunes are rendered. If the number of divs exceeds the number // of tunes, then the unused divs are cleared. The divs can be passed as either // elements or strings of ids. If ids are passed, then the div MUST exist already. // (if a single element is passed, then it is an implied array of length one.) // (if a null is passed for an element, or the element doesn't exist, then that tune is skipped.) // abc: text representing a tune or an entire tune book in ABC notation. // renderParams: hash of: // startingTune: an index, starting at zero, representing which tune to start rendering at. // (If this element is not present, then rendering starts at zero.) // width: 800 by default. The width in pixels of the output paper var renderAbc = function(output, abc, parserParams, engraverParams, renderParams) { // Note: all parameters have been condensed into the first ones. It doesn't hurt anything to allow the old format, so just copy them here. var params = {}; var key; if (parserParams) { for (key in parserParams) { if (parserParams.hasOwnProperty(key)) { params[key] = parserParams[key]; } } } if (engraverParams) { for (key in engraverParams) { if (engraverParams.hasOwnProperty(key)) { // There is a conflict with the name of the parameter "listener". If it is in the second parameter, then it is for click. if (key === "listener") { if (engraverParams[key].highlight) params.clickListener = engraverParams[key].highlight; } else params[key] = engraverParams[key]; } } } if (renderParams) { for (key in renderParams) { if (renderParams.hasOwnProperty(key)) { params[key] = renderParams[key]; } } } function callback(div, tune, tuneNumber, abcString) { var removeDiv = false; if (div === "*") { removeDiv = true; div = document.createElement("div"); div.setAttribute("style", "display:none;"); document.body.appendChild(div); } if (params.afterParsing) params.afterParsing(tune, tuneNumber, abcString); if (!removeDiv && params.wrap && params.staffwidth) { tune = doLineWrapping(div, tune, tuneNumber, abcString, params); return tune; } else if (removeDiv || !params.oneSvgPerLine || tune.lines.length < 2) renderOne(div, tune, params, tuneNumber); else renderEachLineSeparately(div, tune, params, tuneNumber); if (removeDiv) div.parentNode.removeChild(div); return null; } return abc_tunebook.renderEngine(callback, output, abc, params); }; function doLineWrapping(div, tune, tuneNumber, abcString, params) { var engraver_controller = new abc_engraver_controller(div, params); var widths = engraver_controller.getMeasureWidths(tune); var ret = wrap_lines.calcLineWraps(tune, widths, abcString, params, abc_parse, engraver_controller); if (!params.oneSvgPerLine || ret.tune.lines.length < 2) renderOne(div, ret.tune, ret.revisedParams, tuneNumber); else renderEachLineSeparately(div, ret.tune, ret.revisedParams, tuneNumber); ret.tune.explanation = ret.explanation; return ret.tune; } var abc_tunebook_svg = renderAbc; var soundsCache = { }; var soundsCache_1 = soundsCache; // Load one mp3 file for one note. // url = the base url for the soundfont // instrument = the instrument name (e.g. "acoustic_grand_piano") // name = the pitch name (e.g. "A3") var getNote = function(url, instrument, name, audioContext) { return new Promise(function (resolve, reject) { if (!soundsCache_1[instrument]) soundsCache_1[instrument] = {}; var instrumentCache = soundsCache_1[instrument]; if (instrumentCache[name] === 'error') { return reject(new Error("Unable to load sound font" + ' ' + url + ' ' + instrument + ' ' + name)); } if (instrumentCache[name]) { return resolve({instrument: instrument, name: name}); } // if (this.debugCallback) // this.debugCallback(`Loading sound: ${instrument} ${name}`); instrumentCache[name] = "pending"; // This can be called in parallel, so don't call it a second time before the first one has loaded. var xhr = new XMLHttpRequest(); xhr.open('GET', url+instrument+'-mp3/'+name+'.mp3', true); xhr.responseType = 'arraybuffer'; var self = this; function onSuccess(audioBuffer) { instrumentCache[name] = audioBuffer; // if (self.debugCallback) // self.debugCallback(`Sound loaded: ${instrument} ${name} ${url}`); resolve({instrument: instrument, name: name}); } function onFailure(error) { if (self.debugCallback) self.debugCallback(error); console.log(error); reject(error); } xhr.onload = function (e) { if (this.status === 200) { audioContext.decodeAudioData(this.response, onSuccess, onFailure);//.then(function() { // return resolve({instrument: instrument, name: name}); // }).catch(function(error) { // return reject(new Error(cantLoadMp3 + error)); // }); } else { instrumentCache[name] = "error"; // To keep this from trying to load repeatedly. var cantLoadMp3 = "Onload error loading sound: " + name + " " + url + " " + e.currentTarget.status + " " + e.currentTarget.statusText; if (self.debugCallback) self.debugCallback(cantLoadMp3); return reject(new Error(cantLoadMp3)); } }; xhr.addEventListener("error", function () { instrumentCache[name] = "error"; // To keep this from trying to load repeatedly. var cantLoadMp3 = "Error in loading sound: " + " " + url; if (self.debugCallback) self.debugCallback(cantLoadMp3); return reject(new Error(cantLoadMp3)); }, false); xhr.send(); }); }; var loadNote = getNote; var instrumentIndexToName = [ "acoustic_grand_piano", "bright_acoustic_piano", "electric_grand_piano", "honkytonk_piano", "electric_piano_1", "electric_piano_2", "harpsichord", "clavinet", "celesta", "glockenspiel", "music_box", "vibraphone", "marimba", "xylophone", "tubular_bells", "dulcimer", "drawbar_organ", "percussive_organ", "rock_organ", "church_organ", "reed_organ", "accordion", "harmonica", "tango_accordion", "acoustic_guitar_nylon", "acoustic_guitar_steel", "electric_guitar_jazz", "electric_guitar_clean", "electric_guitar_muted", "overdriven_guitar", "distortion_guitar", "guitar_harmonics", "acoustic_bass", "electric_bass_finger", "electric_bass_pick", "fretless_bass", "slap_bass_1", "slap_bass_2", "synth_bass_1", "synth_bass_2", "violin", "viola", "cello", "contrabass", "tremolo_strings", "pizzicato_strings", "orchestral_harp", "timpani", "string_ensemble_1", "string_ensemble_2", "synth_strings_1", "synth_strings_2", "choir_aahs", "voice_oohs", "synth_choir", "orchestra_hit", "trumpet", "trombone", "tuba", "muted_trumpet", "french_horn", "brass_section", "synth_brass_1", "synth_brass_2", "soprano_sax", "alto_sax", "tenor_sax", "baritone_sax", "oboe", "english_horn", "bassoon", "clarinet", "piccolo", "flute", "recorder", "pan_flute", "blown_bottle", "shakuhachi", "whistle", "ocarina", "lead_1_square", "lead_2_sawtooth", "lead_3_calliope", "lead_4_chiff", "lead_5_charang", "lead_6_voice", "lead_7_fifths", "lead_8_bass__lead", "pad_1_new_age", "pad_2_warm", "pad_3_polysynth", "pad_4_choir", "pad_5_bowed", "pad_6_metallic", "pad_7_halo", "pad_8_sweep", "fx_1_rain", "fx_2_soundtrack", "fx_3_crystal", "fx_4_atmosphere", "fx_5_brightness", "fx_6_goblins", "fx_7_echoes", "fx_8_scifi", "sitar", "banjo", "shamisen", "koto", "kalimba", "bagpipe", "fiddle", "shanai", "tinkle_bell", "agogo", "steel_drums", "woodblock", "taiko_drum", "melodic_tom", "synth_drum", "reverse_cymbal", "guitar_fret_noise", "breath_noise", "seashore", "bird_tweet", "telephone_ring", "helicopter", "applause", "gunshot", "percussion" ]; var instrumentIndexToName_1 = instrumentIndexToName; // Convert the input structure to a more useful structure where each item has a length of its own. var createNoteMap = function(sequence) { var map = []; for (var i = 0; i < sequence.tracks.length; i++) map.push([]); // TODO-PER: handle more than one note in a track var nextNote = {}; var currentInstrument = instrumentIndexToName_1[0]; sequence.tracks.forEach(function(track, i) { var currentTime = 0; track.forEach(function(ev) { switch (ev.cmd) { case "start": nextNote[ev.pitch] = { time: currentTime, instrument: currentInstrument, volume: ev.volume }; break; case "move": currentTime += ev.duration; break; case "stop": map[i].push({pitch: ev.pitch, instrument: nextNote[ev.pitch].instrument, start: nextNote[ev.pitch].time, end: currentTime, volume: nextNote[ev.pitch].volume}); delete nextNote[ev.pitch]; break; case "program": currentInstrument = instrumentIndexToName_1[ev.instrument]; break; default: // TODO-PER: handle other event types console.log("Unhanded midi event", ev); } }); }); return map; }; var createNoteMap_1 = createNoteMap; // Call this when it is safe for the abcjs to produce sound. This is after the first user gesture on the page. // If you call it with no parameters, then an AudioContext is created and stored. // If you call it with a parameter, that is used as an already created AudioContext. function registerAudioContext(ac) { if (!window.abcjsAudioContext) { if (!ac) { ac = window.AudioContext || window.webkitAudioContext || navigator.mozAudioContext || navigator.msAudioContext; ac = new ac(); } window.abcjsAudioContext = ac; } return window.abcjsAudioContext.state !== "suspended"; } var registerAudioContext_1 = registerAudioContext; function activeAudioContext() { return window.abcjsAudioContext; } var activeAudioContext_1 = activeAudioContext; // // Support for audio depends on three things: support for Promise, support for AudioContext, and support for AudioContext.resume. // Unfortunately, AudioContext.resume cannot be detected unless an AudioContext is created, and creating an AudioContext can't // be done until a user click, so there is no way to know for sure if audio is supported until the user tries. // We can get close, though - we can test for Promises and AudioContext - there are just a few evergreen browsers that supported // that before supporting resume, so we'll test what we can. // The best use of this routine is to call it before doing any audio related stuff to decide whether to bother. // But then, call it again after a user interaction to test for resume. function supportsAudio() { var aac = activeAudioContext_1(); if (aac) return aac.resume !== undefined; if (!window.Promise) return false; return window.AudioContext || window.webkitAudioContext || navigator.mozAudioContext || navigator.msAudioContext; } var supportsAudio_1 = supportsAudio; var pitchToNoteName = { 21: 'A0', 22: 'Bb0', 23: 'B0', 24: 'C1', 25: 'Db1', 26: 'D1', 27: 'Eb1', 28: 'E1', 29: 'F1', 30: 'Gb1', 31: 'G1', 32: 'Ab1', 33: 'A1', 34: 'Bb1', 35: 'B1', 36: 'C2', 37: 'Db2', 38: 'D2', 39: 'Eb2', 40: 'E2', 41: 'F2', 42: 'Gb2', 43: 'G2', 44: 'Ab2', 45: 'A2', 46: 'Bb2', 47: 'B2', 48: 'C3', 49: 'Db3', 50: 'D3', 51: 'Eb3', 52: 'E3', 53: 'F3', 54: 'Gb3', 55: 'G3', 56: 'Ab3', 57: 'A3', 58: 'Bb3', 59: 'B3', 60: 'C4', 61: 'Db4', 62: 'D4', 63: 'Eb4', 64: 'E4', 65: 'F4', 66: 'Gb4', 67: 'G4', 68: 'Ab4', 69: 'A4', 70: 'Bb4', 71: 'B4', 72: 'C5', 73: 'Db5', 74: 'D5', 75: 'Eb5', 76: 'E5', 77: 'F5', 78: 'Gb5', 79: 'G5', 80: 'Ab5', 81: 'A5', 82: 'Bb5', 83: 'B5', 84: 'C6', 85: 'Db6', 86: 'D6', 87: 'Eb6', 88: 'E6', 89: 'F6', 90: 'Gb6', 91: 'G6', 92: 'Ab6', 93: 'A6', 94: 'Bb6', 95: 'B6', 96: 'C7', 97: 'Db7', 98: 'D7', 99: 'Eb7', 100: 'E7', 101: 'F7', 102: 'Gb7', 103: 'G7', 104: 'Ab7', 105: 'A7', 106: 'Bb7', 107: 'B7', 108: 'C8', 109: 'Db8', 110: 'D8', 111: 'Eb8', 112: 'E8', 113: 'F8', 114: 'Gb8', 115: 'G8', 116: 'Ab8', 117: 'A8', 118: 'Bb8', 119: 'B8', 120: 'C9', 121: 'Db9' }; var pitchToNoteName_1 = pitchToNoteName; var downloadBuffer = function(buffer) { return window.URL.createObjectURL(bufferToWave(buffer.audioBuffers)); }; // Convert an AudioBuffer to a Blob using WAVE representation function bufferToWave(audioBuffers) { var numOfChan = audioBuffers.length; var length = audioBuffers[0].length * numOfChan * 2 + 44; var buffer = new ArrayBuffer(length); var view = new DataView(buffer); var channels = []; var i; var sample; var offset = 0; var pos = 0; // write WAVE header setUint32(0x46464952); // "RIFF" setUint32(length - 8); // file length - 8 setUint32(0x45564157); // "WAVE" setUint32(0x20746d66); // "fmt " chunk setUint32(16); // length = 16 setUint16(1); // PCM (uncompressed) setUint16(numOfChan); setUint32(audioBuffers[0].sampleRate); setUint32(audioBuffers[0].sampleRate * 2 * numOfChan); // avg. bytes/sec setUint16(numOfChan * 2); // block-align setUint16(16); // 16-bit (hardcoded in this demo) setUint32(0x61746164); // "data" - chunk setUint32(length - pos - 4); // chunk length // write interleaved data for(i = 0; i < audioBuffers.length; i++) channels.push(audioBuffers[i].getChannelData(0)); while(pos < length) { for(i = 0; i < channels.length; i++) { // interleave channels sample = Math.max(-1, Math.min(1, channels[i][offset])); // clamp sample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767)|0; // scale to 16-bit signed int view.setInt16(pos, sample, true); // write 16-bit sample pos += 2; } offset++; // next source sample } // create Blob return new Blob([buffer], {type: "audio/wav"}); function setUint16(data) { view.setUint16(pos, data, true); pos += 2; } function setUint32(data) { view.setUint32(pos, data, true); pos += 4; } } var downloadBuffer_1 = downloadBuffer; // abc_midi_sequencer.js: Turn parsed abc into a linear series of events. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var sequence; (function() { var measureLength; // The abc is provided to us line by line. It might have repeats in it. We want to re arrange the elements to // be an array of voices with all the repeats embedded, and no lines. Then it is trivial to go through the events // one at a time and turn it into midi. var PERCUSSION_PROGRAM = 128; sequence = function(abctune, options) { // Global options options = options || {}; var qpm = undefined; var program = options.program || 0; // The program if there isn't a program specified. var transpose = options.midiTranspose || 0; var channel = options.channel || 0; var drumPattern = options.drum || ""; var drumBars = options.drumBars || 1; var drumIntro = options.drumIntro || 0; var drumOn = drumPattern !== ""; // All of the above overrides need to be integers program = parseInt(program, 10); transpose = parseInt(transpose, 10); channel = parseInt(channel, 10); if (channel === 10) program = PERCUSSION_PROGRAM; drumPattern = drumPattern.split(" "); drumBars = parseInt(drumBars, 10); drumIntro = parseInt(drumIntro, 10); var bagpipes = abctune.formatting.bagpipes; // If it is bagpipes, then the gracenotes are played on top of the main note. if (bagpipes) program = 71; // %%MIDI fermatafixed // %%MIDI fermataproportional // %%MIDI deltaloudness n // %%MIDI gracedivider b // %%MIDI ratio n m // %%MIDI beat a b c n // %%MIDI grace a/b // %%MIDI trim x/y // %MIDI gchordon // %MIDI gchordoff // %%MIDI bassprog 45 // %%MIDI chordprog 24 // %%MIDI chordname name n1 n2 n3 n4 n5 n6 //%%MIDI beat ⟨int1⟩ ⟨int2⟩ ⟨int3⟩ ⟨int4⟩: controls the volumes of the notes in a measure. The first note in a bar has volume ⟨int1⟩; other ‘strong’ notes have volume ⟨int2⟩ and all the rest have volume ⟨int3⟩. These values must be in the range 0–127. The parameter ⟨int4⟩ determines which notes are ‘strong’. If the time signature is x/y, then each note is given a position number k = 0, 1, 2. . . x-1 within each bar. If k is a multiple of ⟨int4⟩, then the note is ‘strong’. var startingMidi = []; if (abctune.formatting.midi) { //console.log("MIDI Formatting:", abctune.formatting.midi); var globals = abctune.formatting.midi; if (globals.program && globals.program.length > 0) { program = globals.program[0]; if (globals.program.length > 1) { program = globals.program[1]; channel = globals.program[0]; } } if (globals.transpose) transpose = globals.transpose[0]; if (globals.channel) channel = globals.channel[0]; if (globals.drum) drumPattern = globals.drum; if (globals.drumbars) drumBars = globals.drumbars[0]; if (globals.drumon) drumOn = true; if (channel === 10) program = PERCUSSION_PROGRAM; if (globals.beat) startingMidi.push({ el_type: 'beat', beats: globals.beat }); if (globals.nobeataccents) startingMidi.push({ el_type: 'beataccents', value: false }); } // Specified options in abc string. // If the tempo was passed in, use that. // If the tempo is specified, use that. // If there is a default, use that. // Otherwise, use the default. if (options.qpm) qpm = parseInt(options.qpm, 10); else if (abctune.metaText.tempo) qpm = interpretTempo(abctune.metaText.tempo); else if (options.defaultQpm) qpm = options.defaultQpm; else qpm = 180; // The tempo if there isn't a tempo specified. var startVoice = []; if (bagpipes) startVoice.push({ el_type: 'bagpipes' }); startVoice.push({ el_type: 'instrument', program: program }); if (channel) startVoice.push({ el_type: 'channel', channel: channel }); if (transpose) startVoice.push({ el_type: 'transpose', transpose: transpose }); startVoice.push({ el_type: 'tempo', qpm: qpm }); for (var ss = 0; ss < startingMidi.length;ss++) startVoice.push(startingMidi[ss]); // the relevant part of the input structure is: // abctune // array lines // array staff // object key // object meter // array voices // array abcelem // visit each voice completely in turn var voices = []; var startRepeatPlaceholder = []; // There is a place holder for each voice. var skipEndingPlaceholder = []; // This is the place where the first ending starts. var startingDrumSet = false; for (var i = 0; i < abctune.lines.length; i++) { // For each group of staff lines in the tune. var line = abctune.lines[i]; if (line.staff) { var staves = line.staff; var voiceNumber = 0; for (var j = 0; j < staves.length; j++) { var staff = staves[j]; // For each staff line for (var k = 0; k < staff.voices.length; k++) { // For each voice in a staff line var voice = staff.voices[k]; if (!voices[voiceNumber]) { voices[voiceNumber] = [].concat(JSON.parse(JSON.stringify(startVoice))); } if (staff.clef && staff.clef.type === 'perc') { for (var cl = 0; cl < voices[voiceNumber].length; cl++) { if (voices[voiceNumber][cl].el_type === 'instrument') voices[voiceNumber][cl].program = PERCUSSION_PROGRAM; } } else if (staff.key) { if (staff.key.root === 'HP') voices[voiceNumber].push({el_type: 'key', accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}]}); else voices[voiceNumber].push({el_type: 'key', accidentals: staff.key.accidentals }); } if (staff.meter) { voices[voiceNumber].push(interpretMeter(staff.meter)); } if (!startingDrumSet && drumOn) { // drum information is only needed once, so use the first line and track 0. voices[voiceNumber].push({el_type: 'drum', params: {pattern: drumPattern, bars: drumBars, on: drumOn, intro: drumIntro}}); startingDrumSet = true; } if (staff.clef && staff.clef.transpose) { staff.clef.el_type = 'clef'; voices[voiceNumber].push({ el_type: 'transpose', transpose: staff.clef.transpose }); } if (abctune.formatting.midi && abctune.formatting.midi.drumoff) { // If there is a drum off command right at the beginning it is put in the metaText instead of the stream, // so we will just insert it here. voices[voiceNumber].push({ el_type: 'bar' }); voices[voiceNumber].push({el_type: 'drum', params: {pattern: "", on: false }}); } var noteEventsInBar = 0; for (var v = 0; v < voice.length; v++) { // For each element in a voice var elem = voice[v]; switch (elem.el_type) { case "note": // regular items are just pushed. if (!elem.rest || elem.rest.type !== 'spacer') { if (elem.decoration) { if (elem.decoration.indexOf('ppp') >= 0) voices[voiceNumber].push({ el_type: 'beat', beats: [30, 20, 10, 1] }); else if (elem.decoration.indexOf('pp') >= 0) voices[voiceNumber].push({ el_type: 'beat', beats: [45, 35, 20, 1] }); else if (elem.decoration.indexOf('p') >= 0) voices[voiceNumber].push({ el_type: 'beat', beats: [60, 50, 35, 1] }); else if (elem.decoration.indexOf('mp') >= 0) voices[voiceNumber].push({ el_type: 'beat', beats: [75, 65, 50, 1] }); else if (elem.decoration.indexOf('mf') >= 0) voices[voiceNumber].push({ el_type: 'beat', beats: [90, 80, 65, 1] }); else if (elem.decoration.indexOf('f') >= 0) voices[voiceNumber].push({ el_type: 'beat', beats: [105, 95, 80, 1] }); else if (elem.decoration.indexOf('ff') >= 0) voices[voiceNumber].push({ el_type: 'beat', beats: [120, 110, 95, 1] }); else if (elem.decoration.indexOf('fff') >= 0) voices[voiceNumber].push({ el_type: 'beat', beats: [127, 125, 110, 1] }); } voices[voiceNumber].push(elem); noteEventsInBar++; } break; case "key": if (elem.root === 'HP') voices[voiceNumber].push({el_type: 'key', accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}]}); else voices[voiceNumber].push({el_type: 'key', accidentals: elem.accidentals }); break; case "meter": voices[voiceNumber].push(interpretMeter(elem)); break; case "clef": // need to keep this to catch the "transpose" element. if (elem.transpose) voices[voiceNumber].push({ el_type: 'transpose', transpose: elem.transpose }); break; case "tempo": qpm = interpretTempo(elem); voices[voiceNumber].push({ el_type: 'tempo', qpm: qpm }); break; case "bar": if (noteEventsInBar > 0) // don't add two bars in a row. voices[voiceNumber].push({ el_type: 'bar' }); // We need the bar marking to reset the accidentals. noteEventsInBar = 0; // figure out repeats and endings -- // The important part is where there is a start repeat, and end repeat, or a first ending. var endRepeat = (elem.type === "bar_right_repeat" || elem.type === "bar_dbl_repeat"); var startEnding = (elem.startEnding === '1'); var startRepeat = (elem.type === "bar_left_repeat" || elem.type === "bar_dbl_repeat" || elem.type === "bar_right_repeat"); if (endRepeat) { var s = startRepeatPlaceholder[voiceNumber]; if (!s) s = 0; // If there wasn't a left repeat, then we repeat from the beginning. var e = skipEndingPlaceholder[voiceNumber]; if (!e) e = voices[voiceNumber].length; // If there wasn't a first ending marker, then we copy everything. voices[voiceNumber] = voices[voiceNumber].concat(voices[voiceNumber].slice(s, e)); // reset these in case there is a second repeat later on. skipEndingPlaceholder[voiceNumber] = undefined; startRepeatPlaceholder[voiceNumber] = undefined; } if (startEnding) skipEndingPlaceholder[voiceNumber] = voices[voiceNumber].length; if (startRepeat) startRepeatPlaceholder[voiceNumber] = voices[voiceNumber].length; break; case 'style': // TODO-PER: If this is set to rhythm heads, then it should use the percussion channel. break; case 'part': // TODO-PER: If there is a part section in the header, then this should probably affect the repeats. break; case 'stem': case 'scale': // These elements don't affect sound break; case 'midi': //console.log("MIDI inline", elem); // TODO-PER: for debugging. Remove this. var drumChange = false; switch (elem.cmd) { case "drumon": drumOn = true; drumChange = true; break; case "drumoff": drumOn = false; drumChange = true; break; case "drum": drumPattern = elem.params; drumChange = true; break; case "drumbars": drumBars = elem.params[0]; drumChange = true; break; case "drummap": // This is handled before getting here so it can be ignored. break; case "program": voices[voiceNumber].push({ el_type: 'instrument', program: elem.params[0] }); break; case "transpose": voices[voiceNumber].push({ el_type: 'transpose', transpose: elem.params[0] }); break; case "gchordoff": voices[voiceNumber].push({ el_type: 'gchord', tacet: true }); break; case "gchordon": voices[voiceNumber].push({ el_type: 'gchord', tacet: false }); break; case "beat": voices[voiceNumber].push({ el_type: 'beat', beats: elem.params }); break; case "nobeataccents": voices[voiceNumber].push({ el_type: 'beataccents', value: false }); break; case "beataccents": voices[voiceNumber].push({ el_type: 'beataccents', value: true }); break; case "vol": voices[voiceNumber].push({ el_type: 'vol', volume: elem.params[0] }); break; case "volinc": voices[voiceNumber].push({ el_type: 'volinc', volume: elem.params[0] }); break; default: console.log("MIDI seq: midi cmd not handled: ", elem.cmd, elem); } if (drumChange) { voices[0].push({el_type: 'drum', params: { pattern: drumPattern, bars: drumBars, intro: drumIntro, on: drumOn}}); startingDrumSet = true; } break; default: console.log("MIDI: element type " + elem.el_type + " not handled."); } } voiceNumber++; } } } } if (drumIntro) { var pickups = abctune.getPickupLength(); // add some measures of rests to the start of each track. for (var vv = 0; vv < voices.length; vv++) { var insertPoint = 0; while (voices[vv][insertPoint].el_type !== "note" && voices[vv].length > insertPoint) insertPoint++; if (voices[vv].length > insertPoint) { for (var w = 0; w < drumIntro; w++) { // If it is the last measure of intro, subtract the pickups. if (pickups === 0 || w < drumIntro-1) voices[vv].splice(insertPoint, 0, {el_type: "note", rest: {type: "rest"}, duration: measureLength}, { el_type: "bar" }); else { voices[vv].splice(insertPoint, 0, {el_type: "note", rest: {type: "rest"}, duration: measureLength-pickups}); } } } } } return voices; }; function interpretTempo(element) { var duration = 1/4; if (element.duration) { duration = element.duration[0]; } var bpm = 60; if (element.bpm) { bpm = element.bpm; } // The tempo is defined with a beat of a 1/4 note, so we need to adjust it if the tempo is expressed with other than a quarter note. // expressedDuration * expressedBeatsPerMinute / lengthOfQuarterNote = quarterNotesPerMinute return duration * bpm / 0.25; } function interpretMeter(element) { var meter; switch (element.type) { case "common_time": meter = { el_type: 'meter', num: 4, den: 4 }; break; case "cut_time": meter = { el_type: 'meter', num: 2, den: 2 }; break; case "specified": // TODO-PER: only taking the first meter, so the complex meters are not handled. meter = { el_type: 'meter', num: element.value[0].num, den: element.value[0].den }; break; default: // This should never happen. meter = { el_type: 'meter' }; } measureLength = meter.num/meter.den; return meter; } })(); var abc_midi_sequencer = sequence; // abc_midi_flattener.js: Turn a linear series of events into a series of MIDI commands. // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // We input a set of voices, but the notes are still complex. This pass changes the logical definitions // of the grace notes, decorations, ties, triplets, rests, transpositions, keys, and accidentals into actual note durations. // It also extracts guitar chords to a separate voice and resolves their rhythm. var flatten; (function() { var barAccidentals; var accidentals; var transpose; var bagpipes; var multiplier; var tracks; var startingTempo; var tempoChangeFactor = 1; var instrument; var currentInstrument; // var channel; var currentTrack; var pitchesTied; var lastNoteDurationPosition; var currentTrackCounter; var meter = { num: 4, den: 4 }; var chordTrack; var chordTrackFinished; var chordChannel; var chordInstrument = 0; var drumInstrument = 128; var currentChords; var lastChord; var barBeat; var gChordTacet = false; var doBeatAccents = true; var stressBeat1 = 105; var stressBeatDown = 95; var stressBeatUp = 85; var beatFraction = 0.25; var nextVolume; var nextVolumeDelta; var drumTrack; var drumDefinition = {}; var normalBreakBetweenNotes = 1.0/128; // a 128th note of silence between notes for articulation. flatten = function(voices, options) { if (!options) options = {}; barAccidentals = []; accidentals = [0,0,0,0,0,0,0]; bagpipes = false; multiplier = 1; tracks = []; startingTempo = undefined; tempoChangeFactor = 1; instrument = undefined; currentInstrument = undefined; // channel = undefined; currentTrack = undefined; currentTrackCounter = undefined; pitchesTied = {}; // For resolving chords. meter = { num: 4, den: 4 }; chordTrack = []; chordChannel = voices.length; // first free channel for chords chordTrackFinished = false; currentChords = []; lastChord = undefined; barBeat = 0; gChordTacet = options.chordsOff ? true : false; doBeatAccents = true; stressBeat1 = 105; stressBeatDown = 95; stressBeatUp = 85; beatFraction = 0.25; nextVolume = undefined; nextVolumeDelta = undefined; // For the drum/metronome track. drumTrack = []; drumDefinition = {}; zeroOutMilliseconds(voices); for (var i = 0; i < voices.length; i++) { transpose = 0; lastNoteDurationPosition = -1; var voice = voices[i]; currentTrack = [{ cmd: 'program', channel: i, instrument: instrument }]; currentTrackCounter = 0; pitchesTied = {}; for (var j = 0; j < voice.length; j++) { var element = voice[j]; switch (element.el_type) { case "note": writeNote(element, options.voicesOff); break; case "key": accidentals = setKeySignature(element); break; case "meter": meter = element; beatFraction = getBeatFraction(meter); break; case "tempo": if (!startingTempo) startingTempo = element.qpm; else tempoChangeFactor = element.qpm ? startingTempo / element.qpm : 1; break; case "transpose": transpose = element.transpose; break; case "bar": if (chordTrack.length > 0 && i === 0) { resolveChords(); currentChords = []; } barBeat = 0; barAccidentals = []; if (i === 0) // Only write the drum part on the first voice so that it is not duplicated. writeDrum(voices.length+1); break; case "bagpipes": bagpipes = true; break; case "instrument": if (instrument === undefined) instrument = element.program; currentInstrument = element.program; if (currentTrack.length > 0 && currentTrack[currentTrack.length-1].cmd === 'program') currentTrack[currentTrack.length-1].instrument = element.program; else { var ii; for (ii = currentTrack.length-1; ii >= 0 && currentTrack[ii].cmd !== 'program'; ii--) ; if (ii < 0 || currentTrack[ii].instrument !== element.program) currentTrack.push({cmd: 'program', channel: i, instrument: element.program}); } break; case "channel": // if (channel === undefined) // channel = element.channel; // currentTrack[0].channel = element.channel; break; case "drum": drumDefinition = normalizeDrumDefinition(element.params); break; case "gchord": if (!options.chordsOff) gChordTacet = element.tacet; break; case "beat": stressBeat1 = element.beats[0]; stressBeatDown = element.beats[1]; stressBeatUp = element.beats[2]; // TODO-PER: also use the last parameter - which changes which beats are strong. break; case "vol": nextVolume = element.volume; break; case "volinc": nextVolumeDelta = element.volume; break; case "beataccents": doBeatAccents = element.value; break; default: // This should never happen console.log("MIDI creation. Unknown el_type: " + element.el_type + "\n");// jshint ignore:line break; } } if (currentTrack[0].instrument === undefined) currentTrack[0].instrument = instrument ? instrument : 0; tracks.push(currentTrack); if (chordTrack.length > 0) // Don't do chords on more than one track, so turn off chord detection after we create it. chordTrackFinished = true; if (drumTrack.length > 0) // Don't do drums on more than one track, so turn off drum after we create it. ; } if (chordTrack.length > 0) tracks.push(chordTrack); if (drumTrack.length > 0) tracks.push(drumTrack); // Adjust the tempo according to the meter. The rules are this: // 1) If the denominator is 2 or 4, then always make a beat be the denominator. // // 2) If the denominator is 8 or 16, then: // a) If the numerator is divisible by 3, the beat is 3*denominator. // b) Otherwise the beat is the denominator. // // 3) If the denominator is anything else, then don't worry about it because it doesn't make sense. Don't modify it and hope for the best. // // Right now, the startingTempo is calculated for a quarter note, so modify it if necessary. // var num = startingMeter ? parseInt(startingMeter.num, 10) : meter.num; // var den = startingMeter ? parseInt(startingMeter.den, 10) : meter.den; // if (den === 2) // startingTempo *= 2; // else if (den === 8) { // if (parseInt(num, 10) % 3 === 0) // startingTempo *= 3/2; // else // startingTempo /= 2; // } else if (den === 16) { // if (num % 3 === 0) // startingTempo *= 3/4; // else // startingTempo /= 4; // } return { tempo: startingTempo, instrument: instrument, tracks: tracks, totalDuration: totalDuration(tracks) }; }; function zeroOutMilliseconds(voices) { for (var i = 0; i < voices.length; i++) { var voice = voices[i]; for (var j = 0; j < voice.length; j++) { var element = voice[j]; delete element.currentTrackMilliseconds; } } } function totalDuration(tracks) { var total = 0; for (var i = 0; i < tracks.length; i++) { var track = tracks[i]; var trackTotal = 0; for (var j = 0; j < track.length; j++) { var event = track[j]; if (event.duration) trackTotal += event.duration; } total = Math.max(total, trackTotal); } return total; } function getBeatFraction(meter) { switch (meter.den) { case 2: return 0.5; case 4: return 0.25; case 8: return 0.375; case 16: return 0.125; } return 0.25; } // // The algorithm for chords is: // - The chords are done in a separate track. // - If there are notes before the first chord, then put that much silence to start the track. // - The pattern of chord expression depends on the meter, and how many chords are in a measure. // - There is a possibility that a measure will have an incorrect number of beats, if that is the case, then // start the pattern anew on the next measure number. // - If a chord root is not A-G, then ignore it as if the chord wasn't there at all. // - If a chord modification isn't in our supported list, change it to a major triad. // // - If there is only one chord in a measure: // - If 2/4, play root chord // - If cut time, play root(1) chord(3) // - If 3/4, play root chord chord // - If 4/4 or common time, play root chord fifth chord // - If 6/8, play root(1) chord(3) fifth(4) chord(6) // - For any other meter, play the full chord on each beat. (TODO-PER: expand this as more support is added.) // // - If there is a chord specified that is not on a beat, move it earlier to the previous beat, unless there is already a chord on that beat. // - Otherwise, move it later, unless there is already a chord on that beat. // - Otherwise, ignore it. (TODO-PER: expand this as more support is added.) // // - If there is a chord on the second beat, play a chord for the first beat instead of a bass note. // - Likewise, if there is a chord on the fourth beat of 4/4, play a chord on the third beat instead of a bass note. // var breakSynonyms = [ 'break', '(break)', 'no chord', 'n.c.', 'tacet']; function findChord(elem) { if (gChordTacet) return 'break'; // TODO-PER: Just using the first chord if there are more than one. if (chordTrackFinished || !elem.chord || elem.chord.length === 0) return null; // Return the first annotation that is a regular chord: that is, it is in the default place or is a recognized "tacet" phrase. for (var i = 0; i < elem.chord.length; i++) { var ch = elem.chord[i]; if (ch.position === 'default') return ch.name; if (breakSynonyms.indexOf(ch.name.toLowerCase()) >= 0) return 'break'; } return null; } function timeFromStart() { var distance = 0; for (var ct = 0; ct < currentTrack.length; ct++) { if (currentTrack[ct].cmd === 'move') distance += currentTrack[ct].duration; } return distance; } function writeNote(elem, voiceOff) { // // Create a series of note events to append to the current track. // The output event is one of: { pitchStart: pitch_in_abc_units, volume: from_1_to_64 } // { pitchStop: pitch_in_abc_units } // { moveTime: duration_in_abc_units } // If there are guitar chords, then they are put in a separate track, but they have the same format. // var volume; if (nextVolume) { volume = nextVolume; nextVolume = undefined; } else if (!doBeatAccents) { volume = stressBeatDown; } else { if (barBeat === 0) volume = stressBeat1; else if (barBeat % beatFraction < 0.001) // A little slop because of JavaScript floating point math. volume = stressBeatDown; else volume = stressBeatUp; } if (nextVolumeDelta) { volume += nextVolumeDelta; nextVolumeDelta = undefined; } if (volume < 0) volume = 0; if (volume > 127) volume = 127; var velocity = voiceOff ? 0 : volume; var chord = findChord(elem); if (chord) { var c = interpretChord(chord); // If this isn't a recognized chord, just completely ignore it. if (c) { // If we ever have a chord in this voice, then we add the chord track. // However, if there are chords on more than one voice, then just use the first voice. if (chordTrack.length === 0) { chordTrack.push({cmd: 'program', channel: chordChannel, instrument: chordInstrument}); // need to figure out how far in time the chord started: if there are pickup notes before the chords start, we need pauses. var distance = timeFromStart(); if (distance > 0) chordTrack.push({cmd: 'move', duration: distance*tempoChangeFactor }); } lastChord = c; currentChords.push({chord: lastChord, beat: barBeat}); } } if (elem.startTriplet) { multiplier = elem.tripletMultiplier; } var duration = (elem.durationClass ? elem.durationClass : elem.duration) *multiplier; barBeat += duration; // if there are grace notes, then also play them. // I'm not sure there is an exact rule for the length of the notes. My rule, unless I find // a better one is: the grace notes cannot take more than 1/2 of the main note's value. // A grace note (of 1/8 note duration) takes 1/8 of the main note's value. var graces; if (elem.gracenotes) { // There are two cases: if this is bagpipe, the grace notes are played on the beat with the current note. // Normally, the grace notes would be played before the beat. (If this is the first note in the track, however, then it is played on the current beat.) // The reason for the exception on the first note is that it would otherwise move the whole track in time and would affect all the other tracks. var stealFromCurrent = (bagpipes || lastNoteDurationPosition < 0 || currentTrack.length === 0); var stealFromDuration = stealFromCurrent ? duration : currentTrack[lastNoteDurationPosition].duration; graces = processGraceNotes(elem.gracenotes, stealFromDuration); if (!bagpipes) { duration = writeGraceNotes(graces, stealFromCurrent, duration, null, velocity); } } // The currentTrackCounter is the number of whole notes from the beginning of the piece. // The beat fraction is the note that gets a beat (.25 is a quarter note) // The tempo is in minutes and we want to get to milliseconds. if (!elem.currentTrackMilliseconds) elem.currentTrackMilliseconds = []; elem.currentTrackMilliseconds.push(currentTrackCounter / beatFraction / startingTempo * 60*1000); if (elem.pitches) { if (graces && bagpipes) { // If it is bagpipes, then the graces are played with the note. If the grace has the same pitch as the note, then we just skip it. duration = writeGraceNotes(graces, true, duration, null, velocity); } var pitches = []; elem.midiPitches = []; for (var i=0; i= 0; last--) { if (currentTrack[last].cmd === 'start' && currentTrack[last].pitch === actualPitch && currentTrack[last].elem) { var pitchArray = currentTrack[last].elem.midiPitches; for (var last2 = 0; last2 < pitchArray.length; last2++) { if (pitchArray[last2].pitch-60 === actualPitch) { // TODO-PER: the 60 is to compensate for the midi pitch numbers again. pitchArray[last2].durationInMeasures += duration * tempoChangeFactor; } } break; } } } if (note.startTie) { pitchesTied['' + actualPitch] = true; currentTrack[currentTrack.length-1].elem = elem; } else if (note.endTie) pitchesTied[''+actualPitch] = false; } if (elem.gracenotes) { for (var j = 0; j < elem.gracenotes.length; j++) { elem.midiGraceNotePitches = []; var grace = elem.gracenotes[j]; elem.midiGraceNotePitches.push({ pitch: adjustPitch(grace)+60, durationInMeasures: 0, volume: volume, instrument: currentInstrument}); } } var thisBreakBetweenNotes = normalBreakBetweenNotes; var soundDuration = duration-normalBreakBetweenNotes; if (soundDuration < 0) { soundDuration = 0; thisBreakBetweenNotes = 0; } currentTrack.push({ cmd: 'move', duration: soundDuration*tempoChangeFactor }); lastNoteDurationPosition = currentTrack.length-1; currentTrackCounter += soundDuration*tempoChangeFactor; for (var ii = 0; ii < pitches.length; ii++) { if (!pitchesTied[''+pitches[ii].pitch]) currentTrack.push({ cmd: 'stop', pitch: pitches[ii].pitch }); } currentTrack.push({ cmd: 'move', duration: thisBreakBetweenNotes*tempoChangeFactor }); currentTrackCounter += thisBreakBetweenNotes*tempoChangeFactor; } else if (elem.rest) { currentTrack.push({ cmd: 'move', duration: duration*tempoChangeFactor }); currentTrackCounter += duration*tempoChangeFactor; } if (elem.endTriplet) { multiplier=1; } } var scale = [0,2,4,5,7,9,11]; function adjustPitch(note) { if (note.midipitch) return note.midipitch - 60; var pitch = note.pitch; if (note.accidental) { switch(note.accidental) { // change that pitch (not other octaves) for the rest of the bar case "sharp": barAccidentals[pitch]=1; break; case "flat": barAccidentals[pitch]=-1; break; case "natural": barAccidentals[pitch]=0; break; case "dblsharp": barAccidentals[pitch]=2; break; case "dblflat": barAccidentals[pitch]=-2; break; } } var actualPitch = extractOctave(pitch) *12 + scale[extractNote(pitch)]; if ( barAccidentals[pitch]!==undefined) { actualPitch += barAccidentals[pitch]; } else { // use normal accidentals actualPitch += accidentals[extractNote(pitch)]; } actualPitch += transpose; return actualPitch; } function setKeySignature(elem) { var accidentals = [0,0,0,0,0,0,0]; if (!elem.accidentals) return accidentals; for (var i = 0; i < elem.accidentals.length; i++) { var acc = elem.accidentals[i]; var d = (acc.acc === "sharp") ? 1 : (acc.acc === "natural") ?0 : -1; var lowercase = acc.note.toLowerCase(); var note = extractNote(lowercase.charCodeAt(0)-'c'.charCodeAt(0)); accidentals[note]+=d; } return accidentals; } var graceDivider = 8; // This is the fraction of a note that the grace represents. That is, if this is 2, then a grace note of 1/16 would be a 1/32. function processGraceNotes(graces, companionDuration) { var graceDuration = 0; var ret = []; var grace; for (var g = 0; g < graces.length; g++) { grace = graces[g]; graceDuration += grace.duration; } graceDuration = graceDuration / graceDivider; var multiplier = (graceDuration * 2 > companionDuration) ? companionDuration/(graceDuration * 2) : 1; for (g = 0; g < graces.length; g++) { grace = graces[g]; var pitch = grace.midipitch ? grace.midipitch - 60 : grace.pitch; ret.push({ pitch: pitch, duration: grace.duration/graceDivider*multiplier }); } return ret; } function writeGraceNotes(graces, stealFromCurrent, duration, skipNote, velocity) { for (var g = 0; g < graces.length; g++) { var gp = graces[g]; if (gp !== skipNote) currentTrack.push({cmd: 'start', pitch: gp.pitch, volume: velocity}); currentTrack.push({cmd: 'move', duration: graces[g].duration*tempoChangeFactor }); if (gp !== skipNote) currentTrack.push({cmd: 'stop', pitch: gp.pitch}); if (!stealFromCurrent) currentTrack[lastNoteDurationPosition].duration -= graces[g].duration; duration -= graces[g].duration; } return duration; } function extractOctave(pitch) { return Math.floor(pitch/7); } function extractNote(pitch) { pitch = pitch%7; if (pitch<0) pitch+=7; return pitch; } var basses = { 'A': -27, 'B': -25, 'C': -24, 'D': -22, 'E': -20, 'F': -19, 'G': -17 }; function interpretChord(name) { // chords have the format: // [root][acc][modifier][/][bass][acc] // (The chord might be surrounded by parens. Just ignore them.) // root must be present and must be from A-G. // acc is optional and can be # or b // The modifier can be a wide variety of things, like "maj7". As they are discovered, more are supported here. // If there is a slash, then there is a bass note, which can be from A-G, with an optional acc. // If the root is unrecognized, then "undefined" is returned and there is no chord. // If the modifier is unrecognized, a major triad is returned. // If the bass notes is unrecognized, it is ignored. if (name.length === 0) return undefined; if (name === 'break') return { chick: []}; var root = name.substring(0,1); if (root === '(') { name = name.substring(1,name.length-2); if (name.length === 0) return undefined; root = name.substring(0,1); } var bass = basses[root]; if (!bass) // If the bass note isn't listed, then this was an unknown root. Only A-G are accepted. return undefined; bass += transpose; var bass2 = bass - 5; // The alternating bass is a 4th below var chick; if (name.length === 1) chick = chordNotes(bass, ''); var remaining = name.substring(1); var acc = remaining.substring(0,1); if (acc === 'b' || acc === '♭') { bass--; bass2--; remaining = remaining.substring(1); } else if (acc === '#' || acc === '♯') { bass++; bass2++; remaining = remaining.substring(1); } var arr = remaining.split('/'); chick = chordNotes(bass, arr[0]); if (arr.length === 2) { var explicitBass = basses[arr[1].substring(0,1)]; if (explicitBass) { var bassAcc = arr[1].substring(1); var bassShift = {'#': 1, '♯': 1, 'b': -1, '♭': -1}[bassAcc] || 0; bass = basses[arr[1].substring(0,1)] + bassShift + transpose; bass2 = bass; } } return { boom: bass, boom2: bass2, chick: chick }; } var chordIntervals = { // diminished (all flat 5 chords) 'dim': [ 0, 3, 6 ], '°': [ 0, 3, 6 ], '˚': [ 0, 3, 6 ], 'dim7': [ 0, 3, 6, 9 ], '°7': [ 0, 3, 6, 9 ], '˚7': [ 0, 3, 6, 9 ], 'ø7': [ 0, 3, 6, 10 ], 'm7(b5)': [ 0, 3, 6, 10 ], 'm7b5': [ 0, 3, 6, 10 ], '-7(b5)': [ 0, 3, 6, 10 ], '-7b5': [ 0, 3, 6, 10 ], '7b5': [ 0, 4, 6, 10 ], '7(b5)': [ 0, 4, 6, 10 ], '7♭5': [ 0, 4, 6, 10 ], '7(b9,b5)': [ 0, 4, 6, 10, 13 ], '7b9,b5': [ 0, 4, 6, 10, 13 ], '7(#9,b5)': [ 0, 4, 6, 10, 15 ], '7#9b5': [ 0, 4, 6, 10, 15 ], 'maj7(b5)': [ 0, 3, 6, 11 ], 'maj7b5': [ 0, 3, 6, 11 ], '13(b5)': [ 0, 4, 6, 10, 14, 18 ], '13b5': [ 0, 4, 6, 10, 14, 18 ], // minor (all normal 5, minor 3 chords) 'm': [ 0, 3, 7 ], '-': [ 0, 3, 7 ], 'm6': [ 0, 3, 7, 9 ], '-6': [ 0, 3, 7, 9 ], 'm7': [ 0, 3, 7, 10 ], '-7': [ 0, 3, 7, 10 ], '-(b6)': [ 0, 3, 7, 8 ], '-b6': [ 0, 3, 7, 8 ], '-6/9': [ 0, 3, 7, 9, 14 ], '-7(b9)': [ 0, 3, 7, 10, 13 ], '-7b9': [ 0, 3, 7, 10, 13 ], '-maj7': [ 0, 3, 7, 11 ], '-9+7': [ 0, 3, 7, 11, 13 ], '-11': [ 0, 3, 7, 11, 14, 16 ], // major (all normal 5, major 3 chords) 'M': [ 0, 4, 7 ], '6': [ 0, 4, 7, 9 ], '6/9': [ 0, 4, 7, 9, 14 ], '7': [ 0, 4, 7, 10 ], '9': [ 0, 4, 7, 10, 14 ], '11': [ 0, 4, 7, 10, 14, 16 ], '13': [ 0, 4, 7, 10, 14, 18 ], '7b9': [ 0, 4, 7, 10, 13 ], '7♭9': [ 0, 4, 7, 10, 13 ], '7(b9)': [ 0, 4, 7, 10, 13 ], '7(#9)': [ 0, 4, 7, 10, 15 ], '7#9': [ 0, 4, 7, 10, 15 ], '(13)': [ 0, 4, 7, 10, 14, 18 ], '7(9,13)': [ 0, 4, 7, 10, 14, 18 ], '7(#9,b13)': [ 0, 4, 7, 10, 15, 17 ], '7(#11)': [ 0, 4, 7, 10, 14, 17 ], '7#11': [ 0, 4, 7, 10, 14, 17 ], '7(b13)': [ 0, 4, 7, 10, 17 ], '7b13': [ 0, 4, 7, 10, 17 ], '9(#11)': [ 0, 4, 7, 10, 14, 17 ], '9#11': [ 0, 4, 7, 10, 14, 17 ], '13(#11)': [ 0, 4, 7, 10, 15, 18 ], '13#11': [ 0, 4, 7, 10, 15, 18 ], 'maj7': [ 0, 4, 7, 11 ], '∆7': [ 0, 4, 7, 11 ], 'Δ7': [ 0, 4, 7, 11 ], 'maj9': [ 0, 4, 7, 11, 14 ], 'maj7(9)': [ 0, 4, 7, 11, 14 ], 'maj7(11)': [ 0, 4, 7, 11, 16 ], 'maj7(#11)': [ 0, 4, 7, 11, 17 ], 'maj7(13)': [ 0, 4, 7, 11, 18 ], 'maj7(9,13)': [ 0, 4, 7, 11, 14, 18 ], '7sus4': [ 0, 5, 7, 10 ], 'm7sus4': [ 0, 5, 7, 10 ], 'sus4': [ 0, 5, 7 ], 'sus2': [ 0, 2, 7 ], '7sus2': [ 0, 2, 7, 10 ], '9sus4': [ 0, 5, 7, 14 ], '13sus4': [ 0, 5, 7, 18 ], // augmented (all sharp 5 chords) 'aug7': [ 0, 4, 8, 10 ], '+7': [ 0, 4, 8, 10 ], '+': [ 0, 4, 8 ], '7#5': [ 0, 4, 8, 10 ], '7♯5': [ 0, 4, 8, 10 ], '7+5': [ 0, 4, 8, 10 ], '9#5': [ 0, 4, 8, 10, 14 ], '9♯5': [ 0, 4, 8, 10, 14 ], '9+5': [ 0, 4, 8, 10, 14 ], '-7(#5)': [ 0, 3, 8, 10 ], '-7#5': [ 0, 3, 8, 10 ], '7(#5)': [ 0, 4, 8, 10 ], '7(b9,#5)': [ 0, 4, 8, 10, 13 ], '7b9#5': [ 0, 4, 8, 10, 13 ], 'maj7(#5)': [ 0, 4, 8, 11 ], 'maj7#5': [ 0, 4, 8, 11 ], 'maj7(#5,#11)': [ 0, 4, 8, 11, 14 ], 'maj7#5#11': [ 0, 4, 8, 11, 14 ], '9(#5)': [ 0, 4, 8, 10, 14 ], '13(#5)': [ 0, 4, 8, 10, 14, 18 ], '13#5': [ 0, 4, 8, 10, 14, 18 ] }; function chordNotes(bass, modifier) { var intervals = chordIntervals[modifier]; if (!intervals) intervals = chordIntervals.M; bass += 12; // the chord is an octave above the bass note. var notes = [ ]; for (var i = 0; i < intervals.length; i++) { notes.push(bass + intervals[i]); } return notes; } function writeBoom(boom, beatLength) { // undefined means there is a stop time. if (boom !== undefined) chordTrack.push({cmd: 'start', pitch: boom, volume: 64}); chordTrack.push({ cmd: 'move', duration: (beatLength/2)*tempoChangeFactor }); if (boom !== undefined) chordTrack.push({ cmd: 'stop', pitch: boom }); chordTrack.push({ cmd: 'move', duration: (beatLength/2)*tempoChangeFactor }); } function writeChick(chick, beatLength) { for (var c = 0; c < chick.length; c++) chordTrack.push({cmd: 'start', pitch: chick[c], volume: 48}); chordTrack.push({ cmd: 'move', duration: (beatLength/2)*tempoChangeFactor }); for (c = 0; c < chick.length; c++) chordTrack.push({ cmd: 'stop', pitch: chick[c] }); chordTrack.push({ cmd: 'move', duration: (beatLength/2)*tempoChangeFactor }); } var rhythmPatterns = { "2/2": [ 'boom', 'chick' ], "2/4": [ 'boom', 'chick' ], "3/4": [ 'boom', 'chick', 'chick' ], "4/4": [ 'boom', 'chick', 'boom2', 'chick' ], "5/4": [ 'boom', 'chick', 'chick', 'boom2', 'chick' ], "6/8": [ 'boom', '', 'chick', 'boom2', '', 'chick' ], "9/8": [ 'boom', '', 'chick', 'boom2', '', 'chick', 'boom2', '', 'chick' ], "12/8": [ 'boom', '', 'chick', 'boom2', '', 'chick', 'boom2', '', 'chick', 'boom2', '', 'chick' ], }; function resolveChords() { var num = meter.num; var den = meter.den; var beatLength = 1/den; var pattern = rhythmPatterns[num+'/'+den]; var thisMeasureLength = parseInt(num,10)/parseInt(den,10); // See if this is a full measure: unfortunately, with triplets, there isn't an exact match, what with the floating point, so we just see if it is "close". var portionOfAMeasure = Math.abs(thisMeasureLength - barBeat); if (!pattern || portionOfAMeasure > 0.0078125) { // If it is an unsupported meter, or this isn't a full bar, just chick on each beat. pattern = []; var beatsPresent = barBeat / beatLength; for (var p = 0; p < beatsPresent; p++) pattern.push("chick"); } if (currentChords.length === 0) { // there wasn't a new chord this measure, so use the last chord declared. currentChords.push({ beat: 0, chord: lastChord}); } if (currentChords[0].beat !== 0 && lastChord) { // this is the case where there is a chord declared in the measure, but not on its first beat. currentChords.unshift({ beat: 0, chord: lastChord}); } if (currentChords.length === 1) { for (var m = 0; m < pattern.length; m++) { switch (pattern[m]) { case 'boom': writeBoom(currentChords[0].chord.boom, beatLength); break; case 'boom2': writeBoom(currentChords[0].chord.boom2, beatLength); break; case 'chick': writeChick(currentChords[0].chord.chick, beatLength); break; case '': chordTrack.push({ cmd: 'move', duration: beatLength*tempoChangeFactor }); break; } } return; } // If we are here it is because more than one chord was declared in the measure, so we have to sort out what chord goes where. // First, normalize the chords on beats. var beats = {}; for (var i = 0; i < currentChords.length; i++) { var cc = currentChords[i]; var beat = Math.floor(cc.beat / beatLength); // now all the beats are integers, there may be beats[''+beat] = cc; } // - If there is a chord on the second beat, play a chord for the first beat instead of a bass note. // - Likewise, if there is a chord on the fourth beat of 4/4, play a chord on the third beat instead of a bass note. for (var m2 = 0; m2 < pattern.length; m2++) { var thisChord; if (beats[''+m2]) thisChord = beats[''+m2]; switch (pattern[m2]) { case 'boom': if (beats[''+(m2+1)]) // If there is not a chord change on the next beat, play a bass note. writeChick(thisChord.chord.chick, beatLength); else writeBoom(thisChord.chord.boom, beatLength); break; case 'boom2': if (beats[''+(m2+1)]) writeChick(thisChord.chord.chick, beatLength); else writeBoom(thisChord.chord.boom2, beatLength); break; case 'chick': writeChick(thisChord.chord.chick, beatLength); break; case '': if (beats[''+m2]) // If there is an explicit chord on this beat, play it. writeChick(thisChord.chord.chick, beatLength); else chordTrack.push({cmd: 'move', duration: beatLength*tempoChangeFactor }); break; } } } function normalizeDrumDefinition(params) { // Be very strict with the drum definition. If anything is not perfect, // just turn the drums off. // Perhaps all of this logic belongs in the parser instead. if (params.pattern.length === 0 || params.on === false) return { on: false }; var str = params.pattern[0]; var events = []; var event = ""; var totalPlay = 0; for (var i = 0; i < str.length; i++) { if (str[i] === 'd') totalPlay++; if (str[i] === 'd' || str[i] === 'z') { if (event.length !== 0) { events.push(event); event = str[i]; } else event = event + str[i]; } else { if (event.length === 0) { // there was an error: the string should have started with d or z return {on: false}; } event = event + str[i]; } } if (event.length !== 0) events.push(event); // Now the events array should have one item per event. // There should be two more params for each event: the volume and the pitch. if (params.pattern.length !== totalPlay*2 + 1) return { on: false }; var ret = { on: true, bars: params.bars, pattern: []}; var beatLength = 1/meter.den; var playCount = 0; for (var j = 0; j < events.length; j++) { event = events[j]; var len = 1; var div = false; var num = 0; for (var k = 1; k < event.length; k++) { switch(event[k]) { case "/": if (num !== 0) len *= num; num = 0; div = true; break; case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": num = num*10 +event[k]; break; default: return { on: false }; } } if (div) { if (num === 0) num = 2; // a slash by itself is interpreted as "/2" len /= num; } else if (num) len *= num; if (event[0] === 'd') { ret.pattern.push({ len: len * beatLength, pitch: params.pattern[1 + playCount], velocity: params.pattern[1 + playCount + totalPlay]}); playCount++; } else ret.pattern.push({ len: len * beatLength, pitch: null}); } // Now normalize the pattern to cover the correct number of measures. The note lengths passed are relative to each other and need to be scaled to fit a measure. var totalTime = 0; var measuresPerBeat = meter.num/meter.den; for (var ii = 0; ii < ret.pattern.length; ii++) totalTime += ret.pattern[ii].len; var numBars = params.bars ? params.bars : 1; var factor = totalTime / numBars / measuresPerBeat; for (ii = 0; ii < ret.pattern.length; ii++) ret.pattern[ii].len = ret.pattern[ii].len / factor; return ret; } function drumBeat(pitch, soundLength, volume) { drumTrack.push({ cmd: 'start', pitch: pitch - 60, volume: volume}); drumTrack.push({ cmd: 'move', duration: soundLength }); drumTrack.push({ cmd: 'stop', pitch: pitch - 60 }); } function writeDrum(channel) { if (drumTrack.length === 0 && !drumDefinition.on) return; var measureLen = meter.num/meter.den; if (drumTrack.length === 0) { drumTrack.push({cmd: 'program', channel: channel, instrument: drumInstrument}); // need to figure out how far in time the bar started: if there are pickup notes before the chords start, we need pauses. var distance = timeFromStart(); if (distance > 0 && distance < measureLen - 0.01) { // because of floating point, adding the notes might not exactly equal the measure size. drumTrack.push({cmd: 'move', duration: distance * tempoChangeFactor}); return; } } if (!drumDefinition.on) { // this is the case where there has been a drum track, but it was specifically turned off. drumTrack.push({ cmd: 'move', duration: measureLen * tempoChangeFactor }); return; } for (var i = 0; i < drumDefinition.pattern.length; i++) { var len = drumDefinition.pattern[i].len * tempoChangeFactor; if (drumDefinition.pattern[i].pitch) drumBeat(drumDefinition.pattern[i].pitch, len, drumDefinition.pattern[i].velocity); else drumTrack.push({ cmd: 'move', duration: len }); } } })(); var abc_midi_flattener = flatten; // TODO-PER: remove the midi tests from here: I don't think the object can be constructed unless it passes. var notSupportedMessage = "MIDI is not supported in this browser."; var defaultSoundFontUrl = "https://paulrosen.github.io/midi-js-soundfonts/FluidR3_GM/"; function CreateSynth() { var self = this; self.audioBufferPossible = undefined; self.directSource = []; // type: AudioBufferSourceNode self.startTimeSec = undefined; // the time that the midi started: used for pause/resume. self.pausedTimeSec = undefined; // the time that the midi was paused: used for resume. self.audioBuffers = []; // cache of the buffers so starting play can be fast. self.duration = undefined; // the duration of the tune in seconds. self.isRunning = false; // whether there is currently a sound buffer running. // Load and cache all needed sounds self.init = function(options) { if (!options) options = {}; registerAudioContext_1(options.audioContext); // This works no matter what - if there is already an ac it is a nop; if the context is not passed in, then it creates one. var startTime = activeAudioContext_1().currentTime; self.debugCallback = options.debugCallback; if (self.debugCallback) self.debugCallback("init called"); self.audioBufferPossible = self._deviceCapable(); if (!self.audioBufferPossible) return Promise.reject({ status: "NotSupported", message: notSupportedMessage}); self.soundFontUrl = options.soundFontUrl ? options.soundFontUrl : defaultSoundFontUrl; self.millisecondsPerMeasure = options.millisecondsPerMeasure ? options.millisecondsPerMeasure : (options.visualObj ? options.visualObj.millisecondsPerMeasure() : 1000); var params = options.options ? options.options : {}; self.meterSize = 1; if (options.visualObj) { var seq = abc_midi_sequencer(options.visualObj, params); self.flattened = abc_midi_flattener(seq, params); self.meterSize = options.visualObj.getMeterFraction().num / options.visualObj.getMeterFraction().den; } else if (options.sequence) self.flattened = options.sequence; else return Promise.reject(new Error("Must pass in either a visualObj or a sequence")); self.sequenceCallback = params.sequenceCallback; self.callbackContext = params.callbackContext; self.onEnded = options.onEnded; var allNotes = {}; var currentInstrument = instrumentIndexToName_1[0]; self.flattened.tracks.forEach(function(track) { track.forEach(function(event) { if (event.cmd === "program" && instrumentIndexToName_1[event.instrument]) currentInstrument = instrumentIndexToName_1[event.instrument]; if (event.pitch !== undefined) { var pitchNumber = event.pitch + 60; var noteName = pitchToNoteName_1[pitchNumber]; if (noteName) { if (!allNotes[currentInstrument]) allNotes[currentInstrument] = {}; allNotes[currentInstrument][pitchToNoteName_1[pitchNumber]] = true; } else console.log("Can't find note: ", pitchNumber); } }); }); if (self.debugCallback) self.debugCallback("note gathering time = " + Math.floor((activeAudioContext_1().currentTime - startTime)*1000)+"ms"); startTime = activeAudioContext_1().currentTime; var notes = []; Object.keys(allNotes).forEach(function(instrument) { Object.keys(allNotes[instrument]).forEach(function(note) { notes.push({ instrument: instrument, note: note }); }); }); // If there are lots of notes, load them in batches var batches = []; var CHUNK = 256; for (var i=0; i < notes.length; i += CHUNK) { batches.push(notes.slice(i, i + CHUNK)); } return new Promise(function(resolve, reject) { var results = []; var index = 0; var next = function() { if (index < batches.length) { self._loadBatch(batches[index], self.soundFontUrl, startTime).then(function(data) { startTime = activeAudioContext_1().currentTime; results.push(data); index++; next(); }, reject); } else { resolve(results); } }; next(); }); }; self._loadBatch = (function(batch, soundFontUrl, startTime) { var promises = []; batch.forEach(function(item) { promises.push(loadNote(soundFontUrl, item.instrument, item.note, activeAudioContext_1())); }); return Promise.all(promises).then(function(response) { if (self.debugCallback) self.debugCallback("mp3 load time = " + Math.floor((activeAudioContext_1().currentTime - startTime)*1000)+"ms"); return Promise.resolve(response); }); }); self.prime = function() { self.isRunning = false; if (!self.audioBufferPossible) return Promise.reject(new Error(notSupportedMessage)); if (self.debugCallback) self.debugCallback("prime called"); return new Promise(function(resolve) { var startTime = activeAudioContext_1().currentTime; var tempoMultiplier = self.millisecondsPerMeasure / 1000 / self.meterSize; self.duration = self.flattened.totalDuration * tempoMultiplier; var totalSamples = Math.floor(activeAudioContext_1().sampleRate * self.duration); // There might be a previous run that needs to be turned off. self.stop(); var noteMapTracks = createNoteMap_1(self.flattened); if (self.sequenceCallback) self.sequenceCallback(noteMapTracks, self.callbackContext); //console.log(noteMapTracks); self.audioBuffers = []; noteMapTracks.forEach(function(noteMap) { var audioBuffer = activeAudioContext_1().createBuffer(1, totalSamples, activeAudioContext_1().sampleRate); var chanData = audioBuffer.getChannelData(0); noteMap.forEach(function(note) { self._placeNote(chanData, note, tempoMultiplier, soundsCache_1); }); self.audioBuffers.push(audioBuffer); }); if (self.debugCallback) { self.debugCallback("sampleRate = " + activeAudioContext_1().sampleRate); self.debugCallback("totalSamples = " + totalSamples); self.debugCallback("creationTime = " + Math.floor((activeAudioContext_1().currentTime - startTime)*1000) + "ms"); } resolve({ status: "ok", seconds: 0 }); }); }; // This is called after everything is set up, so it can quickly make sound self.start = function() { if (self.pausedTimeSec) { self.resume(); return; } if (!self.audioBufferPossible) throw new Error(notSupportedMessage); if (self.debugCallback) self.debugCallback("start called"); self._kickOffSound(0); self.startTimeSec = activeAudioContext_1().currentTime; self.pausedTimeSec = undefined; if (self.debugCallback) self.debugCallback("MIDI STARTED", self.startTimeSec); }; self.pause = function() { if (!self.audioBufferPossible) throw new Error(notSupportedMessage); if (self.debugCallback) self.debugCallback("pause called"); if (!self.pausedTimeSec) { // ignore if self is already paused. self.stop(); self.pausedTimeSec = activeAudioContext_1().currentTime; } }; self.resume = function() { if (!self.audioBufferPossible) throw new Error(notSupportedMessage); if (self.debugCallback) self.debugCallback("resume called"); var offset = self.pausedTimeSec - self.startTimeSec; self.startTimeSec = activeAudioContext_1().currentTime - offset; // We move the start time in case there is another pause/resume. self.pausedTimeSec = undefined; self._kickOffSound(offset); }; self.seek = function(percent) { var offset = self.duration * percent; // TODO-PER: can seek when paused or when playing if (!self.audioBufferPossible) throw new Error(notSupportedMessage); if (self.debugCallback) self.debugCallback("seek called sec=" + offset); if (self.isRunning) { self.stop(); self._kickOffSound(offset); } var pauseDistance = self.pausedTimeSec ? self.pausedTimeSec - self.startTimeSec : undefined; self.startTimeSec = activeAudioContext_1().currentTime - offset; if (self.pausedTimeSec) self.pausedTimeSec = self.startTimeSec + pauseDistance; }; self.stop = function() { self.isRunning = false; self.pausedTimeSec = undefined; self.directSource.forEach(function(source) { try { source.stop(); } catch (error) { // We don't care if self succeeds: it might fail if something else turned off the sound or it ended for some reason. console.log("direct source didn't stop:", error); } }); self.directSource = []; }; self.download = function() { return downloadBuffer_1(self); }; /////////////// Private functions ////////////// self._deviceCapable = function() { if (!supportsAudio_1()) { console.warn(notSupportedMessage); if (self.debugCallback) self.debugCallback(notSupportedMessage); return false; } return true; }; self._kickOffSound = function(seconds) { self.isRunning = true; self.directSource = []; self.audioBuffers.forEach(function(audioBuffer, trackNum) { self.directSource[trackNum] = activeAudioContext_1().createBufferSource(); // creates a sound source self.directSource[trackNum].buffer = audioBuffer; // tell the source which sound to play self.directSource[trackNum].connect(activeAudioContext_1().destination); // connect the source to the context's destination (the speakers) }); self.directSource.forEach(function(source) { source.start(0, seconds); }); if (self.onEnded) { self.directSource[0].onended = function () { self.onEnded(self.callbackContext); }; } }; self._placeNote = function(chanData, note, tempoMultiplier, soundsCache) { var start = Math.floor(note.start*activeAudioContext_1().sampleRate * tempoMultiplier); var numBeats = note.end - note.start; var noteTimeSec = numBeats * tempoMultiplier; var noteName = pitchToNoteName_1[note.pitch+60]; if (noteName) { // Just ignore pitches that don't exist. var pitch = soundsCache[note.instrument][noteName].getChannelData(0); var duration = Math.min(pitch.length, Math.floor(noteTimeSec * activeAudioContext_1().sampleRate)); //console.log(pitchToNote[note.pitch+''], start, numBeats, noteTimeSec, duration); for (var i = 0; i < duration; i++) { var thisSample = pitch[i] * note.volume / 128; if (chanData[start + i]) chanData[start + i] = (chanData[start + i] + thisSample) *0.75; else chanData[start + i] = thisSample; } } }; } var createSynth = CreateSynth; var SynthSequence = function() { var self = this; self.tracks = []; self.totalDuration = 0; self.addTrack = function() { self.tracks.push([]); return self.tracks.length - 1; }; self.setInstrument = function(trackNumber, instrumentNumber) { self.tracks[trackNumber].push({ channel: 0, cmd: "program", instrument: instrumentNumber }); }; self.appendNote = function(trackNumber, pitch, durationInMeasures, volume) { self.tracks[trackNumber].push({ cmd: "start", pitch: pitch - 60, volume: volume }); self.tracks[trackNumber].push({ cmd: "move", duration: durationInMeasures }); self.tracks[trackNumber].push({ cmd: "stop", pitch: pitch - 60 }); var duration = 0; self.tracks[trackNumber].forEach(function(event) { if (event.duration) duration += event.duration; }); self.totalDuration = Math.max(self.totalDuration, duration); }; }; var synthSequence = SynthSequence; // TODO-PER: The require statements for svg don't play well for node apps without extra plugins. The following lines would be clearer than inlining the SVG // var loopImage = require('./images/loop.svg'); // var playImage = require('./images/play.svg'); // var pauseImage = require('./images/pause.svg'); // var loadingImage = require('./images/loading.svg'); // var resetImage = require('./images/reset.svg'); var loopImage = '\n' + '\n' + '\n' + '\n' + '\n' + '\n'; var playImage = '\n' + ' \n' + ' \n' + ' \n' + ''; var pauseImage = '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ''; var loadingImage = '\n' + ' \n' + ''; var resetImage = '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ''; function CreateSynthControl(parent, options) { var self = this; // parent is either an element or a selector. if (typeof parent === "string") { var selector = parent; parent = document.querySelector(selector); if (!parent) throw new Error("Cannot find element \"" + selector + "\" in the DOM."); } else if (!(parent instanceof HTMLElement)) throw new Error("The first parameter must be a valid element or selector in the DOM."); self.parent = parent; self.options = {}; if (options) self.options = abc_common.clone(options); // This can be called in the following cases: // AC already registered and not suspended // AC already registered and suspended // AC not registered and not passed in // AC not registered but passed in (but suspended) // AC not registered but passed in (not suspended) // If the AC is already registered, then just use it - ignore what is passed in // Create the AC if necessary if there isn't one already. // We don't care right now if the AC is suspended - whenever a button is clicked then we check it. if (self.options.ac) registerAudioContext_1(self.options.ac); buildDom(self.parent, self.options); attachListeners(self); self.setTempo = function(tempo) { var el = self.parent.querySelector(".abcjs-midi-current-tempo"); if (el) el.innerHTML = tempo; }; self.resetAll = function() { var pushedButtons = self.parent.querySelectorAll(".abcjs-pushed"); for (var i = 0; i < pushedButtons.length; i++) { var button = pushedButtons[i]; button.classList.remove("abcjs-pushed"); } }; self.pushPlay = function(push) { var startButton = self.parent.querySelector(".abcjs-midi-start"); if (!startButton) return; if (push) startButton.classList.add("abcjs-pushed"); else startButton.classList.remove("abcjs-pushed"); }; self.pushLoop = function(push) { var loopButton = self.parent.querySelector(".abcjs-midi-loop"); if (!loopButton) return; if (push) loopButton.classList.add("abcjs-pushed"); else loopButton.classList.remove("abcjs-pushed"); }; self.setProgress = function (percent, totalTime) { var progressBackground = self.parent.querySelector(".abcjs-midi-progress-background"); var progressThumb = self.parent.querySelector(".abcjs-midi-progress-indicator"); if (!progressBackground || !progressThumb) return; var width = progressBackground.clientWidth; var left = width * percent; progressThumb.style.left = left + "px"; var clock = self.parent.querySelector(".abcjs-midi-clock"); if (clock) { var totalSeconds = (totalTime * percent) / 1000; var minutes = Math.floor(totalSeconds / 60); var seconds = Math.floor(totalSeconds % 60); var secondsFormatted = seconds < 10 ? "0" + seconds : seconds; clock.innerHTML = minutes + ":" + secondsFormatted; } }; if (self.options.afterResume) { var isResumed = false; if (self.options.ac) { isResumed = self.options.ac.state !== "suspended"; } else if (activeAudioContext_1()) { isResumed = activeAudioContext_1().state !== "suspended"; } if (isResumed) self.options.afterResume(); } } function buildDom(parent, options) { var hasLoop = !!options.loopHandler; var hasRestart = !!options.restartHandler; var hasPlay = !!options.playHandler || !!options.playPromiseHandler; var hasProgress = !!options.progressHandler; var hasWarp = !!options.warpHandler; var hasClock = options.hasClock !== false; var html = '
\n'; if (hasLoop) { var repeatTitle = options.repeatTitle ? options.repeatTitle : "Click to toggle play once/repeat."; var repeatAria = options.repeatAria ? options.repeatAria : repeatTitle; html += '\n'; } if (hasRestart) { var restartTitle = options.restartTitle ? options.restartTitle : "Click to go to beginning."; var restartAria = options.restartAria ? options.restartAria : restartTitle; html += '\n'; } if (hasPlay) { var playTitle = options.playTitle ? options.playTitle : "Click to play/pause."; var playAria = options.playAria ? options.playAria : playTitle; html += '\n'; } if (hasProgress) { var randomTitle = options.randomTitle ? options.randomTitle : "Click to change the playback position."; var randomAria = options.randomAria ? options.randomAria : randomTitle; html += '\n'; } if (hasClock) { html += '\n'; } if (hasWarp) { var warpTitle = options.warpTitle ? options.warpTitle : "Change the playback speed."; var warpAria = options.warpAria ? options.warpAria : warpTitle; var bpm = options.bpm ? options.bpm : "BPM"; html += ' ( ' + bpm + ')\n'; } html += '
\n'; parent.innerHTML = html; } function acResumerMiddleWare(next, ev, playBtn, afterResume, isPromise) { var needsInit = true; if (!activeAudioContext_1()) { registerAudioContext_1(); } else { needsInit = activeAudioContext_1().state === "suspended"; } if (!supportsAudio_1()) { throw { status: "NotSupported", message: "This browser does not support audio."}; } if ((needsInit || isPromise) && playBtn) playBtn.classList.add("abcjs-loading"); if (needsInit) { activeAudioContext_1().resume().then(function () { if (afterResume) { afterResume().then(function (response) { doNext(next, ev, playBtn, isPromise); }); } else { doNext(next, ev, playBtn, isPromise); } }); } else { doNext(next, ev, playBtn, isPromise); } } function doNext(next, ev, playBtn, isPromise) { if (isPromise) { next(ev).then(function() { if (playBtn) playBtn.classList.remove("abcjs-loading"); }); } else { next(ev); if (playBtn) playBtn.classList.remove("abcjs-loading"); } } function attachListeners(self) { var hasLoop = !!self.options.loopHandler; var hasRestart = !!self.options.restartHandler; var hasPlay = !!self.options.playHandler || !!self.options.playPromiseHandler; var hasProgress = !!self.options.progressHandler; var hasWarp = !!self.options.warpHandler; var playBtn = self.parent.querySelector(".abcjs-midi-start"); if (hasLoop) self.parent.querySelector(".abcjs-midi-loop").addEventListener("click", function(ev){acResumerMiddleWare(self.options.loopHandler, ev, playBtn, self.options.afterResume);}); if (hasRestart) self.parent.querySelector(".abcjs-midi-reset").addEventListener("click", function(ev){acResumerMiddleWare(self.options.restartHandler, ev, playBtn, self.options.afterResume);}); if (hasPlay) playBtn.addEventListener("click", function(ev){ acResumerMiddleWare( self.options.playPromiseHandler || self.options.playHandler, ev, playBtn, self.options.afterResume, !!self.options.playPromiseHandler); }); if (hasProgress) self.parent.querySelector(".abcjs-midi-progress-background").addEventListener("click", function(ev){acResumerMiddleWare(self.options.progressHandler, ev, playBtn, self.options.afterResume);}); if (hasWarp) self.parent.querySelector(".abcjs-midi-tempo").addEventListener("change", function(ev){acResumerMiddleWare(self.options.warpHandler, ev, playBtn, self.options.afterResume);}); } var createSynthControl = CreateSynthControl; function playEvent(midiPitches, midiGracePitches, millisecondsPerMeasure) { var sequence = new synthSequence(); for (var i = 0; i < midiPitches.length; i++) { var note = midiPitches[i]; var trackNum = sequence.addTrack(); sequence.setInstrument(trackNum, note.instrument); if (i === 0 && midiGracePitches) { for (var j = 0; j < midiGracePitches.length; j++) { var grace = midiGracePitches[j]; sequence.appendNote(trackNum, grace.pitch, 1 / 64, grace.volume); } } sequence.appendNote(trackNum, note.pitch, note.durationInMeasures, note.volume); } var buffer = new createSynth(); return buffer.init({ sequence: sequence, millisecondsPerMeasure: millisecondsPerMeasure }).then(function () { return buffer.prime(); }).then(function () { return buffer.start(); }); } var playEvent_1 = playEvent; function SynthController() { var self = this; self.warp = 100; self.cursorControl = null; self.visualObj = null; self.timer = null; self.midiBuffer = null; self.options = null; self.currentTempo = null; self.control = null; self.isLooping = false; self.isStarted = false; self.isLoaded = false; self.load = function (selector, cursorControl, visualOptions) { if (!visualOptions) visualOptions = {}; self.control = new createSynthControl(selector, { loopHandler: visualOptions.displayLoop ? self.toggleLoop : undefined, restartHandler: visualOptions.displayRestart ? self.restart : undefined, playPromiseHandler: visualOptions.displayPlay ? self.play : undefined, progressHandler: visualOptions.displayProgress ? self.randomAccess : undefined, warpHandler: visualOptions.displayWarp ? self.onWarp : undefined, afterResume: self.init }); self.cursorControl = cursorControl; }; self.setTune = function(visualObj, userAction, audioParams) { self.isLoaded = false; self.visualObj = visualObj; self.options = audioParams; if (self.control) { self.pause(); self.setProgress(0, 1); self.control.resetAll(); self.restart(); self.isStarted = false; } self.isLooping = false; if (userAction) return self.go(); else { return Promise.resolve({status: "no-audio-context"}); } }; self.go = function () { var millisecondsPerMeasure = self.visualObj.millisecondsPerMeasure() * 100 / self.warp; self.currentTempo = Math.round(self.visualObj.getBeatsPerMeasure() / millisecondsPerMeasure * 60000); if (self.control) self.control.setTempo(self.currentTempo); self.percent = 0; if (!self.midiBuffer) self.midiBuffer = new createSynth(); return self.midiBuffer.init({ visualObj: self.visualObj, options: self.options, millisecondsPerMeasure: millisecondsPerMeasure }).then(function () { return self.midiBuffer.prime(); }).then(function () { var subdivisions = 16; if (self.cursorControl && self.cursorControl.beatSubdivisions !== undefined && parseInt(self.cursorControl.beatSubdivisions, 10) >= 1 && parseInt(self.cursorControl.beatSubdivisions, 10) <= 64) subdivisions = parseInt(self.cursorControl.beatSubdivisions, 10); // Need to create the TimingCallbacks after priming the midi so that the midi data is available for the callbacks. self.timer = new abc_timing_callbacks(self.visualObj, { beatCallback: self.beatCallback, eventCallback: self.eventCallback, lineEndCallback: self.lineEndCallback, qpm: self.currentTempo, extraMeasuresAtBeginning: self.cursorControl ? self.cursorControl.extraMeasuresAtBeginning : undefined, lineEndAnticipation: self.cursorControl ? self.cursorControl.lineEndAnticipation : undefined, beatSubdivisions: subdivisions, }); if (self.cursorControl && self.cursorControl.onReady && typeof self.cursorControl.onReady === 'function') self.cursorControl.onReady(self); self.isLoaded = true; return Promise.resolve({ status: "created" }); }); }; self.destroy = function () { if (self.timer) { self.timer.reset(); self.timer.stop(); self.timer = null; } if (self.midiBuffer) { self.midiBuffer.stop(); self.midiBuffer = null; } self.setProgress(0, 1); if (self.control) self.control.resetAll(); }; self.play = function () { if (!self.isLoaded) { return self.go().then(function() { return self._play(); }); } else return self._play(); }; self._play = function () { self.isStarted = !self.isStarted; if (self.isStarted) { if (self.cursorControl && self.cursorControl.onStart && typeof self.cursorControl.onStart === 'function') self.cursorControl.onStart(); self.midiBuffer.start(); self.timer.start(); if (self.control) self.control.pushPlay(true); } else { self.pause(); } return Promise.resolve({ status: "ok" }); }; self.pause = function() { if (self.timer) { self.timer.pause(); self.midiBuffer.pause(); if (self.control) self.control.pushPlay(false); } }; self.toggleLoop = function () { self.isLooping = !self.isLooping; if (self.control) self.control.pushLoop(self.isLooping); }; self.restart = function () { if (self.timer) { self.timer.setProgress(0); self.midiBuffer.seek(0); } }; self.randomAccess = function (ev) { if (!self.isLoaded) { return self.go().then(function() { return self._randomAccess(ev); }); } else return self._randomAccess(ev); }; self._randomAccess = function (ev) { var background = (ev.target.classList.contains('abcjs-midi-progress-indicator')) ? ev.target.parentNode : ev.target; var percent = (ev.x - background.offsetLeft) / background.offsetWidth; if (percent < 0) percent = 0; if (percent > 100) percent = 100; self.timer.setProgress(percent); self.midiBuffer.seek(percent); }; self.onWarp = function (ev) { var newWarp = ev.target.value; if (parseInt(newWarp, 10) > 0) { self.warp = parseInt(newWarp, 10); var wasPlaying = self.isStarted; var startPercent = self.percent; self.destroy(); self.isStarted = false; self.go().then(function () { self.setProgress(startPercent, self.midiBuffer.duration * 1000); if (wasPlaying) { self.play(); } self.timer.setProgress(startPercent); self.midiBuffer.seek(startPercent); }); } }; self.setProgress = function (percent, totalTime) { self.percent = percent; if (self.control) self.control.setProgress(percent, totalTime); }; self.finished = function () { self.timer.reset(); if (self.isLooping) { self.timer.start(); self.midiBuffer.start(); } else { self.timer.stop(); if (self.isStarted) { if (self.control) self.control.pushPlay(false); self.isStarted = false; if (self.cursorControl && self.cursorControl.onFinished && typeof self.cursorControl.onFinished === 'function') self.cursorControl.onFinished(); self.setProgress(0, 1); } } }; self.beatCallback = function (beatNumber, totalBeats, totalTime) { var percent = beatNumber / totalBeats; self.setProgress(percent, totalTime); if (self.cursorControl && self.cursorControl.onBeat && typeof self.cursorControl.onBeat === 'function') self.cursorControl.onBeat(beatNumber, totalBeats, totalTime); }; self.eventCallback = function (event) { if (event) { if (self.cursorControl && self.cursorControl.onEvent && typeof self.cursorControl.onEvent === 'function') self.cursorControl.onEvent(event); } else { self.finished(); } }; self.lineEndCallback = function (data) { if (self.cursorControl && self.cursorControl.onLineEnd && typeof self.cursorControl.onLineEnd === 'function') self.cursorControl.onLineEnd(data); }; self.getUrl = function () { return self.midiBuffer.download(); }; self.download = function(fileName) { var url = self.getUrl(); var link = document.createElement('a'); document.body.appendChild(link); link.setAttribute("style","display: none;"); link.href = url; link.download = fileName ? fileName : 'output.wav'; link.click(); window.URL.revokeObjectURL(url); document.body.removeChild(link); }; } var synthController = SynthController; // abc2abc_write.js: Prints an abc file in text format parsed by abc_parse.js // Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated // documentation files (the "Software"), to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and // to permit persons to whom the Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING // BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var TextPrinter = function(elem, reposition) { this.elem = elem; this.text = ""; this.l = 1/8; this.reposition = reposition || false; }; TextPrinter.prototype.printString = function(str, elem) { if (this.reposition && elem) elem.startChar = this.text.length; this.text += str; if (this.reposition && elem) elem.endChar = this.text.length; }; TextPrinter.prototype.printNewLine = function () { this.text += "\n"; }; TextPrinter.prototype.printSpace = function () { if (this.text[this.text.length-1].match(/\s/)) return; //TODO match whitespace this.text += " "; }; TextPrinter.prototype.printABC = function(abctune) { this.text = ""; this.abctune = abctune; //TODO formatting this.printHeader(); this.printBody(); this.elem.value=this.text; }; TextPrinter.prototype.printHeader = function() { // much of this info is duplicated in metaTextHEaders in abc_parse_header.js this.printHeaderLine("x","X","1"); this.printHeaderLine("title","T"); this.printHeaderLine("composer","C"); this.printHeaderLine("history","H"); this.printHeaderLine("author","A"); this.printHeaderLine("book","B"); this.printHeaderLine("discography","D"); this.printHeaderLine("url","F"); this.printHeaderLine("group","G"); this.printHeaderLine("instruction","I"); this.printHeaderLine("notes","N"); this.printHeaderLine("origin","O"); this.printHeaderLine("rhythm","R"); this.printHeaderLine("source","S"); this.printHeaderLine("unalignedwords","W"); this.printHeaderLine("transcription","Z"); //TODO part order //TODO Q tempo //TODO textBlock this.printHeaderLine("NULL","L","1/8"); //TODO L this.printHeaderLine("NULL","M",this.getMeterString(this.abctune.lines[0].staff[0].meter)); this.printHeaderLine("NULL","K",this.getKeyString(this.abctune.lines[0].staff[0].key));//TODO K }; TextPrinter.prototype.getKeyString = function(key) { return key.root+key.acc+key.mode; }; TextPrinter.prototype.getMeterString = function(meter) { switch (meter.type) { case "cut_time": return "C|"; case "common_time": return "C"; case "specified": if (meter.value[0].den) return meter.value[0].num+"/"+meter.value[0].den; else return meter.value[0].num; } return ""; }; TextPrinter.prototype.printHeaderLine = function(fieldname, abcfield, defaut) { var val = this.abctune.metaText[fieldname] || defaut; if (val !== undefined) { var valarray = val.split("\n"); for (var i=0; i 1) str+="["; for (i=0; i 1) str+="]"; } if (elem.pitches.length === 1 && elem.pitches[0].endSlur) { str+=this.multiplyString(")",elem.pitches[0].endSlur.length); } if (elem.endSlur) { str+=this.multiplyString(")",elem.endSlur.length); } this.printString(str,elem); }; // accidentals, ties and sometimes slurs, sometimes duration TextPrinter.prototype.getNoteString = function(pitchelem, ignoreslur) { var str = ""; if (!ignoreslur && pitchelem.startSlur) { str+="("; } var symb = ""; switch (pitchelem.accidental) { case "quartersharp": symb = "^/"; break; case "dblsharp": symb = "^^"; break; case "sharp": symb = "^"; break; case "quarterflat": symb = "_/"; break; case "flat": symb = "_"; break; case "dblflat": symb = "__"; break; case "natural": symb = "="; } str+=symb; var pitches = ["C","D","E","F","G","A","B"]; var pitchstr = pitches[this.extractNote(pitchelem.pitch)]; var octave = this.extractOctave(pitchelem.pitch); if (octave>0) { pitchstr = pitchstr.toLowerCase(); octave--; while (octave>0) { pitchstr+="'"; octave--; } } else { while (octave<0) { pitchstr+=","; octave++; } } str+=pitchstr; if (pitchelem.duration) { str+=this.getDurationString(pitchelem.duration); } if (!ignoreslur && pitchelem.endSlur) { str+=")"; } if (pitchelem.startTie) { str+="-"; } return str; }; TextPrinter.prototype.getDurationString = function(duration) { //TODO detect crooked rhythm if (duration/this.l > 1) { return duration/this.l; } var ret = ""; if (this.l/duration>1) { ret+="/"; if (this.l/duration>2) { ret+=this.l/duration; } } return ret; }; TextPrinter.prototype.extractNote = function(pitch) { var pitch2 = pitch%7; if (pitch2<0) pitch2+=7; return pitch2; }; TextPrinter.prototype.extractOctave = function(pitch) { return Math.floor(pitch/7); }; TextPrinter.prototype.printBarLine = function(elem) { var barstr = ""; switch (elem.type) { case "bar_thin": barstr+="|"; break; case "bar_thin_thick": barstr+="|]"; break; case "bar_thin_thin": barstr+="||"; break; case "bar_thick_thin": barstr+="[|"; break; case "bar_dbl_repeat": barstr+=":||:"; break; case "bar_left_repeat": barstr+="|:"; break; case "bar_right_repeat": barstr+=":|"; break; case "bar_invisible": barstr+=""; break; } this.printString(barstr,elem); }; TextPrinter.prototype.multiplyString = function (s, n) { var ret = ""; for (;n>0;n--) ret+=s; return ret; }; var abc2abc_write = TextPrinter; // abc_editor.js // window.ABCJS.Editor is the interface class for the area that contains the ABC text. It is responsible for // holding the text of the tune and calling the parser and the rendering engines. // // EditArea is an example of using a textarea as the control that is shown to the user. As long as // the same interface is used, window.ABCJS.Editor can use a different type of object. // // EditArea: // - constructor(textareaid) // This contains the id of a textarea control that will be used. // - addSelectionListener(listener) // A callback class that contains the entry point fireSelectionChanged() // - addChangeListener(listener) // A callback class that contains the entry point fireChanged() // - getSelection() // returns the object { start: , end: } with the current selection in characters // - setSelection(start, end) // start and end are the character positions that should be selected. // - getString() // returns the ABC text that is currently displayed. // - setString(str) // sets the ABC text that is currently displayed, and resets the initialText variable // - getElem() // returns the textarea element // - string initialText // Contains the starting text. This can be compared against the current text to see if anything changed. // /*global document, window, clearTimeout, setTimeout */ var TuneBook = abc_tunebook.TuneBook; // Polyfill for CustomEvent for old IE versions if ( typeof window.CustomEvent !== "function" ) { var CustomEvent = function(event, params) { params = params || {bubbles: false, cancelable: false, detail: undefined}; var evt = document.createEvent('CustomEvent'); evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); return evt; }; CustomEvent.prototype = window.Event.prototype; window.CustomEvent = CustomEvent; } var EditArea = function(textareaid) { this.textarea = document.getElementById(textareaid); this.initialText = this.textarea.value; this.isDragging = false; }; EditArea.prototype.addSelectionListener = function(listener) { this.textarea.onmousemove = function(ev) { if (this.isDragging) listener.fireSelectionChanged(); }; }; EditArea.prototype.addChangeListener = function(listener) { this.changelistener = listener; this.textarea.onkeyup = function() { listener.fireChanged(); }; this.textarea.onmousedown = function() { this.isDragging = true; listener.fireSelectionChanged(); }; this.textarea.onmouseup = function() { this.isDragging = false; listener.fireChanged(); }; this.textarea.onchange = function() { listener.fireChanged(); }; }; //TODO won't work under IE? EditArea.prototype.getSelection = function() { return {start: this.textarea.selectionStart, end: this.textarea.selectionEnd}; }; EditArea.prototype.setSelection = function(start, end) { if(this.textarea.setSelectionRange) this.textarea.setSelectionRange(start, end); else if(this.textarea.createTextRange) { // For IE8 var e = this.textarea.createTextRange(); e.collapse(true); e.moveEnd('character', end); e.moveStart('character', start); e.select(); } this.textarea.focus(); }; EditArea.prototype.getString = function() { return this.textarea.value; }; EditArea.prototype.setString = function(str) { this.textarea.value = str; this.initialText = this.getString(); if (this.changelistener) { this.changelistener.fireChanged(); } }; EditArea.prototype.getElem = function() { return this.textarea; }; // // window.ABCJS.Editor: // // constructor(editarea, params) // if editarea is a string, then it is an HTML id of a textarea control. // Otherwise, it should be an instantiation of an object that expresses the EditArea interface. // // params is a hash of: // canvas_id: or paper_id: HTML id to draw in. If not present, then the drawing happens just below the editor. // generate_midi: if present, then midi is generated. // midi_id: if present, the HTML id to place the midi control. Otherwise it is placed in the same div as the paper. // midi_download_id: if present, the HTML id to place the midi download link. Otherwise it is placed in the same div as the paper. // generate_warnings: if present, then parser warnings are displayed on the page. // warnings_id: if present, the HTML id to place the warnings. Otherwise they are placed in the same div as the paper. // onchange: if present, the callback function to call whenever there has been a change. // gui: if present, the paper can send changes back to the editor (presumably because the user changed something directly.) // parser_options: options to send to the parser engine. // midi_options: options to send to the midi engine. // render_options: options to send to the render engine. // indicate_changed: the dirty flag is set if this is true. // // - setReadOnly(bool) // adds or removes the class abc_textarea_readonly, and adds or removes the attribute readonly=yes // - setDirtyStyle(bool) // adds or removes the class abc_textarea_dirty // - renderTune(abc, parserparams, div) // Immediately renders the tune. (Useful for creating the SVG output behind the scenes, if div is hidden) // string abc: the ABC text // parserparams: params to send to the parser // div: the HTML id to render to. // - modelChanged() // Called when the model has been changed to trigger re-rendering // - parseABC() // Called internally by fireChanged() // returns true if there has been a change since last call. // - updateSelection() // Called when the user has changed the selection. This calls the engraver_controller to show the selection. // - fireSelectionChanged() // Called by the textarea object when the user has changed the selection. // - paramChanged(engraverparams) // Called to signal that the engraver params have changed, so re-rendering should occur. // - fireChanged() // Called by the textarea object when the user has changed something. // - setNotDirty() // Called by the client app to reset the dirty flag // - isDirty() // Returns true or false, whether the textarea contains the same text that it started with. // - highlight(abcelem) // Called by the engraver_controller to highlight an area. // - pause(bool) // Stops the automatic rendering when the user is typing. // var Editor = function(editarea, params) { // Copy all the options that will be passed through this.abcjsParams = {}; var key; if (params.abcjsParams) { for (key in params.abcjsParams) { if (params.abcjsParams.hasOwnProperty(key)) { this.abcjsParams[key] = params.abcjsParams[key]; } } } if (params.midi_options) { for (key in params.midi_options) { if (params.midi_options.hasOwnProperty(key)) { this.abcjsParams[key] = params.midi_options[key]; } } } if (params.parser_options) { for (key in params.parser_options) { if (params.parser_options.hasOwnProperty(key)) { this.abcjsParams[key] = params.parser_options[key]; } } } if (params.render_options) { for (key in params.render_options) { if (params.render_options.hasOwnProperty(key)) { this.abcjsParams[key] = params.render_options[key]; } } } if (params.indicate_changed) this.indicate_changed = true; if (typeof editarea === "string") { this.editarea = new EditArea(editarea); } else { this.editarea = editarea; } this.editarea.addSelectionListener(this); this.editarea.addChangeListener(this); if (params.canvas_id) { this.div = document.getElementById(params.canvas_id); } else if (params.paper_id) { this.div = document.getElementById(params.paper_id); } else { this.div = document.createElement("DIV"); this.editarea.getElem().parentNode.insertBefore(this.div, this.editarea.getElem()); } if (params.selectionChangeCallback) { this.selectionChangeCallback = params.selectionChangeCallback; } if (params.synth) { if (supportsAudio_1()) { this.synth = { el: params.synth.el, cursorControl: params.synth.cursorControl, options: params.synth.options }; } } // If the user wants midi, then store the elements that it will be written to. The element could either be passed in as an id, // an element, or nothing. If nothing is passed in, then just put the midi on top of the generated music. if (params.generate_midi) { this.generate_midi = params.generate_midi; if (this.abcjsParams.generateDownload) { if (typeof params.midi_download_id === 'string') this.downloadMidi = document.getElementById(params.midi_download_id); else if (params.midi_download_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough. this.downloadMidi = params.midi_download_id; } if (this.abcjsParams.generateInline !== false) { // The default for this is true, so undefined is also true. if (typeof params.midi_id === 'string') this.inlineMidi = document.getElementById(params.midi_id); else if (params.midi_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough. this.inlineMidi = params.midi_id; } } if (params.generate_warnings || params.warnings_id) { if (params.warnings_id) { this.warningsdiv = document.getElementById(params.warnings_id); } else { this.warningsdiv = this.div; } } this.onchangeCallback = params.onchange; if (params.gui) { this.target = document.getElementById(editarea); this.abcjsParams.editable = true; } this.oldt = ""; this.bReentry = false; this.parseABC(); this.modelChanged(); this.addClassName = function(element, className) { var hasClassName = function(element, className) { var elementClassName = element.className; return (elementClassName.length > 0 && (elementClassName === className || new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); }; if (!hasClassName(element, className)) element.className += (element.className ? ' ' : '') + className; return element; }; this.removeClassName = function(element, className) { element.className = abc_common.strip(element.className.replace( new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ')); return element; }; this.setReadOnly = function(readOnly) { var readonlyClass = 'abc_textarea_readonly'; var el = this.editarea.getElem(); if (readOnly) { el.setAttribute('readonly', 'yes'); this.addClassName(el, readonlyClass); } else { el.removeAttribute('readonly'); this.removeClassName(el, readonlyClass); } }; }; Editor.prototype.renderTune = function(abc, params, div) { var tunebook = new TuneBook(abc); var abcParser = abc_parse(); abcParser.parse(tunebook.tunes[0].abc, params, tunebook.tunes[0].startPos - tunebook.header.length); //TODO handle multiple tunes var tune = abcParser.getTune(); var engraver_controller = new abc_engraver_controller(div, this.abcjsParams); engraver_controller.engraveABC(tune); }; Editor.prototype.redrawMidi = function() { if (this.generate_midi && !this.midiPause) { var event = new window.CustomEvent("generateMidi", { detail: { tunes: this.tunes, abcjsParams: this.abcjsParams, downloadMidiEl: this.downloadMidi, inlineMidiEl: this.inlineMidi, engravingEl: this.div } }); window.dispatchEvent(event); } if (this.synth) { if (!this.synth.synthControl) { this.synth.synthControl = new synthController(); this.synth.synthControl.load(this.synth.el, this.synth.cursorControl, this.synth.options); } this.synth.synthControl.setTune(this.tunes[0], false); } }; Editor.prototype.modelChanged = function() { if (this.tunes === undefined) { if (this.downloadMidi !== undefined) this.downloadMidi.innerHTML = ""; if (this.inlineMidi !== undefined) this.inlineMidi.innerHTML = ""; this.div.innerHTML = ""; return; } if (this.bReentry) return; // TODO is this likely? maybe, if we rewrite abc immediately w/ abc2abc this.bReentry = true; this.timerId = null; this.div.innerHTML = ""; this.engraver_controller = new abc_engraver_controller(this.div, this.abcjsParams); this.engraver_controller.engraveABC(this.tunes); this.tunes[0].engraver = this.engraver_controller; // TODO-PER: We actually want an output object for each tune, not the entire controller. When refactoring, don't save data in the controller. this.redrawMidi(); if (this.warningsdiv) { this.warningsdiv.innerHTML = (this.warnings) ? this.warnings.join("
") : "No errors"; } if (this.target) { var textprinter = new abc2abc_write(this.target, true); textprinter.printABC(this.tunes[0]); //TODO handle multiple tunes } this.engraver_controller.addSelectListener(this.highlight.bind(this)); this.updateSelection(); this.bReentry = false; }; // Call this to reparse in response to the printing parameters changing Editor.prototype.paramChanged = function(engraverParams) { if (engraverParams) { for (var key in engraverParams) { if (engraverParams.hasOwnProperty(key)) { this.abcjsParams[key] = engraverParams[key]; } } } this.oldt = ""; this.fireChanged(); }; // return true if the model has changed Editor.prototype.parseABC = function() { var t = this.editarea.getString(); if (t===this.oldt) { this.updateSelection(); return false; } this.oldt = t; if (t === "") { this.tunes = undefined; this.warnings = ""; return true; } var tunebook = new TuneBook(t); this.tunes = []; this.startPos = []; this.warnings = []; for (var i=0; i 0 && (elementClassName === className || new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); }; if (!hasClassName(element, className)) element.className += (element.className ? ' ' : '') + className; return element; }; var removeClassName = function(element, className) { element.className = abc_common.strip(element.className.replace( new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ')); return element; }; var readonlyClass = 'abc_textarea_dirty'; var el = this.editarea.getElem(); if (isDirty) { addClassName(el, readonlyClass); } else { removeClassName(el, readonlyClass); } }; // call when abc text is changed and needs re-parsing Editor.prototype.fireChanged = function() { if (this.bIsPaused) return; if (this.parseABC()) { var self = this; if (this.timerId) // If the user is still typing, cancel the update clearTimeout(this.timerId); this.timerId = setTimeout(function () { self.modelChanged(); }, 300); // Is this a good compromise between responsiveness and not redrawing too much? var isDirty = this.isDirty(); if (this.wasDirty !== isDirty) { this.wasDirty = isDirty; this.setDirtyStyle(isDirty); } if (this.onchangeCallback) this.onchangeCallback(this); } }; Editor.prototype.setNotDirty = function() { this.editarea.initialText = this.editarea.getString(); this.wasDirty = false; this.setDirtyStyle(false); }; Editor.prototype.isDirty = function() { if (this.indicate_changed === undefined) return false; return this.editarea.initialText !== this.editarea.getString(); }; Editor.prototype.highlight = function(abcelem, tuneNumber, classes) { // TODO-PER: The marker appears to get off by one for each tune parsed. I'm not sure why, but adding the tuneNumber in corrects it for the time being. // var offset = (tuneNumber !== undefined) ? this.startPos[tuneNumber] + tuneNumber : 0; this.editarea.setSelection(abcelem.startChar, abcelem.endChar); if (this.selectionChangeCallback) this.selectionChangeCallback(abcelem.startChar, abcelem.endChar); }; Editor.prototype.pause = function(shouldPause) { this.bIsPaused = shouldPause; if (!shouldPause) this.fireChanged(); }; Editor.prototype.millisecondsPerMeasure = function() { return this.synth.synthControl.visualObj.millisecondsPerMeasure(); }; Editor.prototype.pauseMidi = function(shouldPause) { this.midiPause = shouldPause; if (!shouldPause) this.redrawMidi(); }; var abc_editor = Editor; var abcjs = {}; abcjs.signature = "abcjs-basic v" + version_1; Object.keys(abc_animation).forEach(function (key) { abcjs[key] = abc_animation[key]; }); Object.keys(abc_tunebook).forEach(function (key) { abcjs[key] = abc_tunebook[key]; }); abcjs.renderAbc = abc_tunebook_svg; abcjs.TimingCallbacks = abc_timing_callbacks; abcjs.setGlyph = abc_glyphs.setSymbol; abcjs.synth = { CreateSynth: createSynth, instrumentIndexToName: instrumentIndexToName_1, pitchToNoteName: pitchToNoteName_1, SynthController: synthController, SynthSequence: synthSequence, CreateSynthControl: createSynthControl, registerAudioContext: registerAudioContext_1, activeAudioContext: activeAudioContext_1, supportsAudio: supportsAudio_1, playEvent: playEvent_1 }; abcjs['Editor'] = abc_editor; var abcjs_1 = abcjs; var MusicPlugin = /** @class */ (function (_super) { __extends(MusicPlugin, _super); function MusicPlugin() { return _super !== null && _super.apply(this, arguments) || this; } MusicPlugin.prototype.onload = function () { console.log('loading abcjs plugin'); obsidian.MarkdownPreviewRenderer.registerPostProcessor(MusicPlugin.postprocessor); }; MusicPlugin.prototype.onunload = function () { console.log('unloading abcjs plugin'); obsidian.MarkdownPreviewRenderer.unregisterPostProcessor(MusicPlugin.postprocessor); }; MusicPlugin.postprocessor = function (el, ctx) { // Assumption: One section always contains only the code block var blockToReplace = el.querySelector('pre'); if (!blockToReplace) return; var musicBlock = blockToReplace.querySelector('code.language-music-abc'); if (!musicBlock) return; var source = musicBlock.textContent; var destination = document.createElement('div'); abcjs_1.renderAbc(destination, source, { add_classes: true, responsive: 'resize' }); el.replaceChild(destination, blockToReplace); }; return MusicPlugin; }(obsidian.Plugin)); module.exports = MusicPlugin; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfc3BhY2luZy5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX2NvbW1vbi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvYXBpL2FiY190aW1pbmdfY2FsbGJhY2tzLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9hcGkvYWJjX2FuaW1hdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3BhcnNlX2RpcmVjdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3BhcnNlX2tleV92b2ljZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3BhcnNlX2hlYWRlci5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3Rva2VuaXplci5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2Uvd3JhcF9saW5lcy5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvZGF0YS9hYmNfdHVuZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9hcGkvYWJjX3R1bmVib29rLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfYWJzb2x1dGVfZWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX3JlbGF0aXZlX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19iZWFtX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19icmFjZV9lbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfZ2x5cGhzLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfY3JlYXRlX2NsZWYuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19jcmVhdGVfa2V5X3NpZ25hdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX2NyZWF0ZV90aW1lX3NpZ25hdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX2R5bmFtaWNfZGVjb3JhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvc3ByaW50Zi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX2NyZXNjZW5kb19lbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfdGllX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19kZWNvcmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfZW5kaW5nX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19zdGFmZl9ncm91cF9lbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfdGVtcG9fZWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX3RyaXBsZXRfZWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX3ZvaWNlX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19hYnN0cmFjdF9lbmdyYXZlci5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvc3ZnLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfcmVuZGVyZXIuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19lbmdyYXZlcl9jb250cm9sbGVyLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9hcGkvYWJjX3R1bmVib29rX3N2Zy5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvc291bmRzLWNhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9sb2FkLW5vdGUuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3N5bnRoL2luc3RydW1lbnQtaW5kZXgtdG8tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvY3JlYXRlLW5vdGUtbWFwLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9yZWdpc3Rlci1hdWRpby1jb250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9hY3RpdmUtYXVkaW8tY29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvc3VwcG9ydHMtYXVkaW8uanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3N5bnRoL3BpdGNoLXRvLW5vdGUtbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvZG93bmxvYWQtYnVmZmVyLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9taWRpL2FiY19taWRpX3NlcXVlbmNlci5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvbWlkaS9hYmNfbWlkaV9mbGF0dGVuZXIuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3N5bnRoL2NyZWF0ZS1zeW50aC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvc3ludGgtc2VxdWVuY2UuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3N5bnRoL2NyZWF0ZS1zeW50aC1jb250cm9sLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9wbGF5LWV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9zeW50aC1jb250cm9sbGVyLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy90cmFuc2Zvcm0vYWJjMmFiY193cml0ZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvZWRpdC9hYmNfZWRpdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL2luZGV4LmpzIiwibWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCJ2YXIgdmVyc2lvbiA9ICc1LjEyLjAnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCIvLyAgICBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBzcGFjaW5nID0ge307XG5cbnNwYWNpbmcuRk9OVEVNID0gMzYwO1xuc3BhY2luZy5GT05UU0laRSA9IDMwO1xuc3BhY2luZy5TVEVQID0gc3BhY2luZy5GT05UU0laRSo5My83MjA7XG5zcGFjaW5nLlNQQUNFID0gMTA7XG5zcGFjaW5nLlRPUE5PVEUgPSAxNTtcbnNwYWNpbmcuU1RBVkVIRUlHSFQgPSAxMDA7XG5zcGFjaW5nLklOREVOVCA9IDUwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNwYWNpbmc7XG4iLCIvLyAgICBhYmNfcGFyc2UuanM6IHBhcnNlcyBhIHN0cmluZyByZXByZXNlbnRpbmcgQUJDIE11c2ljIE5vdGF0aW9uIGludG8gYSB1c2FibGUgaW50ZXJuYWwgc3RydWN0dXJlLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggUGF1bCBSb3NlbiAocGF1bCBhdCBwYXVscm9zZW4gZG90IG5ldClcbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHBhcnNlQ29tbW9uID0ge307XG5cbnBhcnNlQ29tbW9uLmNsb25lID0gZnVuY3Rpb24oc291cmNlKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IHt9O1xuXHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBzb3VyY2UpXG5cdFx0aWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG5cdFx0XHRkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldO1xuXHRyZXR1cm4gZGVzdGluYXRpb247XG59O1xuXG5wYXJzZUNvbW1vbi5jbG9uZUFycmF5ID0gZnVuY3Rpb24oc291cmNlKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuXHRcdGRlc3RpbmF0aW9uLnB1c2gocGFyc2VDb21tb24uY2xvbmUoc291cmNlW2ldKSk7XG5cdH1cblx0cmV0dXJuIGRlc3RpbmF0aW9uO1xufTtcblxucGFyc2VDb21tb24uY2xvbmVIYXNoT2ZIYXNoID0gZnVuY3Rpb24oc291cmNlKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IHt9O1xuXHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBzb3VyY2UpXG5cdFx0aWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG5cdFx0XHRkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBwYXJzZUNvbW1vbi5jbG9uZShzb3VyY2VbcHJvcGVydHldKTtcblx0cmV0dXJuIGRlc3RpbmF0aW9uO1xufTtcblxucGFyc2VDb21tb24uY2xvbmVIYXNoT2ZBcnJheU9mSGFzaCA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuXHR2YXIgZGVzdGluYXRpb24gPSB7fTtcblx0Zm9yICh2YXIgcHJvcGVydHkgaW4gc291cmNlKVxuXHRcdGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuXHRcdFx0ZGVzdGluYXRpb25bcHJvcGVydHldID0gcGFyc2VDb21tb24uY2xvbmVBcnJheShzb3VyY2VbcHJvcGVydHldKTtcblx0cmV0dXJuIGRlc3RpbmF0aW9uO1xufTtcblxucGFyc2VDb21tb24uZ3N1YiA9IGZ1bmN0aW9uKHNvdXJjZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHNvdXJjZS5zcGxpdChwYXR0ZXJuKS5qb2luKHJlcGxhY2VtZW50KTtcbn07XG5cbnBhcnNlQ29tbW9uLnN0cmlwID0gZnVuY3Rpb24oc3RyKSB7XG5cdHJldHVybiBzdHIucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFxzKyQvLCAnJyk7XG59O1xuXG5wYXJzZUNvbW1vbi5zdGFydHNXaXRoID0gZnVuY3Rpb24oc3RyLCBwYXR0ZXJuKSB7XG5cdHJldHVybiBzdHIuaW5kZXhPZihwYXR0ZXJuKSA9PT0gMDtcbn07XG5cbnBhcnNlQ29tbW9uLmVuZHNXaXRoID0gZnVuY3Rpb24oc3RyLCBwYXR0ZXJuKSB7XG5cdHZhciBkID0gc3RyLmxlbmd0aCAtIHBhdHRlcm4ubGVuZ3RoO1xuXHRyZXR1cm4gZCA+PSAwICYmIHN0ci5sYXN0SW5kZXhPZihwYXR0ZXJuKSA9PT0gZDtcbn07XG5cbnBhcnNlQ29tbW9uLmVhY2ggPSBmdW5jdGlvbihhcnIsIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG5cdGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcnIubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspXG5cdCAgaXRlcmF0b3IuYXBwbHkoY29udGV4dCwgW2FycltpXSxpXSk7XG59O1xuXG5wYXJzZUNvbW1vbi5sYXN0ID0gZnVuY3Rpb24oYXJyKSB7XG5cdGlmIChhcnIubGVuZ3RoID09PSAwKVxuXHRcdHJldHVybiBudWxsO1xuXHRyZXR1cm4gYXJyW2Fyci5sZW5ndGgtMV07XG59O1xuXG5wYXJzZUNvbW1vbi5jb21wYWN0ID0gZnVuY3Rpb24oYXJyKSB7XG5cdHZhciBvdXRwdXQgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoYXJyW2ldKVxuXHRcdFx0b3V0cHV0LnB1c2goYXJyW2ldKTtcblx0fVxuXHRyZXR1cm4gb3V0cHV0O1xufTtcblxucGFyc2VDb21tb24uZGV0ZWN0ID0gZnVuY3Rpb24oYXJyLCBpdGVyYXRvcikge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChpdGVyYXRvcihhcnJbaV0pKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuLy8gVGhlIGZvbGxvd2luZyBpcyBhIHBvbHlmaWxsIGZvciBPYmplY3QucmVtb3ZlIGZvciBJRTksIElFMTAsIGFuZCBJRTExLlxuLy8gZnJvbTpodHRwczovL2dpdGh1Yi5jb20vanNlcnovanNfcGllY2UvYmxvYi9tYXN0ZXIvRE9NL0NoaWxkTm9kZS9yZW1vdmUoKS9yZW1vdmUoKS5tZFxuKGZ1bmN0aW9uIChhcnIpIHtcblx0YXJyLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgncmVtb3ZlJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGl0ZW0sICdyZW1vdmUnLCB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuXHRcdFx0XHRpZiAodGhpcy5wYXJlbnROb2RlICE9PSBudWxsKVxuXHRcdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59KShbRWxlbWVudC5wcm90b3R5cGUsIENoYXJhY3RlckRhdGEucHJvdG90eXBlLCBEb2N1bWVudFR5cGUucHJvdG90eXBlXSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VDb21tb247XG4iLCJcbnZhciBUaW1pbmdDYWxsYmFja3MgPSBmdW5jdGlvbih0YXJnZXQsIHBhcmFtcykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdGlmICghcGFyYW1zKSBwYXJhbXMgPSB7fTtcblx0c2VsZi5xcG0gPSBwYXJhbXMucXBtID8gcGFyc2VJbnQocGFyYW1zLnFwbSwgMTApIDogbnVsbDtcblx0aWYgKCFzZWxmLnFwbSkge1xuXHRcdHZhciB0ZW1wbyA9IHRhcmdldC5tZXRhVGV4dCA/IHRhcmdldC5tZXRhVGV4dC50ZW1wbyA6IG51bGw7XG5cdFx0c2VsZi5xcG0gPSB0YXJnZXQuZ2V0QnBtKHRlbXBvKTtcblx0fVxuXHRzZWxmLmV4dHJhTWVhc3VyZXNBdEJlZ2lubmluZyA9IHBhcmFtcy5leHRyYU1lYXN1cmVzQXRCZWdpbm5pbmcgPyBwYXJzZUludChwYXJhbXMuZXh0cmFNZWFzdXJlc0F0QmVnaW5uaW5nLCAxMCkgOiAwO1xuXHRzZWxmLmJlYXRDYWxsYmFjayA9IHBhcmFtcy5iZWF0Q2FsbGJhY2s7IC8vIFRoaXMgaXMgY2FsbGVkIGZvciBlYWNoIGJlYXQuXG5cdHNlbGYuZXZlbnRDYWxsYmFjayA9IHBhcmFtcy5ldmVudENhbGxiYWNrOyAgIC8vIFRoaXMgaXMgY2FsbGVkIGZvciBlYWNoIG5vdGUgb3IgcmVzdCBlbmNvdW50ZXJlZC5cblx0c2VsZi5saW5lRW5kQ2FsbGJhY2sgPSBwYXJhbXMubGluZUVuZENhbGxiYWNrOyAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGVuZCBvZiBhIGxpbmUgaXMgYXBwcm9hY2hpbmcuXG5cdHNlbGYubGluZUVuZEFudGljaXBhdGlvbiA9IHBhcmFtcy5saW5lRW5kQW50aWNpcGF0aW9uID8gcGFyc2VJbnQocGFyYW1zLmxpbmVFbmRBbnRpY2lwYXRpb24sIDEwKSA6IDA7ICAgLy8gSG93IG1hbnkgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgZW5kIHNob3VsZCB0aGUgY2FsbCBoYXBwZW4uXG5cdHNlbGYuYmVhdFN1YmRpdmlzaW9ucyA9IHBhcmFtcy5iZWF0U3ViZGl2aXNpb25zID8gcGFyc2VJbnQocGFyYW1zLmJlYXRTdWJkaXZpc2lvbnMsIDEwKSA6IDE7IC8vIGhvdyBtYW55IGNhbGxiYWNrcyBwZXIgYmVhdCBpcyBkZXNpcmVkLlxuXG5cdHNlbGYucmVwbGFjZVRhcmdldCA9IGZ1bmN0aW9uKG5ld1RhcmdldCkge1xuXHRcdG5ld1RhcmdldC5zZXRUaW1pbmcoc2VsZi5xcG0sIHNlbGYuZXh0cmFNZWFzdXJlc0F0QmVnaW5uaW5nKTtcblx0XHRpZiAobmV3VGFyZ2V0Lm5vdGVUaW1pbmdzLmxlbmd0aCA9PT0gMClcblx0XHRcdG5ld1RhcmdldC5zZXRUaW1pbmcoMCwwKTtcblx0XHRpZiAoc2VsZi5saW5lRW5kQ2FsbGJhY2spIHtcblx0XHRcdHNlbGYubGluZUVuZFRpbWluZ3MgPSBnZXRMaW5lRW5kVGltaW5ncyhuZXdUYXJnZXQubm90ZVRpbWluZ3MsIHNlbGYubGluZUVuZEFudGljaXBhdGlvbik7XG5cdFx0fVxuXHRcdHNlbGYubm90ZVRpbWluZ3MgPSBuZXdUYXJnZXQubm90ZVRpbWluZ3M7XG5cdH07XG5cblx0c2VsZi5yZXBsYWNlVGFyZ2V0KHRhcmdldCk7XG5cdGlmIChzZWxmLm5vdGVUaW1pbmdzLmxlbmd0aCA9PT0gMClcblx0XHRyZXR1cm47XG5cblx0Ly8gbm90ZVRpbWluZ3MgY29udGFpbnMgYW4gYXJyYXkgb2YgZXZlbnRzIHNvcnRlZCBieSB0aW1lLiBFdmVudHMgdGhhdCBoYXBwZW4gYXQgdGhlIHNhbWUgdGltZSBhcmUgaW4gdGhlIHNhbWUgZWxlbWVudCBvZiB0aGUgYXJyYXkuXG5cdHNlbGYubm90ZVRpbWluZ3MgPSB0YXJnZXQubm90ZVRpbWluZ3M7XG5cdHNlbGYubWlsbGlzZWNvbmRzUGVyQmVhdCA9IDEwMDAgLyAoc2VsZi5xcG0gLyA2MCkgLyBzZWxmLmJlYXRTdWJkaXZpc2lvbnM7XG5cdHNlbGYubGFzdE1vbWVudCA9IHNlbGYubm90ZVRpbWluZ3Nbc2VsZi5ub3RlVGltaW5ncy5sZW5ndGgtMV0ubWlsbGlzZWNvbmRzO1xuXHRzZWxmLnRvdGFsQmVhdHMgPSBNYXRoLnJvdW5kKHNlbGYubGFzdE1vbWVudCAvIHNlbGYubWlsbGlzZWNvbmRzUGVyQmVhdCk7XG5cblx0c2VsZi5zdGFydFRpbWUgPSBudWxsO1xuXHRzZWxmLmN1cnJlbnRCZWF0ID0gMDtcblx0c2VsZi5jdXJyZW50RXZlbnQgPSAwO1xuXHRzZWxmLmlzUGF1c2VkID0gZmFsc2U7XG5cdHNlbGYuaXNSdW5uaW5nID0gZmFsc2U7XG5cdHNlbGYucGF1c2VkVGltZSA9IG51bGw7XG5cdHNlbGYuanVzdFVucGF1c2VkID0gZmFsc2U7XG5cblx0c2VsZi5uZXdTZWVrUGVyY2VudCA9IDA7XG5cdHNlbGYuanVzdFNlZWtlZCA9IGZhbHNlO1xuXG5cdGZ1bmN0aW9uIHNldEN1cnJlbnRMb2NhdGlvbih0aW1lc3RhbXApIHtcblx0XHQvLyBGaXJzdCBmaW5kIHRoZSByZWxhdGl2ZSBhbW91bnQgdG8gbW92ZTogdGhhdCBpcywgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudCBwZXJjZW50YWdlIGFuZCB0aGUgcGFzc2VkIGluIHBlcmNlbnQuXG5cdFx0dmFyIGN1cnJlbnRQZXJjZW50ID0gKHRpbWVzdGFtcCAtIHNlbGYuc3RhcnRUaW1lKSAvIHNlbGYubGFzdE1vbWVudDtcblx0XHR2YXIgcGVyY2VudERpZmZlcmVuY2UgPSBjdXJyZW50UGVyY2VudCAtIHNlbGYubmV3U2Vla1BlcmNlbnQ7XG5cdFx0dmFyIHRpbWVEaWZmZXJlbmNlID0gc2VsZi5sYXN0TW9tZW50ICogcGVyY2VudERpZmZlcmVuY2U7XG5cdFx0c2VsZi5zdGFydFRpbWUgPSBzZWxmLnN0YXJ0VGltZSArIHRpbWVEaWZmZXJlbmNlO1xuXG5cdFx0dmFyIGN1cnJlbnRUaW1lID0gdGltZXN0YW1wIC0gc2VsZi5zdGFydFRpbWU7XG5cdFx0Y3VycmVudFRpbWUgKz0gNTA7IC8vIEFkZCBhIGxpdHRsZSBzbG9wIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpc24ndCBjYWxsZWQgZXhhY3RseS5cblxuXHRcdHZhciBvbGRCZWF0ID0gc2VsZi5jdXJyZW50QmVhdDtcblx0XHRzZWxmLmN1cnJlbnRCZWF0ID0gTWF0aC5mbG9vcihjdXJyZW50VGltZSAvIHNlbGYubWlsbGlzZWNvbmRzUGVyQmVhdCk7XG5cdFx0aWYgKHNlbGYuYmVhdENhbGxiYWNrICYmIG9sZEJlYXQgIT09IHNlbGYuY3VycmVudEJlYXQpIC8vIElmIHRoZSBtb3ZlbWVudCBjYXVzZWQgdGhlIGJlYXQgdG8gY2hhbmdlLCB0aGVuIGltbWVkaWF0ZWx5IHJlcG9ydCBpdCB0byB0aGUgY2xpZW50LlxuXHRcdFx0c2VsZi5iZWF0Q2FsbGJhY2soc2VsZi5jdXJyZW50QmVhdCAvIHNlbGYuYmVhdFN1YmRpdmlzaW9ucywgc2VsZi50b3RhbEJlYXRzIC8gc2VsZi5iZWF0U3ViZGl2aXNpb25zLCBzZWxmLmxhc3RNb21lbnQpO1xuXG5cdFx0c2VsZi5jdXJyZW50RXZlbnQgPSAwO1xuXHRcdHdoaWxlIChzZWxmLm5vdGVUaW1pbmdzLmxlbmd0aCA+IHNlbGYuY3VycmVudEV2ZW50ICYmIHNlbGYubm90ZVRpbWluZ3Nbc2VsZi5jdXJyZW50RXZlbnRdLm1pbGxpc2Vjb25kcyA8IGN1cnJlbnRUaW1lKSB7XG5cdFx0XHRzZWxmLmN1cnJlbnRFdmVudCsrO1xuXHRcdH1cblx0XHRpZiAoc2VsZi5ldmVudENhbGxiYWNrICYmIHNlbGYuY3VycmVudEV2ZW50ID4gMCAmJiBzZWxmLm5vdGVUaW1pbmdzW3NlbGYuY3VycmVudEV2ZW50IC0gMV0udHlwZSA9PT0gJ2V2ZW50Jylcblx0XHRcdHNlbGYuZXZlbnRDYWxsYmFjayhzZWxmLm5vdGVUaW1pbmdzW3NlbGYuY3VycmVudEV2ZW50IC0gMV0pO1xuXG5cdFx0Ly8gY29uc29sZS5sb2coXCJjdXJyZW50UGVyY2VudD1cIitjdXJyZW50UGVyY2VudCtcblx0XHQvLyBcdFwiIG5ld1NlZWtQZXJjZW50PVwiK3NlbGYubmV3U2Vla1BlcmNlbnQrXG5cdFx0Ly8gXHRcIiBwZXJjZW50RGlmZmVyZW5jZT1cIitwZXJjZW50RGlmZmVyZW5jZStcblx0XHQvLyBcdFwiIHRpbWVEaWZmZXJlbmNlPVwiLHRpbWVEaWZmZXJlbmNlK1xuXHRcdC8vIFx0XCIgY3VycmVudEJlYXQ9XCIrc2VsZi5jdXJyZW50QmVhdCtcblx0XHQvLyBcdFwiIGN1cnJlbnRFdmVudD1cIitzZWxmLmN1cnJlbnRFdmVudCk7XG5cdH1cblxuXHRzZWxmLmRvVGltaW5nID0gZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXHRcdGlmICghc2VsZi5zdGFydFRpbWUpIHtcblx0XHRcdHNlbGYuc3RhcnRUaW1lID0gdGltZXN0YW1wO1xuXHRcdH0gZWxzZSBpZiAoc2VsZi5qdXN0VW5wYXVzZWQpIHtcblx0XHRcdC8vIEFkZCB0aGUgYW1vdW50IHdlIHBhdXNlZCB0byB0aGUgc3RhcnQgdGltZSB0byBnZXQgdGhlIHJpZ2h0IHBsYWNlLlxuXHRcdFx0dmFyIHRpbWVQYXVzZWQgPSAodGltZXN0YW1wIC0gc2VsZi5wYXVzZWRUaW1lKTtcblx0XHRcdHNlbGYuc3RhcnRUaW1lICs9IHRpbWVQYXVzZWQ7XG5cdFx0fVxuXHRcdHNlbGYuanVzdFVucGF1c2VkID0gZmFsc2U7XG5cblx0XHRpZiAoc2VsZi5qdXN0U2Vla2VkKSB7XG5cdFx0XHRzZXRDdXJyZW50TG9jYXRpb24odGltZXN0YW1wKTtcblx0XHRcdHNlbGYuanVzdFNlZWtlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoc2VsZi5pc1BhdXNlZCkge1xuXHRcdFx0c2VsZi5wYXVzZWRUaW1lID0gdGltZXN0YW1wO1xuXHRcdH0gZWxzZSBpZiAoc2VsZi5pc1J1bm5pbmcpIHtcblx0XHRcdHZhciBjdXJyZW50VGltZSA9IHRpbWVzdGFtcCAtIHNlbGYuc3RhcnRUaW1lO1xuXHRcdFx0Y3VycmVudFRpbWUgKz0gNTA7IC8vIEFkZCBhIGxpdHRsZSBzbG9wIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpc24ndCBjYWxsZWQgZXhhY3RseS5cblx0XHRcdHdoaWxlIChzZWxmLm5vdGVUaW1pbmdzLmxlbmd0aCA+IHNlbGYuY3VycmVudEV2ZW50ICYmIHNlbGYubm90ZVRpbWluZ3Nbc2VsZi5jdXJyZW50RXZlbnRdLm1pbGxpc2Vjb25kcyA8IGN1cnJlbnRUaW1lKSB7XG5cdFx0XHRcdGlmIChzZWxmLmV2ZW50Q2FsbGJhY2sgJiYgc2VsZi5ub3RlVGltaW5nc1tzZWxmLmN1cnJlbnRFdmVudF0udHlwZSA9PT0gJ2V2ZW50Jylcblx0XHRcdFx0XHRzZWxmLmV2ZW50Q2FsbGJhY2soc2VsZi5ub3RlVGltaW5nc1tzZWxmLmN1cnJlbnRFdmVudF0pO1xuXHRcdFx0XHRzZWxmLmN1cnJlbnRFdmVudCsrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRUaW1lIDwgc2VsZi5sYXN0TW9tZW50KSB7XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShzZWxmLmRvVGltaW5nKTtcblx0XHRcdFx0aWYgKHNlbGYuY3VycmVudEJlYXQgKiBzZWxmLm1pbGxpc2Vjb25kc1BlckJlYXQgPCBjdXJyZW50VGltZSkge1xuXHRcdFx0XHRcdGlmIChzZWxmLmJlYXRDYWxsYmFjaylcblx0XHRcdFx0XHRcdHNlbGYuYmVhdENhbGxiYWNrKHNlbGYuY3VycmVudEJlYXQgLyBzZWxmLmJlYXRTdWJkaXZpc2lvbnMsIHNlbGYudG90YWxCZWF0cyAvIHNlbGYuYmVhdFN1YmRpdmlzaW9ucywgc2VsZi5sYXN0TW9tZW50KTtcblx0XHRcdFx0XHRzZWxmLmN1cnJlbnRCZWF0Kys7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoc2VsZi5jdXJyZW50QmVhdCA8PSBzZWxmLnRvdGFsQmVhdHMpIHtcblx0XHRcdFx0Ly8gQmVjYXVzZSBvZiB0aW1pbmcgaXNzdWVzIChmb3IgaW5zdGFuY2UsIGlmIHRoZSBicm93c2VyIHRhYiBpc24ndCBhY3RpdmUpLCB0aGUgYmVhdCBjYWxsYmFja3MgbWlnaHQgbm90IGhhdmUgaGFwcGVuZWQgd2hlbiB0aGV5IGFyZSBzdXBwb3NlZCB0by4gVG8ga2VlcCB0aGUgY2xpZW50IHByb2dyYW1zIGZyb20gaGF2aW5nIHRvIGRlYWwgd2l0aCB0aGF0LCB0aGlzIHdpbGwga2VlcCBjYWxsaW5nIHRoZSBsb29wIHVudGlsIGFsbCBvZiB0aGVtIGhhdmUgYmVlbiBzZW50LlxuXHRcdFx0XHRpZiAoc2VsZi5iZWF0Q2FsbGJhY2spIHtcblx0XHRcdFx0XHRzZWxmLmJlYXRDYWxsYmFjayhzZWxmLmN1cnJlbnRCZWF0IC8gc2VsZi5iZWF0U3ViZGl2aXNpb25zLCBzZWxmLnRvdGFsQmVhdHMgLyBzZWxmLmJlYXRTdWJkaXZpc2lvbnMsIHNlbGYubGFzdE1vbWVudCk7XG5cdFx0XHRcdFx0c2VsZi5jdXJyZW50QmVhdCsrO1xuXHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShzZWxmLmRvVGltaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5saW5lRW5kQ2FsbGJhY2sgJiYgc2VsZi5saW5lRW5kVGltaW5ncy5sZW5ndGggJiYgc2VsZi5saW5lRW5kVGltaW5nc1swXS5taWxsaXNlY29uZHMgPD0gY3VycmVudFRpbWUpIHtcblx0XHRcdFx0c2VsZi5saW5lRW5kQ2FsbGJhY2soc2VsZi5saW5lRW5kVGltaW5nc1swXSk7XG5cdFx0XHRcdHNlbGYubGluZUVuZFRpbWluZ3Muc2hpZnQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGN1cnJlbnRUaW1lID49IHNlbGYubGFzdE1vbWVudCAmJiBzZWxmLmV2ZW50Q2FsbGJhY2spXG5cdFx0XHRcdHNlbGYuZXZlbnRDYWxsYmFjayhudWxsKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRcdHNlbGYuaXNSdW5uaW5nID0gdHJ1ZTtcblx0XHRpZiAoc2VsZi5pc1BhdXNlZCkge1xuXHRcdFx0c2VsZi5pc1BhdXNlZCA9IGZhbHNlO1xuXHRcdFx0c2VsZi5qdXN0VW5wYXVzZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2VsZi5kb1RpbWluZyk7XG5cdH07XG5cdHNlbGYucGF1c2UgPSBmdW5jdGlvbigpIHtcblx0XHRzZWxmLmlzUGF1c2VkID0gdHJ1ZTtcblx0XHRzZWxmLmlzUnVubmluZyA9IGZhbHNlO1xuXHR9O1xuXHRzZWxmLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0c2VsZi5jdXJyZW50QmVhdCA9IDA7XG5cdFx0c2VsZi5jdXJyZW50RXZlbnQgPSAwO1xuXHRcdHNlbGYuc3RhcnRUaW1lID0gbnVsbDtcblx0XHRzZWxmLnBhdXNlZFRpbWUgPSBudWxsO1xuXHRcdGlmIChzZWxmLmxpbmVFbmRDYWxsYmFjaykge1xuXHRcdFx0c2VsZi5saW5lRW5kVGltaW5ncyA9IGdldExpbmVFbmRUaW1pbmdzKHNlbGYubm90ZVRpbWluZ3MsIHNlbGYubGluZUVuZEFudGljaXBhdGlvbik7XG5cdFx0fVxuXHR9O1xuXHRzZWxmLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRzZWxmLnBhdXNlKCk7XG5cdFx0c2VsZi5yZXNldCgpO1xuXHR9O1xuXHRzZWxmLnNldFByb2dyZXNzID0gZnVuY3Rpb24ocGVyY2VudCkge1xuXHRcdC8vIHRoaXMgaXMgcGFzc2VkIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxuXHRcdC8vIHRoZSBlZmZlY3Qgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBtb3ZlIHN0YXJ0VGltZSBzbyB0aGF0IHRoZSBjYWxsYmFja3MgaGFwcGVuIGNvcnJlY3RseSBmb3IgdGhlIG5ldyBzZWVrLlxuXHRcdGlmIChwZXJjZW50IDwgMCkgcGVyY2VudCA9IDA7XG5cdFx0aWYgKHBlcmNlbnQgPiAxKSBwZXJjZW50ID0gMTtcblxuXHRcdHNlbGYubmV3U2Vla1BlcmNlbnQgPSBwZXJjZW50O1xuXHRcdHNlbGYuanVzdFNlZWtlZCA9IHRydWU7XG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNlbGYuZG9UaW1pbmcpO1xuXHR9O1xufTtcblxuZnVuY3Rpb24gZ2V0TGluZUVuZFRpbWluZ3ModGltaW5ncywgYW50aWNpcGF0aW9uKSB7XG5cdC8vIFJldHVybnMgYW4gYXJyYXkgb2YgbWlsbGlzZWNvbmRzIHRvIGNhbGwgdGhlIGxpbmVFbmRDYWxsYmFjay5cblx0Ly8gVGhpcyBmaWd1cmVzIG91dCB0aGUgdGltaW5nIG9mIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIGFuZCBzdWJ0cmFjdHMgdGhlIGFudGljaXBhdGlvbiBmcm9tIGl0LlxuXHR2YXIgY2FsbGJhY2tUaW1lcyA9IFtdO1xuXHR2YXIgbGFzdFRvcCA9IG51bGw7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGltaW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0aW1pbmcgPSB0aW1pbmdzW2ldO1xuXHRcdGlmICh0aW1pbmcudG9wICE9PSBsYXN0VG9wKSB7XG5cdFx0XHRjYWxsYmFja1RpbWVzLnB1c2goeyBtaWxsaXNlY29uZHM6IHRpbWluZy5taWxsaXNlY29uZHMgLSBhbnRpY2lwYXRpb24sIHRvcDogdGltaW5nLnRvcCwgYm90dG9tOiB0aW1pbmcudG9wK3RpbWluZy5oZWlnaHQgfSk7XG5cdFx0XHRsYXN0VG9wID0gdGltaW5nLnRvcDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNhbGxiYWNrVGltZXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGltaW5nQ2FsbGJhY2tzO1xuXG4iLCIvLyAgICBhYmNfYW5pbWF0aW9uLmpzOiBoYW5kbGVzIGFuaW1hdGluZyB0aGUgbXVzaWMgaW4gcmVhbCB0aW1lLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggUGF1bCBSb3NlbiAocGF1bCBhdCBwYXVscm9zZW4gZG90IG5ldClcbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuLi93cml0ZS9hYmNfc3BhY2luZycpO1xudmFyIHBhcnNlQ29tbW9uID0gcmVxdWlyZSgnLi4vcGFyc2UvYWJjX2NvbW1vbicpO1xudmFyIFRpbWluZ0NhbGxiYWNrcyA9IHJlcXVpcmUoJy4vYWJjX3RpbWluZ19jYWxsYmFja3MnKTtcblxudmFyIGFuaW1hdGlvbiA9IHt9O1xuXG4oZnVuY3Rpb24oKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciB0aW1lcjtcblx0dmFyIGN1cnNvcjtcblx0YW5pbWF0aW9uLnN0YXJ0QW5pbWF0aW9uID0gZnVuY3Rpb24ocGFwZXIsIHR1bmUsIG9wdGlvbnMpIHtcblx0XHQvL29wdGlvbnMuYnBtXG5cdFx0Ly9vcHRpb25zLnNob3dDdXJzb3Jcblx0XHQvL29wdGlvbnMuaGlkZUN1cnJlbnRNZWFzdXJlXG5cdFx0Ly9vcHRpb25zLmhpZGVGaW5pc2hlZE1lYXN1cmVzXG5cdFx0aWYgKHRpbWVyKSB7XG5cdFx0XHR0aW1lci5zdG9wKCk7XG5cdFx0XHR0aW1lciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucy5zaG93Q3Vyc29yKSB7XG5cdFx0XHRjdXJzb3IgPSBwYXBlci5xdWVyeVNlbGVjdG9yKCcuYWJjanMtY3Vyc29yJyk7XG5cdFx0XHRpZiAoIWN1cnNvcikge1xuXHRcdFx0XHRjdXJzb3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcblx0XHRcdFx0Y3Vyc29yLmNsYXNzTmFtZSA9ICdhYmNqcy1jdXJzb3IgY3Vyc29yJztcblx0XHRcdFx0Y3Vyc29yLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuXHRcdFx0XHRwYXBlci5hcHBlbmRDaGlsZChjdXJzb3IpO1xuXHRcdFx0XHRwYXBlci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGlkZU1lYXN1cmVzKGVsZW1lbnRzKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBlbGVtZW50ID0gZWxlbWVudHNbaV07XG5cdFx0XHRcdGlmICghZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2FiY2pzLWJhcicpKVxuXHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBsYXN0TWVhc3VyZTtcblx0XHRmdW5jdGlvbiBkaXNhcHBlYXJNZWFzdXJlc0FmdGVyKHNlbGVjdG9yKSB7XG5cdFx0XHRpZiAobGFzdE1lYXN1cmUpIHtcblx0XHRcdFx0dmFyIGVsZW1lbnRzID0gcGFwZXIucXVlcnlTZWxlY3RvckFsbChsYXN0TWVhc3VyZSk7XG5cdFx0XHRcdGhpZGVNZWFzdXJlcyhlbGVtZW50cyk7XG5cdFx0XHR9XG5cdFx0XHRsYXN0TWVhc3VyZSA9IHNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRpc2FwcGVhck1lYXN1cmVzQmVmb3JlKHNlbGVjdG9yKSB7XG5cdFx0XHR2YXIgZWxlbWVudHMgPSBwYXBlci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblx0XHRcdGhpZGVNZWFzdXJlcyhlbGVtZW50cyk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbWVhc3VyZUNhbGxiYWNrKHNlbGVjdG9yKSB7XG5cdFx0XHRpZiAob3B0aW9ucy5oaWRlQ3VycmVudE1lYXN1cmUpIHtcblx0XHRcdFx0ZGlzYXBwZWFyTWVhc3VyZXNCZWZvcmUoc2VsZWN0b3IpO1xuXHRcdFx0fSBlbHNlIGlmIChvcHRpb25zLmhpZGVGaW5pc2hlZE1lYXN1cmVzKSB7XG5cdFx0XHRcdGRpc2FwcGVhck1lYXN1cmVzQWZ0ZXIoc2VsZWN0b3IpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldExpbmVBbmRNZWFzdXJlKGVsZW1lbnQpIHtcblx0XHRcdHJldHVybiAnLmFiY2pzLWwnICsgZWxlbWVudC5saW5lICsgJy5hYmNqcy1tJyArIGVsZW1lbnQubWVhc3VyZU51bWJlcjtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzZXRDdXJzb3IocmFuZ2UpIHtcblx0XHRcdGlmIChyYW5nZSkge1xuXHRcdFx0XHRpZiAocmFuZ2UubWVhc3VyZVN0YXJ0KSB7XG5cdFx0XHRcdFx0dmFyIHNlbGVjdG9yID0gZ2V0TGluZUFuZE1lYXN1cmUocmFuZ2UpO1xuXHRcdFx0XHRcdGlmIChzZWxlY3Rvcilcblx0XHRcdFx0XHRcdG1lYXN1cmVDYWxsYmFjayhzZWxlY3Rvcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGN1cnNvcikge1xuXHRcdFx0XHRcdGN1cnNvci5zdHlsZS5sZWZ0ID0gcmFuZ2UubGVmdCArIFwicHhcIjtcblx0XHRcdFx0XHRjdXJzb3Iuc3R5bGUudG9wID0gcmFuZ2UudG9wICsgXCJweFwiO1xuXHRcdFx0XHRcdGN1cnNvci5zdHlsZS53aWR0aCA9IHJhbmdlLndpZHRoICsgXCJweFwiO1xuXHRcdFx0XHRcdGN1cnNvci5zdHlsZS5oZWlnaHQgPSByYW5nZS5oZWlnaHQgKyBcInB4XCI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRpbWVyLnN0b3AoKTtcblx0XHRcdFx0dGltZXIgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGltZXIgPSBuZXcgVGltaW5nQ2FsbGJhY2tzKHR1bmUsIHtcblx0XHRcdHFwbTogb3B0aW9ucy5icG0sXG5cdFx0XHRldmVudENhbGxiYWNrOiBzZXRDdXJzb3Jcblx0XHR9KTtcblx0XHR0aW1lci5zdGFydCgpO1xuXHR9O1xuXG5cdGFuaW1hdGlvbi5wYXVzZUFuaW1hdGlvbiA9IGZ1bmN0aW9uKHBhdXNlKSB7XG5cdFx0aWYgKHRpbWVyKSB7XG5cdFx0XHRpZiAocGF1c2UpXG5cdFx0XHRcdHRpbWVyLnBhdXNlKCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHRpbWVyLnN0YXJ0KCk7XG5cdFx0fVxuXHR9O1xuXG5cdGFuaW1hdGlvbi5zdG9wQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRpbWVyKSB7XG5cdFx0XHR0aW1lci5zdG9wKCk7XG5cdFx0XHR0aW1lciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH07XG5cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYW5pbWF0aW9uO1xuIiwiLypnbG9iYWwgd2luZG93ICovXG5cbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4vYWJjX2NvbW1vbicpO1xuXG52YXIgcGFyc2VEaXJlY3RpdmUgPSB7fTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0dmFyIHRva2VuaXplcjtcblx0dmFyIHdhcm47XG5cdHZhciBtdWx0aWxpbmVWYXJzO1xuXHR2YXIgdHVuZTtcblx0cGFyc2VEaXJlY3RpdmUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKHRva2VuaXplcl8sIHdhcm5fLCBtdWx0aWxpbmVWYXJzXywgdHVuZV8pIHtcblx0XHR0b2tlbml6ZXIgPSB0b2tlbml6ZXJfO1xuXHRcdHdhcm4gPSB3YXJuXztcblx0XHRtdWx0aWxpbmVWYXJzID0gbXVsdGlsaW5lVmFyc187XG5cdFx0dHVuZSA9IHR1bmVfO1xuXHRcdGluaXRpYWxpemVGb250cygpO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGluaXRpYWxpemVGb250cygpIHtcblx0XHRtdWx0aWxpbmVWYXJzLmFubm90YXRpb25mb250ICA9IHsgZmFjZTogXCJIZWx2ZXRpY2FcIiwgc2l6ZTogMTIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5nY2hvcmRmb250ICA9IHsgZmFjZTogXCJIZWx2ZXRpY2FcIiwgc2l6ZTogMTIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5oaXN0b3J5Zm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTYsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5pbmZvZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTQsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5tZWFzdXJlZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTQsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5wYXJ0c2ZvbnQgID0geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHNpemU6IDE1LCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdG11bHRpbGluZVZhcnMucmVwZWF0Zm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTMsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy50ZXh0Zm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTYsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy50cmlwbGV0Zm9udCA9IHtmYWNlOiBcIlRpbWVzXCIsIHNpemU6IDExLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIn07XG5cdFx0bXVsdGlsaW5lVmFycy52b2NhbGZvbnQgID0geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHNpemU6IDEzLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRtdWx0aWxpbmVWYXJzLndvcmRzZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTYsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cblx0XHQvLyBUaGVzZSBmb250cyBhcmUgZ2xvYmFsIGZvciB0aGUgZW50aXJlIHR1bmUuXG5cdFx0dHVuZS5mb3JtYXR0aW5nLmNvbXBvc2VyZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTQsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0dHVuZS5mb3JtYXR0aW5nLnN1YnRpdGxlZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTYsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0dHVuZS5mb3JtYXR0aW5nLnRlbXBvZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTUsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdHR1bmUuZm9ybWF0dGluZy50aXRsZWZvbnQgID0geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHNpemU6IDIwLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5mb290ZXJmb250ICA9IHsgZmFjZTogXCJcXFwiVGltZXMgTmV3IFJvbWFuXFxcIlwiLCBzaXplOiAxMiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHR0dW5lLmZvcm1hdHRpbmcuaGVhZGVyZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0dHVuZS5mb3JtYXR0aW5nLnZvaWNlZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTMsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXG5cdFx0Ly8gdGhlc2UgYXJlIHRoZSBkZWZhdWx0IGZvbnRzIGZvciB0aGVzZSBlbGVtZW50IHR5cGVzLiBJbiB0aGUgcHJpbnRlciwgdGhlc2UgZm9udHMgbWlnaHQgY2hhbmdlIGFzIHRoZSB0dW5lIHByb2dyZXNzZXMuXG5cdFx0dHVuZS5mb3JtYXR0aW5nLmFubm90YXRpb25mb250ICA9IG11bHRpbGluZVZhcnMuYW5ub3RhdGlvbmZvbnQ7XG5cdFx0dHVuZS5mb3JtYXR0aW5nLmdjaG9yZGZvbnQgID0gbXVsdGlsaW5lVmFycy5nY2hvcmRmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5oaXN0b3J5Zm9udCAgPSBtdWx0aWxpbmVWYXJzLmhpc3Rvcnlmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5pbmZvZm9udCAgPSBtdWx0aWxpbmVWYXJzLmluZm9mb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5tZWFzdXJlZm9udCAgPSBtdWx0aWxpbmVWYXJzLm1lYXN1cmVmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5wYXJ0c2ZvbnQgID0gbXVsdGlsaW5lVmFycy5wYXJ0c2ZvbnQ7XG5cdFx0dHVuZS5mb3JtYXR0aW5nLnJlcGVhdGZvbnQgID0gbXVsdGlsaW5lVmFycy5yZXBlYXRmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy50ZXh0Zm9udCAgPSBtdWx0aWxpbmVWYXJzLnRleHRmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy50cmlwbGV0Zm9udCAgPSBtdWx0aWxpbmVWYXJzLnRyaXBsZXRmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy52b2NhbGZvbnQgID0gbXVsdGlsaW5lVmFycy52b2NhbGZvbnQ7XG5cdFx0dHVuZS5mb3JtYXR0aW5nLndvcmRzZm9udCAgPSBtdWx0aWxpbmVWYXJzLndvcmRzZm9udDtcblx0fVxuXG5cdHZhciBmb250VHlwZUNhbkhhdmVCb3ggPSB7IGdjaG9yZGZvbnQ6IHRydWUsIG1lYXN1cmVmb250OiB0cnVlLCBwYXJ0c2ZvbnQ6IHRydWUgfTtcblxuXHR2YXIgZm9udFRyYW5zbGF0aW9uID0gZnVuY3Rpb24oZm9udEZhY2UpIHtcblx0XHQvLyBUaGlzIHRyYW5zbGF0ZXMgUG9zdHNjcmlwdCBmb250cyBmb3IgYSB3ZWIgYWx0ZXJuYXRpdmUuXG5cdFx0Ly8gTm90ZSB0aGF0IHRoZSBwb3N0c2NyaXB0IGZvbnRzIGNvbnRhaW4gaXRhbGljIGFuZCBib2xkIGluZm8gaW4gdGhlbSwgc28gd2hhdCBpcyByZXR1cm5lZCBpcyBhIGhhc2guXG5cblx0XHRzd2l0Y2ggKGZvbnRGYWNlKSB7XG5cdFx0XHRjYXNlIFwiQXJpYWwtSXRhbGljXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiQXJpYWxcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJBcmlhbC1Cb2xkXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiQXJpYWxcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiQm9va21hbi1EZW1pXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiQm9va21hbixzZXJpZlwiLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJCb29rbWFuLURlbWlJdGFsaWNcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJCb29rbWFuLHNlcmlmXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkJvb2ttYW4tTGlnaHRcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJCb29rbWFuLHNlcmlmXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiQm9va21hbi1MaWdodEl0YWxpY1wiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIkJvb2ttYW4sc2VyaWZcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJDb3VyaWVyXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIkNvdXJpZXIgTmV3XFxcIlwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkNvdXJpZXItT2JsaXF1ZVwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJDb3VyaWVyIE5ld1xcXCJcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJDb3VyaWVyLUJvbGRcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiQ291cmllciBOZXdcXFwiXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkNvdXJpZXItQm9sZE9ibGlxdWVcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiQ291cmllciBOZXdcXFwiXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkF2YW50R2FyZGUtQm9va1wiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIkF2YW50R2FyZGUsQXJpYWxcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJBdmFudEdhcmRlLUJvb2tPYmxpcXVlXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiQXZhbnRHYXJkZSxBcmlhbFwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkF2YW50R2FyZGUtRGVtaVwiOlxuXHRcdFx0Y2FzZSBcIkF2YW50LUdhcmRlLURlbWlcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJBdmFudEdhcmRlLEFyaWFsXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkF2YW50R2FyZGUtRGVtaU9ibGlxdWVcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJBdmFudEdhcmRlLEFyaWFsXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkhlbHZldGljYS1PYmxpcXVlXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiSGVsdmV0aWNhXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiSGVsdmV0aWNhLUJvbGRcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJIZWx2ZXRpY2FcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiSGVsdmV0aWNhXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkhlbHZldGljYS1OYXJyb3dcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiSGVsdmV0aWNhIE5hcnJvd1xcXCIsSGVsdmV0aWNhXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiSGVsdmV0aWNhLU5hcnJvdy1PYmxpcXVlXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIkhlbHZldGljYSBOYXJyb3dcXFwiLEhlbHZldGljYVwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkhlbHZldGljYS1OYXJyb3ctQm9sZFwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJIZWx2ZXRpY2EgTmFycm93XFxcIixIZWx2ZXRpY2FcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiSGVsdmV0aWNhLU5hcnJvdy1Cb2xkT2JsaXF1ZVwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJIZWx2ZXRpY2EgTmFycm93XFxcIixIZWx2ZXRpY2FcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiUGFsYXRpbm8tUm9tYW5cIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJQYWxhdGlub1wiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIlBhbGF0aW5vLUl0YWxpY1wiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlBhbGF0aW5vXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiUGFsYXRpbm8tQm9sZFwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlBhbGF0aW5vXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIlBhbGF0aW5vLUJvbGRJdGFsaWNcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJQYWxhdGlub1wiLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJOZXdDZW50dXJ5U2NobGJrLVJvbWFuXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIk5ldyBDZW50dXJ5XFxcIixzZXJpZlwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIk5ld0NlbnR1cnlTY2hsYmstSXRhbGljXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIk5ldyBDZW50dXJ5XFxcIixzZXJpZlwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIk5ld0NlbnR1cnlTY2hsYmstQm9sZFwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJOZXcgQ2VudHVyeVxcXCIsc2VyaWZcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiTmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIk5ldyBDZW50dXJ5XFxcIixzZXJpZlwiLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJUaW1lc1wiOlxuXHRcdFx0Y2FzZSBcIlRpbWVzLVJvbWFuXCI6XG5cdFx0XHRjYXNlIFwiVGltZXMtTmFycm93XCI6XG5cdFx0XHRjYXNlIFwiVGltZXMtQ291cmllclwiOlxuXHRcdFx0Y2FzZSBcIlRpbWVzLU5ldy1Sb21hblwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiVGltZXMtSXRhbGljXCI6XG5cdFx0XHRjYXNlIFwiVGltZXMtSXRhbGljc1wiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiVGltZXMtQm9sZFwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIlRpbWVzLUJvbGRJdGFsaWNcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiVGltZXMgTmV3IFJvbWFuXFxcIlwiLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIlphcGYgQ2hhbmNlcnlcXFwiLGN1cnNpdmUsc2VyaWZcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgZ2V0Rm9udFBhcmFtZXRlciA9IGZ1bmN0aW9uKHRva2VucywgY3VycmVudFNldHRpbmcsIHN0ciwgcG9zaXRpb24sIGNtZCkge1xuXHRcdC8vIEV2ZXJ5IGZvbnQgcGFyYW1ldGVyIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcblx0XHQvLyA8ZmFjZT4gPHV0Zjg+IDxzaXplPiA8bW9kaWZpZXJzPiA8Ym94PlxuXHRcdC8vIFdoZXJlOlxuXHRcdC8vIGZhY2U6IGVpdGhlciBhIHN0YW5kYXJkIHdlYiBmb250IG5hbWUsIG9yIGEgcG9zdHNjcmlwdCBmb250LCBlbnVtZXJhdGVkIGluIGZvbnRUcmFuc2xhdGlvbi4gVGhpcyBjb3VsZCBhbHNvIGJlIGFuICogb3IgYmUgbWlzc2luZyBpZiB0aGUgZmFjZSBzaG91bGRuJ3QgY2hhbmdlLlxuXHRcdC8vIHV0Zjg6IFRoaXMgaXMgb3B0aW9uYWwsIGFuZCBzcGVjaWZpZXMgdXRmOC4gVGhhdCdzIGFsbCB0aGF0IGlzIHN1cHBvcnRlZCBzbyB0aGUgZmllbGQgaXMganVzdCBzaWxlbnRseSBpZ25vcmVkLlxuXHRcdC8vIHNpemU6IFRoZSBzaXplLCBpbiBwaXhlbHMuIFRoaXMgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIHNpemUgaXMgbm90IGNoYW5naW5nLlxuXHRcdC8vIG1vZGlmaWVyczogemVybyBvciBtb3JlIG9mIFwiYm9sZFwiLCBcIml0YWxpY1wiLCBcInVuZGVybGluZVwiXG5cdFx0Ly8gYm94OiBPbmx5IGFwcGxpZXMgdG8gdGhlIG1lYXN1cmUgbnVtYmVycywgZ2Nob3JkcywgYW5kIHRoZSBwYXJ0cy4gSWYgcHJlc2VudCwgdGhlbiBhIGJveCBpcyBkcmF3biBhcm91bmQgdGhlIGNoYXJhY3RlcnMuXG5cdFx0Ly8gSWYgZmFjZSBpcyBwcmVzZW50LCB0aGVuIGFsbCB0aGUgbW9kaWZpZXJzIGFyZSBjbGVhcmVkLiBJZiBmYWNlIGlzIGFic2VudCwgdGhlbiB0aGUgbW9kaWZpZXJzIGFyZSBpbGxlZ2FsLlxuXHRcdC8vIFRoZSBmYWNlIGNhbiBiZSBhIHNpbmdsZSB3b3JkLCBhIHNldCBvZiB3b3JkcyBzZXBhcmF0ZWQgYnkgaHlwaGVucywgb3IgYSBxdW90ZWQgc3RyaW5nLlxuXHRcdC8vXG5cdFx0Ly8gU28sIGluIHByYWN0aWNhbGl0eSwgdGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGZvbnQgZGVmaW5pdGlvbnM6IGEgbnVtYmVyIG9ubHksIGFuIGFzdGVyaXNrIGFuZCBhIG51bWJlciBvbmx5LCBvciB0aGUgZnVsbCBkZWZpbml0aW9uICh3aXRoIGFuIG9wdGlvbmFsIHNpemUpLlxuXHRcdGZ1bmN0aW9uIHByb2Nlc3NOdW1iZXJPbmx5KCkge1xuXHRcdFx0dmFyIHNpemUgPSBwYXJzZUludCh0b2tlbnNbMF0udG9rZW4pO1xuXHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRpZiAoIWN1cnJlbnRTZXR0aW5nKSB7XG5cdFx0XHRcdHdhcm4oXCJDYW4ndCBzZXQganVzdCB0aGUgc2l6ZSBvZiB0aGUgZm9udCBzaW5jZSB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiVGltZXMgTmV3IFJvbWFuXFxcIlwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiwgc2l6ZTogc2l6ZX07XG5cdFx0XHR9XG5cdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBjdXJyZW50U2V0dGluZy5mYWNlLCB3ZWlnaHQ6IGN1cnJlbnRTZXR0aW5nLndlaWdodCwgc3R5bGU6IGN1cnJlbnRTZXR0aW5nLnN0eWxlLCBkZWNvcmF0aW9uOiBjdXJyZW50U2V0dGluZy5kZWNvcmF0aW9uLCBzaXplOiBzaXplfTtcblx0XHRcdH1cblx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAxICYmIHRva2Vuc1swXS50b2tlbiA9PT0gXCJib3hcIiAmJiBmb250VHlwZUNhbkhhdmVCb3hbY21kXSlcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogY3VycmVudFNldHRpbmcuZmFjZSwgd2VpZ2h0OiBjdXJyZW50U2V0dGluZy53ZWlnaHQsIHN0eWxlOiBjdXJyZW50U2V0dGluZy5zdHlsZSwgZGVjb3JhdGlvbjogY3VycmVudFNldHRpbmcuZGVjb3JhdGlvbiwgc2l6ZTogc2l6ZSwgYm94OiB0cnVlfTtcblx0XHRcdHdhcm4oXCJFeHRyYSBwYXJhbWV0ZXJzIGluIGZvbnQgZGVmaW5pdGlvbi5cIiwgc3RyLCBwb3NpdGlvbik7XG5cdFx0XHRyZXR1cm4geyBmYWNlOiBjdXJyZW50U2V0dGluZy5mYWNlLCB3ZWlnaHQ6IGN1cnJlbnRTZXR0aW5nLndlaWdodCwgc3R5bGU6IGN1cnJlbnRTZXR0aW5nLnN0eWxlLCBkZWNvcmF0aW9uOiBjdXJyZW50U2V0dGluZy5kZWNvcmF0aW9uLCBzaXplOiBzaXplfTtcblx0XHR9XG5cblx0XHQvLyBmb3JtYXQgMTogYXN0ZXJpc2sgYW5kIG51bWJlciBvbmx5XG5cdFx0aWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJyonKSB7XG5cdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdGlmICh0b2tlbnNbMF0udHlwZSA9PT0gJ251bWJlcicpXG5cdFx0XHRcdHJldHVybiBwcm9jZXNzTnVtYmVyT25seSgpO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBmb250IHNpemUgbnVtYmVyIGFmdGVyICouXCIsIHN0ciwgcG9zaXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGZvcm1hdCAyOiBudW1iZXIgb25seVxuXHRcdGlmICh0b2tlbnNbMF0udHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBwcm9jZXNzTnVtYmVyT25seSgpO1xuXHRcdH1cblxuXHRcdC8vIGZvcm1hdCAzOiB3aG9sZSBkZWZpbml0aW9uXG5cdFx0dmFyIGZhY2UgPSBbXTtcblx0XHR2YXIgc2l6ZTtcblx0XHR2YXIgd2VpZ2h0ID0gXCJub3JtYWxcIjtcblx0XHR2YXIgc3R5bGUgPSBcIm5vcm1hbFwiO1xuXHRcdHZhciBkZWNvcmF0aW9uID0gXCJub25lXCI7XG5cdFx0dmFyIGJveCA9IGZhbHNlO1xuXHRcdHZhciBzdGF0ZSA9ICdmYWNlJztcblx0XHR2YXIgaHlwaGVuTGFzdCA9IGZhbHNlO1xuXHRcdHdoaWxlICh0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgY3VyclRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHR2YXIgd29yZCA9IGN1cnJUb2tlbi50b2tlbi50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdmYWNlJzpcblx0XHRcdFx0XHRpZiAoaHlwaGVuTGFzdCB8fCAod29yZCAhPT0gJ3V0ZicgJiYgY3VyclRva2VuLnR5cGUgIT09ICdudW1iZXInICYmIHdvcmQgIT09IFwiYm9sZFwiICYmIHdvcmQgIT09IFwiaXRhbGljXCIgJiYgd29yZCAhPT0gXCJ1bmRlcmxpbmVcIiAmJiB3b3JkICE9PSBcImJveFwiKSkge1xuXHRcdFx0XHRcdFx0aWYgKGZhY2UubGVuZ3RoID4gMCAmJiBjdXJyVG9rZW4udG9rZW4gPT09ICctJykge1xuXHRcdFx0XHRcdFx0XHRoeXBoZW5MYXN0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZmFjZVtmYWNlLmxlbmd0aC0xXSA9IGZhY2VbZmFjZS5sZW5ndGgtMV0gKyBjdXJyVG9rZW4udG9rZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYgKGh5cGhlbkxhc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRoeXBoZW5MYXN0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0ZmFjZVtmYWNlLmxlbmd0aC0xXSA9IGZhY2VbZmFjZS5sZW5ndGgtMV0gKyBjdXJyVG9rZW4udG9rZW47XG5cdFx0XHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGZhY2UucHVzaChjdXJyVG9rZW4udG9rZW4pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoY3VyclRva2VuLnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzaXplKSB7XG5cdFx0XHRcdFx0XHRcdFx0d2FybihcIkZvbnQgc2l6ZSBzcGVjaWZpZWQgdHdpY2UgaW4gZm9udCBkZWZpbml0aW9uLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRzaXplID0gY3VyclRva2VuLnRva2VuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gJ21vZGlmaWVyJztcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAod29yZCA9PT0gXCJib2xkXCIpXG5cdFx0XHRcdFx0XHRcdHdlaWdodCA9IFwiYm9sZFwiO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAod29yZCA9PT0gXCJpdGFsaWNcIilcblx0XHRcdFx0XHRcdFx0c3R5bGUgPSBcIml0YWxpY1wiO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAod29yZCA9PT0gXCJ1bmRlcmxpbmVcIilcblx0XHRcdFx0XHRcdFx0ZGVjb3JhdGlvbiA9IFwidW5kZXJsaW5lXCI7XG5cdFx0XHRcdFx0XHRlbHNlIGlmICh3b3JkID09PSBcImJveFwiKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChmb250VHlwZUNhbkhhdmVCb3hbY21kXSlcblx0XHRcdFx0XHRcdFx0XHRib3ggPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0d2FybihcIlRoaXMgZm9udCBzdHlsZSBkb2Vzbid0IHN1cHBvcnQgXFxcImJveFxcXCJcIiwgc3RyLCBwb3NpdGlvbik7XG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gXCJmaW5pc2hlZFwiO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh3b3JkID09PSBcInV0ZlwiKSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJUb2tlbiA9IHRva2Vucy5zaGlmdCgpOyAvLyB0aGlzIGdldHMgcmlkIG9mIHRoZSBcIjhcIiBhZnRlciBcInV0ZlwiXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gXCJzaXplXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0d2FybihcIlVua25vd24gcGFyYW1ldGVyIFwiICsgY3VyclRva2VuLnRva2VuICsgXCIgaW4gZm9udCBkZWZpbml0aW9uLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJzaXplXCI6XG5cdFx0XHRcdFx0aWYgKGN1cnJUb2tlbi50eXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRcdFx0aWYgKHNpemUpIHtcblx0XHRcdFx0XHRcdFx0d2FybihcIkZvbnQgc2l6ZSBzcGVjaWZpZWQgdHdpY2UgaW4gZm9udCBkZWZpbml0aW9uLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHNpemUgPSBjdXJyVG9rZW4udG9rZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBmb250IHNpemUgaW4gZm9udCBkZWZpbml0aW9uLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3RhdGUgPSAnbW9kaWZpZXInO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwibW9kaWZpZXJcIjpcblx0XHRcdFx0XHRpZiAod29yZCA9PT0gXCJib2xkXCIpXG5cdFx0XHRcdFx0XHR3ZWlnaHQgPSBcImJvbGRcIjtcblx0XHRcdFx0XHRlbHNlIGlmICh3b3JkID09PSBcIml0YWxpY1wiKVxuXHRcdFx0XHRcdFx0c3R5bGUgPSBcIml0YWxpY1wiO1xuXHRcdFx0XHRcdGVsc2UgaWYgKHdvcmQgPT09IFwidW5kZXJsaW5lXCIpXG5cdFx0XHRcdFx0XHRkZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcblx0XHRcdFx0XHRlbHNlIGlmICh3b3JkID09PSBcImJveFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoZm9udFR5cGVDYW5IYXZlQm94W2NtZF0pXG5cdFx0XHRcdFx0XHRcdGJveCA9IHRydWU7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHdhcm4oXCJUaGlzIGZvbnQgc3R5bGUgZG9lc24ndCBzdXBwb3J0IFxcXCJib3hcXFwiXCIsIHN0ciwgcG9zaXRpb24pO1xuXHRcdFx0XHRcdFx0c3RhdGUgPSBcImZpbmlzaGVkXCI7XG5cdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHR3YXJuKFwiVW5rbm93biBwYXJhbWV0ZXIgXCIgKyBjdXJyVG9rZW4udG9rZW4gKyBcIiBpbiBmb250IGRlZmluaXRpb24uXCIsIHN0ciwgcG9zaXRpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZmluaXNoZWRcIjpcblx0XHRcdFx0XHR3YXJuKFwiRXh0cmEgY2hhcmFjdGVycyBmb3VuZCBhZnRlciBcXFwiYm94XFxcIiBpbiBmb250IGRlZmluaXRpb24uXCIsIHN0ciwgcG9zaXRpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzaXplID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICghY3VycmVudFNldHRpbmcpIHtcblx0XHRcdFx0d2FybihcIk11c3Qgc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgZm9udCBzaW5jZSB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0c2l6ZSA9IDEyO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHNpemUgPSBjdXJyZW50U2V0dGluZy5zaXplO1xuXHRcdH0gZWxzZVxuXHRcdFx0c2l6ZSA9IHBhcnNlRmxvYXQoc2l6ZSk7XG5cblx0XHRmYWNlID0gZmFjZS5qb2luKCcgJyk7XG5cdFx0dmFyIHBzRm9udCA9IGZvbnRUcmFuc2xhdGlvbihmYWNlKTtcblx0XHR2YXIgZm9udCA9IHt9O1xuXHRcdGlmIChwc0ZvbnQpIHtcblx0XHRcdGZvbnQuZmFjZSA9IHBzRm9udC5mYWNlO1xuXHRcdFx0Zm9udC53ZWlnaHQgPSBwc0ZvbnQud2VpZ2h0O1xuXHRcdFx0Zm9udC5zdHlsZSA9IHBzRm9udC5zdHlsZTtcblx0XHRcdGZvbnQuZGVjb3JhdGlvbiA9IHBzRm9udC5kZWNvcmF0aW9uO1xuXHRcdFx0Zm9udC5zaXplID0gc2l6ZTtcblx0XHRcdGlmIChib3gpXG5cdFx0XHRcdGZvbnQuYm94ID0gdHJ1ZTtcblx0XHRcdHJldHVybiBmb250O1xuXHRcdH1cblx0XHRmb250LmZhY2UgPSBmYWNlO1xuXHRcdGZvbnQud2VpZ2h0ID0gd2VpZ2h0O1xuXHRcdGZvbnQuc3R5bGUgPSBzdHlsZTtcblx0XHRmb250LmRlY29yYXRpb24gPSBkZWNvcmF0aW9uO1xuXHRcdGZvbnQuc2l6ZSA9IHNpemU7XG5cdFx0aWYgKGJveClcblx0XHRcdGZvbnQuYm94ID0gdHJ1ZTtcblx0XHRyZXR1cm4gZm9udDtcblx0fTtcblxuXHR2YXIgZ2V0Q2hhbmdpbmdGb250ID0gZnVuY3Rpb24oY21kLCB0b2tlbnMsIHN0cikge1xuXHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBhIGZvbnQgYXMgYSBwYXJhbWV0ZXIuXCI7XG5cdFx0bXVsdGlsaW5lVmFyc1tjbWRdID0gZ2V0Rm9udFBhcmFtZXRlcih0b2tlbnMsIG11bHRpbGluZVZhcnNbY21kXSwgc3RyLCAwLCBjbWQpO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmlzX2luX2hlYWRlcikgLy8gSWYgdGhlIGZvbnQgYXBwZWFycyBpbiB0aGUgaGVhZGVyLCB0aGVuIGl0IGJlY29tZXMgdGhlIGRlZmF1bHQgZm9udC5cblx0XHRcdHR1bmUuZm9ybWF0dGluZ1tjbWRdID0gbXVsdGlsaW5lVmFyc1tjbWRdO1xuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXHR2YXIgZ2V0R2xvYmFsRm9udCA9IGZ1bmN0aW9uKGNtZCwgdG9rZW5zLCBzdHIpIHtcblx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgYSBmb250IGFzIGEgcGFyYW1ldGVyLlwiO1xuXHRcdHR1bmUuZm9ybWF0dGluZ1tjbWRdID0gZ2V0Rm9udFBhcmFtZXRlcih0b2tlbnMsIHR1bmUuZm9ybWF0dGluZ1tjbWRdLCBzdHIsIDAsIGNtZCk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cblx0dmFyIHNldFNjYWxlID0gZnVuY3Rpb24oY21kLCB0b2tlbnMpIHtcblx0XHR2YXIgc2NyYXRjaCA9IFwiXCI7XG5cdFx0cGFyc2VDb21tb24uZWFjaCh0b2tlbnMsIGZ1bmN0aW9uKHRvaykge1xuXHRcdFx0c2NyYXRjaCArPSB0b2sudG9rZW47XG5cdFx0fSk7XG5cdFx0dmFyIG51bSA9IHBhcnNlRmxvYXQoc2NyYXRjaCk7XG5cdFx0aWYgKGlzTmFOKG51bSkgfHwgbnVtID09PSAwKVxuXHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBhIG51bWJlciBhcyBhIHBhcmFtZXRlci5cIjtcblx0XHR0dW5lLmZvcm1hdHRpbmcuc2NhbGUgPSBudW07XG5cblx0fTtcblxuXHR2YXIgZ2V0UmVxdWlyZWRNZWFzdXJlbWVudCA9IGZ1bmN0aW9uKGNtZCwgdG9rZW5zKSB7XG5cdFx0dmFyIHBvaW50cyA9IHRva2VuaXplci5nZXRNZWFzdXJlbWVudCh0b2tlbnMpO1xuXHRcdGlmIChwb2ludHMudXNlZCA9PT0gMCB8fCB0b2tlbnMubGVuZ3RoICE9PSAwKVxuXHRcdFx0cmV0dXJuIHsgZXJyb3I6IFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBhIG1lYXN1cmVtZW50IGFzIGEgcGFyYW1ldGVyLlwifTtcblx0XHRyZXR1cm4gcG9pbnRzLnZhbHVlO1xuXHR9O1xuXHR2YXIgb25lUGFyYW1ldGVyTWVhc3VyZW1lbnQgPSBmdW5jdGlvbihjbWQsIHRva2Vucykge1xuXHRcdHZhciBwb2ludHMgPSB0b2tlbml6ZXIuZ2V0TWVhc3VyZW1lbnQodG9rZW5zKTtcblx0XHRpZiAocG9pbnRzLnVzZWQgPT09IDAgfHwgdG9rZW5zLmxlbmd0aCAhPT0gMClcblx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgYSBtZWFzdXJlbWVudCBhcyBhIHBhcmFtZXRlci5cIjtcblx0XHR0dW5lLmZvcm1hdHRpbmdbY21kXSA9IHBvaW50cy52YWx1ZTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHR2YXIgYWRkTXVsdGlsaW5lVmFyID0gZnVuY3Rpb24oa2V5LCBjbWQsIHRva2VucywgbWluLCBtYXgpIHtcblx0XHRpZiAodG9rZW5zLmxlbmd0aCAhPT0gMSB8fCB0b2tlbnNbMF0udHlwZSAhPT0gJ251bWJlcicpXG5cdFx0XHRyZXR1cm4gXCJEaXJlY3RpdmUgXFxcIlwiICsgY21kICsgXCJcXFwiIHJlcXVpcmVzIGEgbnVtYmVyIGFzIGEgcGFyYW1ldGVyLlwiO1xuXHRcdHZhciBpID0gdG9rZW5zWzBdLmludHQ7XG5cdFx0aWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIGkgPCBtaW4pXG5cdFx0XHRyZXR1cm4gXCJEaXJlY3RpdmUgXFxcIlwiICsgY21kICsgXCJcXFwiIHJlcXVpcmVzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBcIiArIG1pbiArIFwiIGFzIGEgcGFyYW1ldGVyLlwiO1xuXHRcdGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBpID4gbWF4KVxuXHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBhIG51bWJlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gXCIgKyBtYXggKyBcIiBhcyBhIHBhcmFtZXRlci5cIjtcblx0XHRtdWx0aWxpbmVWYXJzW2tleV0gPSBpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdHZhciBhZGRNdWx0aWxpbmVWYXJCb29sID0gZnVuY3Rpb24oa2V5LCBjbWQsIHRva2Vucykge1xuXHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAxICYmICh0b2tlbnNbMF0udG9rZW4gPT09ICd0cnVlJyB8fCB0b2tlbnNbMF0udG9rZW4gPT09ICdmYWxzZScpKSB7XG5cdFx0XHRtdWx0aWxpbmVWYXJzW2tleV0gPSB0b2tlbnNbMF0udG9rZW4gPT09ICd0cnVlJztcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHR2YXIgc3RyID0gYWRkTXVsdGlsaW5lVmFyKGtleSwgY21kLCB0b2tlbnMsIDAsIDEpO1xuXHRcdGlmIChzdHIgIT09IG51bGwpIHJldHVybiBzdHI7XG5cdFx0bXVsdGlsaW5lVmFyc1trZXldID0gKG11bHRpbGluZVZhcnNba2V5XSA9PT0gMSk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cblx0dmFyIGFkZE11bHRpbGluZVZhck9uZVBhcmFtQ2hvaWNlID0gZnVuY3Rpb24oa2V5LCBjbWQsIHRva2VucywgY2hvaWNlcykge1xuXHRcdGlmICh0b2tlbnMubGVuZ3RoICE9PSAxKVxuXHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBvbmUgb2YgWyBcIiArIGNob2ljZXMuam9pbihcIiwgXCIpICsgXCIgXSBhcyBhIHBhcmFtZXRlci5cIjtcblx0XHR2YXIgY2hvaWNlID0gdG9rZW5zWzBdLnRva2VuO1xuXHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdGZvciAodmFyIGkgPSAwOyAhZm91bmQgJiYgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChjaG9pY2VzW2ldID09PSBjaG9pY2UpXG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKCFmb3VuZClcblx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgb25lIG9mIFsgXCIgKyBjaG9pY2VzLmpvaW4oXCIsIFwiKSArIFwiIF0gYXMgYSBwYXJhbWV0ZXIuXCI7XG5cdFx0bXVsdGlsaW5lVmFyc1trZXldID0gY2hvaWNlO1xuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdHZhciBtaWRpQ21kUGFyYW0wID0gW1xuXHRcdFwibm9iYXJsaW5lc1wiLFxuXHRcdFwiYmFybGluZXNcIixcblx0XHRcImJlYXRhY2NlbnRzXCIsXG5cdFx0XCJub2JlYXRhY2NlbnRzXCIsXG5cdFx0XCJkcm9uZW9uXCIsXG5cdFx0XCJkcm9uZW9mZlwiLFxuXHRcdFwiZHJ1bW9uXCIsXG5cdFx0XCJkcnVtb2ZmXCIsXG5cdFx0XCJmZXJtYXRhZml4ZWRcIixcblx0XHRcImZlcm1hdGFwcm9wb3J0aW9uYWxcIixcblx0XHRcImdjaG9yZG9uXCIsXG5cdFx0XCJnY2hvcmRvZmZcIixcblx0XHRcImNvbnRyb2xjb21ib1wiLFxuXHRcdFwidGVtcGVyYW1lbnRub3JtYWxcIixcblx0XHRcIm5vcG9ydGFtZW50b1wiXG5cdF07XG5cdHZhciBtaWRpQ21kUGFyYW0xU3RyaW5nID0gW1xuXHRcdFwiZ2Nob3JkXCIsXG5cdFx0XCJwdHN0cmVzc1wiLFxuXHRcdFwiYmVhdHN0cmluZ1wiXG5cdF07XG5cdHZhciBtaWRpQ21kUGFyYW0xSW50ZWdlciA9IFtcblx0XHRcImJhc3N2b2xcIixcblx0XHRcImNob3Jkdm9sXCIsXG5cdFx0XCJjXCIsXG5cdFx0XCJjaGFubmVsXCIsXG5cdFx0XCJiZWF0bW9kXCIsXG5cdFx0XCJkZWx0YWxvdWRuZXNzXCIsXG5cdFx0XCJkcnVtYmFyc1wiLFxuXHRcdFwiZ3JhY2VkaXZpZGVyXCIsXG5cdFx0XCJtYWtlY2hvcmRjaGFubmVsc1wiLFxuXHRcdFwicmFuZG9tY2hvcmRhdHRhY2tcIixcblx0XHRcImNob3JkYXR0YWNrXCIsXG5cdFx0XCJzdHJlc3Ntb2RlbFwiLFxuXHRcdFwidHJhbnNwb3NlXCIsXG5cdFx0XCJydHJhbnNwb3NlXCIsXG5cdFx0XCJ2b2xcIixcblx0XHRcInZvbGluY1wiXG5cdF07XG5cdHZhciBtaWRpQ21kUGFyYW0xSW50ZWdlcjFPcHRpb25hbEludGVnZXIgPSBbXG5cdFx0XCJwcm9ncmFtXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTJJbnRlZ2VyID0gW1xuXHRcdFwicmF0aW9cIixcblx0XHRcInNudFwiLFxuXHRcdFwiYmVuZHZlbG9jaXR5XCIsXG5cdFx0XCJwaXRjaGJlbmRcIixcblx0XHRcImNvbnRyb2xcIixcblx0XHRcInRlbXBlcmFtZW50bGluZWFyXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTRJbnRlZ2VyID0gW1xuXHRcdFwiYmVhdFwiXG5cdF07XG5cdHZhciBtaWRpQ21kUGFyYW01SW50ZWdlciA9IFtcblx0XHRcImRyb25lXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTFJbnRlZ2VyT3B0aW9uYWxPY3RhdmUgPSBbXG5cdFx0XCJiYXNzcHJvZ1wiLFxuXHRcdFwiY2hvcmRwcm9nXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTFTdHJpbmcxSW50ZWdlciA9IFtcblx0XHRcInBvcnRhbWVudG9cIlxuXHRdO1xuXHR2YXIgbWlkaUNtZFBhcmFtRnJhY3Rpb24gPSBbXG5cdFx0XCJleHBhbmRcIixcblx0XHRcImdyYWNlXCIsXG5cdFx0XCJ0cmltXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTFTdHJpbmdWYXJpYWJsZUludGVnZXJzID0gW1xuXHRcdFwiZHJ1bVwiLFxuXHRcdFwiY2hvcmRuYW1lXCJcblx0XTtcblxuXHR2YXIgcGFyc2VNaWRpQ29tbWFuZCA9IGZ1bmN0aW9uKG1pZGksIHR1bmUsIHJlc3RPZlN0cmluZykge1xuXHRcdHZhciBtaWRpX2NtZCA9IG1pZGkuc2hpZnQoKS50b2tlbjtcblx0XHR2YXIgbWlkaV9wYXJhbXMgPSBbXTtcblx0XHRpZiAobWlkaUNtZFBhcmFtMC5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBOTyBQQVJBTUVURVJTXG5cdFx0XHRpZiAobWlkaS5sZW5ndGggIT09IDApXG5cdFx0XHRcdHdhcm4oXCJVbmV4cGVjdGVkIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0fSBlbHNlIGlmIChtaWRpQ21kUGFyYW0xU3RyaW5nLmluZGV4T2YobWlkaV9jbWQpID49IDApIHtcblx0XHRcdC8vIE9ORSBTVFJJTkcgUEFSQU1FVEVSXG5cdFx0XHRpZiAobWlkaS5sZW5ndGggIT09IDEpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBvbmUgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzBdLnRva2VuKTtcblx0XHR9IGVsc2UgaWYgKG1pZGlDbWRQYXJhbTFJbnRlZ2VyLmluZGV4T2YobWlkaV9jbWQpID49IDApIHtcblx0XHRcdC8vIE9ORSBJTlQgUEFSQU1FVEVSXG5cdFx0XHRpZiAobWlkaS5sZW5ndGggIT09IDEpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBvbmUgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBpbnRlZ2VyIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVswXS5pbnR0KTtcblx0XHR9IGVsc2UgaWYgKG1pZGlDbWRQYXJhbTFJbnRlZ2VyMU9wdGlvbmFsSW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBPTkUgSU5UIFBBUkFNRVRFUiwgT05FIE9QVElPTkFMIFBBUkFNRVRFUlxuXHRcdFx0aWYgKG1pZGkubGVuZ3RoICE9PSAxICYmIG1pZGkubGVuZ3RoICE9PSAyKVxuXHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgb25lIG9yIHR3byBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGludGVnZXIgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGkubGVuZ3RoID09PSAyICYmIG1pZGlbMV0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGludGVnZXIgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMF0uaW50dCk7XG5cdFx0XHRcdGlmIChtaWRpLmxlbmd0aCA9PT0gMilcblx0XHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMV0uaW50dCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChtaWRpQ21kUGFyYW0ySW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBUV08gSU5UIFBBUkFNRVRFUlNcblx0XHRcdGlmIChtaWRpLmxlbmd0aCAhPT0gMilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHR3byBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIiB8fCBtaWRpWzFdLnR5cGUgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCB0d28gaW50ZWdlciBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMF0uaW50dCk7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVsxXS5pbnR0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1pZGlDbWRQYXJhbTFTdHJpbmcxSW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBPTkUgU1RSSU5HIFBBUkFNRVRFUiwgT05FIElOVCBQQVJBTUVURVJcblx0XHRcdGlmIChtaWRpLmxlbmd0aCAhPT0gMilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHR3byBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJhbHBoYVwiIHx8IG1pZGlbMV0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBzdHJpbmcgYW5kIG9uZSBpbnRlZ2VyIHBhcmFtZXRlcnMgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVswXS50b2tlbik7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVsxXS5pbnR0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1pZGlfY21kID09PSAnZHJ1bW1hcCcpIHtcblx0XHRcdC8vIEJVSUxEIEFOIE9CSkVDVCBPRiBBQkMgTk9URSA9PiBNSURJIE5PVEVcblx0XHRcdGlmIChtaWRpLmxlbmd0aCA9PT0gMiAmJiBtaWRpWzBdLnR5cGUgPT09ICdhbHBoYScgJiYgbWlkaVsxXS50eXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRpZiAoIXR1bmUuZm9ybWF0dGluZykgdHVuZS5mb3JtYXR0aW5nID0ge307XG5cdFx0XHRcdGlmICghdHVuZS5mb3JtYXR0aW5nLm1pZGkpIHR1bmUuZm9ybWF0dGluZy5taWRpID0ge307XG5cdFx0XHRcdGlmICghdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcCkgdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcCA9IHt9O1xuXHRcdFx0XHR0dW5lLmZvcm1hdHRpbmcubWlkaS5kcnVtbWFwW21pZGlbMF0udG9rZW5dID0gbWlkaVsxXS5pbnR0O1xuXHRcdFx0XHRtaWRpX3BhcmFtcyA9IHR1bmUuZm9ybWF0dGluZy5taWRpLmRydW1tYXA7XG5cdFx0XHR9IGVsc2UgaWYgKG1pZGkubGVuZ3RoID09PSAzICYmIG1pZGlbMF0udHlwZSA9PT0gJ3B1bmN0JyAmJiBtaWRpWzFdLnR5cGUgPT09ICdhbHBoYScgJiYgbWlkaVsyXS50eXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRpZiAoIXR1bmUuZm9ybWF0dGluZykgdHVuZS5mb3JtYXR0aW5nID0ge307XG5cdFx0XHRcdGlmICghdHVuZS5mb3JtYXR0aW5nLm1pZGkpIHR1bmUuZm9ybWF0dGluZy5taWRpID0ge307XG5cdFx0XHRcdGlmICghdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcCkgdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcCA9IHt9O1xuXHRcdFx0XHR0dW5lLmZvcm1hdHRpbmcubWlkaS5kcnVtbWFwW21pZGlbMF0udG9rZW4rbWlkaVsxXS50b2tlbl0gPSBtaWRpWzJdLmludHQ7XG5cdFx0XHRcdG1pZGlfcGFyYW1zID0gdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBvbmUgbm90ZSBuYW1lIGFuZCBvbmUgaW50ZWdlciBwYXJhbWV0ZXIgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWlkaUNtZFBhcmFtRnJhY3Rpb24uaW5kZXhPZihtaWRpX2NtZCkgPj0gMCkge1xuXHRcdFx0Ly8gT05FIEZSQUNUSU9OIFBBUkFNRVRFUlxuXHRcdFx0aWYgKG1pZGkubGVuZ3RoICE9PSAzKVxuXHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgZnJhY3Rpb24gcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIiB8fCBtaWRpWzFdLnRva2VuICE9PSBcIi9cIiB8fCBtaWRpWzJdLnR5cGUgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBmcmFjdGlvbiBwYXJhbWV0ZXIgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVswXS5pbnR0KTtcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzJdLmludHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWlkaUNtZFBhcmFtNEludGVnZXIuaW5kZXhPZihtaWRpX2NtZCkgPj0gMCkge1xuXHRcdFx0Ly8gRk9VUiBJTlQgUEFSQU1FVEVSU1xuXHRcdFx0aWYgKG1pZGkubGVuZ3RoICE9PSA0KVxuXHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgZm91ciBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIiB8fCBtaWRpWzFdLnR5cGUgIT09IFwibnVtYmVyXCIgfHwgbWlkaVsyXS50eXBlICE9PSBcIm51bWJlclwiIHx8IG1pZGlbM10udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGZvdXIgaW50ZWdlciBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMF0uaW50dCk7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVsxXS5pbnR0KTtcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzJdLmludHQpO1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbM10uaW50dCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChtaWRpQ21kUGFyYW01SW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBGSVZFIElOVCBQQVJBTUVURVJTXG5cdFx0XHRpZiAobWlkaS5sZW5ndGggIT09IDUpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBmaXZlIHBhcmFtZXRlcnMgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSBpZiAobWlkaVswXS50eXBlICE9PSBcIm51bWJlclwiIHx8IG1pZGlbMV0udHlwZSAhPT0gXCJudW1iZXJcIiB8fCBtaWRpWzJdLnR5cGUgIT09IFwibnVtYmVyXCIgfHwgbWlkaVszXS50eXBlICE9PSBcIm51bWJlclwiIHx8IG1pZGlbNF0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGZpdmUgaW50ZWdlciBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMF0uaW50dCk7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVsxXS5pbnR0KTtcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzJdLmludHQpO1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbM10uaW50dCk7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVs0XS5pbnR0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1pZGlDbWRQYXJhbTFJbnRlZ2VyMU9wdGlvbmFsSW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBPTkUgSU5UIFBBUkFNRVRFUiwgT05FIE9QVElPTkFMIE9DVEFWRSBQQVJBTUVURVJcblx0XHRcdGlmIChtaWRpLmxlbmd0aCAhPT0gMSB8fCBtaWRpLmxlbmd0aCAhPT0gNClcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBvciB0d28gcGFyYW1ldGVycyBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRlbHNlIGlmIChtaWRpWzBdLnR5cGUgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBpbnRlZ2VyIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRlbHNlIGlmIChtaWRpLmxlbmd0aCA9PT0gNCkge1xuXHRcdFx0XHRpZiAobWlkaVsxXS50b2tlbiAhPT0gXCJvY3RhdmVcIilcblx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgb2N0YXZlIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRcdGlmIChtaWRpWzJdLnRva2VuICE9PSBcIj1cIilcblx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgb2N0YXZlIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRcdGlmIChtaWRpWzNdLnR5cGUgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGludGVnZXIgcGFyYW1ldGVyIGZvciBvY3RhdmUgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzBdLmludHQpO1xuXHRcdFx0XHRpZiAobWlkaS5sZW5ndGggPT09IDQpXG5cdFx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzNdLmludHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWlkaUNtZFBhcmFtMVN0cmluZ1ZhcmlhYmxlSW50ZWdlcnMuaW5kZXhPZihtaWRpX2NtZCkgPj0gMCkge1xuXHRcdFx0Ly8gT05FIFNUUklORywgVkFSSUFCTEUgSU5UIFBBUkFNRVRFUlNcblx0XHRcdGlmIChtaWRpLmxlbmd0aCA8IDIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBzdHJpbmcgcGFyYW1ldGVyIGFuZCBhdCBsZWFzdCBvbmUgaW50ZWdlciBwYXJhbWV0ZXIgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSBpZiAobWlkaVswXS50eXBlICE9PSBcImFscGhhXCIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBzdHJpbmcgcGFyYW1ldGVyIGFuZCBhdCBsZWFzdCBvbmUgaW50ZWdlciBwYXJhbWV0ZXIgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHZhciBwID0gbWlkaS5zaGlmdCgpO1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKHAudG9rZW4pO1xuXHRcdFx0XHR3aGlsZSAobWlkaS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0cCA9IG1pZGkuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAocC50eXBlICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGludGVnZXIgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKHAuaW50dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHVuZS5oYXNCZWdpbk11c2ljKCkpXG5cdFx0XHR0dW5lLmFwcGVuZEVsZW1lbnQoJ21pZGknLCAtMSwgLTEsIHsgY21kOiBtaWRpX2NtZCwgcGFyYW1zOiBtaWRpX3BhcmFtcyB9KTtcblx0XHRlbHNlIHtcblx0XHRcdGlmICh0dW5lLmZvcm1hdHRpbmdbJ21pZGknXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0dW5lLmZvcm1hdHRpbmdbJ21pZGknXSA9IHt9O1xuXHRcdFx0dHVuZS5mb3JtYXR0aW5nWydtaWRpJ11bbWlkaV9jbWRdID0gbWlkaV9wYXJhbXM7XG5cdFx0fVxuXHR9O1xuXG5cdHBhcnNlRGlyZWN0aXZlLnBhcnNlRm9udENoYW5nZUxpbmUgPSBmdW5jdGlvbih0ZXh0c3RyKSB7XG5cdFx0dmFyIHRleHRQYXJ0cyA9IHRleHRzdHIuc3BsaXQoJyQnKTtcblx0XHRpZiAodGV4dFBhcnRzLmxlbmd0aCA+IDEgJiYgbXVsdGlsaW5lVmFycy5zZXRmb250KSB7XG5cdFx0XHR2YXIgdGV4dGFyciA9IFsgeyB0ZXh0OiB0ZXh0UGFydHNbMF0gfV07XG5cdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IHRleHRQYXJ0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAodGV4dFBhcnRzW2ldLmNoYXJBdCgwKSA9PT0gJzAnKVxuXHRcdFx0XHRcdHRleHRhcnIucHVzaCh7IHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2UgaWYgKHRleHRQYXJ0c1tpXS5jaGFyQXQoMCkgPT09ICcxJyAmJiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbMV0pXG5cdFx0XHRcdFx0dGV4dGFyci5wdXNoKHtmb250OiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbMV0sIHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2UgaWYgKHRleHRQYXJ0c1tpXS5jaGFyQXQoMCkgPT09ICcyJyAmJiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbMl0pXG5cdFx0XHRcdFx0dGV4dGFyci5wdXNoKHtmb250OiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbMl0sIHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2UgaWYgKHRleHRQYXJ0c1tpXS5jaGFyQXQoMCkgPT09ICczJyAmJiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbM10pXG5cdFx0XHRcdFx0dGV4dGFyci5wdXNoKHtmb250OiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbM10sIHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2UgaWYgKHRleHRQYXJ0c1tpXS5jaGFyQXQoMCkgPT09ICc0JyAmJiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbNF0pXG5cdFx0XHRcdFx0dGV4dGFyci5wdXNoKHtmb250OiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbNF0sIHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR0ZXh0YXJyW3RleHRhcnIubGVuZ3RoLTFdLnRleHQgKz0gJyQnICsgdGV4dFBhcnRzW2ldO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRleHRhcnIubGVuZ3RoID4gMSlcblx0XHRcdFx0cmV0dXJuIHRleHRhcnI7XG5cdFx0fVxuXHRcdHJldHVybiB0ZXh0c3RyO1xuXHR9O1xuXG5cdHZhciBwb3NpdGlvbkNob2ljZXMgPSBbICdhdXRvJywgJ2Fib3ZlJywgJ2JlbG93JywgJ2hpZGRlbicgXTtcblx0cGFyc2VEaXJlY3RpdmUuYWRkRGlyZWN0aXZlID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dmFyIHRva2VucyA9IHRva2VuaXplci50b2tlbml6ZShzdHIsIDAsIHN0ci5sZW5ndGgpO1x0Ly8gMyBvciBtb3JlICUgaW4gYSByb3csIG9yIGp1c3Qgc3BhY2VzIGFmdGVyICUlIGlzIGp1c3QgYSBjb21tZW50XG5cdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDAgfHwgdG9rZW5zWzBdLnR5cGUgIT09ICdhbHBoYScpIHJldHVybiBudWxsO1xuXHRcdHZhciByZXN0T2ZTdHJpbmcgPSBzdHIuc3Vic3RyaW5nKHN0ci5pbmRleE9mKHRva2Vuc1swXS50b2tlbikrdG9rZW5zWzBdLnRva2VuLmxlbmd0aCk7XG5cdFx0cmVzdE9mU3RyaW5nID0gdG9rZW5pemVyLnN0cmlwQ29tbWVudChyZXN0T2ZTdHJpbmcpO1xuXHRcdHZhciBjbWQgPSB0b2tlbnMuc2hpZnQoKS50b2tlbi50b0xvd2VyQ2FzZSgpO1xuXHRcdHZhciBzY3JhdGNoID0gXCJcIjtcblx0XHRzd2l0Y2ggKGNtZClcblx0XHR7XG5cdFx0XHQvLyBUaGUgZm9sbG93aW5nIGRpcmVjdGl2ZXMgd2VyZSBhZGRlZCB0byBhYmNfcGFyc2VyX2xpbnQsIGJ1dCBoYXZlbid0IGJlZW4gaW1wbGVtZW50ZWQgaGVyZS5cblx0XHRcdC8vIE1vc3Qgb2YgdGhlbSBhcmUgZGlyZWN0IHRyYW5zbGF0aW9ucyBmcm9tIHRoZSBkaXJlY3RpdmVzIHRoYXQgd2lsbCBiZSBwYXJzZWQgaW4uIFNlZSBhYmNtMnBzJ3MgZm9ybWF0LnR4dCBmb3IgaW5mbyBvbiBlYWNoIG9mIHRoZXNlLlxuXHRcdFx0Ly9cdFx0XHRcdFx0YWxpZ25iYXJzOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRhbGlnbmNvbXBvc2VyOiB7IHR5cGU6IFwic3RyaW5nXCIsIEVudW06IFsgJ2xlZnQnLCAnY2VudGVyJywncmlnaHQnIF0sIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRic3RlbWRvd246IHsgdHlwZTogXCJib29sZWFuXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRjb250aW51ZWFsbDogeyB0eXBlOiBcImJvb2xlYW5cIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdGR5bmFsaWduOiB7IHR5cGU6IFwiYm9vbGVhblwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0ZXhwcmFib3ZlOiB7IHR5cGU6IFwiYm9vbGVhblwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0ZXhwcmJlbG93OiB7IHR5cGU6IFwiYm9vbGVhblwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0Z2Nob3JkYm94OiB7IHR5cGU6IFwiYm9vbGVhblwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0Z3JhY2VzbHVyczogeyB0eXBlOiBcImJvb2xlYW5cIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdGdyYWNlc3BhY2ViZWZvcmU6IHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdGdyYWNlc3BhY2VpbnNpZGU6IHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdGdyYWNlc3BhY2VhZnRlcjogeyB0eXBlOiBcIm51bWJlclwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0aW5mb3NwYWNlOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRsaW5lc2tpcGZhYzogeyB0eXBlOiBcIm51bWJlclwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0bWF4c2hyaW5rOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRtYXhzdGFmZnNlcDogeyB0eXBlOiBcIm51bWJlclwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0bWF4c3lzc3RhZmZzZXA6IHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdG5vdGVzcGFjaW5nZmFjdG9yOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRwYXJza2lwZmFjOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRzbHVyaGVpZ2h0OiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRzcGxpdHR1bmU6IHsgdHlwZTogXCJib29sZWFuXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRzcXVhcmVicmV2ZTogeyB0eXBlOiBcImJvb2xlYW5cIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdHN0ZW1oZWlnaHQ6IHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdHN0cmFpZ2h0ZmxhZ3M6IHsgdHlwZTogXCJib29sZWFuXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRzdHJldGNoc3RhZmY6IHsgdHlwZTogXCJib29sZWFuXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHR0aXRsZWZvcm1hdDogeyB0eXBlOiBcInN0cmluZ1wiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Y2FzZSBcImJhZ3BpcGVzXCI6dHVuZS5mb3JtYXR0aW5nLmJhZ3BpcGVzID0gdHJ1ZTticmVhaztcblx0XHRcdGNhc2UgXCJmbGF0YmVhbXNcIjp0dW5lLmZvcm1hdHRpbmcuZmxhdGJlYW1zID0gdHJ1ZTticmVhaztcblx0XHRcdGNhc2UgXCJsYW5kc2NhcGVcIjptdWx0aWxpbmVWYXJzLmxhbmRzY2FwZSA9IHRydWU7YnJlYWs7XG5cdFx0XHRjYXNlIFwicGFwZXJzaXplXCI6bXVsdGlsaW5lVmFycy5wYXBlcnNpemUgPSByZXN0T2ZTdHJpbmc7YnJlYWs7XG5cdFx0XHRjYXNlIFwic2x1cmdyYWNlc1wiOnR1bmUuZm9ybWF0dGluZy5zbHVyZ3JhY2VzID0gdHJ1ZTticmVhaztcblx0XHRcdGNhc2UgXCJzdHJldGNobGFzdFwiOnR1bmUuZm9ybWF0dGluZy5zdHJldGNobGFzdCA9IHRydWU7YnJlYWs7XG5cdFx0XHRjYXNlIFwidGl0bGVjYXBzXCI6bXVsdGlsaW5lVmFycy50aXRsZWNhcHMgPSB0cnVlO2JyZWFrO1xuXHRcdFx0Y2FzZSBcInRpdGxlbGVmdFwiOnR1bmUuZm9ybWF0dGluZy50aXRsZWxlZnQgPSB0cnVlO2JyZWFrO1xuXHRcdFx0Y2FzZSBcIm1lYXN1cmVib3hcIjp0dW5lLmZvcm1hdHRpbmcubWVhc3VyZWJveCA9IHRydWU7YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJ2b2NhbFwiOiByZXR1cm4gYWRkTXVsdGlsaW5lVmFyT25lUGFyYW1DaG9pY2UoXCJ2b2NhbFBvc2l0aW9uXCIsIGNtZCwgdG9rZW5zLCBwb3NpdGlvbkNob2ljZXMpO1xuXHRcdFx0Y2FzZSBcImR5bmFtaWNcIjogcmV0dXJuIGFkZE11bHRpbGluZVZhck9uZVBhcmFtQ2hvaWNlKFwiZHluYW1pY1Bvc2l0aW9uXCIsIGNtZCwgdG9rZW5zLCBwb3NpdGlvbkNob2ljZXMpO1xuXHRcdFx0Y2FzZSBcImdjaG9yZFwiOiByZXR1cm4gYWRkTXVsdGlsaW5lVmFyT25lUGFyYW1DaG9pY2UoXCJjaG9yZFBvc2l0aW9uXCIsIGNtZCwgdG9rZW5zLCBwb3NpdGlvbkNob2ljZXMpO1xuXHRcdFx0Y2FzZSBcIm9ybmFtZW50XCI6IHJldHVybiBhZGRNdWx0aWxpbmVWYXJPbmVQYXJhbUNob2ljZShcIm9ybmFtZW50UG9zaXRpb25cIiwgY21kLCB0b2tlbnMsIHBvc2l0aW9uQ2hvaWNlcyk7XG5cdFx0XHRjYXNlIFwidm9sdW1lXCI6IHJldHVybiBhZGRNdWx0aWxpbmVWYXJPbmVQYXJhbUNob2ljZShcInZvbHVtZVBvc2l0aW9uXCIsIGNtZCwgdG9rZW5zLCBwb3NpdGlvbkNob2ljZXMpO1xuXG5cdFx0XHRjYXNlIFwiYm90bWFyZ2luXCI6XG5cdFx0XHRjYXNlIFwiYm90c3BhY2VcIjpcblx0XHRcdGNhc2UgXCJjb21wb3NlcnNwYWNlXCI6XG5cdFx0XHRjYXNlIFwiaW5kZW50XCI6XG5cdFx0XHRjYXNlIFwibGVmdG1hcmdpblwiOlxuXHRcdFx0Y2FzZSBcImxpbmVzZXBcIjpcblx0XHRcdGNhc2UgXCJtdXNpY3NwYWNlXCI6XG5cdFx0XHRjYXNlIFwicGFydHNzcGFjZVwiOlxuXHRcdFx0Y2FzZSBcInBhZ2VoZWlnaHRcIjpcblx0XHRcdGNhc2UgXCJwYWdld2lkdGhcIjpcblx0XHRcdGNhc2UgXCJyaWdodG1hcmdpblwiOlxuXHRcdFx0Y2FzZSBcInN0YWZmc2VwXCI6XG5cdFx0XHRjYXNlIFwic3RhZmZ3aWR0aFwiOlxuXHRcdFx0Y2FzZSBcInN1YnRpdGxlc3BhY2VcIjpcblx0XHRcdGNhc2UgXCJzeXNzdGFmZnNlcFwiOlxuXHRcdFx0Y2FzZSBcInN5c3RlbXNlcFwiOlxuXHRcdFx0Y2FzZSBcInRleHRzcGFjZVwiOlxuXHRcdFx0Y2FzZSBcInRpdGxlc3BhY2VcIjpcblx0XHRcdGNhc2UgXCJ0b3BtYXJnaW5cIjpcblx0XHRcdGNhc2UgXCJ0b3BzcGFjZVwiOlxuXHRcdFx0Y2FzZSBcInZvY2Fsc3BhY2VcIjpcblx0XHRcdGNhc2UgXCJ3b3Jkc3NwYWNlXCI6XG5cdFx0XHRcdHJldHVybiBvbmVQYXJhbWV0ZXJNZWFzdXJlbWVudChjbWQsIHRva2Vucyk7XG5cdFx0XHRjYXNlIFwidm9pY2VzY2FsZVwiOlxuXHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCAhPT0gMSB8fCB0b2tlbnNbMF0udHlwZSAhPT0gJ251bWJlcicpXG5cdFx0XHRcdFx0cmV0dXJuIFwidm9pY2VzY2FsZSByZXF1aXJlcyBvbmUgZmxvYXQgYXMgYSBwYXJhbWV0ZXJcIjtcblx0XHRcdFx0dmFyIHZvaWNlU2NhbGUgPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlKSB7XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc2NhbGUgPSB2b2ljZVNjYWxlLmZsb2F0dDtcblx0XHRcdFx0XHR0dW5lLmNoYW5nZVZvaWNlU2NhbGUobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc2NhbGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSBcInZza2lwXCI6XG5cdFx0XHRcdHZhciB2c2tpcCA9IGdldFJlcXVpcmVkTWVhc3VyZW1lbnQoY21kLCB0b2tlbnMpO1xuXHRcdFx0XHRpZiAodnNraXAuZXJyb3IpXG5cdFx0XHRcdFx0cmV0dXJuIHZza2lwLmVycm9yO1xuXHRcdFx0XHR0dW5lLmFkZFNwYWNpbmcodnNraXApO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdGNhc2UgXCJzY2FsZVwiOlxuXHRcdFx0XHRzZXRTY2FsZShjbWQsIHRva2Vucyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlcFwiOlxuXHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0XHR0dW5lLmFkZFNlcGFyYXRvcigpO1xuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR2YXIgcG9pbnRzID0gdG9rZW5pemVyLmdldE1lYXN1cmVtZW50KHRva2Vucyk7XG5cdFx0XHRcdFx0aWYgKHBvaW50cy51c2VkID09PSAwKVxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyAzIG51bWJlcnM6IHNwYWNlIGFib3ZlLCBzcGFjZSBiZWxvdywgbGVuZ3RoIG9mIGxpbmVcIjtcblx0XHRcdFx0XHR2YXIgc3BhY2VBYm92ZSA9IHBvaW50cy52YWx1ZTtcblxuXHRcdFx0XHRcdHBvaW50cyA9IHRva2VuaXplci5nZXRNZWFzdXJlbWVudCh0b2tlbnMpO1xuXHRcdFx0XHRcdGlmIChwb2ludHMudXNlZCA9PT0gMClcblx0XHRcdFx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgMyBudW1iZXJzOiBzcGFjZSBhYm92ZSwgc3BhY2UgYmVsb3csIGxlbmd0aCBvZiBsaW5lXCI7XG5cdFx0XHRcdFx0dmFyIHNwYWNlQmVsb3cgPSBwb2ludHMudmFsdWU7XG5cblx0XHRcdFx0XHRwb2ludHMgPSB0b2tlbml6ZXIuZ2V0TWVhc3VyZW1lbnQodG9rZW5zKTtcblx0XHRcdFx0XHRpZiAocG9pbnRzLnVzZWQgPT09IDAgfHwgdG9rZW5zLmxlbmd0aCAhPT0gMClcblx0XHRcdFx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgMyBudW1iZXJzOiBzcGFjZSBhYm92ZSwgc3BhY2UgYmVsb3csIGxlbmd0aCBvZiBsaW5lXCI7XG5cdFx0XHRcdFx0dmFyIGxlbkxpbmUgPSBwb2ludHMudmFsdWU7XG5cdFx0XHRcdFx0dHVuZS5hZGRTZXBhcmF0b3Ioc3BhY2VBYm92ZSwgc3BhY2VCZWxvdywgbGVuTGluZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYmFyc3BlcnN0YWZmXCI6XG5cdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXIoJ2JhcnNwZXJzdGFmZicsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0aWYgKHNjcmF0Y2ggIT09IG51bGwpIHJldHVybiBzY3JhdGNoO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzdGFmZm5vbm90ZVwiOlxuXHRcdFx0XHQvLyBUaGUgc2Vuc2Ugb2YgdGhlIGJvb2xlYW4gaXMgb3Bwb3NpdGUgaGVyZS4gXCIwXCIgbWVhbnMgdHJ1ZS5cblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggIT09IDEpXG5cdFx0XHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIHN0YWZmbm9ub3RlIHJlcXVpcmVzIG9uZSBwYXJhbWV0ZXI6IDAgb3IgMVwiO1xuXHRcdFx0XHRpZiAodG9rZW5zWzBdLnRva2VuID09PSAnMCcpXG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5zdGFmZm5vbm90ZSA9IHRydWU7XG5cdFx0XHRcdGVsc2UgaWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJzEnKVxuXHRcdFx0XHRcdG11bHRpbGluZVZhcnMuc3RhZmZub25vdGUgPSBmYWxzZTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBzdGFmZm5vbm90ZSByZXF1aXJlcyBvbmUgcGFyYW1ldGVyOiAwIG9yIDEgKHJlY2VpdmVkIFwiICsgdG9rZW5zWzBdLnRva2VuICsgJyknO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJwcmludHRlbXBvXCI6XG5cdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXJCb29sKCdwcmludFRlbXBvJywgY21kLCB0b2tlbnMpO1xuXHRcdFx0XHRpZiAoc2NyYXRjaCAhPT0gbnVsbCkgcmV0dXJuIHNjcmF0Y2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInBhcnRzYm94XCI6XG5cdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXJCb29sKCdwYXJ0c0JveCcsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0aWYgKHNjcmF0Y2ggIT09IG51bGwpIHJldHVybiBzY3JhdGNoO1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLnBhcnRzZm9udC5ib3ggPSBtdWx0aWxpbmVWYXJzLnBhcnRzQm94O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJmcmVlZ2Nob3JkXCI6XG5cdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXJCb29sKCdmcmVlZ2Nob3JkJywgY21kLCB0b2tlbnMpO1xuXHRcdFx0XHRpZiAoc2NyYXRjaCAhPT0gbnVsbCkgcmV0dXJuIHNjcmF0Y2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm1lYXN1cmVuYlwiOlxuXHRcdFx0Y2FzZSBcImJhcm51bWJlcnNcIjpcblx0XHRcdFx0c2NyYXRjaCA9IGFkZE11bHRpbGluZVZhcignYmFyTnVtYmVycycsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0aWYgKHNjcmF0Y2ggIT09IG51bGwpIHJldHVybiBzY3JhdGNoO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZXRiYXJuYlwiOlxuXHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCAhPT0gMSB8fCB0b2tlbnNbMF0udHlwZSAhPT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHRyZXR1cm4gJ0RpcmVjdGl2ZSBzZXRiYXJuYiByZXF1aXJlcyBhIG51bWJlciBhcyBhIHBhcmFtZXRlci4nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuY3VyckJhck51bWJlciA9IHR1bmUuc2V0QmFyTnVtYmVySW1tZWRpYXRlKHRva2Vuc1swXS5pbnR0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYmVnaW50ZXh0XCI6XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuaW5UZXh0QmxvY2sgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb250aW51ZWFsbFwiOlxuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmNvbnRpbnVlYWxsID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYmVnaW5wc1wiOlxuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmluUHNCbG9jayA9IHRydWU7XG5cdFx0XHRcdHdhcm4oXCJQb3N0c2NyaXB0IGlnbm9yZWRcIiwgc3RyLCAwKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZGVjb1wiOlxuXHRcdFx0XHRpZiAocmVzdE9mU3RyaW5nLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5pZ25vcmVkRGVjb3JhdGlvbnMucHVzaChyZXN0T2ZTdHJpbmcuc3Vic3RyaW5nKDAsIHJlc3RPZlN0cmluZy5pbmRleE9mKCcgJykpKTtcblx0XHRcdFx0d2FybihcIkRlY29yYXRpb24gcmVkZWZpbml0aW9uIGlnbm9yZWRcIiwgc3RyLCAwKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwidGV4dFwiOlxuXHRcdFx0XHR2YXIgdGV4dHN0ciA9IHRva2VuaXplci50cmFuc2xhdGVTdHJpbmcocmVzdE9mU3RyaW5nKTtcblx0XHRcdFx0dHVuZS5hZGRUZXh0KHBhcnNlRGlyZWN0aXZlLnBhcnNlRm9udENoYW5nZUxpbmUodGV4dHN0cikpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjZW50ZXJcIjpcblx0XHRcdFx0dmFyIGNlbnRlcnN0ciA9IHRva2VuaXplci50cmFuc2xhdGVTdHJpbmcocmVzdE9mU3RyaW5nKTtcblx0XHRcdFx0dHVuZS5hZGRDZW50ZXJlZChwYXJzZURpcmVjdGl2ZS5wYXJzZUZvbnRDaGFuZ2VMaW5lKGNlbnRlcnN0cikpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJmb250XCI6XG5cdFx0XHRcdC8vIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIHRoaXM7IGl0IGlzIGEgdXNlbGVzcyBkaXJlY3RpdmVcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2V0Zm9udFwiOlxuXHRcdFx0XHR2YXIgc2ZUb2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUocmVzdE9mU3RyaW5nLCAwLCByZXN0T2ZTdHJpbmcubGVuZ3RoKTtcbi8vXHRcdFx0XHR2YXIgc2ZEb25lID0gZmFsc2U7XG5cdFx0XHRcdGlmIChzZlRva2Vucy5sZW5ndGggPj0gNCkge1xuXHRcdFx0XHRcdGlmIChzZlRva2Vuc1swXS50b2tlbiA9PT0gJy0nICYmIHNmVG9rZW5zWzFdLnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHR2YXIgc2ZOdW0gPSBwYXJzZUludChzZlRva2Vuc1sxXS50b2tlbik7XG5cdFx0XHRcdFx0XHRpZiAoc2ZOdW0gPj0gMSAmJiBzZk51bSA8PSA0KSB7XG5cdFx0XHRcdFx0XHRcdGlmICghbXVsdGlsaW5lVmFycy5zZXRmb250KVxuXHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuc2V0Zm9udCA9IFtdO1xuXHRcdFx0XHRcdFx0XHRzZlRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRzZlRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnNldGZvbnRbc2ZOdW1dID0gZ2V0Rm9udFBhcmFtZXRlcihzZlRva2VucywgbXVsdGlsaW5lVmFycy5zZXRmb250W3NmTnVtXSwgc3RyLCAwLCAnc2V0Zm9udCcpO1xuLy9cdFx0XHRcdFx0XHRcdHZhciBzZlNpemUgPSBzZlRva2Vucy5wb3AoKTtcbi8vXHRcdFx0XHRcdFx0XHRpZiAoc2ZTaXplLnR5cGUgPT09ICdudW1iZXInKSB7XG4vL1x0XHRcdFx0XHRcdFx0XHRzZlNpemUgPSBwYXJzZUludChzZlNpemUudG9rZW4pO1xuLy9cdFx0XHRcdFx0XHRcdFx0dmFyIHNmRm9udE5hbWUgPSAnJztcbi8vXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHNmaSA9IDI7IHNmaSA8IHNmVG9rZW5zLmxlbmd0aDsgc2ZpKyspXG4vL1x0XHRcdFx0XHRcdFx0XHRcdHNmRm9udE5hbWUgKz0gc2ZUb2tlbnNbc2ZpXS50b2tlbjtcbi8vXHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuc2V0Zm9udFtzZk51bV0gPSB7IGZhY2U6IHNmRm9udE5hbWUsIHNpemU6IHNmU2l6ZSB9O1xuLy9cdFx0XHRcdFx0XHRcdFx0c2ZEb25lID0gdHJ1ZTtcbi8vXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG4vL1x0XHRcdFx0aWYgKCFzZkRvbmUpXG4vL1x0XHRcdFx0XHRyZXR1cm4gXCJCYWQgcGFyYW1ldGVyczogXCIgKyBjbWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImdjaG9yZGZvbnRcIjpcblx0XHRcdGNhc2UgXCJwYXJ0c2ZvbnRcIjpcblx0XHRcdGNhc2UgXCJ0cmlwbGV0Zm9udFwiOlxuXHRcdFx0Y2FzZSBcInZvY2FsZm9udFwiOlxuXHRcdFx0Y2FzZSBcInRleHRmb250XCI6XG5cdFx0XHRjYXNlIFwiYW5ub3RhdGlvbmZvbnRcIjpcblx0XHRcdGNhc2UgXCJoaXN0b3J5Zm9udFwiOlxuXHRcdFx0Y2FzZSBcImluZm9mb250XCI6XG5cdFx0XHRjYXNlIFwibWVhc3VyZWZvbnRcIjpcblx0XHRcdGNhc2UgXCJyZXBlYXRmb250XCI6XG5cdFx0XHRjYXNlIFwid29yZHNmb250XCI6XG5cdFx0XHRcdHJldHVybiBnZXRDaGFuZ2luZ0ZvbnQoY21kLCB0b2tlbnMsIHN0cik7XG5cdFx0XHRjYXNlIFwiY29tcG9zZXJmb250XCI6XG5cdFx0XHRjYXNlIFwic3VidGl0bGVmb250XCI6XG5cdFx0XHRjYXNlIFwidGVtcG9mb250XCI6XG5cdFx0XHRjYXNlIFwidGl0bGVmb250XCI6XG5cdFx0XHRjYXNlIFwidm9pY2Vmb250XCI6XG5cdFx0XHRjYXNlIFwiZm9vdGVyZm9udFwiOlxuXHRcdFx0Y2FzZSBcImhlYWRlcmZvbnRcIjpcblx0XHRcdFx0cmV0dXJuIGdldEdsb2JhbEZvbnQoY21kLCB0b2tlbnMsIHN0cik7XG5cdFx0XHRjYXNlIFwiYmFybGFiZWxmb250XCI6XG5cdFx0XHRjYXNlIFwiYmFybnVtYmVyZm9udFwiOlxuXHRcdFx0Y2FzZSBcImJhcm51bWZvbnRcIjpcblx0XHRcdFx0cmV0dXJuIGdldENoYW5naW5nRm9udChcIm1lYXN1cmVmb250XCIsIHRva2Vucywgc3RyKTtcblx0XHRcdGNhc2UgXCJzdGF2ZXNcIjpcblx0XHRcdGNhc2UgXCJzY29yZVwiOlxuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLnNjb3JlX2lzX3ByZXNlbnQgPSB0cnVlO1xuXHRcdFx0XHR2YXIgYWRkVm9pY2UgPSBmdW5jdGlvbihpZCwgbmV3U3RhZmYsIGJyYWNrZXQsIGJyYWNlLCBjb250aW51ZUJhcikge1xuXHRcdFx0XHRcdGlmIChuZXdTdGFmZiB8fCBtdWx0aWxpbmVWYXJzLnN0YXZlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuc3RhdmVzLnB1c2goe2luZGV4OiBtdWx0aWxpbmVWYXJzLnN0YXZlcy5sZW5ndGgsIG51bVZvaWNlczogMH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgc3RhZmYgPSBwYXJzZUNvbW1vbi5sYXN0KG11bHRpbGluZVZhcnMuc3RhdmVzKTtcblx0XHRcdFx0XHRpZiAoYnJhY2tldCAhPT0gdW5kZWZpbmVkKSBzdGFmZi5icmFja2V0ID0gYnJhY2tldDtcblx0XHRcdFx0XHRpZiAoYnJhY2UgIT09IHVuZGVmaW5lZCkgc3RhZmYuYnJhY2UgPSBicmFjZTtcblx0XHRcdFx0XHRpZiAoY29udGludWVCYXIpIHN0YWZmLmNvbm5lY3RCYXJMaW5lcyA9ICdlbmQnO1xuXHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy52b2ljZXNbaWRdID0ge3N0YWZmTnVtOiBzdGFmZi5pbmRleCwgaW5kZXg6IHN0YWZmLm51bVZvaWNlc307XG5cdFx0XHRcdFx0XHRzdGFmZi5udW1Wb2ljZXMrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dmFyIG9wZW5QYXJlbiA9IGZhbHNlO1xuXHRcdFx0XHR2YXIgb3BlbkJyYWNrZXQgPSBmYWxzZTtcblx0XHRcdFx0dmFyIG9wZW5CcmFjZSA9IGZhbHNlO1xuXHRcdFx0XHR2YXIganVzdE9wZW5QYXJlbiA9IGZhbHNlO1xuXHRcdFx0XHR2YXIganVzdE9wZW5CcmFja2V0ID0gZmFsc2U7XG5cdFx0XHRcdHZhciBqdXN0T3BlbkJyYWNlID0gZmFsc2U7XG5cdFx0XHRcdHZhciBjb250aW51ZUJhciA9IGZhbHNlO1xuXHRcdFx0XHR2YXIgbGFzdFZvaWNlO1xuXHRcdFx0XHR2YXIgYWRkQ29udGludWVCYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRjb250aW51ZUJhciA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKGxhc3RWb2ljZSkge1xuXHRcdFx0XHRcdFx0dmFyIHR5ID0gJ3N0YXJ0Jztcblx0XHRcdFx0XHRcdGlmIChsYXN0Vm9pY2Uuc3RhZmZOdW0gPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLnN0YXZlc1tsYXN0Vm9pY2Uuc3RhZmZOdW0tMV0uY29ubmVjdEJhckxpbmVzID09PSAnc3RhcnQnIHx8XG5cdFx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5zdGF2ZXNbbGFzdFZvaWNlLnN0YWZmTnVtLTFdLmNvbm5lY3RCYXJMaW5lcyA9PT0gJ2NvbnRpbnVlJylcblx0XHRcdFx0XHRcdFx0XHR0eSA9ICdjb250aW51ZSc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnN0YXZlc1tsYXN0Vm9pY2Uuc3RhZmZOdW1dLmNvbm5lY3RCYXJMaW5lcyA9IHR5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0d2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgdCA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdHN3aXRjaCAodC50b2tlbikge1xuXHRcdFx0XHRcdFx0Y2FzZSAnKCc6XG5cdFx0XHRcdFx0XHRcdGlmIChvcGVuUGFyZW4pIHdhcm4oXCJDYW4ndCBuZXN0IHBhcmVudGhlc2lzIGluICUlc2NvcmVcIiwgc3RyLCB0LnN0YXJ0KTtcblx0XHRcdFx0XHRcdFx0ZWxzZSB7b3BlblBhcmVuID0gdHJ1ZTtqdXN0T3BlblBhcmVuID0gdHJ1ZTt9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnKSc6XG5cdFx0XHRcdFx0XHRcdGlmICghb3BlblBhcmVuIHx8IGp1c3RPcGVuUGFyZW4pIHdhcm4oXCJVbmV4cGVjdGVkIGNsb3NlIHBhcmVudGhlc2lzIGluICUlc2NvcmVcIiwgc3RyLCB0LnN0YXJ0KTtcblx0XHRcdFx0XHRcdFx0ZWxzZSBvcGVuUGFyZW4gPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdbJzpcblx0XHRcdFx0XHRcdFx0aWYgKG9wZW5CcmFja2V0KSB3YXJuKFwiQ2FuJ3QgbmVzdCBicmFja2V0cyBpbiAlJXNjb3JlXCIsIHN0ciwgdC5zdGFydCk7XG5cdFx0XHRcdFx0XHRcdGVsc2Uge29wZW5CcmFja2V0ID0gdHJ1ZTtqdXN0T3BlbkJyYWNrZXQgPSB0cnVlO31cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICddJzpcblx0XHRcdFx0XHRcdFx0aWYgKCFvcGVuQnJhY2tldCB8fCBqdXN0T3BlbkJyYWNrZXQpIHdhcm4oXCJVbmV4cGVjdGVkIGNsb3NlIGJyYWNrZXQgaW4gJSVzY29yZVwiLCBzdHIsIHQuc3RhcnQpO1xuXHRcdFx0XHRcdFx0XHRlbHNlIHtvcGVuQnJhY2tldCA9IGZhbHNlO211bHRpbGluZVZhcnMuc3RhdmVzW2xhc3RWb2ljZS5zdGFmZk51bV0uYnJhY2tldCA9ICdlbmQnO31cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICd7Jzpcblx0XHRcdFx0XHRcdFx0aWYgKG9wZW5CcmFjZSApIHdhcm4oXCJDYW4ndCBuZXN0IGJyYWNlcyBpbiAlJXNjb3JlXCIsIHN0ciwgdC5zdGFydCk7XG5cdFx0XHRcdFx0XHRcdGVsc2Uge29wZW5CcmFjZSA9IHRydWU7anVzdE9wZW5CcmFjZSA9IHRydWU7fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ30nOlxuXHRcdFx0XHRcdFx0XHRpZiAoIW9wZW5CcmFjZSB8fCBqdXN0T3BlbkJyYWNlKSB3YXJuKFwiVW5leHBlY3RlZCBjbG9zZSBicmFjZSBpbiAlJXNjb3JlXCIsIHN0ciwgdC5zdGFydCk7XG5cdFx0XHRcdFx0XHRcdGVsc2Uge29wZW5CcmFjZSA9IGZhbHNlO211bHRpbGluZVZhcnMuc3RhdmVzW2xhc3RWb2ljZS5zdGFmZk51bV0uYnJhY2UgPSAnZW5kJzt9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnfCc6XG5cdFx0XHRcdFx0XHRcdGFkZENvbnRpbnVlQmFyKCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0dmFyIHZjID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKHQudHlwZSA9PT0gJ2FscGhhJyB8fCB0LnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmMgKz0gdC50b2tlbjtcblx0XHRcdFx0XHRcdFx0XHRpZiAodC5jb250aW51ZUlkKVxuXHRcdFx0XHRcdFx0XHRcdFx0dCA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZhciBuZXdTdGFmZiA9ICFvcGVuUGFyZW4gfHwganVzdE9wZW5QYXJlbjtcblx0XHRcdFx0XHRcdFx0dmFyIGJyYWNrZXQgPSBqdXN0T3BlbkJyYWNrZXQgPyAnc3RhcnQnIDogb3BlbkJyYWNrZXQgPyAnY29udGludWUnIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHR2YXIgYnJhY2UgPSBqdXN0T3BlbkJyYWNlID8gJ3N0YXJ0JyA6IG9wZW5CcmFjZSA/ICdjb250aW51ZScgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdGFkZFZvaWNlKHZjLCBuZXdTdGFmZiwgYnJhY2tldCwgYnJhY2UsIGNvbnRpbnVlQmFyKTtcblx0XHRcdFx0XHRcdFx0anVzdE9wZW5QYXJlbiA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRqdXN0T3BlbkJyYWNrZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0anVzdE9wZW5CcmFjZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZUJhciA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRsYXN0Vm9pY2UgPSBtdWx0aWxpbmVWYXJzLnZvaWNlc1t2Y107XG5cdFx0XHRcdFx0XHRcdGlmIChjbWQgPT09ICdzdGF2ZXMnKVxuXHRcdFx0XHRcdFx0XHRcdGFkZENvbnRpbnVlQmFyKCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIm5ld3BhZ2VcIjpcblx0XHRcdFx0dmFyIHBnTnVtID0gdG9rZW5pemVyLmdldEludChyZXN0T2ZTdHJpbmcpO1xuXHRcdFx0XHR0dW5lLmFkZE5ld1BhZ2UocGdOdW0uZGlnaXRzID09PSAwID8gLTEgOiBwZ051bS52YWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiYWJjXCI6XG5cdFx0XHRcdHZhciBhcnIgPSByZXN0T2ZTdHJpbmcuc3BsaXQoJyAnKTtcblx0XHRcdFx0c3dpdGNoIChhcnJbMF0pIHtcblx0XHRcdFx0XHRjYXNlIFwiLWNvcHlyaWdodFwiOlxuXHRcdFx0XHRcdGNhc2UgXCItY3JlYXRvclwiOlxuXHRcdFx0XHRcdGNhc2UgXCItZWRpdGVkLWJ5XCI6XG5cdFx0XHRcdFx0Y2FzZSBcIi12ZXJzaW9uXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIi1jaGFyc2V0XCI6XG5cdFx0XHRcdFx0XHR2YXIgc3ViQ21kID0gYXJyLnNoaWZ0KCk7XG5cdFx0XHRcdFx0XHR0dW5lLmFkZE1ldGFUZXh0KGNtZCtzdWJDbWQsIGFyci5qb2luKCcgJykpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiBcIlVua25vd24gZGlyZWN0aXZlOiBcIiArIGNtZCthcnJbMF07XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiaGVhZGVyXCI6XG5cdFx0XHRjYXNlIFwiZm9vdGVyXCI6XG5cdFx0XHRcdHZhciBmb290ZXJTdHIgPSB0b2tlbml6ZXIuZ2V0TWVhdChyZXN0T2ZTdHJpbmcsIDAsIHJlc3RPZlN0cmluZy5sZW5ndGgpO1xuXHRcdFx0XHRmb290ZXJTdHIgPSByZXN0T2ZTdHJpbmcuc3Vic3RyaW5nKGZvb3RlclN0ci5zdGFydCwgZm9vdGVyU3RyLmVuZCk7XG5cdFx0XHRcdGlmIChmb290ZXJTdHIuY2hhckF0KDApID09PSAnXCInICYmIGZvb3RlclN0ci5jaGFyQXQoZm9vdGVyU3RyLmxlbmd0aC0xKSA9PT0gJ1wiJyApXG5cdFx0XHRcdFx0Zm9vdGVyU3RyID0gZm9vdGVyU3RyLnN1YnN0cmluZygxLCBmb290ZXJTdHIubGVuZ3RoLTEpO1xuXHRcdFx0XHR2YXIgZm9vdGVyQXJyID0gZm9vdGVyU3RyLnNwbGl0KCdcXHQnKTtcblx0XHRcdFx0dmFyIGZvb3RlciA9IHt9O1xuXHRcdFx0XHRpZiAoZm9vdGVyQXJyLmxlbmd0aCA9PT0gMSlcblx0XHRcdFx0XHRmb290ZXIgPSB7IGxlZnQ6IFwiXCIsIGNlbnRlcjogZm9vdGVyQXJyWzBdLCByaWdodDogXCJcIiB9O1xuXHRcdFx0XHRlbHNlIGlmIChmb290ZXJBcnIubGVuZ3RoID09PSAyKVxuXHRcdFx0XHRcdGZvb3RlciA9IHsgbGVmdDogZm9vdGVyQXJyWzBdLCBjZW50ZXI6IGZvb3RlckFyclsxXSwgcmlnaHQ6IFwiXCIgfTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGZvb3RlciA9IHsgbGVmdDogZm9vdGVyQXJyWzBdLCBjZW50ZXI6IGZvb3RlckFyclsxXSwgcmlnaHQ6IGZvb3RlckFyclsyXSB9O1xuXHRcdFx0XHRpZiAoZm9vdGVyQXJyLmxlbmd0aCA+IDMpXG5cdFx0XHRcdFx0d2FybihcIlRvbyBtYW55IHRhYnMgaW4gXCIgKyBjbWQgKyBcIjogXCIgKyBmb290ZXJBcnIubGVuZ3RoICsgXCIgZm91bmQuXCIsIHJlc3RPZlN0cmluZywgMCk7XG5cblx0XHRcdFx0dHVuZS5hZGRNZXRhVGV4dE9iaihjbWQsIGZvb3Rlcik7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwibWlkaVwiOlxuXHRcdFx0XHR2YXIgbWlkaSA9IHRva2VuaXplci50b2tlbml6ZShyZXN0T2ZTdHJpbmcsIDAsIHJlc3RPZlN0cmluZy5sZW5ndGgsIHRydWUpO1xuXHRcdFx0XHRpZiAobWlkaS5sZW5ndGggPiAwICYmIG1pZGlbMF0udG9rZW4gPT09ICc9Jylcblx0XHRcdFx0XHRtaWRpLnNoaWZ0KCk7XG5cdFx0XHRcdGlmIChtaWRpLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgbWlkaSBjb21tYW5kXCIsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRwYXJzZU1pZGlDb21tYW5kKG1pZGksIHR1bmUsIHJlc3RPZlN0cmluZyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwibWFwXCI6XG5cdFx0XHRjYXNlIFwicGVyY21hcFwiOlxuXHRcdFx0Y2FzZSBcInBsYXl0ZW1wb1wiOlxuXHRcdFx0Y2FzZSBcImF1cXVhbGl0eVwiOlxuXHRcdFx0Y2FzZSBcImNvbnRpbnVvdXNcIjpcblx0XHRcdGNhc2UgXCJub2JhcmNoZWNrXCI6XG5cdFx0XHRcdC8vIFRPRE8tUEVSOiBBY3R1YWxseSBoYW5kbGUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlc2Vcblx0XHRcdFx0dHVuZS5mb3JtYXR0aW5nW2NtZF0gPSByZXN0T2ZTdHJpbmc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFwiVW5rbm93biBkaXJlY3RpdmU6IFwiICsgY21kO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblx0cGFyc2VEaXJlY3RpdmUuZ2xvYmFsRm9ybWF0dGluZyA9IGZ1bmN0aW9uKGZvcm1hdEhhc2gpIHtcblx0XHRmb3IgKHZhciBjbWQgaW4gZm9ybWF0SGFzaCkge1xuXHRcdFx0aWYgKGZvcm1hdEhhc2guaGFzT3duUHJvcGVydHkoY21kKSkge1xuXHRcdFx0XHR2YXIgdmFsdWUgPSAnJytmb3JtYXRIYXNoW2NtZF07XG5cdFx0XHRcdHZhciB0b2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUodmFsdWUsIDAsIHZhbHVlLmxlbmd0aCk7XG5cdFx0XHRcdHZhciBzY3JhdGNoO1xuXHRcdFx0XHRzd2l0Y2ggKGNtZCkge1xuXHRcdFx0XHRcdGNhc2UgXCJ0aXRsZWZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwiZ2Nob3JkZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJjb21wb3NlcmZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwiZm9vdGVyZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJoZWFkZXJmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcImhpc3Rvcnlmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcImluZm9mb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcIm1lYXN1cmVmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcInBhcnRzZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJyZXBlYXRmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcInN1YnRpdGxlZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJ0ZW1wb2ZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwidGV4dGZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwidm9pY2Vmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcInRyaXBsZXRmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcInZvY2FsZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJ3b3Jkc2ZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwiYW5ub3RhdGlvbmZvbnRcIjpcblx0XHRcdFx0XHRcdGdldENoYW5naW5nRm9udChjbWQsIHRva2VucywgdmFsdWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInNjYWxlXCI6XG5cdFx0XHRcdFx0XHRzZXRTY2FsZShjbWQsIHRva2Vucyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwicGFydHNib3hcIjpcblx0XHRcdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXJCb29sKCdwYXJ0c0JveCcsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0XHRcdGlmIChzY3JhdGNoICE9PSBudWxsKSB3YXJuKHNjcmF0Y2gpO1xuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5wYXJ0c2ZvbnQuYm94ID0gbXVsdGlsaW5lVmFycy5wYXJ0c0JveDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJmcmVlZ2Nob3JkXCI6XG5cdFx0XHRcdFx0XHRzY3JhdGNoID0gYWRkTXVsdGlsaW5lVmFyQm9vbCgnZnJlZWdjaG9yZCcsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0XHRcdGlmIChzY3JhdGNoICE9PSBudWxsKSB3YXJuKHNjcmF0Y2gpO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR3YXJuKFwiRm9ybWF0dGluZyBkaXJlY3RpdmUgdW5yZWNvZ25pemVkOiBcIiwgY21kLCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VEaXJlY3RpdmU7XG4iLCIvLyAgICBhYmNfdHJhbnNwb3NlLmpzOiBIYW5kbGVzIHRoZSBhdXRvbWF0aWMgdHJhbnNwb3NpdGlvbiBvZiBrZXkgc2lnbmF0dXJlcywgY2hvcmQgc3ltYm9scywgYW5kIG5vdGVzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggUGF1bCBSb3NlbiAocGF1bCBhdCBwYXVscm9zZW4gZG90IG5ldClcbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHRyYW5zcG9zZSA9IHt9O1xuXG52YXIga2V5SW5kZXggPSB7XG5cdCdDJzogMCxcblx0J0MjJzogMSxcblx0J0RiJzogMSxcblx0J0QnOiAyLFxuXHQnRCMnOiAzLFxuXHQnRWInOiAzLFxuXHQnRSc6IDQsXG5cdCdGJzogNSxcblx0J0YjJzogNixcblx0J0diJzogNixcblx0J0cnOiA3LFxuXHQnRyMnOiA4LFxuXHQnQWInOiA4LFxuXHQnQSc6IDksXG5cdCdBIyc6IDEwLFxuXHQnQmInOiAxMCxcblx0J0InOiAxMVxufTtcbnZhciBuZXdLZXkgPSBbJ0MnLCAnRGInLCAnRCcsICdFYicsICdFJywgJ0YnLCAnRiMnLCAnRycsICdBYicsICdBJywgJ0JiJywgJ0InXTtcbnZhciBuZXdLZXlNaW5vciA9IFsnQycsICdDIycsICdEJywgJ0QjJywgJ0UnLCAnRicsICdGIycsICdHJywgJ0cjJywgJ0EnLCAnQmInLCAnQiddO1xuXG50cmFuc3Bvc2Uua2V5U2lnbmF0dXJlID0gZnVuY3Rpb24obXVsdGlsaW5lVmFycywga2V5cywga2V5TmFtZSwgcm9vdCwgYWNjLCBsb2NhbFRyYW5zcG9zZSkge1xuXHRpZiAoIWxvY2FsVHJhbnNwb3NlKSBsb2NhbFRyYW5zcG9zZSA9IDA7XG5cdG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2VWZXJ0aWNhbE1vdmVtZW50ID0gMDtcblx0bXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZVByZWZlckZsYXRzID0gZmFsc2U7XG5cdHZhciBrID0ga2V5c1trZXlOYW1lXTtcblx0aWYgKCFrKSByZXR1cm4gbXVsdGlsaW5lVmFycy5rZXk7IC8vIElmIHRoZSBrZXkgaXNuJ3QgaW4gdGhlIGxpc3QsIGl0IGlzIG5vbi1zdGFuZGFyZC4gV2Ugd29uJ3QgYXR0ZW1wdCB0byB0cmFuc3Bvc2UgaXQuXG5cdG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2UgPSAobXVsdGlsaW5lVmFycy5nbG9iYWxUcmFuc3Bvc2UgPyBtdWx0aWxpbmVWYXJzLmdsb2JhbFRyYW5zcG9zZSA6IDApICsgbG9jYWxUcmFuc3Bvc2U7XG5cblx0aWYgKCFtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlKVxuXHRcdHJldHVybiB7IGFjY2lkZW50YWxzOiBrLCByb290OiByb290LCBhY2M6IGFjYyB9O1xuXHRtdWx0aWxpbmVWYXJzLmdsb2JhbFRyYW5zcG9zZU9yaWdLZXlTaWcgPSBrO1xuXHRpZiAobXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZSAlIDEyID09PSAwKSB7XG5cdFx0bXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZVZlcnRpY2FsTW92ZW1lbnQgPSAobXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZSAvIDEyKSAqIDc7XG5cdFx0cmV0dXJuIHsgYWNjaWRlbnRhbHM6IGssIHJvb3Q6IHJvb3QsIGFjYzogYWNjIH07XG5cdH1cblxuXHR2YXIgYmFzZUtleSA9IGtleU5hbWVbMF07XG5cdGlmIChrZXlOYW1lWzFdID09PSAnYicgfHwga2V5TmFtZVsxXSA9PT0gJyMnKSB7XG5cdFx0YmFzZUtleSArPSBrZXlOYW1lWzFdO1xuXHRcdGtleU5hbWUgPSBrZXlOYW1lLnN1YnN0cigyKTtcblx0fSBlbHNlXG5cdFx0a2V5TmFtZSA9IGtleU5hbWUuc3Vic3RyKDEpO1xuXHR2YXIgaW5kZXggPSBrZXlJbmRleFtiYXNlS2V5XSArIG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2U7XG5cdHdoaWxlIChpbmRleCA8IDApIGluZGV4ICs9IDEyO1xuXHRpZiAoaW5kZXggPiAxMSkgaW5kZXggPSBpbmRleCAlIDEyO1xuXHR2YXIgbmV3S2V5TmFtZSA9IChrZXlOYW1lWzBdID09PSAnbScgPyBuZXdLZXlNaW5vcltpbmRleF0gOiBuZXdLZXlbaW5kZXhdKTtcblx0dmFyIHRyYW5zcG9zZWRLZXkgPSBuZXdLZXlOYW1lICsga2V5TmFtZTtcblx0dmFyIG5ld0tleVNpZyA9IGtleXNbdHJhbnNwb3NlZEtleV07XG5cdGlmIChuZXdLZXlTaWcubGVuZ3RoID4gMCAmJiBuZXdLZXlTaWdbMF0uYWNjID09PSAnZmxhdCcpXG5cdFx0bXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZVByZWZlckZsYXRzID0gdHJ1ZTtcblx0dmFyIGRpc3RhbmNlID0gdHJhbnNwb3NlZEtleS5jaGFyQ29kZUF0KDApIC0gYmFzZUtleS5jaGFyQ29kZUF0KDApO1xuXHRpZiAobXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZSA+IDApIHtcblx0XHRpZiAoZGlzdGFuY2UgPCAwKVxuXHRcdFx0ZGlzdGFuY2UgKz0gNztcblx0XHRlbHNlIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuXHRcdFx0Ly8gVGhlcmUncyBhIGZ1bm55IHRoaW5nIHRoYXQgaGFwcGVucyB3aGVuIHRoZSBrZXkgY2hhbmdlcyBvbmx5IGFuIGFjY2lkZW50YWwncyBkaXN0YW5jZSwgZm9yIGluc3RhbmNlLCBmcm9tIEFiIHRvIEEuXG5cdFx0XHQvLyBJZiB0aGUgZGlzdGFuY2UgaXMgcG9zaXRpdmUgKHdlIGFyZSByYWlzaW5nIHBpdGNoKSwgYW5kIHRoZSBjaGFuZ2UgaXMgaGlnaGVyICh0aGF0IGlzLCBBYiAtPiBBKSwgdGhlbiByYWlzZSBhbiBvY3RhdmUuXG5cdFx0XHQvLyBUaGlzIHRlc3QgaXMgZWFzaWVyIGJlY2F1c2Ugd2Uga25vdyB0aGUga2V5cyBhcmUgbm90IGVxdWFsIChvciB3ZSB3b3VsZG4ndCBnZXQgdGhpcyBmYXIpLCBzbyBpZiB0aGUgYmFzZSBrZXkgaXMgYSBmbGF0IGtleSwgdGhlblxuXHRcdFx0Ly8gdGhlIHRyYW5zcG9zZWQga2V5IG11c3QgYmUgaGlnaGVyLiBMaWtld2lzZSwgaWYgdGhlIHRyYW5zcG9zZWQga2V5IGlzIHNoYXJwLCB0aGVuIHRoZSBiYXNlIGtleSBtdXN0IGJlIGxvd2VyLiBBbmQgb25lXG5cdFx0XHQvLyBvZiB0aG9zZSB0d28gdGhpbmdzIG11c3QgYmUgdHJ1ZSBiZWNhdXNlIHRoZXkgYXJlIG5vdCBib3RoIG5hdHVyYWwuXG5cdFx0XHRpZiAoYmFzZUtleVsxXSA9PT0gJyMnIHx8ICB0cmFuc3Bvc2VkS2V5WzFdID09PSAnYicpXG5cdFx0XHRcdGRpc3RhbmNlICs9IDc7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2UgPCAwKSB7XG5cdFx0aWYgKGRpc3RhbmNlID4gMClcblx0XHRcdGRpc3RhbmNlIC09IDc7XG5cdFx0ZWxzZSBpZiAoZGlzdGFuY2UgPT09IDApIHtcblx0XHRcdC8vIFRoZXJlJ3MgYSBmdW5ueSB0aGluZyB0aGF0IGhhcHBlbnMgd2hlbiB0aGUga2V5IGNoYW5nZXMgb25seSBhbiBhY2NpZGVudGFsJ3MgZGlzdGFuY2UsIGZvciBpbnN0YW5jZSwgZnJvbSBBYiB0byBBLlxuXHRcdFx0Ly8gSWYgdGhlIGRpc3RhbmNlIGlzIG5lZ2F0aXZlICh3ZSBhcmUgZHJvcHBpbmcgcGl0Y2gpLCBhbmQgdGhlIGNoYW5nZSBpcyBsb3dlciAodGhhdCBpcywgQSAtPiBBYiksIHRoZW4gZHJvcCBhbiBvY3RhdmUuXG5cdFx0XHRpZiAoYmFzZUtleVsxXSA9PT0gJ2InIHx8ICB0cmFuc3Bvc2VkS2V5WzFdID09PSAnIycpXG5cdFx0XHRcdGRpc3RhbmNlIC09IDc7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2UgPiAwKVxuXHRcdG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2VWZXJ0aWNhbE1vdmVtZW50ID0gZGlzdGFuY2UgKyBNYXRoLmZsb29yKG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2UgLyAxMikgKiA3O1xuXHRlbHNlXG5cdFx0bXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZVZlcnRpY2FsTW92ZW1lbnQgPSBkaXN0YW5jZSArIE1hdGguY2VpbChtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlIC8gMTIpICogNztcblx0cmV0dXJuIHsgYWNjaWRlbnRhbHM6IG5ld0tleVNpZywgcm9vdDogbmV3S2V5TmFtZVswXSwgYWNjOiBuZXdLZXlOYW1lLmxlbmd0aCA+IDEgPyBuZXdLZXlOYW1lWzFdIDogXCJcIiB9O1xufTtcblxudmFyIHNoYXJwQ2hvcmRzID0gWyAnQycsICdD4pmvJywgJ0QnLCBcIkTima9cIiwgJ0UnLCAnRicsIFwiRuKZr1wiLCAnRycsICdH4pmvJywgJ0EnLCAnQeKZrycsICdCJ107XG52YXIgZmxhdENob3JkcyA9IFsgJ0MnLCAnROKZrScsICdEJywgJ0Xima0nLCAnRScsICdGJywgJ0fima0nLCAnRycsICdB4pmtJywgJ0EnLCAnQuKZrScsICdCJ107XG52YXIgc2hhcnBDaG9yZHNGcmVlID0gWyAnQycsICdDIycsICdEJywgXCJEI1wiLCAnRScsICdGJywgXCJGI1wiLCAnRycsICdHIycsICdBJywgJ0EjJywgJ0InXTtcbnZhciBmbGF0Q2hvcmRzRnJlZSA9IFsgJ0MnLCAnRGInLCAnRCcsICdFYicsICdFJywgJ0YnLCAnR2InLCAnRycsICdBYicsICdBJywgJ0JiJywgJ0InXTtcblxudHJhbnNwb3NlLmNob3JkTmFtZSA9IGZ1bmN0aW9uKG11bHRpbGluZVZhcnMsIGNob3JkKSB7XG5cdGlmIChtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlICYmIChtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlICUgMTIgIT09IDApKSB7IC8vIFRoZSBjaG9yZHMgYXJlIHRoZSBzYW1lIGlmIGl0IGlzIGFuIGV4YWN0IG9jdGF2ZSBjaGFuZ2UuXG5cdFx0dmFyIHRyYW5zcG9zZUZhY3RvciA9IG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2U7XG5cdFx0d2hpbGUgKHRyYW5zcG9zZUZhY3RvciA8IDApIHRyYW5zcG9zZUZhY3RvciArPSAxMjtcblx0XHRpZiAodHJhbnNwb3NlRmFjdG9yID4gMTEpIHRyYW5zcG9zZUZhY3RvciA9IHRyYW5zcG9zZUZhY3RvciAlIDEyO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmZyZWVnY2hvcmQpIHtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvQ2IvZywgXCJgfjExYFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRGIvZywgXCJgfjFgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9FYi9nLCBcImB+M2BcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0ZiL2csIFwiYH40YFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvR2IvZywgXCJgfjZgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9BYi9nLCBcImB+OGBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0JiL2csIFwiYH4xMGBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0MjL2csIFwiYH4xYFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRCMvZywgXCJgfjNgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9FIy9nLCBcImB+NWBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0YjL2csIFwiYH42YFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRyMvZywgXCJgfjhgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9BIy9nLCBcImB+MTBgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9CIy9nLCBcImB+MGBcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvQ+KZrS9nLCBcImB+MTFgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9E4pmtL2csIFwiYH4xYFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvReKZrS9nLCBcImB+M2BcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0bima0vZywgXCJgfjRgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9H4pmtL2csIFwiYH42YFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvQeKZrS9nLCBcImB+OGBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0Lima0vZywgXCJgfjEwYFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvQ+KZry9nLCBcImB+MWBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0Tima8vZywgXCJgfjNgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9F4pmvL2csIFwiYH41YFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRuKZry9nLCBcImB+NmBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0fima8vZywgXCJgfjhgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9B4pmvL2csIFwiYH4xMGBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0Lima8vZywgXCJgfjBgXCIpO1xuXHRcdH1cblx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0MvZywgXCJgfjBgXCIpO1xuXHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRC9nLCBcImB+MmBcIik7XG5cdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9FL2csIFwiYH40YFwiKTtcblx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0YvZywgXCJgfjVgXCIpO1xuXHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRy9nLCBcImB+N2BcIik7XG5cdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9BL2csIFwiYH45YFwiKTtcblx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0IvZywgXCJgfjExYFwiKTtcblx0XHR2YXIgYXJyID0gY2hvcmQuc3BsaXQoXCJgXCIpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoYXJyW2ldWzBdID09PSAnficpIHtcblx0XHRcdFx0dmFyIGNob3JkTnVtID0gcGFyc2VJbnQoYXJyW2ldLnN1YnN0cigxKSwxMCk7XG5cdFx0XHRcdGNob3JkTnVtICs9IHRyYW5zcG9zZUZhY3Rvcjtcblx0XHRcdFx0aWYgKGNob3JkTnVtID4gMTEpIGNob3JkTnVtIC09IDEyO1xuXHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5mcmVlZ2Nob3JkKVxuXHRcdFx0XHRcdGFycltpXSA9IG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2VQcmVmZXJGbGF0cyA/IGZsYXRDaG9yZHNGcmVlW2Nob3JkTnVtXSA6IHNoYXJwQ2hvcmRzRnJlZVtjaG9yZE51bV07XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRhcnJbaV0gPSBtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlUHJlZmVyRmxhdHMgPyBmbGF0Q2hvcmRzW2Nob3JkTnVtXSA6IHNoYXJwQ2hvcmRzW2Nob3JkTnVtXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y2hvcmQgPSBhcnIuam9pbihcIlwiKTtcblx0fVxuXHRyZXR1cm4gY2hvcmQ7XG59O1xuXG52YXIgcGl0Y2hUb0xldHRlciA9IFsgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdhJywgJ2InIF07XG5mdW5jdGlvbiBhY2NpZGVudGFsQ2hhbmdlKG9yaWdQaXRjaCwgbmV3UGl0Y2gsIGFjY2lkZW50YWwsIG9yaWdLZXlTaWcsIG5ld0tleVNpZykge1xuXHR2YXIgb3JpZ1BpdGNoTGV0dGVyID0gcGl0Y2hUb0xldHRlclsob3JpZ1BpdGNoICsgNDkpICUgN107IC8vIE1ha2Ugc3VyZSBpdCBpcyBhIHBvc2l0aXZlIHBpdGNoIGJlZm9yZSBub3JtYWxpemluZy5cblx0dmFyIG9yaWdBY2NpZGVudGFsID0gMDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcmlnS2V5U2lnLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKG9yaWdLZXlTaWdbaV0ubm90ZS50b0xvd2VyQ2FzZSgpID09PSBvcmlnUGl0Y2hMZXR0ZXIpXG5cdFx0XHRvcmlnQWNjaWRlbnRhbCA9IGFjY2lkZW50YWxzW29yaWdLZXlTaWdbaV0uYWNjXTtcblx0fVxuXG5cdHZhciBjdXJyZW50QWNjaWRlbnRhbCA9IGFjY2lkZW50YWxzW2FjY2lkZW50YWxdO1xuXHR2YXIgZGVsdGEgPSBjdXJyZW50QWNjaWRlbnRhbCAtIG9yaWdBY2NpZGVudGFsO1xuXG5cdHZhciBuZXdQaXRjaExldHRlciA9IHBpdGNoVG9MZXR0ZXJbKG5ld1BpdGNoICsgNDkpICUgN107IC8vIE1ha2Ugc3VyZSBpdCBpcyBhIHBvc2l0aXZlIHBpdGNoIGJlZm9yZSBub3JtYWxpemluZy5cblx0dmFyIG5ld0FjY2lkZW50YWwgPSAwO1xuXHRmb3IgKHZhciBqID0gMDsgaiA8IG5ld0tleVNpZy5hY2NpZGVudGFscy5sZW5ndGg7IGorKykge1xuXHRcdGlmIChuZXdLZXlTaWcuYWNjaWRlbnRhbHNbal0ubm90ZS50b0xvd2VyQ2FzZSgpID09PSBuZXdQaXRjaExldHRlcilcblx0XHRcdG5ld0FjY2lkZW50YWwgPSBhY2NpZGVudGFsc1tuZXdLZXlTaWcuYWNjaWRlbnRhbHNbal0uYWNjXTtcblx0fVxuXHR2YXIgY2FsY0FjY2lkZW50YWwgPSBkZWx0YSArIG5ld0FjY2lkZW50YWw7XG5cdGlmIChjYWxjQWNjaWRlbnRhbCA8IC0yKSB7XG5cdFx0bmV3UGl0Y2gtLTtcblx0XHRjYWxjQWNjaWRlbnRhbCArPSAobmV3UGl0Y2hMZXR0ZXIgPT09ICdjJyB8fCBuZXdQaXRjaExldHRlciA9PT0gJ2YnKSA/IDEgOiAyO1xuXHR9XG5cdGlmIChjYWxjQWNjaWRlbnRhbCA+IDIpIHtcblx0XHRuZXdQaXRjaCsrO1xuXHRcdGNhbGNBY2NpZGVudGFsIC09IChuZXdQaXRjaExldHRlciA9PT0gJ2InIHx8IG5ld1BpdGNoTGV0dGVyID09PSAnZScpID8gMSA6IDI7XG5cdH1cblx0cmV0dXJuIFtuZXdQaXRjaCwgY2FsY0FjY2lkZW50YWxdO1xufVxuXG52YXIgYWNjaWRlbnRhbHMgPSB7XG5cdGRibGZsYXQ6IC0yLFxuXHRmbGF0OiAtMSxcblx0bmF0dXJhbDogMCxcblx0c2hhcnA6IDEsXG5cdGRibHNoYXJwOiAyXG59O1xudmFyIGFjY2lkZW50YWxzMiA9IHtcblx0XCItMlwiOiBcImRibGZsYXRcIixcblx0XCItMVwiOiBcImZsYXRcIixcblx0XCIwXCI6IFwibmF0dXJhbFwiLFxuXHRcIjFcIjogXCJzaGFycFwiLFxuXHRcIjJcIjogXCJkYmxzaGFycFwiXG59O1xudHJhbnNwb3NlLm5vdGUgPSBmdW5jdGlvbihtdWx0aWxpbmVWYXJzLCBlbCkge1xuXHQvLyB0aGUgXCJlbFwiIHRoYXQgaXMgcGFzc2VkIGluIGhhcyBlbC5hY2NpZGVudGFsLCBhbmQgZWwucGl0Y2guIFwicGl0Y2hcIiBpcyB0aGUgdmVydGljYWwgcG9zaXRpb24gKDA9bWlkZGxlIEMpXG5cdC8vIGxvY2FsVHJhbnNwb3NlIGlzIHRoZSBudW1iZXIgb2YgaGFsZiBzdGVwc1xuXHQvLyBsb2NhbFRyYW5zcG9zZVZlcnRpY2FsTW92ZW1lbnQgaXMgdGhlIHZlcnRpY2FsIGRpc3RhbmNlIHRvIG1vdmUuXG5cdGlmICghbXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZSlcblx0XHRyZXR1cm47XG5cdHZhciBvcmlnUGl0Y2ggPSBlbC5waXRjaDtcblx0ZWwucGl0Y2ggPSBlbC5waXRjaCArIG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2VWZXJ0aWNhbE1vdmVtZW50O1xuXG5cdGlmIChlbC5hY2NpZGVudGFsKSB7XG5cdFx0dmFyIHJldCA9IGFjY2lkZW50YWxDaGFuZ2Uob3JpZ1BpdGNoLCBlbC5waXRjaCwgZWwuYWNjaWRlbnRhbCwgbXVsdGlsaW5lVmFycy5nbG9iYWxUcmFuc3Bvc2VPcmlnS2V5U2lnLCBtdWx0aWxpbmVWYXJzLnRhcmdldEtleSk7XG5cdFx0ZWwucGl0Y2ggPSByZXRbMF07XG5cdFx0ZWwuYWNjaWRlbnRhbCA9IGFjY2lkZW50YWxzMltyZXRbMV1dO1xuXHR9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gdHJhbnNwb3NlO1xuIiwiLypnbG9iYWwgd2luZG93ICovXG5cbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4vYWJjX2NvbW1vbicpO1xudmFyIHBhcnNlRGlyZWN0aXZlID0gcmVxdWlyZSgnLi9hYmNfcGFyc2VfZGlyZWN0aXZlJyk7XG52YXIgdHJhbnNwb3NlID0gcmVxdWlyZSgnLi9hYmNfdHJhbnNwb3NlJyk7XG5cbnZhciBwYXJzZUtleVZvaWNlID0ge307XG5cbihmdW5jdGlvbigpIHtcblx0dmFyIHRva2VuaXplcjtcblx0dmFyIHdhcm47XG5cdHZhciBtdWx0aWxpbmVWYXJzO1xuXHR2YXIgdHVuZTtcblx0cGFyc2VLZXlWb2ljZS5pbml0aWFsaXplID0gZnVuY3Rpb24odG9rZW5pemVyXywgd2Fybl8sIG11bHRpbGluZVZhcnNfLCB0dW5lXykge1xuXHRcdHRva2VuaXplciA9IHRva2VuaXplcl87XG5cdFx0d2FybiA9IHdhcm5fO1xuXHRcdG11bHRpbGluZVZhcnMgPSBtdWx0aWxpbmVWYXJzXztcblx0XHR0dW5lID0gdHVuZV87XG5cdH07XG5cblx0cGFyc2VLZXlWb2ljZS5zdGFuZGFyZEtleSA9IGZ1bmN0aW9uKGtleU5hbWUsIHJvb3QsIGFjYywgbG9jYWxUcmFuc3Bvc2UpIHtcblx0XHR2YXIga2V5MXNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2YnfTtcblx0XHR2YXIga2V5MnNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2MnfTtcblx0XHR2YXIga2V5M3NoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2cnfTtcblx0XHR2YXIga2V5NHNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2QnfTtcblx0XHR2YXIga2V5NXNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ0EnfTtcblx0XHR2YXIga2V5NnNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2UnfTtcblx0XHR2YXIga2V5N3NoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ0InfTtcblx0XHR2YXIga2V5MWZsYXQgPSB7YWNjOiAnZmxhdCcsIG5vdGU6ICdCJ307XG5cdFx0dmFyIGtleTJmbGF0ID0ge2FjYzogJ2ZsYXQnLCBub3RlOiAnZSd9O1xuXHRcdHZhciBrZXkzZmxhdCA9IHthY2M6ICdmbGF0Jywgbm90ZTogJ0EnfTtcblx0XHR2YXIga2V5NGZsYXQgPSB7YWNjOiAnZmxhdCcsIG5vdGU6ICdkJ307XG5cdFx0dmFyIGtleTVmbGF0ID0ge2FjYzogJ2ZsYXQnLCBub3RlOiAnRyd9O1xuXHRcdHZhciBrZXk2ZmxhdCA9IHthY2M6ICdmbGF0Jywgbm90ZTogJ2MnfTtcblx0XHR2YXIga2V5N2ZsYXQgPSB7YWNjOiAnZmxhdCcsIG5vdGU6ICdGJ307XG5cblx0XHR2YXIga2V5cyA9IHtcblx0XHRcdCdDIyc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwLCBrZXk1c2hhcnAsIGtleTZzaGFycCwga2V5N3NoYXJwIF0sXG5cdFx0XHQnQSNtJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCwga2V5NnNoYXJwLCBrZXk3c2hhcnAgXSxcblx0XHRcdCdHI01peCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwLCBrZXk1c2hhcnAsIGtleTZzaGFycCwga2V5N3NoYXJwIF0sXG5cdFx0XHQnRCNEb3InOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAsIGtleTdzaGFycCBdLFxuXHRcdFx0J0UjUGhyJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCwga2V5NnNoYXJwLCBrZXk3c2hhcnAgXSxcblx0XHRcdCdGI0x5ZCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwLCBrZXk1c2hhcnAsIGtleTZzaGFycCwga2V5N3NoYXJwIF0sXG5cdFx0XHQnQiNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAsIGtleTdzaGFycCBdLFxuXG5cdFx0XHQnRiMnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAgXSxcblx0XHRcdCdEI20nOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAgXSxcblx0XHRcdCdDI01peCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwLCBrZXk1c2hhcnAsIGtleTZzaGFycCBdLFxuXHRcdFx0J0cjRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCwga2V5NnNoYXJwIF0sXG5cdFx0XHQnQSNQaHInOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAgXSxcblx0XHRcdCdCTHlkJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCwga2V5NnNoYXJwIF0sXG5cdFx0XHQnRSNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAgXSxcblxuXHRcdFx0J0InOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwIF0sXG5cdFx0XHQnRyNtJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCBdLFxuXHRcdFx0J0YjTWl4JzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCBdLFxuXHRcdFx0J0MjRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCBdLFxuXHRcdFx0J0QjUGhyJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCBdLFxuXHRcdFx0J0VMeWQnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwIF0sXG5cdFx0XHQnQSNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwIF0sXG5cblx0XHRcdCdFJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAgXSxcblx0XHRcdCdDI20nOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCBdLFxuXHRcdFx0J0JNaXgnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCBdLFxuXHRcdFx0J0YjRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAgXSxcblx0XHRcdCdHI1Bocic6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwIF0sXG5cdFx0XHQnQUx5ZCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwIF0sXG5cdFx0XHQnRCNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCBdLFxuXG5cdFx0XHQnQSc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCBdLFxuXHRcdFx0J0YjbSc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCBdLFxuXHRcdFx0J0VNaXgnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAgXSxcblx0XHRcdCdCRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwIF0sXG5cdFx0XHQnQyNQaHInOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAgXSxcblx0XHRcdCdETHlkJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwIF0sXG5cdFx0XHQnRyNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAgXSxcblxuXHRcdFx0J0QnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwIF0sXG5cdFx0XHQnQm0nOiBbIGtleTFzaGFycCwga2V5MnNoYXJwIF0sXG5cdFx0XHQnQU1peCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAgXSxcblx0XHRcdCdFRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCBdLFxuXHRcdFx0J0YjUGhyJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCBdLFxuXHRcdFx0J0dMeWQnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwIF0sXG5cdFx0XHQnQyNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwIF0sXG5cblx0XHRcdCdHJzogWyBrZXkxc2hhcnAgXSxcblx0XHRcdCdFbSc6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnRE1peCc6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnQURvcic6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnQlBocic6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnQ0x5ZCc6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnRiNMb2MnOiBbIGtleTFzaGFycCBdLFxuXG5cdFx0XHQnQyc6IFtdLFxuXHRcdFx0J0FtJzogW10sXG5cdFx0XHQnR01peCc6IFtdLFxuXHRcdFx0J0REb3InOiBbXSxcblx0XHRcdCdFUGhyJzogW10sXG5cdFx0XHQnRkx5ZCc6IFtdLFxuXHRcdFx0J0JMb2MnOiBbXSxcblxuXHRcdFx0J0YnOiBbIGtleTFmbGF0IF0sXG5cdFx0XHQnRG0nOiBbIGtleTFmbGF0IF0sXG5cdFx0XHQnQ01peCc6IFsga2V5MWZsYXQgXSxcblx0XHRcdCdHRG9yJzogWyBrZXkxZmxhdCBdLFxuXHRcdFx0J0FQaHInOiBbIGtleTFmbGF0IF0sXG5cdFx0XHQnQmJMeWQnOiBbIGtleTFmbGF0IF0sXG5cdFx0XHQnRUxvYyc6IFsga2V5MWZsYXQgXSxcblxuXHRcdFx0J0JiJzogWyBrZXkxZmxhdCwga2V5MmZsYXQgXSxcblx0XHRcdCdHbSc6IFsga2V5MWZsYXQsIGtleTJmbGF0IF0sXG5cdFx0XHQnRk1peCc6IFsga2V5MWZsYXQsIGtleTJmbGF0IF0sXG5cdFx0XHQnQ0Rvcic6IFsga2V5MWZsYXQsIGtleTJmbGF0IF0sXG5cdFx0XHQnRFBocic6IFsga2V5MWZsYXQsIGtleTJmbGF0IF0sXG5cdFx0XHQnRWJMeWQnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCBdLFxuXHRcdFx0J0FMb2MnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCBdLFxuXG5cdFx0XHQnRWInOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQgXSxcblx0XHRcdCdDbSc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCBdLFxuXHRcdFx0J0JiTWl4JzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0IF0sXG5cdFx0XHQnRkRvcic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCBdLFxuXHRcdFx0J0dQaHInOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQgXSxcblx0XHRcdCdBYkx5ZCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCBdLFxuXHRcdFx0J0RMb2MnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQgXSxcblxuXHRcdFx0J0FiJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCBdLFxuXHRcdFx0J0ZtJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCBdLFxuXHRcdFx0J0ViTWl4JzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCBdLFxuXHRcdFx0J0JiRG9yJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCBdLFxuXHRcdFx0J0NQaHInOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0IF0sXG5cdFx0XHQnRGJMeWQnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0IF0sXG5cdFx0XHQnR0xvYyc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQgXSxcblxuXHRcdFx0J0RiJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCwga2V5NWZsYXQgXSxcblx0XHRcdCdCYm0nOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCBdLFxuXHRcdFx0J0FiTWl4JzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCwga2V5NWZsYXQgXSxcblx0XHRcdCdFYkRvcic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0IF0sXG5cdFx0XHQnRlBocic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0IF0sXG5cdFx0XHQnR2JMeWQnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCBdLFxuXHRcdFx0J0NMb2MnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCBdLFxuXG5cdFx0XHQnR2InOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCwga2V5NmZsYXQgXSxcblx0XHRcdCdFYm0nOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCwga2V5NmZsYXQgXSxcblx0XHRcdCdEYk1peCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCBdLFxuXHRcdFx0J0FiRG9yJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCwga2V5NWZsYXQsIGtleTZmbGF0IF0sXG5cdFx0XHQnQmJQaHInOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCwga2V5NmZsYXQgXSxcblx0XHRcdCdDYkx5ZCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCBdLFxuXHRcdFx0J0ZMb2MnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCwga2V5NmZsYXQgXSxcblxuXHRcdFx0J0NiJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCwga2V5NWZsYXQsIGtleTZmbGF0LCBrZXk3ZmxhdCBdLFxuXHRcdFx0J0FibSc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdHYk1peCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdEYkRvcic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdFYlBocic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdGYkx5ZCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdCYkxvYyc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblxuXHRcdFx0Ly8gVGhlIGZvbGxvd2luZyBhcmUgbm90IGluIHRoZSAyLjAgc3BlYywgYnV0IHNlZW0gbm9ybWFsIGVub3VnaC5cblx0XHRcdC8vIFRPRE8tUEVSOiBUaGVzZSBTT1VORCB0aGUgc2FtZSBhcyB3aGF0J3Mgd3JpdHRlbiwgYnV0IHRoZXkgYXJlbid0IHJpZ2h0XG5cdFx0XHQnQSMnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCBdLFxuXHRcdFx0J0IjJzogW10sXG5cdFx0XHQnRCMnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQgXSxcblx0XHRcdCdFIyc6IFsga2V5MWZsYXQgXSxcblx0XHRcdCdHIyc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQgXSxcblx0XHRcdCdHYm0nOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAsIGtleTdzaGFycCBdXG5cdFx0fTtcblxuXHRcdHJldHVybiB0cmFuc3Bvc2Uua2V5U2lnbmF0dXJlKG11bHRpbGluZVZhcnMsIGtleXMsIGtleU5hbWUsIHJvb3QsIGFjYywgbG9jYWxUcmFuc3Bvc2UpO1xuXHR9O1xuXG5cdHZhciBjbGVmTGluZXMgPSB7XG5cdFx0J3RyZWJsZSc6IHsgY2xlZjogJ3RyZWJsZScsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlKzgnOiB7IGNsZWY6ICd0cmVibGUrOCcsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlLTgnOiB7IGNsZWY6ICd0cmVibGUtOCcsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlXjgnOiB7IGNsZWY6ICd0cmVibGUrOCcsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlXzgnOiB7IGNsZWY6ICd0cmVibGUtOCcsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlMSc6IHsgY2xlZjogJ3RyZWJsZScsIHBpdGNoOiAyLCBtaWQ6IDIgfSxcblx0XHQndHJlYmxlMic6IHsgY2xlZjogJ3RyZWJsZScsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlMyc6IHsgY2xlZjogJ3RyZWJsZScsIHBpdGNoOiA2LCBtaWQ6IC0yIH0sXG5cdFx0J3RyZWJsZTQnOiB7IGNsZWY6ICd0cmVibGUnLCBwaXRjaDogOCwgbWlkOiAtNCB9LFxuXHRcdCd0cmVibGU1JzogeyBjbGVmOiAndHJlYmxlJywgcGl0Y2g6IDEwLCBtaWQ6IC02IH0sXG5cdFx0J3BlcmMnOiB7IGNsZWY6ICdwZXJjJywgcGl0Y2g6IDYsIG1pZDogMCB9LFxuXHRcdCdub25lJzogeyBjbGVmOiAnbm9uZScsIG1pZDogMCB9LFxuXHRcdCdiYXNzJzogeyBjbGVmOiAnYmFzcycsIHBpdGNoOiA4LCBtaWQ6IC0xMiB9LFxuXHRcdCdiYXNzKzgnOiB7IGNsZWY6ICdiYXNzKzgnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzcy04JzogeyBjbGVmOiAnYmFzcy04JywgcGl0Y2g6IDgsIG1pZDogLTEyIH0sXG5cdFx0J2Jhc3NeOCc6IHsgY2xlZjogJ2Jhc3MrOCcsIHBpdGNoOiA4LCBtaWQ6IC0xMiB9LFxuXHRcdCdiYXNzXzgnOiB7IGNsZWY6ICdiYXNzLTgnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzcysxNic6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzcy0xNic6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzc14xNic6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzc18xNic6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzczEnOiB7IGNsZWY6ICdiYXNzJywgcGl0Y2g6IDIsIG1pZDogLTYgfSxcblx0XHQnYmFzczInOiB7IGNsZWY6ICdiYXNzJywgcGl0Y2g6IDQsIG1pZDogLTggfSxcblx0XHQnYmFzczMnOiB7IGNsZWY6ICdiYXNzJywgcGl0Y2g6IDYsIG1pZDogLTEwIH0sXG5cdFx0J2Jhc3M0JzogeyBjbGVmOiAnYmFzcycsIHBpdGNoOiA4LCBtaWQ6IC0xMiB9LFxuXHRcdCdiYXNzNSc6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogMTAsIG1pZDogLTE0IH0sXG5cdFx0J3Rlbm9yJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA4LCBtaWQ6IC04IH0sXG5cdFx0J3Rlbm9yMSc6IHsgY2xlZjogJ2FsdG8nLCBwaXRjaDogMiwgbWlkOiAtMiB9LFxuXHRcdCd0ZW5vcjInOiB7IGNsZWY6ICdhbHRvJywgcGl0Y2g6IDQsIG1pZDogLTQgfSxcblx0XHQndGVub3IzJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA2LCBtaWQ6IC02IH0sXG5cdFx0J3Rlbm9yNCc6IHsgY2xlZjogJ2FsdG8nLCBwaXRjaDogOCwgbWlkOiAtOCB9LFxuXHRcdCd0ZW5vcjUnOiB7IGNsZWY6ICdhbHRvJywgcGl0Y2g6IDEwLCBtaWQ6IC0xMCB9LFxuXHRcdCdhbHRvJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA2LCBtaWQ6IC02IH0sXG5cdFx0J2FsdG8xJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiAyLCBtaWQ6IC0yIH0sXG5cdFx0J2FsdG8yJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA0LCBtaWQ6IC00IH0sXG5cdFx0J2FsdG8zJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA2LCBtaWQ6IC02IH0sXG5cdFx0J2FsdG80JzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA4LCBtaWQ6IC04IH0sXG5cdFx0J2FsdG81JzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiAxMCwgbWlkOiAtMTAgfSxcblx0XHQnYWx0bys4JzogeyBjbGVmOiAnYWx0bys4JywgcGl0Y2g6IDYsIG1pZDogLTYgfSxcblx0XHQnYWx0by04JzogeyBjbGVmOiAnYWx0by04JywgcGl0Y2g6IDYsIG1pZDogLTYgfSxcblx0XHQnYWx0b144JzogeyBjbGVmOiAnYWx0bys4JywgcGl0Y2g6IDYsIG1pZDogLTYgfSxcblx0XHQnYWx0b184JzogeyBjbGVmOiAnYWx0by04JywgcGl0Y2g6IDYsIG1pZDogLTYgfVxuXHR9O1xuXG5cdHZhciBjYWxjTWlkZGxlID0gZnVuY3Rpb24oY2xlZiwgb2N0KSB7XG5cdFx0dmFyIHZhbHVlID0gY2xlZkxpbmVzW2NsZWZdO1xuXHRcdHZhciBtaWQgPSB2YWx1ZSA/IHZhbHVlLm1pZCA6IDA7XG5cdFx0cmV0dXJuIG1pZCtvY3Q7XG5cdH07XG5cblx0cGFyc2VLZXlWb2ljZS5maXhDbGVmID0gZnVuY3Rpb24oY2xlZikge1xuXHRcdHZhciB2YWx1ZSA9IGNsZWZMaW5lc1tjbGVmLnR5cGVdO1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0Y2xlZi5jbGVmUG9zID0gdmFsdWUucGl0Y2g7XG5cdFx0XHRjbGVmLnR5cGUgPSB2YWx1ZS5jbGVmO1xuXHRcdH1cblx0fTtcblxuXHRwYXJzZUtleVZvaWNlLmRlZXBDb3B5S2V5ID0gZnVuY3Rpb24oa2V5KSB7XG5cdFx0dmFyIHJldCA9IHsgYWNjaWRlbnRhbHM6IFtdLCByb290OiBrZXkucm9vdCwgYWNjOiBrZXkuYWNjLCBtb2RlOiBrZXkubW9kZSB9O1xuXHRcdHBhcnNlQ29tbW9uLmVhY2goa2V5LmFjY2lkZW50YWxzLCBmdW5jdGlvbihrKSB7XG5cdFx0cmV0LmFjY2lkZW50YWxzLnB1c2gocGFyc2VDb21tb24uY2xvbmUoaykpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cblx0dmFyIHBpdGNoZXMgPSB7QTogNSwgQjogNiwgQzogMCwgRDogMSwgRTogMiwgRjogMywgRzogNCwgYTogMTIsIGI6IDEzLCBjOiA3LCBkOiA4LCBlOiA5LCBmOiAxMCwgZzogMTF9O1xuXG5cdHBhcnNlS2V5Vm9pY2UuYWRkUG9zVG9LZXkgPSBmdW5jdGlvbihjbGVmLCBrZXkpIHtcblx0XHQvLyBTaGlmdCB0aGUga2V5IHNpZ25hdHVyZSBmcm9tIHRoZSB0cmVibGUgcG9zaXRpb25zIHRvIHdoYXRldmVyIHBvc2l0aW9uIGlzIG5lZWRlZCBmb3IgdGhlIGNsZWYuXG5cdFx0Ly8gVGhpcyBtYXkgcHV0IHRoZSBrZXkgc2lnbmF0dXJlIHVubmF0dXJhbGx5IGhpZ2ggb3IgbG93LCBzbyBpZiBpdCBkb2VzLCB0aGVuIHNoaWZ0IGl0LlxuXHRcdHZhciBtaWQgPSBjbGVmLnZlcnRpY2FsUG9zO1xuXHRcdHBhcnNlQ29tbW9uLmVhY2goa2V5LmFjY2lkZW50YWxzLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdHZhciBwaXRjaCA9IHBpdGNoZXNbYWNjLm5vdGVdO1xuXHRcdFx0cGl0Y2ggPSBwaXRjaCAtIG1pZDtcblx0XHRcdGFjYy52ZXJ0aWNhbFBvcyA9IHBpdGNoO1xuXHRcdH0pO1xuXHRcdGlmIChrZXkuaW1wbGllZE5hdHVyYWxzKVxuXHRcdFx0cGFyc2VDb21tb24uZWFjaChrZXkuaW1wbGllZE5hdHVyYWxzLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0dmFyIHBpdGNoID0gcGl0Y2hlc1thY2Mubm90ZV07XG5cdFx0XHRcdHBpdGNoID0gcGl0Y2ggLSBtaWQ7XG5cdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyA9IHBpdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAobWlkIDwgLTEwKSB7XG5cdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGtleS5hY2NpZGVudGFscywgZnVuY3Rpb24oYWNjKSB7XG5cdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPSA3O1xuXHRcdFx0XHRpZiAoYWNjLnZlcnRpY2FsUG9zID49IDExIHx8IChhY2MudmVydGljYWxQb3MgPT09IDEwICYmIGFjYy5hY2MgPT09ICdmbGF0JykpXG5cdFx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zIC09IDc7XG5cdFx0XHRcdGlmIChhY2Mubm90ZSA9PT0gJ0EnICYmIGFjYy5hY2MgPT09ICdzaGFycCcgKVxuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPTc7XG5cdFx0XHRcdGlmICgoYWNjLm5vdGUgPT09ICdHJyB8fCBhY2Mubm90ZSA9PT0gJ0YnKSAmJiBhY2MuYWNjID09PSAnZmxhdCcgKVxuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPTc7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChrZXkuaW1wbGllZE5hdHVyYWxzKVxuXHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGtleS5pbXBsaWVkTmF0dXJhbHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPSA3O1xuXHRcdFx0XHRcdGlmIChhY2MudmVydGljYWxQb3MgPj0gMTEgfHwgKGFjYy52ZXJ0aWNhbFBvcyA9PT0gMTAgJiYgYWNjLmFjYyA9PT0gJ2ZsYXQnKSlcblx0XHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPSA3O1xuXHRcdFx0XHRcdGlmIChhY2Mubm90ZSA9PT0gJ0EnICYmIGFjYy5hY2MgPT09ICdzaGFycCcgKVxuXHRcdFx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zIC09Nztcblx0XHRcdFx0XHRpZiAoKGFjYy5ub3RlID09PSAnRycgfHwgYWNjLm5vdGUgPT09ICdGJykgJiYgYWNjLmFjYyA9PT0gJ2ZsYXQnIClcblx0XHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPTc7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAobWlkIDwgLTQpIHtcblx0XHRcdHBhcnNlQ29tbW9uLmVhY2goa2V5LmFjY2lkZW50YWxzLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zIC09IDc7XG5cdFx0XHRcdGlmIChtaWQgPT09IC04ICYmIChhY2Mubm90ZSA9PT0gJ2YnIHx8IGFjYy5ub3RlID09PSAnZycpICYmIGFjYy5hY2MgPT09ICdzaGFycCcgKVxuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPTc7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChrZXkuaW1wbGllZE5hdHVyYWxzKVxuXHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGtleS5pbXBsaWVkTmF0dXJhbHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPSA3O1xuXHRcdFx0XHRcdGlmIChtaWQgPT09IC04ICYmIChhY2Mubm90ZSA9PT0gJ2YnIHx8IGFjYy5ub3RlID09PSAnZycpICYmIGFjYy5hY2MgPT09ICdzaGFycCcgKVxuXHRcdFx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zIC09Nztcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChtaWQgPj0gNykge1xuXHRcdFx0cGFyc2VDb21tb24uZWFjaChrZXkuYWNjaWRlbnRhbHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRhY2MudmVydGljYWxQb3MgKz0gNztcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGtleS5pbXBsaWVkTmF0dXJhbHMpXG5cdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goa2V5LmltcGxpZWROYXR1cmFscywgZnVuY3Rpb24oYWNjKSB7XG5cdFx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zICs9IDc7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblxuXHRwYXJzZUtleVZvaWNlLmZpeEtleSA9IGZ1bmN0aW9uKGNsZWYsIGtleSkge1xuXHRcdHZhciBmaXhlZEtleSA9IHBhcnNlQ29tbW9uLmNsb25lKGtleSk7XG5cdFx0cGFyc2VLZXlWb2ljZS5hZGRQb3NUb0tleShjbGVmLCBmaXhlZEtleSk7XG5cdFx0cmV0dXJuIGZpeGVkS2V5O1xuXHR9O1xuXG5cdHZhciBwYXJzZU1pZGRsZSA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgcCA9IHN0ci5jaGFyQXQoaSsrKTtcblx0XHRpZiAocCA9PT0gJ14nIHx8IHAgPT09ICdfJylcblx0XHRcdHAgPSBzdHIuY2hhckF0KGkrKyk7XG5cdCAgdmFyIG1pZCA9IHBpdGNoZXNbcF07XG5cdFx0aWYgKG1pZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bWlkID0gNjsgLy8gSWYgYSBsZWdhbCBtaWRkbGUgbm90ZSB3YXNuJ3QgcmVjZWl2ZWQsIGp1c3QgaWdub3JlIGl0LlxuXHRcdGZvciAoIDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHN0ci5jaGFyQXQoaSkgPT09ICcsJykgbWlkIC09IDc7XG5cdFx0XHRlbHNlIGlmIChzdHIuY2hhckF0KGkpID09PSBcIidcIikgbWlkICs9IDc7XG5cdFx0XHRlbHNlIGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4geyBtaWQ6IG1pZCAtIDYsIHN0cjogc3RyLnN1YnN0cmluZyhpKSB9O1x0Ly8gV2UgZ2V0IHRoZSBub3RlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN0YWZmLiBXZSB3YW50IHRoZSBub3RlIHRoYXQgYXBwZWFycyBhcyB0aGUgZmlyc3QgbGVkZ2VyIGxpbmUgYmVsb3cgdGhlIHN0YWZmLlxuXHR9O1xuXG5cdHZhciBub3JtYWxpemVBY2NpZGVudGFscyA9IGZ1bmN0aW9uKGFjY3MpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFjY3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChhY2NzW2ldLm5vdGUgPT09ICdiJylcblx0XHRcdFx0YWNjc1tpXS5ub3RlID0gJ0InO1xuXHRcdFx0ZWxzZSBpZiAoYWNjc1tpXS5ub3RlID09PSAnYScpXG5cdFx0XHRcdGFjY3NbaV0ubm90ZSA9ICdBJztcblx0XHRcdGVsc2UgaWYgKGFjY3NbaV0ubm90ZSA9PT0gJ0YnKVxuXHRcdFx0XHRhY2NzW2ldLm5vdGUgPSAnZic7XG5cdFx0XHRlbHNlIGlmIChhY2NzW2ldLm5vdGUgPT09ICdFJylcblx0XHRcdFx0YWNjc1tpXS5ub3RlID0gJ2UnO1xuXHRcdFx0ZWxzZSBpZiAoYWNjc1tpXS5ub3RlID09PSAnRCcpXG5cdFx0XHRcdGFjY3NbaV0ubm90ZSA9ICdkJztcblx0XHRcdGVsc2UgaWYgKGFjY3NbaV0ubm90ZSA9PT0gJ0MnKVxuXHRcdFx0XHRhY2NzW2ldLm5vdGUgPSAnYyc7XG5cdFx0XHRlbHNlIGlmIChhY2NzW2ldLm5vdGUgPT09ICdHJyAmJiBhY2NzW2ldLmFjYyA9PT0gJ3NoYXJwJylcblx0XHRcdFx0YWNjc1tpXS5ub3RlID0gJ2cnO1xuXHRcdFx0ZWxzZSBpZiAoYWNjc1tpXS5ub3RlID09PSAnZycgJiYgYWNjc1tpXS5hY2MgPT09ICdmbGF0Jylcblx0XHRcdFx0YWNjc1tpXS5ub3RlID0gJ0cnO1xuXHRcdH1cblx0fTtcblxuXHRwYXJzZUtleVZvaWNlLnBhcnNlS2V5ID0gZnVuY3Rpb24oc3RyKVx0Ly8gKGFuZCBjbGVmKVxuXHR7XG5cdFx0Ly8gcmV0dXJuczpcblx0XHQvL1x0XHR7IGZvdW5kQ2xlZjogdHJ1ZSwgZm91bmRLZXk6IHRydWUgfVxuXHRcdC8vIFNpZGUgZWZmZWN0czpcblx0XHQvL1x0XHRjYWxscyB3YXJuKCkgd2hlbiB0aGVyZSBpcyBhIHN5bnRheCBlcnJvclxuXHRcdC8vXHRcdHNldHMgdGhlc2UgbWVtYmVycyBvZiBtdWx0aWxpbmVWYXJzOlxuXHRcdC8vXHRcdFx0Y2xlZlxuXHRcdC8vXHRcdFx0a2V5XG5cdFx0Ly9cdFx0XHRzdHlsZVxuXHRcdC8vXG5cdFx0Ly8gVGhlIGZvcm1hdCBpczpcblx0XHQvLyBLOiBb4p+oa2V54p+pXSBb4p+obW9kaWZpZXJz4p+pKl1cblx0XHQvLyBtb2RpZmllcnMgYXJlIGFueSBvZiB0aGUgZm9sbG93aW5nIGluIGFueSBvcmRlcjpcblx0XHQvLyAgW+KfqGNsZWbin6ldIFttaWRkbGU94p+ocGl0Y2jin6ldIFt0cmFuc3Bvc2U9Wy1d4p+obnVtYmVy4p+pXSBbc3RhZmZsaW5lcz3in6hudW1iZXLin6ldIFtzdGFmZnNjYWxlPeKfqG51bWJlcuKfqV1bc3R5bGU94p+oc3R5bGXin6ldXG5cdFx0Ly8ga2V5IGlzIG5vbmV8SFB8SHB84p+oc3BlY2lmaWVkX2tleeKfqVxuXHRcdC8vIGNsZWYgaXMgW2NsZWY9XSBb4p+oY2xlZiB0eXBl4p+pXSBb4p+obGluZSBudW1iZXLin6ldIFsrOHwtOF1cblx0XHQvLyBzcGVjaWZpZWRfa2V5IGlzIOKfqHBpdGNo4p+pWyN8Yl1bbW9kZShmaXJzdCB0aHJlZSBjaGFycyBhcmUgc2lnbmlmaWNhbnQpXVthY2NpZGVudGFscypdXG5cdFx0aWYgKHN0ci5sZW5ndGggPT09IDApIHtcblx0XHRcdC8vIGFuIGVtcHR5IEs6IGZpZWxkIGlzIHRoZSBzYW1lIGFzIEs6bm9uZVxuXHRcdFx0c3RyID0gJ25vbmUnO1xuXHRcdH1cblx0XHR2YXIgdG9rZW5zID0gdG9rZW5pemVyLnRva2VuaXplKHN0ciwgMCwgc3RyLmxlbmd0aCk7XG5cdFx0dmFyIHJldCA9IHt9O1xuXG5cdFx0Ly8gZmlyc3QgdGhlIGtleVxuXHRcdHN3aXRjaCAodG9rZW5zWzBdLnRva2VuKSB7XG5cdFx0XHRjYXNlICdIUCc6XG5cdFx0XHRcdHBhcnNlRGlyZWN0aXZlLmFkZERpcmVjdGl2ZShcImJhZ3BpcGVzXCIpO1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleSA9IHsgcm9vdDogXCJIUFwiLCBhY2NpZGVudGFsczogW10sIGFjYzogXCJcIiwgbW9kZTogXCJcIiB9O1xuXHRcdFx0XHRyZXQuZm91bmRLZXkgPSB0cnVlO1xuXHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdIcCc6XG5cdFx0XHRcdHBhcnNlRGlyZWN0aXZlLmFkZERpcmVjdGl2ZShcImJhZ3BpcGVzXCIpO1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleSA9IHsgcm9vdDogXCJIcFwiLCBhY2NpZGVudGFsczogW3thY2M6ICduYXR1cmFsJywgbm90ZTogJ2cnfSwge2FjYzogJ3NoYXJwJywgbm90ZTogJ2YnfSwge2FjYzogJ3NoYXJwJywgbm90ZTogJ2MnfV0sIGFjYzogXCJcIiwgbW9kZTogXCJcIiB9O1xuXHRcdFx0XHRyZXQuZm91bmRLZXkgPSB0cnVlO1xuXHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdub25lJzpcblx0XHRcdFx0Ly8gd2UgZ290IHRoZSBub25lIGtleSAtIHRoYXQncyB0aGUgc2FtZSBhcyBDIHRvIHVzXG5cdFx0XHRcdG11bHRpbGluZVZhcnMua2V5ID0geyByb290OiBcIm5vbmVcIiwgYWNjaWRlbnRhbHM6IFtdLCBhY2M6IFwiXCIsIG1vZGU6IFwiXCIgfTtcblx0XHRcdFx0cmV0LmZvdW5kS2V5ID0gdHJ1ZTtcblx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dmFyIHJldFBpdGNoID0gdG9rZW5pemVyLmdldEtleVBpdGNoKHRva2Vuc1swXS50b2tlbik7XG5cdFx0XHRcdGlmIChyZXRQaXRjaC5sZW4gPiAwKSB7XG5cdFx0XHRcdFx0cmV0LmZvdW5kS2V5ID0gdHJ1ZTtcblx0XHRcdFx0XHR2YXIgYWNjID0gXCJcIjtcblx0XHRcdFx0XHR2YXIgbW9kZSA9IFwiXCI7XG5cdFx0XHRcdFx0Ly8gVGhlIGFjY2lkZW50YWwgYW5kIG1vZGUgbWlnaHQgYmUgYXR0YWNoZWQgdG8gdGhlIHBpdGNoLCBzbyB3ZSBtaWdodCB3YW50IHRvIGp1c3QgcmVtb3ZlIHRoZSBmaXJzdCBjaGFyYWN0ZXIuXG5cdFx0XHRcdFx0aWYgKHRva2Vuc1swXS50b2tlbi5sZW5ndGggPiAxKVxuXHRcdFx0XHRcdFx0dG9rZW5zWzBdLnRva2VuID0gdG9rZW5zWzBdLnRva2VuLnN1YnN0cmluZygxKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHR2YXIga2V5ID0gcmV0UGl0Y2gudG9rZW47XG5cdFx0XHRcdFx0Ly8gV2UgZ290IGEgcGl0Y2ggdG8gc3RhcnQgd2l0aCwgc28gd2UgbWlnaHQgYWxzbyBoYXZlIGFuIGFjY2lkZW50YWwgYW5kIGEgbW9kZVxuXHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0dmFyIHJldEFjYyA9IHRva2VuaXplci5nZXRTaGFycEZsYXQodG9rZW5zWzBdLnRva2VuKTtcblx0XHRcdFx0XHRcdGlmIChyZXRBY2MubGVuID4gMCkge1xuXHRcdFx0XHRcdFx0XHRpZiAodG9rZW5zWzBdLnRva2VuLmxlbmd0aCA+IDEpXG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zWzBdLnRva2VuID0gdG9rZW5zWzBdLnRva2VuLnN1YnN0cmluZygxKTtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRrZXkgKz0gcmV0QWNjLnRva2VuO1xuXHRcdFx0XHRcdFx0XHRhY2MgPSByZXRBY2MudG9rZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0dmFyIHJldE1vZGUgPSB0b2tlbml6ZXIuZ2V0TW9kZSh0b2tlbnNbMF0udG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRpZiAocmV0TW9kZS5sZW4gPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0XHRcdFx0a2V5ICs9IHJldE1vZGUudG9rZW47XG5cdFx0XHRcdFx0XHRcdFx0bW9kZSA9IHJldE1vZGUudG9rZW47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIEJlIHN1cmUgdGhhdCB0aGUga2V5IHNwZWNpZmllZCBpcyBpbiB0aGUgbGlzdDogbm90IGFsbCBrZXlzIGFyZSBwaHlzaWNhbGx5IHBvc3NpYmxlLCBsaWtlIENibWluLlxuXHRcdFx0XHRcdFx0aWYgKHBhcnNlS2V5Vm9pY2Uuc3RhbmRhcmRLZXkoa2V5LCByZXRQaXRjaC50b2tlbiwgYWNjLCAwKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHdhcm4oXCJVbnN1cHBvcnRlZCBrZXkgc2lnbmF0dXJlOiBcIiArIGtleSwgc3RyLCAwKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gV2UgbmVlZCB0byBkbyBhIGRlZXAgY29weSBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBtb2RpZnkgaXRcblx0XHRcdFx0XHR2YXIgb2xkS2V5ID0gcGFyc2VLZXlWb2ljZS5kZWVwQ29weUtleShtdWx0aWxpbmVWYXJzLmtleSk7XG5cdFx0XHRcdFx0Ly9UT0RPLVBFUjogSEFDSyEgVG8gZ2V0IHRoZSBsb2NhbCB0cmFuc3Bvc2UgdG8gd29yaywgdGhlIHRyYW5zcG9zaXRpb24gaXMgZG9uZSBmb3IgZWFjaCBsaW5lLiBUaGlzIGNhdXNlZCB0aGUgZ2xvYmFsIHRyYW5zcG9zaXRpb24gdmFyaWFibGUgdG8gYmUgZmFjdG9yZWQgaW4gdHdpY2UsIHNvLCBpbnN0ZWFkIG9mIHJld3JpdGluZyB0aGF0IHJpZ2h0IG5vdywgSSdtIGp1c3Qgc3VidHJhY3Rpbmcgb25lIG9mIHRoZW0gaGVyZS5cblx0XHRcdFx0XHR2YXIga2V5Q29tcGVuc2F0ZSA9IG11bHRpbGluZVZhcnMuZ2xvYmFsVHJhbnNwb3NlID8gLW11bHRpbGluZVZhcnMuZ2xvYmFsVHJhbnNwb3NlIDogMDtcblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleSA9IHBhcnNlS2V5Vm9pY2UuZGVlcENvcHlLZXkocGFyc2VLZXlWb2ljZS5zdGFuZGFyZEtleShrZXksIHJldFBpdGNoLnRva2VuLCBhY2MsIGtleUNvbXBlbnNhdGUpKTtcblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleS5tb2RlID0gbW9kZTtcblx0XHRcdFx0XHRpZiAob2xkS2V5KSB7XG5cdFx0XHRcdFx0XHQvLyBBZGQgbmF0dXJhbCBpbiBhbGwgcGxhY2VzIHRoYXQgdGhlIG9sZCBrZXkgaGFkIGFuIGFjY2lkZW50YWwuXG5cdFx0XHRcdFx0XHR2YXIga2s7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IG11bHRpbGluZVZhcnMua2V5LmFjY2lkZW50YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoa2sgPSAwOyBrayA8IG9sZEtleS5hY2NpZGVudGFscy5sZW5ndGg7IGtrKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAob2xkS2V5LmFjY2lkZW50YWxzW2trXS5ub3RlICYmIG11bHRpbGluZVZhcnMua2V5LmFjY2lkZW50YWxzW2tdLm5vdGUudG9Mb3dlckNhc2UoKSA9PT0gb2xkS2V5LmFjY2lkZW50YWxzW2trXS5ub3RlLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHRcdFx0XHRcdFx0XHRvbGRLZXkuYWNjaWRlbnRhbHNba2tdLm5vdGUgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRmb3IgKGtrID0gMDsga2sgPCBvbGRLZXkuYWNjaWRlbnRhbHMubGVuZ3RoOyBraysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvbGRLZXkuYWNjaWRlbnRhbHNba2tdLm5vdGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIW11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscylcblx0XHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscy5wdXNoKHsgYWNjOiAnbmF0dXJhbCcsIG5vdGU6IG9sZEtleS5hY2NpZGVudGFsc1tra10ubm90ZSB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHQvLyBUaGVyZSBhcmUgdHdvIHNwZWNpYWwgY2FzZXMgb2YgZGVwcmVjYXRlZCBzeW50YXguIElnbm9yZSB0aGVtIGlmIHRoZXkgb2NjdXJcblx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDtcblx0XHRpZiAodG9rZW5zWzBdLnRva2VuID09PSAnZXhwJykgdG9rZW5zLnNoaWZ0KCk7XG5cdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHJldHVybiByZXQ7XG5cdFx0aWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJ29jdCcpIHRva2Vucy5zaGlmdCgpO1xuXG5cdFx0Ly8gbm93IHNlZSBpZiB0aGVyZSBhcmUgZXh0cmEgYWNjaWRlbnRhbHNcblx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDtcblx0XHR2YXIgYWNjcyA9IHRva2VuaXplci5nZXRLZXlBY2NpZGVudGFsczIodG9rZW5zKTtcblx0XHRpZiAoYWNjcy53YXJuKVxuXHRcdFx0d2FybihhY2NzLndhcm4sIHN0ciwgMCk7XG5cdFx0Ly8gSWYgd2UgaGF2ZSBleHRyYSBhY2NpZGVudGFscywgZmlyc3QgcmVwbGFjZSBvbmVzIHRoYXQgYXJlIG9mIHRoZSBzYW1lIHBpdGNoIGJlZm9yZSBhZGRpbmcgdGhlbSB0byB0aGUgZW5kLlxuXHRcdGlmIChhY2NzLmFjY3MpIHtcblx0XHRcdGlmICghcmV0LmZvdW5kS2V5KSB7XHRcdC8vIGlmIHRoZXJlIGFyZSBvbmx5IGV4dHJhIGFjY2lkZW50YWxzLCBtYWtlIHN1cmUgdGhpcyBpcyBzZXQuXG5cdFx0XHRcdHJldC5mb3VuZEtleSA9IHRydWU7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMua2V5ID0geyByb290OiBcIm5vbmVcIiwgYWNjOiBcIlwiLCBtb2RlOiBcIlwiLCBhY2NpZGVudGFsczogW10gfTtcblx0XHRcdH1cblx0XHRcdG5vcm1hbGl6ZUFjY2lkZW50YWxzKGFjY3MuYWNjcyk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFjY3MuYWNjcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBtdWx0aWxpbmVWYXJzLmtleS5hY2NpZGVudGFscy5sZW5ndGggJiYgIWZvdW5kOyBqKyspIHtcblx0XHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5rZXkuYWNjaWRlbnRhbHNbal0ubm90ZSA9PT0gYWNjcy5hY2NzW2ldLm5vdGUpIHtcblx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmtleS5hY2NpZGVudGFsc1tqXS5hY2MgIT09IGFjY3MuYWNjc1tpXS5hY2MpIHtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIGFjY2lkZW50YWwgaXMgZGlmZmVyZW50LCB0aGVuIHJlcGxhY2UgaXQuIElmIGl0IGlzIHRoZSBzYW1lLCB0aGVuIHRoZSBkZWNsYXJhdGlvbiB3YXMgcmVkdW5kYW50LCBzbyBqdXN0IGlnbm9yZSBpdC5cblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5rZXkuYWNjaWRlbnRhbHNbal0uYWNjID0gYWNjcy5hY2NzW2ldLmFjYztcblx0XHRcdFx0XHRcdFx0aWYgKCFtdWx0aWxpbmVWYXJzLmtleS5leHBsaWNpdEFjY2lkZW50YWxzKVxuXHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHMgPSBbXTtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5rZXkuZXhwbGljaXRBY2NpZGVudGFscy5wdXNoKGFjY3MuYWNjc1tpXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghZm91bmQpIHtcblx0XHRcdFx0XHRpZiAoIW11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHMpXG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleS5leHBsaWNpdEFjY2lkZW50YWxzID0gW107XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5rZXkuZXhwbGljaXRBY2NpZGVudGFscy5wdXNoKGFjY3MuYWNjc1tpXSk7XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5rZXkuYWNjaWRlbnRhbHMucHVzaChhY2NzLmFjY3NbaV0pO1xuXHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmtleS5pbXBsaWVkTmF0dXJhbHMpIHtcblx0XHRcdFx0XHRcdGZvciAodmFyIGtrayA9IDA7IGtrayA8IG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscy5sZW5ndGg7IGtraysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmtleS5pbXBsaWVkTmF0dXJhbHNba2trXS5ub3RlID09PSBhY2NzLmFjY3NbaV0ubm90ZSlcblx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleS5pbXBsaWVkTmF0dXJhbHMuc3BsaWNlKGtraywgMSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTm93IHNlZSBpZiBhbnkgb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgcHJlc2VudC4gVGhleSBoYXZlIHRoZSBmb3JtIFwia2V5PXZhbHVlXCIsIGV4Y2VwdCB0aGF0IFwiY2xlZj1cIiBpcyBvcHRpb25hbFxuXHRcdHZhciB0b2tlbjtcblx0XHR3aGlsZSAodG9rZW5zLmxlbmd0aCA+IDApIHtcblx0XHRcdHN3aXRjaCAodG9rZW5zWzBdLnRva2VuKSB7XG5cdFx0XHRcdGNhc2UgXCJtXCI6XG5cdFx0XHRcdGNhc2UgXCJtaWRkbGVcIjpcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBtaWRkbGVcIiwgc3RyLCAwKTsgcmV0dXJuIHJldDsgfVxuXHRcdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKHRva2VuLnRva2VuICE9PSBcIj1cIikgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBtaWRkbGVcIiwgc3RyLCB0b2tlbi5zdGFydCk7IGJyZWFrOyB9XG5cdFx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHsgd2FybihcIkV4cGVjdGVkIHBhcmFtZXRlciBhZnRlciBtaWRkbGU9XCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHR2YXIgcGl0Y2ggPSB0b2tlbml6ZXIuZ2V0UGl0Y2hGcm9tVG9rZW5zKHRva2Vucyk7XG5cdFx0XHRcdFx0aWYgKHBpdGNoLndhcm4pXG5cdFx0XHRcdFx0XHR3YXJuKHBpdGNoLndhcm4sIHN0ciwgMCk7XG5cdFx0XHRcdFx0aWYgKHBpdGNoLnBvc2l0aW9uKVxuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jbGVmLnZlcnRpY2FsUG9zID0gcGl0Y2gucG9zaXRpb24gLSA2O1x0Ly8gd2UgZ2V0IHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBtaWRkbGUgbGluZSwgYnV0IHdhbnQgdG8gb2Zmc2V0IGl0IHRvIHRoZSBmaXJzdCBsZWRnZXIgbGluZS5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInRyYW5zcG9zZVwiOlxuXHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7IHdhcm4oXCJFeHBlY3RlZCA9IGFmdGVyIHRyYW5zcG9zZVwiLCBzdHIsIDApOyByZXR1cm4gcmV0OyB9XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udG9rZW4gIT09IFwiPVwiKSB7IHdhcm4oXCJFeHBlY3RlZCA9IGFmdGVyIHRyYW5zcG9zZVwiLCBzdHIsIHRva2VuLnN0YXJ0KTsgYnJlYWs7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgcGFyYW1ldGVyIGFmdGVyIHRyYW5zcG9zZT1cIiwgc3RyLCAwKTsgcmV0dXJuIHJldDsgfVxuXHRcdFx0XHRcdGlmICh0b2tlbnNbMF0udHlwZSAhPT0gJ251bWJlcicpIHsgd2FybihcIkV4cGVjdGVkIG51bWJlciBhZnRlciB0cmFuc3Bvc2VcIiwgc3RyLCB0b2tlbnNbMF0uc3RhcnQpOyBicmVhazsgfVxuXHRcdFx0XHRcdG11bHRpbGluZVZhcnMuY2xlZi50cmFuc3Bvc2UgPSB0b2tlbnNbMF0uaW50dDtcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInN0YWZmbGluZXNcIjpcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBzdGFmZmxpbmVzXCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50b2tlbiAhPT0gXCI9XCIpIHsgd2FybihcIkV4cGVjdGVkID0gYWZ0ZXIgc3RhZmZsaW5lc1wiLCBzdHIsIHRva2VuLnN0YXJ0KTsgYnJlYWs7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgcGFyYW1ldGVyIGFmdGVyIHN0YWZmbGluZXM9XCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zWzBdLnR5cGUgIT09ICdudW1iZXInKSB7IHdhcm4oXCJFeHBlY3RlZCBudW1iZXIgYWZ0ZXIgc3RhZmZsaW5lc1wiLCBzdHIsIHRva2Vuc1swXS5zdGFydCk7IGJyZWFrOyB9XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jbGVmLnN0YWZmbGluZXMgPSB0b2tlbnNbMF0uaW50dDtcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInN0YWZmc2NhbGVcIjpcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBzdGFmZnNjYWxlXCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50b2tlbiAhPT0gXCI9XCIpIHsgd2FybihcIkV4cGVjdGVkID0gYWZ0ZXIgc3RhZmZzY2FsZVwiLCBzdHIsIHRva2VuLnN0YXJ0KTsgYnJlYWs7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgcGFyYW1ldGVyIGFmdGVyIHN0YWZmc2NhbGU9XCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zWzBdLnR5cGUgIT09ICdudW1iZXInKSB7IHdhcm4oXCJFeHBlY3RlZCBudW1iZXIgYWZ0ZXIgc3RhZmZzY2FsZVwiLCBzdHIsIHRva2Vuc1swXS5zdGFydCk7IGJyZWFrOyB9XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jbGVmLnN0YWZmc2NhbGUgPSB0b2tlbnNbMF0uZmxvYXR0O1xuXHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic3R5bGVcIjpcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBzdHlsZVwiLCBzdHIsIDApOyByZXR1cm4gcmV0OyB9XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udG9rZW4gIT09IFwiPVwiKSB7IHdhcm4oXCJFeHBlY3RlZCA9IGFmdGVyIHN0eWxlXCIsIHN0ciwgdG9rZW4uc3RhcnQpOyBicmVhazsgfVxuXHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7IHdhcm4oXCJFeHBlY3RlZCBwYXJhbWV0ZXIgYWZ0ZXIgc3R5bGU9XCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHRzd2l0Y2ggKHRva2Vuc1swXS50b2tlbikge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIm5vcm1hbFwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcImhhcm1vbmljXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwicmh5dGhtXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwieFwiOlxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnN0eWxlID0gdG9rZW5zWzBdLnRva2VuO1xuXHRcdFx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiZXJyb3IgcGFyc2luZyBzdHlsZSBlbGVtZW50OiBcIiArIHRva2Vuc1swXS50b2tlbiwgc3RyLCB0b2tlbnNbMF0uc3RhcnQpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJjbGVmXCI6XG5cdFx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHsgd2FybihcIkV4cGVjdGVkID0gYWZ0ZXIgY2xlZlwiLCBzdHIsIDApOyByZXR1cm4gcmV0OyB9XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udG9rZW4gIT09IFwiPVwiKSB7IHdhcm4oXCJFeHBlY3RlZCA9IGFmdGVyIGNsZWZcIiwgc3RyLCB0b2tlbi5zdGFydCk7IGJyZWFrOyB9XG5cdFx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHsgd2FybihcIkV4cGVjdGVkIHBhcmFtZXRlciBhZnRlciBjbGVmPVwiLCBzdHIsIDApOyByZXR1cm4gcmV0OyB9XG5cdFx0XHRcdFx0Ly9icmVhazsgeWVzLCB3ZSB3YW50IHRvIGZhbGwgdGhyb3VnaC4gVGhhdCBhbGxvd3MgXCJjbGVmPVwiIHRvIGJlIG9wdGlvbmFsLlxuXHRcdFx0XHRjYXNlIFwidHJlYmxlXCI6XG5cdFx0XHRcdGNhc2UgXCJiYXNzXCI6XG5cdFx0XHRcdGNhc2UgXCJhbHRvXCI6XG5cdFx0XHRcdGNhc2UgXCJ0ZW5vclwiOlxuXHRcdFx0XHRjYXNlIFwicGVyY1wiOlxuXHRcdFx0XHRcdC8vIGNsZWYgaXMgW2NsZWY9XSBb4p+oY2xlZiB0eXBl4p+pXSBb4p+obGluZSBudW1iZXLin6ldIFsrOHwtOF1cblx0XHRcdFx0XHR2YXIgY2xlZiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdHN3aXRjaCAoY2xlZi50b2tlbikge1xuXHRcdFx0XHRcdFx0Y2FzZSAndHJlYmxlJzpcblx0XHRcdFx0XHRcdGNhc2UgJ3Rlbm9yJzpcblx0XHRcdFx0XHRcdGNhc2UgJ2FsdG8nOlxuXHRcdFx0XHRcdFx0Y2FzZSAnYmFzcyc6XG5cdFx0XHRcdFx0XHRjYXNlICdwZXJjJzpcblx0XHRcdFx0XHRcdGNhc2UgJ25vbmUnOlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0MnOiBjbGVmLnRva2VuID0gJ2FsdG8nOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0YnOiBjbGVmLnRva2VuID0gJ2Jhc3MnOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0cnOiBjbGVmLnRva2VuID0gJ3RyZWJsZSc7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYyc6IGNsZWYudG9rZW4gPSAnYWx0byc7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZic6IGNsZWYudG9rZW4gPSAnYmFzcyc7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZyc6IGNsZWYudG9rZW4gPSAndHJlYmxlJzsgYnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgY2xlZiBuYW1lLiBGb3VuZCBcIiArIGNsZWYudG9rZW4sIHN0ciwgY2xlZi5zdGFydCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA+IDAgJiYgdG9rZW5zWzBdLnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRjbGVmLnRva2VuICs9IHRva2Vuc1swXS50b2tlbjtcblx0XHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA+IDEgJiYgKHRva2Vuc1swXS50b2tlbiA9PT0gJy0nIHx8IHRva2Vuc1swXS50b2tlbiA9PT0gJysnIHx8IHRva2Vuc1swXS50b2tlbiA9PT0gJ14nIHx8IHRva2Vuc1swXS50b2tlbiA9PT0gJ18nKSAmJiB0b2tlbnNbMV0udG9rZW4gPT09ICc4Jykge1xuXHRcdFx0XHRcdFx0Y2xlZi50b2tlbiArPSB0b2tlbnNbMF0udG9rZW4gKyB0b2tlbnNbMV0udG9rZW47XG5cdFx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmNsZWYgPSB7dHlwZTogY2xlZi50b2tlbiwgdmVydGljYWxQb3M6IGNhbGNNaWRkbGUoY2xlZi50b2tlbiwgMCl9O1xuXHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZSAmJiBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS50cmFuc3Bvc2UgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuY2xlZi50cmFuc3Bvc2UgPSBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS50cmFuc3Bvc2U7XG5cdFx0XHRcdFx0cmV0LmZvdW5kQ2xlZiA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0d2FybihcIlVua25vd24gcGFyYW1ldGVyOiBcIiArIHRva2Vuc1swXS50b2tlbiwgc3RyLCB0b2tlbnNbMF0uc3RhcnQpO1xuXHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXG5cdHZhciBzZXRDdXJyZW50Vm9pY2UgPSBmdW5jdGlvbihpZCkge1xuXHRcdG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID0gbXVsdGlsaW5lVmFycy52b2ljZXNbaWRdO1xuXHRcdHR1bmUuc2V0Q3VycmVudFZvaWNlKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtLCBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5pbmRleCk7XG5cdH07XG5cblx0cGFyc2VLZXlWb2ljZS5wYXJzZVZvaWNlID0gZnVuY3Rpb24obGluZSwgaSwgZSkge1xuXHRcdC8vRmlyc3QgdHJ1bmNhdGUgdGhlIHN0cmluZyB0byB0aGUgZmlyc3Qgbm9uLXNwYWNlIGNoYXJhY3RlciBhZnRlciBWOiB0aHJvdWdoIGVpdGhlciB0aGVcblx0XHQvL2VuZCBvZiB0aGUgbGluZSBvciBhICUgY2hhcmFjdGVyLiBUaGVuIHJlbW92ZSB0cmFpbGluZyBzcGFjZXMsIHRvby5cblx0XHR2YXIgcmV0ID0gdG9rZW5pemVyLmdldE1lYXQobGluZSwgaSwgZSk7XG5cdFx0dmFyIHN0YXJ0ID0gcmV0LnN0YXJ0O1xuXHRcdHZhciBlbmQgPSByZXQuZW5kO1xuXHRcdC8vVGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBsaW5lIGlzIHRoZSBJRC4gSXQgY2FuIGJlIGFueSBub24tc3BhY2Ugc3RyaW5nIGFuZCB0ZXJtaW5hdGVzIGF0IHRoZVxuXHRcdC8vZmlyc3Qgc3BhY2UuXG5cdFx0dmFyIGlkID0gdG9rZW5pemVyLmdldFRva2VuKGxpbmUsIHN0YXJ0LCBlbmQpO1xuXHRcdGlmIChpZC5sZW5ndGggPT09IDApIHtcblx0XHRcdHdhcm4oXCJFeHBlY3RlZCBhIHZvaWNlIGlkXCIsIGxpbmUsIHN0YXJ0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dmFyIGlzTmV3ID0gZmFsc2U7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMudm9pY2VzW2lkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0gPSB7fTtcblx0XHRcdGlzTmV3ID0gdHJ1ZTtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLnNjb3JlX2lzX3ByZXNlbnQpXG5cdFx0XHRcdHdhcm4oXCJDYW4ndCBoYXZlIGFuIHVua25vd24gVjogaWQgd2hlbiB0aGUgJXNjb3JlIGRpcmVjdGl2ZSBpcyBwcmVzZW50XCIsIGxpbmUsIHN0YXJ0KTtcblx0XHR9XG5cdFx0c3RhcnQgKz0gaWQubGVuZ3RoO1xuXHRcdHN0YXJ0ICs9IHRva2VuaXplci5lYXRXaGl0ZVNwYWNlKGxpbmUsIHN0YXJ0KTtcblxuXHRcdHZhciBzdGFmZkluZm8gPSB7c3RhcnRTdGFmZjogaXNOZXd9O1xuXHRcdHZhciBhZGROZXh0VG9rZW5Ub1N0YWZmSW5mbyA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdHZhciBhdHRyID0gdG9rZW5pemVyLmdldFZvaWNlVG9rZW4obGluZSwgc3RhcnQsIGVuZCk7XG5cdFx0XHRpZiAoYXR0ci53YXJuICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCB2YWx1ZSBmb3IgXCIgKyBuYW1lICsgXCIgaW4gdm9pY2U6IFwiICsgYXR0ci53YXJuLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRlbHNlIGlmIChhdHRyLnRva2VuLmxlbmd0aCA9PT0gMCAmJiBsaW5lLmNoYXJBdChzdGFydCkgIT09ICdcIicpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCB2YWx1ZSBmb3IgXCIgKyBuYW1lICsgXCIgaW4gdm9pY2VcIiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRzdGFmZkluZm9bbmFtZV0gPSBhdHRyLnRva2VuO1xuXHRcdFx0c3RhcnQgKz0gYXR0ci5sZW47XG5cdFx0fTtcblx0XHR2YXIgYWRkTmV4dFRva2VuVG9Wb2ljZUluZm8gPSBmdW5jdGlvbihpZCwgbmFtZSwgdHlwZSkge1xuXHRcdFx0dmFyIGF0dHIgPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdGlmIChhdHRyLndhcm4gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHZhbHVlIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZTogXCIgKyBhdHRyLndhcm4sIGxpbmUsIHN0YXJ0KTtcblx0XHRcdGVsc2UgaWYgKGF0dHIudG9rZW4ubGVuZ3RoID09PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KSAhPT0gJ1wiJylcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHZhbHVlIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZVwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYgKHR5cGUgPT09ICdudW1iZXInKVxuXHRcdFx0XHRcdGF0dHIudG9rZW4gPSBwYXJzZUZsb2F0KGF0dHIudG9rZW4pO1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF1bbmFtZV0gPSBhdHRyLnRva2VuO1xuXHRcdFx0fVxuXHRcdFx0c3RhcnQgKz0gYXR0ci5sZW47XG5cdFx0fTtcblx0XHR2YXIgZ2V0TmV4dFRva2VuID0gZnVuY3Rpb24obmFtZSwgdHlwZSkge1xuXHRcdFx0dmFyIGF0dHIgPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdGlmIChhdHRyLndhcm4gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHZhbHVlIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZTogXCIgKyBhdHRyLndhcm4sIGxpbmUsIHN0YXJ0KTtcblx0XHRcdGVsc2UgaWYgKGF0dHIudG9rZW4ubGVuZ3RoID09PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KSAhPT0gJ1wiJylcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHZhbHVlIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZVwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYgKHR5cGUgPT09ICdudW1iZXInKVxuXHRcdFx0XHRcdGF0dHIudG9rZW4gPSBwYXJzZUZsb2F0KGF0dHIudG9rZW4pO1xuXHRcdFx0XHRyZXR1cm4gYXR0ci50b2tlbjtcblx0XHRcdH1cblx0XHRcdHN0YXJ0ICs9IGF0dHIubGVuO1xuXHRcdH07XG5cdFx0dmFyIGFkZE5leHROb3RlVG9rZW5Ub1ZvaWNlSW5mbyA9IGZ1bmN0aW9uKGlkLCBuYW1lKSB7XG5cdFx0XHR2YXIgbm90ZVRvVHJhbnNwb3NpdGlvbiA9IHtcblx0XHRcdFx0XCJfQlwiOiAyLFxuXHRcdFx0XHRcIl9FXCI6IDksXG5cdFx0XHRcdFwiX2JcIjogLTEwLFxuXHRcdFx0XHRcIl9lXCI6IC0zXG5cdFx0XHR9O1xuXHRcdFx0dmFyIGF0dHIgPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdGlmIChhdHRyLndhcm4gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBvZiAoX0IsIF9FLCBfYiwgX2UpIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZTogXCIgKyBhdHRyLndhcm4sIGxpbmUsIHN0YXJ0KTtcblx0XHRcdGVsc2UgaWYgKGF0dHIudG9rZW4ubGVuZ3RoID09PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KSAhPT0gJ1wiJylcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBvZiAoX0IsIF9FLCBfYiwgX2UpIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZVwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dmFyIHQgPSBub3RlVG9UcmFuc3Bvc2l0aW9uW2F0dHIudG9rZW5dO1xuXHRcdFx0XHRpZiAoIXQpXG5cdFx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBvZiAoX0IsIF9FLCBfYiwgX2UpIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZVwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF1bbmFtZV0gPSB0O1xuXHRcdFx0fVxuXHRcdFx0c3RhcnQgKz0gYXR0ci5sZW47XG5cdFx0fTtcblxuXHRcdC8vVGhlbiB0aGUgZm9sbG93aW5nIGl0ZW1zIGNhbiBvY2N1ciBpbiBhbnkgb3JkZXI6XG5cdFx0d2hpbGUgKHN0YXJ0IDwgZW5kKSB7XG5cdFx0XHR2YXIgdG9rZW4gPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdHN0YXJ0ICs9IHRva2VuLmxlbjtcblxuXHRcdFx0aWYgKHRva2VuLndhcm4pIHtcblx0XHRcdFx0d2FybihcIkVycm9yIHBhcnNpbmcgdm9pY2U6IFwiICsgdG9rZW4ud2FybiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIGF0dHIgPSBudWxsO1xuXHRcdFx0XHRzd2l0Y2ggKHRva2VuLnRva2VuKSB7XG5cdFx0XHRcdFx0Y2FzZSAnY2xlZic6XG5cdFx0XHRcdFx0Y2FzZSAnY2wnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9TdGFmZkluZm8oJ2NsZWYnKTtcblx0XHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBjaGVjayBmb3IgYSBsZWdhbCBjbGVmOyBkbyBvY3Rhdml6aW5nXG5cdFx0XHRcdFx0XHR2YXIgb2N0ID0gMDtcblx0Ly9cdFx0XHRcdFx0XHRcdGZvciAodmFyIGlpID0gMDsgaWkgPCBzdGFmZkluZm8uY2xlZi5sZW5ndGg7IGlpKyspIHtcblx0Ly9cdFx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmSW5mby5jbGVmW2lpXSA9PT0gJywnKSBvY3QgLT0gNztcblx0Ly9cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoc3RhZmZJbmZvLmNsZWZbaWldID09PSBcIidcIikgb2N0ICs9IDc7XG5cdC8vXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoc3RhZmZJbmZvLmNsZWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0ICBzdGFmZkluZm8uY2xlZiA9IHN0YWZmSW5mby5jbGVmLnJlcGxhY2UoL1snLF0vZywgXCJcIik7IC8vJy8vY29tbWVudCBmb3IgZW1hY3MgZm9ybWF0dGluZyBvZiByZWdleHBcblx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmSW5mby5jbGVmLmluZGV4T2YoJysxNicpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdG9jdCArPSAxNDtcblx0XHRcdFx0XHRcdFx0XHRzdGFmZkluZm8uY2xlZiA9IHN0YWZmSW5mby5jbGVmLnJlcGxhY2UoJysxNicsICcnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRzdGFmZkluZm8udmVydGljYWxQb3MgPSBjYWxjTWlkZGxlKHN0YWZmSW5mby5jbGVmLCBvY3QpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAndHJlYmxlJzpcblx0XHRcdFx0XHRjYXNlICdiYXNzJzpcblx0XHRcdFx0XHRjYXNlICd0ZW5vcic6XG5cdFx0XHRcdFx0Y2FzZSAnYWx0byc6XG5cdFx0XHRcdFx0Y2FzZSAncGVyYyc6XG5cdFx0XHRcdFx0Y2FzZSAnbm9uZSc6XG5cdFx0XHRcdFx0Y2FzZSAndHJlYmxlXFwnJzpcblx0XHRcdFx0XHRjYXNlICdiYXNzXFwnJzpcblx0XHRcdFx0XHRjYXNlICd0ZW5vclxcJyc6XG5cdFx0XHRcdFx0Y2FzZSAnYWx0b1xcJyc6XG5cdFx0XHRcdFx0Y2FzZSAnbm9uZVxcJyc6XG5cdFx0XHRcdFx0Y2FzZSAndHJlYmxlXFwnXFwnJzpcblx0XHRcdFx0XHRjYXNlICdiYXNzXFwnXFwnJzpcblx0XHRcdFx0XHRjYXNlICd0ZW5vclxcJ1xcJyc6XG5cdFx0XHRcdFx0Y2FzZSAnYWx0b1xcJ1xcJyc6XG5cdFx0XHRcdFx0Y2FzZSAnbm9uZVxcJ1xcJyc6XG5cdFx0XHRcdFx0Y2FzZSAndHJlYmxlLCc6XG5cdFx0XHRcdFx0Y2FzZSAnYmFzcywnOlxuXHRcdFx0XHRcdGNhc2UgJ3Rlbm9yLCc6XG5cdFx0XHRcdFx0Y2FzZSAnYWx0bywnOlxuXHRcdFx0XHRcdGNhc2UgJ25vbmUsJzpcblx0XHRcdFx0XHRjYXNlICd0cmVibGUsLCc6XG5cdFx0XHRcdFx0Y2FzZSAnYmFzcywsJzpcblx0XHRcdFx0XHRjYXNlICd0ZW5vciwsJzpcblx0XHRcdFx0XHRjYXNlICdhbHRvLCwnOlxuXHRcdFx0XHRcdGNhc2UgJ25vbmUsLCc6XG5cdFx0XHRcdFx0XHQvLyBUT0RPLVBFUjogaGFuZGxlIHRoZSBvY3RhdmUgaW5kaWNhdG9ycyBvbiB0aGUgY2xlZiBieSBjaGFuZ2luZyB0aGUgbWlkZGxlIHByb3BlcnR5XG5cdFx0XHRcdFx0XHR2YXIgb2N0MiA9IDA7XG5cdC8vXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpaWkgPSAwOyBpaWkgPCB0b2tlbi50b2tlbi5sZW5ndGg7IGlpaSsrKSB7XG5cdC8vXHRcdFx0XHRcdFx0XHRcdGlmICh0b2tlbi50b2tlbltpaWldID09PSAnLCcpIG9jdDIgLT0gNztcblx0Ly9cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAodG9rZW4udG9rZW5baWlpXSA9PT0gXCInXCIpIG9jdDIgKz0gNztcblx0Ly9cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIHN0YWZmSW5mby5jbGVmID0gdG9rZW4udG9rZW4ucmVwbGFjZSgvWycsXS9nLCBcIlwiKTsgLy8nLy9jb21tZW50IGZvciBlbWFjcyBmb3JtYXR0aW5nIG9mIHJlZ2V4cFxuXHRcdFx0XHRcdFx0c3RhZmZJbmZvLnZlcnRpY2FsUG9zID0gY2FsY01pZGRsZShzdGFmZkluZm8uY2xlZiwgb2N0Mik7XG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uY2xlZiA9IHRva2VuLnRva2VuO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc3RhdmVzJzpcblx0XHRcdFx0XHRjYXNlICdzdGF2ZSc6XG5cdFx0XHRcdFx0Y2FzZSAnc3R2Jzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvU3RhZmZJbmZvKCdzdGF2ZXMnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2JyYWNlJzpcblx0XHRcdFx0XHRjYXNlICdicmMnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9TdGFmZkluZm8oJ2JyYWNlJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdFx0XHRjYXNlICdicmsnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9TdGFmZkluZm8oJ2JyYWNrZXQnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ25hbWUnOlxuXHRcdFx0XHRcdGNhc2UgJ25tJzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvU3RhZmZJbmZvKCduYW1lJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdzdWJuYW1lJzpcblx0XHRcdFx0XHRjYXNlICdzbmFtZSc6XG5cdFx0XHRcdFx0Y2FzZSAnc25tJzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvU3RhZmZJbmZvKCdzdWJuYW1lJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdtZXJnZSc6XG5cdFx0XHRcdFx0XHRzdGFmZkluZm8uc3RhcnRTdGFmZiA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc3RlbSc6XG5cdFx0XHRcdFx0Y2FzZSAnc3RlbXMnOlxuXHRcdFx0XHRcdFx0YXR0ciA9IHRva2VuaXplci5nZXRWb2ljZVRva2VuKGxpbmUsIHN0YXJ0LCBlbmQpO1xuXHRcdFx0XHRcdFx0aWYgKGF0dHIud2FybiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgdmFsdWUgZm9yIHN0ZW1zIGluIHZvaWNlOiBcIiArIGF0dHIud2FybiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXR0ci50b2tlbiA9PT0gJ3VwJyB8fCBhdHRyLnRva2VuID09PSAnZG93bicpXG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMudm9pY2VzW2lkXS5zdGVtID0gYXR0ci50b2tlbjtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHVwIG9yIGRvd24gZm9yIHZvaWNlIHN0ZW1cIiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0XHRcdFx0c3RhcnQgKz0gYXR0ci5sZW47XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICd1cCc6XG5cdFx0XHRcdFx0Y2FzZSAnZG93bic6XG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uc3RlbSA9IHRva2VuLnRva2VuO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnbWlkZGxlJzpcblx0XHRcdFx0XHRjYXNlICdtJzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvU3RhZmZJbmZvKCd2ZXJ0aWNhbFBvcycpO1xuXHRcdFx0XHRcdFx0c3RhZmZJbmZvLnZlcnRpY2FsUG9zID0gcGFyc2VNaWRkbGUoc3RhZmZJbmZvLnZlcnRpY2FsUG9zKS5taWQ7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdnY2hvcmRzJzpcblx0XHRcdFx0XHRjYXNlICdnY2gnOlxuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy52b2ljZXNbaWRdLnN1cHByZXNzQ2hvcmRzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdC8vIGdjaG9yZHMgY2FuIHN0YW5kIG9uIGl0cyBvd24sIG9yIGl0IGNvdWxkIGJlIGdjaG9yZHM9MC5cblx0XHRcdFx0XHRcdGF0dHIgPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdFx0XHRcdGlmIChhdHRyLnRva2VuID09PSBcIjBcIilcblx0XHRcdFx0XHRcdFx0c3RhcnQgPSBzdGFydCArIGF0dHIubGVuO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc3BhY2UnOlxuXHRcdFx0XHRcdGNhc2UgJ3NwYyc6XG5cdFx0XHRcdFx0XHRhZGROZXh0VG9rZW5Ub1N0YWZmSW5mbygnc3BhY2luZycpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc2NhbGUnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9Wb2ljZUluZm8oaWQsICdzY2FsZScsICdudW1iZXInKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3Njb3JlJzpcblx0XHRcdFx0XHRcdGFkZE5leHROb3RlVG9rZW5Ub1ZvaWNlSW5mbyhpZCwgJ3Njb3JlVHJhbnNwb3NlJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICd0cmFuc3Bvc2UnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9Wb2ljZUluZm8oaWQsICd0cmFuc3Bvc2UnLCAnbnVtYmVyJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdzdGFmZmxpbmVzJzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvVm9pY2VJbmZvKGlkLCAnc3RhZmZsaW5lcycsICdudW1iZXInKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3N0YWZmc2NhbGUnOlxuXHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IFRoaXMgaXMgcGFzc2VkIHRvIHRoZSBlbmdyYXZlciwgYnV0IHRoZSBlbmdyYXZlciBpZ25vcmVzIGl0LlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9Wb2ljZUluZm8oaWQsICdzdGFmZnNjYWxlJywgJ251bWJlcicpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnb2N0YXZlJzpcblx0XHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBUaGlzIGlzIGFjY2VwdGVkLCBidXQgbm90IGltcGxlbWVudGVkLCB5ZXQuXG5cdFx0XHRcdFx0XHRhZGROZXh0VG9rZW5Ub1ZvaWNlSW5mbyhpZCwgJ29jdGF2ZScsICdudW1iZXInKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRcdFx0XHQvLyBUT0RPLVBFUjogVGhpcyBpcyBhY2NlcHRlZCwgYnV0IG5vdCBpbXBsZW1lbnRlZCwgeWV0LlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9Wb2ljZUluZm8oaWQsICd2b2x1bWUnLCAnbnVtYmVyJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdjdWUnOlxuXHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IFRoaXMgaXMgYWNjZXB0ZWQsIGJ1dCBub3QgaW1wbGVtZW50ZWQsIHlldC5cblx0XHRcdFx0XHRcdHZhciBjdWUgPSBnZXROZXh0VG9rZW4oJ2N1ZScsICdzdHJpbmcnKTtcblx0XHRcdFx0XHRcdGlmIChjdWUgPT09ICdvbicpXG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMudm9pY2VzW2lkXS5zY2FsZSA9IDAuNjtcblx0XHRcdFx0XHRcdGVsc2UgbXVsdGlsaW5lVmFycy52b2ljZXNbaWRdLnNjYWxlID0gMTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJzdHlsZVwiOlxuXHRcdFx0XHRcdFx0YXR0ciA9IHRva2VuaXplci5nZXRWb2ljZVRva2VuKGxpbmUsIHN0YXJ0LCBlbmQpO1xuXHRcdFx0XHRcdFx0aWYgKGF0dHIud2FybiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgdmFsdWUgZm9yIHN0eWxlIGluIHZvaWNlOiBcIiArIGF0dHIud2FybiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXR0ci50b2tlbiA9PT0gJ25vcm1hbCcgfHwgYXR0ci50b2tlbiA9PT0gJ2hhcm1vbmljJyB8fCBhdHRyLnRva2VuID09PSAncmh5dGhtJyB8fCBhdHRyLnRva2VuID09PSAneCcpXG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMudm9pY2VzW2lkXS5zdHlsZSA9IGF0dHIudG9rZW47XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBvbmUgb2YgW25vcm1hbCwgaGFybW9uaWMsIHJoeXRobSwgeF0gZm9yIHZvaWNlIHN0eWxlXCIsIGxpbmUsIHN0YXJ0KTtcblx0XHRcdFx0XHRcdHN0YXJ0ICs9IGF0dHIubGVuO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBVc2UgdGhpcyB0byBmaW5kIFY6IHVzYWdlcyB0aGF0IGFyZW4ndCBoYW5kbGVkLlxuXHRcdFx0XHRcdC8vIFx0Y29uc29sZS5sb2coXCJwYXJzZSB2b2ljZVwiLCB0b2tlbiwgdHVuZS5tZXRhVGV4dC50aXRsZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHN0YXJ0ICs9IHRva2VuaXplci5lYXRXaGl0ZVNwYWNlKGxpbmUsIHN0YXJ0KTtcblx0XHR9XG5cblx0XHQvLyBub3cgd2UndmUgZmlsbGVkIHVwIHN0YWZmSW5mbywgZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhpcyB2b2ljZVxuXHRcdC8vIFRPRE8tUEVSOiBJdCBpcyB1bmNsZWFyIGZyb20gdGhlIHN0YW5kYXJkIGFuZCB0aGUgZXhhbXBsZXMgd2hhdCB0byBkbyB3aXRoIGJyYWNlLCBicmFja2V0LCBhbmQgc3RhdmVzLCBzbyB0aGV5IGFyZSBpZ25vcmVkIGZvciBub3cuXG5cdFx0aWYgKHN0YWZmSW5mby5zdGFydFN0YWZmIHx8IG11bHRpbGluZVZhcnMuc3RhdmVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0bXVsdGlsaW5lVmFycy5zdGF2ZXMucHVzaCh7aW5kZXg6IG11bHRpbGluZVZhcnMuc3RhdmVzLmxlbmd0aCwgbWV0ZXI6IG11bHRpbGluZVZhcnMub3JpZ01ldGVyfSk7XG5cdFx0XHRpZiAoIW11bHRpbGluZVZhcnMuc2NvcmVfaXNfcHJlc2VudClcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5zdGF2ZXNbbXVsdGlsaW5lVmFycy5zdGF2ZXMubGVuZ3RoLTFdLm51bVZvaWNlcyA9IDA7XG5cdFx0fVxuXHRcdGlmIChtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uc3RhZmZOdW0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gc3RvcmUgd2hlcmUgdG8gd3JpdGUgdGhpcyBmb3IgcXVpY2sgYWNjZXNzIGxhdGVyLlxuXHRcdFx0bXVsdGlsaW5lVmFycy52b2ljZXNbaWRdLnN0YWZmTnVtID0gbXVsdGlsaW5lVmFycy5zdGF2ZXMubGVuZ3RoLTE7XG5cdFx0XHR2YXIgdmkgPSAwO1xuXHRcdFx0Zm9yKHZhciB2IGluIG11bHRpbGluZVZhcnMudm9pY2VzKSB7XG5cdFx0XHRcdGlmKG11bHRpbGluZVZhcnMudm9pY2VzLmhhc093blByb3BlcnR5KHYpKSB7XG5cdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMudm9pY2VzW3ZdLnN0YWZmTnVtID09PSBtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uc3RhZmZOdW0pXG5cdFx0XHRcdFx0XHR2aSsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uaW5kZXggPSB2aS0xO1xuXHRcdH1cblx0XHR2YXIgcyA9IG11bHRpbGluZVZhcnMuc3RhdmVzW211bHRpbGluZVZhcnMudm9pY2VzW2lkXS5zdGFmZk51bV07XG5cdFx0aWYgKCFtdWx0aWxpbmVWYXJzLnNjb3JlX2lzX3ByZXNlbnQpXG5cdFx0XHRzLm51bVZvaWNlcysrO1xuXHRcdGlmIChzdGFmZkluZm8uY2xlZikgcy5jbGVmID0ge3R5cGU6IHN0YWZmSW5mby5jbGVmLCB2ZXJ0aWNhbFBvczogc3RhZmZJbmZvLnZlcnRpY2FsUG9zfTtcblx0XHRpZiAoc3RhZmZJbmZvLnNwYWNpbmcpIHMuc3BhY2luZ19iZWxvd19vZmZzZXQgPSBzdGFmZkluZm8uc3BhY2luZztcblx0XHRpZiAoc3RhZmZJbmZvLnZlcnRpY2FsUG9zKSBzLnZlcnRpY2FsUG9zID0gc3RhZmZJbmZvLnZlcnRpY2FsUG9zO1xuXG5cdFx0aWYgKHN0YWZmSW5mby5uYW1lKSB7aWYgKHMubmFtZSkgcy5uYW1lLnB1c2goc3RhZmZJbmZvLm5hbWUpOyBlbHNlIHMubmFtZSA9IFsgc3RhZmZJbmZvLm5hbWUgXTt9XG5cdFx0aWYgKHN0YWZmSW5mby5zdWJuYW1lKSB7aWYgKHMuc3VibmFtZSkgcy5zdWJuYW1lLnB1c2goc3RhZmZJbmZvLnN1Ym5hbWUpOyBlbHNlIHMuc3VibmFtZSA9IFsgc3RhZmZJbmZvLnN1Ym5hbWUgXTt9XG5cblx0XHRzZXRDdXJyZW50Vm9pY2UoaWQpO1xuXHR9O1xuXG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlS2V5Vm9pY2U7XG4iLCIvLyAgICBhYmNfcGFyc2VfaGVhZGVyLmpzOiBwYXJzZXMgYSB0aGUgaGVhZGVyIGZpZWxkcyBmcm9tIGEgc3RyaW5nIHJlcHJlc2VudGluZyBBQkMgTXVzaWMgTm90YXRpb24gaW50byBhIHVzYWJsZSBpbnRlcm5hbCBzdHJ1Y3R1cmUuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBQYXVsIFJvc2VuIChwYXVsIGF0IHBhdWxyb3NlbiBkb3QgbmV0KVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vKmdsb2JhbCB3aW5kb3cgKi9cblxudmFyIHBhcnNlQ29tbW9uID0gcmVxdWlyZSgnLi9hYmNfY29tbW9uJyk7XG52YXIgcGFyc2VEaXJlY3RpdmUgPSByZXF1aXJlKCcuL2FiY19wYXJzZV9kaXJlY3RpdmUnKTtcbnZhciBwYXJzZUtleVZvaWNlID0gcmVxdWlyZSgnLi9hYmNfcGFyc2Vfa2V5X3ZvaWNlJyk7XG5cbnZhciBQYXJzZUhlYWRlciA9IGZ1bmN0aW9uKHRva2VuaXplciwgd2FybiwgbXVsdGlsaW5lVmFycywgdHVuZSkge1xuXHR0aGlzLnJlc2V0ID0gZnVuY3Rpb24odG9rZW5pemVyLCB3YXJuLCBtdWx0aWxpbmVWYXJzLCB0dW5lKSB7XG5cdFx0cGFyc2VLZXlWb2ljZS5pbml0aWFsaXplKHRva2VuaXplciwgd2FybiwgbXVsdGlsaW5lVmFycywgdHVuZSk7XG5cdFx0cGFyc2VEaXJlY3RpdmUuaW5pdGlhbGl6ZSh0b2tlbml6ZXIsIHdhcm4sIG11bHRpbGluZVZhcnMsIHR1bmUpO1xuXHR9O1xuXHR0aGlzLnJlc2V0KHRva2VuaXplciwgd2FybiwgbXVsdGlsaW5lVmFycywgdHVuZSk7XG5cblx0dGhpcy5zZXRUaXRsZSA9IGZ1bmN0aW9uKHRpdGxlKSB7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMuaGFzTWFpblRpdGxlKVxuXHRcdFx0dHVuZS5hZGRTdWJ0aXRsZSh0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHRva2VuaXplci5zdHJpcENvbW1lbnQodGl0bGUpKSk7XHQvLyBkaXNwbGF5IHNlY29uZGFyeSB0aXRsZVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHR2YXIgdGl0bGVTdHIgPSB0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHRva2VuaXplci50aGVSZXZlcnNlcih0b2tlbml6ZXIuc3RyaXBDb21tZW50KHRpdGxlKSkpO1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMudGl0bGVjYXBzKVxuXHRcdFx0XHR0aXRsZVN0ciA9IHRpdGxlU3RyLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHR0dW5lLmFkZE1ldGFUZXh0KFwidGl0bGVcIiwgdGl0bGVTdHIpO1xuXHRcdFx0bXVsdGlsaW5lVmFycy5oYXNNYWluVGl0bGUgPSB0cnVlO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLnNldE1ldGVyID0gZnVuY3Rpb24obGluZSkge1xuXHRcdGxpbmUgPSB0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUpO1xuXHRcdGlmIChsaW5lID09PSAnQycpIHtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID09PSB0cnVlKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt0eXBlOiAnY29tbW9uX3RpbWUnfTtcblx0XHR9IGVsc2UgaWYgKGxpbmUgPT09ICdDfCcpIHtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID09PSB0cnVlKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt0eXBlOiAnY3V0X3RpbWUnfTtcblx0XHR9IGVsc2UgaWYgKGxpbmUgPT09ICdvJykge1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMuaGF2ZW50X3NldF9sZW5ndGggPT09IHRydWUpIHtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCA9IDAuMTI1O1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge3R5cGU6ICd0ZW1wdXNfcGVyZmVjdHVtJ307XG5cdFx0fSBlbHNlIGlmIChsaW5lID09PSAnYycpIHtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID09PSB0cnVlKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt0eXBlOiAndGVtcHVzX2ltcGVyZmVjdHVtJ307XG5cdFx0fSBlbHNlIGlmIChsaW5lID09PSAnby4nKSB7XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmRlZmF1bHRfbGVuZ3RoID0gMC4xMjU7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuaGF2ZW50X3NldF9sZW5ndGggPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7dHlwZTogJ3RlbXB1c19wZXJmZWN0dW1fcHJvbGF0aW8nfTtcblx0XHR9IGVsc2UgaWYgKGxpbmUgPT09ICdjLicpIHtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID09PSB0cnVlKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt0eXBlOiAndGVtcHVzX2ltcGVyZmVjdHVtX3Byb2xhdGlvJ307XG5cdFx0fSBlbHNlIGlmIChsaW5lLmxlbmd0aCA9PT0gMCB8fCBsaW5lLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMuaGF2ZW50X3NldF9sZW5ndGggPT09IHRydWUpIHtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCA9IDAuMTI1O1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHZhciB0b2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUobGluZSwgMCwgbGluZS5sZW5ndGgpO1xuXHRcdFx0Ly8gdGhlIGZvcm0gaXMgW29wZW5fcGFyZW5dIGRlY2ltYWwgWyBwbHVzfGRvdCBkZWNpbWFsIF0uLi4gW2Nsb3NlX3BhcmVuXSBzbGFzaCBkZWNpbWFsIFtwbHVzIHNhbWVfYXNfYmVmb3JlXVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIHBhcnNlTnVtID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Ly8gaGFuZGxlcyB0aGlzIG11Y2g6IFtvcGVuX3BhcmVuXSBkZWNpbWFsIFsgcGx1c3xkb3QgZGVjaW1hbCBdLi4uIFtjbG9zZV9wYXJlbl1cblx0XHRcdFx0XHR2YXIgcmV0ID0ge3ZhbHVlOiAwLCBudW06IFwiXCJ9O1xuXG5cdFx0XHRcdFx0dmFyIHRvayA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2sudG9rZW4gPT09ICcoJylcblx0XHRcdFx0XHRcdHRvayA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdHdoaWxlICgxKSB7XG5cdFx0XHRcdFx0XHRpZiAodG9rLnR5cGUgIT09ICdudW1iZXInKSB0aHJvdyBcIkV4cGVjdGVkIHRvcCBudW1iZXIgb2YgbWV0ZXJcIjtcblx0XHRcdFx0XHRcdHJldC52YWx1ZSArPSBwYXJzZUludCh0b2sudG9rZW4pO1xuXHRcdFx0XHRcdFx0cmV0Lm51bSArPSB0b2sudG9rZW47XG5cdFx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCB8fCB0b2tlbnNbMF0udG9rZW4gPT09ICcvJykgcmV0dXJuIHJldDtcblx0XHRcdFx0XHRcdHRvayA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0aWYgKHRvay50b2tlbiA9PT0gJyknKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwIHx8IHRva2Vuc1swXS50b2tlbiA9PT0gJy8nKSByZXR1cm4gcmV0O1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBcIlVuZXhwZWN0ZWQgcGFyZW4gaW4gbWV0ZXJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICh0b2sudG9rZW4gIT09ICcuJyAmJiB0b2sudG9rZW4gIT09ICcrJykgdGhyb3cgXCJFeHBlY3RlZCB0b3AgbnVtYmVyIG9mIG1ldGVyXCI7XG5cdFx0XHRcdFx0XHRyZXQubnVtICs9IHRvay50b2tlbjtcblx0XHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB0aHJvdyBcIkV4cGVjdGVkIHRvcCBudW1iZXIgb2YgbWV0ZXJcIjtcblx0XHRcdFx0XHRcdHRvayA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcmV0O1x0Ly8ganVzdCB0byBzdXBwcmVzcyB3YXJuaW5nXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dmFyIHBhcnNlRnJhY3Rpb24gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQvLyBoYW5kbGVzIHRoaXMgbXVjaDogcGFyc2VOdW0gc2xhc2ggZGVjaW1hbFxuXHRcdFx0XHRcdHZhciByZXQgPSBwYXJzZU51bSgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSByZXR1cm4gcmV0O1xuXHRcdFx0XHRcdHZhciB0b2sgPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rLnRva2VuICE9PSAnLycpIHRocm93IFwiRXhwZWN0ZWQgc2xhc2ggaW4gbWV0ZXJcIjtcblx0XHRcdFx0XHR0b2sgPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rLnR5cGUgIT09ICdudW1iZXInKSB0aHJvdyBcIkV4cGVjdGVkIGJvdHRvbSBudW1iZXIgb2YgbWV0ZXJcIjtcblx0XHRcdFx0XHRyZXQuZGVuID0gdG9rLnRva2VuO1xuXHRcdFx0XHRcdHJldC52YWx1ZSA9IHJldC52YWx1ZSAvIHBhcnNlSW50KHJldC5kZW4pO1xuXHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHRocm93IFwiRXhwZWN0ZWQgbWV0ZXIgZGVmaW5pdGlvbiBpbiBNOiBsaW5lXCI7XG5cdFx0XHRcdHZhciBtZXRlciA9IHt0eXBlOiAnc3BlY2lmaWVkJywgdmFsdWU6IFsgXX07XG5cdFx0XHRcdHZhciB0b3RhbExlbmd0aCA9IDA7XG5cdFx0XHRcdHdoaWxlICgxKSB7XG5cdFx0XHRcdFx0dmFyIHJldCA9IHBhcnNlRnJhY3Rpb24oKTtcblx0XHRcdFx0XHR0b3RhbExlbmd0aCArPSByZXQudmFsdWU7XG5cdFx0XHRcdFx0dmFyIG12ID0geyBudW06IHJldC5udW0gfTtcblx0XHRcdFx0XHRpZiAocmV0LmRlbiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0bXYuZGVuID0gcmV0LmRlbjtcblx0XHRcdFx0XHRtZXRlci52YWx1ZS5wdXNoKG12KTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG5cdFx0XHRcdFx0Ly92YXIgdG9rID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0Ly9pZiAodG9rLnRva2VuICE9PSAnKycpIHRocm93IFwiRXh0cmEgY2hhcmFjdGVycyBpbiBNOiBsaW5lXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSB0b3RhbExlbmd0aCA8IDAuNzUgPyAwLjA2MjUgOiAwLjEyNTtcblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1ldGVyO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR3YXJuKGUsIGxpbmUsIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHR0aGlzLmNhbGNUZW1wbyA9IGZ1bmN0aW9uKHJlbFRlbXBvKSB7XG5cdFx0dmFyIGR1ciA9IDEvNDtcblx0XHRpZiAobXVsdGlsaW5lVmFycy5tZXRlciAmJiBtdWx0aWxpbmVWYXJzLm1ldGVyLnR5cGUgPT09ICdzcGVjaWZpZWQnKSB7XG5cdFx0XHRkdXIgPSAxIC8gcGFyc2VJbnQobXVsdGlsaW5lVmFycy5tZXRlci52YWx1ZVswXS5kZW4pO1xuXHRcdH0gZWxzZSBpZiAobXVsdGlsaW5lVmFycy5vcmlnTWV0ZXIgJiYgbXVsdGlsaW5lVmFycy5vcmlnTWV0ZXIudHlwZSA9PT0gJ3NwZWNpZmllZCcpIHtcblx0XHRcdGR1ciA9IDEgLyBwYXJzZUludChtdWx0aWxpbmVWYXJzLm9yaWdNZXRlci52YWx1ZVswXS5kZW4pO1xuXHRcdH1cblx0XHQvL3ZhciBkdXIgPSBtdWx0aWxpbmVWYXJzLmRlZmF1bHRfbGVuZ3RoID8gbXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCA6IDE7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZWxUZW1wby5kdXJhdGlvbjsgaSsrKVxuXHRcdFx0cmVsVGVtcG8uZHVyYXRpb25baV0gPSBkdXIgKiByZWxUZW1wby5kdXJhdGlvbltpXTtcblx0XHRyZXR1cm4gcmVsVGVtcG87XG5cdH07XG5cblx0dGhpcy5yZXNvbHZlVGVtcG8gPSBmdW5jdGlvbigpIHtcblx0XHRpZiAobXVsdGlsaW5lVmFycy50ZW1wbykge1x0Ly8gSWYgdGhlcmUncyBhIHRlbXBvIHdhaXRpbmcgdG8gYmUgcmVzb2x2ZWRcblx0XHRcdHRoaXMuY2FsY1RlbXBvKG11bHRpbGluZVZhcnMudGVtcG8pO1xuXHRcdFx0dHVuZS5tZXRhVGV4dC50ZW1wbyA9IG11bHRpbGluZVZhcnMudGVtcG87XG5cdFx0XHRkZWxldGUgbXVsdGlsaW5lVmFycy50ZW1wbztcblx0XHR9XG5cdH07XG5cblx0dGhpcy5hZGRVc2VyRGVmaW5pdGlvbiA9IGZ1bmN0aW9uKGxpbmUsIHN0YXJ0LCBlbmQpIHtcblx0XHR2YXIgZXF1YWxzID0gbGluZS5pbmRleE9mKCc9Jywgc3RhcnQpO1xuXHRcdGlmIChlcXVhbHMgPT09IC0xKSB7XG5cdFx0XHR3YXJuKFwiTmVlZCBhbiA9IGluIGEgbWFjcm8gZGVmaW5pdGlvblwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGJlZm9yZSA9IHBhcnNlQ29tbW9uLnN0cmlwKGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBlcXVhbHMpKTtcblx0XHR2YXIgYWZ0ZXIgPSBwYXJzZUNvbW1vbi5zdHJpcChsaW5lLnN1YnN0cmluZyhlcXVhbHMrMSkpO1xuXG5cdFx0aWYgKGJlZm9yZS5sZW5ndGggIT09IDEpIHtcblx0XHRcdHdhcm4oXCJNYWNybyBkZWZpbml0aW9ucyBjYW4gb25seSBiZSBvbmUgY2hhcmFjdGVyXCIsIGxpbmUsIHN0YXJ0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dmFyIGxlZ2FsQ2hhcnMgPSBcIkhJSktMTU5PUFFSU1RVVldYWWhpamtsbW5vcHFyc3R1dnd+XCI7XG5cdFx0aWYgKGxlZ2FsQ2hhcnMuaW5kZXhPZihiZWZvcmUpID09PSAtMSkge1xuXHRcdFx0d2FybihcIk1hY3JvIGRlZmluaXRpb25zIG11c3QgYmUgSC1ZLCBoLXcsIG9yIHRpbGRlXCIsIGxpbmUsIHN0YXJ0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGFmdGVyLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0d2FybihcIk1pc3NpbmcgbWFjcm8gZGVmaW5pdGlvblwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChtdWx0aWxpbmVWYXJzLm1hY3JvcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bXVsdGlsaW5lVmFycy5tYWNyb3MgPSB7fTtcblx0XHRtdWx0aWxpbmVWYXJzLm1hY3Jvc1tiZWZvcmVdID0gYWZ0ZXI7XG5cdH07XG5cblx0dGhpcy5zZXREZWZhdWx0TGVuZ3RoID0gZnVuY3Rpb24obGluZSwgc3RhcnQsIGVuZCkge1xuXHRcdHZhciBsZW4gPSBwYXJzZUNvbW1vbi5nc3ViKGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLCBcIiBcIiwgXCJcIik7XG5cdFx0dmFyIGxlbl9hcnIgPSBsZW4uc3BsaXQoJy8nKTtcblx0XHRpZiAobGVuX2Fyci5sZW5ndGggPT09IDIpIHtcblx0XHRcdHZhciBuID0gcGFyc2VJbnQobGVuX2FyclswXSk7XG5cdFx0XHR2YXIgZCA9IHBhcnNlSW50KGxlbl9hcnJbMV0pO1xuXHRcdFx0aWYgKGQgPiAwKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSBuIC8gZDtcdC8vIGEgd2hvbGUgbm90ZSBpcyAxXG5cdFx0XHRcdG11bHRpbGluZVZhcnMuaGF2ZW50X3NldF9sZW5ndGggPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGxlbl9hcnIubGVuZ3RoID09PSAxICYmIGxlbl9hcnJbMF0gPT09ICcxJykge1xuXHRcdFx0bXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCA9IDE7XG5cdFx0XHRtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID0gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cblx0dmFyIHRlbXBvU3RyaW5nID0ge1xuXG5cdFx0bGFyZ2hpc3NpbW86IDIwLFxuXHRcdGFkYWdpc3NpbW86IDI0LFxuXHRcdHNvc3RlbnV0bzogMjgsXG5cdFx0Z3JhdmU6IDMyLFxuXHRcdGxhcmdvOiA0MCxcblx0XHRsZW50bzogNTAsXG5cdFx0bGFyZ2hldHRvOiA2MCxcblx0XHRhZGFnaW86IDY4LFxuXHRcdGFkYWdpZXR0bzogNzQsXG5cdFx0YW5kYW50ZTogODAsXG5cdFx0YW5kYW50aW5vOiA4OCxcblx0XHRcIm1hcmNpYSBtb2RlcmF0b1wiOiA4NCxcblx0XHRcImFuZGFudGUgbW9kZXJhdG9cIjogMTAwLFxuXHRcdG1vZGVyYXRvOiAxMTIsXG5cdFx0YWxsZWdyZXR0bzogMTE2LFxuXHRcdFwiYWxsZWdybyBtb2RlcmF0b1wiOiAxMjAsXG5cdFx0YWxsZWdybzogMTI2LFxuXHRcdGFuaW1hdG86IDEzMixcblx0XHRhZ2l0YXRvOiAxNDAsXG5cdFx0dmVsb2NlOiAxNDgsXG5cdFx0XCJtb3NzbyB2aXZvXCI6IDE1Nixcblx0XHR2aXZhY2U6IDE2NCxcblx0XHR2aXZhY2lzc2ltbzogMTcyLFxuXHRcdGFsbGVncmlzc2ltbzogMTc2LFxuXHRcdHByZXN0bzogMTg0LFxuXHRcdHByZXN0aXNzaW1vOiAyMTAsXG5cdH07XG5cblx0dGhpcy5zZXRUZW1wbyA9IGZ1bmN0aW9uKGxpbmUsIHN0YXJ0LCBlbmQpIHtcblx0XHQvL1EgLSB0ZW1wbzsgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbm90ZXMgcGVyIG1pbnV0ZSwgZS5nLiBJZlxuXHRcdC8vdGhlIG1ldGVyIGRlbm9taW5hdG9yIGlzIGEgNCBub3RlIHRoZW4gUToxMjAgb3IgUTpDPTEyMFxuXHRcdC8vaXMgMTIwIHF1YXJ0ZXIgbm90ZXMgcGVyIG1pbnV0ZS4gU2ltaWxhcmx5ICBROkMzPTQwIHdvdWxkIGJlIDQwXG5cdFx0Ly9kb3R0ZWQgaGFsZiBub3RlcyBwZXIgbWludXRlLiBBbiBhYnNvbHV0ZSB0ZW1wbyBtYXkgYWxzbyBiZVxuXHRcdC8vc2V0LCBlLmcuIFE6MS84PTEyMCBpcyAxMjAgZWlnaHRoIG5vdGVzIHBlciBtaW51dGUsXG5cdFx0Ly9pcnJlc3BlY3RpdmUgb2YgdGhlIG1ldGVyJ3MgZGVub21pbmF0b3IuXG5cdFx0Ly9cblx0XHQvLyBUaGlzIGlzIGVpdGhlciBhIG51bWJlciwgXCJDPW51bWJlclwiLCBcIkNudW1iZXI9bnVtYmVyXCIsIG9yIGZyYWN0aW9uIFtmcmFjdGlvbi4uLl09bnVtYmVyXG5cdFx0Ly8gSXQgZGVwZW5kcyBvbiB0aGUgTTogZmllbGQsIHdoaWNoIG1heSBlaXRoZXIgbm90IGJlIHByZXNlbnQsIG9yIG1heSBhcHBlYXIgYWZ0ZXIgdGhpcy5cblx0XHQvLyBJZiBNOiBpcyBub3QgcHJlc2VudCwgYW4gZWlnaHRoIG5vdGUgaXMgdXNlZC5cblx0XHQvLyBUaGF0IG1lYW5zIHRoYXQgdGhpcyBmaWVsZCBjYW4ndCBiZSBjYWxjdWxhdGVkIHVudGlsIHRoZSBlbmQsIGlmIGl0IGlzIHRoZSBmaXJzdCB0aHJlZSB0eXBlcywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB3ZSdsbCBzZWUgYW4gTTogZmllbGQuXG5cdFx0Ly8gU28sIGlmIGl0IGlzIHRoZSBmb3VydGggdHlwZSwgc2V0IGl0IGhlcmUsIG90aGVyd2lzZSwgc2F2ZSB0aGUgaW5mbyBpbiB0aGUgbXVsdGlsaW5lVmFycy5cblx0XHQvLyBUaGUgdGVtcG9yYXJ5IHZhcmlhYmxlcyB3ZSBrZWVwIGFyZSB0aGUgZHVyYXRpb24gYW5kIHRoZSBicG0uIEluIHRoZSBmaXJzdCB0d28gZm9ybXMsIHRoZSBkdXJhdGlvbiBpcyAxLlxuXHRcdC8vIEluIGFkZGl0aW9uLCBhIHF1b3RlZCBzdHJpbmcgbWF5IGJvdGggcHJlY2VkZSBhbmQgZm9sbG93LiBJZiBhIHF1b3RlZCBzdHJpbmcgaXMgcHJlc2VudCwgdGhlbiB0aGUgZHVyYXRpb24gcGFydCBpcyBvcHRpb25hbC5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHRva2VucyA9IHRva2VuaXplci50b2tlbml6ZShsaW5lLCBzdGFydCwgZW5kKTtcblxuXHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHRocm93IFwiTWlzc2luZyBwYXJhbWV0ZXIgaW4gUTogZmllbGRcIjtcblxuXHRcdFx0dmFyIHRlbXBvID0ge307XG5cdFx0XHR2YXIgZGVsYXlTZXQgPSB0cnVlO1xuXHRcdFx0dmFyIHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gJ3F1b3RlJykge1xuXHRcdFx0XHR0ZW1wby5wcmVTdHJpbmcgPSB0b2tlbi50b2tlbjtcblx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHtcdC8vIEl0J3Mgb2sgdG8ganVzdCBnZXQgYSBzdHJpbmcgZm9yIHRoZSB0ZW1wb1xuXHRcdFx0XHRcdC8vIElmIHRoZSBzdHJpbmcgaXMgYSB3ZWxsLWtub3duIHRlbXBvLCBwdXQgaW4gdGhlIGJwbVxuXHRcdFx0XHRcdGlmICh0ZW1wb1N0cmluZ1t0ZW1wby5wcmVTdHJpbmcudG9Mb3dlckNhc2UoKV0pIHtcblx0XHRcdFx0XHRcdHRlbXBvLmJwbSA9IHRlbXBvU3RyaW5nW3RlbXBvLnByZVN0cmluZy50b0xvd2VyQ2FzZSgpXTtcblx0XHRcdFx0XHRcdHRlbXBvLnN1cHByZXNzQnBtID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHt0eXBlOiAnaW1tZWRpYXRlJywgdGVtcG86IHRlbXBvfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRva2VuLnR5cGUgPT09ICdhbHBoYScgJiYgdG9rZW4udG9rZW4gPT09ICdDJylcdCB7IC8vIGVpdGhlciB0eXBlIDIgb3IgdHlwZSAzXG5cdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB0aHJvdyBcIk1pc3NpbmcgdGVtcG8gYWZ0ZXIgQyBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gJ3B1bmN0JyAmJiB0b2tlbi50b2tlbiA9PT0gJz0nKSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHR5cGUgMiBmb3JtYXQuIFRoZSBkdXJhdGlvbiBpcyBhbiBpbXBsaWVkIDFcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgdGhyb3cgXCJNaXNzaW5nIHRlbXBvIGFmdGVyID0gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAnbnVtYmVyJykgdGhyb3cgXCJFeHBlY3RlZCBudW1iZXIgYWZ0ZXIgPSBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHRcdHRlbXBvLmR1cmF0aW9uID0gWzFdO1xuXHRcdFx0XHRcdHRlbXBvLmJwbSA9IHBhcnNlSW50KHRva2VuLnRva2VuKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRcdC8vIFRoaXMgaXMgYSB0eXBlIDMgZm9ybWF0LlxuXHRcdFx0XHRcdHRlbXBvLmR1cmF0aW9uID0gW3BhcnNlSW50KHRva2VuLnRva2VuKV07XG5cdFx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHRocm93IFwiTWlzc2luZyA9IGFmdGVyIGR1cmF0aW9uIGluIFE6IGZpZWxkXCI7XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udHlwZSAhPT0gJ3B1bmN0JyB8fCB0b2tlbi50b2tlbiAhPT0gJz0nKSB0aHJvdyBcIkV4cGVjdGVkID0gYWZ0ZXIgZHVyYXRpb24gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgdGhyb3cgXCJNaXNzaW5nIHRlbXBvIGFmdGVyID0gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAnbnVtYmVyJykgdGhyb3cgXCJFeHBlY3RlZCBudW1iZXIgYWZ0ZXIgPSBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHRcdHRlbXBvLmJwbSA9IHBhcnNlSW50KHRva2VuLnRva2VuKTtcblx0XHRcdFx0fSBlbHNlIHRocm93IFwiRXhwZWN0ZWQgbnVtYmVyIG9yIGVxdWFsIGFmdGVyIEMgaW4gUTogZmllbGRcIjtcblxuXHRcdFx0fSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAnbnVtYmVyJykge1x0Ly8gZWl0aGVyIHR5cGUgMSBvciB0eXBlIDRcblx0XHRcdFx0dmFyIG51bSA9IHBhcnNlSW50KHRva2VuLnRva2VuKTtcblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDAgfHwgdG9rZW5zWzBdLnR5cGUgPT09ICdxdW90ZScpIHtcblx0XHRcdFx0XHQvLyBUaGlzIGlzIHR5cGUgMVxuXHRcdFx0XHRcdHRlbXBvLmR1cmF0aW9uID0gWzFdO1xuXHRcdFx0XHRcdHRlbXBvLmJwbSA9IG51bTtcblx0XHRcdFx0fSBlbHNlIHtcdC8vIFRoaXMgaXMgdHlwZSA0XG5cdFx0XHRcdFx0ZGVsYXlTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAncHVuY3QnICYmIHRva2VuLnRva2VuICE9PSAnLycpIHRocm93IFwiRXhwZWN0ZWQgZnJhY3Rpb24gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAnbnVtYmVyJykgdGhyb3cgXCJFeHBlY3RlZCBmcmFjdGlvbiBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHRcdHZhciBkZW4gPSBwYXJzZUludCh0b2tlbi50b2tlbik7XG5cdFx0XHRcdFx0dGVtcG8uZHVyYXRpb24gPSBbbnVtL2Rlbl07XG5cdFx0XHRcdFx0Ly8gV2UgZ290IHRoZSBmaXJzdCBmcmFjdGlvbiwga2VlcCBnZXR0aW5nIG1vcmUgYXMgbG9uZyBhcyB3ZSBmaW5kIHRoZW0uXG5cdFx0XHRcdFx0d2hpbGUgKHRva2Vucy5sZW5ndGggPiAwICAmJiB0b2tlbnNbMF0udG9rZW4gIT09ICc9JyAmJiB0b2tlbnNbMF0udHlwZSAhPT0gJ3F1b3RlJykge1xuXHRcdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAnbnVtYmVyJykgdGhyb3cgXCJFeHBlY3RlZCBmcmFjdGlvbiBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHRcdFx0bnVtID0gcGFyc2VJbnQodG9rZW4udG9rZW4pO1xuXHRcdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAncHVuY3QnICYmIHRva2VuLnRva2VuICE9PSAnLycpIHRocm93IFwiRXhwZWN0ZWQgZnJhY3Rpb24gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0XHRpZiAodG9rZW4udHlwZSAhPT0gJ251bWJlcicpIHRocm93IFwiRXhwZWN0ZWQgZnJhY3Rpb24gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHRcdGRlbiA9IHBhcnNlSW50KHRva2VuLnRva2VuKTtcblx0XHRcdFx0XHRcdHRlbXBvLmR1cmF0aW9uLnB1c2gobnVtL2Rlbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKHRva2VuLnR5cGUgIT09ICdwdW5jdCcgJiYgdG9rZW4udG9rZW4gIT09ICc9JykgdGhyb3cgXCJFeHBlY3RlZCA9IGluIFE6IGZpZWxkXCI7XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udHlwZSAhPT0gJ251bWJlcicpIHRocm93IFwiRXhwZWN0ZWQgdGVtcG8gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHR0ZW1wby5icG0gPSBwYXJzZUludCh0b2tlbi50b2tlbik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB0aHJvdyBcIlVua25vd24gdmFsdWUgaW4gUTogZmllbGRcIjtcblx0XHRcdGlmICh0b2tlbnMubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdGlmICh0b2tlbi50eXBlID09PSAncXVvdGUnKSB7XG5cdFx0XHRcdFx0dGVtcG8ucG9zdFN0cmluZyA9IHRva2VuLnRva2VuO1xuXHRcdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggIT09IDApIHRocm93IFwiVW5leHBlY3RlZCBzdHJpbmcgYXQgZW5kIG9mIFE6IGZpZWxkXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5wcmludFRlbXBvID09PSBmYWxzZSlcblx0XHRcdFx0dGVtcG8uc3VwcHJlc3MgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHt0eXBlOiBkZWxheVNldD8nZGVsYXlTZXQnOidpbW1lZGlhdGUnLCB0ZW1wbzogdGVtcG99O1xuXHRcdH0gY2F0Y2ggKG1zZykge1xuXHRcdFx0d2Fybihtc2csIGxpbmUsIHN0YXJ0KTtcblx0XHRcdHJldHVybiB7dHlwZTogJ25vbmUnfTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5sZXR0ZXJfdG9faW5saW5lX2hlYWRlciA9IGZ1bmN0aW9uKGxpbmUsIGkpXG5cdHtcblx0XHR2YXIgd3MgPSB0b2tlbml6ZXIuZWF0V2hpdGVTcGFjZShsaW5lLCBpKTtcblx0XHRpICs9d3M7XG5cdFx0aWYgKGxpbmUubGVuZ3RoID49IGkrNSAmJiBsaW5lLmNoYXJBdChpKSA9PT0gJ1snICYmIGxpbmUuY2hhckF0KGkrMikgPT09ICc6Jykge1xuXHRcdFx0dmFyIGUgPSBsaW5lLmluZGV4T2YoJ10nLCBpKTtcblx0XHRcdHZhciBzdGFydENoYXIgPSBtdWx0aWxpbmVWYXJzLmlDaGFyICsgaTtcblx0XHRcdHZhciBlbmRDaGFyID0gbXVsdGlsaW5lVmFycy5pQ2hhciArIGUgKyAxO1xuXHRcdFx0c3dpdGNoKGxpbmUuc3Vic3RyaW5nKGksIGkrMykpXG5cdFx0XHR7XG5cdFx0XHRcdGNhc2UgXCJbSTpcIjpcblx0XHRcdFx0XHR2YXIgZXJyID0gcGFyc2VEaXJlY3RpdmUuYWRkRGlyZWN0aXZlKGxpbmUuc3Vic3RyaW5nKGkrMywgZSkpO1xuXHRcdFx0XHRcdGlmIChlcnIpIHdhcm4oZXJyLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cyBdO1xuXHRcdFx0XHRjYXNlIFwiW006XCI6XG5cdFx0XHRcdFx0dmFyIG1ldGVyID0gdGhpcy5zZXRNZXRlcihsaW5lLnN1YnN0cmluZyhpKzMsIGUpKTtcblx0XHRcdFx0XHRpZiAodHVuZS5oYXNCZWdpbk11c2ljKCkgJiYgbWV0ZXIpXG5cdFx0XHRcdFx0XHR0dW5lLmFwcGVuZFN0YXJ0aW5nRWxlbWVudCgnbWV0ZXInLCBzdGFydENoYXIsIGVuZENoYXIsIG1ldGVyKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm1ldGVyID0gbWV0ZXI7XG5cdFx0XHRcdFx0cmV0dXJuIFsgZS1pKzErd3MgXTtcblx0XHRcdFx0Y2FzZSBcIltLOlwiOlxuXHRcdFx0XHRcdHZhciByZXN1bHQgPSBwYXJzZUtleVZvaWNlLnBhcnNlS2V5KGxpbmUuc3Vic3RyaW5nKGkrMywgZSkpO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQuZm91bmRDbGVmICYmIHR1bmUuaGFzQmVnaW5NdXNpYygpKVxuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRTdGFydGluZ0VsZW1lbnQoJ2NsZWYnLCBzdGFydENoYXIsIGVuZENoYXIsIG11bHRpbGluZVZhcnMuY2xlZik7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdC5mb3VuZEtleSAmJiB0dW5lLmhhc0JlZ2luTXVzaWMoKSlcblx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kU3RhcnRpbmdFbGVtZW50KCdrZXknLCBzdGFydENoYXIsIGVuZENoYXIsIHBhcnNlS2V5Vm9pY2UuZml4S2V5KG11bHRpbGluZVZhcnMuY2xlZiwgbXVsdGlsaW5lVmFycy5rZXkpKTtcblx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cyBdO1xuXHRcdFx0XHRjYXNlIFwiW1A6XCI6XG5cdFx0XHRcdFx0aWYgKHR1bmUubGluZXMubGVuZ3RoIDw9IHR1bmUubGluZU51bSlcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMucGFydEZvck5leHRMaW5lID0geyB0aXRsZTogbGluZS5zdWJzdHJpbmcoaSszLCBlKSwgc3RhcnRDaGFyOiBzdGFydENoYXIsIGVuZENoYXI6IGVuZENoYXIgfTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0dW5lLmFwcGVuZEVsZW1lbnQoJ3BhcnQnLCBzdGFydENoYXIsIGVuZENoYXIsIHt0aXRsZTogbGluZS5zdWJzdHJpbmcoaSszLCBlKX0pO1xuXHRcdFx0XHRcdHJldHVybiBbIGUtaSsxK3dzIF07XG5cdFx0XHRcdGNhc2UgXCJbTDpcIjpcblx0XHRcdFx0XHR0aGlzLnNldERlZmF1bHRMZW5ndGgobGluZSwgaSszLCBlKTtcblx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cyBdO1xuXHRcdFx0XHRjYXNlIFwiW1E6XCI6XG5cdFx0XHRcdFx0aWYgKGUgPiAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgdGVtcG8gPSB0aGlzLnNldFRlbXBvKGxpbmUsIGkrMywgZSk7XG5cdFx0XHRcdFx0XHRpZiAodGVtcG8udHlwZSA9PT0gJ2RlbGF5U2V0JykgdHVuZS5hcHBlbmRFbGVtZW50KCd0ZW1wbycsIHN0YXJ0Q2hhciwgZW5kQ2hhciwgdGhpcy5jYWxjVGVtcG8odGVtcG8udGVtcG8pKTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKHRlbXBvLnR5cGUgPT09ICdpbW1lZGlhdGUnKSB0dW5lLmFwcGVuZEVsZW1lbnQoJ3RlbXBvJywgc3RhcnRDaGFyLCBlbmRDaGFyLCB0ZW1wby50ZW1wbyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cywgbGluZS5jaGFyQXQoaSsxKSwgbGluZS5zdWJzdHJpbmcoaSszLCBlKV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiW1Y6XCI6XG5cdFx0XHRcdFx0aWYgKGUgPiAwKSB7XG5cdFx0XHRcdFx0XHRwYXJzZUtleVZvaWNlLnBhcnNlVm9pY2UobGluZSwgaSszLCBlKTtcblx0XHRcdFx0XHRcdC8vc3RhcnROZXdMaW5lKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cywgbGluZS5jaGFyQXQoaSsxKSwgbGluZS5zdWJzdHJpbmcoaSszLCBlKV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gVE9ETzogY29tcGxhaW4gYWJvdXQgdW5oYW5kbGVkIGhlYWRlclxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gWyAwIF07XG5cdH07XG5cblx0dGhpcy5sZXR0ZXJfdG9fYm9keV9oZWFkZXIgPSBmdW5jdGlvbihsaW5lLCBpKVxuXHR7XG5cdFx0aWYgKGxpbmUubGVuZ3RoID49IGkrMykge1xuXHRcdFx0c3dpdGNoKGxpbmUuc3Vic3RyaW5nKGksIGkrMikpXG5cdFx0XHR7XG5cdFx0XHRcdGNhc2UgXCJJOlwiOlxuXHRcdFx0XHRcdHZhciBlcnIgPSBwYXJzZURpcmVjdGl2ZS5hZGREaXJlY3RpdmUobGluZS5zdWJzdHJpbmcoaSsyKSk7XG5cdFx0XHRcdFx0aWYgKGVycikgd2FybihlcnIsIGxpbmUsIGkpO1xuXHRcdFx0XHRcdHJldHVybiBbIGxpbmUubGVuZ3RoIF07XG5cdFx0XHRcdGNhc2UgXCJNOlwiOlxuXHRcdFx0XHRcdHZhciBtZXRlciA9IHRoaXMuc2V0TWV0ZXIobGluZS5zdWJzdHJpbmcoaSsyKSk7XG5cdFx0XHRcdFx0aWYgKHR1bmUuaGFzQmVnaW5NdXNpYygpICYmIG1ldGVyKVxuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRTdGFydGluZ0VsZW1lbnQoJ21ldGVyJywgbXVsdGlsaW5lVmFycy5pQ2hhciArIGksIG11bHRpbGluZVZhcnMuaUNoYXIgKyBsaW5lLmxlbmd0aCwgbWV0ZXIpO1xuXHRcdFx0XHRcdHJldHVybiBbIGxpbmUubGVuZ3RoIF07XG5cdFx0XHRcdGNhc2UgXCJLOlwiOlxuXHRcdFx0XHRcdHZhciByZXN1bHQgPSBwYXJzZUtleVZvaWNlLnBhcnNlS2V5KGxpbmUuc3Vic3RyaW5nKGkrMikpO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQuZm91bmRDbGVmICYmIHR1bmUuaGFzQmVnaW5NdXNpYygpKVxuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRTdGFydGluZ0VsZW1lbnQoJ2NsZWYnLCBtdWx0aWxpbmVWYXJzLmlDaGFyICsgaSwgbXVsdGlsaW5lVmFycy5pQ2hhciArIGxpbmUubGVuZ3RoLCBtdWx0aWxpbmVWYXJzLmNsZWYpO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQuZm91bmRLZXkgJiYgdHVuZS5oYXNCZWdpbk11c2ljKCkpXG5cdFx0XHRcdFx0XHR0dW5lLmFwcGVuZFN0YXJ0aW5nRWxlbWVudCgna2V5JywgbXVsdGlsaW5lVmFycy5pQ2hhciArIGksIG11bHRpbGluZVZhcnMuaUNoYXIgKyBsaW5lLmxlbmd0aCwgcGFyc2VLZXlWb2ljZS5maXhLZXkobXVsdGlsaW5lVmFycy5jbGVmLCBtdWx0aWxpbmVWYXJzLmtleSkpO1xuXHRcdFx0XHRcdHJldHVybiBbIGxpbmUubGVuZ3RoIF07XG5cdFx0XHRcdGNhc2UgXCJQOlwiOlxuXHRcdFx0XHRcdGlmICh0dW5lLmhhc0JlZ2luTXVzaWMoKSlcblx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kRWxlbWVudCgncGFydCcsIG11bHRpbGluZVZhcnMuaUNoYXIgKyBpLCBtdWx0aWxpbmVWYXJzLmlDaGFyICsgbGluZS5sZW5ndGgsIHt0aXRsZTogbGluZS5zdWJzdHJpbmcoaSsyKX0pO1xuXHRcdFx0XHRcdHJldHVybiBbIGxpbmUubGVuZ3RoIF07XG5cdFx0XHRcdGNhc2UgXCJMOlwiOlxuXHRcdFx0XHRcdHRoaXMuc2V0RGVmYXVsdExlbmd0aChsaW5lLCBpKzIsIGxpbmUubGVuZ3RoKTtcblx0XHRcdFx0XHRyZXR1cm4gWyBsaW5lLmxlbmd0aCBdO1xuXHRcdFx0XHRjYXNlIFwiUTpcIjpcblx0XHRcdFx0XHR2YXIgZSA9IGxpbmUuaW5kZXhPZignXFx4MTInLCBpKzIpO1xuXHRcdFx0XHRcdGlmIChlID09PSAtMSkgZSA9IGxpbmUubGVuZ3RoO1xuXHRcdFx0XHRcdHZhciB0ZW1wbyA9IHRoaXMuc2V0VGVtcG8obGluZSwgaSsyLCBlKTtcblx0XHRcdFx0XHRpZiAodGVtcG8udHlwZSA9PT0gJ2RlbGF5U2V0JykgdHVuZS5hcHBlbmRFbGVtZW50KCd0ZW1wbycsIG11bHRpbGluZVZhcnMuaUNoYXIgKyBpLCBtdWx0aWxpbmVWYXJzLmlDaGFyICsgbGluZS5sZW5ndGgsIHRoaXMuY2FsY1RlbXBvKHRlbXBvLnRlbXBvKSk7XG5cdFx0XHRcdFx0ZWxzZSBpZiAodGVtcG8udHlwZSA9PT0gJ2ltbWVkaWF0ZScpIHR1bmUuYXBwZW5kRWxlbWVudCgndGVtcG8nLCBtdWx0aWxpbmVWYXJzLmlDaGFyICsgaSwgbXVsdGlsaW5lVmFycy5pQ2hhciArIGxpbmUubGVuZ3RoLCB0ZW1wby50ZW1wbyk7XG5cdFx0XHRcdHJldHVybiBbIGUsIGxpbmUuY2hhckF0KGkpLCBwYXJzZUNvbW1vbi5zdHJpcChsaW5lLnN1YnN0cmluZyhpKzIpKV07XG5cdFx0XHRcdGNhc2UgXCJWOlwiOlxuXHRcdFx0XHRcdHBhcnNlS2V5Vm9pY2UucGFyc2VWb2ljZShsaW5lLCBpKzIsIGxpbmUubGVuZ3RoKTtcbi8vXHRcdFx0XHRcdFx0c3RhcnROZXdMaW5lKCk7XG5cdFx0XHRcdFx0cmV0dXJuIFsgbGluZS5sZW5ndGgsIGxpbmUuY2hhckF0KGkpLCBwYXJzZUNvbW1vbi5zdHJpcChsaW5lLnN1YnN0cmluZyhpKzIpKV07XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gVE9ETzogY29tcGxhaW4gYWJvdXQgdW5oYW5kbGVkIGhlYWRlclxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gWyAwIF07XG5cdH07XG5cblx0dmFyIG1ldGFUZXh0SGVhZGVycyA9IHtcblx0XHRBOiAnYXV0aG9yJyxcblx0XHRCOiAnYm9vaycsXG5cdFx0QzogJ2NvbXBvc2VyJyxcblx0XHREOiAnZGlzY29ncmFwaHknLFxuXHRcdEY6ICd1cmwnLFxuXHRcdEc6ICdncm91cCcsXG5cdFx0STogJ2luc3RydWN0aW9uJyxcblx0XHROOiAnbm90ZXMnLFxuXHRcdE86ICdvcmlnaW4nLFxuXHRcdFI6ICdyaHl0aG0nLFxuXHRcdFM6ICdzb3VyY2UnLFxuXHRcdFc6ICd1bmFsaWduZWRXb3JkcycsXG5cdFx0WjogJ3RyYW5zY3JpcHRpb24nXG5cdH07XG5cblx0dGhpcy5wYXJzZUhlYWRlciA9IGZ1bmN0aW9uKGxpbmUpIHtcblx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChsaW5lLCAnJSUnKSkge1xuXHRcdFx0dmFyIGVyciA9IHBhcnNlRGlyZWN0aXZlLmFkZERpcmVjdGl2ZShsaW5lLnN1YnN0cmluZygyKSk7XG5cdFx0XHRpZiAoZXJyKSB3YXJuKGVyciwgbGluZSwgMik7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXHRcdHZhciBpID0gbGluZS5pbmRleE9mKCclJyk7XG5cdFx0aWYgKGkgPj0gMClcblx0XHRcdGxpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBpKTtcblx0XHRsaW5lID0gbGluZS5yZXBsYWNlKC9cXHMrJC8sICcnKTtcblxuXHRcdGlmIChsaW5lLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdGlmIChsaW5lLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRpZiAobGluZS5jaGFyQXQoMSkgPT09ICc6Jykge1xuXHRcdFx0XHR2YXIgbmV4dExpbmUgPSBcIlwiO1xuXHRcdFx0XHRpZiAobGluZS5pbmRleE9mKCdcXHgxMicpID49IDAgJiYgbGluZS5jaGFyQXQoMCkgIT09ICd3Jykge1x0Ly8gdzogaXMgdGhlIG9ubHkgaGVhZGVyIGZpZWxkIHRoYXQgY2FuIGhhdmUgYSBjb250aW51YXRpb24uXG5cdFx0XHRcdFx0bmV4dExpbmUgPSBsaW5lLnN1YnN0cmluZyhsaW5lLmluZGV4T2YoJ1xceDEyJykrMSk7XG5cdFx0XHRcdFx0bGluZSA9IGxpbmUuc3Vic3RyaW5nKDAsIGxpbmUuaW5kZXhPZignXFx4MTInKSk7XHQvL1RoaXMgaGFuZGxlcyBhIGNvbnRpbnVhdGlvbiBtYXJrIG9uIGEgaGVhZGVyIGZpZWxkXG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGZpZWxkID0gbWV0YVRleHRIZWFkZXJzW2xpbmUuY2hhckF0KDApXTtcblx0XHRcdFx0aWYgKGZpZWxkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoZmllbGQgPT09ICd1bmFsaWduZWRXb3JkcycpXG5cdFx0XHRcdFx0XHR0dW5lLmFkZE1ldGFUZXh0QXJyYXkoZmllbGQsIHBhcnNlRGlyZWN0aXZlLnBhcnNlRm9udENoYW5nZUxpbmUodG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUuc3Vic3RyaW5nKDIpKSkpKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0dW5lLmFkZE1ldGFUZXh0KGZpZWxkLCB0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHRva2VuaXplci5zdHJpcENvbW1lbnQobGluZS5zdWJzdHJpbmcoMikpKSk7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBzdGFydENoYXIgPSBtdWx0aWxpbmVWYXJzLmlDaGFyO1xuXHRcdFx0XHRcdHZhciBlbmRDaGFyID0gc3RhcnRDaGFyICsgbGluZS5sZW5ndGg7XG5cdFx0XHRcdFx0c3dpdGNoKGxpbmUuY2hhckF0KDApKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNhc2UgICdIJzpcblx0XHRcdFx0XHRcdFx0dHVuZS5hZGRNZXRhVGV4dChcImhpc3RvcnlcIiwgdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUuc3Vic3RyaW5nKDIpKSkpO1xuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmlzX2luX2hpc3RvcnkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgICdLJzpcblx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgdGhlIGtleSBpcyB0aGUgbGFzdCB0aGluZyB0aGF0IGNhbiBoYXBwZW4gaW4gdGhlIGhlYWRlciwgd2UgY2FuIHJlc29sdmUgdGhlIHRlbXBvIG5vd1xuXHRcdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVUZW1wbygpO1xuXHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcGFyc2VLZXlWb2ljZS5wYXJzZUtleShsaW5lLnN1YnN0cmluZygyKSk7XG5cdFx0XHRcdFx0XHRcdGlmICghbXVsdGlsaW5lVmFycy5pc19pbl9oZWFkZXIgJiYgdHVuZS5oYXNCZWdpbk11c2ljKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LmZvdW5kQ2xlZilcblx0XHRcdFx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kU3RhcnRpbmdFbGVtZW50KCdjbGVmJywgc3RhcnRDaGFyLCBlbmRDaGFyLCBtdWx0aWxpbmVWYXJzLmNsZWYpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQuZm91bmRLZXkpXG5cdFx0XHRcdFx0XHRcdFx0XHR0dW5lLmFwcGVuZFN0YXJ0aW5nRWxlbWVudCgna2V5Jywgc3RhcnRDaGFyLCBlbmRDaGFyLCBwYXJzZUtleVZvaWNlLmZpeEtleShtdWx0aWxpbmVWYXJzLmNsZWYsIG11bHRpbGluZVZhcnMua2V5KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5pc19pbl9oZWFkZXIgPSBmYWxzZTtcdC8vIFRoZSBmaXJzdCBrZXkgc2lnbmlmaWVzIHRoZSBlbmQgb2YgdGhlIGhlYWRlci5cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICAnTCc6XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2V0RGVmYXVsdExlbmd0aChsaW5lLCAyLCBsaW5lLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ00nOlxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm9yaWdNZXRlciA9IG11bHRpbGluZVZhcnMubWV0ZXIgPSB0aGlzLnNldE1ldGVyKGxpbmUuc3Vic3RyaW5nKDIpKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICAnUCc6XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBUaGVyZSBpcyBtb3JlIHRvIGRvIHdpdGggcGFydHMsIGJ1dCB0aGUgd3JpdGVyIGRvZXNuJ3QgY2FyZS5cblx0XHRcdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuaXNfaW5faGVhZGVyKVxuXHRcdFx0XHRcdFx0XHRcdHR1bmUuYWRkTWV0YVRleHQoXCJwYXJ0T3JkZXJcIiwgdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUuc3Vic3RyaW5nKDIpKSkpO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5wYXJ0Rm9yTmV4dExpbmUgPSB7IHRpdGxlOiB0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHRva2VuaXplci5zdHJpcENvbW1lbnQobGluZS5zdWJzdHJpbmcoMikpKSwgc3RhcnRDaGFyOiBzdGFydENoYXIsIGVuZENoYXI6IGVuZENoYXJ9O1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgICdRJzpcblx0XHRcdFx0XHRcdFx0dmFyIHRlbXBvID0gdGhpcy5zZXRUZW1wbyhsaW5lLCAyLCBsaW5lLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdGlmICh0ZW1wby50eXBlID09PSAnZGVsYXlTZXQnKSBtdWx0aWxpbmVWYXJzLnRlbXBvID0gdGVtcG8udGVtcG87XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKHRlbXBvLnR5cGUgPT09ICdpbW1lZGlhdGUnKSB0dW5lLm1ldGFUZXh0LnRlbXBvID0gdGVtcG8udGVtcG87XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ1QnOlxuXHRcdFx0XHRcdFx0XHR0aGlzLnNldFRpdGxlKGxpbmUuc3Vic3RyaW5nKDIpKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdVJzpcblx0XHRcdFx0XHRcdFx0dGhpcy5hZGRVc2VyRGVmaW5pdGlvbihsaW5lLCAyLCBsaW5lLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ1YnOlxuXHRcdFx0XHRcdFx0XHRwYXJzZUtleVZvaWNlLnBhcnNlVm9pY2UobGluZSwgMiwgbGluZS5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHRpZiAoIW11bHRpbGluZVZhcnMuaXNfaW5faGVhZGVyKVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7bmV3bGluZTogdHJ1ZX07XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ3MnOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge3N5bWJvbHM6IHRydWV9O1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ3cnOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge3dvcmRzOiB0cnVlfTtcblx0XHRcdFx0XHRcdGNhc2UgJ1gnOlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0UnOlxuXHRcdFx0XHRcdFx0Y2FzZSAnbSc6XG5cdFx0XHRcdFx0XHRcdHdhcm4oXCJJZ25vcmVkIGhlYWRlclwiLCBsaW5lLCAwKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHQvLyBJdCB3YXNuJ3QgYSByZWNvZ25pemVkIGhlYWRlciB2YWx1ZSwgc28gcGFyc2UgaXQgYXMgbXVzaWMuXG5cdFx0XHRcdFx0XHRcdGlmIChuZXh0TGluZS5sZW5ndGgpXG5cdFx0XHRcdFx0XHRcdFx0bmV4dExpbmUgPSBcIlxceDEyXCIgKyBuZXh0TGluZTtcblx0XHRcdFx0XHRcdFx0Ly9wYXJzZVJlZ3VsYXJNdXNpY0xpbmUobGluZStuZXh0TGluZSk7XG5cdFx0XHRcdFx0XHRcdC8vbmV4dExpbmUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge3JlZ3VsYXI6IHRydWUsIHN0cjogbGluZStuZXh0TGluZX07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuZXh0TGluZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRcdHJldHVybiB7cmVjdXJzZTogdHJ1ZSwgc3RyOiBuZXh0TGluZX07XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlIGhhdmUgYSByZWd1bGFyIGxpbmUgb2YgbXVsc2ljXG5cdFx0cmV0dXJuIHtyZWd1bGFyOiB0cnVlLCBzdHI6IGxpbmV9O1xuXHR9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZUhlYWRlcjtcbiIsIi8vICAgIGFiY190b2tlbml6ZXIuanM6IHRva2VuaXplcyBhbiBBQkMgTXVzaWMgTm90YXRpb24gc3RyaW5nIHRvIHN1cHBvcnQgYWJjX3BhcnNlLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggUGF1bCBSb3NlbiAocGF1bCBhdCBwYXVscm9zZW4gZG90IG5ldClcbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHBhcnNlQ29tbW9uID0gcmVxdWlyZSgnLi9hYmNfY29tbW9uJyk7XG5cbi8vIHRoaXMgaXMgYSBzZXJpZXMgb2YgZnVuY3Rpb25zIHRoYXQgZ2V0IGEgcGFydGljdWxhciBlbGVtZW50IG91dCBvZiB0aGUgcGFzc2VkIHN0cmVhbS5cbi8vIHRoZSByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvbnN1bWVkLCBzbyAwIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuLy8gYWxzbyByZXR1cm5lZCBpcyB0aGUgZWxlbWVudCBmb3VuZC4gVGhpcyBtYXkgYmUgYSBkaWZmZXJlbnQgbGVuZ3RoIGJlY2F1c2Ugc3BhY2VzIG1heSBiZSBjb25zdW1lZCB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZSBzdHJpbmcuXG4vLyBUaGUgcmV0dXJuIHN0cnVjdHVyZSBmb3IgbW9zdCBjYWxscyBpcyB7IGxlbjogbnVtX2NoYXJzX2NvbnN1bWVkLCB0b2tlbjogc3RyIH1cbnZhciBUb2tlbml6ZXIgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5za2lwV2hpdGVTcGFjZSA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICBpZiAoIXRoaXMuaXNXaGl0ZVNwYWNlKHN0ci5jaGFyQXQoaSkpKVxuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0ci5sZW5ndGg7XHQvLyBJdCBtdXN0IGhhdmUgYmVlbiBhbGwgd2hpdGUgc3BhY2Vcblx0fTtcblx0dmFyIGZpbmlzaGVkID0gZnVuY3Rpb24oc3RyLCBpKSB7XG5cdFx0cmV0dXJuIGkgPj0gc3RyLmxlbmd0aDtcblx0fTtcblx0dGhpcy5lYXRXaGl0ZVNwYWNlID0gZnVuY3Rpb24obGluZSwgaW5kZXgpIHtcblx0XHRmb3IgKHZhciBpID0gaW5kZXg7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICBpZiAoIXRoaXMuaXNXaGl0ZVNwYWNlKGxpbmUuY2hhckF0KGkpKSlcblx0XHRcdFx0cmV0dXJuIGktaW5kZXg7XG5cdFx0fVxuXHRcdHJldHVybiBpLWluZGV4O1xuXHR9O1xuXG5cdC8vIFRoaXMganVzdCBnZXRzIHRoZSBiYXNpYyBwaXRjaCBsZXR0ZXIsIGlnbm9yaW5nIGxlYWRpbmcgc3BhY2VzLCBhbmQgbm9ybWFsaXppbmcgaXQgdG8gYSBjYXBpdGFsXG5cdHRoaXMuZ2V0S2V5UGl0Y2ggPSBmdW5jdGlvbihzdHIpIHtcblx0XHR2YXIgaSA9IHRoaXMuc2tpcFdoaXRlU3BhY2Uoc3RyKTtcblx0XHRpZiAoZmluaXNoZWQoc3RyLCBpKSlcblx0XHRcdHJldHVybiB7bGVuOiAwfTtcblx0XHRzd2l0Y2ggKHN0ci5jaGFyQXQoaSkpIHtcblx0XHRcdGNhc2UgJ0EnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnQSd9O1xuXHRcdFx0Y2FzZSAnQic6cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46ICdCJ307XG5cdFx0XHRjYXNlICdDJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0MnfTtcblx0XHRcdGNhc2UgJ0QnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnRCd9O1xuXHRcdFx0Y2FzZSAnRSc6cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46ICdFJ307XG5cdFx0XHRjYXNlICdGJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0YnfTtcblx0XHRcdGNhc2UgJ0cnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnRyd9O1xuLy9cdFx0XHRjYXNlICdhJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0EnfTtcbi8vXHRcdFx0Y2FzZSAnYic6cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46ICdCJ307XG4vL1x0XHRcdGNhc2UgJ2MnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnQyd9O1xuLy9cdFx0XHRjYXNlICdkJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0QnfTtcbi8vXHRcdFx0Y2FzZSAnZSc6cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46ICdFJ307XG4vL1x0XHRcdGNhc2UgJ2YnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnRid9O1xuLy9cdFx0XHRjYXNlICdnJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0cnfTtcblx0XHR9XG5cdFx0cmV0dXJuIHtsZW46IDB9O1xuXHR9O1xuXG5cdC8vIFRoaXMganVzdCBnZXRzIHRoZSBiYXNpYyBhY2NpZGVudGFsLCBpZ25vcmluZyBsZWFkaW5nIHNwYWNlcywgYW5kIG9ubHkgdGhlIG9uZXMgdGhhdCBhcHBlYXIgaW4gYSBrZXlcblx0dGhpcy5nZXRTaGFycEZsYXQgPSBmdW5jdGlvbihzdHIpIHtcblx0XHRpZiAoc3RyID09PSAnYmFzcycpXG5cdFx0XHRyZXR1cm4ge2xlbjogMH07XG5cdFx0c3dpdGNoIChzdHIuY2hhckF0KDApKSB7XG5cdFx0XHRjYXNlICcjJzpyZXR1cm4ge2xlbjogMSwgdG9rZW46ICcjJ307XG5cdFx0XHRjYXNlICdiJzpyZXR1cm4ge2xlbjogMSwgdG9rZW46ICdiJ307XG5cdFx0fVxuXHRcdHJldHVybiB7bGVuOiAwfTtcblx0fTtcblxuXHR0aGlzLmdldE1vZGUgPSBmdW5jdGlvbihzdHIpIHtcblx0XHR2YXIgc2tpcEFscGhhID0gZnVuY3Rpb24oc3RyLCBzdGFydCkge1xuXHRcdFx0Ly8gVGhpcyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBub24tYWxwaGFiZXRpYyBjaGFyLCBvciB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlmIG5vdCBmb3VuZC5cblx0XHQgIHdoaWxlIChzdGFydCA8IHN0ci5sZW5ndGggJiYgKChzdHIuY2hhckF0KHN0YXJ0KSA+PSAnYScgJiYgc3RyLmNoYXJBdChzdGFydCkgPD0gJ3onKSB8fCAoc3RyLmNoYXJBdChzdGFydCkgPj0gJ0EnICYmIHN0ci5jaGFyQXQoc3RhcnQpIDw9ICdaJykpKVxuXHRcdFx0XHRzdGFydCsrO1xuXHRcdFx0cmV0dXJuIHN0YXJ0O1xuXHRcdH07XG5cblx0XHR2YXIgaSA9IHRoaXMuc2tpcFdoaXRlU3BhY2Uoc3RyKTtcblx0XHRpZiAoZmluaXNoZWQoc3RyLCBpKSlcblx0XHRcdHJldHVybiB7bGVuOiAwfTtcblx0XHR2YXIgZmlyc3RUaHJlZSA9IHN0ci5zdWJzdHJpbmcoaSxpKzMpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKGZpcnN0VGhyZWUubGVuZ3RoID4gMSAmJiBmaXJzdFRocmVlLmNoYXJBdCgxKSA9PT0gJyAnIHx8IGZpcnN0VGhyZWUuY2hhckF0KDEpID09PSAnXicgfHwgZmlyc3RUaHJlZS5jaGFyQXQoMSkgPT09ICdfJyB8fCBmaXJzdFRocmVlLmNoYXJBdCgxKSA9PT0gJz0nKSBmaXJzdFRocmVlID0gZmlyc3RUaHJlZS5jaGFyQXQoMCk7XHQvLyBUaGlzIHdpbGwgaGFuZGxlIHRoZSBjYXNlIG9mICdtJ1xuXHRcdHN3aXRjaCAoZmlyc3RUaHJlZSkge1xuXHRcdFx0Y2FzZSAnbWl4JzpyZXR1cm4ge2xlbjogc2tpcEFscGhhKHN0ciwgaSksIHRva2VuOiAnTWl4J307XG5cdFx0XHRjYXNlICdkb3InOnJldHVybiB7bGVuOiBza2lwQWxwaGEoc3RyLCBpKSwgdG9rZW46ICdEb3InfTtcblx0XHRcdGNhc2UgJ3Bocic6cmV0dXJuIHtsZW46IHNraXBBbHBoYShzdHIsIGkpLCB0b2tlbjogJ1Bocid9O1xuXHRcdFx0Y2FzZSAnbHlkJzpyZXR1cm4ge2xlbjogc2tpcEFscGhhKHN0ciwgaSksIHRva2VuOiAnTHlkJ307XG5cdFx0XHRjYXNlICdsb2MnOnJldHVybiB7bGVuOiBza2lwQWxwaGEoc3RyLCBpKSwgdG9rZW46ICdMb2MnfTtcblx0XHRcdGNhc2UgJ2Flbyc6cmV0dXJuIHtsZW46IHNraXBBbHBoYShzdHIsIGkpLCB0b2tlbjogJ20nfTtcblx0XHRcdGNhc2UgJ21haic6cmV0dXJuIHtsZW46IHNraXBBbHBoYShzdHIsIGkpLCB0b2tlbjogJyd9O1xuXHRcdFx0Y2FzZSAnaW9uJzpyZXR1cm4ge2xlbjogc2tpcEFscGhhKHN0ciwgaSksIHRva2VuOiAnJ307XG5cdFx0XHRjYXNlICdtaW4nOnJldHVybiB7bGVuOiBza2lwQWxwaGEoc3RyLCBpKSwgdG9rZW46ICdtJ307XG5cdFx0XHRjYXNlICdtJzpyZXR1cm4ge2xlbjogc2tpcEFscGhhKHN0ciwgaSksIHRva2VuOiAnbSd9O1xuXHRcdH1cblx0XHRyZXR1cm4ge2xlbjogMH07XG5cdH07XG5cblx0dGhpcy5nZXRDbGVmID0gZnVuY3Rpb24oc3RyLCBiRXhwbGljaXRPbmx5KSB7XG5cdFx0dmFyIHN0ck9yaWcgPSBzdHI7XG5cdFx0dmFyIGkgPSB0aGlzLnNraXBXaGl0ZVNwYWNlKHN0cik7XG5cdFx0aWYgKGZpbmlzaGVkKHN0ciwgaSkpXG5cdFx0XHRyZXR1cm4ge2xlbjogMH07XG5cdFx0Ly8gVGhlIHdvcmQgJ2NsZWYnIGlzIG9wdGlvbmFsLCBidXQgaWYgaXQgYXBwZWFycywgYSBjbGVmIE1VU1QgYXBwZWFyXG5cdFx0dmFyIG5lZWRzQ2xlZiA9IGZhbHNlO1xuXHRcdHZhciBzdHJDbGVmID0gc3RyLnN1YnN0cmluZyhpKTtcblx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHJDbGVmLCAnY2xlZj0nKSkge1xuXHRcdFx0bmVlZHNDbGVmID0gdHJ1ZTtcblx0XHRcdHN0ckNsZWYgPSBzdHJDbGVmLnN1YnN0cmluZyg1KTtcblx0XHRcdGkgKz0gNTtcblx0XHR9XG5cdFx0aWYgKHN0ckNsZWYubGVuZ3RoID09PSAwICYmIG5lZWRzQ2xlZilcblx0XHRcdHJldHVybiB7bGVuOiBpKzUsIHdhcm46IFwiTm8gY2xlZiBzcGVjaWZpZWQ6IFwiICsgc3RyT3JpZ307XG5cblx0XHR2YXIgaiA9IHRoaXMuc2tpcFdoaXRlU3BhY2Uoc3RyQ2xlZik7XG5cdFx0aWYgKGZpbmlzaGVkKHN0ckNsZWYsIGopKVxuXHRcdFx0cmV0dXJuIHtsZW46IDB9O1xuXHRcdGlmIChqID4gMCkge1xuXHRcdFx0aSArPSBqO1xuXHRcdFx0c3RyQ2xlZiA9IHN0ckNsZWYuc3Vic3RyaW5nKGopO1xuXHRcdH1cblx0XHR2YXIgbmFtZSA9IG51bGw7XG5cdFx0aWYgKHBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoc3RyQ2xlZiwgJ3RyZWJsZScpKVxuXHRcdFx0bmFtZSA9ICd0cmVibGUnO1xuXHRcdGVsc2UgaWYgKHBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoc3RyQ2xlZiwgJ2Jhc3MzJykpXG5cdFx0XHRuYW1lID0gJ2Jhc3MzJztcblx0XHRlbHNlIGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdiYXNzJykpXG5cdFx0XHRuYW1lID0gJ2Jhc3MnO1xuXHRcdGVsc2UgaWYgKHBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoc3RyQ2xlZiwgJ3Rlbm9yJykpXG5cdFx0XHRuYW1lID0gJ3Rlbm9yJztcblx0XHRlbHNlIGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdhbHRvMicpKVxuXHRcdFx0bmFtZSA9ICdhbHRvMic7XG5cdFx0ZWxzZSBpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHJDbGVmLCAnYWx0bzEnKSlcblx0XHRcdG5hbWUgPSAnYWx0bzEnO1xuXHRcdGVsc2UgaWYgKHBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoc3RyQ2xlZiwgJ2FsdG8nKSlcblx0XHRcdG5hbWUgPSAnYWx0byc7XG5cdFx0ZWxzZSBpZiAoIWJFeHBsaWNpdE9ubHkgJiYgKG5lZWRzQ2xlZiAmJiBwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdub25lJykpKVxuXHRcdFx0bmFtZSA9ICdub25lJztcblx0XHRlbHNlIGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdwZXJjJykpXG5cdFx0XHRuYW1lID0gJ3BlcmMnO1xuXHRcdGVsc2UgaWYgKCFiRXhwbGljaXRPbmx5ICYmIChuZWVkc0NsZWYgJiYgcGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHJDbGVmLCAnQycpKSlcblx0XHRcdG5hbWUgPSAndGVub3InO1xuXHRcdGVsc2UgaWYgKCFiRXhwbGljaXRPbmx5ICYmIChuZWVkc0NsZWYgJiYgcGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHJDbGVmLCAnRicpKSlcblx0XHRcdG5hbWUgPSAnYmFzcyc7XG5cdFx0ZWxzZSBpZiAoIWJFeHBsaWNpdE9ubHkgJiYgKG5lZWRzQ2xlZiAmJiBwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdHJykpKVxuXHRcdFx0bmFtZSA9ICd0cmVibGUnO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiB7bGVuOiBpKzUsIHdhcm46IFwiVW5rbm93biBjbGVmIHNwZWNpZmllZDogXCIgKyBzdHJPcmlnfTtcblxuXHRcdHN0ckNsZWYgPSBzdHJDbGVmLnN1YnN0cmluZyhuYW1lLmxlbmd0aCk7XG5cdFx0aiA9IHRoaXMuaXNNYXRjaChzdHJDbGVmLCAnKzgnKTtcblx0XHRpZiAoaiA+IDApXG5cdFx0XHRuYW1lICs9IFwiKzhcIjtcblx0XHRlbHNlIHtcblx0XHRcdGogPSB0aGlzLmlzTWF0Y2goc3RyQ2xlZiwgJy04Jyk7XG5cdFx0XHRpZiAoaiA+IDApXG5cdFx0XHRcdG5hbWUgKz0gXCItOFwiO1xuXHRcdH1cblx0XHRyZXR1cm4ge2xlbjogaStuYW1lLmxlbmd0aCwgdG9rZW46IG5hbWUsIGV4cGxpY2l0OiBuZWVkc0NsZWZ9O1xuXHR9O1xuXG5cdC8vIFRoaXMgcmV0dXJucyBvbmUgb2YgdGhlIGxlZ2FsIGJhciBsaW5lc1xuXHQvLyBUaGlzIGlzIGNhbGxlZCBhbG90IGFuZCB0aGVyZSBpcyBubyBvYnZpb3VzIHRva2VuYWJsZSBpdGVtcywgc28gdGhpcyBpcyBicm9rZW4gYXBhcnQuXG5cdHRoaXMuZ2V0QmFyTGluZSA9IGZ1bmN0aW9uKGxpbmUsIGkpIHtcblx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGkpKSB7XG5cdFx0XHRjYXNlICddJzpcblx0XHRcdFx0KytpO1xuXHRcdFx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGkpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnfCc6IHJldHVybiB7bGVuOiAyLCB0b2tlbjogXCJiYXJfdGhpY2tfdGhpblwifTtcblx0XHRcdFx0XHRjYXNlICdbJzpcblx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdGlmICgobGluZS5jaGFyQXQoaSkgPj0gJzEnICYmIGxpbmUuY2hhckF0KGkpIDw9ICc5JykgfHwgbGluZS5jaGFyQXQoaSkgPT09ICdcIicpXG5cdFx0XHRcdFx0XHRcdHJldHVybiB7bGVuOiAyLCB0b2tlbjogXCJiYXJfaW52aXNpYmxlXCJ9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtsZW46IDEsIHdhcm46IFwiVW5rbm93biBiYXIgc3ltYm9sXCJ9O1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMSwgdG9rZW46IFwiYmFyX2ludmlzaWJsZVwifTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJzonOlxuXHRcdFx0XHQrK2k7XG5cdFx0XHRcdHN3aXRjaCAobGluZS5jaGFyQXQoaSkpIHtcblx0XHRcdFx0XHRjYXNlICc6JzogcmV0dXJuIHtsZW46IDIsIHRva2VuOiBcImJhcl9kYmxfcmVwZWF0XCJ9O1xuXHRcdFx0XHRcdGNhc2UgJ3wnOlx0Ly8gOnxcblx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdHN3aXRjaCAobGluZS5jaGFyQXQoaSkpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSAnXSc6XHQvLyA6fF1cblx0XHRcdFx0XHRcdFx0XHQrK2k7XG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChsaW5lLmNoYXJBdChpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnfCc6XHQvLyA6fF18XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAnOicpICByZXR1cm4ge2xlbjogNSwgdG9rZW46IFwiYmFyX2RibF9yZXBlYXRcIn07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7bGVuOiAzLCB0b2tlbjogXCJiYXJfcmlnaHRfcmVwZWF0XCJ9O1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtsZW46IDMsIHRva2VuOiBcImJhcl9yaWdodF9yZXBlYXRcIn07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlICd8JzpcdC8vIDp8fFxuXHRcdFx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICc6JykgIHJldHVybiB7bGVuOiA0LCB0b2tlbjogXCJiYXJfZGJsX3JlcGVhdFwifTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMywgdG9rZW46IFwiYmFyX3JpZ2h0X3JlcGVhdFwifTtcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMiwgdG9rZW46IFwiYmFyX3JpZ2h0X3JlcGVhdFwifTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMSwgd2FybjogXCJVbmtub3duIGJhciBzeW1ib2xcIn07XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdbJzpcdC8vIFtcblx0XHRcdFx0KytpO1xuXHRcdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICd8Jykge1x0Ly8gW3xcblx0XHRcdFx0XHQrK2k7XG5cdFx0XHRcdFx0c3dpdGNoIChsaW5lLmNoYXJBdChpKSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnOic6IHJldHVybiB7bGVuOiAzLCB0b2tlbjogXCJiYXJfbGVmdF9yZXBlYXRcIn07XG5cdFx0XHRcdFx0XHRjYXNlICddJzogcmV0dXJuIHtsZW46IDMsIHRva2VuOiBcImJhcl9pbnZpc2libGVcIn07XG5cdFx0XHRcdFx0XHRkZWZhdWx0OiByZXR1cm4ge2xlbjogMiwgdG9rZW46IFwiYmFyX3RoaWNrX3RoaW5cIn07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICgobGluZS5jaGFyQXQoaSkgPj0gJzEnICYmIGxpbmUuY2hhckF0KGkpIDw9ICc5JykgfHwgbGluZS5jaGFyQXQoaSkgPT09ICdcIicpXG5cdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMSwgdG9rZW46IFwiYmFyX2ludmlzaWJsZVwifTtcblx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMH07XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd8JzpcdC8vIHxcblx0XHRcdFx0KytpO1xuXHRcdFx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGkpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnXSc6IHJldHVybiB7bGVuOiAyLCB0b2tlbjogXCJiYXJfdGhpbl90aGlja1wifTtcblx0XHRcdFx0XHRjYXNlICd8JzogLy8gfHxcblx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJzonKSByZXR1cm4ge2xlbjogMywgdG9rZW46IFwiYmFyX2xlZnRfcmVwZWF0XCJ9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtsZW46IDIsIHRva2VuOiBcImJhcl90aGluX3RoaW5cIn07XG5cdFx0XHRcdFx0Y2FzZSAnOic6XHQvLyB8OlxuXHRcdFx0XHRcdFx0dmFyIGNvbG9ucyA9IDA7XG5cdFx0XHRcdFx0XHR3aGlsZSAobGluZS5jaGFyQXQoaStjb2xvbnMpID09PSAnOicpIGNvbG9ucysrO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgbGVuOiAxK2NvbG9ucywgdG9rZW46IFwiYmFyX2xlZnRfcmVwZWF0XCJ9O1xuXHRcdFx0XHRcdGRlZmF1bHQ6IHJldHVybiB7bGVuOiAxLCB0b2tlbjogXCJiYXJfdGhpblwifTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHtsZW46IDB9O1xuXHR9O1xuXG5cdC8vIHRoaXMgcmV0dXJucyBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyB0aGF0IG1hdGNoIG9uZSBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgbGVnYWxDaGFycyBzdHJpbmdcblx0dGhpcy5nZXRUb2tlbk9mID0gZnVuY3Rpb24oc3RyLCBsZWdhbENoYXJzKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChsZWdhbENoYXJzLmluZGV4T2Yoc3RyLmNoYXJBdChpKSkgPCAwKVxuXHRcdFx0XHRyZXR1cm4ge2xlbjogaSwgdG9rZW46IHN0ci5zdWJzdHJpbmcoMCwgaSl9O1xuXHRcdH1cblx0XHRyZXR1cm4ge2xlbjogaSwgdG9rZW46IHN0cn07XG5cdH07XG5cblx0dGhpcy5nZXRUb2tlbiA9IGZ1bmN0aW9uKHN0ciwgc3RhcnQsIGVuZCkge1xuXHRcdC8vIFRoaXMgcmV0dXJucyB0aGUgbmV4dCBzZXQgb2YgY2hhcnMgdGhhdCBkb2Vzbid0IGNvbnRhaW4gc3BhY2VzXG5cdFx0dmFyIGkgPSBzdGFydDtcblx0XHR3aGlsZSAoaSA8IGVuZCAmJiAhdGhpcy5pc1doaXRlU3BhY2Uoc3RyLmNoYXJBdChpKSkpXG5cdFx0XHRpKys7XG5cdFx0cmV0dXJuIHN0ci5zdWJzdHJpbmcoc3RhcnQsIGkpO1xuXHR9O1xuXG5cdC8vIFRoaXMganVzdCBzZWVzIGlmIHRoZSBuZXh0IHRva2VuIGlzIHRoZSB3b3JkIHBhc3NlZCBpbiwgd2l0aCBwb3NzaWJsZSBsZWFkaW5nIHNwYWNlc1xuXHR0aGlzLmlzTWF0Y2ggPSBmdW5jdGlvbihzdHIsIG1hdGNoKSB7XG5cdFx0dmFyIGkgPSB0aGlzLnNraXBXaGl0ZVNwYWNlKHN0cik7XG5cdFx0aWYgKGZpbmlzaGVkKHN0ciwgaSkpXG5cdFx0XHRyZXR1cm4gMDtcblx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHIuc3Vic3RyaW5nKGkpLCBtYXRjaCkpXG5cdFx0XHRyZXR1cm4gaSttYXRjaC5sZW5ndGg7XG5cdFx0cmV0dXJuIDA7XG5cdH07XG5cblx0dGhpcy5nZXRQaXRjaEZyb21Ub2tlbnMgPSBmdW5jdGlvbih0b2tlbnMpIHtcblx0XHR2YXIgcmV0ID0geyB9O1xuXHRcdHZhciBwaXRjaGVzID0ge0E6IDUsIEI6IDYsIEM6IDAsIEQ6IDEsIEU6IDIsIEY6IDMsIEc6IDQsIGE6IDEyLCBiOiAxMywgYzogNywgZDogOCwgZTogOSwgZjogMTAsIGc6IDExfTtcblx0XHRyZXQucG9zaXRpb24gPSBwaXRjaGVzW3Rva2Vuc1swXS50b2tlbl07XG5cdFx0aWYgKHJldC5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHsgd2FybjogXCJQaXRjaCBleHBlY3RlZC4gRm91bmQ6IFwiICsgdG9rZW5zWzBdLnRva2VuIH07XG5cdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0d2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcblx0XHRcdHN3aXRjaCAodG9rZW5zWzBdLnRva2VuKSB7XG5cdFx0XHRcdGNhc2UgJywnOiByZXQucG9zaXRpb24gLT0gNzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdcXCcnOiByZXQucG9zaXRpb24gKz0gNzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiByZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXG5cdHRoaXMuZ2V0S2V5QWNjaWRlbnRhbHMyID0gZnVuY3Rpb24odG9rZW5zKSB7XG5cdFx0dmFyIGFjY3M7XG5cdFx0Ly8gZmluZCBhbmQgc3RyaXAgb2ZmIGFsbCBhY2NpZGVudGFscyBpbiB0aGUgdG9rZW4gbGlzdFxuXHRcdHdoaWxlICh0b2tlbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0dmFyIGFjYztcblx0XHRcdGlmICh0b2tlbnNbMF0udG9rZW4gPT09ICdeJykge1xuXHRcdFx0XHRhY2MgPSAnc2hhcnAnO1xuXHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHJldHVybiB7YWNjczogYWNjcywgd2FybjogJ0V4cGVjdGVkIG5vdGUgbmFtZSBhZnRlciAnICsgYWNjfTtcblx0XHRcdFx0c3dpdGNoICh0b2tlbnNbMF0udG9rZW4pIHtcblx0XHRcdFx0XHRjYXNlICdeJzogYWNjID0gJ2RibHNoYXJwJzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJy8nOiBhY2MgPSAncXVhcnRlcnNoYXJwJzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJz0nKSB7XG5cdFx0XHRcdGFjYyA9ICduYXR1cmFsJztcblx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJ18nKSB7XG5cdFx0XHRcdGFjYyA9ICdmbGF0Jztcblx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSByZXR1cm4ge2FjY3M6IGFjY3MsIHdhcm46ICdFeHBlY3RlZCBub3RlIG5hbWUgYWZ0ZXIgJyArIGFjY307XG5cdFx0XHRcdHN3aXRjaCAodG9rZW5zWzBdLnRva2VuKSB7XG5cdFx0XHRcdFx0Y2FzZSAnXyc6IGFjYyA9ICdkYmxmbGF0JzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJy8nOiBhY2MgPSAncXVhcnRlcmZsYXQnOyB0b2tlbnMuc2hpZnQoKTsgYnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIE5vdCBhbiBhY2NpZGVudGFsLCB3ZSdsbCBhc3N1bWUgdGhhdCBhIGxhdGVyIHBhcnNlIHdpbGwgcmVjb2duaXplIGl0LlxuXHRcdFx0XHRyZXR1cm4geyBhY2NzOiBhY2NzIH07XG5cdFx0XHR9XG5cdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHthY2NzOiBhY2NzLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyICcgKyBhY2N9O1xuXHRcdFx0c3dpdGNoICh0b2tlbnNbMF0udG9rZW4uY2hhckF0KDApKVxuXHRcdFx0e1xuXHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0Y2FzZSAnYic6XG5cdFx0XHRcdGNhc2UgJ2MnOlxuXHRcdFx0XHRjYXNlICdkJzpcblx0XHRcdFx0Y2FzZSAnZSc6XG5cdFx0XHRcdGNhc2UgJ2YnOlxuXHRcdFx0XHRjYXNlICdnJzpcblx0XHRcdFx0Y2FzZSAnQSc6XG5cdFx0XHRcdGNhc2UgJ0InOlxuXHRcdFx0XHRjYXNlICdDJzpcblx0XHRcdFx0Y2FzZSAnRCc6XG5cdFx0XHRcdGNhc2UgJ0UnOlxuXHRcdFx0XHRjYXNlICdGJzpcblx0XHRcdFx0Y2FzZSAnRyc6XG5cdFx0XHRcdFx0aWYgKGFjY3MgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGFjY3MgPSBbXTtcblx0XHRcdFx0XHRhY2NzLnB1c2goeyBhY2M6IGFjYywgbm90ZTogdG9rZW5zWzBdLnRva2VuLmNoYXJBdCgwKSB9KTtcblx0XHRcdFx0XHRpZiAodG9rZW5zWzBdLnRva2VuLmxlbmd0aCA9PT0gMSlcblx0XHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHRva2Vuc1swXS50b2tlbiA9IHRva2Vuc1swXS50b2tlbi5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIHthY2NzOiBhY2NzLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyICcgKyBhY2MgKyAnIEZvdW5kOiAnICsgdG9rZW5zWzBdLnRva2VuIH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IGFjY3M6IGFjY3MgfTtcblx0fTtcblxuXHQvLyBUaGlzIGdldHMgYW4gYWNjaWRlbnRhbCBtYXJraW5nIGZvciB0aGUga2V5IHNpZ25hdHVyZS4gSXQgaGFzIHRoZSBhY2NpZGVudGFsIHRoZW4gdGhlIHBpdGNoIGxldHRlci5cblx0dGhpcy5nZXRLZXlBY2NpZGVudGFsID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dmFyIGFjY1RyYW5zbGF0aW9uID0ge1xuXHRcdFx0J14nOiAnc2hhcnAnLFxuXHRcdFx0J15eJzogJ2RibHNoYXJwJyxcblx0XHRcdCc9JzogJ25hdHVyYWwnLFxuXHRcdFx0J18nOiAnZmxhdCcsXG5cdFx0XHQnX18nOiAnZGJsZmxhdCcsXG5cdFx0XHQnXy8nOiAncXVhcnRlcmZsYXQnLFxuXHRcdFx0J14vJzogJ3F1YXJ0ZXJzaGFycCdcblx0XHR9O1xuXHRcdHZhciBpID0gdGhpcy5za2lwV2hpdGVTcGFjZShzdHIpO1xuXHRcdGlmIChmaW5pc2hlZChzdHIsIGkpKVxuXHRcdFx0cmV0dXJuIHtsZW46IDB9O1xuXHRcdHZhciBhY2MgPSBudWxsO1xuXHRcdHN3aXRjaCAoc3RyLmNoYXJBdChpKSlcblx0XHR7XG5cdFx0XHRjYXNlICdeJzpcblx0XHRcdGNhc2UgJ18nOlxuXHRcdFx0Y2FzZSAnPSc6XG5cdFx0XHRcdGFjYyA9IHN0ci5jaGFyQXQoaSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpyZXR1cm4ge2xlbjogMH07XG5cdFx0fVxuXHRcdGkrKztcblx0XHRpZiAoZmluaXNoZWQoc3RyLCBpKSlcblx0XHRcdHJldHVybiB7bGVuOiAxLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyIGFjY2lkZW50YWwnfTtcblx0XHRzd2l0Y2ggKHN0ci5jaGFyQXQoaSkpXG5cdFx0e1xuXHRcdFx0Y2FzZSAnYSc6XG5cdFx0XHRjYXNlICdiJzpcblx0XHRcdGNhc2UgJ2MnOlxuXHRcdFx0Y2FzZSAnZCc6XG5cdFx0XHRjYXNlICdlJzpcblx0XHRcdGNhc2UgJ2YnOlxuXHRcdFx0Y2FzZSAnZyc6XG5cdFx0XHRjYXNlICdBJzpcblx0XHRcdGNhc2UgJ0InOlxuXHRcdFx0Y2FzZSAnQyc6XG5cdFx0XHRjYXNlICdEJzpcblx0XHRcdGNhc2UgJ0UnOlxuXHRcdFx0Y2FzZSAnRic6XG5cdFx0XHRjYXNlICdHJzpcblx0XHRcdFx0cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46IHthY2M6IGFjY1RyYW5zbGF0aW9uW2FjY10sIG5vdGU6IHN0ci5jaGFyQXQoaSl9fTtcblx0XHRcdGNhc2UgJ14nOlxuXHRcdFx0Y2FzZSAnXyc6XG5cdFx0XHRjYXNlICcvJzpcblx0XHRcdFx0YWNjICs9IHN0ci5jaGFyQXQoaSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdFx0aWYgKGZpbmlzaGVkKHN0ciwgaSkpXG5cdFx0XHRcdFx0cmV0dXJuIHtsZW46IDIsIHdhcm46ICdFeHBlY3RlZCBub3RlIG5hbWUgYWZ0ZXIgYWNjaWRlbnRhbCd9O1xuXHRcdFx0XHRzd2l0Y2ggKHN0ci5jaGFyQXQoaSkpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0XHRjYXNlICdiJzpcblx0XHRcdFx0XHRjYXNlICdjJzpcblx0XHRcdFx0XHRjYXNlICdkJzpcblx0XHRcdFx0XHRjYXNlICdlJzpcblx0XHRcdFx0XHRjYXNlICdmJzpcblx0XHRcdFx0XHRjYXNlICdnJzpcblx0XHRcdFx0XHRjYXNlICdBJzpcblx0XHRcdFx0XHRjYXNlICdCJzpcblx0XHRcdFx0XHRjYXNlICdDJzpcblx0XHRcdFx0XHRjYXNlICdEJzpcblx0XHRcdFx0XHRjYXNlICdFJzpcblx0XHRcdFx0XHRjYXNlICdGJzpcblx0XHRcdFx0XHRjYXNlICdHJzpcblx0XHRcdFx0XHRcdHJldHVybiB7bGVuOiBpKzEsIHRva2VuOiB7YWNjOiBhY2NUcmFuc2xhdGlvblthY2NdLCBub3RlOiBzdHIuY2hhckF0KGkpfX07XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiB7bGVuOiAyLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyIGFjY2lkZW50YWwnfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB7bGVuOiAxLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyIGFjY2lkZW50YWwnfTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5pc1doaXRlU3BhY2UgPSBmdW5jdGlvbihjaCkge1xuXHRcdHJldHVybiBjaCA9PT0gJyAnIHx8IGNoID09PSAnXFx0JyB8fCBjaCA9PT0gJ1xceDEyJztcblx0fTtcblxuXHR0aGlzLmdldE1lYXQgPSBmdW5jdGlvbihsaW5lLCBzdGFydCwgZW5kKSB7XG5cdFx0Ly8gVGhpcyByZW1vdmVzIGFueSBjb21tZW50cyBzdGFydGluZyB3aXRoICclJyBhbmQgdHJpbXMgdGhlIGVuZHMgb2YgdGhlIHN0cmluZyBzbyB0aGF0IHRoZXJlIGFyZSBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlcy5cblx0XHQvLyBpdCByZXR1cm5zIGp1c3QgdGhlIHN0YXJ0IGFuZCBlbmQgY2hhcmFjdGVycyB0aGF0IGNvbnRhaW4gdGhlIG1lYXQuXG5cdFx0dmFyIGNvbW1lbnQgPSBsaW5lLmluZGV4T2YoJyUnLCBzdGFydCk7XG5cdFx0aWYgKGNvbW1lbnQgPj0gMCAmJiBjb21tZW50IDwgZW5kKVxuXHRcdFx0ZW5kID0gY29tbWVudDtcblx0XHR3aGlsZSAoc3RhcnQgPCBlbmQgJiYgKGxpbmUuY2hhckF0KHN0YXJ0KSA9PT0gJyAnIHx8IGxpbmUuY2hhckF0KHN0YXJ0KSA9PT0gJ1xcdCcgfHwgbGluZS5jaGFyQXQoc3RhcnQpID09PSAnXFx4MTInKSlcblx0XHRcdHN0YXJ0Kys7XG5cdFx0d2hpbGUgKHN0YXJ0IDwgZW5kICYmIChsaW5lLmNoYXJBdChlbmQtMSkgPT09ICcgJyB8fCBsaW5lLmNoYXJBdChlbmQtMSkgPT09ICdcXHQnIHx8IGxpbmUuY2hhckF0KGVuZC0xKSA9PT0gJ1xceDEyJykpXG5cdFx0XHRlbmQtLTtcblx0XHRyZXR1cm4ge3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9O1xuXHR9O1xuXG5cdHZhciBpc0xldHRlciA9IGZ1bmN0aW9uKGNoKSB7XG5cdFx0cmV0dXJuIChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fCAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6Jyk7XG5cdH07XG5cblx0dmFyIGlzTnVtYmVyID0gZnVuY3Rpb24oY2gpIHtcblx0XHRyZXR1cm4gKGNoID49ICcwJyAmJiBjaCA8PSAnOScpO1xuXHR9O1xuXG5cdHRoaXMudG9rZW5pemUgPSBmdW5jdGlvbihsaW5lLCBzdGFydCwgZW5kLCBhbHBoYVVudGlsV2hpdGVTcGFjZSkge1xuXHRcdC8vIHRoaXMgcmV0dXJucyBhbGwgdGhlIHRva2VucyBpbnNpZGUgdGhlIHBhc3NlZCBzdHJpbmcuIEEgdG9rZW4gaXMgYSBwdW5jdHVhdGlvbiBtYXJrLCBhIHN0cmluZyBvZiBkaWdpdHMsIGEgc3RyaW5nIG9mIGxldHRlcnMuXG5cdFx0Ly8gIFF1b3RlZCBzdHJpbmdzIGFyZSBvbmUgdG9rZW4uXG5cdFx0Ly8gIElmIHRoZXJlIGlzIGEgbWludXMgc2lnbiBuZXh0IHRvIGEgbnVtYmVyLCB0aGVuIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBudW1iZXIuXG5cdFx0Ly8gSWYgdGhlcmUgaXMgYSBwZXJpb2QgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBudW1iZXIsIHdpdGggYSBudW1iZXIgaW1tZWRpYXRlbHkgZm9sbG93aW5nLCB0aGVuIGEgZmxvYXQgaXMgcmV0dXJuZWQuXG5cdFx0Ly8gVGhlIHR5cGUgb2YgdG9rZW4gaXMgcmV0dXJuZWQ6IHF1b3RlLCBhbHBoYSwgbnVtYmVyLCBwdW5jdFxuXHRcdC8vIElmIGFscGhhVW50aWxXaGl0ZVNwYWNlIGlzIHRydWUsIHRoZW4gdGhlIGJlaGF2aW9yIG9mIHRoZSBhbHBoYSB0b2tlbiBjaGFuZ2VzLlxuXG5cdFx0dmFyIHJldCA9IHRoaXMuZ2V0TWVhdChsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRzdGFydCA9IHJldC5zdGFydDtcblx0XHRlbmQgPSByZXQuZW5kO1xuXHRcdHZhciB0b2tlbnMgPSBbXTtcblx0XHR2YXIgaTtcblx0XHR3aGlsZSAoc3RhcnQgPCBlbmQpIHtcblx0XHRcdGlmIChsaW5lLmNoYXJBdChzdGFydCkgPT09ICdcIicpIHtcblx0XHRcdFx0aSA9IHN0YXJ0KzE7XG5cdFx0XHRcdHdoaWxlIChpIDwgZW5kICYmIGxpbmUuY2hhckF0KGkpICE9PSAnXCInKSBpKys7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHsgdHlwZTogJ3F1b3RlJywgdG9rZW46IGxpbmUuc3Vic3RyaW5nKHN0YXJ0KzEsIGkpLCBzdGFydDogc3RhcnQrMSwgZW5kOiBpfSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH0gZWxzZSBpZiAoaXNMZXR0ZXIobGluZS5jaGFyQXQoc3RhcnQpKSkge1xuXHRcdFx0XHRpID0gc3RhcnQrMTtcblx0XHRcdFx0aWYgKGFscGhhVW50aWxXaGl0ZVNwYWNlKVxuXHRcdFx0XHRcdHdoaWxlIChpIDwgZW5kICYmICF0aGlzLmlzV2hpdGVTcGFjZShsaW5lLmNoYXJBdChpKSkpIGkrKztcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHdoaWxlIChpIDwgZW5kICYmIGlzTGV0dGVyKGxpbmUuY2hhckF0KGkpKSkgaSsrO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7IHR5cGU6ICdhbHBoYScsIHRva2VuOiBsaW5lLnN1YnN0cmluZyhzdGFydCwgaSksIGNvbnRpbnVlSWQ6IGlzTnVtYmVyKGxpbmUuY2hhckF0KGkpKSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGl9KTtcblx0XHRcdFx0c3RhcnQgPSBpICsgMTtcblx0XHRcdH0gZWxzZSBpZiAobGluZS5jaGFyQXQoc3RhcnQpID09PSAnLicgJiYgaXNOdW1iZXIobGluZS5jaGFyQXQoaSsxKSkpIHtcblx0XHRcdFx0aSA9IHN0YXJ0KzE7XG5cdFx0XHRcdHZhciBpbnQyID0gbnVsbDtcblx0XHRcdFx0dmFyIGZsb2F0MiA9IG51bGw7XG5cdFx0XHRcdHdoaWxlIChpIDwgZW5kICYmIGlzTnVtYmVyKGxpbmUuY2hhckF0KGkpKSkgaSsrO1xuXG5cdFx0XHRcdGZsb2F0MiA9IHBhcnNlRmxvYXQobGluZS5zdWJzdHJpbmcoc3RhcnQsIGkpKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goeyB0eXBlOiAnbnVtYmVyJywgdG9rZW46IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBpKSwgaW50dDogaW50MiwgZmxvYXR0OiBmbG9hdDIsIGNvbnRpbnVlSWQ6IGlzTGV0dGVyKGxpbmUuY2hhckF0KGkpKSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGl9KTtcblx0XHRcdFx0c3RhcnQgPSBpICsgMTtcblx0XHRcdH0gZWxzZSBpZiAoaXNOdW1iZXIobGluZS5jaGFyQXQoc3RhcnQpKSB8fCAobGluZS5jaGFyQXQoc3RhcnQpID09PSAnLScgJiYgaXNOdW1iZXIobGluZS5jaGFyQXQoaSsxKSkpKSB7XG5cdFx0XHRcdGkgPSBzdGFydCsxO1xuXHRcdFx0XHR2YXIgaW50dCA9IG51bGw7XG5cdFx0XHRcdHZhciBmbG9hdHQgPSBudWxsO1xuXHRcdFx0XHR3aGlsZSAoaSA8IGVuZCAmJiBpc051bWJlcihsaW5lLmNoYXJBdChpKSkpIGkrKztcblx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAnLicgJiYgaXNOdW1iZXIobGluZS5jaGFyQXQoaSsxKSkpIHtcblx0XHRcdFx0XHRpKys7XG5cdFx0XHRcdFx0d2hpbGUgKGkgPCBlbmQgJiYgaXNOdW1iZXIobGluZS5jaGFyQXQoaSkpKSBpKys7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdGludHQgPSBwYXJzZUludChsaW5lLnN1YnN0cmluZyhzdGFydCwgaSkpO1xuXG5cdFx0XHRcdGZsb2F0dCA9IHBhcnNlRmxvYXQobGluZS5zdWJzdHJpbmcoc3RhcnQsIGkpKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goeyB0eXBlOiAnbnVtYmVyJywgdG9rZW46IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBpKSwgaW50dDogaW50dCwgZmxvYXR0OiBmbG9hdHQsIGNvbnRpbnVlSWQ6IGlzTGV0dGVyKGxpbmUuY2hhckF0KGkpKSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGl9KTtcblx0XHRcdFx0c3RhcnQgPSBpICsgMTtcblx0XHRcdH0gZWxzZSBpZiAobGluZS5jaGFyQXQoc3RhcnQpID09PSAnICcgfHwgbGluZS5jaGFyQXQoc3RhcnQpID09PSAnXFx0Jykge1xuXHRcdFx0XHRpID0gc3RhcnQrMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHsgdHlwZTogJ3B1bmN0JywgdG9rZW46IGxpbmUuY2hhckF0KHN0YXJ0KSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IHN0YXJ0KzF9KTtcblx0XHRcdFx0aSA9IHN0YXJ0KzE7XG5cdFx0XHR9XG5cdFx0XHRzdGFydCA9IGk7XG5cdFx0fVxuXHRcdHJldHVybiB0b2tlbnM7XG5cdH07XG5cblx0dGhpcy5nZXRWb2ljZVRva2VuID0gZnVuY3Rpb24obGluZSwgc3RhcnQsIGVuZCkge1xuXHRcdC8vIFRoaXMgZmluZHMgdGhlIG5leHQgdG9rZW4uIEEgdG9rZW4gaXMgZGVsaW1pdGVkIGJ5IGEgc3BhY2Ugb3IgYW4gZXF1YWwgc2lnbi4gSWYgaXQgc3RhcnRzIHdpdGggYSBxdW90ZSwgdGhlbiB0aGUgcG9ydGlvbiBiZXR3ZWVuIHRoZSBxdW90ZXMgaXMgcmV0dXJuZWQuXG5cdFx0dmFyIGkgPSBzdGFydDtcblx0XHR3aGlsZSAoaSA8IGVuZCAmJiB0aGlzLmlzV2hpdGVTcGFjZShsaW5lLmNoYXJBdChpKSkgfHwgbGluZS5jaGFyQXQoaSkgPT09ICc9Jylcblx0XHRcdGkrKztcblxuXHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJ1wiJykge1xuXHRcdFx0dmFyIGNsb3NlID0gbGluZS5pbmRleE9mKCdcIicsIGkrMSk7XG5cdFx0XHRpZiAoY2xvc2UgPT09IC0xIHx8IGNsb3NlID49IGVuZClcblx0XHRcdFx0cmV0dXJuIHtsZW46IDEsIGVycjogXCJNaXNzaW5nIGNsb3NlIHF1b3RlXCJ9O1xuXHRcdFx0cmV0dXJuIHtsZW46IGNsb3NlLXN0YXJ0KzEsIHRva2VuOiB0aGlzLnRyYW5zbGF0ZVN0cmluZyhsaW5lLnN1YnN0cmluZyhpKzEsIGNsb3NlKSl9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgaWkgPSBpO1xuXHRcdFx0d2hpbGUgKGlpIDwgZW5kICYmICF0aGlzLmlzV2hpdGVTcGFjZShsaW5lLmNoYXJBdChpaSkpICYmIGxpbmUuY2hhckF0KGlpKSAhPT0gJz0nKVxuXHRcdFx0XHRpaSsrO1xuXHRcdFx0cmV0dXJuIHtsZW46IGlpLXN0YXJ0KzEsIHRva2VuOiBsaW5lLnN1YnN0cmluZyhpLCBpaSl9O1xuXHRcdH1cblx0fTtcblxuXHR2YXIgY2hhck1hcCA9IHtcblx0XHRcImBhXCI6ICfDoCcsIFwiJ2FcIjogXCLDoVwiLCBcIl5hXCI6IFwiw6JcIiwgXCJ+YVwiOiBcIsOjXCIsIFwiXFxcImFcIjogXCLDpFwiLCBcIm9hXCI6IFwiw6VcIiwgXCJhYVwiOiBcIsOlXCIsIFwiPWFcIjogXCLEgVwiLCBcInVhXCI6IFwixINcIiwgXCI7YVwiOiBcIsSFXCIsXG5cdFx0XCJgZVwiOiAnw6gnLCBcIidlXCI6IFwiw6lcIiwgXCJeZVwiOiBcIsOqXCIsIFwiXFxcImVcIjogXCLDq1wiLCBcIj1lXCI6IFwixJNcIiwgXCJ1ZVwiOiBcIsSVXCIsIFwiO2VcIjogXCLEmVwiLCBcIi5lXCI6IFwixJdcIixcblx0XHRcImBpXCI6ICfDrCcsIFwiJ2lcIjogXCLDrVwiLCBcIl5pXCI6IFwiw65cIiwgXCJcXFwiaVwiOiBcIsOvXCIsIFwiPWlcIjogXCLEq1wiLCBcInVpXCI6IFwixK1cIiwgXCI7aVwiOiBcIsSvXCIsXG5cdFx0XCJgb1wiOiAnw7InLCBcIidvXCI6IFwiw7NcIiwgXCJeb1wiOiBcIsO0XCIsIFwifm9cIjogXCLDtVwiLCBcIlxcXCJvXCI6IFwiw7ZcIiwgXCI9b1wiOiBcIsWNXCIsIFwidW9cIjogXCLFj1wiLCBcIi9vXCI6IFwiw7hcIixcblx0XHRcImB1XCI6ICfDuScsIFwiJ3VcIjogXCLDulwiLCBcIl51XCI6IFwiw7tcIiwgXCJ+dVwiOiBcIsWpXCIsIFwiXFxcInVcIjogXCLDvFwiLCBcIm91XCI6IFwixa9cIiwgXCI9dVwiOiBcIsWrXCIsIFwidXVcIjogXCLFrVwiLCBcIjt1XCI6IFwixbNcIixcblx0XHRcImBBXCI6ICfDgCcsIFwiJ0FcIjogXCLDgVwiLCBcIl5BXCI6IFwiw4JcIiwgXCJ+QVwiOiBcIsODXCIsIFwiXFxcIkFcIjogXCLDhFwiLCBcIm9BXCI6IFwiw4VcIiwgXCJBQVwiOiBcIsOFXCIsIFwiPUFcIjogXCLEgFwiLCBcInVBXCI6IFwixIJcIiwgXCI7QVwiOiBcIsSEXCIsXG5cdFx0XCJgRVwiOiAnw4gnLCBcIidFXCI6IFwiw4lcIiwgXCJeRVwiOiBcIsOKXCIsIFwiXFxcIkVcIjogXCLDi1wiLCBcIj1FXCI6IFwixJJcIiwgXCJ1RVwiOiBcIsSUXCIsIFwiO0VcIjogXCLEmFwiLCBcIi5FXCI6IFwixJZcIixcblx0XHRcImBJXCI6ICfDjCcsIFwiJ0lcIjogXCLDjVwiLCBcIl5JXCI6IFwiw45cIiwgXCJ+SVwiOiBcIsSoXCIsIFwiXFxcIklcIjogXCLDj1wiLCBcIj1JXCI6IFwixKpcIiwgXCJ1SVwiOiBcIsSsXCIsIFwiO0lcIjogXCLErlwiLCBcIi5JXCI6IFwixLBcIixcblx0XHRcImBPXCI6ICfDkicsIFwiJ09cIjogXCLDk1wiLCBcIl5PXCI6IFwiw5RcIiwgXCJ+T1wiOiBcIsOVXCIsIFwiXFxcIk9cIjogXCLDllwiLCBcIj1PXCI6IFwixYxcIiwgXCJ1T1wiOiBcIsWOXCIsIFwiL09cIjogXCLDmFwiLFxuXHRcdFwiYFVcIjogJ8OZJywgXCInVVwiOiBcIsOaXCIsIFwiXlVcIjogXCLDm1wiLCBcIn5VXCI6IFwixahcIiwgXCJcXFwiVVwiOiBcIsOcXCIsIFwib1VcIjogXCLFrlwiLCBcIj1VXCI6IFwixapcIiwgXCJ1VVwiOiBcIsWsXCIsIFwiO1VcIjogXCLFslwiLFxuXHRcdFwiYWVcIjogXCLDplwiLCBcIkFFXCI6IFwiw4ZcIiwgXCJvZVwiOiBcIsWTXCIsIFwiT0VcIjogXCLFklwiLCBcInNzXCI6IFwiw59cIixcblx0XHRcIidjXCI6IFwixIdcIiwgXCJeY1wiOiBcIsSJXCIsIFwidWNcIjogXCLEjVwiLCBcImNjXCI6IFwiw6dcIiwgXCIuY1wiOiBcIsSLXCIsIFwiY0NcIjogXCLDh1wiLCBcIidDXCI6IFwixIZcIiwgXCJeQ1wiOiBcIsSIXCIsIFwidUNcIjogXCLEjFwiLCBcIi5DXCI6IFwixIpcIixcblx0XHRcIn5OXCI6IFwiw5FcIiwgXCJ+blwiOiBcIsOxXCIsXG5cdFx0XCI9c1wiOiBcIsWhXCIsIFwidnNcIjogXCLFoVwiLFxuXHRcdFwiREhcIjogXCLDkFwiLCBcImRoXCI6IFwiw7BcIixcblx0XHRcIkhPXCI6IFwixZBcIiwgXCJIb1wiOiBcIsWRXCIsIFwiSFVcIjogXCLFsFwiLCBcIkh1XCI6IFwixbFcIixcblx0XHRcIidZXCI6IFwiw51cIiwgXCIneVwiOiBcIsO9XCIsIFwiXllcIjogXCLFtlwiLCBcIl55XCI6IFwixbdcIiwgXCJcXFwiWVwiOiBcIsW4XCIsIFwiXFxcInlcIjogXCLDv1wiLFxuXHRcdFwidlNcIjogXCLFoFwiLCBcInZaXCI6IFwixb1cIiwgXCJ2elwiOiAnxb4nXG5cbi8vIE1vcmUgY2hhcnM6IMSyIMSzIMSOIMSPIMSQIMSRIMScIMSdIMSeIMSfIMSgIMShIMSiIMSjIMSkIMSlIMSmIMSnIMS0IMS1IMS2IMS3IMS4IMS5IMS6IMS7IMS8IMS9IMS+IMS/IMWAIMWBIMWCIMWDIMWEIMWFIMWGIMWHIMWIIMWJIMWKIMWLIMWUIMWVIMWWIMWXIMWYIMWZIMWaIMWbIMWcIMWdIMWeIMWfIMWgIMWiIMWjIMWkIMWlIMWmIMWnIMW0IMW1IMW5IMW6IMW7IMW8IMW9XG5cdH07XG5cdHZhciBjaGFyTWFwMSA9IHtcblx0XHRcIiNcIjogXCLima9cIixcblx0XHRcImJcIjogXCLima1cIixcblx0XHRcIj1cIjogXCLima5cIlxuXHR9O1xuXHR2YXIgY2hhck1hcDIgPSB7XG5cdFx0XCIyMDFcIjogXCLima9cIixcblx0XHRcIjIwMlwiOiBcIuKZrVwiLFxuXHRcdFwiMjAzXCI6IFwi4pmuXCIsXG5cdFx0XCIyNDFcIjogXCLCoVwiLFxuXHRcdFwiMjQyXCI6IFwiwqJcIiwgXCIyNTJcIjogXCJhXCIsIFwiMjYyXCI6IFwiMlwiLCBcIjI3MlwiOiBcIm9cIiwgXCIzMDJcIjogXCLDglwiLCBcIjMxMlwiOiBcIsOKXCIsIFwiMzIyXCI6IFwiw5JcIiwgXCIzMzJcIjogXCLDmlwiLCBcIjM0MlwiOiBcIsOiXCIsIFwiMzUyXCI6IFwiw6pcIiwgXCIzNjJcIjogXCLDslwiLCBcIjM3MlwiOiBcIsO6XCIsXG5cdFx0XCIyNDNcIjogXCLCo1wiLCBcIjI1M1wiOiBcIsKrXCIsIFwiMjYzXCI6IFwiM1wiLCBcIjI3M1wiOiBcIsK7XCIsIFwiMzAzXCI6IFwiw4NcIiwgXCIzMTNcIjogXCLDi1wiLCBcIjMyM1wiOiBcIsOTXCIsIFwiMzMzXCI6IFwiw5tcIiwgXCIzNDNcIjogXCLDo1wiLCBcIjM1M1wiOiBcIsOrXCIsIFwiMzYzXCI6IFwiw7NcIiwgXCIzNzNcIjogXCLDu1wiLFxuXHRcdFwiMjQ0XCI6IFwiwqRcIiwgXCIyNTRcIjogXCLCrFwiLCBcIjI2NFwiOiBcIiAgzIFcIiwgXCIyNzRcIjogXCIx4oGENFwiLCBcIjMwNFwiOiBcIsOEXCIsIFwiMzE0XCI6IFwiw4xcIiwgXCIzMjRcIjogXCLDlFwiLCBcIjMzNFwiOiBcIsOcXCIsIFwiMzQ0XCI6IFwiw6RcIiwgXCIzNTRcIjogXCLDrFwiLCBcIjM2NFwiOiBcIsO0XCIsIFwiMzc0XCI6IFwiw7xcIixcblx0XHRcIjI0NVwiOiBcIsKlXCIsIFwiMjU1XCI6IFwiLVwiLCBcIjI2NVwiOiBcIs68XCIsIFwiMjc1XCI6IFwiMeKBhDJcIiwgXCIzMDVcIjogXCLDhVwiLCBcIjMxNVwiOiBcIsONXCIsIFwiMzI1XCI6IFwiw5VcIiwgXCIzMzVcIjogXCLDnVwiLCAgXCIzNDVcIjogXCLDpVwiLCBcIjM1NVwiOiBcIsOtXCIsIFwiMzY1XCI6IFwiw7VcIiwgXCIzNzVcIjogXCLDvVwiLFxuXHRcdFwiMjQ2XCI6IFwiwqZcIiwgXCIyNTZcIjogXCLCrlwiLCBcIjI2NlwiOiBcIsK2XCIsIFwiMjc2XCI6IFwiM+KBhDRcIiwgXCIzMDZcIjogXCLDhlwiLCBcIjMxNlwiOiBcIsOOXCIsIFwiMzI2XCI6IFwiw5ZcIiwgXCIzMzZcIjogXCLDnlwiLCBcIjM0NlwiOiBcIsOmXCIsIFwiMzU2XCI6IFwiw65cIiwgXCIzNjZcIjogXCLDtlwiLCBcIjM3NlwiOiBcIsO+XCIsXG5cdFx0XCIyNDdcIjogXCLCp1wiLCBcIjI1N1wiOiBcIiDMhFwiLCBcIjI2N1wiOiBcIsK3XCIsIFwiMjc3XCI6IFwiwr9cIiwgXCIzMDdcIjogXCLDh1wiLCBcIjMxN1wiOiBcIsOPXCIsIFwiMzI3XCI6IFwiw5dcIiwgXCIzMzdcIjogXCLDn1wiLCBcIjM0N1wiOiBcIsOnXCIsIFwiMzU3XCI6IFwiw69cIiwgXCIzNjdcIjogXCLDt1wiLCBcIjM3N1wiOiBcIsO/XCIsXG5cdFx0XCIyNTBcIjogXCIgzIhcIiwgXCIyNjBcIjogXCLCsFwiLCBcIjI3MFwiOiBcIiDMp1wiLCBcIjMwMFwiOiBcIsOAXCIsIFwiMzEwXCI6IFwiw4hcIiwgXCIzMjBcIjogXCLDkFwiLCBcIjMzMFwiOiBcIsOYXCIsIFwiMzQwXCI6IFwiw6BcIiwgXCIzNTBcIjogXCLDqFwiLCBcIjM2MFwiOiBcIsOwXCIsIFwiMzcwXCI6IFwiw7hcIixcblx0XHRcIjI1MVwiOiBcIsKpXCIsIFwiMjYxXCI6IFwiwrFcIiwgXCIyNzFcIjogXCIxXCIsIFwiMzAxXCI6IFwiw4FcIiwgXCIzMTFcIjogXCLDiVwiLCBcIjMyMVwiOiBcIsORXCIsIFwiMzMxXCI6IFwiw5lcIiwgXCIzNDFcIjogXCLDoVwiLCBcIjM1MVwiOiBcIsOpXCIsIFwiMzYxXCI6IFwiw7FcIiwgXCIzNzFcIjogXCLDuVwiIH07XG5cdHRoaXMudHJhbnNsYXRlU3RyaW5nID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dmFyIGFyciA9IHN0ci5zcGxpdCgnXFxcXCcpO1xuXHRcdGlmIChhcnIubGVuZ3RoID09PSAxKSByZXR1cm4gc3RyO1xuXHRcdHZhciBvdXQgPSBudWxsO1xuXHRcdHBhcnNlQ29tbW9uLmVhY2goYXJyLCBmdW5jdGlvbihzKSB7XG5cdFx0XHRpZiAob3V0ID09PSBudWxsKVxuXHRcdFx0XHRvdXQgPSBzO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHZhciBjID0gY2hhck1hcFtzLnN1YnN0cmluZygwLCAyKV07XG5cdFx0XHRcdGlmIChjICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0b3V0ICs9IGMgKyBzLnN1YnN0cmluZygyKTtcblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0YyA9IGNoYXJNYXAyW3Muc3Vic3RyaW5nKDAsIDMpXTtcblx0XHRcdFx0XHRpZiAoYyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0b3V0ICs9IGMgKyBzLnN1YnN0cmluZygzKTtcblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGMgPSBjaGFyTWFwMVtzLnN1YnN0cmluZygwLCAxKV07XG5cdFx0XHRcdFx0XHRpZiAoYyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHRvdXQgKz0gYyArIHMuc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRvdXQgKz0gXCJcXFxcXCIgKyBzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvdXQ7XG5cdH07XG5cdHRoaXMuZ2V0TnVtYmVyID0gZnVuY3Rpb24obGluZSwgaW5kZXgpIHtcblx0XHR2YXIgbnVtID0gMDtcblx0XHR3aGlsZSAoaW5kZXggPCBsaW5lLmxlbmd0aCkge1xuXHRcdFx0c3dpdGNoIChsaW5lLmNoYXJBdChpbmRleCkpIHtcblx0XHRcdFx0Y2FzZSAnMCc6bnVtID0gbnVtKjEwO2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzEnOm51bSA9IG51bSoxMCsxO2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzInOm51bSA9IG51bSoxMCsyO2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzMnOm51bSA9IG51bSoxMCszO2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzQnOm51bSA9IG51bSoxMCs0O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzUnOm51bSA9IG51bSoxMCs1O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzYnOm51bSA9IG51bSoxMCs2O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzcnOm51bSA9IG51bSoxMCs3O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzgnOm51bSA9IG51bSoxMCs4O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzknOm51bSA9IG51bSoxMCs5O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIHtudW06IG51bSwgaW5kZXg6IGluZGV4fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtudW06IG51bSwgaW5kZXg6IGluZGV4fTtcblx0fTtcblxuXHR0aGlzLmdldEZyYWN0aW9uID0gZnVuY3Rpb24obGluZSwgaW5kZXgpIHtcblx0XHR2YXIgbnVtID0gMTtcblx0XHR2YXIgZGVuID0gMTtcblx0XHRpZiAobGluZS5jaGFyQXQoaW5kZXgpICE9PSAnLycpIHtcblx0XHRcdHZhciByZXQgPSB0aGlzLmdldE51bWJlcihsaW5lLCBpbmRleCk7XG5cdFx0XHRudW0gPSByZXQubnVtO1xuXHRcdFx0aW5kZXggPSByZXQuaW5kZXg7XG5cdFx0fVxuXHRcdGlmIChsaW5lLmNoYXJBdChpbmRleCkgPT09ICcvJykge1xuXHRcdFx0aW5kZXgrKztcblx0XHRcdGlmIChsaW5lLmNoYXJBdChpbmRleCkgPT09ICcvJykge1xuXHRcdFx0XHR2YXIgZGl2ID0gMC41O1xuXHRcdFx0XHR3aGlsZSAobGluZS5jaGFyQXQoaW5kZXgrKykgPT09ICcvJylcblx0XHRcdFx0XHRkaXYgPSBkaXYgLzI7XG5cdFx0XHRcdHJldHVybiB7dmFsdWU6IG51bSAqIGRpdiwgaW5kZXg6IGluZGV4LTF9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIGlTYXZlID0gaW5kZXg7XG5cdFx0XHRcdHZhciByZXQyID0gdGhpcy5nZXROdW1iZXIobGluZSwgaW5kZXgpO1xuXHRcdFx0XHRpZiAocmV0Mi5udW0gPT09IDAgJiYgaVNhdmUgPT09IGluZGV4KVx0Ly8gSWYgd2UgZGlkbid0IHVzZSBhbnkgY2hhcmFjdGVycywgaXQgaXMgYW4gaW1wbGllZCAyXG5cdFx0XHRcdFx0cmV0Mi5udW0gPSAyO1xuXHRcdFx0XHRpZiAocmV0Mi5udW0gIT09IDApXG5cdFx0XHRcdFx0ZGVuID0gcmV0Mi5udW07XG5cdFx0XHRcdGluZGV4ID0gcmV0Mi5pbmRleDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge3ZhbHVlOiBudW0vZGVuLCBpbmRleDogaW5kZXh9O1xuXHR9O1xuXG5cdHRoaXMudGhlUmV2ZXJzZXIgPSBmdW5jdGlvbihzdHIpIHtcblx0XHRpZiAocGFyc2VDb21tb24uZW5kc1dpdGgoc3RyLCBcIiwgVGhlXCIpKVxuXHRcdFx0cmV0dXJuIFwiVGhlIFwiICsgc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoLTUpO1xuXHRcdGlmIChwYXJzZUNvbW1vbi5lbmRzV2l0aChzdHIsIFwiLCBBXCIpKVxuXHRcdFx0cmV0dXJuIFwiQSBcIiArIHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aC0zKTtcblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdHRoaXMuc3RyaXBDb21tZW50ID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dmFyIGkgPSBzdHIuaW5kZXhPZignJScpO1xuXHRcdGlmIChpID49IDApXG5cdFx0XHRyZXR1cm4gcGFyc2VDb21tb24uc3RyaXAoc3RyLnN1YnN0cmluZygwLCBpKSk7XG5cdFx0cmV0dXJuIHBhcnNlQ29tbW9uLnN0cmlwKHN0cik7XG5cdH07XG5cblx0dGhpcy5nZXRJbnQgPSBmdW5jdGlvbihzdHIpIHtcblx0XHQvLyBUaGlzIHBhcnNlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgZm9yIGEgbnVtYmVyIGFuZCByZXR1cm5zIHsgdmFsdWU6IG51bSwgZGlnaXRzOiBudW0gfVxuXHRcdC8vIElmIGRpZ2l0cyBpcyAwLCB0aGVuIHRoZSBzdHJpbmcgZGlkbid0IHBvaW50IHRvIGEgbnVtYmVyLlxuXHRcdHZhciB4ID0gcGFyc2VJbnQoc3RyKTtcblx0XHRpZiAoaXNOYU4oeCkpXG5cdFx0XHRyZXR1cm4ge2RpZ2l0czogMH07XG5cdFx0dmFyIHMgPSBcIlwiICsgeDtcblx0XHR2YXIgaSA9IHN0ci5pbmRleE9mKHMpO1x0Ly8gVGhpcyBpcyB0byBhY2NvdW50IGZvciBsZWFkaW5nIHNwYWNlc1xuXHRcdHJldHVybiB7dmFsdWU6IHgsIGRpZ2l0czogaStzLmxlbmd0aH07XG5cdH07XG5cblx0dGhpcy5nZXRGbG9hdCA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdC8vIFRoaXMgcGFyc2VzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBmb3IgYSBudW1iZXIgYW5kIHJldHVybnMgeyB2YWx1ZTogbnVtLCBkaWdpdHM6IG51bSB9XG5cdFx0Ly8gSWYgZGlnaXRzIGlzIDAsIHRoZW4gdGhlIHN0cmluZyBkaWRuJ3QgcG9pbnQgdG8gYSBudW1iZXIuXG5cdFx0dmFyIHggPSBwYXJzZUZsb2F0KHN0cik7XG5cdFx0aWYgKGlzTmFOKHgpKVxuXHRcdFx0cmV0dXJuIHtkaWdpdHM6IDB9O1xuXHRcdHZhciBzID0gXCJcIiArIHg7XG5cdFx0dmFyIGkgPSBzdHIuaW5kZXhPZihzKTtcdC8vIFRoaXMgaXMgdG8gYWNjb3VudCBmb3IgbGVhZGluZyBzcGFjZXNcblx0XHRyZXR1cm4ge3ZhbHVlOiB4LCBkaWdpdHM6IGkrcy5sZW5ndGh9O1xuXHR9O1xuXG5cdHRoaXMuZ2V0TWVhc3VyZW1lbnQgPSBmdW5jdGlvbih0b2tlbnMpIHtcblx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgdXNlZDogMCB9O1xuXHRcdHZhciB1c2VkID0gMTtcblx0XHR2YXIgbnVtID0gJyc7XG5cdFx0aWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJy0nKSB7XG5cdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdG51bSA9ICctJztcblx0XHRcdHVzZWQrKztcblx0XHR9XG5cdFx0ZWxzZSBpZiAodG9rZW5zWzBdLnR5cGUgIT09ICdudW1iZXInKSByZXR1cm4geyB1c2VkOiAwIH07XG5cdFx0bnVtICs9IHRva2Vucy5zaGlmdCgpLnRva2VuO1xuXHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSByZXR1cm4geyB1c2VkOiAxLCB2YWx1ZTogcGFyc2VJbnQobnVtKSB9O1xuXHRcdHZhciB4ID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0aWYgKHgudG9rZW4gPT09ICcuJykge1xuXHRcdFx0dXNlZCsrO1xuXHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHJldHVybiB7IHVzZWQ6IHVzZWQsIHZhbHVlOiBwYXJzZUludChudW0pIH07XG5cdFx0XHRpZiAodG9rZW5zWzBdLnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdHggPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0bnVtID0gbnVtICsgJy4nICsgeC50b2tlbjtcblx0XHRcdFx0dXNlZCsrO1xuXHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgdXNlZDogdXNlZCwgdmFsdWU6IHBhcnNlRmxvYXQobnVtKSB9O1xuXHRcdFx0fVxuXHRcdFx0eCA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdH1cblx0XHRzd2l0Y2ggKHgudG9rZW4pIHtcblx0XHRcdGNhc2UgJ3B0JzogcmV0dXJuIHsgdXNlZDogdXNlZCsxLCB2YWx1ZTogcGFyc2VGbG9hdChudW0pIH07XG5cdFx0XHRjYXNlICdjbSc6IHJldHVybiB7IHVzZWQ6IHVzZWQrMSwgdmFsdWU6IHBhcnNlRmxvYXQobnVtKS8yLjU0KjcyIH07XG5cdFx0XHRjYXNlICdpbic6IHJldHVybiB7IHVzZWQ6IHVzZWQrMSwgdmFsdWU6IHBhcnNlRmxvYXQobnVtKSo3MiB9O1xuXHRcdFx0ZGVmYXVsdDogdG9rZW5zLnVuc2hpZnQoeCk7IHJldHVybiB7IHVzZWQ6IHVzZWQsIHZhbHVlOiBwYXJzZUZsb2F0KG51bSkgfTtcblx0XHR9XG5cdFx0cmV0dXJuIHsgdXNlZDogMCB9O1xuXHR9O1xuXHR2YXIgc3Vic3RJbkNob3JkID0gZnVuY3Rpb24oc3RyKVxuXHR7XG5cdFx0d2hpbGUgKCBzdHIuaW5kZXhPZihcIlxcXFxuXCIpICE9PSAtMSlcblx0XHR7XG5cdFx0XHRzdHIgPSBzdHIucmVwbGFjZShcIlxcXFxuXCIsIFwiXFxuXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXHR0aGlzLmdldEJyYWNrZXR0ZWRTdWJzdHJpbmcgPSBmdW5jdGlvbihsaW5lLCBpLCBtYXhFcnJvckNoYXJzLCBfbWF0Y2hDaGFyKVxuXHR7XG5cdFx0Ly8gVGhpcyBleHRyYWN0cyB0aGUgc3ViIHN0cmluZyBieSBsb29raW5nIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIHNlYXJjaGluZyBmb3IgdGhhdFxuXHRcdC8vIGNoYXJhY3RlciBsYXRlciBpbiB0aGUgbGluZSAob3Igc2VhcmNoIGZvciB0aGUgb3B0aW9uYWwgX21hdGNoQ2hhcikuXG5cdFx0Ly8gRm9yIGluc3RhbmNlLCBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGEgcXVvdGUgaXQgd2lsbCBsb29rIGZvclxuXHRcdC8vIHRoZSBlbmQgcXVvdGUuIElmIHRoZSBlbmQgb2YgdGhlIGxpbmUgaXMgcmVhY2hlZCwgdGhlbiBvbmx5IHVwIHRvIHRoZSBkZWZhdWx0IG51bWJlclxuXHRcdC8vIG9mIGNoYXJhY3RlcnMgYXJlIHJldHVybmVkLCBzbyB0aGF0IGEgbWlzc2luZyBlbmQgcXVvdGUgd29uJ3QgZWF0IHVwIHRoZSBlbnRpcmUgbGluZS5cblx0XHQvLyBJdCByZXR1cm5zIHRoZSBzdWJzdHJpbmcgYW5kIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZC5cblx0XHQvLyBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29uc3VtZWQgaXMgbm9ybWFsbHkgdHdvIG1vcmUgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgc3Vic3RyaW5nLFxuXHRcdC8vIGJ1dCBpbiB0aGUgZXJyb3IgY2FzZSBpdCBtaWdodCBub3QgYmUuXG5cdFx0dmFyIG1hdGNoQ2hhciA9IF9tYXRjaENoYXIgfHwgbGluZS5jaGFyQXQoaSk7XG5cdFx0dmFyIHBvcyA9IGkrMTtcblx0XHR3aGlsZSAoKHBvcyA8IGxpbmUubGVuZ3RoKSAmJiAobGluZS5jaGFyQXQocG9zKSAhPT0gbWF0Y2hDaGFyKSlcblx0XHRcdCsrcG9zO1xuXHRcdGlmIChsaW5lLmNoYXJBdChwb3MpID09PSBtYXRjaENoYXIpXG5cdFx0XHRyZXR1cm4gW3Bvcy1pKzEsc3Vic3RJbkNob3JkKGxpbmUuc3Vic3RyaW5nKGkrMSwgcG9zKSksIHRydWVdO1xuXHRcdGVsc2VcdC8vIHdlIGhpdCB0aGUgZW5kIG9mIGxpbmUsIHNvIHdlJ2xsIGp1c3QgcGljayBhbiBhcmJpdHJhcnkgbnVtIG9mIGNoYXJzIHNvIHRoZSBsaW5lIGRvZXNuJ3QgZGlzYXBwZWFyLlxuXHRcdHtcblx0XHRcdHBvcyA9IGkrbWF4RXJyb3JDaGFycztcblx0XHRcdGlmIChwb3MgPiBsaW5lLmxlbmd0aC0xKVxuXHRcdFx0XHRwb3MgPSBsaW5lLmxlbmd0aC0xO1xuXHRcdFx0cmV0dXJuIFtwb3MtaSsxLCBzdWJzdEluQ2hvcmQobGluZS5zdWJzdHJpbmcoaSsxLCBwb3MpKSwgZmFsc2VdO1xuXHRcdH1cblx0fTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVG9rZW5pemVyO1xuIiwiLy8gICAgd3JhcF9saW5lcy5qczogZG9lcyBsaW5lIHdyYXAgb24gYW4gYWxyZWFkeSBwYXJzZWQgdHVuZS5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxOCBQYXVsIFJvc2VuIChwYXVsIGF0IHBhdWxyb3NlbiBkb3QgbmV0KVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiB3cmFwTGluZXModHVuZSwgbGluZUJyZWFrcykge1xuXHRpZiAoIWxpbmVCcmVha3MgfHwgdHVuZS5saW5lcy5sZW5ndGggPT09IDApXG5cdFx0cmV0dXJuO1xuXG5cdC8vIHR1bmUubGluZXMgY29udGFpbnMgbmVzdGVkIGFycmF5czogdGhlcmUgaXMgYW4gYXJyYXkgb2YgbGluZXMgKHRoYXQncyB0aGUgcGFydCB0aGlzIGZ1bmN0aW9uIHJld3JpdGVzKSxcblx0Ly8gdGhlcmUgaXMgYW4gYXJyYXkgb2Ygc3RhZmZzIHBlciBsaW5lIChmb3IgaW5zdGFuY2UsIHBpYW5vIHdpbGwgaGF2ZSAyLCBvcmNoZXN0cmEgd2lsbCBoYXZlIG1hbnkpXG5cdC8vIHRoZXJlIGlzIGFuIGFycmF5IG9mIHZvaWNlcyBwZXIgc3RhZmYgKGZvciBpbnN0YW5jZSwgNC1wYXJ0IGhhcm1vbnkgbWlnaHQgaGF2ZSBiYXNzIGFuZCB0ZW5vciBvbiBhIHNpbmdsZSBzdGFmZilcblx0Ly8gVGhlIG1lYXN1cmUgbnVtYmVycyBzdGFydCBhdCB6ZXJvIGZvciBlYWNoIHN0YWZmLCBidXQgb24gdGhlIHN1Y2NlZWRpbmcgbGluZXMsIHRoZSBtZWFzdXJlIG51bWJlcnMgYXJlIHJlc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuXG5cdHZhciBuZXdMaW5lcyA9IFtdO1xuXHQvLyBrZWVwIHRyYWNrIG9mIG91ciBjb3VudGVycyBmb3IgZWFjaCBzdGFmZiBhbmQgdm9pY2Vcblx0dmFyIHN0YXJ0TmV3TGluZSA9IFtdO1xuXHR2YXIgY3VycmVudExpbmUgPSBbXTtcblx0dmFyIG1lYXN1cmVOdW1iZXIgPSBbXTtcblx0dmFyIG1lYXN1cmVNYXJrZXIgPSBbXTtcblx0dmFyIGxhc3RNZXRlciA9ICcnO1xuXHR2YXIgdm9pY2VTdGFydCA9IHt9O1xuXHR2YXIgbGluZXNXaXRob3V0U3RhZmYgPSAwO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdHVuZS5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBsaW5lID0gdHVuZS5saW5lc1tpXTtcblx0XHRpZiAobGluZS5zdGFmZikge1xuXHRcdFx0dmFyIHN0YWZmcyA9IGxpbmUuc3RhZmY7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHN0YWZmcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRpZiAoc3RhcnROZXdMaW5lW2pdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRzdGFydE5ld0xpbmVbal0gPSBbXTtcblx0XHRcdFx0XHRjdXJyZW50TGluZVtqXSA9IFtdO1xuXHRcdFx0XHRcdG1lYXN1cmVOdW1iZXJbal0gPSBbXTtcblx0XHRcdFx0XHRtZWFzdXJlTWFya2VyW2pdID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIHN0YWZmID0gc3RhZmZzW2pdO1xuXHRcdFx0XHR2YXIgdm9pY2VzID0gc3RhZmYudm9pY2VzO1xuXHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IHZvaWNlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRcdGlmIChzdGFydE5ld0xpbmVbal1ba10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0c3RhcnROZXdMaW5lW2pdW2tdID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGN1cnJlbnRMaW5lW2pdW2tdID0gMDtcblx0XHRcdFx0XHRcdG1lYXN1cmVOdW1iZXJbal1ba10gPSAwO1xuXHRcdFx0XHRcdFx0bWVhc3VyZU1hcmtlcltqXVtrXSA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChsaW5lc1dpdGhvdXRTdGFmZiA+IDApIGN1cnJlbnRMaW5lW2pdW2tdICs9IGxpbmVzV2l0aG91dFN0YWZmO1xuXHRcdFx0XHRcdHZhciB2b2ljZSA9IHZvaWNlc1trXTtcblx0XHRcdFx0XHRmb3IgKHZhciBlID0gMDsgZSA8IHZvaWNlLmxlbmd0aDsgZSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoc3RhcnROZXdMaW5lW2pdW2tdKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghbmV3TGluZXNbY3VycmVudExpbmVbal1ba11dKVxuXHRcdFx0XHRcdFx0XHRcdG5ld0xpbmVzW2N1cnJlbnRMaW5lW2pdW2tdXSA9IHsgc3RhZmY6IFtdIH07XG5cdFx0XHRcdFx0XHRcdGlmICghbmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdID0ge3ZvaWNlczogW119O1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBzdGFmZikge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGtleSA9PT0gJ21ldGVyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChuZXdMaW5lcy5sZW5ndGggPT09IDEgfHwgbGFzdE1ldGVyICE9PSBKU09OLnN0cmluZ2lmeShzdGFmZltrZXldKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFzdE1ldGVyID0gSlNPTi5zdHJpbmdpZnkoc3RhZmZba2V5XSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXdMaW5lc1tjdXJyZW50TGluZVtqXVtrXV0uc3RhZmZbal1ba2V5XSA9IHN0YWZmW2tleV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGtleSAhPT0gJ3ZvaWNlcycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXdMaW5lc1tjdXJyZW50TGluZVtqXVtrXV0uc3RhZmZbal1ba2V5XSA9IHN0YWZmW2tleV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKG1lYXN1cmVNYXJrZXJbal1ba10pXG5cdFx0XHRcdFx0XHRcdFx0bmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdLmJhck51bWJlciA9IG1lYXN1cmVNYXJrZXJbal1ba107XG5cdFx0XHRcdFx0XHRcdHN0YXJ0TmV3TGluZVtqXVtrXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmFyIGVsZW1lbnQgPSB2b2ljZVtlXTtcblx0XHRcdFx0XHRcdGlmICghbmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdLnZvaWNlc1trXSkge1xuXHRcdFx0XHRcdFx0XHRuZXdMaW5lc1tjdXJyZW50TGluZVtqXVtrXV0uc3RhZmZbal0udm9pY2VzW2tdID0gW107XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIHN0YXJ0SXRlbSBpbiB2b2ljZVN0YXJ0KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHZvaWNlU3RhcnQuaGFzT3duUHJvcGVydHkoc3RhcnRJdGVtKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdLnZvaWNlc1trXS5wdXNoKHZvaWNlU3RhcnRbc3RhcnRJdGVtXSlcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG5ld0xpbmVzW2N1cnJlbnRMaW5lW2pdW2tdXS5zdGFmZltqXS52b2ljZXNba10ucHVzaChlbGVtZW50KTtcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmVsX3R5cGUgPT09ICdzdGVtJykge1xuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgbmljZSB0cmljayB0byBqdXN0IHBheSBhdHRlbnRpb24gdG8gdGhlIGxhc3Qgc2V0dGluZyBvZiBlYWNoIHR5cGUuXG5cdFx0XHRcdFx0XHRcdHZvaWNlU3RhcnRbZWxlbWVudC5lbF90eXBlXSA9IGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmVsX3R5cGUgPT09ICdiYXInKSB7XG5cdFx0XHRcdFx0XHRcdG1lYXN1cmVOdW1iZXJbal1ba10rKztcblx0XHRcdFx0XHRcdFx0aWYgKGxpbmVCcmVha3NbbWVhc3VyZU51bWJlcltqXVtrXV0pIHtcblx0XHRcdFx0XHRcdFx0XHRzdGFydE5ld0xpbmVbal1ba10gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRMaW5lW2pdW2tdKys7XG5cdFx0XHRcdFx0XHRcdFx0bWVhc3VyZU1hcmtlcltqXVtrXSA9IGVsZW1lbnQuYmFyTnVtYmVyO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbGVtZW50LmJhck51bWJlcjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsaW5lc1dpdGhvdXRTdGFmZiA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ld0xpbmVzLnB1c2gobGluZSk7XG5cdFx0XHRsaW5lc1dpdGhvdXRTdGFmZisrO1xuXHRcdH1cblx0fVxuXHR0dW5lLmxpbmVzID0gbmV3TGluZXM7XG59XG5cbmZ1bmN0aW9uIGZyZWVGb3JtTGluZUJyZWFrcyh3aWR0aHMsIGxpbmVCcmVha1BvaW50KSB7XG5cdHZhciBsaW5lQnJlYWtzID0gW107XG5cdHZhciB0b3RhbHMgPSBbXTtcblx0dmFyIHRvdGFsVGhpc0xpbmUgPSAwO1xuXHQvLyBydW4gdGhyb3VnaCBlYWNoIG1lYXN1cmUgYW5kIHNlZSBpZiB0aGUgYWNjdW11bGF0aW9uIGlzIGxlc3MgdGhhbiB0aGUgaWRlYWwuXG5cdC8vIGlmIGl0IHBhc3NlcyB0aGUgaWRlYWwsIHRoZW4gc2VlIHdoZXRoZXIgdGhlIGxhc3Qgb3IgdGhpcyBvbmUgaXMgY2xvc2VyIHRvIHRoZSBpZGVhbC5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgd2lkdGggPSB3aWR0aHNbaV07XG5cdFx0dmFyIGF0dGVtcHRlZFdpZHRoID0gdG90YWxUaGlzTGluZSArIHdpZHRoO1xuXHRcdGlmIChhdHRlbXB0ZWRXaWR0aCA8IGxpbmVCcmVha1BvaW50KVxuXHRcdFx0dG90YWxUaGlzTGluZSA9IGF0dGVtcHRlZFdpZHRoO1xuXHRcdGVsc2Uge1xuXHRcdFx0Ly8gVGhpcyBqdXN0IHBhc3NlZCB0aGUgaWRlYWwsIHNvIHNlZSB3aGV0aGVyIHRoZSBwcmV2aW91cyBvciB0aGUgY3VycmVudCBudW1iZXIgb2YgbWVhc3VyZXMgaXMgY2xvc2VyLlxuXHRcdFx0dmFyIG9sZERpc3RhbmNlID0gbGluZUJyZWFrUG9pbnQgLSB0b3RhbFRoaXNMaW5lO1xuXHRcdFx0dmFyIG5ld0Rpc3RhbmNlID0gYXR0ZW1wdGVkV2lkdGggLSBsaW5lQnJlYWtQb2ludDtcblx0XHRcdGlmIChvbGREaXN0YW5jZSA8IG5ld0Rpc3RhbmNlICYmIHRvdGFsVGhpc0xpbmUgPiAwKSB7XG5cdFx0XHRcdGxpbmVCcmVha3MucHVzaChpIC0gMSk7XG5cdFx0XHRcdHRvdGFscy5wdXNoKE1hdGgucm91bmQodG90YWxUaGlzTGluZSAtIHdpZHRoKSk7XG5cdFx0XHRcdHRvdGFsVGhpc0xpbmUgPSB3aWR0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpIDwgd2lkdGhzLmxlbmd0aC0xKSB7XG5cdFx0XHRcdFx0bGluZUJyZWFrcy5wdXNoKGkpO1xuXHRcdFx0XHRcdHRvdGFscy5wdXNoKE1hdGgucm91bmQodG90YWxUaGlzTGluZSkpO1xuXHRcdFx0XHRcdHRvdGFsVGhpc0xpbmUgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHRvdGFscy5wdXNoKE1hdGgucm91bmQodG90YWxUaGlzTGluZSkpO1xuXHRyZXR1cm4geyBsaW5lQnJlYWtzOiBsaW5lQnJlYWtzLCB0b3RhbHM6IHRvdGFscyB9O1xufVxuXG4vLyBmdW5jdGlvbiBjcmVhdGVMaW5lVGVzdEFycmF5KG51bUxpbmVzLCBudW1NZWFzdXJlcywgbWF4TWVhc3VyZXNQZXJMaW5lLCBtaW5NZWFzdXJlc1BlckxpbmUpIHtcbi8vIFx0dmFyIHRyaWVzID0gW107XG4vLyBcdC8vIFRvIGdldCBhbGwgdGhlIGl0ZXJhdGlvbnMsIGl0IGlzIGV2ZXJ5IGRpZ2l0IGluIGEgcGFydGljdWxhciBiYXNlLW51bWJlcmluZyBzeXN0ZW0uXG4vLyBcdC8vIFRoYXQgaXMsIHdlIHdhbnQgdG8gZ2VuZXJhdGUgZXZlcnkgbnVtYmVyIHRoYXQgaXMgKG51bUxpbmVzLTEpIGRpZ2l0cywgaW4gYmFzZSAobWF4LW1pbisxKVxuLy8gXHQvLyBGb3IgaW5zdGFuY2UsIGZvciA1IGxpbmVzIHdoZXJlIHRoZSBtaW4gaXMgNiBhbmQgbWF4IGlzIDgsIHdlIHdhbnQgZXZlciBjb21iaW5hdGlvbiBvZiA0IGRpZ2l0cyBpbiBiYXNlIDMuXG4vLyBcdHZhciBiYXNlID0gbWF4TWVhc3VyZXNQZXJMaW5lIC0gbWluTWVhc3VyZXNQZXJMaW5lICsgMTtcbi8vIFx0dmFyIGRpZ2l0cyA9IG51bUxpbmVzIC0gMTsgLy8gVGhlIGxhc3QgZGlnaXQgaXMgZml4ZWQ6IGl0IGlzIHdoYXQgZXZlciBpcyBuZWVkZWQgdG8gc3VtIHVwIHRvIHRoZSB0b3RhbCBudW1iZXIgb2YgbWVhc3VyZXMuXG4vLyBcdHZhciBkb25lID0gZmFsc2U7XG4vLyBcdHZhciBpdGVyID0gMDtcbi8vIFx0d2hpbGUgKCFkb25lKSB7XG4vLyBcdFx0dmFyIGF0dGVtcHQgPSBbXTtcbi8vIFx0XHR2YXIgbnVtID0gaXRlcjtcbi8vIFx0XHR2YXIgdG90YWwgPSAwO1xuLy8gXHRcdGZvciAodmFyIGQgPSBkaWdpdHMgLSAxOyBkID49IDA7IGQtLSkge1xuLy8gXHRcdFx0YXR0ZW1wdFtkXSA9IChudW0gJSBiYXNlKSArIG1pbk1lYXN1cmVzUGVyTGluZTtcbi8vIFx0XHRcdG51bSA9IE1hdGguZmxvb3IobnVtIC8gYmFzZSk7XG4vLyBcdFx0XHR0b3RhbCArPSBhdHRlbXB0W2RdO1xuLy8gXHRcdH1cbi8vIFx0XHRpZiAobnVtID4gMClcbi8vIFx0XHRcdGRvbmUgPSB0cnVlOyAvLyBjb250aW51ZSB1bnRpbCB3ZSBleGNlZWQgdGhlIGdyZWF0ZXN0IG51bWJlci4gV2Uga25vdyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtYWluZXIuXG4vLyBcdFx0ZWxzZSB7XG4vLyBcdFx0XHR2YXIgbGFzdExpbmUgPSBudW1NZWFzdXJlcyAtIHRvdGFsO1xuLy8gXHRcdFx0aWYgKGxhc3RMaW5lID49IG1pbk1lYXN1cmVzUGVyTGluZSAmJiBsYXN0TGluZSA8PSBtYXhNZWFzdXJlc1BlckxpbmUpIHtcbi8vIFx0XHRcdFx0YXR0ZW1wdFtkaWdpdHNdID0gbGFzdExpbmU7XG4vLyBcdFx0XHRcdHRyaWVzLnB1c2goYXR0ZW1wdCk7XG4vLyBcdFx0XHR9XG4vLyBcdFx0XHRpdGVyKys7XG4vLyBcdFx0fVxuLy8gXHR9XG4vLyBcdHJldHVybiB0cmllcztcbi8vIH1cblxuLy8gZnVuY3Rpb24gZ2V0VmFyaWFuY2UoYXR0ZW1wdCwgaWRlYWxMaW5lQnJlYWssIHdpZHRocywgYWxsb3dhYmxlT3ZlcmFnZSkge1xuLy8gXHR2YXIgbWVhc3VyZU51bWJlciA9IDA7XG4vLyBcdHZhciB0aGlzV29yc3RWYXJpYW5jZSA9IDA7XG4vLyBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ZW1wdC5sZW5ndGg7IGorKykge1xuLy8gXHRcdHZhciBsaW5lV2lkdGggPSAwO1xuLy8gXHRcdHZhciBtZWFzdXJlc1RoaXNMaW5lID0gYXR0ZW1wdFtqXTtcbi8vIFx0XHRmb3IgKHZhciBrID0gMDsgayA8IG1lYXN1cmVzVGhpc0xpbmU7IGsrKykge1xuLy8gXHRcdFx0bGluZVdpZHRoICs9IHdpZHRoc1ttZWFzdXJlTnVtYmVyKytdO1xuLy8gXHRcdH1cbi8vIFx0XHRpZiAobGluZVdpZHRoID4gYWxsb3dhYmxlT3ZlcmFnZSlcbi8vIFx0XHRcdHJldHVybiBudWxsO1xuLy8gXHRcdHZhciB2YXJpYW5jZSA9IE1hdGguYWJzKGxpbmVXaWR0aCAtIGlkZWFsTGluZUJyZWFrKTtcbi8vIFx0XHRpZiAodmFyaWFuY2UgPiB0aGlzV29yc3RWYXJpYW5jZSlcbi8vIFx0XHRcdHRoaXNXb3JzdFZhcmlhbmNlID0gdmFyaWFuY2U7XG4vLyBcdH1cbi8vIFx0cmV0dXJuIHRoaXNXb3JzdFZhcmlhbmNlO1xuLy8gfVxuXG4vLyBmdW5jdGlvbiBnZXRNYXhWYXJpYW5jZSh3aWR0aHMsIGxpbmVCcmVha1BvaW50LCBsaW5lQnJlYWtzKSB7XG4vLyBcdHZhciBtYXhWYXJpYW5jZSA9IDA7XG4vLyBcdHZhciBudW1MaW5lcyA9IGxpbmVCcmVha3MubGVuZ3RoICsgMTsgLy8gdGhlIGxhc3QgbGluZSBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQgYnJlYWtcbi8vIFx0dmFyIG1lYXN1cmVOdW1iZXIgPSAwO1xuLy8gXHR2YXIgdG90YWxzID0gW107XG4vLyBcdGZvciAodmFyIGkgPSAwOyBpIDw9IGxpbmVCcmVha3MubGVuZ3RoOyBpKyspIHtcbi8vIFx0XHR2YXIgYnJlYWtNZWFzdXJlID0gKGkgPT09IGxpbmVCcmVha3MubGVuZ3RoKSA/IHdpZHRocy5sZW5ndGggOiBsaW5lQnJlYWtzW2ldO1xuLy8gXHRcdHZhciB0aGlzVG90YWwgPSAwO1xuLy8gXHRcdGZvciAodmFyIGogPSBtZWFzdXJlTnVtYmVyOyBqIDwgYnJlYWtNZWFzdXJlOyBqKyspIHtcbi8vIFx0XHRcdHRoaXNUb3RhbCArPSB3aWR0aHNbal07XG4vLyBcdFx0fVxuLy8gXHRcdG1lYXN1cmVOdW1iZXIgPSBicmVha01lYXN1cmU7XG4vLyBcdFx0dmFyIHRoaXNWYXJpYW5jZSA9IHRoaXNUb3RhbCA8PSBsaW5lQnJlYWtQb2ludCA/IGxpbmVCcmVha1BvaW50IC0gdGhpc1RvdGFsIDogMTAwMDAwMDtcbi8vIFx0XHR0b3RhbHMucHVzaCh7dG90YWw6IHRoaXNUb3RhbCwgdmFyaWFuY2U6IHRoaXNWYXJpYW5jZX0pXG4vLyBcdFx0bWF4VmFyaWFuY2UgPSBNYXRoLm1heChtYXhWYXJpYW5jZSwgdGhpc1ZhcmlhbmNlKTtcbi8vIFx0fVxuLy9cbi8vIFx0Y29uc29sZS5sb2cobGluZUJyZWFrUG9pbnQsIHRvdGFscylcbi8vIFx0cmV0dXJuIG1heFZhcmlhbmNlO1xuLy8gfVxuXG5mdW5jdGlvbiBnZXRWYXJpYW5jZSh3aWR0aHMsIGxpbmVCcmVha3MpIHtcblx0dmFyIG51bUxpbmVzID0gbGluZUJyZWFrcy5sZW5ndGggKyAxOyAvLyB0aGUgbGFzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBicmVha1xuXHR2YXIgYXZnID0gd2lkdGhzLnRvdGFsIC8gbnVtTGluZXM7XG5cdHZhciBsYXJnZXN0VmFyaWFuY2UgPSAwO1xuXHR2YXIgbWVhc3VyZU51bWJlciA9IDA7XG5cdGZvciAodmFyIGkgPSAwOyBpIDw9IGxpbmVCcmVha3MubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgYnJlYWtNZWFzdXJlID0gKGkgPT09IGxpbmVCcmVha3MubGVuZ3RoKSA/IHdpZHRocy5tZWFzdXJlV2lkdGhzLmxlbmd0aC0xIDogbGluZUJyZWFrc1tpXTtcblx0XHR2YXIgdGhpc1ZhcmlhbmNlID0gbGluZVZhcmlhbmNlKHdpZHRocy5tZWFzdXJlV2lkdGhzLCBtZWFzdXJlTnVtYmVyLCBicmVha01lYXN1cmUsIGF2Zyk7XG5cdFx0bWVhc3VyZU51bWJlciA9IGJyZWFrTWVhc3VyZSsxO1xuXHRcdGxhcmdlc3RWYXJpYW5jZSA9IE1hdGgubWF4KGxhcmdlc3RWYXJpYW5jZSwgdGhpc1ZhcmlhbmNlKTtcblx0fVxuXG5cdHJldHVybiBsYXJnZXN0VmFyaWFuY2U7XG59XG5cbi8vIGZ1bmN0aW9uIGdldEF2Z1ZhcmlhbmNlKHdpZHRocywgbGluZUJyZWFrUG9pbnQsIGxpbmVCcmVha3MpIHtcbi8vIFx0dmFyIHRvdGFsVmFyaWFuY2UgPSAwO1xuLy8gXHR2YXIgbnVtTGluZXMgPSBsaW5lQnJlYWtzLmxlbmd0aCArIDE7IC8vIHRoZSBsYXN0IGxpbmUgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGJyZWFrXG4vLyBcdHZhciBtZWFzdXJlTnVtYmVyID0gMDtcbi8vIFx0Zm9yICh2YXIgaSA9IDA7IGkgPD0gbGluZUJyZWFrcy5sZW5ndGg7IGkrKykge1xuLy8gXHRcdHZhciBicmVha01lYXN1cmUgPSAoaSA9PT0gbGluZUJyZWFrcy5sZW5ndGgpID8gd2lkdGhzLmxlbmd0aCA6IGxpbmVCcmVha3NbaV07XG4vLyBcdFx0dmFyIHRoaXNUb3RhbCA9IDA7XG4vLyBcdFx0Zm9yICh2YXIgaiA9IG1lYXN1cmVOdW1iZXI7IGogPCBicmVha01lYXN1cmU7IGorKykge1xuLy8gXHRcdFx0dGhpc1RvdGFsICs9IHdpZHRoc1tqXTtcbi8vIFx0XHR9XG4vLyBcdFx0bWVhc3VyZU51bWJlciA9IGJyZWFrTWVhc3VyZTtcbi8vIFx0XHR2YXIgdGhpc1ZhcmlhbmNlID0gTWF0aC5hYnMobGluZUJyZWFrUG9pbnQgLSB0aGlzVG90YWwpO1xuLy8gXHRcdHRvdGFsVmFyaWFuY2UgKz0gdGhpc1ZhcmlhbmNlO1xuLy8gXHR9XG4vL1xuLy8gXHRyZXR1cm4gdG90YWxWYXJpYW5jZSAvIG51bUxpbmVzO1xuLy8gfVxuXG5mdW5jdGlvbiBsaW5lVmFyaWFuY2Uod2lkdGhzLCBzdGFydCwgZW5kLCBhdmcpIHtcblx0dmFyIHRoaXNUb3RhbCA9IGxpbmVXaWR0aCh3aWR0aHMsIHN0YXJ0LCBlbmQpO1xuXHR2YXIgdGhpc1ZhcmlhbmNlID0gTWF0aC5hYnMoYXZnIC0gdGhpc1RvdGFsKTtcblx0cmV0dXJuIHRoaXNWYXJpYW5jZTtcbn1cblxuZnVuY3Rpb24gbGluZVdpZHRoKHdpZHRocywgc3RhcnQsIGVuZCkge1xuXHR2YXIgdGhpc1RvdGFsID0gMDtcblx0Zm9yICh2YXIgaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKVxuXHRcdHRoaXNUb3RhbCArPSB3aWR0aHNbal07XG5cdHJldHVybiB0aGlzVG90YWw7XG59XG5cbi8vIFRPRE8tUEVSOiBGb3IgbG9uZyBwaWVjZXMgb2YgbXVzaWMsIHRoaXMgY2FuIGdldCBsb25nLCBzbyBzdG9wIGZpbmRpbmcgdGhlIGNvbWJpbmF0aW9ucyBhdCBhbiBhcmJpdHJhcnkgcGxhY2UuXG5mdW5jdGlvbiBnZXRBdHRlbXB0cyh3aWR0aHMsIHN0YXJ0LCBsaW5lc0xlZnQsIG1pbiwgbWF4LCBsYXN0TGluZXMpIHtcblx0dmFyIE1BWF9DT01CSU5BVElPTlMgPSAxMjAwO1xuXHR2YXIgYWNjID0gMDtcblx0dmFyIGF0dGVtcHRzID0gW107XG5cdGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHdpZHRocy5sZW5ndGggJiYgYWNjIDwgbWF4OyBpKyspIHtcblx0XHRhY2MgKz0gd2lkdGhzW2ldO1xuXHRcdGlmIChhY2MgPiBtYXgpXG5cdFx0XHRicmVhaztcblx0XHRpZiAoYWNjID4gbWluKSB7XG5cdFx0XHRpZiAobGluZXNMZWZ0ID4gMCAmJiBhdHRlbXB0cy5sZW5ndGggPCBNQVhfQ09NQklOQVRJT05TKSB7XG5cdFx0XHRcdHZhciBuZXh0TGluZXMgPSBnZXRBdHRlbXB0cyh3aWR0aHMsIGkgKyAxLCBsaW5lc0xlZnQgLSAxLCBtaW4sIG1heCwgbGFzdExpbmVzKTtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBuZXh0TGluZXMubGVuZ3RoOyBqKyspXG5cdFx0XHRcdFx0YXR0ZW1wdHMucHVzaChbaV0uY29uY2F0KG5leHRMaW5lc1tqXSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxpbmVzTGVmdCA9PT0gMSAmJiBsYXN0TGluZXMuaW5kZXhPZihpKSA+PSAwKVxuXHRcdFx0XHRhdHRlbXB0cy5wdXNoKFtpXSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhdHRlbXB0cztcbn1cblxuZnVuY3Rpb24gbGFzdExpbmVQb3NzaWJpbGl0aWVzKHdpZHRocywgc3RhcnQsIG1pbiwgbWF4KSB7XG5cdHZhciBhY2MgPSAwO1xuXHR2YXIgcG9zc2liaWxpdGllcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gd2lkdGhzLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuXHRcdGFjYyArPSB3aWR0aHNbaV07XG5cdFx0aWYgKGFjYyA+IG1heClcblx0XHRcdGJyZWFrO1xuXHRcdGlmIChhY2MgPiBtaW4gJiYgaSA8IHN0YXJ0KSB7XG5cdFx0XHRwb3NzaWJpbGl0aWVzLnB1c2goaS0xKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBvc3NpYmlsaXRpZXM7XG59XG5cbmZ1bmN0aW9uIGNsb25lKGFycikge1xuXHR2YXIgbmV3QXJyID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKVxuXHRcdG5ld0Fyci5wdXNoKGFycltpXSk7XG5cdHJldHVybiBuZXdBcnI7XG59XG5cbmZ1bmN0aW9uIG9uZVRyeShtZWFzdXJlV2lkdGhzLCBpZGVhbFdpZHRocywgYWNjdW11bGF0b3IsIGxpbmVBY2N1bXVsYXRvciwgbGluZVdpZHRocywgbGFzdFZhcmlhbmNlLCBoaWdoZXN0VmFyaWFuY2UsIGN1cnJMaW5lLCBsaW5lQnJlYWtzLCBzdGFydEluZGV4LCBvdGhlclRyaWVzKSB7XG5cdGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgbWVhc3VyZVdpZHRocy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBtZWFzdXJlV2lkdGggPSBtZWFzdXJlV2lkdGhzW2ldO1xuXHRcdGFjY3VtdWxhdG9yICs9IG1lYXN1cmVXaWR0aDtcblx0XHRsaW5lQWNjdW11bGF0b3IgKz0gbWVhc3VyZVdpZHRoO1xuXHRcdHZhciB0aGlzVmFyaWFuY2UgPSBNYXRoLmFicyhhY2N1bXVsYXRvciAtIGlkZWFsV2lkdGhzW2N1cnJMaW5lXSk7XG5cdFx0dmFyIHZhcmlhbmNlSXNDbG9zZSA9IE1hdGguYWJzKHRoaXNWYXJpYW5jZSAtIGxhc3RWYXJpYW5jZSkgPCBpZGVhbFdpZHRoc1swXSAvIDEwOyAvLyBzZWUgaWYgdGhlIGRpZmZlcmVuY2UgaXMgbGVzcyB0aGFuIDEwJSwgaWYgc28sIHJ1biB0aGUgdGVzdCBib3RoIHdheXMuXG5cdFx0aWYgKHZhcmlhbmNlSXNDbG9zZSkge1xuXHRcdFx0aWYgKHRoaXNWYXJpYW5jZSA8IGxhc3RWYXJpYW5jZSkge1xuXHRcdFx0XHQvLyBBbHNvIGF0dGVtcHQgb25lIGxlc3MgbWVhc3VyZSBvbiB0aGUgY3VycmVudCBsaW5lIC0gc29tZXRpbWVzIHRoYXQgd29ya3Mgb3V0IGJldHRlci5cblx0XHRcdFx0dmFyIG5ld1dpZHRocyA9IGNsb25lKGxpbmVXaWR0aHMpO1xuXHRcdFx0XHR2YXIgbmV3QnJlYWtzID0gY2xvbmUobGluZUJyZWFrcyk7XG5cdFx0XHRcdG5ld0JyZWFrcy5wdXNoKGktMSk7XG5cdFx0XHRcdG5ld1dpZHRocy5wdXNoKGxpbmVBY2N1bXVsYXRvciAtIG1lYXN1cmVXaWR0aCk7XG5cdFx0XHRcdG90aGVyVHJpZXMucHVzaCh7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3I6IGFjY3VtdWxhdG9yLFxuXHRcdFx0XHRcdGxpbmVBY2N1bXVsYXRvcjogbWVhc3VyZVdpZHRoLFxuXHRcdFx0XHRcdGxpbmVXaWR0aHM6IG5ld1dpZHRocyxcblx0XHRcdFx0XHRsYXN0VmFyaWFuY2U6IE1hdGguYWJzKGFjY3VtdWxhdG9yIC0gaWRlYWxXaWR0aHNbY3VyckxpbmUrMV0pLFxuXHRcdFx0XHRcdGhpZ2hlc3RWYXJpYW5jZTogTWF0aC5tYXgoaGlnaGVzdFZhcmlhbmNlLCBsYXN0VmFyaWFuY2UpLFxuXHRcdFx0XHRcdGN1cnJMaW5lOiBjdXJyTGluZSsxLFxuXHRcdFx0XHRcdGxpbmVCcmVha3M6IG5ld0JyZWFrcyxcblx0XHRcdFx0XHRzdGFydEluZGV4OiBpKzF9KTtcblx0XHRcdH0gZWxzZSBpZiAodGhpc1ZhcmlhbmNlID4gbGFzdFZhcmlhbmNlICYmIGkgPCBtZWFzdXJlV2lkdGhzLmxlbmd0aC0xKSB7XG5cdFx0XHRcdC8vIEFsc28gYXR0ZW1wdCBvbmUgZXh0cmEgbWVhc3VyZSBvbiB0aGlzIGxpbmUuXG5cdFx0XHRcdG5ld1dpZHRocyA9IGNsb25lKGxpbmVXaWR0aHMpO1xuXHRcdFx0XHRuZXdCcmVha3MgPSBjbG9uZShsaW5lQnJlYWtzKTtcblx0XHRcdFx0Ly8gbmV3QnJlYWtzW25ld0JyZWFrcy5sZW5ndGgtMV0gPSBpO1xuXHRcdFx0XHQvLyBuZXdXaWR0aHNbbmV3V2lkdGhzLmxlbmd0aC0xXSA9IGxpbmVBY2N1bXVsYXRvcjtcblx0XHRcdFx0b3RoZXJUcmllcy5wdXNoKHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcjogYWNjdW11bGF0b3IsXG5cdFx0XHRcdFx0bGluZUFjY3VtdWxhdG9yOiBsaW5lQWNjdW11bGF0b3IsXG5cdFx0XHRcdFx0bGluZVdpZHRoczogbmV3V2lkdGhzLFxuXHRcdFx0XHRcdGxhc3RWYXJpYW5jZTogdGhpc1ZhcmlhbmNlLFxuXHRcdFx0XHRcdGhpZ2hlc3RWYXJpYW5jZTogTWF0aC5tYXgoaGlnaGVzdFZhcmlhbmNlLCB0aGlzVmFyaWFuY2UpLFxuXHRcdFx0XHRcdGN1cnJMaW5lOiBjdXJyTGluZSxcblx0XHRcdFx0XHRsaW5lQnJlYWtzOiBuZXdCcmVha3MsXG5cdFx0XHRcdFx0c3RhcnRJbmRleDogaSsxfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh0aGlzVmFyaWFuY2UgPiBsYXN0VmFyaWFuY2UpIHtcblx0XHRcdGxpbmVCcmVha3MucHVzaChpIC0gMSk7XG5cdFx0XHRjdXJyTGluZSsrO1xuXHRcdFx0aGlnaGVzdFZhcmlhbmNlID0gTWF0aC5tYXgoaGlnaGVzdFZhcmlhbmNlLCBsYXN0VmFyaWFuY2UpO1xuXHRcdFx0bGFzdFZhcmlhbmNlID0gTWF0aC5hYnMoYWNjdW11bGF0b3IgLSBpZGVhbFdpZHRoc1tjdXJyTGluZV0pO1xuXHRcdFx0bGluZVdpZHRocy5wdXNoKGxpbmVBY2N1bXVsYXRvciAtIG1lYXN1cmVXaWR0aCk7XG5cdFx0XHRsaW5lQWNjdW11bGF0b3IgPSBtZWFzdXJlV2lkdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxhc3RWYXJpYW5jZSA9IHRoaXNWYXJpYW5jZTtcblx0XHR9XG5cdH1cblx0bGluZVdpZHRocy5wdXNoKGxpbmVBY2N1bXVsYXRvcik7XG59XG5cbmZ1bmN0aW9uIG9wdGltaXplTGluZVdpZHRocyh3aWR0aHMsIGxpbmVCcmVha1BvaW50LCBsaW5lQnJlYWtzLCBleHBsYW5hdGlvbikge1xuXHQvL1x0ZmlndXJlIG91dCBob3cgbWFueSBsaW5lcyAtIFRoYXQncyBvbmUgbW9yZSB0aGFuIHdhcyB0cmllZCBiZWZvcmUuXG5cdHZhciBudW1MaW5lcyA9IE1hdGguY2VpbCh3aWR0aHMudG90YWwgLyBsaW5lQnJlYWtQb2ludCkgKyAxO1xuXG5cdC8vXHRnZXQgdGhlIGlkZWFsIHdpZHRoIGZvciBhIGxpbmUgKGN1bXVsYXRpdmUgd2lkdGggLyBudW0gbGluZXMpIC0gYXBwcm94IHRoZSBzYW1lIGFzIGxpbmVCcmVha1BvaW50IGV4Y2VwdCBmb3Igcm91bmRpbmdcblx0dmFyIGlkZWFsV2lkdGggPSBNYXRoLmZsb29yKHdpZHRocy50b3RhbCAvIG51bUxpbmVzKTtcblxuXHQvL1x0Z2V0IGVhY2ggaWRlYWwgbGluZSB3aWR0aCAoMSppZGVhbCwgMippZGVhbCwgMyppZGVhbCwgZXRjKVxuXHR2YXIgaWRlYWxXaWR0aHMgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1MaW5lczsgaSsrKVxuXHRcdGlkZWFsV2lkdGhzLnB1c2goaWRlYWxXaWR0aCooaSsxKSk7XG5cblx0Ly9cdGZyb20gZmlyc3QgbWVhc3VyZSwgc3RlcCB0aHJvdWdoIGFjY3VtLiBXaWR0aHMgdW50aWwgdGhlIGFicyBvZiB0aGUgaWRlYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9uZS5cblx0Ly8gVGhpcyBjYW4gc29tZXRpbWVzIGxvb2sgZnVubnkgaW4gZWRnZSBjYXNlcywgc28gd2hlbiB0aGUgbGVuZ3RoIGlzIHdpdGhpbiAxMCUsIHRyeSBvbmUgbW9yZSBvciBvbmUgbGVzcyB0byBzZWUgd2hpY2ggaXMgYmV0dGVyLlxuXHQvLyBUaGlzIGlzIGJldHRlciB0aGFuIHRyeWluZyBhbGwgdGhlIHBvc3NpYmlsaXRpZXMgYmVjYXVzZSB0aGF0IHdvdWxkIGdldCB0byBiZSBhIGh1Z2UgbnVtYmVyIGZvciBldmVuIGEgbWVkaXVtIHNpemUgcGllY2UuXG5cdC8vIFRoaXMgbWV0aG9kIHNlZW1zIHRvIG5ldmVyIGdlbmVyYXRlIG1vcmUgdGhhbiBhYm91dCAxNiB0cmllcyBhbmQgaXQgaXMgdXN1YWxseSA0IG9yIGxlc3MuXG5cdHZhciBvdGhlclRyaWVzID0gW107XG5cdG90aGVyVHJpZXMucHVzaCh7XG5cdFx0YWNjdW11bGF0b3I6IDAsXG5cdFx0bGluZUFjY3VtdWxhdG9yOiAwLFxuXHRcdGxpbmVXaWR0aHM6IFtdLFxuXHRcdGxhc3RWYXJpYW5jZTogOTk5OTk5LFxuXHRcdGhpZ2hlc3RWYXJpYW5jZTogMCxcblx0XHRjdXJyTGluZTogMCxcblx0XHRsaW5lQnJlYWtzOiBbXSwgLy8gVGhlc2UgYXJlIHRoZSB6ZXJvLWJhc2VkIGxhc3QgbWVhc3VyZSBvbiBlYWNoIGxpbmVcblx0XHRzdGFydEluZGV4OiAwfSk7XG5cdHZhciBpbmRleCA9IDA7XG5cdHdoaWxlIChpbmRleCA8IG90aGVyVHJpZXMubGVuZ3RoKSB7XG5cdFx0b25lVHJ5KHdpZHRocy5tZWFzdXJlV2lkdGhzLFxuXHRcdFx0aWRlYWxXaWR0aHMsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5hY2N1bXVsYXRvcixcblx0XHRcdG90aGVyVHJpZXNbaW5kZXhdLmxpbmVBY2N1bXVsYXRvcixcblx0XHRcdG90aGVyVHJpZXNbaW5kZXhdLmxpbmVXaWR0aHMsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5sYXN0VmFyaWFuY2UsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5oaWdoZXN0VmFyaWFuY2UsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5jdXJyTGluZSxcblx0XHRcdG90aGVyVHJpZXNbaW5kZXhdLmxpbmVCcmVha3MsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5zdGFydEluZGV4LFxuXHRcdFx0b3RoZXJUcmllcyk7XG5cdFx0aW5kZXgrKztcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgb3RoZXJUcmllcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBvdGhlclRyeSA9IG90aGVyVHJpZXNbaV07XG5cdFx0b3RoZXJUcnkudmFyaWFuY2VzID0gW107XG5cdFx0b3RoZXJUcnkuYXZlVmFyaWFuY2UgPSAwO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgb3RoZXJUcnkubGluZVdpZHRocy5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIGxpbmVXaWR0aCA9IG90aGVyVHJ5LmxpbmVXaWR0aHNbal07XG5cdFx0XHRvdGhlclRyeS52YXJpYW5jZXMucHVzaChsaW5lV2lkdGggLSBpZGVhbFdpZHRoc1swXSk7XG5cdFx0XHRvdGhlclRyeS5hdmVWYXJpYW5jZSArPSBNYXRoLmFicyhsaW5lV2lkdGggLSBpZGVhbFdpZHRoc1swXSk7XG5cdFx0fVxuXHRcdG90aGVyVHJ5LmF2ZVZhcmlhbmNlID0gIG90aGVyVHJ5LmF2ZVZhcmlhbmNlIC8gb3RoZXJUcnkubGluZVdpZHRocy5sZW5ndGg7XG5cdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7IHR5cGU6IFwib3B0aW1pemVMaW5lV2lkdGhzXCIsIGxpbmVCcmVha3M6IG90aGVyVHJ5LmxpbmVCcmVha3MsIHZhcmlhbmNlczogb3RoZXJUcnkudmFyaWFuY2VzLCBhdmVWYXJpYW5jZTogb3RoZXJUcnkuYXZlVmFyaWFuY2UsIHdpZHRoczogd2lkdGhzLm1lYXN1cmVXaWR0aHMgfSk7XG5cdH1cblx0dmFyIHNtYWxsZXN0ID0gOTk5OTk5OTtcblx0dmFyIHNtYWxsZXN0SW5kZXggPSAtMTtcblx0Zm9yIChpID0gMDsgaSA8IG90aGVyVHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRvdGhlclRyeSA9IG90aGVyVHJpZXNbaV07XG5cdFx0aWYgKG90aGVyVHJ5LmF2ZVZhcmlhbmNlIDwgc21hbGxlc3QpIHtcblx0XHRcdHNtYWxsZXN0ID0gb3RoZXJUcnkuYXZlVmFyaWFuY2U7XG5cdFx0XHRzbWFsbGVzdEluZGV4ID0gaTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHsgZmFpbGVkOiBmYWxzZSwgbGluZUJyZWFrczogb3RoZXJUcmllc1tzbWFsbGVzdEluZGV4XS5saW5lQnJlYWtzLCB2YXJpYW5jZTogb3RoZXJUcmllc1tzbWFsbGVzdEluZGV4XS5oaWdoZXN0VmFyaWFuY2UgfTtcbn1cbi8vIFx0Ly8gSW5zdGVhZCBvZiBoYXZpbmcgdG8gdHJ5IGFsbCB0aGUgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyB0byBmaW5kIHRoZSBiZXN0LCB3ZSBzdGFydCB3aXRoIGFuIGltcG9ydGFudCBwaWVjZSBvZiBrbm93bGVkZ2UgYWJvdXQgdGhlIGxpbmVCcmVha3Mgd2UgYXJlIGdpdmVuOlxuLy8gXHQvLyBJZiB0aGVyZSBpcyBhIGxpbmUgdG9vIHNob3J0LCBpdCBpcyB0aGUgbGFzdCBvbmUuXG4vLyBcdC8vIFNvLCBsZXQncyBqdXN0IGRvIGEgY291cGxlIG9mIHR3ZWFrcyB0byBzZWUgaG93IGl0IHdvcmtzIHRvIGFkZCBvbmUgb3IgdHdvIG1lYXN1cmVzIHRvIHRoZSBsYXN0IGxpbmUuXG4vLyBcdHZhciBhdmcgPSB3aWR0aHMudG90YWwgLyAobGluZUJyZWFrcy5sZW5ndGggKyAxKTtcbi8vIFx0dmFyIHZhcmlhbmNlID0gZ2V0VmFyaWFuY2Uod2lkdGhzLCBsaW5lQnJlYWtzKTtcbi8vIFx0dmFyIHZhcmlhbmNlUGN0ID0gdmFyaWFuY2UvbGluZUJyZWFrUG9pbnQqMTAwO1xuLy9cbi8vIFx0aWYgKGxpbmVCcmVha3MubGVuZ3RoID09PSAwKVxuLy8gXHRcdHJldHVybiB7IGZhaWxlZDogdHJ1ZSwgcmVhc29uOiBcIk9ubHkgb25lIGxpbmUuXCIgfTtcbi8vXG4vLyBcdHZhciBsYXN0TGluZVN0YXJ0ID0gbGluZUJyZWFrc1tsaW5lQnJlYWtzLmxlbmd0aC0xXSsxO1xuLy8gXHR2YXIgbGFzdExpbmVWYXJpYW5jZSA9IGxpbmVWYXJpYW5jZSh3aWR0aHMubWVhc3VyZVdpZHRocywgbGFzdExpbmVTdGFydCwgd2lkdGhzLm1lYXN1cmVXaWR0aHMubGVuZ3RoLCBhdmcpO1xuLy8gXHRpZiAodmFyaWFuY2UgPiBsYXN0TGluZVZhcmlhbmNlKVxuLy8gXHRcdHJldHVybiB7IGZhaWxlZDogdHJ1ZSwgcmVhc29uOiBcIkxhc3QgbGluZSBpcyBub3QgdG9vIHNob3J0LlwiIH07XG4vL1xuLy8gXHQvLyBMZXQncyBnZXQgYSBsaXN0IG9mIGFsbCBjb21iaW5hdGlvbnMgdGhhdCBoYXZlIGEgcG9zc2liaWxpdHkgb2Ygd29ya2luZy4gVGhhdCBpcywgYWxsIGNvbWJpbmF0aW9ucyB3aGVyZSBubyBsaW5lIGhhcyBhIHZhcmlhbmNlIGxhcmdlciB0aGFuIFwidmFyaWFuY2VcIi5cbi8vIFx0dmFyIGxhc3RMaW5lcyA9IGxhc3RMaW5lUG9zc2liaWxpdGllcyh3aWR0aHMubWVhc3VyZVdpZHRocywgbGFzdExpbmVTdGFydCwgYXZnIC0gdmFyaWFuY2UsIGF2ZyArIHZhcmlhbmNlKTtcbi8vIFx0dmFyIGF0dGVtcHRzID0gZ2V0QXR0ZW1wdHMod2lkdGhzLm1lYXN1cmVXaWR0aHMsIDAsIGxpbmVCcmVha3MubGVuZ3RoLCBhdmcgLSB2YXJpYW5jZSwgYXZnICsgdmFyaWFuY2UsIGxhc3RMaW5lcyk7XG4vLyBcdC8vY29uc29sZS5sb2coYXR0ZW1wdHMsIGF2ZyAtIHZhcmlhbmNlLCBhdmcgKyB2YXJpYW5jZSk7XG4vL1xuLy8gXHR2YXIgZmFpbGVkID0gdHJ1ZTtcbi8vIFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRlbXB0cy5sZW5ndGg7IGkrKykge1xuLy8gXHRcdHZhciBuZXdWYXJpYW5jZSA9IGdldFZhcmlhbmNlKHdpZHRocywgYXR0ZW1wdHNbaV0pO1xuLy8gXHRcdGlmIChuZXdWYXJpYW5jZSA8IHZhcmlhbmNlKSB7XG4vLyBcdFx0XHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHtcbi8vIFx0XHRcdFx0dHlwZTogXCJPcHRpbWl6ZSB0cnlcIiwgbGluZUJyZWFrczogYXR0ZW1wdHNbaV0sXG4vLyBcdFx0XHRcdHZhcmlhbmNlOiBNYXRoLnJvdW5kKHZhcmlhbmNlKSwgbmV3VmFyaWFuY2U6IE1hdGgucm91bmQobmV3VmFyaWFuY2UpLFxuLy8gXHRcdFx0XHR0b3RhbEF0dGVtcHRzOiBhdHRlbXB0cy5sZW5ndGhcbi8vIFx0XHRcdH0pO1xuLy8gXHRcdFx0dmFyaWFuY2UgPSBuZXdWYXJpYW5jZTtcbi8vIFx0XHRcdGxpbmVCcmVha3MgPSBhdHRlbXB0c1tpXTtcbi8vIFx0XHRcdGZhaWxlZCA9IGZhbHNlO1xuLy8gXHRcdH1cbi8vIFx0fVxuLy8gXHRpZiAoZmFpbGVkKSB7XG4vLyBcdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7IHR5cGU6IFwiT3B0aW1pemUgdHJ5XCIsIGxpbmVCcmVha3M6IGxpbmVCcmVha3MsIHZhcmlhbmNlOiB2YXJpYW5jZSwgcmVhc29uOiBcIk5vbmUgb2YgdGhlIFwiICsgYXR0ZW1wdHMubGVuZ3RoICsgXCIgYXR0ZW1wdHMgd2VyZSBiZXR0ZXIuXCIgfSk7XG4vLyBcdFx0Ly8gVE9ETy1QRVI6IFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IGp1c3QgdHJ5IHRvIG1vdmUgb25lIG1lYXN1cmUgZG93biBhbmQgc2VlIGlmIGl0IGhlbHBzLlxuLy8gXHRcdGlmIChsaW5lQnJlYWtzLmxlbmd0aCA+IDApIHtcbi8vIFx0XHRcdHZhciBhdHRlbXB0ID0gW10uY29uY2F0KGxpbmVCcmVha3MpO1xuLy8gXHRcdFx0YXR0ZW1wdFthdHRlbXB0Lmxlbmd0aCAtIDFdLS07XG4vLyBcdFx0XHRuZXdWYXJpYW5jZSA9IGdldFZhcmlhbmNlKHdpZHRocywgYXR0ZW1wdCk7XG4vLyBcdFx0XHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHtcbi8vIFx0XHRcdFx0dHlwZTogXCJPcHRpbWl6ZSBsYXN0IHRyeVwiLCBsaW5lQnJlYWtzOiBhdHRlbXB0c1tpXSxcbi8vIFx0XHRcdFx0dmFyaWFuY2U6IE1hdGgucm91bmQodmFyaWFuY2UpLCBuZXdWYXJpYW5jZTogTWF0aC5yb3VuZChuZXdWYXJpYW5jZSksXG4vLyBcdFx0XHRcdHRvdGFsQXR0ZW1wdHM6IGF0dGVtcHRzLmxlbmd0aFxuLy8gXHRcdFx0fSk7XG4vLyBcdFx0XHRpZiAobmV3VmFyaWFuY2UgPCB2YXJpYW5jZSkge1xuLy8gXHRcdFx0XHR2YXJpYW5jZSA9IG5ld1ZhcmlhbmNlO1xuLy8gXHRcdFx0XHRsaW5lQnJlYWtzID0gYXR0ZW1wdDtcbi8vIFx0XHRcdFx0ZmFpbGVkID0gZmFsc2U7XG4vLyBcdFx0XHR9XG4vLyBcdFx0fVxuLy8gXHR9XG4vLyBcdC8vIExldCdzIHNxdWVlemUgdGhlIGxpbmUgc3VjY2Vzc2l2ZWx5IHVudGlsIGl0IHNwaWxscyBvbnRvIGFuIGV4dHJhIGxpbmUsIHRoZW4gdGFrZSB0aGUgb3B0aW9uIHdpdGggdGhlIGxvd2VzdCB2YXJpYW5jZVxuLy8gXHQvLyB2YXIgdGFyZ2V0TnVtTGluZXMgPSBsaW5lQnJlYWtzLmxlbmd0aDtcbi8vIFx0Ly8gdmFyIG5ld051bUxpbmVzID0gdGFyZ2V0TnVtTGluZXM7XG4vLyBcdC8vIHZhciBUUllfSU5DUkVNRU5UID0gMTtcbi8vIFx0Ly8gdmFyIHRyeUJyZWFrUG9pbnQgPSBsaW5lQnJlYWtQb2ludCAtIFRSWV9JTkNSRU1FTlQ7XG4vLyBcdC8vIHZhciBmYWlsZWQgPSB0cnVlO1xuLy8gXHQvLyB3aGlsZSAodGFyZ2V0TnVtTGluZXMgPT09IG5ld051bUxpbmVzICYmIHRyeUJyZWFrUG9pbnQgPiA1MCkge1xuLy8gXHQvLyBcdHZhciBmZiA9IGZyZWVGb3JtTGluZUJyZWFrcyh3aWR0aHMubWVhc3VyZVdpZHRocywgdHJ5QnJlYWtQb2ludCk7XG4vLyBcdC8vIFx0bmV3TnVtTGluZXMgPSBmZi5saW5lQnJlYWtzLmxlbmd0aDtcbi8vIFx0Ly8gXHRpZiAobmV3TnVtTGluZXMgPT09IHRhcmdldE51bUxpbmVzKSB7XG4vLyBcdC8vIFx0XHR2YXIgbmV3VmFyaWFuY2UgPSBnZXRWYXJpYW5jZSh3aWR0aHMsIGZmLmxpbmVCcmVha3MpO1xuLy8gXHQvLyBcdFx0dmFyIG5ld1ZhcmlhbmNlUGN0ID0gbmV3VmFyaWFuY2UvdHJ5QnJlYWtQb2ludCoxMDA7XG4vLyBcdC8vIFx0XHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHt0eXBlOiBcIk9wdGltaXplIHRyeVwiLCB0cnlCcmVha1BvaW50OiBNYXRoLnJvdW5kKHRyeUJyZWFrUG9pbnQpLCBsaW5lQnJlYWtzOiBmZi5saW5lQnJlYWtzLCB0b3RhbHM6IGZmLnRvdGFscyxcbi8vIFx0Ly8gXHRcdFx0dmFyaWFuY2U6IE1hdGgucm91bmQodmFyaWFuY2UpLCBuZXdWYXJpYW5jZTogTWF0aC5yb3VuZChuZXdWYXJpYW5jZSksIHZhcmlhbmNlUGN0OiBNYXRoLnJvdW5kKHZhcmlhbmNlUGN0KSwgbmV3VmFyaWFuY2VQY3Q6IE1hdGgucm91bmQobmV3VmFyaWFuY2VQY3QpXG4vLyBcdC8vIFx0XHR9KTtcbi8vIFx0Ly8gXHRcdGlmIChuZXdWYXJpYW5jZVBjdCA8IHZhcmlhbmNlUGN0KSB7XG4vLyBcdC8vIFx0XHRcdHZhcmlhbmNlUGN0ID0gbmV3VmFyaWFuY2VQY3Q7XG4vLyBcdC8vIFx0XHRcdGxpbmVCcmVha3MgPSBmZi5saW5lQnJlYWtzO1xuLy8gXHQvLyBcdFx0XHRmYWlsZWQgPSBmYWxzZTtcbi8vIFx0Ly8gXHRcdH1cbi8vIFx0Ly8gXHR9IGVsc2Uge1xuLy8gXHQvLyBcdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7dHlwZTogXCJPcHRpbWl6ZSB0cnlcIiwgZXhwbGFuYXRpb246IFwiRXhjZWVkZWQgbnVtYmVyIG9mIGxpbmVzLlwiICwgdHJ5QnJlYWtQb2ludDogTWF0aC5yb3VuZCh0cnlCcmVha1BvaW50KSwgbGluZUJyZWFrczogZmYubGluZUJyZWFrcywgdG90YWxzOiBmZi50b3RhbHMsIHZhcmlhbmNlOiB2YXJpYW5jZSwgYXZnOiBhdmcsIHZhcmlhbmNlUGN0OiB2YXJpYW5jZVBjdH0pO1xuLy8gXHQvLyBcdH1cbi8vIFx0Ly8gXHR0cnlCcmVha1BvaW50IC09IFRSWV9JTkNSRU1FTlQ7XG4vLyBcdC8vIH1cbi8vXG4vLyBcdHJldHVybiB7IGZhaWxlZDogZmFpbGVkLCBsaW5lQnJlYWtzOiBsaW5lQnJlYWtzLCB2YXJpYW5jZTogdmFyaWFuY2UgfTtcbi8vIH1cblxuLy8gZnVuY3Rpb24gZml4ZWROdW1MaW5lc0JyZWFrcyh3aWR0aHMsIG51bUxpbmVzLCBhbGxvd092ZXIsIGFsbG93YWJsZVZhcmlhbmNlKSB7XG4vLyBcdHZhciBpZGVhbExpbmVCcmVhayA9IHdpZHRocy50b3RhbCAvIG51bUxpbmVzO1xuLy8gXHQvLyBJZiBhbGwgdGhlIG1lYXN1cmVzIGhhZCB0aGUgc2FtZSBhbW91bnQgb2Ygc3R1ZmYsIHRoZW4gdGhlIGF2ZSB3b3VsZCBiZSBjb3JyZWN0LlxuLy8gXHQvLyBXZSB3aWxsIHRlc3QgYWxsIHRoZSBjb21iaW5hdGlvbnMgZnJvbSBvbmUgbGVzcyB0byBvbmUgbW9yZSB0aGFuIHRoZSBhdmVyYWdlLlxuLy8gXHR2YXIgYXZlcmFnZU1lYXN1cmVzUGVyTGluZSA9IE1hdGgucm91bmQod2lkdGhzLm1lYXN1cmVXaWR0aHMubGVuZ3RoIC8gbnVtTGluZXMpO1xuLy8gXHR2YXIgbWluTWVhc3VyZXNQZXJMaW5lID0gTWF0aC5tYXgoYXZlcmFnZU1lYXN1cmVzUGVyTGluZSAtIDEsIDEpO1xuLy8gXHR2YXIgbWF4TWVhc3VyZXNQZXJMaW5lID0gYXZlcmFnZU1lYXN1cmVzUGVyTGluZSArIDE7XG4vLyBcdHZhciB0cmllcyA9IGNyZWF0ZUxpbmVUZXN0QXJyYXkobnVtTGluZXMsIHdpZHRocy5tZWFzdXJlV2lkdGhzLmxlbmd0aCwgbWF4TWVhc3VyZXNQZXJMaW5lLCBtaW5NZWFzdXJlc1BlckxpbmUpO1xuLy8gXHRjb25zb2xlLmxvZyhcImZpeGVkTnVtTGluZXNCcmVha3MgdGVzdHMgKFwiK21pbk1lYXN1cmVzUGVyTGluZSsnLScrbWF4TWVhc3VyZXNQZXJMaW5lK1wiKVwiLCBudW1MaW5lcywgdHJpZXMubGVuZ3RoKVxuLy9cbi8vIFx0Ly8gRm9yIGVhY2ggcG9zc2libGUgbnVtYmVyIG9mIG1lYXN1cmVzIHBlciBsaW5lLCBzZWUgd2hpY2ggaGFzIHRoZSBjbG9zZXN0IHNwYWNpbmcgdG8gdGhlIGlkZWFsLlxuLy8gXHR2YXIgYmVzdENhc2UgPSAtMTtcbi8vIFx0dmFyIGJlc3RDYXNlVmFyaWFuY2UgPSAxMDAwMDAwO1xuLy8gXHRmb3IgKHZhciBpID0gMCA7IGkgPCB0cmllcy5sZW5ndGg7IGkrKykge1xuLy8gXHRcdHZhciBhdHRlbXB0ID0gdHJpZXNbaV07XG4vLyBcdFx0dmFyIHZhcmlhbmNlID0gZ2V0VmFyaWFuY2UoYXR0ZW1wdCwgaWRlYWxMaW5lQnJlYWssIHdpZHRocy5tZWFzdXJlV2lkdGhzLCBhbGxvd092ZXIgPyBhbGxvd2FibGVWYXJpYW5jZSA6IDApO1xuLy8gXHRcdGlmICh2YXJpYW5jZSAhPT0gbnVsbCkge1xuLy8gXHRcdFx0aWYgKHZhcmlhbmNlIDwgYmVzdENhc2VWYXJpYW5jZSkge1xuLy8gXHRcdFx0XHRiZXN0Q2FzZVZhcmlhbmNlID0gdmFyaWFuY2U7XG4vLyBcdFx0XHRcdGJlc3RDYXNlID0gaTtcbi8vIFx0XHRcdH1cbi8vIFx0XHR9XG4vLyBcdH1cbi8vIFx0dmFyIGZhaWxlZCA9IHRydWU7XG4vLyBcdC8vIEZvciBkZWJ1Z2dpbmcsIHJlY3JlYXRlIHRoZSBsaW5lIHdpZHRoc1xuLy8gXHR2YXIgdG90YWxzID0gW107XG4vLyBcdGlmIChiZXN0Q2FzZSA+PSAwKSB7XG4vLyBcdFx0ZmFpbGVkID0gZmFsc2U7XG4vLyBcdFx0dmFyIGluZGV4ID0gMDtcbi8vIFx0XHRmb3IgKGkgPSAwOyBpIDwgdHJpZXNbYmVzdENhc2VdLmxlbmd0aDsgaSsrKSB7XG4vLyBcdFx0XHR2YXIgdG90YWwgPSAwO1xuLy8gXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0cmllc1tiZXN0Q2FzZV1baV07IGorKykge1xuLy8gXHRcdFx0XHR0b3RhbCArPSB3aWR0aHMubWVhc3VyZVdpZHRoc1tpbmRleCsrXTtcbi8vIFx0XHRcdH1cbi8vIFx0XHRcdHRvdGFscy5wdXNoKE1hdGgucm91bmQodG90YWwpKTtcbi8vIFx0XHR9XG4vLyBcdFx0Ly8gV2Ugbm93IGhhdmUgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgbnVtYmVyIG9mIG1lYXN1cmVzIHBlciBsaW5lLCBidXQgd2Ugd2FudCB0byByZXR1cm4gdGhlIGFic29sdXRlIG1lYXN1cmUgbnVtYmVyIHRvIGJyZWFrIG9uLlxuLy8gXHRcdGlmICh0cmllc1tiZXN0Q2FzZV0ubGVuZ3RoID4gMCkge1xuLy8gXHRcdFx0dHJpZXNbYmVzdENhc2VdWzBdLS07IC8vIFRoZSByZXN1bHRzIHNob3VsZCBjb250YWluIHRoZSBsYXN0IG1lYXN1cmUgbnVtYmVyIG9uIHRoZSBsaW5lLCB6ZXJvLWJhc2VkLlxuLy8gXHRcdFx0Zm9yIChpID0gMTsgaSA8IHRyaWVzW2Jlc3RDYXNlXS5sZW5ndGg7IGkrKylcbi8vIFx0XHRcdFx0dHJpZXNbYmVzdENhc2VdW2ldICs9IHRyaWVzW2Jlc3RDYXNlXVtpIC0gMV07IC8vIFRoaXMgc2V0cyB0aGUgemVyby1iYXNlZCBtZWFzdXJlIG51bWJlclxuLy8gXHRcdFx0Ly8gVGhlIGxhc3QgbGluZSBpcyBpbXBsaWVkIGFuZCB3ZSBkb24ndCBuZWVkIHRvIHJldHVybiBpdFxuLy8gXHRcdFx0dHJpZXNbYmVzdENhc2VdLnBvcCgpO1xuLy8gXHRcdH1cbi8vIFx0fVxuLy8gXHRyZXR1cm4geyBmYWlsZWQ6IGZhaWxlZCwgbGluZUJyZWFrczogdHJpZXNbYmVzdENhc2VdLCBiZXN0Q2FzZVZhcmlhbmNlOiBNYXRoLnJvdW5kKGJlc3RDYXNlVmFyaWFuY2UpLCB0b3RhbHM6IHRvdGFscyB9O1xuLy8gfVxuXG5mdW5jdGlvbiBmaXhlZE1lYXN1cmVMaW5lQnJlYWtzKHdpZHRocywgbGluZUJyZWFrUG9pbnQsIHByZWZlcnJlZE1lYXN1cmVzUGVyTGluZSkge1xuXHR2YXIgbGluZUJyZWFrcyA9IFtdO1xuXHR2YXIgdG90YWxzID0gW107XG5cdHZhciB0aGlzV2lkdGggPSAwO1xuXHR2YXIgZmFpbGVkID0gZmFsc2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGhzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dGhpc1dpZHRoICs9IHdpZHRoc1tpXTtcblx0XHRpZiAodGhpc1dpZHRoID4gbGluZUJyZWFrUG9pbnQpIHtcblx0XHRcdGZhaWxlZCA9IHRydWU7XG5cdFx0fVxuXHRcdGlmIChpICUgcHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lID09PSAocHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lLTEpKSB7XG5cdFx0XHRpZiAoaSAhPT0gd2lkdGhzLmxlbmd0aC0xKSAvLyBEb24ndCBib3RoZXIgcHV0dGluZyBhIGxpbmUgYnJlYWsgZm9yIHRoZSBsYXN0IGxpbmUgLSBpdCdzIGFscmVhZHkgYSBicmVhay5cblx0XHRcdFx0bGluZUJyZWFrcy5wdXNoKGkpO1xuXHRcdFx0dG90YWxzLnB1c2goTWF0aC5yb3VuZCh0aGlzV2lkdGgpKTtcblx0XHRcdHRoaXNXaWR0aCA9IDA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7IGZhaWxlZDogZmFpbGVkLCB0b3RhbHM6IHRvdGFscywgbGluZUJyZWFrczogbGluZUJyZWFrcyB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZXZpc2VkVHVuZShsaW5lQnJlYWtzLCBzdGFmZldpZHRoLCBhYmNTdHJpbmcsIHBhcmFtcywgUGFyc2UpIHtcblx0dmFyIGFiY1BhcnNlciA9IG5ldyBQYXJzZSgpO1xuXHR2YXIgcmV2aXNlZFBhcmFtcyA9IHtcblx0XHRsaW5lQnJlYWtzOiBsaW5lQnJlYWtzLFxuXHRcdHN0YWZmd2lkdGg6IHN0YWZmV2lkdGhcblx0fTtcblx0Zm9yICh2YXIga2V5IGluIHBhcmFtcykge1xuXHRcdGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkgIT09ICd3cmFwJyAmJiBrZXkgIT09ICdzdGFmZndpZHRoJykge1xuXHRcdFx0cmV2aXNlZFBhcmFtc1trZXldID0gcGFyYW1zW2tleV07XG5cdFx0fVxuXHR9XG5cblx0YWJjUGFyc2VyLnBhcnNlKGFiY1N0cmluZywgcmV2aXNlZFBhcmFtcyk7XG5cdHJldHVybiB7IHR1bmU6IGFiY1BhcnNlci5nZXRUdW5lKCksIHJldmlzZWRQYXJhbXM6IHJldmlzZWRQYXJhbXMgfTtcbn1cblxuZnVuY3Rpb24gY2FsY0xpbmVXcmFwcyh0dW5lLCB3aWR0aHMsIGFiY1N0cmluZywgcGFyYW1zLCBQYXJzZSwgZW5ncmF2ZXJfY29udHJvbGxlcikge1xuXHQvLyBGb3IgY2FsY3VsYXRpbmcgaG93IG11Y2ggY2FuIGdvIG9uIHRoZSBsaW5lLCBpdCBkZXBlbmRzIG9uIHRoZSB3aWR0aCBvZiB0aGUgbGluZS4gSXQgaXMgYSBjb252ZW5pZW5jZSB0byBqdXN0IGRpdmlkZSBpdCBoZXJlXG5cdC8vIGJ5IHRoZSBtaW5pbXVtIHNwYWNpbmcgaW5zdGVhZCBvZiBtdWx0aXBseWluZyB0aGUgbWluIHNwYWNpbmcgbGF0ZXIuXG5cdC8vIFRoZSBzY2FsaW5nIHdvcmtzIGRpZmZlcmVudGx5OiB0aGlzIGlzIGRvbmUgYnkgY2hhbmdpbmcgdGhlIHNjYWxpbmcgb2YgdGhlIG91dGVyIFNWRywgc28gdGhlIHNjYWxpbmcgbmVlZHMgdG8gYmUgY29tcGVuc2F0ZWRcblx0Ly8gZm9yIGhlcmUsIGJlY2F1c2UgdGhlIGFjdHVhbCB3aWR0aCB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBjYWxjdWxhdGVkIG51bWJlcnMuXG5cblx0Ly8gSWYgdGhlIGRlc2lyZWQgd2lkdGggaXMgbGVzcyB0aGFuIHRoZSBtYXJnaW4sIGp1c3QgcHVudCBhbmQgcmV0dXJuIHRoZSBvcmlnaW5hbCB0dW5lXG5cdGlmIChwYXJhbXMuc3RhZmZ3aWR0aCA8IHdpZHRocy5sZWZ0KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGV4cGxhbmF0aW9uOiBcIlN0YWZmd2lkdGggaXMgbmFycm93ZXIgdGhhbiB0aGUgbWFyZ2luXCIsXG5cdFx0XHR0dW5lOiB0dW5lLFxuXHRcdFx0cmV2aXNlZFBhcmFtczogcGFyYW1zXG5cdFx0fTtcblx0fVxuXHR2YXIgc2NhbGUgPSBwYXJhbXMuc2NhbGUgPyBNYXRoLm1heChwYXJhbXMuc2NhbGUsIDAuMSkgOiAxO1xuXHR2YXIgbWluU3BhY2luZyA9IHBhcmFtcy53cmFwLm1pblNwYWNpbmcgPyBNYXRoLm1heChwYXJzZUZsb2F0KHBhcmFtcy53cmFwLm1pblNwYWNpbmcpLCAxKSA6IDE7XG5cdHZhciBtaW5TcGFjaW5nTGltaXQgPSBwYXJhbXMud3JhcC5taW5TcGFjaW5nTGltaXQgPyBNYXRoLm1heChwYXJzZUZsb2F0KHBhcmFtcy53cmFwLm1pblNwYWNpbmdMaW1pdCksIDEpIDogbWluU3BhY2luZyAtIDAuMTtcblx0dmFyIG1heFNwYWNpbmcgPSBwYXJhbXMud3JhcC5tYXhTcGFjaW5nID8gTWF0aC5tYXgocGFyc2VGbG9hdChwYXJhbXMud3JhcC5tYXhTcGFjaW5nKSwgMSkgOiB1bmRlZmluZWQ7XG5cdGlmIChwYXJhbXMud3JhcC5sYXN0TGluZUxpbWl0ICYmICFtYXhTcGFjaW5nKVxuXHRcdG1heFNwYWNpbmcgPSBNYXRoLm1heChwYXJzZUZsb2F0KHBhcmFtcy53cmFwLmxhc3RMaW5lTGltaXQpLCAxKTtcblx0dmFyIHRhcmdldEhlaWdodCA9IHBhcmFtcy53cmFwLnRhcmdldEhlaWdodCA/IE1hdGgubWF4KHBhcnNlSW50KHBhcmFtcy53cmFwLnRhcmdldEhlaWdodCwgMTApLCAxMDApIDogdW5kZWZpbmVkO1xuXHR2YXIgcHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lID0gcGFyYW1zLndyYXAucHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lID8gTWF0aC5tYXgocGFyc2VJbnQocGFyYW1zLndyYXAucHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lLCAxMCksIDEpIDogdW5kZWZpbmVkO1xuXG5cdHZhciBsaW5lQnJlYWtQb2ludCA9IChwYXJhbXMuc3RhZmZ3aWR0aCAtIHdpZHRocy5sZWZ0KSAvIG1pblNwYWNpbmcgLyBzY2FsZTtcblx0dmFyIG1pbkxpbmVTaXplID0gKHBhcmFtcy5zdGFmZndpZHRoIC0gd2lkdGhzLmxlZnQpIC8gbWF4U3BhY2luZyAvIHNjYWxlO1xuXHR2YXIgYWxsb3dhYmxlVmFyaWFuY2UgPSAocGFyYW1zLnN0YWZmd2lkdGggLSB3aWR0aHMubGVmdCkgLyBtaW5TcGFjaW5nTGltaXQgLyBzY2FsZTtcblx0dmFyIGV4cGxhbmF0aW9uID0geyB3aWR0aHM6IHdpZHRocywgbGluZUJyZWFrUG9pbnQ6IGxpbmVCcmVha1BvaW50LCBtaW5MaW5lU2l6ZTogbWluTGluZVNpemUsIGF0dGVtcHRzOiBbXSwgc3RhZmZXaWR0aDogcGFyYW1zLnN0YWZmd2lkdGgsIG1pbldpZHRoOiBNYXRoLnJvdW5kKGFsbG93YWJsZVZhcmlhbmNlKSB9O1xuXG5cdC8vIElmIHRoZXJlIGlzIGEgcHJlZmVycmVkIG51bWJlciBvZiBtZWFzdXJlcyBwZXIgbGluZSwgdGVzdCB0aGF0IGZpcnN0LiBJZiBub25lIG9mIHRoZSBsaW5lcyBpcyB0b28gbG9uZywgdGhlbiB3ZSdyZSBmaW5pc2hlZC5cblx0dmFyIGxpbmVCcmVha3MgPSBudWxsO1xuXHRpZiAocHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lKSB7XG5cdFx0dmFyIGYgPSBmaXhlZE1lYXN1cmVMaW5lQnJlYWtzKHdpZHRocy5tZWFzdXJlV2lkdGhzLCBsaW5lQnJlYWtQb2ludCwgcHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lKTtcblx0XHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHsgdHlwZTogXCJGaXhlZCBNZWFzdXJlcyBQZXIgTGluZVwiLCBwcmVmZXJyZWRNZWFzdXJlc1BlckxpbmU6IHByZWZlcnJlZE1lYXN1cmVzUGVyTGluZSwgbGluZUJyZWFrczogZi5saW5lQnJlYWtzLCBmYWlsZWQ6IGYuZmFpbGVkLCB0b3RhbHM6IGYudG90YWxzIH0pO1xuXHRcdGlmICghZi5mYWlsZWQpXG5cdFx0XHRsaW5lQnJlYWtzID0gZi5saW5lQnJlYWtzO1xuXHR9XG5cblx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBsaW5lQnJlYWtzIHlldCwgdXNlIHRoZSBmcmVlIGZvcm0gbWV0aG9kIG9mIGxpbmUgYnJlYWtzLlxuXHQvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIGVpdGhlciBpZiBQcmVmZXJyZWQgTWVhc3VyZXMgaXMgbm90IHVzZWQsIG9yIGlmIHRoZSBtdXNpYyBpcyBqdXN0IHdlaXJkIC0gbGlrZSBhIHNpbmdsZSBtZWFzdXJlIGlzIHdheSB0b28gY3Jvd2RlZC5cblx0aWYgKCFsaW5lQnJlYWtzKSB7XG5cdFx0dmFyIGZmID0gZnJlZUZvcm1MaW5lQnJlYWtzKHdpZHRocy5tZWFzdXJlV2lkdGhzLCBsaW5lQnJlYWtQb2ludCk7XG5cdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7IHR5cGU6IFwiRnJlZSBGb3JtXCIsIGxpbmVCcmVha3M6IGZmLmxpbmVCcmVha3MsIHRvdGFsczogZmYudG90YWxzIH0pO1xuXHRcdGxpbmVCcmVha3MgPSBmZi5saW5lQnJlYWtzO1xuXG5cdFx0Ly8gV2Ugbm93IGhhdmUgYW4gYWNjZXB0YWJsZSBudW1iZXIgb2YgbGluZXMsIGJ1dCB0aGUgbWVhc3VyZXMgbWF5IG5vdCBiZSBvcHRpbWFsbHkgZGlzdHJpYnV0ZWQuIFNlZSBpZiB0aGVyZSBpcyBhIGJldHRlciBkaXN0cmlidXRpb24uXG5cdFx0ZmYgPSBvcHRpbWl6ZUxpbmVXaWR0aHMod2lkdGhzLCBsaW5lQnJlYWtQb2ludCwgbGluZUJyZWFrcywgZXhwbGFuYXRpb24pO1xuXHRcdGV4cGxhbmF0aW9uLmF0dGVtcHRzLnB1c2goeyB0eXBlOiBcIk9wdGltaXplXCIsIGZhaWxlZDogZmYuZmFpbGVkLCByZWFzb246IGZmLnJlYXNvbiwgbGluZUJyZWFrczogZmYubGluZUJyZWFrcywgdG90YWxzOiBmZi50b3RhbHMgfSk7XG5cdFx0aWYgKCFmZi5mYWlsZWQpXG5cdFx0XHRsaW5lQnJlYWtzID0gZmYubGluZUJyZWFrcztcblx0fVxuXG5cdC8vIElmIHRoZSB2ZXJ0aWNhbCBzcGFjZSBleGNlZWRzIHRhcmdldEhlaWdodCwgcmVtb3ZlIGEgbGluZSBhbmQgdHJ5IGFnYWluLiBJZiB0aGF0IGlzIHRvbyBjcm93ZGVkLCB0aGVuIGRvbid0IHVzZSBpdC5cblx0dmFyIHN0YWZmV2lkdGggPSBwYXJhbXMuc3RhZmZ3aWR0aDtcblx0dmFyIHJldCA9IGdldFJldmlzZWRUdW5lKGxpbmVCcmVha3MsIHN0YWZmV2lkdGgsIGFiY1N0cmluZywgcGFyYW1zLCBQYXJzZSk7XG5cdHZhciBuZXdXaWR0aHMgPSBlbmdyYXZlcl9jb250cm9sbGVyLmdldE1lYXN1cmVXaWR0aHMocmV0LnR1bmUpO1xuXHR2YXIgZ290VHVuZSA9IHRydWU7IC8vIElmIHdlIGFkanVzdCB0aGUgbnVtIGxpbmVzLCBzZXQgdGhpcyB0byBmYWxzZVxuXHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHt0eXBlOiBcImhlaWdodENoZWNrXCIsIGhlaWdodDogbmV3V2lkdGhzLmhlaWdodCB9KTtcblxuXHQvLyBcdGlmIGFsbCBvZiB0aGUgbGluZXMgYXJlIHRvbyBzcGFyc2UsIG1ha2UgdGhlIHdpZHRoIG5hcnJvd2VyLlxuXHQvLyBUT0RPLVBFUjogaW1wbGVtZW50IHRoaXMgY2FzZS5cblxuXHQvLyBJZiBvbmUgbGluZSBhbmQgdGhlIHNwYWNpbmcgaXMgPiBtYXhTcGFjaW5nLCBtYWtlIHRoZSB3aWR0aCBuYXJyb3dlci5cblx0aWYgKGxpbmVCcmVha3MubGVuZ3RoID09PSAwICYmIG1pbkxpbmVTaXplID4gd2lkdGhzLnRvdGFsKSB7XG5cdFx0c3RhZmZXaWR0aCA9ICh3aWR0aHMudG90YWwgKiBtYXhTcGFjaW5nICogc2NhbGUpICsgd2lkdGhzLmxlZnQ7XG5cdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7dHlwZTogXCJ0b28gc3BhcnNlXCIsIG5ld1dpZHRoOiBNYXRoLnJvdW5kKHN0YWZmV2lkdGgpfSlcblx0XHRnb3RUdW5lID0gZmFsc2U7XG5cdH1cblxuXHQvLyBpZiAocmV0LmxpbmVCcmVha3MubGVuZ3RoID09PSAwKSB7XG5cdC8vIFx0Ly8gRXZlcnl0aGluZyBmaXRzIG9uIG9uZSBsaW5lLCBzbyBzZWUgaWYgdGhlcmUgaXMgVE9PIG11Y2ggc3BhY2UgYW5kIHRoZSBzdGFmZiB3aWR0aCBuZWVkcyB0byBiZSBzaG9ydGVuZWQuXG5cdC8vIFx0aWYgKG1pbkxpbmVTaXplID4gMCAmJiByZXQudG90YWxUaGlzTGluZSA+IDAgJiYgcmV0LnRvdGFsVGhpc0xpbmUgPCBtaW5MaW5lU2l6ZSlcblx0Ly8gXHRcdHN0YWZmV2lkdGggPSBzdGFmZldpZHRoIC8gKG1pbkxpbmVTaXplIC8gcmV0LnRvdGFsVGhpc0xpbmUpO1xuXHQvLyB9IGVsc2UgaWYgKHJldC50b3RhbFRoaXNMaW5lIDwgbWluTGluZVNpemUpIHtcblx0Ly8gXHQvLyB0aGUgbGFzdCBsaW5lIGlzIHRvbyBzaG9ydCwgc28gYXR0ZW1wdCB0byByZWRpc3RyaWJ1dGUgYnkgY2hhbmdpbmcgdGhlIG1pbi5cblx0Ly8gXHQvLyBXZSB3aWxsIHRyeSBtb3JlIGFuZCBsZXNzIHNwYWNlIGFsdGVybmF0aXZlbHkuIFRoZSBzcGFjZSBjYW4ndCBiZSBsZXNzIHRoYW4gMS4wLCBhbmQgd2UnbGwgdHJ5IGluIDAuMSBpbmNyZW1lbnRzLlxuXHQvLyBcdHZhciBtaW5UcnlzID0gW107XG5cdC8vIFx0aWYgKG1pblNwYWNpbmcgPiAxLjEpXG5cdC8vIFx0XHRtaW5UcnlzLnB1c2gobWluU3BhY2luZyAtIDAuMSk7XG5cdC8vIFx0bWluVHJ5cy5wdXNoKG1pblNwYWNpbmcgKyAwLjEpO1xuXHQvLyBcdGlmIChtaW5TcGFjaW5nID4gMS4yKVxuXHQvLyBcdFx0bWluVHJ5cy5wdXNoKG1pblNwYWNpbmcgLSAwLjIpO1xuXHQvLyBcdG1pblRyeXMucHVzaChtaW5TcGFjaW5nICsgMC4yKTtcblx0Ly8gXHRpZiAobWluU3BhY2luZyA+IDEuMylcblx0Ly8gXHRcdG1pblRyeXMucHVzaChtaW5TcGFjaW5nIC0gMC4zKTtcblx0Ly8gXHRtaW5UcnlzLnB1c2gobWluU3BhY2luZyArIDAuMyk7XG5cdC8vIFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtaW5UcnlzLmxlbmd0aCAmJiByZXQudG90YWxUaGlzTGluZSA8IG1pbkxpbmVTaXplOyBpKyspIHtcblx0Ly8gXHRcdGxpbmVCcmVha1BvaW50ID0gKHBhcmFtcy5zdGFmZndpZHRoIC0gd2lkdGhzLmxlZnQpIC8gbWluVHJ5c1tpXSAvIHNjYWxlO1xuXHQvLyBcdFx0cmV0ID0gY2FsY0xpbmVCcmVha3Mod2lkdGhzLm1lYXN1cmVXaWR0aHMsIGxpbmVCcmVha1BvaW50KTtcblx0Ly8gXHR9XG5cdC8vIH1cblxuXHRpZiAoIWdvdFR1bmUpXG5cdFx0cmV0ID0gZ2V0UmV2aXNlZFR1bmUobGluZUJyZWFrcywgc3RhZmZXaWR0aCwgYWJjU3RyaW5nLCBwYXJhbXMsIFBhcnNlKTtcblx0cmV0LmV4cGxhbmF0aW9uID0gZXhwbGFuYXRpb247XG5cdHJldHVybiByZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyB3cmFwTGluZXM6IHdyYXBMaW5lcywgY2FsY0xpbmVXcmFwczogY2FsY0xpbmVXcmFwcyB9O1xuIiwiLy8gICAgYWJjX3R1bmUuanM6IGEgY29tcHV0ZXIgdXNhYmxlIGludGVybmFsIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgb25lIHR1bmUuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBQYXVsIFJvc2VuIChwYXVsIGF0IHBhdWxyb3NlbiBkb3QgbmV0KVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfY29tbW9uJyk7XG52YXIgcGFyc2VLZXlWb2ljZSA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19wYXJzZV9rZXlfdm9pY2UnKTtcbnZhciBzcGFjaW5nID0gcmVxdWlyZSgnLi4vd3JpdGUvYWJjX3NwYWNpbmcnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBkYXRhIGZvciBhIHNpbmdsZSBBQkMgdHVuZS4gSXQgaXMgY3JlYXRlZCBhbmQgcG9wdWxhdGVkIGJ5IHRoZSB3aW5kb3cuQUJDSlMucGFyc2UuUGFyc2UgY2xhc3MuXG4gKiBBbHNvIGtub3duIGFzIHRoZSBBQkNKUyBBYnN0cmFjdCBTeW50YXggVHJlZVxuICogQGFsdGVybmF0ZUNsYXNzTmFtZSBBQkNKUy5UdW5lXG4gKi9cbnZhciBUdW5lID0gZnVuY3Rpb24oKSB7XG5cdC8vIFRoZSBzdHJ1Y3R1cmUgY29uc2lzdHMgb2YgYSBoYXNoIHdpdGggdGhlIGZvbGxvd2luZyB0d28gaXRlbXM6XG5cdC8vIG1ldGFUZXh0OiBhIGhhc2ggb2Yge2tleSwgdmFsdWV9LCB3aGVyZSBrZXkgaXMgb25lIG9mOiB0aXRsZSwgYXV0aG9yLCByaHl0aG0sIHNvdXJjZSwgdHJhbnNjcmlwdGlvbiwgdW5hbGlnbmVkV29yZHMsIGV0Yy4uLlxuXHQvLyB0ZW1wbzogeyBub3RlTGVuZ3RoOiBudW1iZXIgKGUuZy4gLjEyNSksIGJwbTogbnVtYmVyIH1cblx0Ly8gbGluZXM6IGFuIGFycmF5IG9mIGVsZW1lbnRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblx0Ly9cblx0Ly8gU1RBRkY6IGFycmF5IG9mIGVsZW1lbnRzXG5cdC8vIFNVQlRJVExFOiBzdHJpbmdcblx0Ly9cblx0Ly8gVE9ETzogYWN0dWFsbHksIHRoZSBzdGFydCBhbmQgZW5kIGNoYXIgc2hvdWxkIG1vZGlmeSBlYWNoIHBhcnQgb2YgdGhlIG5vdGUgdHlwZVxuXHQvLyBUaGUgZWxlbWVudHMgYWxsIGhhdmUgYSB0eXBlIGZpZWxkIGFuZCBhIHN0YXJ0IGFuZCBlbmQgY2hhclxuXHQvLyBmaWVsZC4gVGhlIHJlc3Qgb2YgdGhlIGZpZWxkcyBkZXBlbmQgb24gdGhlIHR5cGUgYW5kIGFyZSBsaXN0ZWQgYmVsb3c6XG5cdC8vIFJFU1Q6IGR1cmF0aW9uPTEsMiw0LDg7IGNob3JkOiBzdHJpbmdcblx0Ly8gTk9URTogYWNjaWRlbnRhbD1ub25lLGRibF9mbGF0LGZsYXQsbmF0dXJhbCxzaGFycCxkYmxfc2hhcnBcblx0Ly9cdFx0cGl0Y2g6IFwiQ1wiIGlzIDAuIFRoZSBudW1iZXJzIHJlZmVyIHRvIHRoZSBwaXRjaCBsZXR0ZXIuXG5cdC8vXHRcdGR1cmF0aW9uOiAuNSAoc2l4dGVlbnRoKSwgLjc1IChkb3R0ZWQgc2l4dGVlbnRoKSwgMSAoZWlnaHRoKSwgMS41IChkb3R0ZWQgZWlnaHRoKVxuXHQvL1x0XHRcdDIgKHF1YXJ0ZXIpLCAzIChkb3R0ZWQgcXVhcnRlciksIDQgKGhhbGYpLCA2IChkb3R0ZWQgaGFsZikgOCAod2hvbGUpXG5cdC8vXHRcdGNob3JkOiB7IG5hbWU6Y2hvcmQsIHBvc2l0aW9uOiBvbmUgb2YgJ2RlZmF1bHQnLCAnYWJvdmUnLCAnYmVsb3cnIH1cblx0Ly9cdFx0ZW5kX2JlYW0gPSB0cnVlIG9yIHVuZGVmaW5lZCBpZiB0aGlzIGlzIHRoZSBsYXN0IG5vdGUgaW4gYSBiZWFtLlxuXHQvL1x0XHRseXJpYzogYXJyYXkgb2YgeyBzeWxsYWJsZTogeHh4LCBkaXZpZGVyOiBvbmUgb2YgXCIgLV9cIiB9XG5cdC8vXHRcdHN0YXJ0VGllID0gdHJ1ZXx1bmRlZmluZWRcblx0Ly9cdFx0ZW5kVGllID0gdHJ1ZXx1bmRlZmluZWRcblx0Ly9cdFx0c3RhcnRUcmlwbGV0ID0gbnVtIDwtIHRoYXQgaXMgdGhlIG51bWJlciB0byBwcmludFxuXHQvL1x0XHRlbmRUcmlwbGV0ID0gdHJ1ZXx1bmRlZmluZWQgKHRoZSBsYXN0IG5vdGUgb2YgdGhlIHRyaXBsZXQpXG5cdC8vIFRPRE86IGFjdHVhbGx5LCBkZWNvcmF0aW9uIHNob3VsZCBiZSBhbiBhcnJheS5cblx0Ly9cdFx0ZGVjb3JhdGlvbjogdXBib3csIGRvd25ib3csIGFjY2VudFxuXHQvLyBCQVI6IHR5cGU9YmFyX3RoaW4sIGJhcl90aGluX3RoaWNrLCBiYXJfdGhpbl90aGluLCBiYXJfdGhpY2tfdGhpbiwgYmFyX3JpZ2h0X3JlcGVhdCwgYmFyX2xlZnRfcmVwZWF0LCBiYXJfZG91YmxlX3JlcGVhdFxuXHQvL1x0bnVtYmVyOiAxIG9yIDI6IGlmIGl0IGlzIHRoZSBzdGFydCBvZiBhIGZpcnN0IG9yIHNlY29uZCBlbmRpbmdcblx0Ly8gQ0xFRjogdHlwZT10cmVibGUsYmFzc1xuXHQvLyBLRVktU0lHOlxuXHQvL1x0XHRhY2NpZGVudGFsc1tdOiB7IGFjYzpzaGFycHxkYmxzaGFycHxuYXR1cmFsfGZsYXR8ZGJsZmxhdCwgIG5vdGU6YXxifGN8ZHxlfGZ8ZyB9XG5cdC8vIE1FVEVSOiB0eXBlOiBjb21tb25fdGltZSxjdXRfdGltZSxzcGVjaWZpZWRcblx0Ly9cdFx0aWYgc3BlY2lmaWVkLCB7IG51bTogOTksIGRlbjogOTkgfVxuXG5cdHRoaXMuZ2V0QmVhdExlbmd0aCA9IGZ1bmN0aW9uKCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmYpIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxpbmVzW2ldLnN0YWZmLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmZbal0ubWV0ZXIpIHtcblx0XHRcdFx0XHRcdHZhciBtZXRlciA9IHRoaXMubGluZXNbaV0uc3RhZmZbal0ubWV0ZXI7XG5cdFx0XHRcdFx0XHRpZiAobWV0ZXIudHlwZSA9PT0gXCJzcGVjaWZpZWRcIikge1xuXHRcdFx0XHRcdFx0XHRpZiAobWV0ZXIudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBudW0gPSBwYXJzZUludChtZXRlci52YWx1ZVswXS5udW0sIDEwKTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZGVuID0gcGFyc2VJbnQobWV0ZXIudmFsdWVbMF0uZGVuLCAxMCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gMyAmJiBkZW4gPT09IDgpIHJldHVybiAzLzg7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gNiAmJiBkZW4gPT09IDgpIHJldHVybiAzLzg7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gNiAmJiBkZW4gPT09IDQpIHJldHVybiAzLzQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gOSAmJiBkZW4gPT09IDgpIHJldHVybiAzLzg7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gMTIgJiYgZGVuID09PSA4KSByZXR1cm4gMy84O1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAxL2Rlbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIDEvNDsgLy8gTm8gbWV0ZXIgd2FzIHNwZWNpZmllZCwgc28gdXNlIHRoaXMgZGVmYXVsdFxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChtZXRlci50eXBlID09PSAnY3V0X3RpbWUnKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxLzI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gMS80OyAvLyBUT0RPLVBFUjogdGhpcyB3b3JrcyBmb3IgY29tbW9uIHRpbWUsIGJ1dCBub3QgZm9yIHRoZSBhbmNpZW50IG1ldGVycy5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIDEvNDsgLy8gTm8gbWV0ZXIgd2FzIHNwZWNpZmllZCwgc28gdXNlIHRoaXMgZGVmYXVsdFxuXHR9O1xuXG5cdHRoaXMuZ2V0UGlja3VwTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHBpY2t1cExlbmd0aCA9IDA7XG5cdFx0dmFyIGJhckxlbmd0aCA9IHRoaXMuZ2V0QmFyTGVuZ3RoKCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5saW5lc1tpXS5zdGFmZikge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGluZXNbaV0uc3RhZmYubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRmb3IgKHZhciB2ID0gMDsgdiA8IHRoaXMubGluZXNbaV0uc3RhZmZbal0udm9pY2VzLmxlbmd0aDsgdisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgdm9pY2UgPSB0aGlzLmxpbmVzW2ldLnN0YWZmW2pdLnZvaWNlc1t2XTtcblx0XHRcdFx0XHRcdHZhciBoYXNOb3RlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR2YXIgdHJpcGxldE11bHRpcGxpZXIgPSAxO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgZWwgPSAwOyBlbCA8IHZvaWNlLmxlbmd0aDsgZWwrKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgaXNTcGFjZXIgPSB2b2ljZVtlbF0ucmVzdCAmJiB2b2ljZVtlbF0ucmVzdC50eXBlID09PSBcInNwYWNlclwiO1xuXHRcdFx0XHRcdFx0XHRpZiAodm9pY2VbZWxdLnN0YXJ0VHJpcGxldClcblx0XHRcdFx0XHRcdFx0XHR0cmlwbGV0TXVsdGlwbGllciA9IHZvaWNlW2VsXS50cmlwbGV0TXVsdGlwbGllcjtcblx0XHRcdFx0XHRcdFx0aWYgKHZvaWNlW2VsXS5kdXJhdGlvbiAmJiAhaXNTcGFjZXIpXG5cdFx0XHRcdFx0XHRcdFx0cGlja3VwTGVuZ3RoICs9IHZvaWNlW2VsXS5kdXJhdGlvbiAqIHRyaXBsZXRNdWx0aXBsaWVyO1xuXHRcdFx0XHRcdFx0XHRpZiAodm9pY2VbZWxdLmVuZFRyaXBsZXQpXG5cdFx0XHRcdFx0XHRcdFx0dHJpcGxldE11bHRpcGxpZXIgPSAxO1xuXHRcdFx0XHRcdFx0XHRpZiAocGlja3VwTGVuZ3RoID49IGJhckxlbmd0aClcblx0XHRcdFx0XHRcdFx0XHRwaWNrdXBMZW5ndGggLT0gYmFyTGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZiAodm9pY2VbZWxdLmVsX3R5cGUgPT09ICdiYXInKVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwaWNrdXBMZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBwaWNrdXBMZW5ndGg7XG5cdH07XG5cblx0dGhpcy5nZXRCYXJMZW5ndGggPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWV0ZXIgPSB0aGlzLmdldE1ldGVyRnJhY3Rpb24oKTtcblx0XHRyZXR1cm4gbWV0ZXIubnVtIC8gbWV0ZXIuZGVuO1xuXHR9O1xuXG5cdHRoaXMubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSA9IGZ1bmN0aW9uKGJwbU92ZXJyaWRlKSB7XG5cdFx0dmFyIGJwbTtcblx0XHRpZiAoYnBtT3ZlcnJpZGUpIHtcblx0XHRcdGJwbSA9IGJwbU92ZXJyaWRlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgdGVtcG8gPSB0aGlzLm1ldGFUZXh0ID8gdGhpcy5tZXRhVGV4dC50ZW1wbyA6IG51bGw7XG5cdFx0XHRicG0gPSB0aGlzLmdldEJwbSh0ZW1wbyk7XG5cdFx0fVxuXHRcdGlmIChicG0gPD0gMClcblx0XHRcdGJwbSA9IDE7IC8vIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYW4gaGFwcGVuLCBidXQgd2UgZG9uJ3Qgd2FudCBhIHBvc3NpYmlsaXR5IG9mIGRpdmlkaW5nIGJ5IHplcm8uXG5cblx0XHR2YXIgYmVhdHNQZXJNZWFzdXJlID0gdGhpcy5nZXRCZWF0c1Blck1lYXN1cmUoKTtcblxuXHRcdHZhciBtaW51dGVzUGVyTWVhc3VyZSA9IGJlYXRzUGVyTWVhc3VyZSAvIGJwbTtcblx0XHRyZXR1cm4gbWludXRlc1Blck1lYXN1cmUgKiA2MDAwMDtcblx0fTtcblxuXHR0aGlzLmdldEJlYXRzUGVyTWVhc3VyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBiZWF0c1Blck1lYXN1cmU7XG5cdFx0dmFyIG1ldGVyID0gdGhpcy5nZXRNZXRlckZyYWN0aW9uKCk7XG5cdFx0aWYgKG1ldGVyLmRlbiA9PT0gOCkge1xuXHRcdFx0YmVhdHNQZXJNZWFzdXJlID0gbWV0ZXIubnVtIC8gMztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmVhdHNQZXJNZWFzdXJlID0gbWV0ZXIubnVtO1xuXHRcdH1cblx0XHRpZiAoYmVhdHNQZXJNZWFzdXJlIDw9IDApIC8vIFRoaXMgcHJvYmFibHkgd29uJ3QgaGFwcGVuIGluIGFueSBub3JtYWwgY2FzZSAtIGJ1dCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBtZXRlciBjb3VsZCBiZSBzZXQgdG8gc29tZXRoaW5nIG5vbnNlbnNpY2FsLlxuXHRcdFx0YmVhdHNQZXJNZWFzdXJlID0gMTtcblx0XHRyZXR1cm4gYmVhdHNQZXJNZWFzdXJlO1xuXHR9O1xuXG5cdHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy52ZXJzaW9uID0gXCIxLjAuMVwiO1xuXHRcdHRoaXMubWVkaWEgPSBcInNjcmVlblwiO1xuXHRcdHRoaXMubWV0YVRleHQgPSB7fTtcblx0XHR0aGlzLmZvcm1hdHRpbmcgPSB7fTtcblx0XHR0aGlzLmxpbmVzID0gW107XG5cdFx0dGhpcy5zdGFmZk51bSA9IDA7XG5cdFx0dGhpcy52b2ljZU51bSA9IDA7XG5cdFx0dGhpcy5saW5lTnVtID0gMDtcblx0fTtcblxuXHR0aGlzLnJlc29sdmVPdmVybGF5cyA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtYWRlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldO1xuXHRcdFx0aWYgKGxpbmUuc3RhZmYpIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLnN0YWZmLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIHN0YWZmID0gbGluZS5zdGFmZltqXTtcblx0XHRcdFx0XHR2YXIgb3ZlcmxheVZvaWNlID0gW107XG5cdFx0XHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBzdGFmZi52b2ljZXMubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRcdHZhciB2b2ljZSA9IHN0YWZmLnZvaWNlc1trXTtcblx0XHRcdFx0XHRcdG92ZXJsYXlWb2ljZS5wdXNoKHsgaGFzT3ZlcmxheTogZmFsc2UsIHZvaWNlOiBbXSwgc25pcDogW119KTtcblx0XHRcdFx0XHRcdHZhciBkdXJhdGlvblRoaXNCYXIgPSAwO1xuXHRcdFx0XHRcdFx0dmFyIGluT3ZlcmxheSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0dmFyIHNuaXBTdGFydCA9IC0xO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIga2sgPSAwOyBrayA8IHZvaWNlLmxlbmd0aDsga2srKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgZXZlbnQgPSB2b2ljZVtra107XG5cdFx0XHRcdFx0XHRcdGlmIChldmVudC5lbF90eXBlID09PSBcIm92ZXJsYXlcIiAmJiAhaW5PdmVybGF5KSB7XG5cdFx0XHRcdFx0XHRcdFx0bWFkZUNoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGluT3ZlcmxheSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0c25pcFN0YXJ0ID0ga2s7XG5cdFx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLmhhc092ZXJsYXkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGV2ZW50LmVsX3R5cGUgPT09IFwiYmFyXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaW5PdmVybGF5KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkZWxldGUgdGhlIG92ZXJsYXkgZXZlbnRzIGZyb20gdGhpcyBhcnJheSB3aXRob3V0IG1lc3NpbmcgdXAgdGhpcyBsb29wLlxuXHRcdFx0XHRcdFx0XHRcdFx0aW5PdmVybGF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVybGF5Vm9pY2Vba10uc25pcC5wdXNoKHsgc3RhcnQ6IHNuaXBTdGFydCwgbGVuOiBrayAtIHNuaXBTdGFydH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLnZvaWNlLnB1c2goZXZlbnQpOyAvLyBBbHNvIGVuZCB0aGUgb3ZlcmxheSB3aXRoIHRoZSBiYXJsaW5lLlxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGlzIGtlZXBzIHRoZSB2b2ljZXMgbGluZWQgdXA6IGlmIHRoZSBvdmVybGF5IGlzbid0IGluIHRoZSBmaXJzdCBtZWFzdXJlIHRoZW4gd2UgbmVlZCBhIGJ1bmNoIG9mIGludmlzaWJsZSByZXN0cy5cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChkdXJhdGlvblRoaXNCYXIgPiAwKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvdmVybGF5Vm9pY2Vba10udm9pY2UucHVzaCh7IGVsX3R5cGU6IFwibm90ZVwiLCBkdXJhdGlvbjogZHVyYXRpb25UaGlzQmFyLCByZXN0OiB7dHlwZTogXCJpbnZpc2libGVcIn0sIHN0YXJ0Q2hhcjogZXZlbnQuc3RhcnRDaGFyLCBlbmRDaGFyOiBldmVudC5lbmRDaGFyIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLnZvaWNlLnB1c2goZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvblRoaXNCYXIgPSAwO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGV2ZW50LmVsX3R5cGUgPT09IFwibm90ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGluT3ZlcmxheSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLnZvaWNlLnB1c2goZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvblRoaXNCYXIgKz0gZXZlbnQuZHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGV2ZW50LmVsX3R5cGUgPT09IFwic2NhbGVcIiB8fCBldmVudC5lbF90eXBlID09PSBcInN0ZW1cIiB8fCBldmVudC5lbF90eXBlID09PSBcIm92ZXJsYXlcIiB8fCBldmVudC5lbF90eXBlID09PSBcInN0eWxlXCIgfHwgZXZlbnQuZWxfdHlwZSA9PT0gXCJ0cmFuc3Bvc2VcIikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFRoZXNlIHR5cGVzIG9mIGV2ZW50cyBhcmUgZHVwbGljYXRlZCBvbiB0aGUgb3ZlcmxheSBsYXllci5cblx0XHRcdFx0XHRcdFx0XHRvdmVybGF5Vm9pY2Vba10udm9pY2UucHVzaChldmVudCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChvdmVybGF5Vm9pY2Vba10uaGFzT3ZlcmxheSAmJiBvdmVybGF5Vm9pY2Vba10uc25pcC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdFx0Ly8gdGhlcmUgd2FzIG5vIGNsb3NpbmcgYmFyLCBzbyB3ZSBkaWRuJ3Qgc2V0IHRoZSBzbmlwIGFtb3VudC5cblx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLnNuaXAucHVzaCh7IHN0YXJ0OiBzbmlwU3RhcnQsIGxlbjogdm9pY2UubGVuZ3RoIC0gc25pcFN0YXJ0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZvciAoayA9IDA7IGsgPCBvdmVybGF5Vm9pY2UubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRcdHZhciBvdiA9IG92ZXJsYXlWb2ljZVtrXTtcblx0XHRcdFx0XHRcdGlmIChvdi5oYXNPdmVybGF5KSB7XG5cdFx0XHRcdFx0XHRcdHN0YWZmLnZvaWNlcy5wdXNoKG92LnZvaWNlKTtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIga2trID0gb3Yuc25pcC5sZW5ndGgtMTsga2trID49IDA7IGtray0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHNuaXAgPSBvdi5zbmlwW2tra107XG5cdFx0XHRcdFx0XHRcdFx0c3RhZmYudm9pY2VzW2tdLnNwbGljZShzbmlwLnN0YXJ0LCBzbmlwLmxlbik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIGVuZGluZyBtYXJrcyBmcm9tIHRoZSBvdmVybGF5IHZvaWNlIHNvIHRoZXkgYXJlIG5vdCByZXBlYXRlZFxuXHRcdFx0XHRcdFx0XHRmb3IgKGtrayA9IDA7IGtrayA8IHN0YWZmLnZvaWNlc1tzdGFmZi52b2ljZXMubGVuZ3RoLTFdLmxlbmd0aDsga2trKyspIHtcblx0XHRcdFx0XHRcdFx0XHRzdGFmZi52b2ljZXNbc3RhZmYudm9pY2VzLmxlbmd0aC0xXVtra2tdID0gcGFyc2VDb21tb24uY2xvbmUoc3RhZmYudm9pY2VzW3N0YWZmLnZvaWNlcy5sZW5ndGgtMV1ba2trXSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVsID0gc3RhZmYudm9pY2VzW3N0YWZmLnZvaWNlcy5sZW5ndGgtMV1ba2trXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZWwuZWxfdHlwZSA9PT0gJ2JhcicgJiYgZWwuc3RhcnRFbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5zdGFydEVuZGluZztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsLmVsX3R5cGUgPT09ICdiYXInICYmIGVsLmVuZEVuZGluZylcblx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5lbmRFbmRpbmc7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG1hZGVDaGFuZ2VzO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGZpeFRpdGxlcyhsaW5lcykge1xuXHRcdC8vIFdlIG1pZ2h0IGhhdmUgbmFtZSBhbmQgc3VibmFtZSBkZWZpbmVkLiBXZSBub3cga25vdyB3aGF0IGxpbmUgZXZlcnl0aGluZyBpcyBvbiwgc28gd2UgY2FuIGRldGVybWluZSB3aGljaCB0byB1c2UuXG5cdFx0dmFyIGZpcnN0TXVzaWNMaW5lID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgbGluZSA9IGxpbmVzW2ldO1xuXHRcdFx0aWYgKGxpbmUuc3RhZmYpIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLnN0YWZmLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIHN0YWZmID0gbGluZS5zdGFmZltqXTtcblx0XHRcdFx0XHRpZiAoc3RhZmYudGl0bGUpIHtcblx0XHRcdFx0XHRcdHZhciBoYXNBVGl0bGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgc3RhZmYudGl0bGUubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmLnRpdGxlW2tdKSB7XG5cdFx0XHRcdFx0XHRcdHN0YWZmLnRpdGxlW2tdID0gKGZpcnN0TXVzaWNMaW5lKSA/IHN0YWZmLnRpdGxlW2tdLm5hbWUgOiBzdGFmZi50aXRsZVtrXS5zdWJuYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RhZmYudGl0bGVba10pXG5cdFx0XHRcdFx0XHRcdFx0aGFzQVRpdGxlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhZmYudGl0bGVba10gPSAnJztcblx0XHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3RhZmYudGl0bGVba10gPSAnJztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghaGFzQVRpdGxlKVxuXHRcdFx0XHRcdFx0XHRkZWxldGUgc3RhZmYudGl0bGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZpcnN0TXVzaWNMaW5lID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5jbGVhblVwID0gZnVuY3Rpb24oZGVmV2lkdGgsIGRlZkxlbmd0aCwgYmFyc3BlcnN0YWZmLCBzdGFmZm5vbm90ZSwgY3VyclNsdXIpIHtcblx0XHR0aGlzLmNsb3NlTGluZSgpO1x0Ly8gQ2xvc2UgdGhlIGxhc3QgbGluZS5cblxuXHRcdC8vIElmIHRoZSB0ZW1wbyB3YXMgY3JlYXRlZCB3aXRoIGEgc3RyaW5nIGxpa2UgXCJBbGxlZ3JvXCIsIHRoZW4gdGhlIGR1cmF0aW9uIG9mIGEgYmVhdCBuZWVkcyB0byBiZSBzZXQgYXQgdGhlIGxhc3QgbW9tZW50LCB3aGVuIGl0IGlzIG1vc3QgbGlrZWx5IGtub3duLlxuXHRcdGlmICh0aGlzLm1ldGFUZXh0LnRlbXBvICYmIHRoaXMubWV0YVRleHQudGVtcG8uYnBtICYmICF0aGlzLm1ldGFUZXh0LnRlbXBvLmR1cmF0aW9uKVxuXHRcdFx0dGhpcy5tZXRhVGV4dC50ZW1wby5kdXJhdGlvbiA9IFsgdGhpcy5nZXRCZWF0TGVuZ3RoKCkgXTtcblxuXHRcdC8vIFJlbW92ZSBhbnkgYmxhbmsgbGluZXNcblx0XHR2YXIgYW55RGVsZXRlZCA9IGZhbHNlO1xuXHRcdHZhciBpLCBzLCB2O1xuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5saW5lc1tpXS5zdGFmZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciBoYXNBbnkgPSBmYWxzZTtcblx0XHRcdFx0Zm9yIChzID0gMDsgcyA8IHRoaXMubGluZXNbaV0uc3RhZmYubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRpZiAodGhpcy5saW5lc1tpXS5zdGFmZltzXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRhbnlEZWxldGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMubGluZXNbaV0uc3RhZmZbc10gPSBudWxsO1xuXHRcdFx0XHRcdFx0Ly90aGlzLmxpbmVzW2ldLnN0YWZmW3NdID0geyB2b2ljZXM6IFtdfTtcdC8vIFRPRE8tUEVSOiBUaGVyZSB3YXMgYSBwYXJ0IG1pc3NpbmcgaW4gdGhlIGFiYyBtdXNpYy4gSG93IHNob3VsZCB3ZSByZWNvdmVyP1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRmb3IgKHYgPSAwOyB2IDwgdGhpcy5saW5lc1tpXS5zdGFmZltzXS52b2ljZXMubGVuZ3RoOyB2KyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmZbc10udm9pY2VzW3ZdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5saW5lc1tpXS5zdGFmZltzXS52b2ljZXNbdl0gPSBbXTtcdC8vIFRPRE8tUEVSOiBUaGVyZSB3YXMgYSBwYXJ0IG1pc3NpbmcgaW4gdGhlIGFiYyBtdXNpYy4gSG93IHNob3VsZCB3ZSByZWNvdmVyP1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuY29udGFpbnNOb3Rlcyh0aGlzLmxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XSkpIGhhc0FueSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaGFzQW55KSB7XG5cdFx0XHRcdFx0dGhpcy5saW5lc1tpXSA9IG51bGw7XG5cdFx0XHRcdFx0YW55RGVsZXRlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGFueURlbGV0ZWQpIHtcblx0XHRcdHRoaXMubGluZXMgPSBwYXJzZUNvbW1vbi5jb21wYWN0KHRoaXMubGluZXMpO1xuXHRcdFx0cGFyc2VDb21tb24uZWFjaCh0aGlzLmxpbmVzLCBmdW5jdGlvbihsaW5lKSB7XG5cdFx0XHRcdGlmIChsaW5lLnN0YWZmKVxuXHRcdFx0XHRcdGxpbmUuc3RhZmYgPSBwYXJzZUNvbW1vbi5jb21wYWN0KGxpbmUuc3RhZmYpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgd2UgZXhjZWVkZWQgdGhlIG51bWJlciBvZiBiYXJzIGFsbG93ZWQgb24gYSBsaW5lLCB0aGVuIGZvcmNlIGEgbmV3IGxpbmVcblx0XHRpZiAoYmFyc3BlcnN0YWZmKSB7XG5cdFx0XHR3aGlsZSAod3JhcE11c2ljTGluZXModGhpcy5saW5lcywgYmFyc3BlcnN0YWZmKSkge1xuXHRcdFx0XHQvLyBUaGlzIHdpbGwga2VlcCB3cmFwcGluZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwaWVjZS5cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSB3ZXJlIHBhc3NlZCBzdGFmZm5vbm90ZSwgdGhlbiB3ZSB3YW50IHRvIGdldCByaWQgb2YgYWxsIHN0YWZmcyB0aGF0IGNvbnRhaW4gb25seSByZXN0cy5cblx0XHRpZiAoc3RhZmZub25vdGUpIHtcblx0XHRcdGFueURlbGV0ZWQgPSBmYWxzZTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0aGlzLmxpbmVzW2ldLnN0YWZmICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRmb3IgKHMgPSAwOyBzIDwgdGhpcy5saW5lc1tpXS5zdGFmZi5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0dmFyIGtlZXBUaGlzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IgKHYgPSAwOyB2IDwgdGhpcy5saW5lc1tpXS5zdGFmZltzXS52b2ljZXMubGVuZ3RoOyB2KyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuY29udGFpbnNOb3Rlc1N0cmljdCh0aGlzLmxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XSkpIHtcblx0XHRcdFx0XHRcdFx0XHRrZWVwVGhpcyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICgha2VlcFRoaXMpIHtcblx0XHRcdFx0XHRcdFx0YW55RGVsZXRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHRoaXMubGluZXNbaV0uc3RhZmZbc10gPSBudWxsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGFueURlbGV0ZWQpIHtcblx0XHRcdFx0cGFyc2VDb21tb24uZWFjaCh0aGlzLmxpbmVzLCBmdW5jdGlvbihsaW5lKSB7XG5cdFx0XHRcdFx0aWYgKGxpbmUuc3RhZmYpXG5cdFx0XHRcdFx0XHRsaW5lLnN0YWZmID0gcGFyc2VDb21tb24uY29tcGFjdChsaW5lLnN0YWZmKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zml4VGl0bGVzKHRoaXMubGluZXMpO1xuXG5cdFx0Ly8gUmVtb3ZlIHRoZSB0ZW1wb3Jhcnkgd29ya2luZyB2YXJpYWJsZXNcblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmYpIHtcblx0XHRcdFx0Zm9yIChzID0gMDsgcyA8IHRoaXMubGluZXNbaV0uc3RhZmYubGVuZ3RoOyBzKyspXG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5saW5lc1tpXS5zdGFmZltzXS53b3JraW5nQ2xlZjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgb3ZlcmxheXMsIGNyZWF0ZSBuZXcgdm9pY2VzIGZvciB0aGVtLlxuXHRcdHdoaWxlICh0aGlzLnJlc29sdmVPdmVybGF5cygpKSB7XG5cdFx0XHQvLyBrZWVwIHJlc29sdmluZyBvdmVybGF5cyBhcyBsb25nIGFzIGFueSBhcmUgZm91bmQuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY2xlYW5VcFNsdXJzSW5MaW5lKGxpbmUpIHtcblx0XHRcdHZhciB4O1xuLy9cdFx0XHR2YXIgbHlyID0gbnVsbDtcdC8vIFRPRE8tUEVSOiBkZWJ1Z2dpbmcuXG5cblx0XHRcdHZhciBhZGRFbmRTbHVyID0gZnVuY3Rpb24ob2JqLCBudW0sIGNob3JkUG9zKSB7XG5cdFx0XHRcdGlmIChjdXJyU2x1cltjaG9yZFBvc10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdC8vIFRoZXJlIGlzbid0IGFuIGV4YWN0IG1hdGNoIGZvciBub3RlIHBvc2l0aW9uLCBidXQgd2UnbGwgdGFrZSBhbnkgb3RoZXIgb3BlbiBzbHVyLlxuXHRcdFx0XHRcdGZvciAoeCA9IDA7IHggPCBjdXJyU2x1ci5sZW5ndGg7IHgrKykge1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJTbHVyW3hdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Y2hvcmRQb3MgPSB4O1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGN1cnJTbHVyW2Nob3JkUG9zXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHR2YXIgb2ZmTnVtID0gY2hvcmRQb3MqMTAwKzE7XG5cdFx0XHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKG9iai5lbmRTbHVyLCBmdW5jdGlvbih4KSB7IGlmIChvZmZOdW0gPT09IHgpIC0tb2ZmTnVtOyB9KTtcblx0XHRcdFx0XHRcdGN1cnJTbHVyW2Nob3JkUG9zXSA9IFtvZmZOdW1dO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgc2x1ck51bTtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBudW07IGkrKykge1xuXHRcdFx0XHRcdHNsdXJOdW0gPSBjdXJyU2x1cltjaG9yZFBvc10ucG9wKCk7XG5cdFx0XHRcdFx0b2JqLmVuZFNsdXIucHVzaChzbHVyTnVtKTtcbi8vXHRcdFx0XHRcdGx5ci5zeWxsYWJsZSArPSAnPCcgKyBzbHVyTnVtO1x0Ly8gVE9ETy1QRVI6IGRlYnVnZ2luZ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjdXJyU2x1cltjaG9yZFBvc10ubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRcdGRlbGV0ZSBjdXJyU2x1cltjaG9yZFBvc107XG5cdFx0XHRcdHJldHVybiBzbHVyTnVtO1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIGFkZFN0YXJ0U2x1ciA9IGZ1bmN0aW9uKG9iaiwgbnVtLCBjaG9yZFBvcywgdXNlZE51bXMpIHtcblx0XHRcdFx0b2JqLnN0YXJ0U2x1ciA9IFtdO1xuXHRcdFx0XHRpZiAoY3VyclNsdXJbY2hvcmRQb3NdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjdXJyU2x1cltjaG9yZFBvc10gPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgbmV4dE51bSA9IGNob3JkUG9zKjEwMCsxO1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKHVzZWROdW1zKSB7XG5cdFx0XHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKHVzZWROdW1zLCBmdW5jdGlvbih4KSB7IGlmIChuZXh0TnVtID09PSB4KSArK25leHROdW07IH0pO1xuXHRcdFx0XHRcdFx0cGFyc2VDb21tb24uZWFjaCh1c2VkTnVtcywgZnVuY3Rpb24oeCkgeyBpZiAobmV4dE51bSA9PT0geCkgKytuZXh0TnVtOyB9KTtcblx0XHRcdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2godXNlZE51bXMsIGZ1bmN0aW9uKHgpIHsgaWYgKG5leHROdW0gPT09IHgpICsrbmV4dE51bTsgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goY3VyclNsdXJbY2hvcmRQb3NdLCBmdW5jdGlvbih4KSB7IGlmIChuZXh0TnVtID09PSB4KSArK25leHROdW07IH0pO1xuXHRcdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goY3VyclNsdXJbY2hvcmRQb3NdLCBmdW5jdGlvbih4KSB7IGlmIChuZXh0TnVtID09PSB4KSArK25leHROdW07IH0pO1xuXG5cdFx0XHRcdFx0Y3VyclNsdXJbY2hvcmRQb3NdLnB1c2gobmV4dE51bSk7XG5cdFx0XHRcdFx0b2JqLnN0YXJ0U2x1ci5wdXNoKHsgbGFiZWw6IG5leHROdW0gfSk7XG4vL1x0XHRcdFx0XHRseXIuc3lsbGFibGUgKz0gJyAnICsgbmV4dE51bSArICc+JztcdC8vIFRPRE8tUEVSOmRlYnVnZ2luZ1xuXHRcdFx0XHRcdG5leHROdW0rKztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBlbCA9IGxpbmVbaV07XG4vL1x0XHRcdFx0aWYgKGVsLmx5cmljID09PSB1bmRlZmluZWQpXHQvLyBUT0RPLVBFUjogZGVidWdnaW5nXG4vL1x0XHRcdFx0XHRlbC5seXJpYyA9IFt7IGRpdmlkZXI6ICctJyB9XTtcdC8vIFRPRE8tUEVSOiBkZWJ1Z2dpbmdcbi8vXHRcdFx0XHRseXIgPSBlbC5seXJpY1swXTtcdC8vIFRPRE8tUEVSOiBkZWJ1Z2dpbmdcbi8vXHRcdFx0XHRseXIuc3lsbGFibGUgPSAnJztcdC8vIFRPRE8tUEVSOiBkZWJ1Z2dpbmdcblx0XHRcdFx0aWYgKGVsLmVsX3R5cGUgPT09ICdub3RlJykge1xuXHRcdFx0XHRcdGlmIChlbC5ncmFjZW5vdGVzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBnID0gMDsgZyA8IGVsLmdyYWNlbm90ZXMubGVuZ3RoOyBnKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKGVsLmdyYWNlbm90ZXNbZ10uZW5kU2x1cikge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnZyA9IGVsLmdyYWNlbm90ZXNbZ10uZW5kU2x1cjtcblx0XHRcdFx0XHRcdFx0XHRlbC5ncmFjZW5vdGVzW2ddLmVuZFNsdXIgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBnZ2cgPSAwOyBnZ2cgPCBnZzsgZ2dnKyspXG5cdFx0XHRcdFx0XHRcdFx0XHRhZGRFbmRTbHVyKGVsLmdyYWNlbm90ZXNbZ10sIDEsIDIwKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoZWwuZ3JhY2Vub3Rlc1tnXS5zdGFydFNsdXIpIHtcblx0XHRcdFx0XHRcdFx0XHR4ID0gZWwuZ3JhY2Vub3Rlc1tnXS5zdGFydFNsdXI7XG5cdFx0XHRcdFx0XHRcdFx0YWRkU3RhcnRTbHVyKGVsLmdyYWNlbm90ZXNbZ10sIHgsIDIwKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZWwuZW5kU2x1cikge1xuXHRcdFx0XHRcdFx0eCA9IGVsLmVuZFNsdXI7XG5cdFx0XHRcdFx0XHRlbC5lbmRTbHVyID0gW107XG5cdFx0XHRcdFx0XHRhZGRFbmRTbHVyKGVsLCB4LCAwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsLnN0YXJ0U2x1cikge1xuXHRcdFx0XHRcdFx0eCA9IGVsLnN0YXJ0U2x1cjtcblx0XHRcdFx0XHRcdGFkZFN0YXJ0U2x1cihlbCwgeCwgMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChlbC5waXRjaGVzKSB7XG5cdFx0XHRcdFx0XHR2YXIgdXNlZE51bXMgPSBbXTtcblx0XHRcdFx0XHRcdGZvciAodmFyIHAgPSAwOyBwIDwgZWwucGl0Y2hlcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoZWwucGl0Y2hlc1twXS5lbmRTbHVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGsgPSBlbC5waXRjaGVzW3BdLmVuZFNsdXI7XG5cdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlc1twXS5lbmRTbHVyID0gW107XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBrOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBzbHVyTnVtID0gYWRkRW5kU2x1cihlbC5waXRjaGVzW3BdLCAxLCBwKzEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXNlZE51bXMucHVzaChzbHVyTnVtKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvciAocCA9IDA7IHAgPCBlbC5waXRjaGVzLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChlbC5waXRjaGVzW3BdLnN0YXJ0U2x1cikge1xuXHRcdFx0XHRcdFx0XHRcdHggPSBlbC5waXRjaGVzW3BdLnN0YXJ0U2x1cjtcblx0XHRcdFx0XHRcdFx0XHRhZGRTdGFydFNsdXIoZWwucGl0Y2hlc1twXSwgeCwgcCsxLCB1c2VkTnVtcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIENvcnJlY3QgZm9yIHRoZSB3ZWlyZCBncmFjZW5vdGUgY2FzZSB3aGVyZSAoe2d9YSkgc2hvdWxkIG1hdGNoLlxuXHRcdFx0XHRcdFx0Ly8gVGhlIGVuZCBzbHVyIHdhcyBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZSBub3RlLCBhbmQgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIGZpcnN0IG5vdGUgb2YgdGhlIGdyYWNlcy5cblx0XHRcdFx0XHRcdGlmIChlbC5ncmFjZW5vdGVzICYmIGVsLnBpdGNoZXNbMF0uZW5kU2x1ciAmJiBlbC5waXRjaGVzWzBdLmVuZFNsdXJbMF0gPT09IDEwMCAmJiBlbC5waXRjaGVzWzBdLnN0YXJ0U2x1cikge1xuXHRcdFx0XHRcdFx0XHRpZiAoZWwuZ3JhY2Vub3Rlc1swXS5lbmRTbHVyKVxuXHRcdFx0XHRcdFx0XHRcdGVsLmdyYWNlbm90ZXNbMF0uZW5kU2x1ci5wdXNoKGVsLnBpdGNoZXNbMF0uc3RhcnRTbHVyWzBdLmxhYmVsKTtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGVsLmdyYWNlbm90ZXNbMF0uZW5kU2x1ciA9IFtlbC5waXRjaGVzWzBdLnN0YXJ0U2x1clswXS5sYWJlbF07XG5cdFx0XHRcdFx0XHRcdGlmIChlbC5waXRjaGVzWzBdLmVuZFNsdXIubGVuZ3RoID09PSAxKVxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5waXRjaGVzWzBdLmVuZFNsdXI7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGVsLnBpdGNoZXNbMF0uZW5kU2x1clswXSA9PT0gMTAwKVxuXHRcdFx0XHRcdFx0XHRcdGVsLnBpdGNoZXNbMF0uZW5kU2x1ci5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmIChlbC5waXRjaGVzWzBdLmVuZFNsdXJbZWwucGl0Y2hlc1swXS5lbmRTbHVyLmxlbmd0aC0xXSA9PT0gMTAwKVxuXHRcdFx0XHRcdFx0XHRcdGVsLnBpdGNoZXNbMF0uZW5kU2x1ci5wb3AoKTtcblx0XHRcdFx0XHRcdFx0aWYgKGN1cnJTbHVyWzFdLmxlbmd0aCA9PT0gMSlcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgY3VyclNsdXJbMV07XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRjdXJyU2x1clsxXS5wb3AoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBUT0RPLVBFUjogVGhpcyBjb3VsZCBiZSBkb25lIGZhc3RlciBhcyB3ZSBnbyBpbnN0ZWFkIG9mIGFzIHRoZSBsYXN0IHN0ZXAuXG5cdFx0ZnVuY3Rpb24gZml4Q2xlZlBsYWNlbWVudChlbCkge1xuXHRcdFx0cGFyc2VLZXlWb2ljZS5maXhDbGVmKGVsKTtcblx0XHRcdC8vaWYgKGVsLmVsX3R5cGUgPT09ICdjbGVmJykge1xuLy9cdFx0XHRcdHZhciBtaW4gPSAtMjtcbi8vXHRcdFx0XHR2YXIgbWF4ID0gNTtcbi8vXHRcdFx0XHRzd2l0Y2goZWwudHlwZSkge1xuLy9cdFx0XHRcdFx0Y2FzZSAndHJlYmxlKzgnOlxuLy9cdFx0XHRcdFx0Y2FzZSAndHJlYmxlLTgnOlxuLy9cdFx0XHRcdFx0XHRicmVhaztcbi8vXHRcdFx0XHRcdGNhc2UgJ2Jhc3MnOlxuLy9cdFx0XHRcdFx0Y2FzZSAnYmFzcys4Jzpcbi8vXHRcdFx0XHRcdGNhc2UgJ2Jhc3MtOCc6XG4vL1x0XHRcdFx0XHRcdGVsLnZlcnRpY2FsUG9zID0gMjAgKyBlbC52ZXJ0aWNhbFBvczsgbWluICs9IDY7IG1heCArPSA2O1xuLy9cdFx0XHRcdFx0XHRicmVhaztcbi8vXHRcdFx0XHRcdGNhc2UgJ3Rlbm9yJzpcbi8vXHRcdFx0XHRcdGNhc2UgJ3Rlbm9yKzgnOlxuLy9cdFx0XHRcdFx0Y2FzZSAndGVub3ItOCc6XG4vL1x0XHRcdFx0XHRcdGVsLnZlcnRpY2FsUG9zID0gLSBlbC52ZXJ0aWNhbFBvczsgbWluID0gLTQwOyBtYXggPSA0MDtcbi8vLy9cdFx0XHRcdFx0XHRlbC52ZXJ0aWNhbFBvcys9MjsgbWluICs9IDY7IG1heCArPSA2O1xuLy9cdFx0XHRcdFx0XHRicmVhaztcbi8vXHRcdFx0XHRcdGNhc2UgJ2FsdG8nOlxuLy9cdFx0XHRcdFx0Y2FzZSAnYWx0bys4Jzpcbi8vXHRcdFx0XHRcdGNhc2UgJ2FsdG8tOCc6XG4vL1x0XHRcdFx0XHRcdGVsLnZlcnRpY2FsUG9zID0gLSBlbC52ZXJ0aWNhbFBvczsgbWluID0gLTQwOyBtYXggPSA0MDtcbi8vLy9cdFx0XHRcdFx0XHRlbC52ZXJ0aWNhbFBvcy09MjsgbWluICs9IDQ7IG1heCArPSA0O1xuLy9cdFx0XHRcdFx0XHRicmVhaztcbi8vXHRcdFx0XHR9XG4vL1x0XHRcdFx0aWYgKGVsLnZlcnRpY2FsUG9zIDwgbWluKSB7XG4vL1x0XHRcdFx0XHR3aGlsZSAoZWwudmVydGljYWxQb3MgPCBtaW4pXG4vL1x0XHRcdFx0XHRcdGVsLnZlcnRpY2FsUG9zICs9IDc7XG4vL1x0XHRcdFx0fSBlbHNlIGlmIChlbC52ZXJ0aWNhbFBvcyA+IG1heCkge1xuLy9cdFx0XHRcdFx0d2hpbGUgKGVsLnZlcnRpY2FsUG9zID4gbWF4KVxuLy9cdFx0XHRcdFx0XHRlbC52ZXJ0aWNhbFBvcyAtPSA3O1xuLy9cdFx0XHRcdH1cblx0XHRcdC8vfVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHdyYXBNdXNpY0xpbmVzKGxpbmVzLCBiYXJzcGVyc3RhZmYpIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAobGluZXNbaV0uc3RhZmYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGZvciAocyA9IDA7IHMgPCBsaW5lc1tpXS5zdGFmZi5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0dmFyIHBlcm1hbmVudEl0ZW1zID0gW107XG5cdFx0XHRcdFx0XHRmb3IgKHYgPSAwOyB2IDwgbGluZXNbaV0uc3RhZmZbc10udm9pY2VzLmxlbmd0aDsgdisrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB2b2ljZSA9IGxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XTtcblx0XHRcdFx0XHRcdFx0dmFyIGJhck51bVRoaXNMaW5lID0gMDtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IDA7IG4gPCB2b2ljZS5sZW5ndGg7IG4rKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh2b2ljZVtuXS5lbF90eXBlID09PSAnYmFyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YmFyTnVtVGhpc0xpbmUrKztcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChiYXJOdW1UaGlzTGluZSA+PSBiYXJzcGVyc3RhZmYpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gcHVzaCBldmVyeXRoaW5nIGVsc2UgdG8gdGhlIG5leHQgbGluZSwgaWYgdGhlcmUgaXMgYW55dGhpbmcgZWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIHRoZXJlIGlzIGEgbmV4dCBsaW5lLiBJZiB0aGVyZSBpc24ndCBhIG5leHQgbGluZSwgY3JlYXRlIG9uZS5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG4gPCB2b2ljZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5leHRMaW5lID0gZ2V0TmV4dE11c2ljTGluZShsaW5lcywgaSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFuZXh0TGluZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaW5lc1tpXSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGluZXMucHVzaChwYXJzZUNvbW1vbi5jbG9uZShjcCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmV4dExpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHNzID0gMDsgc3MgPCBuZXh0TGluZS5zdGFmZi5sZW5ndGg7IHNzKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdnYgPSAwOyB2diA8IG5leHRMaW5lLnN0YWZmW3NzXS52b2ljZXMubGVuZ3RoOyB2disrKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5leHRMaW5lLnN0YWZmW3NzXS52b2ljZXNbdnZdID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzdGFydEVsZW1lbnQgPSBuICsgMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgc2VjdGlvbiA9IGxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XS5zbGljZShzdGFydEVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XSA9IGxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XS5zbGljZSgwLCBzdGFydEVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5leHRMaW5lLnN0YWZmW3NdLnZvaWNlc1t2XSA9IHBlcm1hbmVudEl0ZW1zLmNvbmNhdChzZWN0aW9uLmNvbmNhdChuZXh0TGluZS5zdGFmZltzXS52b2ljZXNbdl0pKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIXZvaWNlW25dLmR1cmF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwZXJtYW5lbnRJdGVtcy5wdXNoKHZvaWNlW25dKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXROZXh0TXVzaWNMaW5lKGxpbmVzLCBjdXJyZW50TGluZSkge1xuXHRcdFx0Y3VycmVudExpbmUrKztcblx0XHRcdHdoaWxlIChsaW5lcy5sZW5ndGggPiBjdXJyZW50TGluZSkge1xuXHRcdFx0XHRpZiAobGluZXNbY3VycmVudExpbmVdLnN0YWZmKVxuXHRcdFx0XHRcdHJldHVybiBsaW5lc1tjdXJyZW50TGluZV07XG5cdFx0XHRcdGN1cnJlbnRMaW5lKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRmb3IgKHRoaXMubGluZU51bSA9IDA7IHRoaXMubGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyB0aGlzLmxpbmVOdW0rKykge1xuXHRcdFx0dmFyIHN0YWZmID0gdGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmO1xuXHRcdFx0aWYgKHN0YWZmKSB7XG5cdFx0XHRcdGZvciAodGhpcy5zdGFmZk51bSA9IDA7IHRoaXMuc3RhZmZOdW0gPCBzdGFmZi5sZW5ndGg7IHRoaXMuc3RhZmZOdW0rKykge1xuXHRcdFx0XHRcdGlmIChzdGFmZlt0aGlzLnN0YWZmTnVtXS5jbGVmKVxuXHRcdFx0XHRcdFx0Zml4Q2xlZlBsYWNlbWVudChzdGFmZlt0aGlzLnN0YWZmTnVtXS5jbGVmKTtcblx0XHRcdFx0XHRmb3IgKHRoaXMudm9pY2VOdW0gPSAwOyB0aGlzLnZvaWNlTnVtIDwgc3RhZmZbdGhpcy5zdGFmZk51bV0udm9pY2VzLmxlbmd0aDsgdGhpcy52b2ljZU51bSsrKSB7XG5cdFx0XHRcdFx0XHR2YXIgdm9pY2UgPSBzdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXNbdGhpcy52b2ljZU51bV07XG5cdFx0XHRcdFx0XHRjbGVhblVwU2x1cnNJbkxpbmUodm9pY2UpO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB2b2ljZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRpZiAodm9pY2Vbal0uZWxfdHlwZSA9PT0gJ2NsZWYnKVxuXHRcdFx0XHRcdFx0XHRcdGZpeENsZWZQbGFjZW1lbnQodm9pY2Vbal0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHZvaWNlLmxlbmd0aCA+IDAgJiYgdm9pY2Vbdm9pY2UubGVuZ3RoLTFdLmJhck51bWJlcikge1xuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCBoYW5nIGEgYmFyIG51bWJlciBvbiB0aGUgbGFzdCBiYXIgbGluZTogaXQgc2hvdWxkIGdvIG9uIHRoZSBuZXh0IGxpbmUuXG5cdFx0XHRcdFx0XHRcdHZhciBuZXh0TGluZSA9IGdldE5leHRNdXNpY0xpbmUodGhpcy5saW5lcywgdGhpcy5saW5lTnVtKTtcblx0XHRcdFx0XHRcdFx0aWYgKG5leHRMaW5lKVxuXHRcdFx0XHRcdFx0XHRcdG5leHRMaW5lLnN0YWZmWzBdLmJhck51bWJlciA9IHZvaWNlW3ZvaWNlLmxlbmd0aC0xXS5iYXJOdW1iZXI7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSB2b2ljZVt2b2ljZS5sZW5ndGgtMV0uYmFyTnVtYmVyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghdGhpcy5mb3JtYXR0aW5nLnBhZ2V3aWR0aClcblx0XHRcdHRoaXMuZm9ybWF0dGluZy5wYWdld2lkdGggPSBkZWZXaWR0aDtcblx0XHRpZiAoIXRoaXMuZm9ybWF0dGluZy5wYWdlaGVpZ2h0KVxuXHRcdFx0dGhpcy5mb3JtYXR0aW5nLnBhZ2VoZWlnaHQgPSBkZWZMZW5ndGg7XG5cblx0XHQvLyBSZW1vdmUgdGVtcG9yYXJ5IHZhcmlhYmxlcyB0aGF0IHRoZSBvdXRzaWRlIGRvZXNuJ3QgbmVlZCB0byBrbm93IGFib3V0XG5cdFx0ZGVsZXRlIHRoaXMuc3RhZmZOdW07XG5cdFx0ZGVsZXRlIHRoaXMudm9pY2VOdW07XG5cdFx0ZGVsZXRlIHRoaXMubGluZU51bTtcblx0XHRkZWxldGUgdGhpcy5wb3RlbnRpYWxTdGFydEJlYW07XG5cdFx0ZGVsZXRlIHRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0XHRkZWxldGUgdGhpcy52c2tpcFBlbmRpbmc7XG5cblx0XHRyZXR1cm4gY3VyclNsdXI7XG5cdH07XG5cblx0dGhpcy5yZXNldCgpO1xuXG5cdHRoaXMuZ2V0TGFzdE5vdGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dICYmIHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZiAmJiB0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0gJiZcblx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXNbdGhpcy52b2ljZU51bV0pIHtcblx0XHRcdGZvciAodmFyIGkgPSB0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0udm9pY2VzW3RoaXMudm9pY2VOdW1dLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHR2YXIgZWwgPSB0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0udm9pY2VzW3RoaXMudm9pY2VOdW1dW2ldO1xuXHRcdFx0XHRpZiAoZWwuZWxfdHlwZSA9PT0gJ25vdGUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdHRoaXMuYWRkVGllVG9MYXN0Tm90ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFRPRE8tUEVSOiBpZiB0aGlzIGlzIGEgY2hvcmQsIHdoaWNoIG5vdGU/XG5cdFx0dmFyIGVsID0gdGhpcy5nZXRMYXN0Tm90ZSgpO1xuXHRcdGlmIChlbCAmJiBlbC5waXRjaGVzICYmIGVsLnBpdGNoZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0ZWwucGl0Y2hlc1swXS5zdGFydFRpZSA9IHt9O1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHR0aGlzLmdldER1cmF0aW9uID0gZnVuY3Rpb24oZWwpIHtcblx0XHRpZiAoZWwuZHVyYXRpb24pIHJldHVybiBlbC5kdXJhdGlvbjtcblx0XHQvL2lmIChlbC5waXRjaGVzICYmIGVsLnBpdGNoZXMubGVuZ3RoID4gMCkgcmV0dXJuIGVsLnBpdGNoZXNbMF0uZHVyYXRpb247XG5cdFx0cmV0dXJuIDA7XG5cdH07XG5cblx0dGhpcy5jbG9zZUxpbmUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAodGhpcy5wb3RlbnRpYWxTdGFydEJlYW0gJiYgdGhpcy5wb3RlbnRpYWxFbmRCZWFtKSB7XG5cdFx0XHR0aGlzLnBvdGVudGlhbFN0YXJ0QmVhbS5zdGFydEJlYW0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wb3RlbnRpYWxFbmRCZWFtLmVuZEJlYW0gPSB0cnVlO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5wb3RlbnRpYWxTdGFydEJlYW07XG5cdFx0ZGVsZXRlIHRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0fTtcblxuXHR0aGlzLmFwcGVuZEVsZW1lbnQgPSBmdW5jdGlvbih0eXBlLCBzdGFydENoYXIsIGVuZENoYXIsIGhhc2hQYXJhbXMpXG5cdHtcblx0XHR2YXIgVGhpcyA9IHRoaXM7XG5cdFx0dmFyIHB1c2hOb3RlID0gZnVuY3Rpb24oaHApIHtcblx0XHRcdHZhciBjdXJyU3RhZmYgPSBUaGlzLmxpbmVzW1RoaXMubGluZU51bV0uc3RhZmZbVGhpcy5zdGFmZk51bV07XG5cdFx0XHRpZiAoIWN1cnJTdGFmZikge1xuXHRcdFx0XHQvLyBUT0RPLVBFUjogVGhpcyBwcmV2ZW50cyBhIGNyYXNoLCBidXQgaXQgZHJvcHMgdGhlIGVsZW1lbnQuIE5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc3RhcnQgYSBuZXcgbGluZSwgb3IgZGVsYXkgYWRkaW5nIHRoaXMuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChocC5waXRjaGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFyIG1pZCA9IGN1cnJTdGFmZi53b3JraW5nQ2xlZi52ZXJ0aWNhbFBvcztcblx0XHRcdFx0cGFyc2VDb21tb24uZWFjaChocC5waXRjaGVzLCBmdW5jdGlvbihwKSB7IHAudmVydGljYWxQb3MgPSBwLnBpdGNoIC0gbWlkOyB9KTtcblx0XHRcdH1cblx0XHRcdGlmIChocC5ncmFjZW5vdGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFyIG1pZDIgPSBjdXJyU3RhZmYud29ya2luZ0NsZWYudmVydGljYWxQb3M7XG5cdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goaHAuZ3JhY2Vub3RlcywgZnVuY3Rpb24ocCkgeyBwLnZlcnRpY2FsUG9zID0gcC5waXRjaCAtIG1pZDI7IH0pO1xuXHRcdFx0fVxuXHRcdFx0Y3VyclN0YWZmLnZvaWNlc1tUaGlzLnZvaWNlTnVtXS5wdXNoKGhwKTtcblx0XHR9O1xuXHRcdGhhc2hQYXJhbXMuZWxfdHlwZSA9IHR5cGU7XG5cdFx0aWYgKHN0YXJ0Q2hhciAhPT0gbnVsbClcblx0XHRcdGhhc2hQYXJhbXMuc3RhcnRDaGFyID0gc3RhcnRDaGFyO1xuXHRcdGlmIChlbmRDaGFyICE9PSBudWxsKVxuXHRcdFx0aGFzaFBhcmFtcy5lbmRDaGFyID0gZW5kQ2hhcjtcblx0XHR2YXIgZW5kQmVhbUhlcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFRoaXMucG90ZW50aWFsU3RhcnRCZWFtLnN0YXJ0QmVhbSA9IHRydWU7XG5cdFx0XHRoYXNoUGFyYW1zLmVuZEJlYW0gPSB0cnVlO1xuXHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsU3RhcnRCZWFtO1xuXHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0XHR9O1xuXHRcdHZhciBlbmRCZWFtTGFzdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKFRoaXMucG90ZW50aWFsU3RhcnRCZWFtICE9PSB1bmRlZmluZWQgJiYgVGhpcy5wb3RlbnRpYWxFbmRCZWFtICE9PSB1bmRlZmluZWQpIHtcdC8vIERvIHdlIGhhdmUgYSBzZXQgb2Ygbm90ZXMgdG8gYmVhbT9cblx0XHRcdFx0VGhpcy5wb3RlbnRpYWxTdGFydEJlYW0uc3RhcnRCZWFtID0gdHJ1ZTtcblx0XHRcdFx0VGhpcy5wb3RlbnRpYWxFbmRCZWFtLmVuZEJlYW0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsU3RhcnRCZWFtO1xuXHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0XHR9O1xuXHRcdGlmICh0eXBlID09PSAnbm90ZScpIHsgLy8gJiYgKGhhc2hQYXJhbXMucmVzdCAhPT0gdW5kZWZpbmVkIHx8IGhhc2hQYXJhbXMuZW5kX2JlYW0gPT09IHVuZGVmaW5lZCkpIHtcblx0XHRcdC8vIE5vdywgYWRkIHRoZSBzdGFydEJlYW0gYW5kIGVuZEJlYW0gd2hlcmUgaXQgaXMgbmVlZGVkLlxuXHRcdFx0Ly8gZW5kX2JlYW0gaXMgYWxyZWFkeSBzZXQgb24gdGhlIHBsYWNlcyB3aGVyZSB0aGVyZSBpcyBhIGZvcmNlZCBlbmRfYmVhbS4gV2UnbGwgcmVtb3ZlIHRoYXQgaGVyZSBhZnRlciB1c2luZyB0aGF0IGluZm8uXG5cdFx0XHQvLyB0aGlzLnBvdGVudGlhbFN0YXJ0QmVhbSBlaXRoZXIgcG9pbnRzIHRvIG51bGwgb3IgdGhlIHN0YXJ0IGJlYW0uXG5cdFx0XHQvLyB0aGlzLnBvdGVudGlhbEVuZEJlYW0gZWl0aGVyIHBvaW50cyB0byBudWxsIG9yIHRoZSBzdGFydCBiZWFtLlxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIGJlYW0gYnJlYWsgKG5vdGUgaXMgbG9uZ2VyIHRoYW4gYSBxdWFydGVyLCBvciBhbiBlbmRfYmVhbSBpcyBvbiB0aGlzIGVsZW1lbnQpLCB0aGVuIHNldCB0aGUgYmVhbSBpZiB3ZSBoYXZlIG9uZS5cblx0XHRcdC8vIHJlc2V0IHRoZSB2YXJpYWJsZXMgZm9yIHRoZSBuZXh0IG5vdGVzLlxuXHRcdFx0dmFyIGR1ciA9IFRoaXMuZ2V0RHVyYXRpb24oaGFzaFBhcmFtcyk7XG5cdFx0XHRpZiAoZHVyID49IDAuMjUpIHtcdC8vIFRoZSBiZWFtIGVuZHMgb24gdGhlIG5vdGUgYmVmb3JlIHRoaXMuXG5cdFx0XHRcdGVuZEJlYW1MYXN0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKGhhc2hQYXJhbXMuZm9yY2VfZW5kX2JlYW1fbGFzdCAmJiBUaGlzLnBvdGVudGlhbFN0YXJ0QmVhbSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGVuZEJlYW1MYXN0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKGhhc2hQYXJhbXMuZW5kX2JlYW0gJiYgVGhpcy5wb3RlbnRpYWxTdGFydEJlYW0gIT09IHVuZGVmaW5lZCkge1x0Ly8gdGhlIGJlYW0gaXMgZm9yY2VkIHRvIGVuZCBvbiB0aGlzIG5vdGUsIHByb2JhYmx5IGJlY2F1c2Ugb2YgYSBzcGFjZSBpbiB0aGUgQUJDXG5cdFx0XHRcdGlmIChoYXNoUGFyYW1zLnJlc3QgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRlbmRCZWFtSGVyZSgpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0ZW5kQmVhbUxhc3QoKTtcblx0XHRcdH0gZWxzZSBpZiAoaGFzaFBhcmFtcy5yZXN0ID09PSB1bmRlZmluZWQpIHtcdC8vIHRoaXMgYSBzaG9ydCBub3RlIGFuZCB3ZSBhcmVuJ3QgYWJvdXQgdG8gZW5kIHRoZSBiZWFtXG5cdFx0XHRcdGlmIChUaGlzLnBvdGVudGlhbFN0YXJ0QmVhbSA9PT0gdW5kZWZpbmVkKSB7XHQvLyBXZSBhcmVuJ3QgY29sbGVjdGluZyBub3RlcyBmb3IgYSBiZWFtLCBzbyBzdGFydCBoZXJlLlxuXHRcdFx0XHRcdGlmICghaGFzaFBhcmFtcy5lbmRfYmVhbSkge1xuXHRcdFx0XHRcdFx0VGhpcy5wb3RlbnRpYWxTdGFydEJlYW0gPSBoYXNoUGFyYW1zO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0VGhpcy5wb3RlbnRpYWxFbmRCZWFtID0gaGFzaFBhcmFtcztcdC8vIENvbnRpbnVlIHRoZSBiZWFtaW5nLCBsb29rIGZvciB0aGUgZW5kIG5leHQgbm90ZS5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyAgZW5kX2JlYW0gZ29lcyBvbiByZXN0cyBhbmQgbm90ZXMgd2hpY2ggcHJlY2VkZSByZXN0cyBfZXhjZXB0XyB3aGVuIGEgcmVzdCAob3Igc2V0IG9mIGFkamFjZW50IHJlc3RzKSBoYXMgbm9ybWFsIG5vdGVzIG9uIGJvdGggc2lkZXMgKG5vIHNwYWNlcylcbi8vXHRcdFx0aWYgKGhhc2hQYXJhbXMucmVzdCAhPT0gdW5kZWZpbmVkKVxuLy9cdFx0XHR7XG4vL1x0XHRcdFx0aGFzaFBhcmFtcy5lbmRfYmVhbSA9IHRydWU7XG4vL1x0XHRcdFx0dmFyIGVsMiA9IHRoaXMuZ2V0TGFzdE5vdGUoKTtcbi8vXHRcdFx0XHRpZiAoZWwyKSBlbDIuZW5kX2JlYW0gPSB0cnVlO1xuLy9cdFx0XHRcdC8vIFRPRE8tUEVSOiBpbXBsZW1lbnQgZXhjZXB0aW9uIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudC5cbi8vXHRcdFx0fVxuXHRcdH0gZWxzZSB7XHQvLyBJdCdzIG5vdCBhIG5vdGUsIHNvIHRoZXJlIGRlZmluaXRlbHkgaXNuJ3QgYmVhbWluZyBhZnRlciBpdC5cblx0XHRcdGVuZEJlYW1MYXN0KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSBoYXNoUGFyYW1zLmVuZF9iZWFtO1x0Ly8gV2UgZG9uJ3Qgd2FudCB0aGlzIHRlbXBvcmFyeSB2YXJpYWJsZSBoYW5naW5nIGFyb3VuZC5cblx0XHRkZWxldGUgaGFzaFBhcmFtcy5mb3JjZV9lbmRfYmVhbV9sYXN0O1x0Ly8gV2UgZG9uJ3Qgd2FudCB0aGlzIHRlbXBvcmFyeSB2YXJpYWJsZSBoYW5naW5nIGFyb3VuZC5cblx0XHRwdXNoTm90ZShoYXNoUGFyYW1zKTtcblx0fTtcblxuXHR0aGlzLmFwcGVuZFN0YXJ0aW5nRWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUsIHN0YXJ0Q2hhciwgZW5kQ2hhciwgaGFzaFBhcmFtczIpXG5cdHtcblx0XHQvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGJlYW1pbmcsIHRoZW4gZW5kIHRoZSBiZWFtLlxuXHRcdHRoaXMuY2xvc2VMaW5lKCk7XG5cblx0XHQvLyBXZSBvbmx5IGV2ZXIgd2FudCBpbXBsaWVkIG5hdHVyYWxzIHRoZSBmaXJzdCB0aW1lLlxuXHRcdHZhciBpbXBsaWVkTmF0dXJhbHM7XG5cdFx0aWYgKHR5cGUgPT09ICdrZXknKSB7XG5cdFx0XHRpbXBsaWVkTmF0dXJhbHMgPSBoYXNoUGFyYW1zMi5pbXBsaWVkTmF0dXJhbHM7XG5cdFx0XHRkZWxldGUgaGFzaFBhcmFtczIuaW1wbGllZE5hdHVyYWxzO1xuXHRcdFx0ZGVsZXRlIGhhc2hQYXJhbXMyLmV4cGxpY2l0QWNjaWRlbnRhbHM7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgdGhlIG9iamVjdCBiZWNhdXNlIGl0IHdpbGwgYmUgc3RpY2tpbmcgYXJvdW5kIGZvciB0aGUgbmV4dCBsaW5lIGFuZCB3ZSBkb24ndCB3YW50IHRoZSBleHRyYSBmaWVsZHMgaW4gaXQuXG5cdFx0dmFyIGhhc2hQYXJhbXMgPSBwYXJzZUNvbW1vbi5jbG9uZShoYXNoUGFyYW1zMik7XG5cblx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmKSB7IC8vIGJlIHN1cmUgdGhhdCB3ZSBhcmUgb24gYSBtdXNpYyB0eXBlIGxpbmUgYmVmb3JlIGRvaW5nIHRoZSBmb2xsb3dpbmcuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBpdGVtIGluIHRoaXMgc3RhZmYsIHRoZW4gd2UgbWlnaHQgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBzdGFmZiwgZmlyc3QuXG5cdFx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmLmxlbmd0aCA8PSB0aGlzLnN0YWZmTnVtKSB7XG5cdFx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXSA9IHt9O1xuXHRcdFx0XHR0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0uY2xlZiA9IHBhcnNlQ29tbW9uLmNsb25lKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlswXS5jbGVmKTtcblx0XHRcdFx0dGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmW3RoaXMuc3RhZmZOdW1dLmtleSA9IHBhcnNlQ29tbW9uLmNsb25lKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlswXS5rZXkpO1xuXHRcdFx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmWzBdLm1ldGVyKVxuXHRcdFx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS5tZXRlciA9IHBhcnNlQ29tbW9uLmNsb25lKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlswXS5tZXRlcik7XG5cdFx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS53b3JraW5nQ2xlZiA9IHBhcnNlQ29tbW9uLmNsb25lKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlswXS53b3JraW5nQ2xlZik7XG5cdFx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXMgPSBbW11dO1xuXHRcdFx0fVxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIGNsZWYgdHlwZSwgdGhlbiB3ZSByZXBsYWNlIHRoZSB3b3JraW5nIGNsZWYgb24gdGhlIGxpbmUuIFRoaXMgaXMga2VwdCBzZXBhcmF0ZSBmcm9tXG5cdFx0XHQvLyB0aGUgY2xlZiBpbiBjYXNlIHRoZXJlIGlzIGFuIGlubGluZSBjbGVmIGZpZWxkLiBXZSBuZWVkIHRvIGtub3cgd2hhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBmb3Jcblx0XHRcdC8vIHRoZSBub3RlIGlzLlxuXHRcdFx0aWYgKHR5cGUgPT09ICdjbGVmJykge1xuXHRcdFx0XHR0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0ud29ya2luZ0NsZWYgPSBoYXNoUGFyYW1zO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGVzZSBlbGVtZW50cyBzaG91bGQgbm90IGJlIGFkZGVkIHR3aWNlLCBzbyBpZiB0aGUgZWxlbWVudCBleGlzdHMgb24gdGhpcyBsaW5lIHdpdGhvdXQgYSBub3RlIG9yIGJhciBiZWZvcmUgaXQsIGp1c3QgcmVwbGFjZSB0aGUgc3RhZmYgdmVyc2lvbi5cblx0XHRcdHZhciB2b2ljZSA9IHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXNbdGhpcy52b2ljZU51bV07XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZvaWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh2b2ljZVtpXS5lbF90eXBlID09PSAnbm90ZScgfHwgdm9pY2VbaV0uZWxfdHlwZSA9PT0gJ2JhcicpIHtcblx0XHRcdFx0XHRoYXNoUGFyYW1zLmVsX3R5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdGhhc2hQYXJhbXMuc3RhcnRDaGFyID0gc3RhcnRDaGFyO1xuXHRcdFx0XHRcdGhhc2hQYXJhbXMuZW5kQ2hhciA9IGVuZENoYXI7XG5cdFx0XHRcdFx0aWYgKGltcGxpZWROYXR1cmFscylcblx0XHRcdFx0XHRcdGhhc2hQYXJhbXMuYWNjaWRlbnRhbHMgPSBpbXBsaWVkTmF0dXJhbHMuY29uY2F0KGhhc2hQYXJhbXMuYWNjaWRlbnRhbHMpO1xuXHRcdFx0XHRcdHZvaWNlLnB1c2goaGFzaFBhcmFtcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh2b2ljZVtpXS5lbF90eXBlID09PSB0eXBlKSB7XG5cdFx0XHRcdFx0aGFzaFBhcmFtcy5lbF90eXBlID0gdHlwZTtcblx0XHRcdFx0XHRoYXNoUGFyYW1zLnN0YXJ0Q2hhciA9IHN0YXJ0Q2hhcjtcblx0XHRcdFx0XHRoYXNoUGFyYW1zLmVuZENoYXIgPSBlbmRDaGFyO1xuXHRcdFx0XHRcdGlmIChpbXBsaWVkTmF0dXJhbHMpXG5cdFx0XHRcdFx0XHRoYXNoUGFyYW1zLmFjY2lkZW50YWxzID0gaW1wbGllZE5hdHVyYWxzLmNvbmNhdChoYXNoUGFyYW1zLmFjY2lkZW50YWxzKTtcblx0XHRcdFx0XHR2b2ljZVtpXSA9IGhhc2hQYXJhbXM7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBXZSBkaWRuJ3Qgc2VlIGVpdGhlciB0aGF0IHR5cGUgb3IgYSBub3RlLCBzbyByZXBsYWNlIHRoZSBlbGVtZW50IHRvIHRoZSBzdGFmZi5cblx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXVt0eXBlXSA9IGhhc2hQYXJhbXMyO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLmdldE51bUxpbmVzID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubGluZXMubGVuZ3RoO1xuXHR9O1xuXG5cdHRoaXMucHVzaExpbmUgPSBmdW5jdGlvbihoYXNoKSB7XG5cdFx0aWYgKHRoaXMudnNraXBQZW5kaW5nKSB7XG5cdFx0XHRoYXNoLnZza2lwID0gdGhpcy52c2tpcFBlbmRpbmc7XG5cdFx0XHRkZWxldGUgdGhpcy52c2tpcFBlbmRpbmc7XG5cdFx0fVxuXHRcdHRoaXMubGluZXMucHVzaChoYXNoKTtcblx0fTtcblxuXHR0aGlzLmFkZFN1YnRpdGxlID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dGhpcy5wdXNoTGluZSh7c3VidGl0bGU6IHN0cn0pO1xuXHR9O1xuXG5cdHRoaXMuYWRkU3BhY2luZyA9IGZ1bmN0aW9uKG51bSkge1xuXHRcdHRoaXMudnNraXBQZW5kaW5nID0gbnVtO1xuXHR9O1xuXG5cdHRoaXMuYWRkTmV3UGFnZSA9IGZ1bmN0aW9uKG51bSkge1xuXHRcdHRoaXMucHVzaExpbmUoe25ld3BhZ2U6IG51bX0pO1xuXHR9O1xuXG5cdHRoaXMuYWRkU2VwYXJhdG9yID0gZnVuY3Rpb24oc3BhY2VBYm92ZSwgc3BhY2VCZWxvdywgbGluZUxlbmd0aCkge1xuXHRcdHRoaXMucHVzaExpbmUoe3NlcGFyYXRvcjoge3NwYWNlQWJvdmU6IHNwYWNlQWJvdmUsIHNwYWNlQmVsb3c6IHNwYWNlQmVsb3csIGxpbmVMZW5ndGg6IGxpbmVMZW5ndGh9fSk7XG5cdH07XG5cblx0dGhpcy5hZGRUZXh0ID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dGhpcy5wdXNoTGluZSh7dGV4dDogc3RyfSk7XG5cdH07XG5cblx0dGhpcy5hZGRDZW50ZXJlZCA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdHRoaXMucHVzaExpbmUoe3RleHQ6IFt7dGV4dDogc3RyLCBjZW50ZXI6IHRydWUgfV19KTtcblx0fTtcblxuXHR0aGlzLmNvbnRhaW5zTm90ZXMgPSBmdW5jdGlvbih2b2ljZSkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdm9pY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh2b2ljZVtpXS5lbF90eXBlID09PSAnbm90ZScgfHwgdm9pY2VbaV0uZWxfdHlwZSA9PT0gJ2JhcicpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0dGhpcy5jb250YWluc05vdGVzU3RyaWN0ID0gZnVuY3Rpb24odm9pY2UpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZvaWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodm9pY2VbaV0uZWxfdHlwZSA9PT0gJ25vdGUnICYmIHZvaWNlW2ldLnJlc3QgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuLy9cdGFueVZvaWNlQ29udGFpbnNOb3RlczogZnVuY3Rpb24obGluZSkge1xuLy9cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLnN0YWZmLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuLy9cdFx0XHRpZiAodGhpcy5jb250YWluc05vdGVzKGxpbmUuc3RhZmYudm9pY2VzW2ldKSlcbi8vXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi8vXHRcdH1cbi8vXHRcdHJldHVybiBmYWxzZTtcbi8vXHR9LFxuXHR0aGlzLmNoYW5nZVZvaWNlU2NhbGUgPSBmdW5jdGlvbihzY2FsZSkge1xuXHRcdHZhciBUaGlzID0gdGhpcztcblx0XHRUaGlzLmFwcGVuZEVsZW1lbnQoJ3NjYWxlJywgbnVsbCwgbnVsbCwgeyBzaXplOiBzY2FsZX0gKTtcblx0fTtcblxuXHR0aGlzLnN0YXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBhcmFtcykge1xuXHRcdC8vIElmIHRoZSBwb2ludGVkIHRvIGxpbmUgZG9lc24ndCBleGlzdCwganVzdCBjcmVhdGUgdGhhdC4gSWYgdGhlIGxpbmUgZG9lcyBleGlzdCwgYnV0IGRvZXNuJ3QgaGF2ZSBhbnkgbXVzaWMgb24gaXQsIGp1c3QgdXNlIGl0LlxuXHRcdC8vIElmIGl0IGRvZXMgZXhpc3QgYW5kIGhhcyBtdXNpYywgdGhlbiBpbmNyZW1lbnQgdGhlIGxpbmUgbnVtYmVyLiBJZiB0aGUgbmV3IGVsZW1lbnQgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0LlxuXHRcdHZhciBUaGlzID0gdGhpcztcblx0XHR0aGlzLmNsb3NlTGluZSgpO1x0Ly8gQ2xvc2UgdGhlIHByZXZpb3VzIGxpbmUuXG5cdFx0dmFyIGNyZWF0ZVZvaWNlID0gZnVuY3Rpb24ocGFyYW1zKSB7XG5cdFx0XHR2YXIgdGhpc1N0YWZmID0gVGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dO1xuXHRcdFx0dGhpc1N0YWZmLnZvaWNlc1tUaGlzLnZvaWNlTnVtXSA9IFtdO1xuXHRcdFx0aWYgKCF0aGlzU3RhZmYudGl0bGUpXG5cdFx0XHRcdHRoaXNTdGFmZi50aXRsZSA9IFtdO1xuXHRcdFx0dGhpc1N0YWZmLnRpdGxlW1RoaXMudm9pY2VOdW1dID0geyBuYW1lOiBwYXJhbXMubmFtZSwgc3VibmFtZTogcGFyYW1zLnN1Ym5hbWUgfTtcblx0XHRcdGlmIChwYXJhbXMuc3R5bGUpXG5cdFx0XHRcdFRoaXMuYXBwZW5kRWxlbWVudCgnc3R5bGUnLCBudWxsLCBudWxsLCB7aGVhZDogcGFyYW1zLnN0eWxlfSk7XG5cdFx0XHRpZiAocGFyYW1zLnN0ZW0pXG5cdFx0XHRcdFRoaXMuYXBwZW5kRWxlbWVudCgnc3RlbScsIG51bGwsIG51bGwsIHtkaXJlY3Rpb246IHBhcmFtcy5zdGVtfSk7XG5cdFx0XHRlbHNlIGlmIChUaGlzLnZvaWNlTnVtID4gMCkge1xuXHRcdFx0XHRpZiAodGhpc1N0YWZmLnZvaWNlc1swXSE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXNTdGFmZi52b2ljZXNbMF0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzU3RhZmYudm9pY2VzWzBdLmVsX3R5cGUgPT09ICdzdGVtJylcblx0XHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIWZvdW5kKSB7XG5cdFx0XHRcdFx0XHR2YXIgc3RlbSA9IHsgZWxfdHlwZTogJ3N0ZW0nLCBkaXJlY3Rpb246ICd1cCcgfTtcblx0XHRcdFx0XHRcdHRoaXNTdGFmZi52b2ljZXNbMF0uc3BsaWNlKDAsMCxzdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0VGhpcy5hcHBlbmRFbGVtZW50KCdzdGVtJywgbnVsbCwgbnVsbCwge2RpcmVjdGlvbjogJ2Rvd24nfSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1zLnNjYWxlKVxuXHRcdFx0XHRUaGlzLmFwcGVuZEVsZW1lbnQoJ3NjYWxlJywgbnVsbCwgbnVsbCwgeyBzaXplOiBwYXJhbXMuc2NhbGV9ICk7XG5cdFx0fTtcblx0XHR2YXIgY3JlYXRlU3RhZmYgPSBmdW5jdGlvbihwYXJhbXMpIHtcblx0XHRcdGlmIChwYXJhbXMua2V5ICYmIHBhcmFtcy5rZXkuaW1wbGllZE5hdHVyYWxzKSB7XG5cdFx0XHRcdHBhcmFtcy5rZXkuYWNjaWRlbnRhbHMgPSBwYXJhbXMua2V5LmFjY2lkZW50YWxzLmNvbmNhdChwYXJhbXMua2V5LmltcGxpZWROYXR1cmFscyk7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXMua2V5LmltcGxpZWROYXR1cmFscztcblx0XHRcdH1cblxuXHRcdFx0VGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dID0ge3ZvaWNlczogWyBdLCBjbGVmOiBwYXJhbXMuY2xlZiwga2V5OiBwYXJhbXMua2V5LCB3b3JraW5nQ2xlZjogcGFyYW1zLmNsZWYgfTtcblx0XHRcdGlmIChwYXJhbXMuc3RhZmZsaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS5jbGVmLnN0YWZmbGluZXMgPSBwYXJhbXMuc3RhZmZsaW5lcztcblx0XHRcdFx0VGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dLndvcmtpbmdDbGVmLnN0YWZmbGluZXMgPSBwYXJhbXMuc3RhZmZsaW5lcztcblx0XHRcdH1cblx0XHRcdGlmIChwYXJhbXMuc3RhZmZzY2FsZSkge1xuXHRcdFx0XHRUaGlzLmxpbmVzW1RoaXMubGluZU51bV0uc3RhZmZbVGhpcy5zdGFmZk51bV0uc3RhZmZzY2FsZSA9IHBhcmFtcy5zdGFmZnNjYWxlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy50cmlwbGV0Zm9udCkgVGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dLnRyaXBsZXRmb250ID0gcGFyYW1zLnRyaXBsZXRmb250O1xuXHRcdFx0aWYgKHBhcmFtcy52b2NhbGZvbnQpIFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS52b2NhbGZvbnQgPSBwYXJhbXMudm9jYWxmb250O1xuXHRcdFx0aWYgKHBhcmFtcy5icmFja2V0KSBUaGlzLmxpbmVzW1RoaXMubGluZU51bV0uc3RhZmZbVGhpcy5zdGFmZk51bV0uYnJhY2tldCA9IHBhcmFtcy5icmFja2V0O1xuXHRcdFx0aWYgKHBhcmFtcy5icmFjZSkgVGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dLmJyYWNlID0gcGFyYW1zLmJyYWNlO1xuXHRcdFx0aWYgKHBhcmFtcy5jb25uZWN0QmFyTGluZXMpIFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS5jb25uZWN0QmFyTGluZXMgPSBwYXJhbXMuY29ubmVjdEJhckxpbmVzO1xuXHRcdFx0aWYgKHBhcmFtcy5iYXJOdW1iZXIpIFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS5iYXJOdW1iZXIgPSBwYXJhbXMuYmFyTnVtYmVyO1xuXHRcdFx0Y3JlYXRlVm9pY2UocGFyYW1zKTtcblx0XHRcdC8vIFNvbWUgc3R1ZmYganVzdCBoYXBwZW5zIGZvciB0aGUgZmlyc3Qgdm9pY2Vcblx0XHRcdGlmIChwYXJhbXMucGFydClcblx0XHRcdFx0VGhpcy5hcHBlbmRFbGVtZW50KCdwYXJ0JywgcGFyYW1zLnBhcnQuc3RhcnRDaGFyLCBwYXJhbXMucGFydC5lbmRDaGFyLCB7dGl0bGU6IHBhcmFtcy5wYXJ0LnRpdGxlfSk7XG5cdFx0XHRpZiAocGFyYW1zLm1ldGVyICE9PSB1bmRlZmluZWQpIFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS5tZXRlciA9IHBhcmFtcy5tZXRlcjtcblx0XHR9O1xuXHRcdHZhciBjcmVhdGVMaW5lID0gZnVuY3Rpb24ocGFyYW1zKSB7XG5cdFx0XHRUaGlzLmxpbmVzW1RoaXMubGluZU51bV0gPSB7c3RhZmY6IFtdfTtcblx0XHRcdGNyZWF0ZVN0YWZmKHBhcmFtcyk7XG5cdFx0fTtcblx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dID09PSB1bmRlZmluZWQpIGNyZWF0ZUxpbmUocGFyYW1zKTtcblx0XHRlbHNlIGlmICh0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5saW5lTnVtKys7XG5cdFx0XHR0aGlzLnN0YXJ0TmV3TGluZShwYXJhbXMpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmW3RoaXMuc3RhZmZOdW1dID09PSB1bmRlZmluZWQpIGNyZWF0ZVN0YWZmKHBhcmFtcyk7XG5cdFx0ZWxzZSBpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmW3RoaXMuc3RhZmZOdW1dLnZvaWNlc1t0aGlzLnZvaWNlTnVtXSA9PT0gdW5kZWZpbmVkKSBjcmVhdGVWb2ljZShwYXJhbXMpO1xuXHRcdGVsc2UgaWYgKCF0aGlzLmNvbnRhaW5zTm90ZXModGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmW3RoaXMuc3RhZmZOdW1dLnZvaWNlc1t0aGlzLnZvaWNlTnVtXSkpIHJldHVybjtcblx0XHRlbHNlIHtcblx0XHRcdHRoaXMubGluZU51bSsrO1xuXHRcdFx0dGhpcy5zdGFydE5ld0xpbmUocGFyYW1zKTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5zZXRCYXJOdW1iZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihiYXJOdW1iZXIpIHtcblx0XHQvLyBJZiB0aGlzIGlzIGNhbGxlZCByaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSwgdGhlbiBjb3JyZWN0IHRoZSBtZWFzdXJlIG51bWJlciB0aGF0IGlzIGFscmVhZHkgd3JpdHRlbi5cblx0XHQvLyBJZiB0aGlzIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbWVhc3VyZSwgdGhlbiBjb3JyZWN0IHRoZSBtZWFzdXJlIG51bWJlciB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuXG5cdFx0Ly8gSWYgdGhpcyBpcyBjYWxsZWQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lYXN1cmUsIHRoZW4gc3VidHJhY3Qgb25lIGZyb20gaXQsIGJlY2F1c2UgaXQgd2lsbCBiZSBpbmNyZW1lbnRlZCBiZWZvcmUgYXBwbGllZC5cblx0XHR2YXIgY3VycmVudFZvaWNlID0gdGhpcy5nZXRDdXJyZW50Vm9pY2UoKTtcblx0XHRpZiAoY3VycmVudFZvaWNlICYmIGN1cnJlbnRWb2ljZS5sZW5ndGggPiAwKSB7XG5cdFx0XHR2YXIgbGFzdEVsZW1lbnQgPSBjdXJyZW50Vm9pY2VbY3VycmVudFZvaWNlLmxlbmd0aC0xXTtcblx0XHRcdGlmIChsYXN0RWxlbWVudC5lbF90eXBlID09PSAnYmFyJykge1xuXHRcdFx0XHRpZiAobGFzdEVsZW1lbnQuYmFyTnVtYmVyICE9PSB1bmRlZmluZWQpIC8vIHRoZSBtZWFzdXJlIG51bWJlciBtaWdodCBub3QgYmUgd3JpdHRlbiBmb3IgdGhpcyBiYXIsIGRvbid0IG92ZXJyaWRlIHRoYXQuXG5cdFx0XHRcdFx0bGFzdEVsZW1lbnQuYmFyTnVtYmVyID0gYmFyTnVtYmVyO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHJldHVybiBiYXJOdW1iZXItMTtcblx0XHR9XG5cdFx0cmV0dXJuIGJhck51bWJlcjtcblx0fTtcblxuXHR0aGlzLmhhc0JlZ2luTXVzaWMgPSBmdW5jdGlvbigpIHtcblx0XHQvLyByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBleGlzdHMgYXQgbGVhc3Qgb25lIGxpbmUgdGhhdCBjb250YWlucyBcInN0YWZmXCJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLmxpbmVzW2ldLnN0YWZmKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdHRoaXMuaXNGaXJzdExpbmUgPSBmdW5jdGlvbihpbmRleCkge1xuXHRcdGZvciAodmFyIGkgPSBpbmRleC0xOyBpID49IDA7IGktLSkge1xuXHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmYgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHR0aGlzLmdldE1ldGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgbGluZSA9IHRoaXMubGluZXNbaV07XG5cdFx0XHRpZiAobGluZS5zdGFmZikge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGxpbmUuc3RhZmYubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHR2YXIgbWV0ZXIgPSBsaW5lLnN0YWZmW2pdLm1ldGVyO1xuXHRcdFx0XHRcdGlmIChtZXRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG1ldGVyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4geyB0eXBlOiBcImNvbW1vbl90aW1lXCIgfTtcblx0fTtcblxuXHR0aGlzLmdldE1ldGVyRnJhY3Rpb24gPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWV0ZXIgPSB0aGlzLmdldE1ldGVyKCk7XG5cdFx0dmFyIG51bSA9IDQ7XG5cdFx0dmFyIGRlbiA9IDQ7XG5cdFx0aWYgKG1ldGVyKSB7XG5cdFx0XHRpZiAobWV0ZXIudHlwZSA9PT0gJ3NwZWNpZmllZCcpIHtcblx0XHRcdFx0bnVtID0gcGFyc2VJbnQobWV0ZXIudmFsdWVbMF0ubnVtLCAxMCk7XG5cdFx0XHRcdGRlbiA9IHBhcnNlSW50KG1ldGVyLnZhbHVlWzBdLmRlbiwxMCk7XG5cdFx0XHR9IGVsc2UgaWYgKG1ldGVyLnR5cGUgPT09ICdjdXRfdGltZScpIHtcblx0XHRcdFx0bnVtID0gMjtcblx0XHRcdFx0ZGVuID0gMjtcblx0XHRcdH0gZWxzZSBpZiAobWV0ZXIudHlwZSA9PT0gJ2NvbW1vbl90aW1lJykge1xuXHRcdFx0XHRudW0gPSA0O1xuXHRcdFx0XHRkZW4gPSA0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLm1ldGVyID0geyBudW06IG51bSwgZGVuOiBkZW4gfTtcblx0XHRyZXR1cm4gdGhpcy5tZXRlcjsgLy8gVE9ETy1QRVI6IGlzIHRoaXMgc2F2ZWQgdmFsdWUgdXNlZCBhbnl3aGVyZT8gQSBnZXQgZnVuY3Rpb24gc2hvdWxkbid0IGNoYW5nZSBzdGF0ZS5cblx0fTtcblxuXHR0aGlzLmdldEtleVNpZ25hdHVyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldO1xuXHRcdFx0aWYgKGxpbmUuc3RhZmYpIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLnN0YWZmLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0aWYgKGxpbmUuc3RhZmZbal0ua2V5KVxuXHRcdFx0XHRcdFx0cmV0dXJuIGxpbmUuc3RhZmZbal0ua2V5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7ICB9O1xuXHR9O1xuXG5cdHRoaXMuZ2V0Q3VycmVudFZvaWNlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXNbdGhpcy52b2ljZU51bV0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0udm9pY2VzW3RoaXMudm9pY2VOdW1dO1xuXHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdH07XG5cblx0dGhpcy5zZXRDdXJyZW50Vm9pY2UgPSBmdW5jdGlvbihzdGFmZk51bSwgdm9pY2VOdW0pIHtcblx0XHR0aGlzLnN0YWZmTnVtID0gc3RhZmZOdW07XG5cdFx0dGhpcy52b2ljZU51bSA9IHZvaWNlTnVtO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmYpIHtcblx0XHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmZbc3RhZmZOdW1dID09PSB1bmRlZmluZWQgfHwgdGhpcy5saW5lc1tpXS5zdGFmZltzdGFmZk51bV0udm9pY2VzW3ZvaWNlTnVtXSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0IXRoaXMuY29udGFpbnNOb3Rlcyh0aGlzLmxpbmVzW2ldLnN0YWZmW3N0YWZmTnVtXS52b2ljZXNbdm9pY2VOdW1dICkpIHtcblx0XHRcdFx0XHR0aGlzLmxpbmVOdW0gPSAgaTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5saW5lTnVtID0gIGk7XG5cdH07XG5cblx0dGhpcy5hZGRNZXRhVGV4dCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcblx0XHRpZiAodGhpcy5tZXRhVGV4dFtrZXldID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLm1ldGFUZXh0W2tleV0gPSB2YWx1ZTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLm1ldGFUZXh0W2tleV0gKz0gXCJcXG5cIiArIHZhbHVlO1xuXHR9O1xuXG5cdHRoaXMuYWRkTWV0YVRleHRBcnJheSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcblx0XHRpZiAodGhpcy5tZXRhVGV4dFtrZXldID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLm1ldGFUZXh0W2tleV0gPSBbdmFsdWVdO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMubWV0YVRleHRba2V5XS5wdXNoKHZhbHVlKTtcblx0fTtcblx0dGhpcy5hZGRNZXRhVGV4dE9iaiA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcblx0XHR0aGlzLm1ldGFUZXh0W2tleV0gPSB2YWx1ZTtcblx0fTtcblxuXHRmdW5jdGlvbiBhZGRWZXJ0aWNhbEluZm8odGltaW5nRXZlbnRzKSB7XG5cdFx0Ly8gQWRkIHZlcnRpY2FsIGluZm8gdG8gdGhlIGJhciBldmVudHM6IHB1dCB0aGUgbmV4dCBldmVudCdzIHRvcCwgYW5kIHRoZSBldmVudCBhZnRlciB0aGUgbmV4dCBtZWFzdXJlJ3MgdG9wLlxuXHRcdHZhciBsYXN0QmFyVG9wO1xuXHRcdHZhciBsYXN0QmFyQm90dG9tO1xuXHRcdHZhciBsYXN0RXZlbnRUb3A7XG5cdFx0dmFyIGxhc3RFdmVudEJvdHRvbTtcblx0XHRmb3IgKHZhciBlID0gdGltaW5nRXZlbnRzLmxlbmd0aCAtIDE7IGUgPj0gMDsgZS0tKSB7XG5cdFx0XHR2YXIgZXYgPSB0aW1pbmdFdmVudHNbZV07XG5cdFx0XHRpZiAoZXYudHlwZSA9PT0gJ2JhcicpIHtcblx0XHRcdFx0ZXYudG9wID0gbGFzdEV2ZW50VG9wO1xuXHRcdFx0XHRldi5uZXh0VG9wID0gbGFzdEJhclRvcDtcblx0XHRcdFx0bGFzdEJhclRvcCA9IGxhc3RFdmVudFRvcDtcblxuXHRcdFx0XHRldi5ib3R0b20gPSBsYXN0RXZlbnRCb3R0b207XG5cdFx0XHRcdGV2Lm5leHRCb3R0b20gPSBsYXN0QmFyQm90dG9tO1xuXHRcdFx0XHRsYXN0QmFyQm90dG9tID0gbGFzdEV2ZW50Qm90dG9tO1xuXHRcdFx0fSBlbHNlIGlmIChldi50eXBlID09PSAnZXZlbnQnKSB7XG5cdFx0XHRcdGxhc3RFdmVudFRvcCA9IGV2LnRvcDtcblx0XHRcdFx0bGFzdEV2ZW50Qm90dG9tID0gZXYudG9wICsgZXYuaGVpZ2h0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIG1ha2VTb3J0ZWRBcnJheShoYXNoKSB7XG5cdFx0dmFyIGFyciA9IFtdO1xuXHRcdGZvciAodmFyIGsgaW4gaGFzaCkge1xuXHRcdFx0aWYgKGhhc2guaGFzT3duUHJvcGVydHkoaykpXG5cdFx0XHRcdGFyci5wdXNoKGhhc2hba10pO1xuXHRcdH1cblx0XHRhcnIgPSBhcnIuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0dmFyIGRpZmYgPSBhLm1pbGxpc2Vjb25kcyAtIGIubWlsbGlzZWNvbmRzO1xuXHRcdFx0Ly8gaWYgdGhlIGV2ZW50cyBoYXZlIHRoZSBzYW1lIHRpbWUsIG1ha2Ugc3VyZSBhIGJhciBjb21lcyBiZWZvcmUgYSBub3RlXG5cdFx0XHRpZiAoZGlmZiAhPT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gZGlmZjtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYS50eXBlID09PSBcImJhclwiID8gLTEgOiAxO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBhcnI7XG5cdH1cblxuXHR0aGlzLmFkZEVsZW1lbnRUb0V2ZW50cyA9IGZ1bmN0aW9uKGV2ZW50SGFzaCwgZWxlbWVudCwgdm9pY2VUaW1lTWlsbGlzZWNvbmRzLCB0b3AsIGhlaWdodCwgbGluZSwgbWVhc3VyZU51bWJlciwgdGltZURpdmlkZXIsIGlzVGllZFN0YXRlLCBuZXh0SXNCYXIpIHtcblx0XHRpZiAoZWxlbWVudC5oaW50KVxuXHRcdFx0cmV0dXJuIHsgaXNUaWVkU3RhdGU6IHVuZGVmaW5lZCwgZHVyYXRpb246IDAgfTtcblx0XHR2YXIgcmVhbER1cmF0aW9uID0gZWxlbWVudC5kdXJhdGlvbkNsYXNzID8gZWxlbWVudC5kdXJhdGlvbkNsYXNzIDogZWxlbWVudC5kdXJhdGlvbjtcblx0XHRpZiAoZWxlbWVudC5hYmNlbGVtLnJlc3QgJiYgZWxlbWVudC5hYmNlbGVtLnJlc3QudHlwZSA9PT0gXCJzcGFjZXJcIilcblx0XHRcdHJlYWxEdXJhdGlvbiA9IDA7XG5cdFx0aWYgKHJlYWxEdXJhdGlvbiA+IDApIHtcblx0XHRcdHZhciBlcyA9IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gaW52aXNpYmxlIHJlc3QsIHRoZW4gdGhlcmUgYXJlIG5vdCBlbGVtZW50cywgc28gZG9uJ3QgcHVzaCBhIG51bGwgb25lLlxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmVsZW1zZXQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKGVsZW1lbnQuZWxlbXNldFtpXSAhPT0gbnVsbClcblx0XHRcdFx0XHRlcy5wdXNoKGVsZW1lbnQuZWxlbXNldFtpXSk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgaXNUaWVkVG9OZXh0ID0gZWxlbWVudC5zdGFydFRpZTtcblx0XHRcdGlmIChpc1RpZWRTdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyBpc1RpZWRTdGF0ZV0uZWxlbWVudHMucHVzaChlcyk7IC8vIEFkZCB0aGUgdGllZCBub3RlIHRvIHRoZSBmaXJzdCBub3RlIHRoYXQgaXQgaXMgdGllZCB0b1xuXHRcdFx0XHRpZiAobmV4dElzQmFyKSB7XG5cdFx0XHRcdFx0aWYgKCFldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXSkge1xuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiZXZlbnRcIixcblx0XHRcdFx0XHRcdFx0bWlsbGlzZWNvbmRzOiB2b2ljZVRpbWVNaWxsaXNlY29uZHMsXG5cdFx0XHRcdFx0XHRcdGxpbmU6IGxpbmUsXG5cdFx0XHRcdFx0XHRcdG1lYXN1cmVOdW1iZXI6IG1lYXN1cmVOdW1iZXIsXG5cdFx0XHRcdFx0XHRcdHRvcDogdG9wLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdFx0XHRcdFx0bGVmdDogbnVsbCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IDAsXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRzOiBbXSxcblx0XHRcdFx0XHRcdFx0c3RhcnRDaGFyOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRlbmRDaGFyOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRzdGFydENoYXJBcnJheTogW10sXG5cdFx0XHRcdFx0XHRcdGVuZENoYXJBcnJheTogW11cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1lYXN1cmVTdGFydCA9IHRydWU7XG5cdFx0XHRcdFx0bmV4dElzQmFyID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpc1RpZWRUb05leHQpXG5cdFx0XHRcdFx0aXNUaWVkU3RhdGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyB0aGUgbGFzdCBub3RlIHdhc24ndCB0aWVkLlxuXHRcdFx0XHRpZiAoIWV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdKSB7XG5cdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10gPSB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRcdFx0XHRtaWxsaXNlY29uZHM6IHZvaWNlVGltZU1pbGxpc2Vjb25kcyxcblx0XHRcdFx0XHRcdGxpbmU6IGxpbmUsXG5cdFx0XHRcdFx0XHRtZWFzdXJlTnVtYmVyOiBtZWFzdXJlTnVtYmVyLFxuXHRcdFx0XHRcdFx0dG9wOiB0b3AsXG5cdFx0XHRcdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdFx0XHRcdGxlZnQ6IGVsZW1lbnQueCxcblx0XHRcdFx0XHRcdHdpZHRoOiBlbGVtZW50LncsXG5cdFx0XHRcdFx0XHRlbGVtZW50czogW2VzXSxcblx0XHRcdFx0XHRcdHN0YXJ0Q2hhcjogZWxlbWVudC5hYmNlbGVtLnN0YXJ0Q2hhcixcblx0XHRcdFx0XHRcdGVuZENoYXI6IGVsZW1lbnQuYWJjZWxlbS5lbmRDaGFyLFxuXHRcdFx0XHRcdFx0c3RhcnRDaGFyQXJyYXk6IFtlbGVtZW50LmFiY2VsZW0uc3RhcnRDaGFyXSxcblx0XHRcdFx0XHRcdGVuZENoYXJBcnJheTogW2VsZW1lbnQuYWJjZWxlbS5lbmRDaGFyXSxcblx0XHRcdFx0XHRcdG1pZGlQaXRjaGVzOiBlbGVtZW50LmFiY2VsZW0ubWlkaVBpdGNoZXMgPyBwYXJzZUNvbW1vbi5jbG9uZUFycmF5KGVsZW1lbnQuYWJjZWxlbS5taWRpUGl0Y2hlcykgOiBbXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuYWJjZWxlbS5taWRpR3JhY2VOb3RlUGl0Y2hlcylcblx0XHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlHcmFjZU5vdGVQaXRjaGVzID0gcGFyc2VDb21tb24uY2xvbmVBcnJheShlbGVtZW50LmFiY2VsZW0ubWlkaUdyYWNlTm90ZVBpdGNoZXMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdm9pY2UgdGhlbiB0d28gbm90ZXMgY2FuIGZhbGwgYXQgdGhlIHNhbWUgdGltZS4gVXN1YWxseSB0aGV5IHdvdWxkIGJlIGxpbmVkIHVwIGluIHRoZSBzYW1lIHBsYWNlLCBidXQgaWYgaXQgaXMgYSB3aG9sZSByZXN0LCB0aGVuIGl0IGlzIHBsYWNlZCBmdW5ueS4gSW4gYW55IGNhc2UsIHRoZSBsZWZ0IG1vc3QgZWxlbWVudCB3aW5zLlxuXHRcdFx0XHRcdGlmIChldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5sZWZ0KVxuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10ubGVmdCA9IE1hdGgubWluKGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLmxlZnQsIGVsZW1lbnQueCk7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10ubGVmdCA9IGVsZW1lbnQueDtcblx0XHRcdFx0XHRldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5lbGVtZW50cy5wdXNoKGVzKTtcblx0XHRcdFx0XHRldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5zdGFydENoYXJBcnJheS5wdXNoKGVsZW1lbnQuYWJjZWxlbS5zdGFydENoYXIpO1xuXHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLmVuZENoYXJBcnJheS5wdXNoKGVsZW1lbnQuYWJjZWxlbS5lbmRDaGFyKTtcblx0XHRcdFx0XHRpZiAoZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10uc3RhcnRDaGFyID09PSBudWxsKVxuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10uc3RhcnRDaGFyID1lbGVtZW50LmFiY2VsZW0uc3RhcnRDaGFyO1xuXHRcdFx0XHRcdGlmIChldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5lbmRDaGFyID09PSBudWxsKVxuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10uZW5kQ2hhciA9ZWxlbWVudC5hYmNlbGVtLmVuZENoYXI7XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuYWJjZWxlbS5taWRpUGl0Y2hlcyAmJiBlbGVtZW50LmFiY2VsZW0ubWlkaVBpdGNoZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlQaXRjaGVzKVxuXHRcdFx0XHRcdFx0XHRldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5taWRpUGl0Y2hlcyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmFiY2VsZW0ubWlkaVBpdGNoZXMubGVuZ3RoOyBpKyspXG5cdFx0XHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlQaXRjaGVzLnB1c2goZWxlbWVudC5hYmNlbGVtLm1pZGlQaXRjaGVzW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuYWJjZWxlbS5taWRpR3JhY2VOb3RlUGl0Y2hlcyAmJiBlbGVtZW50LmFiY2VsZW0ubWlkaUdyYWNlTm90ZVBpdGNoZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlHcmFjZU5vdGVQaXRjaGVzKVxuXHRcdFx0XHRcdFx0XHRldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5taWRpR3JhY2VOb3RlUGl0Y2hlcyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBlbGVtZW50LmFiY2VsZW0ubWlkaUdyYWNlTm90ZVBpdGNoZXMubGVuZ3RoOyBqKyspXG5cdFx0XHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlHcmFjZU5vdGVQaXRjaGVzLnB1c2goZWxlbWVudC5hYmNlbGVtLm1pZGlHcmFjZU5vdGVQaXRjaGVzW2pdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5leHRJc0Jhcikge1xuXHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1lYXN1cmVTdGFydCA9IHRydWU7XG5cdFx0XHRcdFx0bmV4dElzQmFyID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlzVGllZFRvTmV4dClcblx0XHRcdFx0XHRpc1RpZWRTdGF0ZSA9IHZvaWNlVGltZU1pbGxpc2Vjb25kcztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgaXNUaWVkU3RhdGU6IGlzVGllZFN0YXRlLCBkdXJhdGlvbjogcmVhbER1cmF0aW9uIC8gdGltZURpdmlkZXIsIG5leHRJc0JhcjogbmV4dElzQmFyIHx8IGVsZW1lbnQudHlwZSA9PT0gJ2JhcicgfTtcblx0fTtcblxuXHR0aGlzLm1ha2VWb2ljZXNBcnJheSA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIEZpcnN0IG1ha2UgYSBuZXcgYXJyYXkgdGhhdCBpcyBhcnJhbmdlZCBieSB2b2ljZSBzbyB0aGF0IHRoZSByZXBlYXRzIHRoYXQgc3BhbiBkaWZmZXJlbnQgbGluZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlxuXHRcdHZhciB2b2ljZXNBcnIgPSBbXTtcblx0XHRmb3IgKHZhciBsaW5lID0gMDsgbGluZSA8IHRoaXMuZW5ncmF2ZXIuc3RhZmZncm91cHMubGVuZ3RoOyBsaW5lKyspIHtcblx0XHRcdHZhciBncm91cCA9IHRoaXMuZW5ncmF2ZXIuc3RhZmZncm91cHNbbGluZV07XG5cdFx0XHR2YXIgZmlyc3RTdGFmZiA9IGdyb3VwLnN0YWZmc1swXTtcblx0XHRcdHZhciBtaWRkbGVDID0gZmlyc3RTdGFmZi5hYnNvbHV0ZVk7XG5cdFx0XHR2YXIgdG9wID0gbWlkZGxlQyAtIGZpcnN0U3RhZmYudG9wICogc3BhY2luZy5TVEVQO1xuXHRcdFx0dmFyIGxhc3RTdGFmZiA9IGdyb3VwLnN0YWZmc1tncm91cC5zdGFmZnMubGVuZ3RoIC0gMV07XG5cdFx0XHRtaWRkbGVDID0gbGFzdFN0YWZmLmFic29sdXRlWTtcblx0XHRcdHZhciBib3R0b20gPSBtaWRkbGVDIC0gbGFzdFN0YWZmLmJvdHRvbSAqIHNwYWNpbmcuU1RFUDtcblx0XHRcdHZhciBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG5cblx0XHRcdHZhciB2b2ljZXMgPSBncm91cC52b2ljZXM7XG5cdFx0XHRmb3IgKHZhciB2ID0gMDsgdiA8IHZvaWNlcy5sZW5ndGg7IHYrKykge1xuXHRcdFx0XHR2YXIgbWVhc3VyZU51bWJlciA9IDA7XG5cdFx0XHRcdHZhciBub3RlRm91bmQgPSBmYWxzZTtcblx0XHRcdFx0aWYgKCF2b2ljZXNBcnJbdl0pXG5cdFx0XHRcdFx0dm9pY2VzQXJyW3ZdID0gW107XG5cdFx0XHRcdHZhciBlbGVtZW50cyA9IHZvaWNlc1t2XS5jaGlsZHJlbjtcblx0XHRcdFx0Zm9yICh2YXIgZWxlbSA9IDA7IGVsZW0gPCBlbGVtZW50cy5sZW5ndGg7IGVsZW0rKykge1xuXHRcdFx0XHRcdHZvaWNlc0Fyclt2XS5wdXNoKHt0b3A6IHRvcCwgaGVpZ2h0OiBoZWlnaHQsIGxpbmU6IGxpbmUsIG1lYXN1cmVOdW1iZXI6IG1lYXN1cmVOdW1iZXIsIGVsZW06IGVsZW1lbnRzW2VsZW1dfSk7XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzW2VsZW1dLnR5cGUgPT09ICdiYXInICYmIG5vdGVGb3VuZCkgLy8gQ291bnQgdGhlIG1lYXN1cmVzIGJ5IGNvdW50aW5nIHRoZSBiYXIgbGluZXMsIGJ1dCBza2lwIGEgYmFyIGxpbmUgdGhhdCBhcHBlYXJzIGF0IHRoZSBsZWZ0IG9mIHRoZSBtdXNpYywgYmVmb3JlIGFueSBub3Rlcy5cblx0XHRcdFx0XHRcdG1lYXN1cmVOdW1iZXIrKztcblx0XHRcdFx0XHRpZiAoZWxlbWVudHNbZWxlbV0udHlwZSA9PT0gJ25vdGUnIHx8IGVsZW1lbnRzW2VsZW1dLnR5cGUgPT09ICdyZXN0Jylcblx0XHRcdFx0XHRcdG5vdGVGb3VuZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZvaWNlc0Fycjtcblx0fTtcblxuXHR0aGlzLnNldHVwRXZlbnRzID0gZnVuY3Rpb24oc3RhcnRpbmdEZWxheSwgdGltZURpdmlkZXIsIGJwbSkge1xuXHRcdHZhciB0aW1pbmdFdmVudHMgPSBbXTtcblxuXHRcdHZhciBldmVudEhhc2ggPSB7fTtcblx0XHQvLyBUaGUgdGltZSBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwaWVjZS5cblx0XHQvLyBUaGUgdW5pdHMgd2UgYXJlIHNjYW5uaW5nIGFyZSBpbiBub3RhdGlvbiB1bml0cyAoaS5lLiAwLjI1IGlzIGEgcXVhcnRlciBub3RlKVxuXHRcdHZhciB0aW1lID0gc3RhcnRpbmdEZWxheTtcblx0XHR2YXIgaXNUaWVkU3RhdGU7XG5cdFx0dmFyIG5leHRJc0JhciA9IHRydWU7XG5cdFx0dmFyIHZvaWNlcyA9IHRoaXMubWFrZVZvaWNlc0FycmF5KCk7XG5cdFx0Zm9yICh2YXIgdiA9IDA7IHYgPCB2b2ljZXMubGVuZ3RoOyB2KyspIHtcblx0XHRcdHZhciB2b2ljZVRpbWUgPSB0aW1lO1xuXHRcdFx0dmFyIHZvaWNlVGltZU1pbGxpc2Vjb25kcyA9IE1hdGgucm91bmQodm9pY2VUaW1lICogMTAwMCk7XG5cdFx0XHR2YXIgc3RhcnRpbmdSZXBlYXRFbGVtID0gMDtcblx0XHRcdHZhciBlbmRpbmdSZXBlYXRFbGVtID0gLTE7XG5cdFx0XHR2YXIgZWxlbWVudHMgPSB2b2ljZXNbdl07XG5cdFx0XHRmb3IgKHZhciBlbGVtID0gMDsgZWxlbSA8IGVsZW1lbnRzLmxlbmd0aDsgZWxlbSsrKSB7XG5cdFx0XHRcdHZhciBlbGVtZW50ID0gZWxlbWVudHNbZWxlbV0uZWxlbTtcblx0XHRcdFx0aWYgKGVsZW1lbnQuYWJjZWxlbS5lbF90eXBlID09PSBcInRlbXBvXCIpIHtcblx0XHRcdFx0XHR2YXIgYnBtID0gdGhpcy5nZXRCcG0oZWxlbWVudC5hYmNlbGVtKTtcblx0XHRcdFx0XHR2YXIgYmVhdExlbmd0aCA9IHRoaXMuZ2V0QmVhdExlbmd0aCgpO1xuXHRcdFx0XHRcdHZhciBiZWF0c1BlclNlY29uZCA9IGJwbSAvIDYwO1xuXHRcdFx0XHRcdHRpbWVEaXZpZGVyID0gYmVhdExlbmd0aCAqIGJlYXRzUGVyU2Vjb25kO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciByZXQgPSB0aGlzLmFkZEVsZW1lbnRUb0V2ZW50cyhldmVudEhhc2gsIGVsZW1lbnQsIHZvaWNlVGltZU1pbGxpc2Vjb25kcywgZWxlbWVudHNbZWxlbV0udG9wLCBlbGVtZW50c1tlbGVtXS5oZWlnaHQsIGVsZW1lbnRzW2VsZW1dLmxpbmUsIGVsZW1lbnRzW2VsZW1dLm1lYXN1cmVOdW1iZXIsIHRpbWVEaXZpZGVyLCBpc1RpZWRTdGF0ZSwgbmV4dElzQmFyKTtcblx0XHRcdFx0aXNUaWVkU3RhdGUgPSByZXQuaXNUaWVkU3RhdGU7XG5cdFx0XHRcdG5leHRJc0JhciA9IHJldC5uZXh0SXNCYXI7XG5cdFx0XHRcdHZvaWNlVGltZSArPSByZXQuZHVyYXRpb247XG5cdFx0XHRcdHZvaWNlVGltZU1pbGxpc2Vjb25kcyA9IE1hdGgucm91bmQodm9pY2VUaW1lICogMTAwMCk7XG5cdFx0XHRcdGlmIChlbGVtZW50LnR5cGUgPT09ICdiYXInKSB7XG5cdFx0XHRcdFx0dmFyIGJhclR5cGUgPSBlbGVtZW50LmFiY2VsZW0udHlwZTtcblx0XHRcdFx0XHR2YXIgZW5kUmVwZWF0ID0gKGJhclR5cGUgPT09IFwiYmFyX3JpZ2h0X3JlcGVhdFwiIHx8IGJhclR5cGUgPT09IFwiYmFyX2RibF9yZXBlYXRcIik7XG5cdFx0XHRcdFx0dmFyIHN0YXJ0RW5kaW5nID0gKGVsZW1lbnQuYWJjZWxlbS5zdGFydEVuZGluZyA9PT0gJzEnKTtcblx0XHRcdFx0XHR2YXIgc3RhcnRSZXBlYXQgPSAoYmFyVHlwZSA9PT0gXCJiYXJfbGVmdF9yZXBlYXRcIiB8fCBiYXJUeXBlID09PSBcImJhcl9kYmxfcmVwZWF0XCIgfHwgYmFyVHlwZSA9PT0gXCJiYXJfcmlnaHRfcmVwZWF0XCIpO1xuXHRcdFx0XHRcdGlmIChlbmRSZXBlYXQpIHtcblx0XHRcdFx0XHRcdGlmIChlbmRpbmdSZXBlYXRFbGVtID09PSAtMSlcblx0XHRcdFx0XHRcdFx0ZW5kaW5nUmVwZWF0RWxlbSA9IGVsZW07XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBlbDIgPSBzdGFydGluZ1JlcGVhdEVsZW07IGVsMiA8IGVuZGluZ1JlcGVhdEVsZW07IGVsMisrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlbGVtZW50MiA9IGVsZW1lbnRzW2VsMl0uZWxlbTtcblx0XHRcdFx0XHRcdFx0cmV0ID0gdGhpcy5hZGRFbGVtZW50VG9FdmVudHMoZXZlbnRIYXNoLCBlbGVtZW50Miwgdm9pY2VUaW1lTWlsbGlzZWNvbmRzLCBlbGVtZW50c1tlbDJdLnRvcCwgZWxlbWVudHNbZWwyXS5oZWlnaHQsIGVsZW1lbnRzW2VsMl0ubGluZSwgZWxlbWVudHNbZWwyXS5tZWFzdXJlTnVtYmVyLCB0aW1lRGl2aWRlciwgaXNUaWVkU3RhdGUsIG5leHRJc0Jhcik7XG5cdFx0XHRcdFx0XHRcdGlzVGllZFN0YXRlID0gcmV0LmlzVGllZFN0YXRlO1xuXHRcdFx0XHRcdFx0XHRuZXh0SXNCYXIgPSByZXQubmV4dElzQmFyO1xuXHRcdFx0XHRcdFx0XHR2b2ljZVRpbWUgKz0gcmV0LmR1cmF0aW9uO1xuXHRcdFx0XHRcdFx0XHR2b2ljZVRpbWVNaWxsaXNlY29uZHMgPSBNYXRoLnJvdW5kKHZvaWNlVGltZSAqIDEwMDApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bmV4dElzQmFyID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGVuZGluZ1JlcGVhdEVsZW0gPSAtMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHN0YXJ0RW5kaW5nKVxuXHRcdFx0XHRcdFx0ZW5kaW5nUmVwZWF0RWxlbSA9IGVsZW07XG5cdFx0XHRcdFx0aWYgKHN0YXJ0UmVwZWF0KVxuXHRcdFx0XHRcdFx0c3RhcnRpbmdSZXBlYXRFbGVtID0gZWxlbTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBub3cgd2UgaGF2ZSBhbGwgdGhlIGV2ZW50cywgYnV0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2b2ljZXMgdGhlbiB0aGVyZSBtYXkgYmUgZXZlbnRzIG91dCBvZiBvcmRlciBvciBkdXBsaWNhdGVkLCBzbyBub3JtYWxpemUgaXQuXG5cdFx0dGltaW5nRXZlbnRzID0gbWFrZVNvcnRlZEFycmF5KGV2ZW50SGFzaCk7XG5cdFx0YWRkVmVydGljYWxJbmZvKHRpbWluZ0V2ZW50cyk7XG5cdFx0dGltaW5nRXZlbnRzLnB1c2goeyB0eXBlOiBcImVuZFwiLCBtaWxsaXNlY29uZHM6IHZvaWNlVGltZU1pbGxpc2Vjb25kcyB9KTtcblx0XHR0aGlzLmFkZFVzZWZ1bENhbGxiYWNrSW5mbyh0aW1pbmdFdmVudHMsIGJwbSk7XG5cdFx0cmV0dXJuIHRpbWluZ0V2ZW50cztcblx0fTtcblxuXHR0aGlzLmFkZFVzZWZ1bENhbGxiYWNrSW5mbyA9IGZ1bmN0aW9uKHRpbWluZ0V2ZW50cywgYnBtKSB7XG5cdFx0dmFyIG1pbGxpc2Vjb25kc1Blck1lYXN1cmUgPSB0aGlzLm1pbGxpc2Vjb25kc1Blck1lYXN1cmUoYnBtKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRpbWluZ0V2ZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGV2ID0gdGltaW5nRXZlbnRzW2ldO1xuXHRcdFx0ZXYubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSA9IG1pbGxpc2Vjb25kc1Blck1lYXN1cmU7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGdldFZlcnRpY2FsKGdyb3VwKSB7XG5cdFx0dmFyIHZvaWNlcyA9IGdyb3VwLnZvaWNlcztcblx0XHR2YXIgZmlyc3RTdGFmZiA9IGdyb3VwLnN0YWZmc1swXTtcblx0XHR2YXIgbWlkZGxlQyA9IGZpcnN0U3RhZmYuYWJzb2x1dGVZO1xuXHRcdHZhciB0b3AgPSBtaWRkbGVDIC0gZmlyc3RTdGFmZi50b3Aqc3BhY2luZy5TVEVQO1xuXHRcdHZhciBsYXN0U3RhZmYgPSBncm91cC5zdGFmZnNbZ3JvdXAuc3RhZmZzLmxlbmd0aC0xXTtcblx0XHRtaWRkbGVDID0gbGFzdFN0YWZmLmFic29sdXRlWTtcblx0XHR2YXIgYm90dG9tID0gbWlkZGxlQyAtIGxhc3RTdGFmZi5ib3R0b20qc3BhY2luZy5TVEVQO1xuXHRcdHZhciBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG5cdFx0cmV0dXJuIHsgdG9wOiB0b3AsIGhlaWdodDogaGVpZ2h0IH07XG5cdH1cblxuXHR0aGlzLmdldEJwbSA9IGZ1bmN0aW9uKHRlbXBvKSB7XG5cdFx0dmFyIGJwbTtcblx0XHRpZiAodGVtcG8pIHtcblx0XHRcdGJwbSA9IHRlbXBvLmJwbTtcblx0XHRcdHZhciBiZWF0TGVuZ3RoID0gdGhpcy5nZXRCZWF0TGVuZ3RoKCk7XG5cdFx0XHR2YXIgc3RhdGVkQmVhdExlbmd0aCA9IHRlbXBvLmR1cmF0aW9uICYmIHRlbXBvLmR1cmF0aW9uLmxlbmd0aCA+IDAgPyB0ZW1wby5kdXJhdGlvblswXSA6IGJlYXRMZW5ndGg7XG5cdFx0XHRicG0gPSBicG0gKiBzdGF0ZWRCZWF0TGVuZ3RoIC8gYmVhdExlbmd0aDtcblx0XHR9XG5cdFx0aWYgKCFicG0pIHtcblx0XHRcdGJwbSA9IDE4MDtcblx0XHRcdC8vIENvbXBlbnNhdGUgZm9yIGNvbXBvdW5kIG1ldGVyLCB3aGVyZSB0aGUgYmVhdCBpc24ndCBhIGJlYXQuXG5cdFx0XHR2YXIgbWV0ZXIgPSB0aGlzLmdldE1ldGVyRnJhY3Rpb24oKTtcblx0XHRcdGlmIChtZXRlciAmJiBtZXRlci5kZW4gPT09IDgpIHtcblx0XHRcdFx0YnBtID0gMTIwO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYnBtO1xuXHR9O1xuXG5cdHRoaXMuc2V0VGltaW5nID0gZnVuY3Rpb24gKGJwbSwgbWVhc3VyZXNPZkRlbGF5KSB7XG5cdFx0aWYgKCFicG0pIHtcblx0XHRcdHZhciB0ZW1wbyA9IHRoaXMubWV0YVRleHQgPyB0aGlzLm1ldGFUZXh0LnRlbXBvIDogbnVsbDtcblx0XHRcdGJwbSA9IHRoaXMuZ2V0QnBtKHRlbXBvKTtcblx0XHR9XG5cblx0XHR2YXIgYmVhdExlbmd0aCA9IHRoaXMuZ2V0QmVhdExlbmd0aCgpO1xuXHRcdHZhciBiZWF0c1BlclNlY29uZCA9IGJwbSAvIDYwO1xuXG5cdFx0dmFyIG1lYXN1cmVMZW5ndGggPSB0aGlzLmdldEJhckxlbmd0aCgpO1xuXG5cdFx0dmFyIHN0YXJ0aW5nRGVsYXkgPSBtZWFzdXJlTGVuZ3RoIC8gYmVhdExlbmd0aCAqIG1lYXN1cmVzT2ZEZWxheSAvIGJlYXRzUGVyU2Vjb25kO1xuXHRcdGlmIChzdGFydGluZ0RlbGF5KVxuXHRcdFx0c3RhcnRpbmdEZWxheSAtPSB0aGlzLmdldFBpY2t1cExlbmd0aCgpIC8gYmVhdExlbmd0aCAvIGJlYXRzUGVyU2Vjb25kO1xuXHRcdHZhciB0aW1lRGl2aWRlciA9IGJlYXRMZW5ndGggKiBiZWF0c1BlclNlY29uZDtcblxuXHRcdHRoaXMubm90ZVRpbWluZ3MgPSB0aGlzLnNldHVwRXZlbnRzKHN0YXJ0aW5nRGVsYXksIHRpbWVEaXZpZGVyLCBicG0pO1xuXHR9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUdW5lO1xuIiwiLy8gICAgYWJjX3BhcnNlLmpzOiBwYXJzZXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIEFCQyBNdXNpYyBOb3RhdGlvbiBpbnRvIGEgdXNhYmxlIGludGVybmFsIHN0cnVjdHVyZS5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IFBhdWwgUm9zZW4gKHBhdWwgYXQgcGF1bHJvc2VuIGRvdCBuZXQpXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8qZ2xvYmFsIHdpbmRvdyAqL1xuXG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuL2FiY19jb21tb24nKTtcbnZhciBwYXJzZURpcmVjdGl2ZSA9IHJlcXVpcmUoJy4vYWJjX3BhcnNlX2RpcmVjdGl2ZScpO1xudmFyIFBhcnNlSGVhZGVyID0gcmVxdWlyZSgnLi9hYmNfcGFyc2VfaGVhZGVyJyk7XG52YXIgcGFyc2VLZXlWb2ljZSA9IHJlcXVpcmUoJy4vYWJjX3BhcnNlX2tleV92b2ljZScpO1xudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4vYWJjX3Rva2VuaXplcicpO1xudmFyIHRyYW5zcG9zZSA9IHJlcXVpcmUoJy4vYWJjX3RyYW5zcG9zZScpO1xudmFyIHdyYXAgPSByZXF1aXJlKCcuL3dyYXBfbGluZXMnKTtcblxudmFyIFR1bmUgPSByZXF1aXJlKCcuLi9kYXRhL2FiY190dW5lJyk7XG5cbnZhciBQYXJzZSA9IGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0dmFyIHR1bmUgPSBuZXcgVHVuZSgpO1xuXHR2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcigpO1xuXG5cdHRoaXMuZ2V0VHVuZSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRmb3JtYXR0aW5nOiB0dW5lLmZvcm1hdHRpbmcsXG5cdFx0XHRsaW5lczogdHVuZS5saW5lcyxcblx0XHRcdG1lZGlhOiB0dW5lLm1lZGlhLFxuXHRcdFx0bWV0YVRleHQ6IHR1bmUubWV0YVRleHQsXG5cdFx0XHR2ZXJzaW9uOiB0dW5lLnZlcnNpb24sXG5cblx0XHRcdGFkZEVsZW1lbnRUb0V2ZW50czogdHVuZS5hZGRFbGVtZW50VG9FdmVudHMsXG5cdFx0XHRhZGRVc2VmdWxDYWxsYmFja0luZm86IHR1bmUuYWRkVXNlZnVsQ2FsbGJhY2tJbmZvLFxuXHRcdFx0Z2V0QmFyTGVuZ3RoOiB0dW5lLmdldEJhckxlbmd0aCxcblx0XHRcdGdldEJlYXRMZW5ndGg6IHR1bmUuZ2V0QmVhdExlbmd0aCxcblx0XHRcdGdldEJlYXRzUGVyTWVhc3VyZTogdHVuZS5nZXRCZWF0c1Blck1lYXN1cmUsXG5cdFx0XHRnZXRCcG06IHR1bmUuZ2V0QnBtLFxuXHRcdFx0Z2V0TWV0ZXI6IHR1bmUuZ2V0TWV0ZXIsXG5cdFx0XHRnZXRNZXRlckZyYWN0aW9uOiB0dW5lLmdldE1ldGVyRnJhY3Rpb24sXG5cdFx0XHRnZXRQaWNrdXBMZW5ndGg6IHR1bmUuZ2V0UGlja3VwTGVuZ3RoLFxuXHRcdFx0Z2V0S2V5U2lnbmF0dXJlOiB0dW5lLmdldEtleVNpZ25hdHVyZSxcblx0XHRcdG1ha2VWb2ljZXNBcnJheTogdHVuZS5tYWtlVm9pY2VzQXJyYXksXG5cdFx0XHRtaWxsaXNlY29uZHNQZXJNZWFzdXJlOiB0dW5lLm1pbGxpc2Vjb25kc1Blck1lYXN1cmUsXG5cdFx0XHRzZXR1cEV2ZW50czogdHVuZS5zZXR1cEV2ZW50cyxcblx0XHRcdHNldFRpbWluZzogdHVuZS5zZXRUaW1pbmdcblx0XHR9O1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGFkZFBvc2l0aW9uaW5nKGVsLCB0eXBlLCB2YWx1ZSkge1xuXHRcdGlmICghZWwucG9zaXRpb25pbmcpIGVsLnBvc2l0aW9uaW5nID0ge307XG5cdFx0ZWwucG9zaXRpb25pbmdbdHlwZV0gPSB2YWx1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZEZvbnQoZWwsIHR5cGUsIHZhbHVlKSB7XG5cdFx0aWYgKCFlbC5mb250cykgZWwuZm9udHMgPSB7fTtcblx0XHRlbC5mb250c1t0eXBlXSA9IHZhbHVlO1xuXHR9XG5cblx0dmFyIG11bHRpbGluZVZhcnMgPSB7XG5cdFx0cmVzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Zm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykge1xuXHRcdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgdHlwZW9mIHRoaXNbcHJvcGVydHldICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRkZWxldGUgdGhpc1twcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuaUNoYXIgPSAwO1xuXHRcdFx0dGhpcy5rZXkgPSB7YWNjaWRlbnRhbHM6IFtdLCByb290OiAnbm9uZScsIGFjYzogJycsIG1vZGU6ICcnIH07XG5cdFx0XHR0aGlzLm1ldGVyID0gbnVsbDsgLy8gaWYgbm8gbWV0ZXIgaXMgc3BlY2lmaWVkLCBmcmVlIG1ldGVyIGlzIGFzc3VtZWRcblx0XHRcdHRoaXMub3JpZ01ldGVyID0gbnVsbDtcdC8vIHRoaXMgaXMgZm9yIG5ldyB2b2ljZXMgdGhhdCBhcmUgY3JlYXRlZCBhZnRlciB3ZSBzZXQgdGhlIG1ldGVyLlxuXHRcdFx0dGhpcy5oYXNNYWluVGl0bGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdHRoaXMuY2xlZiA9IHsgdHlwZTogJ3RyZWJsZScsIHZlcnRpY2FsUG9zOiAwIH07XG5cdFx0XHR0aGlzLm5leHRfbm90ZV9kdXJhdGlvbiA9IDA7XG5cdFx0XHR0aGlzLnN0YXJ0X25ld19saW5lID0gdHJ1ZTtcblx0XHRcdHRoaXMuaXNfaW5faGVhZGVyID0gdHJ1ZTtcblx0XHRcdHRoaXMuaXNfaW5faGlzdG9yeSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5wYXJ0Rm9yTmV4dExpbmUgPSB7fTtcblx0XHRcdHRoaXMuaGF2ZW50X3NldF9sZW5ndGggPSB0cnVlO1xuXHRcdFx0dGhpcy52b2ljZXMgPSB7fTtcblx0XHRcdHRoaXMuc3RhdmVzID0gW107XG5cdFx0XHR0aGlzLm1hY3JvcyA9IHt9O1xuXHRcdFx0dGhpcy5jdXJyQmFyTnVtYmVyID0gMTtcblx0XHRcdHRoaXMuYmFyQ291bnRlciA9IHt9O1xuXHRcdFx0dGhpcy5pblRleHRCbG9jayA9IGZhbHNlO1xuXHRcdFx0dGhpcy5pblBzQmxvY2sgPSBmYWxzZTtcblx0XHRcdHRoaXMuaWdub3JlZERlY29yYXRpb25zID0gW107XG5cdFx0XHR0aGlzLnRleHRCbG9jayA9IFwiXCI7XG5cdFx0XHR0aGlzLnNjb3JlX2lzX3ByZXNlbnQgPSBmYWxzZTtcdC8vIENhbid0IGhhdmUgb3JpZ2luYWwgVjogbGluZXMgd2hlbiB0aGVyZSBpcyB0aGUgc2NvcmUgZGlyZWN0aXZlXG5cdFx0XHR0aGlzLmluRW5kaW5nID0gZmFsc2U7XG5cdFx0XHR0aGlzLmluVGllID0gW107XG5cdFx0XHR0aGlzLmluVGllQ2hvcmQgPSB7fTtcblx0XHRcdHRoaXMudm9jYWxQb3NpdGlvbiA9IFwiYXV0b1wiO1xuXHRcdFx0dGhpcy5keW5hbWljUG9zaXRpb24gPSBcImF1dG9cIjtcblx0XHRcdHRoaXMuY2hvcmRQb3NpdGlvbiA9IFwiYXV0b1wiO1xuXHRcdFx0dGhpcy5vcm5hbWVudFBvc2l0aW9uID0gXCJhdXRvXCI7XG5cdFx0XHR0aGlzLnZvbHVtZVBvc2l0aW9uID0gXCJhdXRvXCI7XG5cdFx0XHR0aGlzLm9wZW5TbHVycyA9IFtdO1xuXHRcdFx0dGhpcy5mcmVlZ2Nob3JkID0gZmFsc2U7XG5cdFx0fSxcblx0XHRkaWZmZXJlbnRGb250OiBmdW5jdGlvbih0eXBlLCBkZWZhdWx0Rm9udHMpIHtcblx0XHRcdGlmICh0aGlzW3R5cGVdLmRlY29yYXRpb24gIT09IGRlZmF1bHRGb250c1t0eXBlXS5kZWNvcmF0aW9uKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmICh0aGlzW3R5cGVdLmZhY2UgIT09IGRlZmF1bHRGb250c1t0eXBlXS5mYWNlKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmICh0aGlzW3R5cGVdLnNpemUgIT09IGRlZmF1bHRGb250c1t0eXBlXS5zaXplKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmICh0aGlzW3R5cGVdLnN0eWxlICE9PSBkZWZhdWx0Rm9udHNbdHlwZV0uc3R5bGUpIHJldHVybiB0cnVlO1xuXHRcdFx0aWYgKHRoaXNbdHlwZV0ud2VpZ2h0ICE9PSBkZWZhdWx0Rm9udHNbdHlwZV0ud2VpZ2h0KSByZXR1cm4gdHJ1ZTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFkZEZvcm1hdHRpbmdPcHRpb25zOiBmdW5jdGlvbihlbCwgZGVmYXVsdEZvbnRzLCBlbFR5cGUpIHtcblx0XHRcdGlmIChlbFR5cGUgPT09ICdub3RlJykge1xuXHRcdFx0XHRpZiAodGhpcy52b2NhbFBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAndm9jYWxQb3NpdGlvbicsIHRoaXMudm9jYWxQb3NpdGlvbik7XG5cdFx0XHRcdGlmICh0aGlzLmR5bmFtaWNQb3NpdGlvbiAhPT0gJ2F1dG8nKSBhZGRQb3NpdGlvbmluZyhlbCwgJ2R5bmFtaWNQb3NpdGlvbicsIHRoaXMuZHluYW1pY1Bvc2l0aW9uKTtcblx0XHRcdFx0aWYgKHRoaXMuY2hvcmRQb3NpdGlvbiAhPT0gJ2F1dG8nKSBhZGRQb3NpdGlvbmluZyhlbCwgJ2Nob3JkUG9zaXRpb24nLCB0aGlzLmNob3JkUG9zaXRpb24pO1xuXHRcdFx0XHRpZiAodGhpcy5vcm5hbWVudFBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAnb3JuYW1lbnRQb3NpdGlvbicsIHRoaXMub3JuYW1lbnRQb3NpdGlvbik7XG5cdFx0XHRcdGlmICh0aGlzLnZvbHVtZVBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAndm9sdW1lUG9zaXRpb24nLCB0aGlzLnZvbHVtZVBvc2l0aW9uKTtcblx0XHRcdFx0aWYgKHRoaXMuZGlmZmVyZW50Rm9udChcImFubm90YXRpb25mb250XCIsIGRlZmF1bHRGb250cykpIGFkZEZvbnQoZWwsICdhbm5vdGF0aW9uZm9udCcsIHRoaXMuYW5ub3RhdGlvbmZvbnQpO1xuXHRcdFx0XHRpZiAodGhpcy5kaWZmZXJlbnRGb250KFwiZ2Nob3JkZm9udFwiLCBkZWZhdWx0Rm9udHMpKSBhZGRGb250KGVsLCAnZ2Nob3JkZm9udCcsIHRoaXMuZ2Nob3JkZm9udCk7XG5cdFx0XHRcdGlmICh0aGlzLmRpZmZlcmVudEZvbnQoXCJ2b2NhbGZvbnRcIiwgZGVmYXVsdEZvbnRzKSkgYWRkRm9udChlbCwgJ3ZvY2FsZm9udCcsIHRoaXMudm9jYWxmb250KTtcblx0XHRcdFx0aWYgKHRoaXMuZGlmZmVyZW50Rm9udChcInRyaXBsZXRmb250XCIsIGRlZmF1bHRGb250cykpIGFkZEZvbnQoZWwsICd0cmlwbGV0Zm9udCcsIHRoaXMudHJpcGxldGZvbnQpO1xuXHRcdFx0fSBlbHNlIGlmIChlbFR5cGUgPT09ICdiYXInKSB7XG5cdFx0XHRcdGlmICh0aGlzLmR5bmFtaWNQb3NpdGlvbiAhPT0gJ2F1dG8nKSBhZGRQb3NpdGlvbmluZyhlbCwgJ2R5bmFtaWNQb3NpdGlvbicsIHRoaXMuZHluYW1pY1Bvc2l0aW9uKTtcblx0XHRcdFx0aWYgKHRoaXMuY2hvcmRQb3NpdGlvbiAhPT0gJ2F1dG8nKSBhZGRQb3NpdGlvbmluZyhlbCwgJ2Nob3JkUG9zaXRpb24nLCB0aGlzLmNob3JkUG9zaXRpb24pO1xuXHRcdFx0XHRpZiAodGhpcy5vcm5hbWVudFBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAnb3JuYW1lbnRQb3NpdGlvbicsIHRoaXMub3JuYW1lbnRQb3NpdGlvbik7XG5cdFx0XHRcdGlmICh0aGlzLnZvbHVtZVBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAndm9sdW1lUG9zaXRpb24nLCB0aGlzLnZvbHVtZVBvc2l0aW9uKTtcblx0XHRcdFx0aWYgKHRoaXMuZGlmZmVyZW50Rm9udChcIm1lYXN1cmVmb250XCIsIGRlZmF1bHRGb250cykpIGFkZEZvbnQoZWwsICdtZWFzdXJlZm9udCcsIHRoaXMubWVhc3VyZWZvbnQpO1xuXHRcdFx0XHRpZiAodGhpcy5kaWZmZXJlbnRGb250KFwicmVwZWF0Zm9udFwiLCBkZWZhdWx0Rm9udHMpKSBhZGRGb250KGVsLCAncmVwZWF0Zm9udCcsIHRoaXMucmVwZWF0Zm9udCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGRXYXJuaW5nID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0aWYgKCFtdWx0aWxpbmVWYXJzLndhcm5pbmdzKVxuXHRcdFx0bXVsdGlsaW5lVmFycy53YXJuaW5ncyA9IFtdO1xuXHRcdG11bHRpbGluZVZhcnMud2FybmluZ3MucHVzaChzdHIpO1xuXHR9O1xuXG5cdHZhciBhZGRXYXJuaW5nT2JqZWN0ID0gZnVuY3Rpb24od2FybmluZ09iamVjdCkge1xuXHRcdGlmICghbXVsdGlsaW5lVmFycy53YXJuaW5nT2JqZWN0cylcblx0XHRcdG11bHRpbGluZVZhcnMud2FybmluZ09iamVjdHMgPSBbXTtcblx0XHRtdWx0aWxpbmVWYXJzLndhcm5pbmdPYmplY3RzLnB1c2god2FybmluZ09iamVjdCk7XG5cdH07XG5cblx0dmFyIGVuY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdHZhciByZXQgPSBwYXJzZUNvbW1vbi5nc3ViKHN0ciwgJ1xceDEyJywgJyAnKTtcblx0XHRyZXQgPSBwYXJzZUNvbW1vbi5nc3ViKHJldCwgJyYnLCAnJmFtcDsnKTtcblx0XHRyZXQgPSBwYXJzZUNvbW1vbi5nc3ViKHJldCwgJzwnLCAnJmx0OycpO1xuXHRcdHJldHVybiBwYXJzZUNvbW1vbi5nc3ViKHJldCwgJz4nLCAnJmd0OycpO1xuXHR9O1xuXG5cdHZhciB3YXJuID0gZnVuY3Rpb24oc3RyLCBsaW5lLCBjb2xfbnVtKSB7XG5cdFx0aWYgKCFsaW5lKSBsaW5lID0gXCIgXCI7XG5cdFx0dmFyIGJhZF9jaGFyID0gbGluZS5jaGFyQXQoY29sX251bSk7XG5cdFx0aWYgKGJhZF9jaGFyID09PSAnICcpXG5cdFx0XHRiYWRfY2hhciA9IFwiU1BBQ0VcIjtcblx0XHR2YXIgY2xlYW5fbGluZSA9IGVuY29kZShsaW5lLnN1YnN0cmluZygwLCBjb2xfbnVtKSkgK1xuXHRcdFx0JzxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXNpemU6MS4zZW07Zm9udC13ZWlnaHQ6Ym9sZDtcIj4nICsgYmFkX2NoYXIgKyAnPC9zcGFuPicgK1xuXHRcdFx0ZW5jb2RlKGxpbmUuc3Vic3RyaW5nKGNvbF9udW0rMSkpO1xuXHRcdGFkZFdhcm5pbmcoXCJNdXNpYyBMaW5lOlwiICsgdHVuZS5nZXROdW1MaW5lcygpICsgXCI6XCIgKyAoY29sX251bSsxKSArICc6ICcgKyBzdHIgKyBcIjogIFwiICsgY2xlYW5fbGluZSk7XG5cdFx0YWRkV2FybmluZ09iamVjdCh7bWVzc2FnZTpzdHIsIGxpbmU6bGluZSwgc3RhcnRDaGFyOiBtdWx0aWxpbmVWYXJzLmlDaGFyICsgY29sX251bSwgY29sdW1uOiBjb2xfbnVtfSk7XG5cdH07XG5cdHZhciBoZWFkZXIgPSBuZXcgUGFyc2VIZWFkZXIodG9rZW5pemVyLCB3YXJuLCBtdWx0aWxpbmVWYXJzLCB0dW5lKTtcblxuXHR0aGlzLmdldFdhcm5pbmdzID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG11bHRpbGluZVZhcnMud2FybmluZ3M7XG5cdH07XG5cdHRoaXMuZ2V0V2FybmluZ09iamVjdHMgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gbXVsdGlsaW5lVmFycy53YXJuaW5nT2JqZWN0cztcblx0fTtcblxuXHR2YXIgbGV0dGVyX3RvX2Nob3JkID0gZnVuY3Rpb24obGluZSwgaSlcblx0e1xuXHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJ1wiJylcblx0XHR7XG5cdFx0XHR2YXIgY2hvcmQgPSB0b2tlbml6ZXIuZ2V0QnJhY2tldHRlZFN1YnN0cmluZyhsaW5lLCBpLCA1KTtcblx0XHRcdGlmICghY2hvcmRbMl0pXG5cdFx0XHRcdHdhcm4oXCJNaXNzaW5nIHRoZSBjbG9zaW5nIHF1b3RlIHdoaWxlIHBhcnNpbmcgdGhlIGNob3JkIHN5bWJvbFwiLCBsaW5lICwgaSk7XG5cdFx0XHQvLyBJZiBpdCBzdGFydHMgd2l0aCBeLCB0aGVuIHRoZSBjaG9yZCBhcHBlYXJzIGFib3ZlLlxuXHRcdFx0Ly8gSWYgaXQgc3RhcnRzIHdpdGggXyB0aGVuIHRoZSBjaG9yZCBhcHBlYXJzIGJlbG93LlxuXHRcdFx0Ly8gKG5vdGUgdGhhdCB0aGUgMi4wIGRyYWZ0IHN0YW5kYXJkIGRlZmluZXMgdGhlbSBhcyBub3QgY2hvcmRzLCBidXQgYW5ub3RhdGlvbnMgYW5kIGFsc28gZGVmaW5lcyBALilcblx0XHRcdGlmIChjaG9yZFswXSA+IDAgJiYgY2hvcmRbMV0ubGVuZ3RoID4gMCAmJiBjaG9yZFsxXS5jaGFyQXQoMCkgPT09ICdeJykge1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZygxKTtcblx0XHRcdFx0Y2hvcmRbMl0gPSAnYWJvdmUnO1xuXHRcdFx0fSBlbHNlIGlmIChjaG9yZFswXSA+IDAgJiYgY2hvcmRbMV0ubGVuZ3RoID4gMCAmJiBjaG9yZFsxXS5jaGFyQXQoMCkgPT09ICdfJykge1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZygxKTtcblx0XHRcdFx0Y2hvcmRbMl0gPSAnYmVsb3cnO1xuXHRcdFx0fSBlbHNlIGlmIChjaG9yZFswXSA+IDAgJiYgY2hvcmRbMV0ubGVuZ3RoID4gMCAmJiBjaG9yZFsxXS5jaGFyQXQoMCkgPT09ICc8Jykge1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZygxKTtcblx0XHRcdFx0Y2hvcmRbMl0gPSAnbGVmdCc7XG5cdFx0XHR9IGVsc2UgaWYgKGNob3JkWzBdID4gMCAmJiBjaG9yZFsxXS5sZW5ndGggPiAwICYmIGNob3JkWzFdLmNoYXJBdCgwKSA9PT0gJz4nKSB7XG5cdFx0XHRcdGNob3JkWzFdID0gY2hvcmRbMV0uc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRjaG9yZFsyXSA9ICdyaWdodCc7XG5cdFx0XHR9IGVsc2UgaWYgKGNob3JkWzBdID4gMCAmJiBjaG9yZFsxXS5sZW5ndGggPiAwICYmIGNob3JkWzFdLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG5cdFx0XHRcdC8vIEAtMTUsNS43XG5cdFx0XHRcdGNob3JkWzFdID0gY2hvcmRbMV0uc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHR2YXIgeCA9IHRva2VuaXplci5nZXRGbG9hdChjaG9yZFsxXSk7XG5cdFx0XHRcdGlmICh4LmRpZ2l0cyA9PT0gMClcblx0XHRcdFx0XHR3YXJuKFwiTWlzc2luZyBmaXJzdCBwb3NpdGlvbiBpbiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYW5ub3RhdGlvbi5cIiwgbGluZSAsIGkpO1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZyh4LmRpZ2l0cyk7XG5cdFx0XHRcdGlmIChjaG9yZFsxXVswXSAhPT0gJywnKVxuXHRcdFx0XHRcdHdhcm4oXCJNaXNzaW5nIGNvbW1hIGFic29sdXRlbHkgcG9zaXRpb25lZCBhbm5vdGF0aW9uLlwiLCBsaW5lICwgaSk7XG5cdFx0XHRcdGNob3JkWzFdID0gY2hvcmRbMV0uc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHR2YXIgeSA9IHRva2VuaXplci5nZXRGbG9hdChjaG9yZFsxXSk7XG5cdFx0XHRcdGlmICh5LmRpZ2l0cyA9PT0gMClcblx0XHRcdFx0XHR3YXJuKFwiTWlzc2luZyBzZWNvbmQgcG9zaXRpb24gaW4gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGFubm90YXRpb24uXCIsIGxpbmUgLCBpKTtcblx0XHRcdFx0Y2hvcmRbMV0gPSBjaG9yZFsxXS5zdWJzdHJpbmcoeS5kaWdpdHMpO1xuXHRcdFx0XHR2YXIgd3MgPSB0b2tlbml6ZXIuc2tpcFdoaXRlU3BhY2UoY2hvcmRbMV0pO1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZyh3cyk7XG5cdFx0XHRcdGNob3JkWzJdID0gbnVsbDtcblx0XHRcdFx0Y2hvcmRbM10gPSB7IHg6IHgudmFsdWUsIHk6IHkudmFsdWUgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmZyZWVnY2hvcmQgIT09IHRydWUpIHtcblx0XHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnJlcGxhY2UoLyhbQUJDREVGRzAtOV0pYi9nLCBcIiQx4pmtXCIpO1xuXHRcdFx0XHRcdGNob3JkWzFdID0gY2hvcmRbMV0ucmVwbGFjZSgvKFtBQkNERUZHMC05XSkjL2csIFwiJDHima9cIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hvcmRbMl0gPSAnZGVmYXVsdCc7XG5cdFx0XHRcdGNob3JkWzFdID0gdHJhbnNwb3NlLmNob3JkTmFtZShtdWx0aWxpbmVWYXJzLCBjaG9yZFsxXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2hvcmQ7XG5cdFx0fVxuXHRcdHJldHVybiBbMCwgXCJcIl07XG5cdH07XG5cblx0dmFyIGxlZ2FsQWNjZW50cyA9IFsgXCJ0cmlsbFwiLCBcImxvd2VybW9yZGVudFwiLCBcInVwcGVybW9yZGVudFwiLCBcIm1vcmRlbnRcIiwgXCJwcmFsbHRyaWxsZXJcIiwgXCJhY2NlbnRcIixcblx0XHRcImZlcm1hdGFcIiwgXCJpbnZlcnRlZGZlcm1hdGFcIiwgXCJ0ZW51dG9cIiwgXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCIrXCIsIFwid2VkZ2VcIixcblx0XHRcIm9wZW5cIiwgXCJ0aHVtYlwiLCBcInNuYXBcIiwgXCJ0dXJuXCIsIFwicm9sbFwiLCBcImJyZWF0aFwiLCBcInNob3J0cGhyYXNlXCIsIFwibWVkaXVtcGhyYXNlXCIsIFwibG9uZ3BocmFzZVwiLFxuXHRcdFwic2Vnbm9cIiwgXCJjb2RhXCIsIFwiRC5TLlwiLCBcIkQuQy5cIiwgXCJmaW5lXCIsXG5cdFx0XCJzbGlkZVwiLCBcIl5cIiwgXCJtYXJjYXRvXCIsXG5cdFx0XCJ1cGJvd1wiLCBcImRvd25ib3dcIiwgXCIvXCIsIFwiLy9cIiwgXCIvLy9cIiwgXCIvLy8vXCIsIFwidHJlbTFcIiwgXCJ0cmVtMlwiLCBcInRyZW0zXCIsIFwidHJlbTRcIixcblx0XHRcInR1cm54XCIsIFwiaW52ZXJ0ZWR0dXJuXCIsIFwiaW52ZXJ0ZWR0dXJueFwiLCBcInRyaWxsKFwiLCBcInRyaWxsKVwiLCBcImFycGVnZ2lvXCIsIFwieHN0ZW1cIiwgXCJtYXJrXCIsIFwidW1hcmNhdG9cIixcblx0XHRcInN0eWxlPW5vcm1hbFwiLCBcInN0eWxlPWhhcm1vbmljXCIsIFwic3R5bGU9cmh5dGhtXCIsIFwic3R5bGU9eFwiXG5cdF07XG5cdHZhciB2b2x1bWVEZWNvcmF0aW9ucyA9IFsgXCJwXCIsIFwicHBcIiwgXCJmXCIsIFwiZmZcIiwgXCJtZlwiLCBcIm1wXCIsIFwicHBwXCIsIFwicHBwcFwiLCAgXCJmZmZcIiwgXCJmZmZmXCIsIFwic2Z6XCIgXTtcblx0dmFyIGR5bmFtaWNEZWNvcmF0aW9ucyA9IFtcImNyZXNjZW5kbyhcIiwgXCJjcmVzY2VuZG8pXCIsIFwiZGltaW51ZW5kbyhcIiwgXCJkaW1pbnVlbmRvKVwiXTtcblxuXHR2YXIgYWNjZW50UHNldWRvbnltcyA9IFsgW1wiPFwiLCBcImFjY2VudFwiXSwgW1wiPlwiLCBcImFjY2VudFwiXSwgW1widHJcIiwgXCJ0cmlsbFwiXSxcblx0XHRbXCJwbHVzXCIsIFwiK1wiXSwgWyBcImVtcGhhc2lzXCIsIFwiYWNjZW50XCJdLFxuXHRcdFsgXCJeXCIsIFwidW1hcmNhdG9cIiBdLCBbIFwibWFyY2F0b1wiLCBcInVtYXJjYXRvXCIgXSBdO1xuXHR2YXIgYWNjZW50RHluYW1pY1BzZXVkb255bXMgPSBbIFtcIjwoXCIsIFwiY3Jlc2NlbmRvKFwiXSwgW1wiPClcIiwgXCJjcmVzY2VuZG8pXCJdLFxuXHRcdFtcIj4oXCIsIFwiZGltaW51ZW5kbyhcIl0sIFtcIj4pXCIsIFwiZGltaW51ZW5kbylcIl0gXTtcblx0dmFyIGxldHRlcl90b19hY2NlbnQgPSBmdW5jdGlvbihsaW5lLCBpKVxuXHR7XG5cdFx0dmFyIG1hY3JvID0gbXVsdGlsaW5lVmFycy5tYWNyb3NbbGluZS5jaGFyQXQoaSldO1xuXG5cdFx0aWYgKG1hY3JvICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtYWNyby5jaGFyQXQoMCkgPT09ICchJyB8fCBtYWNyby5jaGFyQXQoMCkgPT09ICcrJylcblx0XHRcdFx0bWFjcm8gPSBtYWNyby5zdWJzdHJpbmcoMSk7XG5cdFx0XHRpZiAobWFjcm8uY2hhckF0KG1hY3JvLmxlbmd0aC0xKSA9PT0gJyEnIHx8IG1hY3JvLmNoYXJBdChtYWNyby5sZW5ndGgtMSkgPT09ICcrJylcblx0XHRcdFx0bWFjcm8gPSBtYWNyby5zdWJzdHJpbmcoMCwgbWFjcm8ubGVuZ3RoLTEpO1xuXHRcdFx0aWYgKHBhcnNlQ29tbW9uLmRldGVjdChsZWdhbEFjY2VudHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdHJldHVybiAobWFjcm8gPT09IGFjYyk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0XHRyZXR1cm4gWyAxLCBtYWNybyBdO1xuXHRcdFx0ZWxzZSBpZiAocGFyc2VDb21tb24uZGV0ZWN0KHZvbHVtZURlY29yYXRpb25zLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0XHRyZXR1cm4gKG1hY3JvID09PSBhY2MpO1xuXHRcdFx0XHR9KSkge1xuXHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy52b2x1bWVQb3NpdGlvbiA9PT0gJ2hpZGRlbicpXG5cdFx0XHRcdFx0bWFjcm8gPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gWzEsIG1hY3JvXTtcblx0XHRcdH0gZWxzZSBpZiAocGFyc2VDb21tb24uZGV0ZWN0KGR5bmFtaWNEZWNvcmF0aW9ucywgZnVuY3Rpb24oYWNjKSB7XG5cdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuZHluYW1pY1Bvc2l0aW9uID09PSAnaGlkZGVuJylcblx0XHRcdFx0XHRcdG1hY3JvID0gXCJcIjtcblx0XHRcdFx0XHRyZXR1cm4gKG1hY3JvID09PSBhY2MpO1xuXHRcdFx0XHR9KSkge1xuXHRcdFx0XHRyZXR1cm4gWzEsIG1hY3JvXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICghcGFyc2VDb21tb24uZGV0ZWN0KG11bHRpbGluZVZhcnMuaWdub3JlZERlY29yYXRpb25zLCBmdW5jdGlvbihkZWMpIHtcblx0XHRcdFx0XHRyZXR1cm4gKG1hY3JvID09PSBkZWMpO1xuXHRcdFx0XHR9KSlcblx0XHRcdFx0XHR3YXJuKFwiVW5rbm93biBtYWNybzogXCIgKyBtYWNybywgbGluZSwgaSk7XG5cdFx0XHRcdHJldHVybiBbMSwgJycgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0c3dpdGNoIChsaW5lLmNoYXJBdChpKSlcblx0XHR7XG5cdFx0XHRjYXNlICcuJzpyZXR1cm4gWzEsICdzdGFjY2F0byddO1xuXHRcdFx0Y2FzZSAndSc6cmV0dXJuIFsxLCAndXBib3cnXTtcblx0XHRcdGNhc2UgJ3YnOnJldHVybiBbMSwgJ2Rvd25ib3cnXTtcblx0XHRcdGNhc2UgJ34nOnJldHVybiBbMSwgJ2lyaXNocm9sbCddO1xuXHRcdFx0Y2FzZSAnISc6XG5cdFx0XHRjYXNlICcrJzpcblx0XHRcdFx0dmFyIHJldCA9IHRva2VuaXplci5nZXRCcmFja2V0dGVkU3Vic3RyaW5nKGxpbmUsIGksIDUpO1xuXHRcdFx0XHQvLyBCZSBzdXJlIHRoYXQgdGhlIGFjY2VudCBpcyByZWNvZ25pemFibGUuXG5cdFx0XHRpZiAocmV0WzFdLmxlbmd0aCA+IDAgJiYgKHJldFsxXS5jaGFyQXQoMCkgPT09ICdeJyB8fCByZXRbMV0uY2hhckF0KDApID09PSdfJykpXG5cdFx0XHRcdFx0cmV0WzFdID0gcmV0WzFdLnN1YnN0cmluZygxKTtcdC8vIFRPRE8tUEVSOiBUaGUgdGVzdCBmaWxlcyBoYXZlIGluZGljYXRvcnMgZm9yY2luZyB0aGUgb3JuYW1lbnQgdG8gdGhlIHRvcCBvciBib3R0b20sIGJ1dCB0aGF0IGlzbid0IGluIHRoZSBzdGFuZGFyZC4gV2UnbGwganVzdCBpZ25vcmUgdGhlbS5cblx0XHRcdFx0aWYgKHBhcnNlQ29tbW9uLmRldGVjdChsZWdhbEFjY2VudHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdHJldHVybiAocmV0WzFdID09PSBhY2MpO1xuXHRcdFx0XHR9KSlcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHRpZiAocGFyc2VDb21tb24uZGV0ZWN0KHZvbHVtZURlY29yYXRpb25zLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0XHRcdHJldHVybiAocmV0WzFdID09PSBhY2MpO1xuXHRcdFx0XHRcdH0pKSB7XG5cdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMudm9sdW1lUG9zaXRpb24gPT09ICdoaWRkZW4nIClcblx0XHRcdFx0XHRcdHJldFsxXSA9ICcnO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocGFyc2VDb21tb24uZGV0ZWN0KGR5bmFtaWNEZWNvcmF0aW9ucywgZnVuY3Rpb24oYWNjKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKHJldFsxXSA9PT0gYWNjKTtcblx0XHRcdFx0XHR9KSkge1xuXHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmR5bmFtaWNQb3NpdGlvbiA9PT0gJ2hpZGRlbicgKVxuXHRcdFx0XHRcdFx0cmV0WzFdID0gJyc7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHBhcnNlQ29tbW9uLmRldGVjdChhY2NlbnRQc2V1ZG9ueW1zLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0XHRpZiAocmV0WzFdID09PSBhY2NbMF0pIHtcblx0XHRcdFx0XHRcdHJldFsxXSA9IGFjY1sxXTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9KSlcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXG5cdFx0XHRcdGlmIChwYXJzZUNvbW1vbi5kZXRlY3QoYWNjZW50RHluYW1pY1BzZXVkb255bXMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdGlmIChyZXRbMV0gPT09IGFjY1swXSkge1xuXHRcdFx0XHRcdFx0cmV0WzFdID0gYWNjWzFdO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0pKSB7XG5cdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuZHluYW1pY1Bvc2l0aW9uID09PSAnaGlkZGVuJyApXG5cdFx0XHRcdFx0XHRyZXRbMV0gPSAnJztcblx0XHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2UgZGlkbid0IGZpbmQgdGhlIGFjY2VudCBpbiB0aGUgbGlzdCwgc28gY29uc3VtZSB0aGUgc3BhY2UsIGJ1dCBkb24ndCByZXR1cm4gYW4gYWNjZW50LlxuXHRcdFx0XHQvLyBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0aGF0ICEgd2FzIHVzZWQgYXMgYSBsaW5lIGJyZWFrLCBzbyBhY2NlcHQgdGhhdC5cblx0XHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJyEnICYmIChyZXRbMF0gPT09IDEgfHwgbGluZS5jaGFyQXQoaStyZXRbMF0tMSkgIT09ICchJykpXG5cdFx0XHRcdFx0cmV0dXJuIFsxLCBudWxsIF07XG5cdFx0XHRcdHdhcm4oXCJVbmtub3duIGRlY29yYXRpb246IFwiICsgcmV0WzFdLCBsaW5lLCBpKTtcblx0XHRcdFx0cmV0WzFdID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdGNhc2UgJ0gnOnJldHVybiBbMSwgJ2Zlcm1hdGEnXTtcblx0XHRcdGNhc2UgJ0onOnJldHVybiBbMSwgJ3NsaWRlJ107XG5cdFx0XHRjYXNlICdMJzpyZXR1cm4gWzEsICdhY2NlbnQnXTtcblx0XHRcdGNhc2UgJ00nOnJldHVybiBbMSwgJ21vcmRlbnQnXTtcblx0XHRcdGNhc2UgJ08nOnJldHVyblsxLCAnY29kYSddO1xuXHRcdFx0Y2FzZSAnUCc6cmV0dXJuWzEsICdwcmFsbHRyaWxsZXInXTtcblx0XHRcdGNhc2UgJ1InOnJldHVybiBbMSwgJ3JvbGwnXTtcblx0XHRcdGNhc2UgJ1MnOnJldHVybiBbMSwgJ3NlZ25vJ107XG5cdFx0XHRjYXNlICdUJzpyZXR1cm4gWzEsICd0cmlsbCddO1xuXHRcdH1cblx0XHRyZXR1cm4gWzAsIDBdO1xuXHR9O1xuXG5cdHZhciBsZXR0ZXJfdG9fc3BhY2VyID0gZnVuY3Rpb24obGluZSwgaSlcblx0e1xuXHRcdHZhciBzdGFydCA9IGk7XG5cdFx0d2hpbGUgKHRva2VuaXplci5pc1doaXRlU3BhY2UobGluZS5jaGFyQXQoaSkpKVxuXHRcdFx0aSsrO1xuXHRcdHJldHVybiBbIGktc3RhcnQgXTtcblx0fTtcblxuXHQvLyByZXR1cm5zIHRoZSBjbGFzcyBvZiB0aGUgYmFyIGxpbmVcblx0Ly8gdGhlIG51bWJlciBvZiB0aGUgcmVwZWF0XG5cdC8vIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdXNlZCB1cFxuXHQvLyBpZiAwIGlzIHJldHVybmVkLCB0aGVuIHRoZSBuZXh0IGVsZW1lbnQgd2FzIG5vdCBhIGJhciBsaW5lXG5cdHZhciBsZXR0ZXJfdG9fYmFyID0gZnVuY3Rpb24obGluZSwgY3Vycl9wb3MpXG5cdHtcblx0XHR2YXIgcmV0ID0gdG9rZW5pemVyLmdldEJhckxpbmUobGluZSwgY3Vycl9wb3MpO1xuXHRcdGlmIChyZXQubGVuID09PSAwKVxuXHRcdFx0cmV0dXJuIFswLFwiXCJdO1xuXHRcdGlmIChyZXQud2Fybikge1xuXHRcdFx0d2FybihyZXQud2FybiwgbGluZSwgY3Vycl9wb3MpO1xuXHRcdFx0cmV0dXJuIFtyZXQubGVuLFwiXCJdO1xuXHRcdH1cblxuXHRcdC8vIE5vdyBzZWUgaWYgdGhpcyBpcyBhIHJlcGVhdGVkIGVuZGluZ1xuXHRcdC8vIEEgcmVwZWF0ZWQgZW5kaW5nIGlzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyAxLDIsMyw0LDUsNiw3LDgsOSwwLC0sIGFuZCBjb21tYVxuXHRcdC8vIEl0IGNhbiBhbHNvIG9wdGlvbmFsbHkgc3RhcnQgd2l0aCAnWycsIHdoaWNoIGlzIGlnbm9yZWQuXG5cdFx0Ly8gQWxzbywgaXQgY2FuIGhhdmUgd2hpdGUgc3BhY2UgYmVmb3JlIHRoZSAnWycuXG5cdFx0Zm9yICh2YXIgd3MgPSAwOyB3cyA8IGxpbmUubGVuZ3RoOyB3cysrKVxuXHRcdFx0aWYgKGxpbmUuY2hhckF0KGN1cnJfcG9zICsgcmV0LmxlbiArIHdzKSAhPT0gJyAnKVxuXHRcdFx0XHRicmVhaztcblx0XHR2YXIgb3JpZ19iYXJfbGVuID0gcmV0Lmxlbjtcblx0XHRpZiAobGluZS5jaGFyQXQoY3Vycl9wb3MrcmV0Lmxlbit3cykgPT09ICdbJykge1xuXHRcdFx0cmV0LmxlbiArPSB3cyArIDE7XG5cdFx0fVxuXG5cdFx0Ly8gSXQgY2FuIGFsc28gYmUgYSBxdW90ZWQgc3RyaW5nLiBJdCBpcyB1bmNsZWFyIHdoZXRoZXIgdGhhdCBjb25zdHJ1Y3QgcmVxdWlyZXMgJ1snLCBidXQgaXQgc2VlbXMgbGlrZSBpdCB3b3VsZC4gb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGNvbmZ1c2VkIHdpdGggYSByZWd1bGFyIGNob3JkLlxuXHRcdGlmIChsaW5lLmNoYXJBdChjdXJyX3BvcytyZXQubGVuKSA9PT0gJ1wiJyAmJiBsaW5lLmNoYXJBdChjdXJyX3BvcytyZXQubGVuLTEpID09PSAnWycpIHtcblx0XHRcdHZhciBlbmRpbmcgPSB0b2tlbml6ZXIuZ2V0QnJhY2tldHRlZFN1YnN0cmluZyhsaW5lLCBjdXJyX3BvcytyZXQubGVuLCA1KTtcblx0XHRcdHJldHVybiBbcmV0LmxlbitlbmRpbmdbMF0sIHJldC50b2tlbiwgZW5kaW5nWzFdXTtcblx0XHR9XG5cdFx0dmFyIHJldFJlcCA9IHRva2VuaXplci5nZXRUb2tlbk9mKGxpbmUuc3Vic3RyaW5nKGN1cnJfcG9zK3JldC5sZW4pLCBcIjEyMzQ1Njc4OTAtLFwiKTtcblx0XHRpZiAocmV0UmVwLmxlbiA9PT0gMCB8fCByZXRSZXAudG9rZW5bMF0gPT09ICctJylcblx0XHRcdHJldHVybiBbb3JpZ19iYXJfbGVuLCByZXQudG9rZW5dO1xuXG5cdFx0cmV0dXJuIFtyZXQubGVuK3JldFJlcC5sZW4sIHJldC50b2tlbiwgcmV0UmVwLnRva2VuXTtcblx0fTtcblxuXHR2YXIgdHJpcGxldFEgPSB7XG5cdFx0MjogMyxcblx0XHQzOiAyLFxuXHRcdDQ6IDMsXG5cdFx0NTogMiwgLy8gVE9ETy1QRVI6IG5vdCBoYW5kbGluZyA2Lzggcmh5dGhtIHlldFxuXHRcdDY6IDIsXG5cdFx0NzogMiwgLy8gVE9ETy1QRVI6IG5vdCBoYW5kbGluZyA2Lzggcmh5dGhtIHlldFxuXHRcdDg6IDMsXG5cdFx0OTogMiAvLyBUT0RPLVBFUjogbm90IGhhbmRsaW5nIDYvOCByaHl0aG0geWV0XG5cdH07XG5cdHZhciBsZXR0ZXJfdG9fb3Blbl9zbHVyc19hbmRfdHJpcGxldHMgPSAgZnVuY3Rpb24obGluZSwgaSkge1xuXHRcdC8vIGNvbnN1bWUgc3BhY2VzLCBhbmQgbG9vayBmb3IgYWxsIHRoZSBvcGVuIHBhcmVucy4gSWYgdGhlcmUgaXMgYSBudW1iZXIgYWZ0ZXIgdGhlIG9wZW4gcGFyZW4sXG5cdFx0Ly8gdGhhdCBpcyBhIHRyaXBsZXQuIE90aGVyd2lzZSB0aGF0IGlzIGEgc2x1ci4gQ29sbGVjdCBhbGwgdGhlIHNsdXJzIGFuZCB0aGUgZmlyc3QgdHJpcGxldC5cblx0XHR2YXIgcmV0ID0ge307XG5cdFx0dmFyIHN0YXJ0ID0gaTtcblx0XHR3aGlsZSAobGluZS5jaGFyQXQoaSkgPT09ICcoJyB8fCB0b2tlbml6ZXIuaXNXaGl0ZVNwYWNlKGxpbmUuY2hhckF0KGkpKSkge1xuXHRcdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAnKCcpIHtcblx0XHRcdFx0aWYgKGkrMSA8IGxpbmUubGVuZ3RoICYmIChsaW5lLmNoYXJBdChpKzEpID49ICcyJyAmJiBsaW5lLmNoYXJBdChpKzEpIDw9ICc5JykpIHtcblx0XHRcdFx0XHRpZiAocmV0LnRyaXBsZXQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdHdhcm4oXCJDYW4ndCBuZXN0IHRyaXBsZXRzXCIsIGxpbmUsIGkpO1xuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0LnRyaXBsZXQgPSBsaW5lLmNoYXJBdChpKzEpIC0gJzAnO1xuXHRcdFx0XHRcdFx0cmV0LnRyaXBsZXRRID0gdHJpcGxldFFbcmV0LnRyaXBsZXRdO1xuXHRcdFx0XHRcdFx0cmV0Lm51bV9ub3RlcyA9IHJldC50cmlwbGV0O1xuXHRcdFx0XHRcdFx0aWYgKGkrMiA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGkrMikgPT09ICc6Jykge1xuXHRcdFx0XHRcdFx0XHQvLyBXZSBhcmUgZXhwZWN0aW5nIFwiKHA6cTpyXCIgb3IgXCIocDpxXCIgb3IgXCIocDo6clwiXG5cdFx0XHRcdFx0XHRcdC8vIFRoYXQgaXM6IFwicHV0IHAgbm90ZXMgaW50byB0aGUgdGltZSBvZiBxIGZvciB0aGUgbmV4dCByIG5vdGVzXCJcblx0XHRcdFx0XHRcdFx0Ly8gaWYgciBpcyBtaXNzaW5nLCB0aGVuIGl0IGlzIGVxdWFsIHRvIHAuXG5cdFx0XHRcdFx0XHRcdC8vIGlmIHEgaXMgbWlzc2luZywgaXQgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoaXMgdGFibGU6XG5cdFx0XHRcdFx0XHRcdC8vICgyIG5vdGVzIGluIHRoZSB0aW1lIG9mIDNcblx0XHRcdFx0XHRcdFx0Ly8gKDMgbm90ZXMgaW4gdGhlIHRpbWUgb2YgMlxuXHRcdFx0XHRcdFx0XHQvLyAoNCBub3RlcyBpbiB0aGUgdGltZSBvZiAzXG5cdFx0XHRcdFx0XHRcdC8vICg1IG5vdGVzIGluIHRoZSB0aW1lIG9mIG4gfCBpZiB0aW1lIHNpZyBpcyAoNi84LCA5LzgsIDEyLzgpLCBuPTMsIGVsc2Ugbj0yXG5cdFx0XHRcdFx0XHRcdC8vICg2IG5vdGVzIGluIHRoZSB0aW1lIG9mIDJcblx0XHRcdFx0XHRcdFx0Ly8gKDcgbm90ZXMgaW4gdGhlIHRpbWUgb2YgblxuXHRcdFx0XHRcdFx0XHQvLyAoOCBub3RlcyBpbiB0aGUgdGltZSBvZiAzXG5cdFx0XHRcdFx0XHRcdC8vICg5IG5vdGVzIGluIHRoZSB0aW1lIG9mIG5cblx0XHRcdFx0XHRcdFx0aWYgKGkrMyA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGkrMykgPT09ICc6Jykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFRoZSBzZWNvbmQgbnVtYmVyLCAncScsIGlzIG5vdCBwcmVzZW50LlxuXHRcdFx0XHRcdFx0XHRcdGlmIChpKzQgPCBsaW5lLmxlbmd0aCAmJiAobGluZS5jaGFyQXQoaSs0KSA+PSAnMScgJiYgbGluZS5jaGFyQXQoaSs0KSA8PSAnOScpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXQubnVtX25vdGVzID0gbGluZS5jaGFyQXQoaSs0KSAtICcwJztcblx0XHRcdFx0XHRcdFx0XHRcdGkgKz0gMztcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHdhcm4oXCJleHBlY3RlZCBudW1iZXIgYWZ0ZXIgdGhlIHR3byBjb2xvbnMgYWZ0ZXIgdGhlIHRyaXBsZXQgdG8gbWFyayB0aGUgZHVyYXRpb25cIiwgbGluZSwgaSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaSszIDwgbGluZS5sZW5ndGggJiYgKGxpbmUuY2hhckF0KGkrMykgPj0gJzEnICYmIGxpbmUuY2hhckF0KGkrMykgPD0gJzknKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldC50cmlwbGV0USA9IGxpbmUuY2hhckF0KGkrMykgLSAnMCc7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGkrNCA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGkrNCkgPT09ICc6Jykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGkrNSA8IGxpbmUubGVuZ3RoICYmIChsaW5lLmNoYXJBdChpKzUpID49ICcxJyAmJiBsaW5lLmNoYXJBdChpKzUpIDw9ICc5JykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0Lm51bV9ub3RlcyA9IGxpbmUuY2hhckF0KGkrNSkgLSAnMCc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGkgKz0gNDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aSArPSAyO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0d2FybihcImV4cGVjdGVkIG51bWJlciBhZnRlciB0aGUgdHJpcGxldCB0byBtYXJrIHRoZSBkdXJhdGlvblwiLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGlmIChyZXQuc3RhcnRTbHVyID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRyZXQuc3RhcnRTbHVyID0gMTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRyZXQuc3RhcnRTbHVyKys7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGkrKztcblx0XHR9XG5cdFx0cmV0LmNvbnN1bWVkID0gaS1zdGFydDtcblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXG5cdHZhciBhZGRXb3JkcyA9IGZ1bmN0aW9uKGxpbmUsIHdvcmRzKSB7XG5cdFx0aWYgKCFsaW5lKSB7IHdhcm4oXCJDYW4ndCBhZGQgd29yZHMgYmVmb3JlIHRoZSBmaXJzdCBsaW5lIG9mIG11c2ljXCIsIGxpbmUsIDApOyByZXR1cm47IH1cblx0XHR3b3JkcyA9IHBhcnNlQ29tbW9uLnN0cmlwKHdvcmRzKTtcblx0XHRpZiAod29yZHMuY2hhckF0KHdvcmRzLmxlbmd0aC0xKSAhPT0gJy0nKVxuXHRcdFx0d29yZHMgPSB3b3JkcyArICcgJztcdC8vIEp1c3QgbWFrZXMgaXQgZWFzaWVyIHRvIHBhcnNlIGJlbG93LCBzaW5jZSBldmVyeSB3b3JkIGhhcyBhIGRpdmlkZXIgYWZ0ZXIgaXQuXG5cdFx0dmFyIHdvcmRfbGlzdCA9IFtdO1xuXHRcdC8vIGZpcnN0IG1ha2UgYSBsaXN0IG9mIHdvcmRzIGZyb20gdGhlIHN0cmluZyB3ZSBhcmUgcGFzc2VkLiBBIHdvcmQgaXMgZGl2aWRlZCBvbiBlaXRoZXIgYSBzcGFjZSBvciBkYXNoLlxuXHRcdHZhciBsYXN0X2RpdmlkZXIgPSAwO1xuXHRcdHZhciByZXBsYWNlID0gZmFsc2U7XG5cdFx0dmFyIGFkZFdvcmQgPSBmdW5jdGlvbihpKSB7XG5cdFx0XHR2YXIgd29yZCA9IHBhcnNlQ29tbW9uLnN0cmlwKHdvcmRzLnN1YnN0cmluZyhsYXN0X2RpdmlkZXIsIGkpKTtcblx0XHRcdGxhc3RfZGl2aWRlciA9IGkrMTtcblx0XHRcdGlmICh3b3JkLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKHJlcGxhY2UpXG5cdFx0XHRcdFx0d29yZCA9IHBhcnNlQ29tbW9uLmdzdWIod29yZCwnficsICcgJyk7XG5cdFx0XHRcdHZhciBkaXYgPSB3b3Jkcy5jaGFyQXQoaSk7XG5cdFx0XHRcdGlmIChkaXYgIT09ICdfJyAmJiBkaXYgIT09ICctJylcblx0XHRcdFx0XHRkaXYgPSAnICc7XG5cdFx0XHRcdHdvcmRfbGlzdC5wdXNoKHtzeWxsYWJsZTogdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh3b3JkKSwgZGl2aWRlcjogZGl2fSk7XG5cdFx0XHRcdHJlcGxhY2UgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzd2l0Y2ggKHdvcmRzLmNoYXJBdChpKSkge1xuXHRcdFx0XHRjYXNlICcgJzpcblx0XHRcdFx0Y2FzZSAnXFx4MTInOlxuXHRcdFx0XHRcdGFkZFdvcmQoaSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0nOlxuXHRcdFx0XHRcdGlmICghYWRkV29yZChpKSAmJiB3b3JkX2xpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cGFyc2VDb21tb24ubGFzdCh3b3JkX2xpc3QpLmRpdmlkZXIgPSAnLSc7XG5cdFx0XHRcdFx0XHR3b3JkX2xpc3QucHVzaCh7c2tpcDogdHJ1ZSwgdG86ICduZXh0J30pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnXyc6XG5cdFx0XHRcdFx0YWRkV29yZChpKTtcblx0XHRcdFx0XHR3b3JkX2xpc3QucHVzaCh7c2tpcDogdHJ1ZSwgdG86ICdzbHVyJ30pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcqJzpcblx0XHRcdFx0XHRhZGRXb3JkKGkpO1xuXHRcdFx0XHRcdHdvcmRfbGlzdC5wdXNoKHtza2lwOiB0cnVlLCB0bzogJ25leHQnfSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3wnOlxuXHRcdFx0XHRcdGFkZFdvcmQoaSk7XG5cdFx0XHRcdFx0d29yZF9saXN0LnB1c2goe3NraXA6IHRydWUsIHRvOiAnYmFyJ30pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd+Jzpcblx0XHRcdFx0XHRyZXBsYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaW5TbHVyID0gZmFsc2U7XG5cdFx0cGFyc2VDb21tb24uZWFjaChsaW5lLCBmdW5jdGlvbihlbCkge1xuXHRcdFx0aWYgKHdvcmRfbGlzdC5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0aWYgKHdvcmRfbGlzdFswXS5za2lwKSB7XG5cdFx0XHRcdFx0c3dpdGNoICh3b3JkX2xpc3RbMF0udG8pIHtcblx0XHRcdFx0XHRcdGNhc2UgJ25leHQnOiBpZiAoZWwuZWxfdHlwZSA9PT0gJ25vdGUnICYmIGVsLnBpdGNoZXMgIT09IG51bGwgJiYgIWluU2x1cikgd29yZF9saXN0LnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnc2x1cic6IGlmIChlbC5lbF90eXBlID09PSAnbm90ZScgJiYgZWwucGl0Y2hlcyAhPT0gbnVsbCkgd29yZF9saXN0LnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYmFyJzogaWYgKGVsLmVsX3R5cGUgPT09ICdiYXInKSB3b3JkX2xpc3Quc2hpZnQoKTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChlbC5lbF90eXBlICE9PSAnYmFyJykge1xuXHRcdFx0XHRcdFx0aWYgKGVsLmx5cmljID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdGVsLmx5cmljID0gW3tzeWxsYWJsZTogXCJcIiwgZGl2aWRlcjogXCIgXCJ9XTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0ZWwubHlyaWMucHVzaCh7c3lsbGFibGU6IFwiXCIsIGRpdmlkZXI6IFwiIFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChlbC5lbF90eXBlID09PSAnbm90ZScgJiYgZWwucmVzdCA9PT0gdW5kZWZpbmVkICYmICFpblNsdXIpIHtcblx0XHRcdFx0XHRcdHZhciBseXJpYyA9IHdvcmRfbGlzdC5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0aWYgKGx5cmljLnN5bGxhYmxlKVxuXHRcdFx0XHRcdFx0XHRseXJpYy5zeWxsYWJsZSA9IGx5cmljLnN5bGxhYmxlLnJlcGxhY2UoLyArL2csJ1xceEEwJyk7XG5cdFx0XHRcdFx0XHRpZiAoZWwubHlyaWMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdFx0ZWwubHlyaWMgPSBbIGx5cmljIF07XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdGVsLmx5cmljLnB1c2gobHlyaWMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXG5cdHZhciBhZGRTeW1ib2xzID0gZnVuY3Rpb24obGluZSwgd29yZHMpIHtcblx0XHQvLyBUT0RPLVBFUjogQ3VycmVudGx5IGNvcGllZCBmcm9tIHc6IGxpbmUuIFRoaXMgbmVlZHMgdG8gYmUgcmVhZCBhcyBzeW1ib2xzIGluc3RlYWQuXG5cdFx0aWYgKCFsaW5lKSB7IHdhcm4oXCJDYW4ndCBhZGQgc3ltYm9scyBiZWZvcmUgdGhlIGZpcnN0IGxpbmUgb2YgbXVzaWNcIiwgbGluZSwgMCk7IHJldHVybjsgfVxuXHRcdHdvcmRzID0gcGFyc2VDb21tb24uc3RyaXAod29yZHMpO1xuXHRcdGlmICh3b3Jkcy5jaGFyQXQod29yZHMubGVuZ3RoLTEpICE9PSAnLScpXG5cdFx0XHR3b3JkcyA9IHdvcmRzICsgJyAnO1x0Ly8gSnVzdCBtYWtlcyBpdCBlYXNpZXIgdG8gcGFyc2UgYmVsb3csIHNpbmNlIGV2ZXJ5IHdvcmQgaGFzIGEgZGl2aWRlciBhZnRlciBpdC5cblx0XHR2YXIgd29yZF9saXN0ID0gW107XG5cdFx0Ly8gZmlyc3QgbWFrZSBhIGxpc3Qgb2Ygd29yZHMgZnJvbSB0aGUgc3RyaW5nIHdlIGFyZSBwYXNzZWQuIEEgd29yZCBpcyBkaXZpZGVkIG9uIGVpdGhlciBhIHNwYWNlIG9yIGRhc2guXG5cdFx0dmFyIGxhc3RfZGl2aWRlciA9IDA7XG5cdFx0dmFyIHJlcGxhY2UgPSBmYWxzZTtcblx0XHR2YXIgYWRkV29yZCA9IGZ1bmN0aW9uKGkpIHtcblx0XHRcdHZhciB3b3JkID0gcGFyc2VDb21tb24uc3RyaXAod29yZHMuc3Vic3RyaW5nKGxhc3RfZGl2aWRlciwgaSkpO1xuXHRcdFx0bGFzdF9kaXZpZGVyID0gaSsxO1xuXHRcdFx0aWYgKHdvcmQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAocmVwbGFjZSlcblx0XHRcdFx0XHR3b3JkID0gcGFyc2VDb21tb24uZ3N1Yih3b3JkLCAnficsICcgJyk7XG5cdFx0XHRcdHZhciBkaXYgPSB3b3Jkcy5jaGFyQXQoaSk7XG5cdFx0XHRcdGlmIChkaXYgIT09ICdfJyAmJiBkaXYgIT09ICctJylcblx0XHRcdFx0XHRkaXYgPSAnICc7XG5cdFx0XHRcdHdvcmRfbGlzdC5wdXNoKHtzeWxsYWJsZTogdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh3b3JkKSwgZGl2aWRlcjogZGl2fSk7XG5cdFx0XHRcdHJlcGxhY2UgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzd2l0Y2ggKHdvcmRzLmNoYXJBdChpKSkge1xuXHRcdFx0XHRjYXNlICcgJzpcblx0XHRcdFx0Y2FzZSAnXFx4MTInOlxuXHRcdFx0XHRcdGFkZFdvcmQoaSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0nOlxuXHRcdFx0XHRcdGlmICghYWRkV29yZChpKSAmJiB3b3JkX2xpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cGFyc2VDb21tb24ubGFzdCh3b3JkX2xpc3QpLmRpdmlkZXIgPSAnLSc7XG5cdFx0XHRcdFx0XHR3b3JkX2xpc3QucHVzaCh7c2tpcDogdHJ1ZSwgdG86ICduZXh0J30pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnXyc6XG5cdFx0XHRcdFx0YWRkV29yZChpKTtcblx0XHRcdFx0XHR3b3JkX2xpc3QucHVzaCh7c2tpcDogdHJ1ZSwgdG86ICdzbHVyJ30pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcqJzpcblx0XHRcdFx0XHRhZGRXb3JkKGkpO1xuXHRcdFx0XHRcdHdvcmRfbGlzdC5wdXNoKHtza2lwOiB0cnVlLCB0bzogJ25leHQnfSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3wnOlxuXHRcdFx0XHRcdGFkZFdvcmQoaSk7XG5cdFx0XHRcdFx0d29yZF9saXN0LnB1c2goe3NraXA6IHRydWUsIHRvOiAnYmFyJ30pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd+Jzpcblx0XHRcdFx0XHRyZXBsYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaW5TbHVyID0gZmFsc2U7XG5cdFx0cGFyc2VDb21tb24uZWFjaChsaW5lLCBmdW5jdGlvbihlbCkge1xuXHRcdFx0aWYgKHdvcmRfbGlzdC5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0aWYgKHdvcmRfbGlzdFswXS5za2lwKSB7XG5cdFx0XHRcdFx0c3dpdGNoICh3b3JkX2xpc3RbMF0udG8pIHtcblx0XHRcdFx0XHRcdGNhc2UgJ25leHQnOiBpZiAoZWwuZWxfdHlwZSA9PT0gJ25vdGUnICYmIGVsLnBpdGNoZXMgIT09IG51bGwgJiYgIWluU2x1cikgd29yZF9saXN0LnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnc2x1cic6IGlmIChlbC5lbF90eXBlID09PSAnbm90ZScgJiYgZWwucGl0Y2hlcyAhPT0gbnVsbCkgd29yZF9saXN0LnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYmFyJzogaWYgKGVsLmVsX3R5cGUgPT09ICdiYXInKSB3b3JkX2xpc3Quc2hpZnQoKTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChlbC5lbF90eXBlID09PSAnbm90ZScgJiYgZWwucmVzdCA9PT0gdW5kZWZpbmVkICYmICFpblNsdXIpIHtcblx0XHRcdFx0XHRcdHZhciBseXJpYyA9IHdvcmRfbGlzdC5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0aWYgKGVsLmx5cmljID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdGVsLmx5cmljID0gWyBseXJpYyBdO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRlbC5seXJpYy5wdXNoKGx5cmljKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblxuXHR2YXIgZ2V0QnJva2VuUmh5dGhtID0gZnVuY3Rpb24obGluZSwgaW5kZXgpIHtcblx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGluZGV4KSkge1xuXHRcdFx0Y2FzZSAnPic6XG5cdFx0XHRpZiAoaW5kZXggPCBsaW5lLmxlbmd0aCAtIDEgJiYgbGluZS5jaGFyQXQoaW5kZXgrMSkgPT09ICc+JylcdC8vIGRvdWJsZSA+PlxuXHRcdFx0XHRcdHJldHVybiBbMiwgMS43NSwgMC4yNV07XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRyZXR1cm4gWzEsIDEuNSwgMC41XTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICc8Jzpcblx0XHRcdGlmIChpbmRleCA8IGxpbmUubGVuZ3RoIC0gMSAmJiBsaW5lLmNoYXJBdChpbmRleCsxKSA9PT0gJzwnKVx0Ly8gZG91YmxlIDw8XG5cdFx0XHRcdFx0cmV0dXJuIFsyLCAwLjI1LCAxLjc1XTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHJldHVybiBbMSwgMC41LCAxLjVdO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cblx0Ly8gVE9ETy1QRVI6IG1ha2UgdGhpcyBhIG1ldGhvZCBpbiBlbC5cblx0dmFyIGFkZEVuZEJlYW0gPSBmdW5jdGlvbihlbCkge1xuXHRcdGlmIChlbC5kdXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIGVsLmR1cmF0aW9uIDwgMC4yNSlcblx0XHRcdGVsLmVuZF9iZWFtID0gdHJ1ZTtcblx0XHRyZXR1cm4gZWw7XG5cdH07XG5cblx0dmFyIHBpdGNoZXMgPSB7QTogNSwgQjogNiwgQzogMCwgRDogMSwgRTogMiwgRjogMywgRzogNCwgYTogMTIsIGI6IDEzLCBjOiA3LCBkOiA4LCBlOiA5LCBmOiAxMCwgZzogMTF9O1xuXHR2YXIgcmVzdHMgPSB7eDogJ2ludmlzaWJsZScsIHk6ICdzcGFjZXInLCB6OiAncmVzdCcsIFo6ICdtdWx0aW1lYXN1cmUnIH07XG5cdHZhciBnZXRDb3JlTm90ZSA9IGZ1bmN0aW9uKGxpbmUsIGluZGV4LCBlbCwgY2FuSGF2ZUJyb2tlblJoeXRobSkge1xuXHRcdC8vdmFyIGVsID0geyBzdGFydENoYXI6IGluZGV4IH07XG5cdFx0dmFyIGlzQ29tcGxldGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0cmV0dXJuIChzdGF0ZSA9PT0gJ29jdGF2ZScgfHwgc3RhdGUgPT09ICdkdXJhdGlvbicgfHwgc3RhdGUgPT09ICdaZHVyYXRpb24nIHx8IHN0YXRlID09PSAnYnJva2VuX3JoeXRobScgfHwgc3RhdGUgPT09ICdlbmRfc2x1cicpO1xuXHRcdH07XG5cdFx0dmFyIHN0YXRlID0gJ3N0YXJ0U2x1cic7XG5cdFx0dmFyIGR1cmF0aW9uU2V0QnlQcmV2aW91c05vdGUgPSBmYWxzZTtcblx0XHR3aGlsZSAoMSkge1xuXHRcdFx0c3dpdGNoKGxpbmUuY2hhckF0KGluZGV4KSkge1xuXHRcdFx0XHRjYXNlICcoJzpcblx0XHRcdFx0XHRpZiAoc3RhdGUgPT09ICdzdGFydFNsdXInKSB7XG5cdFx0XHRcdFx0XHRpZiAoZWwuc3RhcnRTbHVyID09PSB1bmRlZmluZWQpIGVsLnN0YXJ0U2x1ciA9IDE7IGVsc2UgZWwuc3RhcnRTbHVyKys7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge2VsLmVuZENoYXIgPSBpbmRleDtyZXR1cm4gZWw7fVxuXHRcdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJyknOlxuXHRcdFx0XHRcdGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge1xuXHRcdFx0XHRcdFx0aWYgKGVsLmVuZFNsdXIgPT09IHVuZGVmaW5lZCkgZWwuZW5kU2x1ciA9IDE7IGVsc2UgZWwuZW5kU2x1cisrO1xuXHRcdFx0XHRcdH0gZWxzZSByZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnXic6XG5cdFx0XHRcdFx0aWYgKHN0YXRlID09PSAnc3RhcnRTbHVyJykge2VsLmFjY2lkZW50YWwgPSAnc2hhcnAnO3N0YXRlID0gJ3NoYXJwMic7fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHN0YXRlID09PSAnc2hhcnAyJykge2VsLmFjY2lkZW50YWwgPSAnZGJsc2hhcnAnO3N0YXRlID0gJ3BpdGNoJzt9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoaXNDb21wbGV0ZShzdGF0ZSkpIHtlbC5lbmRDaGFyID0gaW5kZXg7cmV0dXJuIGVsO31cblx0XHRcdFx0XHRlbHNlIHJldHVybiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdfJzpcblx0XHRcdFx0XHRpZiAoc3RhdGUgPT09ICdzdGFydFNsdXInKSB7ZWwuYWNjaWRlbnRhbCA9ICdmbGF0JztzdGF0ZSA9ICdmbGF0Mic7fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHN0YXRlID09PSAnZmxhdDInKSB7ZWwuYWNjaWRlbnRhbCA9ICdkYmxmbGF0JztzdGF0ZSA9ICdwaXRjaCc7fVxuXHRcdFx0XHRcdGVsc2UgaWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7ZWwuZW5kQ2hhciA9IGluZGV4O3JldHVybiBlbDt9XG5cdFx0XHRcdFx0ZWxzZSByZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnPSc6XG5cdFx0XHRcdFx0aWYgKHN0YXRlID09PSAnc3RhcnRTbHVyJykge2VsLmFjY2lkZW50YWwgPSAnbmF0dXJhbCc7c3RhdGUgPSAncGl0Y2gnO31cblx0XHRcdFx0XHRlbHNlIGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge2VsLmVuZENoYXIgPSBpbmRleDtyZXR1cm4gZWw7fVxuXHRcdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0EnOlxuXHRcdFx0XHRjYXNlICdCJzpcblx0XHRcdFx0Y2FzZSAnQyc6XG5cdFx0XHRcdGNhc2UgJ0QnOlxuXHRcdFx0XHRjYXNlICdFJzpcblx0XHRcdFx0Y2FzZSAnRic6XG5cdFx0XHRcdGNhc2UgJ0cnOlxuXHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0Y2FzZSAnYic6XG5cdFx0XHRcdGNhc2UgJ2MnOlxuXHRcdFx0XHRjYXNlICdkJzpcblx0XHRcdFx0Y2FzZSAnZSc6XG5cdFx0XHRcdGNhc2UgJ2YnOlxuXHRcdFx0XHRjYXNlICdnJzpcblx0XHRcdFx0XHRpZiAoc3RhdGUgPT09ICdzdGFydFNsdXInIHx8IHN0YXRlID09PSAnc2hhcnAyJyB8fCBzdGF0ZSA9PT0gJ2ZsYXQyJyB8fCBzdGF0ZSA9PT0gJ3BpdGNoJykge1xuXHRcdFx0XHRcdFx0ZWwucGl0Y2ggPSBwaXRjaGVzW2xpbmUuY2hhckF0KGluZGV4KV07XG5cdFx0XHRcdFx0XHR0cmFuc3Bvc2Uubm90ZShtdWx0aWxpbmVWYXJzLCBlbCk7XG5cdFx0XHRcdFx0XHRzdGF0ZSA9ICdvY3RhdmUnO1xuXHRcdFx0XHRcdFx0Ly8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgdmFsaWQgbm90ZS4gVGhlIHJlc3QgaXMgb3B0aW9uYWwuIFNldCB0aGUgZHVyYXRpb24gaW4gY2FzZSB3ZSBkb24ndCBnZXQgb25lIGJlbG93XG5cdFx0XHRcdFx0XHRpZiAoY2FuSGF2ZUJyb2tlblJoeXRobSAmJiBtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbiAhPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggKiBtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbjtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5uZXh0X25vdGVfZHVyYXRpb24gPSAwO1xuXHRcdFx0XHRcdFx0XHRkdXJhdGlvblNldEJ5UHJldmlvdXNOb3RlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGg7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgY2xlZiBpcyBwZXJjdXNzaW9uLCB0aGVyZSBpcyBwcm9iYWJseSBzb21lIHRyYW5zbGF0aW9uIG9mIHRoZSBwaXRjaCB0byBhIHBhcnRpY3VsYXIgZHJ1bSBraXQgaXRlbS5cblx0XHRcdFx0XHRcdGlmICgobXVsdGlsaW5lVmFycy5jbGVmICYmIG11bHRpbGluZVZhcnMuY2xlZi50eXBlID09PSBcInBlcmNcIikgfHxcblx0XHRcdFx0XHRcdFx0KG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlICYmIG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLmNsZWYgPT09IFwicGVyY1wiKSkge1xuXHRcdFx0XHRcdFx0XHR2YXIga2V5ID0gbGluZS5jaGFyQXQoaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZWwuYWNjaWRlbnRhbCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhY2NNYXAgPSB7ICdkYmxmbGF0JzogJ19fJywgJ2ZsYXQnOiAnXycsICduYXR1cmFsJzogJz0nLCAnc2hhcnAnOiAnXicsICdkYmxzaGFycCc6ICdeXid9O1xuXHRcdFx0XHRcdFx0XHRcdGtleSA9IGFjY01hcFtlbC5hY2NpZGVudGFsXSArIGtleTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAodHVuZS5mb3JtYXR0aW5nICYmIHR1bmUuZm9ybWF0dGluZy5taWRpICYmIHR1bmUuZm9ybWF0dGluZy5taWRpLmRydW1tYXApXG5cdFx0XHRcdFx0XHRcdFx0ZWwubWlkaXBpdGNoID0gdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcFtrZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNDb21wbGV0ZShzdGF0ZSkpIHtlbC5lbmRDaGFyID0gaW5kZXg7cmV0dXJuIGVsO31cblx0XHRcdFx0XHRlbHNlIHJldHVybiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcsJzpcblx0XHRcdFx0XHRpZiAoc3RhdGUgPT09ICdvY3RhdmUnKSB7ZWwucGl0Y2ggLT0gNzt9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoaXNDb21wbGV0ZShzdGF0ZSkpIHtlbC5lbmRDaGFyID0gaW5kZXg7cmV0dXJuIGVsO31cblx0XHRcdFx0XHRlbHNlIHJldHVybiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdcXCcnOlxuXHRcdFx0XHRcdGlmIChzdGF0ZSA9PT0gJ29jdGF2ZScpIHtlbC5waXRjaCArPSA3O31cblx0XHRcdFx0XHRlbHNlIGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge2VsLmVuZENoYXIgPSBpbmRleDtyZXR1cm4gZWw7fVxuXHRcdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3gnOlxuXHRcdFx0XHRjYXNlICd5Jzpcblx0XHRcdFx0Y2FzZSAneic6XG5cdFx0XHRcdGNhc2UgJ1onOlxuXHRcdFx0XHRcdGlmIChzdGF0ZSA9PT0gJ3N0YXJ0U2x1cicpIHtcblx0XHRcdFx0XHRcdGVsLnJlc3QgPSB7IHR5cGU6IHJlc3RzW2xpbmUuY2hhckF0KGluZGV4KV0gfTtcblx0XHRcdFx0XHRcdC8vIFRoZXJlIHNob3VsZG4ndCBiZSBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgbm90ZXMgaGF2ZS4gSWYgc29tZSBzbmVhayBpbiBkdWUgdG8gYmFkIHN5bnRheCBpbiB0aGUgYWJjIGZpbGUsXG5cdFx0XHRcdFx0XHQvLyBqdXN0IG5peCB0aGVtIGhlcmUuXG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuYWNjaWRlbnRhbDtcblx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5zdGFydFNsdXI7XG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuc3RhcnRUaWU7XG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuZW5kU2x1cjtcblx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5lbmRUaWU7XG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuZW5kX2JlYW07XG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuZ3JhY2Vfbm90ZXM7XG5cdFx0XHRcdFx0XHQvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYSB2YWxpZCBub3RlLiBUaGUgcmVzdCBpcyBvcHRpb25hbC4gU2V0IHRoZSBkdXJhdGlvbiBpbiBjYXNlIHdlIGRvbid0IGdldCBvbmUgYmVsb3dcblx0XHRcdFx0XHRcdGlmIChlbC5yZXN0LnR5cGUgPT09ICdtdWx0aW1lYXN1cmUnKSB7XG5cdFx0XHRcdFx0XHRcdGVsLmR1cmF0aW9uID0gMTtcblx0XHRcdFx0XHRcdFx0c3RhdGUgPSAnWmR1cmF0aW9uJztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjYW5IYXZlQnJva2VuUmh5dGhtICYmIG11bHRpbGluZVZhcnMubmV4dF9ub3RlX2R1cmF0aW9uICE9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBtdWx0aWxpbmVWYXJzLmRlZmF1bHRfbGVuZ3RoICogbXVsdGlsaW5lVmFycy5uZXh0X25vdGVfZHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5uZXh0X25vdGVfZHVyYXRpb24gPSAwO1xuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uU2V0QnlQcmV2aW91c05vdGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gJ2R1cmF0aW9uJztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7ZWwuZW5kQ2hhciA9IGluZGV4O3JldHVybiBlbDt9XG5cdFx0XHRcdFx0ZWxzZSByZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRjYXNlICczJzpcblx0XHRcdFx0Y2FzZSAnNCc6XG5cdFx0XHRcdGNhc2UgJzUnOlxuXHRcdFx0XHRjYXNlICc2Jzpcblx0XHRcdFx0Y2FzZSAnNyc6XG5cdFx0XHRcdGNhc2UgJzgnOlxuXHRcdFx0XHRjYXNlICc5Jzpcblx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdGNhc2UgJy8nOlxuXHRcdFx0XHRcdGlmIChzdGF0ZSA9PT0gJ29jdGF2ZScgfHwgc3RhdGUgPT09ICdkdXJhdGlvbicpIHtcblx0XHRcdFx0XHRcdHZhciBmcmFjdGlvbiA9IHRva2VuaXplci5nZXRGcmFjdGlvbihsaW5lLCBpbmRleCk7XG5cdFx0XHRcdFx0XHQvL2lmICghZHVyYXRpb25TZXRCeVByZXZpb3VzTm90ZSlcblx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBlbC5kdXJhdGlvbiAqIGZyYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IFdlIGNhbiB0ZXN0IHRoZSByZXR1cm5lZCBkdXJhdGlvbiBoZXJlIGFuZCBnaXZlIGEgd2FybmluZyBpZiBpdCBpc24ndCB0aGUgb25lIGV4cGVjdGVkLlxuXHRcdFx0XHRcdFx0ZWwuZW5kQ2hhciA9IGZyYWN0aW9uLmluZGV4O1xuXHRcdFx0XHRcdFx0d2hpbGUgKGZyYWN0aW9uLmluZGV4IDwgbGluZS5sZW5ndGggJiYgKHRva2VuaXplci5pc1doaXRlU3BhY2UobGluZS5jaGFyQXQoZnJhY3Rpb24uaW5kZXgpKSB8fCBsaW5lLmNoYXJBdChmcmFjdGlvbi5pbmRleCkgPT09ICctJykpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGZyYWN0aW9uLmluZGV4KSA9PT0gJy0nKVxuXHRcdFx0XHRcdFx0XHRcdGVsLnN0YXJ0VGllID0ge307XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRlbCA9IGFkZEVuZEJlYW0oZWwpO1xuXHRcdFx0XHRcdFx0XHRmcmFjdGlvbi5pbmRleCsrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW5kZXggPSBmcmFjdGlvbi5pbmRleC0xO1xuXHRcdFx0XHRcdFx0c3RhdGUgPSAnYnJva2VuX3JoeXRobSc7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gJ3NoYXJwMicpIHtcblx0XHRcdFx0XHRcdGVsLmFjY2lkZW50YWwgPSAncXVhcnRlcnNoYXJwJztzdGF0ZSA9ICdwaXRjaCc7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gJ2ZsYXQyJykge1xuXHRcdFx0XHRcdFx0ZWwuYWNjaWRlbnRhbCA9ICdxdWFydGVyZmxhdCc7c3RhdGUgPSAncGl0Y2gnO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09ICdaZHVyYXRpb24nKSB7XG5cdFx0XHRcdFx0XHR2YXIgbnVtID0gdG9rZW5pemVyLmdldE51bWJlcihsaW5lLCBpbmRleCk7XG5cdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IG51bS5udW07XG5cdFx0XHRcdFx0XHRlbC5lbmRDaGFyID0gbnVtLmluZGV4O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHRcdH0gZWxzZSByZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLSc6XG5cdFx0XHRcdFx0aWYgKHN0YXRlID09PSAnc3RhcnRTbHVyJykge1xuXHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyLCBzbyBpdCBtdXN0IGhhdmUgYmVlbiBtZWFudCBmb3IgdGhlIHByZXZpb3VzIG5vdGUuIENvcnJlY3QgdGhhdCBoZXJlLlxuXHRcdFx0XHRcdFx0dHVuZS5hZGRUaWVUb0xhc3ROb3RlKCk7XG5cdFx0XHRcdFx0XHRlbC5lbmRUaWUgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09ICdvY3RhdmUnIHx8IHN0YXRlID09PSAnZHVyYXRpb24nIHx8IHN0YXRlID09PSAnZW5kX3NsdXInKSB7XG5cdFx0XHRcdFx0XHRlbC5zdGFydFRpZSA9IHt9O1xuXHRcdFx0XHRcdFx0aWYgKCFkdXJhdGlvblNldEJ5UHJldmlvdXNOb3RlICYmIGNhbkhhdmVCcm9rZW5SaHl0aG0pXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gJ2Jyb2tlbl9yaHl0aG0nO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFBlZWsgYWhlYWQgdG8gdGhlIG5leHQgY2hhcmFjdGVyLiBJZiBpdCBpcyBhIHNwYWNlLCB0aGVuIHdlIGhhdmUgYW4gZW5kIGJlYW0uXG5cdFx0XHRcdFx0XHRcdGlmICh0b2tlbml6ZXIuaXNXaGl0ZVNwYWNlKGxpbmUuY2hhckF0KGluZGV4ICsgMSkpKVxuXHRcdFx0XHRcdFx0XHRcdGFkZEVuZEJlYW0oZWwpO1xuXHRcdFx0XHRcdFx0XHRlbC5lbmRDaGFyID0gaW5kZXgrMTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09ICdicm9rZW5fcmh5dGhtJykge2VsLmVuZENoYXIgPSBpbmRleDtyZXR1cm4gZWw7fVxuXHRcdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJyAnOlxuXHRcdFx0XHRjYXNlICdcXHQnOlxuXHRcdFx0XHRcdGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge1xuXHRcdFx0XHRcdFx0ZWwuZW5kX2JlYW0gPSB0cnVlO1xuXHRcdFx0XHRcdFx0Ly8gbG9vayBhaGVhZCB0byBzZWUgaWYgdGhlcmUgaXMgYSB0aWVcblx0XHRcdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGluZGV4KSA9PT0gJy0nKVxuXHRcdFx0XHRcdFx0XHRcdGVsLnN0YXJ0VGllID0ge307XG5cdFx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHR9IHdoaWxlIChpbmRleCA8IGxpbmUubGVuZ3RoICYmICh0b2tlbml6ZXIuaXNXaGl0ZVNwYWNlKGxpbmUuY2hhckF0KGluZGV4KSkgfHwgbGluZS5jaGFyQXQoaW5kZXgpID09PSAnLScpKTtcblx0XHRcdFx0XHRcdGVsLmVuZENoYXIgPSBpbmRleDtcblx0XHRcdFx0XHRcdGlmICghZHVyYXRpb25TZXRCeVByZXZpb3VzTm90ZSAmJiBjYW5IYXZlQnJva2VuUmh5dGhtICYmIChsaW5lLmNoYXJBdChpbmRleCkgPT09ICc8JyB8fCBsaW5lLmNoYXJBdChpbmRleCkgPT09ICc+JykpIHtcdC8vIFRPRE8tUEVSOiBEb24ndCBuZWVkIHRoZSB0ZXN0IGZvciA8IGFuZCA+LCBidXQgdGhhdCBtYWtlcyB0aGUgZW5kQ2hhciB3b3JrIG91dCBmb3IgdGhlIHJlZ3Jlc3Npb24gdGVzdC5cblx0XHRcdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0XHRcdFx0c3RhdGUgPSAnYnJva2VuX3JoeXRobSc7XG5cdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHJldHVybiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICc+Jzpcblx0XHRcdFx0Y2FzZSAnPCc6XG5cdFx0XHRcdFx0aWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY2FuSGF2ZUJyb2tlblJoeXRobSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYnIyID0gZ2V0QnJva2VuUmh5dGhtKGxpbmUsIGluZGV4KTtcblx0XHRcdFx0XHRcdFx0aW5kZXggKz0gYnIyWzBdIC0gMTtcdC8vIGluZGV4IGdldHMgaW5jcmVtZW50ZWQgYmVsb3csIHNvIHdlJ2xsIGxldCB0aGF0IGhhcHBlblxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbiA9IGJyMlsyXTtcblx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBicjJbMV0qZWwuZHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gJ2VuZF9zbHVyJztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGVsLmVuZENoYXIgPSBpbmRleDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0aWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7XG5cdFx0XHRcdFx0XHRlbC5lbmRDaGFyID0gaW5kZXg7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0aW5kZXgrKztcblx0XHRcdGlmIChpbmRleCA9PT0gbGluZS5sZW5ndGgpIHtcblx0XHRcdFx0aWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7ZWwuZW5kQ2hhciA9IGluZGV4O3JldHVybiBlbDt9XG5cdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIHN0YXJ0TmV3TGluZSgpIHtcblx0XHR2YXIgcGFyYW1zID0geyBzdGFydENoYXI6IC0xLCBlbmRDaGFyOiAtMX07XG5cdFx0aWYgKG11bHRpbGluZVZhcnMucGFydEZvck5leHRMaW5lLnRpdGxlKVxuXHRcdFx0cGFyYW1zLnBhcnQgPSBtdWx0aWxpbmVWYXJzLnBhcnRGb3JOZXh0TGluZTtcblx0XHRwYXJhbXMuY2xlZiA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlICYmIG11bHRpbGluZVZhcnMuc3RhdmVzW211bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtXS5jbGVmICE9PSB1bmRlZmluZWQgPyBwYXJzZUNvbW1vbi5jbG9uZShtdWx0aWxpbmVWYXJzLnN0YXZlc1ttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZk51bV0uY2xlZikgOiBwYXJzZUNvbW1vbi5jbG9uZShtdWx0aWxpbmVWYXJzLmNsZWYpO1xuXHRcdHZhciBzY29yZVRyYW5zcG9zZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID8gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc2NvcmVUcmFuc3Bvc2UgOiAwO1xuXHRcdHBhcmFtcy5rZXkgPSBwYXJzZUtleVZvaWNlLnN0YW5kYXJkS2V5KG11bHRpbGluZVZhcnMua2V5LnJvb3QrbXVsdGlsaW5lVmFycy5rZXkuYWNjK211bHRpbGluZVZhcnMua2V5Lm1vZGUsIG11bHRpbGluZVZhcnMua2V5LnJvb3QsIG11bHRpbGluZVZhcnMua2V5LmFjYywgc2NvcmVUcmFuc3Bvc2UpO1xuXHRcdHBhcmFtcy5rZXkubW9kZSA9IG11bHRpbGluZVZhcnMua2V5Lm1vZGU7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscylcblx0XHRcdHBhcmFtcy5rZXkuaW1wbGllZE5hdHVyYWxzID0gbXVsdGlsaW5lVmFycy5rZXkuaW1wbGllZE5hdHVyYWxzO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmtleS5leHBsaWNpdEFjY2lkZW50YWxzKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgcGFyYW1zLmtleS5hY2NpZGVudGFscy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdGlmIChwYXJhbXMua2V5LmFjY2lkZW50YWxzW2pdLm5vdGUgPT09IG11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHNbaV0ubm90ZSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIG5vdGUgaXMgYWxyZWFkeSBpbiB0aGUgbGlzdCwgb3ZlcnJpZGUgaXQgd2l0aCB0aGUgbmV3IHZhbHVlXG5cdFx0XHRcdFx0XHRwYXJhbXMua2V5LmFjY2lkZW50YWxzW2pdLmFjYyA9IG11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHNbaV0uYWNjO1xuXHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWZvdW5kKVxuXHRcdFx0XHRcdHBhcmFtcy5rZXkuYWNjaWRlbnRhbHMucHVzaChtdWx0aWxpbmVWYXJzLmtleS5leHBsaWNpdEFjY2lkZW50YWxzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bXVsdGlsaW5lVmFycy50YXJnZXRLZXkgPSBwYXJhbXMua2V5O1xuXHRcdGlmIChwYXJhbXMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHMpXG5cdFx0XHRkZWxldGUgcGFyYW1zLmtleS5leHBsaWNpdEFjY2lkZW50YWxzO1xuXHRcdHBhcnNlS2V5Vm9pY2UuYWRkUG9zVG9LZXkocGFyYW1zLmNsZWYsIHBhcmFtcy5rZXkpO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLm1ldGVyICE9PSBudWxsKSB7XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UpIHtcblx0XHRcdFx0cGFyc2VDb21tb24uZWFjaChtdWx0aWxpbmVWYXJzLnN0YXZlcywgZnVuY3Rpb24oc3QpIHtcblx0XHRcdFx0XHRzdC5tZXRlciA9IG11bHRpbGluZVZhcnMubWV0ZXI7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRwYXJhbXMubWV0ZXIgPSBtdWx0aWxpbmVWYXJzLnN0YXZlc1ttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZk51bV0ubWV0ZXI7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuc3RhdmVzW211bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtXS5tZXRlciA9IG51bGw7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0cGFyYW1zLm1ldGVyID0gbXVsdGlsaW5lVmFycy5tZXRlcjtcblx0XHRcdG11bHRpbGluZVZhcnMubWV0ZXIgPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UgJiYgbXVsdGlsaW5lVmFycy5zdGF2ZXNbbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc3RhZmZOdW1dLm1ldGVyKSB7XG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBlYWNoIHZvaWNlIGdldHMgdGhlIG1ldGVyIG1hcmtpbmcuXG5cdFx0XHRwYXJhbXMubWV0ZXIgPSBtdWx0aWxpbmVWYXJzLnN0YXZlc1ttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZk51bV0ubWV0ZXI7XG5cdFx0XHRtdWx0aWxpbmVWYXJzLnN0YXZlc1ttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZk51bV0ubWV0ZXIgPSBudWxsO1xuXHRcdH1cblx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UgJiYgbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UubmFtZSlcblx0XHRcdHBhcmFtcy5uYW1lID0gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UubmFtZTtcblx0XHRpZiAobXVsdGlsaW5lVmFycy52b2NhbGZvbnQpXG5cdFx0XHRwYXJhbXMudm9jYWxmb250ID0gbXVsdGlsaW5lVmFycy52b2NhbGZvbnQ7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMudHJpcGxldGZvbnQpXG5cdFx0XHRwYXJhbXMudHJpcGxldGZvbnQgPSBtdWx0aWxpbmVWYXJzLnRyaXBsZXRmb250O1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLnN0eWxlKVxuXHRcdFx0cGFyYW1zLnN0eWxlID0gbXVsdGlsaW5lVmFycy5zdHlsZTtcblx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UpIHtcblx0XHRcdHZhciBzdGFmZiA9IG11bHRpbGluZVZhcnMuc3RhdmVzW211bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtXTtcblx0XHRcdGlmIChzdGFmZi5icmFjZSkgcGFyYW1zLmJyYWNlID0gc3RhZmYuYnJhY2U7XG5cdFx0XHRpZiAoc3RhZmYuYnJhY2tldCkgcGFyYW1zLmJyYWNrZXQgPSBzdGFmZi5icmFja2V0O1xuXHRcdFx0aWYgKHN0YWZmLmNvbm5lY3RCYXJMaW5lcykgcGFyYW1zLmNvbm5lY3RCYXJMaW5lcyA9IHN0YWZmLmNvbm5lY3RCYXJMaW5lcztcblx0XHRcdGlmIChzdGFmZi5uYW1lKSBwYXJhbXMubmFtZSA9IHN0YWZmLm5hbWVbbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UuaW5kZXhdO1xuXHRcdFx0aWYgKHN0YWZmLnN1Ym5hbWUpIHBhcmFtcy5zdWJuYW1lID0gc3RhZmYuc3VibmFtZVttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5pbmRleF07XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc3RlbSlcblx0XHRcdFx0cGFyYW1zLnN0ZW0gPSBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGVtO1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmbGluZXMpXG5cdFx0XHRcdHBhcmFtcy5zdGFmZmxpbmVzID0gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc3RhZmZsaW5lcztcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZnNjYWxlKVxuXHRcdFx0XHRwYXJhbXMuc3RhZmZzY2FsZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmc2NhbGU7XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc2NhbGUpXG5cdFx0XHRcdHBhcmFtcy5zY2FsZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnNjYWxlO1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0eWxlKVxuXHRcdFx0XHRwYXJhbXMuc3R5bGUgPSBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdHlsZTtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS50cmFuc3Bvc2UpXG5cdFx0XHRcdHBhcmFtcy5jbGVmLnRyYW5zcG9zZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnRyYW5zcG9zZTtcblx0XHR9XG5cdFx0dmFyIGlzRmlyc3RWb2ljZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID09PSB1bmRlZmluZWQgfHwgKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtID09PSAgMCAmJiBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5pbmRleCA9PT0gIDApO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmJhck51bWJlcnMgPT09IDAgJiYgaXNGaXJzdFZvaWNlICYmIG11bHRpbGluZVZhcnMuY3VyckJhck51bWJlciAhPT0gMSlcblx0XHRcdHBhcmFtcy5iYXJOdW1iZXIgPSBtdWx0aWxpbmVWYXJzLmN1cnJCYXJOdW1iZXI7XG5cdFx0dHVuZS5zdGFydE5ld0xpbmUocGFyYW1zKTtcblx0XHRpZiAobXVsdGlsaW5lVmFycy5rZXkuaW1wbGllZE5hdHVyYWxzKVxuXHRcdFx0ZGVsZXRlIG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscztcblxuXHRcdG11bHRpbGluZVZhcnMucGFydEZvck5leHRMaW5lID0ge307XG5cdH1cblxuXHR2YXIgbGV0dGVyX3RvX2dyYWNlID0gIGZ1bmN0aW9uKGxpbmUsIGkpIHtcblx0XHQvLyBHcmFjZSBub3RlcyBhcmUgYW4gYXJyYXkgb2Y6IHN0YXJ0c2x1ciwgbm90ZSwgZW5kc2x1ciwgc3BhY2U7IHdoZXJlIG5vdGUgaXMgYWNjaWRlbnRhbCwgcGl0Y2gsIGR1cmF0aW9uXG5cdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAneycpIHtcblx0XHRcdC8vIGZldGNoIHRoZSBncmFjZW5vdGVzIHN0cmluZyBhbmQgY29uc3VtZSB0aGF0IGludG8gdGhlIGFycmF5XG5cdFx0XHR2YXIgZ3JhID0gdG9rZW5pemVyLmdldEJyYWNrZXR0ZWRTdWJzdHJpbmcobGluZSwgaSwgMSwgJ30nKTtcblx0XHRcdGlmICghZ3JhWzJdKVxuXHRcdFx0XHR3YXJuKFwiTWlzc2luZyB0aGUgY2xvc2luZyAnfScgd2hpbGUgcGFyc2luZyBncmFjZSBub3RlXCIsIGxpbmUsIGkpO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBzbHVyIGFmdGVyIHRoZSBncmFjZSBjb25zdHJ1Y3Rpb24sIHRoZW4gbW92ZSBpdCB0byB0aGUgbGFzdCBub3RlIGluc2lkZSB0aGUgZ3JhY2UgY29uc3RydWN0aW9uXG5cdFx0XHRpZiAobGluZVtpK2dyYVswXV0gPT09ICcpJykge1xuXHRcdFx0XHRncmFbMF0rKztcblx0XHRcdFx0Z3JhWzFdICs9ICcpJztcblx0XHRcdH1cblxuXHRcdFx0dmFyIGdyYWNlbm90ZXMgPSBbXTtcblx0XHRcdHZhciBpaSA9IDA7XG5cdFx0XHR2YXIgaW5UaWUgPSBmYWxzZTtcblx0XHRcdHdoaWxlIChpaSA8IGdyYVsxXS5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGFjY2lhY2NhdHVyYSA9IGZhbHNlO1xuXHRcdFx0XHRpZiAoZ3JhWzFdLmNoYXJBdChpaSkgPT09ICcvJykge1xuXHRcdFx0XHRcdGFjY2lhY2NhdHVyYSA9IHRydWU7XG5cdFx0XHRcdFx0aWkrKztcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgbm90ZSA9IGdldENvcmVOb3RlKGdyYVsxXSwgaWksIHt9LCBmYWxzZSk7XG5cdFx0XHRcdGlmIChub3RlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0Ly8gVGhlIGdyYWNlIG5vdGUgZHVyYXRpb25zIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgdGhlIGRlZmF1bHQgbGVuZ3RoOiB0aGV5IHNob3VsZCBiZSBiYXNlZCBvbiAxLzE2LCBzbyBpZiB0aGF0IGlzbid0IHRoZSBkZWZhdWx0LCB0aGVuIG11bHRpcGx5IGhlcmUuXG5cdFx0XHRcdFx0bm90ZS5kdXJhdGlvbiA9IG5vdGUuZHVyYXRpb24gLyAobXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCAqIDgpO1xuXHRcdFx0XHRcdGlmIChhY2NpYWNjYXR1cmEpXG5cdFx0XHRcdFx0XHRub3RlLmFjY2lhY2NhdHVyYSA9IHRydWU7XG5cdFx0XHRcdFx0Z3JhY2Vub3Rlcy5wdXNoKG5vdGUpO1xuXG5cdFx0XHRcdFx0aWYgKGluVGllKSB7XG5cdFx0XHRcdFx0XHRub3RlLmVuZFRpZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRpblRpZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAobm90ZS5zdGFydFRpZSlcblx0XHRcdFx0XHRcdGluVGllID0gdHJ1ZTtcblxuXHRcdFx0XHRcdGlpICA9IG5vdGUuZW5kQ2hhcjtcblx0XHRcdFx0XHRkZWxldGUgbm90ZS5lbmRDaGFyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdC8vIFdlIHNob3VsZG4ndCBnZXQgYW55dGhpbmcgYnV0IG5vdGVzIG9yIGEgc3BhY2UgaGVyZSwgc28gcmVwb3J0IGFuIGVycm9yXG5cdFx0XHRcdFx0aWYgKGdyYVsxXS5jaGFyQXQoaWkpID09PSAnICcpIHtcblx0XHRcdFx0XHRcdGlmIChncmFjZW5vdGVzLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0XHRcdGdyYWNlbm90ZXNbZ3JhY2Vub3Rlcy5sZW5ndGgtMV0uZW5kX2JlYW0gPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0d2FybihcIlVua25vd24gY2hhcmFjdGVyICdcIiArIGdyYVsxXS5jaGFyQXQoaWkpICsgXCInIHdoaWxlIHBhcnNpbmcgZ3JhY2Ugbm90ZVwiLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRpaSsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ3JhY2Vub3Rlcy5sZW5ndGgpXG5cdFx0XHRcdHJldHVybiBbZ3JhWzBdLCBncmFjZW5vdGVzXTtcblx0XHR9XG5cdFx0cmV0dXJuIFsgMCBdO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGxldHRlcl90b19vdmVybGF5KGxpbmUsIGkpIHtcblx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICcmJykge1xuXHRcdFx0dmFyIHN0YXJ0ID0gaTtcblx0XHRcdHdoaWxlIChsaW5lLmNoYXJBdChpKSAmJiBsaW5lLmNoYXJBdChpKSAhPT0gJzonICYmIGxpbmUuY2hhckF0KGkpICE9PSAnfCcpXG5cdFx0XHRcdGkrKztcblx0XHRcdHJldHVybiBbIGktc3RhcnQsIGxpbmUuc3Vic3RyaW5nKHN0YXJ0KzEsIGkpIF07XG5cdFx0fVxuXHRcdHJldHVybiBbIDAgXTtcblx0fVxuXG5cdGZ1bmN0aW9uIGR1cmF0aW9uT2ZNZWFzdXJlKG11bHRpbGluZVZhcnMpIHtcblx0XHQvLyBUT0RPLVBFUjogVGhpcyBjb3VsZCBiZSBtb3JlIGNvbXBsaWNhdGVkIGlmIG9uZSBvZiB0aGUgdW51c3VhbCBtZWFzdXJlcyBpcyB1c2VkLlxuXHRcdHZhciBtZXRlciA9IG11bHRpbGluZVZhcnMub3JpZ01ldGVyO1xuXHRcdGlmICghbWV0ZXIgfHwgbWV0ZXIudHlwZSAhPT0gJ3NwZWNpZmllZCcpXG5cdFx0XHRyZXR1cm4gMTtcblx0XHRpZiAoIW1ldGVyLnZhbHVlIHx8IG1ldGVyLnZhbHVlLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiAxO1xuXHRcdHJldHVybiBwYXJzZUludChtZXRlci52YWx1ZVswXS5udW0sIDEwKSAvIHBhcnNlSW50KG1ldGVyLnZhbHVlWzBdLmRlbiwgMTApO1xuXHR9XG5cblx0Ly9cblx0Ly8gUGFyc2UgbGluZSBvZiBtdXNpY1xuXHQvL1xuXHQvLyBUaGlzIGlzIGEgc3RyZWFtIG9mIDwoYmFyLW1hcmtpbmd8aGVhZGVyfG5vdGUtZ3JvdXApLi4uPiBpbiBhbnkgb3JkZXIsIHdpdGggb3B0aW9uYWwgc3BhY2VzIGJldHdlZW4gZWFjaCBlbGVtZW50XG5cdC8vIGNvcmUtbm90ZSBpcyA8b3Blbi1zbHVyLCBhY2NpZGVudGFsLCBwaXRjaDpyZXF1aXJlZCwgb2N0YXZlLCBkdXJhdGlvbiwgY2xvc2Utc2x1ciZ8dGllPiB3aXRoIG5vIHNwYWNlcyB3aXRoaW4gdGhhdFxuXHQvLyBjaG9yZCBpcyA8b3Blbi1icmFja2V0OnJlcXVpcmVkLCBjb3JlLW5vdGU6cmVxdWlyZWQuLi4gY2xvc2UtYnJhY2tldDpyZXF1aXJlZCBkdXJhdGlvbj4gd2l0aCBubyBzcGFjZXMgd2l0aGluIHRoYXRcblx0Ly8gZ3JhY2Utbm90ZXMgaXMgPG9wZW4tYnJhY2U6cmVxdWlyZWQsIChvcGVuLXNsdXJ8Y29yZS1ub3RlOnJlcXVpcmVkfGNsb3NlLXNsdXIpLi4uLCBjbG9zZS1icmFjZTpyZXF1aXJlZD4gc3BhY2VzIGFyZSBhbGxvd2VkXG5cdC8vIG5vdGUtZ3JvdXAgaXMgPGdyYWNlLW5vdGVzLCBjaG9yZCBzeW1ib2xzJnxkZWNvcmF0aW9ucy4uLiwgZ3JhY2Utbm90ZXMsIHNsdXImfHRyaXBsZXQsIGNob3JkfGNvcmUtbm90ZSwgZW5kLXNsdXJ8dGllPiBzcGFjZXMgYXJlIGFsbG93ZWQgYmV0d2VlbiBpdGVtc1xuXHQvLyBiYXItbWFya2luZyBpcyA8YW1wZXJzYW5kPiBvciA8Y2hvcmQgc3ltYm9scyZ8ZGVjb3JhdGlvbnMuLi4sIGJhcjpyZXF1aXJlZD4gc3BhY2VzIGFsbG93ZWRcblx0Ly8gaGVhZGVyIGlzIDxvcGVuLWJyYWNrZXQ6cmVxdWlyZWQsIEt8TXxMfFY6cmVxdWlyZWQsIGNvbG9uOnJlcXVpcmVkLCBmaWVsZDpyZXF1aXJlZCwgY2xvc2UtYnJhY2tldDpyZXF1aXJlZD4gc3BhY2VzIGNhbiBvY2N1ciBiZXR3ZWVuIHRoZSBjb2xvbiwgaW4gdGhlIGZpZWxkLCBhbmQgYmVmb3JlIHRoZSBjbG9zZSBicmFja2V0XG5cdC8vIGhlYWRlciBjYW4gYWxzbyBiZSB0aGUgb25seSB0aGluZyBvbiBhIGxpbmUuIFRoaXMgaXMgdHJ1ZSBldmVuIGlmIGl0IGlzIGEgY29udGludWF0aW9uIGxpbmUuIEluIHRoaXMgY2FzZSB0aGUgYnJhY2tldHMgYXJlIG5vdCByZXF1aXJlZC5cblx0Ly8gYSBzcGFjZSBpcyBhIGJhY2stdGljaywgYSBzcGFjZSwgb3IgYSB0YWIuIElmIGl0IGlzIGEgYmFjay10aWNrLCB0aGVuIHRoZXJlIGlzIG5vIGVuZC1iZWFtLlxuXG5cdC8vIExpbmUgcHJlcHJvY2Vzc2luZzogYW55dGhpbmcgYWZ0ZXIgYSAlIGlzIGlnbm9yZWQgKHRoZSBkb3VibGUgJSUgc2hvdWxkIGhhdmUgYmVlbiB0YWtlbiBjYXJlIG9mIGJlZm9yZSB0aGlzKVxuXHQvLyBUaGVuLCBhbGwgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGFyZSBpZ25vcmVkLlxuXHQvLyBJZiB0aGVyZSB3YXMgYSBsaW5lIGNvbnRpbnVhdGlvbiwgdGhlIFxcbiB3YXMgcmVwbGFjZWQgYnkgYSBcXHIgYW5kIHRoZSBcXCB3YXMgcmVwbGFjZWQgYnkgYSBzcGFjZS4gVGhpcyBhbGxvd3MgdGhlIGNvbnN0cnVjdFxuXHQvLyBvZiBoYXZpbmcgYSBoZWFkZXIgbWlkLWxpbmUgY29uY2VwdHVhbGx5LCBidXQgYWN0dWFsbHkgYmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiBUaGlzIGlzIGVxdWl2b2xlbnQgdG8gcHV0dGluZyB0aGUgaGVhZGVyIGluIFsgXS5cblxuXHQvLyBUT0RPLVBFUjogSG93IHRvIGhhbmRsZSAhIGZvciBsaW5lIGJyZWFrP1xuXHQvLyBUT0RPLVBFUjogZG90cyBiZWZvcmUgYmFyLCBkb3RzIGJlZm9yZSBzbHVyXG5cdC8vIFRPRE8tUEVSOiBVOiByZWRlZmluYWJsZSBzeW1ib2xzLlxuXG5cdC8vIEFtYmlndW91cyBzeW1ib2xzOlxuXHQvLyBcIltcIiBjYW4gYmUgdGhlIHN0YXJ0IG9mIGEgY2hvcmQsIHRoZSBzdGFydCBvZiBhIGhlYWRlciBlbGVtZW50IG9yIHBhcnQgb2YgYSBiYXIgbGluZS5cblx0Ly8gLS0tIGlmIGl0IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwifFwiLCBpdCBpcyBhIGJhciBsaW5lXG5cdC8vIC0tLSBpZiBpdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBLOiBMOiBNOiBWOiBpdCBpcyBhIGhlYWRlciAobm90ZTogdGhlcmUgYXJlIG90aGVyIGhlYWRlcnMgbWVudGlvbmVkIGluIHRoZSBzdGFuZGFyZCwgYnV0IEknbSBub3Qgc3VyZSBob3cgdGhleSB3b3VsZCBiZSB1c2VkLilcblx0Ly8gLS0tIG90aGVyd2lzZSBpdCBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgY2hvcmRcblx0Ly8gXCIoXCIgY2FuIGJlIHRoZSBzdGFydCBvZiBhIHNsdXIgb3IgYSB0cmlwbGV0XG5cdC8vIC0tLSBpZiBpdCBpcyBmb2xsb3dlZCBieSBhIG51bWJlciBmcm9tIDItOSwgdGhlbiBpdCBpcyBhIHRyaXBsZXRcblx0Ly8gLS0tIG90aGVyd2lzZSBpdCBpcyBhIHNsdXJcblx0Ly8gXCJdXCJcblx0Ly8gLS0tIGlmIHRoZXJlIGlzIGEgY2hvcmQgb3BlbiwgdGhlbiB0aGlzIGlzIHRoZSBjbG9zZVxuXHQvLyAtLS0gaWYgaXQgaXMgYWZ0ZXIgYSBbfCwgdGhlbiBpdCBpcyBhbiBpbnZpc2libGUgYmFyIGxpbmVcblx0Ly8gLS0tIG90aGVyd2lzZSwgaXQgaXMgcGFyIG9mIGEgYmFyXG5cdC8vIFwiLlwiIGNhbiBiZSBhIGJhciBtb2RpZmllciBvciBhIHNsdXIgbW9kaWZpZXIsIG9yIGEgZGVjb3JhdGlvblxuXHQvLyAtLS0gaWYgaXQgY29tZXMgaW1tZWRpYXRlbHkgYmVmb3JlIGEgYmFyLCBpdCBpcyBhIGJhciBtb2RpZmllclxuXHQvLyAtLS0gaWYgaXQgY29tZXMgaW1tZWRpYXRlbHkgYmVmb3JlIGEgc2x1ciwgaXQgaXMgYSBzbHVyIG1vZGlmaWVyXG5cdC8vIC0tLSBvdGhlcndpc2UgaXQgaXMgYSBkZWNvcmF0aW9uIGZvciB0aGUgbmV4dCBub3RlLlxuXHQvLyBudW1iZXI6XG5cdC8vIC0tLSBpZiBpdCBpcyBhZnRlciBhIGJhciwgd2l0aCBubyBzcGFjZSwgaXQgaXMgYW4gZW5kaW5nIG1hcmtlclxuXHQvLyAtLS0gaWYgaXQgaXMgYWZ0ZXIgYSAoIHdpdGggbm8gc3BhY2UsIGl0IGlzIGEgdHJpcGxldCBjb3VudFxuXHQvLyAtLS0gaWYgaXQgaXMgYWZ0ZXIgYSBwaXRjaCBvciBvY3RhdmUgb3Igc2xhc2gsIHRoZW4gaXQgaXMgYSBkdXJhdGlvblxuXG5cdC8vIFVuYW1iaWd1b3VzIHN5bWJvbHMgKGV4Y2VwdCBpbnNpZGUgcXVvdGVkIHN0cmluZ3MpOlxuXHQvLyB2ZXJ0aWNhbC1iYXIsIGNvbG9uOiBwYXJ0IG9mIGEgYmFyXG5cdC8vIEFCQ0RFRkdhYmNkZWZnOiBwaXRjaFxuXHQvLyB4eXpaOiByZXN0XG5cdC8vIGNvbW1hLCBwcmltZTogb2N0YXZlXG5cdC8vIGNsb3NlLXBhcmVuOiBlbmQtc2x1clxuXHQvLyBoeXBoZW46IHRpZVxuXHQvLyB0aWxkZSwgdiwgdSwgYmFuZywgcGx1cywgVEhMTVBTTzogZGVjb3JhdGlvblxuXHQvLyBjYXJhdCwgdW5kZXJzY29yZSwgZXF1YWw6IGFjY2lkZW50YWxcblx0Ly8gYW1wZXJzYW5kOiB0aW1lIHJlc2V0XG5cdC8vIG9wZW4tY3VybHksIGNsb3NlLWN1cmx5OiBncmFjZSBub3Rlc1xuXHQvLyBkb3VibGUtcXVvdGU6IGNob3JkIHN5bWJvbFxuXHQvLyBsZXNzLXRoYW4sIGdyZWF0ZXItdGhhbiwgc2xhc2g6IGR1cmF0aW9uXG5cdC8vIGJhY2stdGljaywgc3BhY2UsIHRhYjogc3BhY2Vcblx0dmFyIG5vbkRlY29yYXRpb25zID0gXCJBQkNERUZHYWJjZGVmZ3h5elpbXXxeX3tcIjtcdC8vIHVzZSB0aGlzIHRvIHByZXNjcmVlbiBzbyB3ZSBkb24ndCBoYXZlIHRvIGxvb2sgZm9yIGEgZGVjb3JhdGlvbiBhdCBldmVyeSBub3RlLlxuXG5cdHZhciBwYXJzZVJlZ3VsYXJNdXNpY0xpbmUgPSBmdW5jdGlvbihsaW5lKSB7XG5cdFx0aGVhZGVyLnJlc29sdmVUZW1wbygpO1xuXHRcdC8vbXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1x0Ly8gVG8gbGF0ZSB0byBzZXQgdGhpcyBub3cuXG5cdFx0bXVsdGlsaW5lVmFycy5pc19pbl9oZWFkZXIgPSBmYWxzZTtcdC8vIFdlIHNob3VsZCBoYXZlIGdvdHRlbiBhIGtleSBoZWFkZXIgYnkgbm93LCBidXQganVzdCBpbiBjYXNlLCB0aGlzIGlzIGRlZmluaXRlbHkgb3V0IG9mIHRoZSBoZWFkZXIuXG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBzdGFydE9mTGluZSA9IG11bHRpbGluZVZhcnMuaUNoYXI7XG5cdFx0Ly8gc2VlIGlmIHRoZXJlIGlzIG5vdGhpbmcgYnV0IGEgY29tbWVudCBvbiB0aGlzIGxpbmUuIElmIHNvLCBqdXN0IGlnbm9yZSBpdC4gQSBmdWxsIGxpbmUgY29tbWVudCBpcyBvcHRpb25hbCB3aGl0ZSBzcGFjZSBmb2xsb3dlZCBieSAlXG5cdFx0d2hpbGUgKHRva2VuaXplci5pc1doaXRlU3BhY2UobGluZS5jaGFyQXQoaSkpICYmIGkgPCBsaW5lLmxlbmd0aClcblx0XHRcdGkrKztcblx0XHRpZiAoaSA9PT0gbGluZS5sZW5ndGggfHwgbGluZS5jaGFyQXQoaSkgPT09ICclJylcblx0XHRcdHJldHVybjtcblxuXHRcdC8vIFN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIHN0YWZmLCBjbGVmIGFuZCBrZXkgc3ltYm9scyBvbiBlYWNoIGxpbmVcblx0XHR2YXIgZGVsYXlTdGFydE5ld0xpbmUgPSBtdWx0aWxpbmVWYXJzLnN0YXJ0X25ld19saW5lO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmNvbnRpbnVlYWxsID09PSB1bmRlZmluZWQpXG5cdFx0XHRtdWx0aWxpbmVWYXJzLnN0YXJ0X25ld19saW5lID0gdHJ1ZTtcblx0XHRlbHNlXG5cdFx0XHRtdWx0aWxpbmVWYXJzLnN0YXJ0X25ld19saW5lID0gZmFsc2U7XG5cdFx0dmFyIHRyaXBsZXROb3Rlc0xlZnQgPSAwO1xuXG5cdFx0Ly8gU2VlIGlmIHRoZSBsaW5lIHN0YXJ0cyB3aXRoIGEgaGVhZGVyIGZpZWxkXG5cdFx0dmFyIHJldEhlYWRlciA9IGhlYWRlci5sZXR0ZXJfdG9fYm9keV9oZWFkZXIobGluZSwgaSk7XG5cdFx0aWYgKHJldEhlYWRlclswXSA+IDApIHtcblx0XHRcdGkgKz0gcmV0SGVhZGVyWzBdO1xuXHRcdFx0aWYgKHJldEhlYWRlclsxXSA9PT0gJ1YnKVxuXHRcdFx0XHRkZWxheVN0YXJ0TmV3TGluZSA9IHRydWU7IC8vIGZpeGVzIGJ1ZyBvbiB0aGlzOiBjW1Y6Ml1kXG5cdFx0XHQvLyBUT0RPLVBFUjogSGFuZGxlIGlubGluZSBoZWFkZXJzXG5cdFx0fVxuXHRcdHZhciBlbCA9IHsgfTtcblxuXHRcdHZhciBvdmVybGF5TGV2ZWwgPSAwO1xuXHRcdHdoaWxlIChpIDwgbGluZS5sZW5ndGgpXG5cdFx0e1xuXHRcdFx0dmFyIHN0YXJ0SSA9IGk7XG5cdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICclJylcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdHZhciByZXRJbmxpbmVIZWFkZXIgPSBoZWFkZXIubGV0dGVyX3RvX2lubGluZV9oZWFkZXIobGluZSwgaSk7XG5cdFx0XHRpZiAocmV0SW5saW5lSGVhZGVyWzBdID4gMCkge1xuXHRcdFx0XHRcdGkgKz0gcmV0SW5saW5lSGVhZGVyWzBdO1xuXHRcdFx0XHRcdGlmIChyZXRJbmxpbmVIZWFkZXJbMV0gPT09ICdWJylcblx0XHRcdFx0XHRcdGRlbGF5U3RhcnROZXdMaW5lID0gdHJ1ZTsgLy8gZml4ZXMgYnVnIG9uIHRoaXM6IGNbVjoyXWRcblx0XHRcdFx0XHQvLyBUT0RPLVBFUjogSGFuZGxlIGlubGluZSBoZWFkZXJzXG5cdFx0XHRcdFx0Ly9tdWx0aWxpbmVWYXJzLnN0YXJ0X25ld19saW5lID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXYWl0IHVudGlsIGhlcmUgdG8gYWN0dWFsbHkgc3RhcnQgdGhlIGxpbmUgYmVjYXVzZSB3ZSBrbm93IHdlJ3JlIHBhc3QgdGhlIGlubGluZSBzdGF0ZW1lbnRzLlxuXHRcdFx0XHRpZiAoZGVsYXlTdGFydE5ld0xpbmUpIHtcblx0XHRcdFx0XHRzdGFydE5ld0xpbmUoKTtcblx0XHRcdFx0XHRkZWxheVN0YXJ0TmV3TGluZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBkZWNpZGUgaWYgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBhIGJhci1tYXJraW5nIG9yIGEgbm90ZS1ncm91cC5cblx0XHRcdFx0Ly8gVW5mb3J0dW5hdGVseSwgdGhhdCBpcyBhbWJpZ3VvdXMuIEJvdGggY2FuIGNvbnRhaW4gY2hvcmQgc3ltYm9scyBhbmQgZGVjb3JhdGlvbnMuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgZ3JhY2Ugbm90ZSBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBjaG9yZCBzeW1ib2xzIGFuZCBkZWNvcmF0aW9ucywgdGhlbiBpdCBpcyBkZWZpbml0ZWx5IGEgbm90ZS1ncm91cC5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBiYXIgbWFya2VyLCBpdCBpcyBkZWZpbml0ZWx5IGEgYmFyLW1hcmtpbmcuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGVpdGhlciBhIGNvcmUtbm90ZSBvciBjaG9yZCwgaXQgaXMgZGVmaW5pdGVseSBhIG5vdGUtZ3JvdXAuXG5cdFx0XHRcdC8vIFNvLCBsb29wIHdoaWxlIHdlIGZpbmQgZ3JhY2Utbm90ZXMsIGNob3Jkcy1zeW1ib2xzLCBvciBkZWNvcmF0aW9ucy4gW0l0IGlzIGFuIGVycm9yIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBncmFjZS1ub3RlIGdyb3VwIGluIGEgcm93OyB0aGUgb3RoZXJzIGNhbiBiZSBtdWx0aXBsZV1cblx0XHRcdFx0Ly8gVGhlbiwgaWYgdGhlcmUgaXMgYSBncmFjZS1ub3RlLCB3ZSBrbm93IHdoZXJlIHRvIGdvLlxuXHRcdFx0XHQvLyBFbHNlIHNlZSBpZiB3ZSBoYXZlIGEgY2hvcmQsIGNvcmUtbm90ZSwgc2x1ciwgdHJpcGxldCwgb3IgYmFyLlxuXG5cdFx0XHRcdHZhciByZXQ7XG5cdFx0XHRcdHdoaWxlICgxKSB7XG5cdFx0XHRcdFx0cmV0ID0gdG9rZW5pemVyLmVhdFdoaXRlU3BhY2UobGluZSwgaSk7XG5cdFx0XHRcdFx0aWYgKHJldCA+IDApIHtcblx0XHRcdFx0XHRcdGkgKz0gcmV0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoaSA+IDAgJiYgbGluZS5jaGFyQXQoaS0xKSA9PT0gJ1xceDEyJykge1xuXHRcdFx0XHRcdFx0Ly8gdGhlcmUgaXMgb25lIGNhc2Ugd2hlcmUgYSBsaW5lIGNvbnRpbnVhdGlvbiBpc24ndCB0aGUgc2FtZSBhcyBiZWluZyBvbiB0aGUgc2FtZSBsaW5lLCBhbmQgdGhhdCBpcyBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgYWZ0ZXIgaXQgaXMgYSBoZWFkZXIuXG5cdFx0XHRcdFx0XHRyZXQgPSBoZWFkZXIubGV0dGVyX3RvX2JvZHlfaGVhZGVyKGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0aWYgKHJldFswXSA+IDApIHtcblx0XHRcdFx0XHRcdFx0aWYgKHJldFsxXSA9PT0gJ1YnKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0TmV3TGluZSgpOyAvLyBmaXhlcyBidWcgb24gdGhpczogY1xcXFxuVjoyXVxcXFxuZFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpbnNlcnQgaGVhZGVyIGhlcmVcblx0XHRcdFx0XHRcdFx0aSA9IHJldFswXTtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5zdGFydF9uZXdfbGluZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBnYXRoZXIgYWxsIHRoZSBncmFjZSBub3RlcywgY2hvcmQgc3ltYm9scyBhbmQgZGVjb3JhdGlvbnNcblx0XHRcdFx0XHRyZXQgPSBsZXR0ZXJfdG9fc3BhY2VyKGxpbmUsIGkpO1xuXHRcdFx0XHRcdGlmIChyZXRbMF0gPiAwKSB7XG5cdFx0XHRcdFx0XHRpICs9IHJldFswXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXQgPSBsZXR0ZXJfdG9fY2hvcmQobGluZSwgaSk7XG5cdFx0XHRcdFx0aWYgKHJldFswXSA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgY2hvcmQgaGVyZSBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IHBvc2l0aW9ucy5cblx0XHRcdFx0XHRcdC8vIElmIHR3byBjaG9yZHMgaGF2ZSB0aGUgc2FtZSBwb3NpdGlvbiwgdGhlbiBjb25uZWN0IHRoZW0gd2l0aCBuZXdsaW5lLlxuXHRcdFx0XHRcdFx0aWYgKCFlbC5jaG9yZClcblx0XHRcdFx0XHRcdFx0ZWwuY2hvcmQgPSBbXTtcblx0XHRcdFx0XHRcdHZhciBjaG9yZE5hbWUgPSB0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHJldFsxXSk7XG5cdFx0XHRcdFx0XHRjaG9yZE5hbWUgPSBjaG9yZE5hbWUucmVwbGFjZSgvOy9nLCBcIlxcblwiKTtcblx0XHRcdFx0XHRcdHZhciBhZGRlZENob3JkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBjaSA9IDA7IGNpIDwgZWwuY2hvcmQubGVuZ3RoOyBjaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChlbC5jaG9yZFtjaV0ucG9zaXRpb24gPT09IHJldFsyXSkge1xuXHRcdFx0XHRcdFx0XHRcdGFkZGVkQ2hvcmQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGVsLmNob3JkW2NpXS5uYW1lICs9IFwiXFxuXCIgKyBjaG9yZE5hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhZGRlZENob3JkID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAocmV0WzJdID09PSBudWxsICYmIHJldFszXSlcblx0XHRcdFx0XHRcdFx0XHRlbC5jaG9yZC5wdXNoKHtuYW1lOiBjaG9yZE5hbWUsIHJlbF9wb3NpdGlvbjogcmV0WzNdfSk7XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRlbC5jaG9yZC5wdXNoKHtuYW1lOiBjaG9yZE5hbWUsIHBvc2l0aW9uOiByZXRbMl19KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aSArPSByZXRbMF07XG5cdFx0XHRcdFx0XHR2YXIgaWkgPSB0b2tlbml6ZXIuc2tpcFdoaXRlU3BhY2UobGluZS5zdWJzdHJpbmcoaSkpO1xuXHRcdFx0XHRcdFx0aWYgKGlpID4gMClcblx0XHRcdFx0XHRcdFx0ZWwuZm9yY2VfZW5kX2JlYW1fbGFzdCA9IHRydWU7XG5cdFx0XHRcdFx0XHRpICs9IGlpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAobm9uRGVjb3JhdGlvbnMuaW5kZXhPZihsaW5lLmNoYXJBdChpKSkgPT09IC0xKVxuXHRcdFx0XHRcdFx0XHRyZXQgPSBsZXR0ZXJfdG9fYWNjZW50KGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0ZWxzZSByZXQgPSBbIDAgXTtcblx0XHRcdFx0XHRcdGlmIChyZXRbMF0gPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChyZXRbMV0gPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaSArIDEgPCBsaW5lLmxlbmd0aClcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0TmV3TGluZSgpO1x0Ly8gVGhlcmUgd2FzIGEgISBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsaW5lLiBTdGFydCBhIG5ldyBsaW5lIGlmIHRoZXJlIGlzIGFueXRoaW5nIGFmdGVyIGl0LlxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHJldFsxXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJldFsxXS5pbmRleE9mKFwic3R5bGU9XCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5zdHlsZSA9IHJldFsxXS5zdWJzdHIoNik7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbC5kZWNvcmF0aW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmRlY29yYXRpb24gPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmRlY29yYXRpb24ucHVzaChyZXRbMV0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpICs9IHJldFswXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldCA9IGxldHRlcl90b19ncmFjZShsaW5lLCBpKTtcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IEJlIHN1cmUgdGhlcmUgYXJlbid0IGFscmVhZHkgZ3JhY2Ugbm90ZXMgZGVmaW5lZC4gVGhhdCBpcyBhbiBlcnJvci5cblx0XHRcdFx0XHRcdFx0aWYgKHJldFswXSA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRlbC5ncmFjZW5vdGVzID0gcmV0WzFdO1xuXHRcdFx0XHRcdFx0XHRcdGkgKz0gcmV0WzBdO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXQgPSBsZXR0ZXJfdG9fYmFyKGxpbmUsIGkpO1xuXHRcdFx0XHRpZiAocmV0WzBdID4gMCkge1xuXHRcdFx0XHRcdC8vIFRoaXMgaXMgZGVmaW5pdGVseSBhIGJhclxuXHRcdFx0XHRcdG92ZXJsYXlMZXZlbCA9IDA7XG5cdFx0XHRcdFx0aWYgKGVsLmdyYWNlbm90ZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gQXR0YWNoIHRoZSBncmFjZSBub3RlIHRvIGFuIGludmlzaWJsZSBub3RlXG5cdFx0XHRcdFx0XHRlbC5yZXN0ID0geyB0eXBlOiAnc3BhY2VyJyB9O1xuXHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSAwLjEyNTsgLy8gVE9ETy1QRVI6IEkgZG9uJ3QgdGhpbmsgdGhlIGR1cmF0aW9uIG9mIHRoaXMgbWF0dGVycyBtdWNoLCBidXQgZmlndXJlIG91dCBpZiBpdCBkb2VzLlxuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5hZGRGb3JtYXR0aW5nT3B0aW9ucyhlbCwgdHVuZS5mb3JtYXR0aW5nLCAnbm90ZScpO1xuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRFbGVtZW50KCdub3RlJywgc3RhcnRPZkxpbmUraSwgc3RhcnRPZkxpbmUraStyZXRbMF0sIGVsKTtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMubWVhc3VyZU5vdEVtcHR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGVsID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBiYXIgPSB7dHlwZTogcmV0WzFdfTtcblx0XHRcdFx0XHRpZiAoYmFyLnR5cGUubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRcdFx0d2FybihcIlVua25vd24gYmFyIHR5cGVcIiwgbGluZSwgaSk7XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5pbkVuZGluZyAmJiBiYXIudHlwZSAhPT0gJ2Jhcl90aGluJykge1xuXHRcdFx0XHRcdFx0XHRiYXIuZW5kRW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5pbkVuZGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHJldFsyXSkge1xuXHRcdFx0XHRcdFx0XHRiYXIuc3RhcnRFbmRpbmcgPSByZXRbMl07XG5cdFx0XHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmluRW5kaW5nKVxuXHRcdFx0XHRcdFx0XHRcdGJhci5lbmRFbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmluRW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChlbC5kZWNvcmF0aW9uICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdGJhci5kZWNvcmF0aW9uID0gZWwuZGVjb3JhdGlvbjtcblx0XHRcdFx0XHRcdGlmIChlbC5jaG9yZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHRiYXIuY2hvcmQgPSBlbC5jaG9yZDtcblx0XHRcdFx0XHRcdGlmIChiYXIuc3RhcnRFbmRpbmcgJiYgbXVsdGlsaW5lVmFycy5iYXJGaXJzdEVuZGluZ051bSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmJhckZpcnN0RW5kaW5nTnVtID0gbXVsdGlsaW5lVmFycy5jdXJyQmFyTnVtYmVyO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoYmFyLnN0YXJ0RW5kaW5nICYmIGJhci5lbmRFbmRpbmcgJiYgbXVsdGlsaW5lVmFycy5iYXJGaXJzdEVuZGluZ051bSlcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jdXJyQmFyTnVtYmVyID0gbXVsdGlsaW5lVmFycy5iYXJGaXJzdEVuZGluZ051bTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKGJhci5lbmRFbmRpbmcpXG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuYmFyRmlyc3RFbmRpbmdOdW0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRpZiAoYmFyLnR5cGUgIT09ICdiYXJfaW52aXNpYmxlJyAmJiBtdWx0aWxpbmVWYXJzLm1lYXN1cmVOb3RFbXB0eSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgaXNGaXJzdFZvaWNlID0gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UgPT09IHVuZGVmaW5lZCB8fCAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc3RhZmZOdW0gPT09ICAwICYmIG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLmluZGV4ID09PSAgMCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0ZpcnN0Vm9pY2UpIHtcblx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmN1cnJCYXJOdW1iZXIrKztcblx0XHRcdFx0XHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5iYXJOdW1iZXJzICYmIG11bHRpbGluZVZhcnMuY3VyckJhck51bWJlciAlIG11bHRpbGluZVZhcnMuYmFyTnVtYmVycyA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRcdGJhci5iYXJOdW1iZXIgPSBtdWx0aWxpbmVWYXJzLmN1cnJCYXJOdW1iZXI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuYWRkRm9ybWF0dGluZ09wdGlvbnMoZWwsIHR1bmUuZm9ybWF0dGluZywgJ2JhcicpO1xuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRFbGVtZW50KCdiYXInLCBzdGFydE9mTGluZStpLCBzdGFydE9mTGluZStpK3JldFswXSwgYmFyKTtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMubWVhc3VyZU5vdEVtcHR5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRlbCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpICs9IHJldFswXTtcblx0XHRcdFx0XHR2YXIgY3YgPSBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZSA/IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtICsgJy0nICsgbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UuaW5kZXggOiAnT05MWSc7XG5cdFx0XHRcdFx0Ly8gaWYgKG11bHRpbGluZVZhcnMubGluZUJyZWFrcykge1xuXHRcdFx0XHRcdC8vIFx0aWYgKCFtdWx0aWxpbmVWYXJzLmJhckNvdW50ZXJbY3ZdKVxuXHRcdFx0XHRcdC8vIFx0XHRtdWx0aWxpbmVWYXJzLmJhckNvdW50ZXJbY3ZdID0gMDtcblx0XHRcdFx0XHQvLyBcdHZhciBicmVha05vdyA9IG11bHRpbGluZVZhcnMubGluZUJyZWFrc1snJyttdWx0aWxpbmVWYXJzLmJhckNvdW50ZXJbY3ZdXTtcblx0XHRcdFx0XHQvLyBcdG11bHRpbGluZVZhcnMuYmFyQ291bnRlcltjdl0rKztcblx0XHRcdFx0XHQvLyBcdGlmIChicmVha05vdylcblx0XHRcdFx0XHQvLyBcdFx0c3RhcnROZXdMaW5lKCk7XG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHR9IGVsc2UgaWYgKGxpbmVbaV0gPT09ICcmJykge1x0Ly8gYmFja3RyYWNrIHRvIGJlZ2lubmluZyBvZiBtZWFzdXJlXG5cdFx0XHRcdFx0cmV0ID0gbGV0dGVyX3RvX292ZXJsYXkobGluZSwgaSk7XG5cdFx0XHRcdFx0aWYgKHJldFswXSA+IDApIHtcblx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kRWxlbWVudCgnb3ZlcmxheScsIHN0YXJ0T2ZMaW5lLCBzdGFydE9mTGluZSsxLCB7fSk7XG5cdFx0XHRcdFx0XHRpICs9IDE7XG5cdFx0XHRcdFx0XHRvdmVybGF5TGV2ZWwrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUaGlzIGlzIGRlZmluaXRlbHkgYSBub3RlIGdyb3VwXG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHQvLyBMb29rIGZvciBhcyBtYW55IG9wZW4gc2x1cnMgYW5kIHRyaXBsZXRzIGFzIHRoZXJlIGFyZS4gKE5vdGU6IG9ubHkgdGhlIGZpcnN0IHRyaXBsZXQgaXMgdmFsaWQuKVxuXHRcdFx0XHRcdHJldCA9IGxldHRlcl90b19vcGVuX3NsdXJzX2FuZF90cmlwbGV0cyhsaW5lLCBpKTtcblx0XHRcdFx0XHRpZiAocmV0LmNvbnN1bWVkID4gMCkge1xuXHRcdFx0XHRcdFx0aWYgKHJldC5zdGFydFNsdXIgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdFx0ZWwuc3RhcnRTbHVyID0gcmV0LnN0YXJ0U2x1cjtcblx0XHRcdFx0XHRcdGlmIChyZXQudHJpcGxldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0cmlwbGV0Tm90ZXNMZWZ0ID4gMClcblx0XHRcdFx0XHRcdFx0XHR3YXJuKFwiQ2FuJ3QgbmVzdCB0cmlwbGV0c1wiLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWwuc3RhcnRUcmlwbGV0ID0gcmV0LnRyaXBsZXQ7XG5cdFx0XHRcdFx0XHRcdFx0ZWwudHJpcGxldE11bHRpcGxpZXIgPSByZXQudHJpcGxldFEgLyByZXQudHJpcGxldDtcblx0XHRcdFx0XHRcdFx0XHR0cmlwbGV0Tm90ZXNMZWZ0ID0gcmV0Lm51bV9ub3RlcyA9PT0gdW5kZWZpbmVkID8gcmV0LnRyaXBsZXQgOiByZXQubnVtX25vdGVzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpICs9IHJldC5jb25zdW1lZDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBoYW5kbGUgY2hvcmRzLlxuXHRcdFx0XHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJ1snKSB7XG5cdFx0XHRcdFx0XHR2YXIgY2hvcmRTdGFydENoYXIgPSBpO1xuXHRcdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHRcdFx0dmFyIGNob3JkRHVyYXRpb24gPSBudWxsO1xuXHRcdFx0XHRcdFx0dmFyIHJlbWVtYmVyRW5kQmVhbSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0XHR2YXIgZG9uZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCFkb25lKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhY2NlbnQgPSBsZXR0ZXJfdG9fYWNjZW50KGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWNjZW50WzBdID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGkgKz0gYWNjZW50WzBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dmFyIGNob3JkTm90ZSA9IGdldENvcmVOb3RlKGxpbmUsIGksIHt9LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChjaG9yZE5vdGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYWNjZW50WzBdID4gMCkgeyAvLyBJZiB3ZSBmb3VuZCBhIGRlY29yYXRpb24gYWJvdmUsIGl0IG1vZGlmaWVzIHRoZSBlbnRpcmUgY2hvcmQuIFwic3R5bGVcIiBpcyBoYW5kbGVkIGJlbG93LlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFjY2VudFsxXS5pbmRleE9mKFwic3R5bGU9XCIpICE9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbC5kZWNvcmF0aW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZGVjb3JhdGlvbiA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5kZWNvcmF0aW9uLnB1c2goYWNjZW50WzFdKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNob3JkTm90ZS5lbmRfYmVhbSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuZW5kX2JlYW0gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGNob3JkTm90ZS5lbmRfYmVhbTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsLnBpdGNoZXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBjaG9yZE5vdGUuZHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5waXRjaGVzID0gWyBjaG9yZE5vdGUgXTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2VcdC8vIEp1c3QgaWdub3JlIHRoZSBub3RlIGxlbmd0aHMgb2YgYWxsIGJ1dCB0aGUgZmlyc3Qgbm90ZS4gVGhlIHN0YW5kYXJkIGlzbid0IGNsZWFyIGhlcmUsIGJ1dCB0aGlzIHNlZW1zIGxlc3MgY29uZnVzaW5nLlxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlcy5wdXNoKGNob3JkTm90ZSk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGNob3JkTm90ZS5kdXJhdGlvbjtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYWNjZW50WzBdID4gMCkgeyAvLyBJZiB3ZSBmb3VuZCBhIHN0eWxlIGFib3ZlLCBpdCBtb2RpZmllcyB0aGUgaW5kaXZpZHVhbCBwaXRjaCwgbm90IHRoZSBlbnRpcmUgY2hvcmQuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWNjZW50WzFdLmluZGV4T2YoXCJzdHlsZT1cIikgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlc1tlbC5waXRjaGVzLmxlbmd0aC0xXS5zdHlsZSA9IGFjY2VudFsxXS5zdWJzdHIoNik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuaW5UaWVDaG9yZFtlbC5waXRjaGVzLmxlbmd0aF0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNob3JkTm90ZS5lbmRUaWUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5pblRpZUNob3JkW2VsLnBpdGNoZXMubGVuZ3RoXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNob3JkTm90ZS5zdGFydFRpZSlcblx0XHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuaW5UaWVDaG9yZFtlbC5waXRjaGVzLmxlbmd0aF0gPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHRcdFx0aSAgPSBjaG9yZE5vdGUuZW5kQ2hhcjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgY2hvcmROb3RlLmVuZENoYXI7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAobGluZS5jaGFyQXQoaSkgPT09ICcgJykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFNwYWNlcyBhcmUgbm90IGFsbG93ZWQgaW4gY2hvcmRzLCBidXQgd2UgY2FuIHJlY292ZXIgZnJvbSBpdCBieSBpZ25vcmluZyBpdC5cblx0XHRcdFx0XHRcdFx0XHR3YXJuKFwiU3BhY2VzIGFyZSBub3QgYWxsb3dlZCBpbiBjaG9yZHNcIiwgbGluZSwgaSk7XG5cdFx0XHRcdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChpIDwgbGluZS5sZW5ndGggJiYgbGluZS5jaGFyQXQoaSkgPT09ICddJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc3VtZSB0aGUgY2xvc2UgYnJhY2tldFxuXHRcdFx0XHRcdFx0XHRcdFx0aSsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5uZXh0X25vdGVfZHVyYXRpb24gIT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBlbC5kdXJhdGlvbiAqIG11bHRpbGluZVZhcnMubmV4dF9ub3RlX2R1cmF0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbiA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpc0luVGllKG11bHRpbGluZVZhcnMsICBvdmVybGF5TGV2ZWwsIGVsKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGVsLnBpdGNoZXMsIGZ1bmN0aW9uKHBpdGNoKSB7IHBpdGNoLmVuZFRpZSA9IHRydWU7IH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRJc0luVGllKG11bHRpbGluZVZhcnMsICBvdmVybGF5TGV2ZWwsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRyaXBsZXROb3Rlc0xlZnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyaXBsZXROb3Rlc0xlZnQtLTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRyaXBsZXROb3Rlc0xlZnQgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5lbmRUcmlwbGV0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcG9zdENob3JkRG9uZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGkgPCBsaW5lLmxlbmd0aCAmJiAhcG9zdENob3JkRG9uZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnICc6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnXFx0Jzpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFkZEVuZEJlYW0oZWwpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnKSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWwuZW5kU2x1ciA9PT0gdW5kZWZpbmVkKSBlbC5lbmRTbHVyID0gMTsgZWxzZSBlbC5lbmRTbHVyKys7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlICctJzpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goZWwucGl0Y2hlcywgZnVuY3Rpb24ocGl0Y2gpIHsgcGl0Y2guc3RhcnRUaWUgPSB7fTsgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRJc0luVGllKG11bHRpbGluZVZhcnMsICBvdmVybGF5TGV2ZWwsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnPic6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnPCc6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYnIyID0gZ2V0QnJva2VuUmh5dGhtKGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aSArPSBicjJbMF0gLSAxO1x0Ly8gaW5kZXggZ2V0cyBpbmNyZW1lbnRlZCBiZWxvdywgc28gd2UnbGwgbGV0IHRoYXQgaGFwcGVuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbiA9IGJyMlsyXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjaG9yZER1cmF0aW9uKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaG9yZER1cmF0aW9uID0gY2hvcmREdXJhdGlvbiAqIGJyMlsxXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hvcmREdXJhdGlvbiA9IGJyMlsxXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzMnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzQnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzYnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzcnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzgnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzknOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJy8nOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGZyYWN0aW9uID0gdG9rZW5pemVyLmdldEZyYWN0aW9uKGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hvcmREdXJhdGlvbiA9IGZyYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aSA9IGZyYWN0aW9uLmluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAnICcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbWVtYmVyRW5kQmVhbSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICctJyB8fCBsaW5lLmNoYXJBdChpKSA9PT0gJyknIHx8IGxpbmUuY2hhckF0KGkpID09PSAnICcgfHwgbGluZS5jaGFyQXQoaSkgPT09ICc8JyB8fCBsaW5lLmNoYXJBdChpKSA9PT0gJz4nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpLS07IC8vIFN1YnRyYWN0aW5nIG9uZSBiZWNhdXNlIG9uZSBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIGJlbG93XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBvc3RDaG9yZERvbmUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBvc3RDaG9yZERvbmUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFwb3N0Q2hvcmREb25lKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgJ10nIHRvIGVuZCB0aGUgY2hvcmRzXCIsIGxpbmUsIGkpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsLnBpdGNoZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNob3JkRHVyYXRpb24gIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBlbC5kdXJhdGlvbiAqIGNob3JkRHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZW1lbWJlckVuZEJlYW0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWRkRW5kQmVhbShlbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuYWRkRm9ybWF0dGluZ09wdGlvbnMoZWwsIHR1bmUuZm9ybWF0dGluZywgJ25vdGUnKTtcblx0XHRcdFx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kRWxlbWVudCgnbm90ZScsIHN0YXJ0T2ZMaW5lK2Nob3JkU3RhcnRDaGFyLCBzdGFydE9mTGluZStpLCBlbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm1lYXN1cmVOb3RFbXB0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbCA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkb25lID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFNpbmdsZSBwaXRjaFxuXHRcdFx0XHRcdFx0dmFyIGVsMiA9IHt9O1xuXHRcdFx0XHRcdFx0dmFyIGNvcmUgPSBnZXRDb3JlTm90ZShsaW5lLCBpLCBlbDIsIHRydWUpO1xuXHRcdFx0XHRcdFx0aWYgKGVsMi5lbmRUaWUgIT09IHVuZGVmaW5lZCkgc2V0SXNJblRpZShtdWx0aWxpbmVWYXJzLCAgb3ZlcmxheUxldmVsLCB0cnVlKTtcblx0XHRcdFx0XHRcdGlmIChjb3JlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjb3JlLnBpdGNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRlbC5waXRjaGVzID0gWyB7IH0gXTtcblx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPLVBFUjogc3RyYWlnaHRlbiB0aGlzIG91dCBzbyB0aGVyZSBpcyBub3Qgc28gbXVjaCBjb3B5aW5nOiBnZXRDb3JlTm90ZSBzaG91bGRuJ3QgY2hhbmdlIGUnXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuYWNjaWRlbnRhbCAhPT0gdW5kZWZpbmVkKSBlbC5waXRjaGVzWzBdLmFjY2lkZW50YWwgPSBjb3JlLmFjY2lkZW50YWw7XG5cdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlc1swXS5waXRjaCA9IGNvcmUucGl0Y2g7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNvcmUubWlkaXBpdGNoKVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlc1swXS5taWRpcGl0Y2ggPSBjb3JlLm1pZGlwaXRjaDtcblx0XHRcdFx0XHRcdFx0XHRpZiAoY29yZS5lbmRTbHVyICE9PSB1bmRlZmluZWQpIGVsLnBpdGNoZXNbMF0uZW5kU2x1ciA9IGNvcmUuZW5kU2x1cjtcblx0XHRcdFx0XHRcdFx0XHRpZiAoY29yZS5lbmRUaWUgIT09IHVuZGVmaW5lZCkgZWwucGl0Y2hlc1swXS5lbmRUaWUgPSBjb3JlLmVuZFRpZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoY29yZS5zdGFydFNsdXIgIT09IHVuZGVmaW5lZCkgZWwucGl0Y2hlc1swXS5zdGFydFNsdXIgPSBjb3JlLnN0YXJ0U2x1cjtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZWwuc3RhcnRTbHVyICE9PSB1bmRlZmluZWQpIGVsLnBpdGNoZXNbMF0uc3RhcnRTbHVyID0gZWwuc3RhcnRTbHVyO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChjb3JlLnN0YXJ0VGllICE9PSB1bmRlZmluZWQpIGVsLnBpdGNoZXNbMF0uc3RhcnRUaWUgPSBjb3JlLnN0YXJ0VGllO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbC5zdGFydFRpZSAhPT0gdW5kZWZpbmVkKSBlbC5waXRjaGVzWzBdLnN0YXJ0VGllID0gZWwuc3RhcnRUaWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWwucmVzdCA9IGNvcmUucmVzdDtcblx0XHRcdFx0XHRcdFx0XHRpZiAoY29yZS5lbmRTbHVyICE9PSB1bmRlZmluZWQpIGVsLmVuZFNsdXIgPSBjb3JlLmVuZFNsdXI7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuZW5kVGllICE9PSB1bmRlZmluZWQpIGVsLnJlc3QuZW5kVGllID0gY29yZS5lbmRUaWU7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuc3RhcnRTbHVyICE9PSB1bmRlZmluZWQpIGVsLnN0YXJ0U2x1ciA9IGNvcmUuc3RhcnRTbHVyO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChjb3JlLnN0YXJ0VGllICE9PSB1bmRlZmluZWQpIGVsLnJlc3Quc3RhcnRUaWUgPSBjb3JlLnN0YXJ0VGllO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbC5zdGFydFRpZSAhPT0gdW5kZWZpbmVkKSBlbC5yZXN0LnN0YXJ0VGllID0gZWwuc3RhcnRUaWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoY29yZS5jaG9yZCAhPT0gdW5kZWZpbmVkKSBlbC5jaG9yZCA9IGNvcmUuY2hvcmQ7XG5cdFx0XHRcdFx0XHRcdGlmIChjb3JlLmR1cmF0aW9uICE9PSB1bmRlZmluZWQpIGVsLmR1cmF0aW9uID0gY29yZS5kdXJhdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuZGVjb3JhdGlvbiAhPT0gdW5kZWZpbmVkKSBlbC5kZWNvcmF0aW9uID0gY29yZS5kZWNvcmF0aW9uO1xuXHRcdFx0XHRcdFx0XHRpZiAoY29yZS5ncmFjZU5vdGVzICE9PSB1bmRlZmluZWQpIGVsLmdyYWNlTm90ZXMgPSBjb3JlLmdyYWNlTm90ZXM7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5zdGFydFNsdXI7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0luVGllKG11bHRpbGluZVZhcnMsICBvdmVybGF5TGV2ZWwsIGVsKSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbC5waXRjaGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLnBpdGNoZXNbMF0uZW5kVGllID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsLnJlc3QudHlwZSAhPT0gJ3NwYWNlcicpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLnJlc3QuZW5kVGllID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0c2V0SXNJblRpZShtdWx0aWxpbmVWYXJzLCAgb3ZlcmxheUxldmVsLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuc3RhcnRUaWUgfHwgZWwuc3RhcnRUaWUpXG5cdFx0XHRcdFx0XHRcdFx0c2V0SXNJblRpZShtdWx0aWxpbmVWYXJzLCAgb3ZlcmxheUxldmVsLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0aSAgPSBjb3JlLmVuZENoYXI7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHRyaXBsZXROb3Rlc0xlZnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dHJpcGxldE5vdGVzTGVmdC0tO1xuXHRcdFx0XHRcdFx0XHRcdGlmICh0cmlwbGV0Tm90ZXNMZWZ0ID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5lbmRUcmlwbGV0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoY29yZS5lbmRfYmVhbSlcblx0XHRcdFx0XHRcdFx0XHRhZGRFbmRCZWFtKGVsKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIHdob2xlIHJlc3QsIHRoZW4gaXQgc2hvdWxkIGJlIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWVhc3VyZSwgbm90IGl0J3Mgb3duIGR1cmF0aW9uLiBXZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSBpdC5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHRpbWUgc2lnbmF0dXJlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNC80LCB0aG91Z2gsIHRoZW4gYSB3aG9sZSByZXN0IGhhcyBubyBzcGVjaWFsIHRyZWF0bWVudC5cblx0XHRcdFx0XHRcdFx0aWYgKGVsLnJlc3QgJiYgZWwucmVzdC50eXBlID09PSAncmVzdCcgJiYgZWwuZHVyYXRpb24gPT09IDEgJiYgZHVyYXRpb25PZk1lYXN1cmUobXVsdGlsaW5lVmFycykgPD0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGVsLnJlc3QudHlwZSA9ICd3aG9sZSc7XG5cblx0XHRcdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IGR1cmF0aW9uT2ZNZWFzdXJlKG11bHRpbGluZVZhcnMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5hZGRGb3JtYXR0aW5nT3B0aW9ucyhlbCwgdHVuZS5mb3JtYXR0aW5nLCAnbm90ZScpO1xuXHRcdFx0XHRcdFx0XHR0dW5lLmFwcGVuZEVsZW1lbnQoJ25vdGUnLCBzdGFydE9mTGluZStzdGFydEksIHN0YXJ0T2ZMaW5lK2ksIGVsKTtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5tZWFzdXJlTm90RW1wdHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRlbCA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpID09PSBzdGFydEkpIHtcdC8vIGRvbid0IGtub3cgd2hhdCB0aGlzIGlzLCBzbyBpZ25vcmUgaXQuXG5cdFx0XHRcdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgIT09ICcgJyAmJiBsaW5lLmNoYXJBdChpKSAhPT0gJ2AnKVxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiVW5rbm93biBjaGFyYWN0ZXIgaWdub3JlZFwiLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRcdGkrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGlzSW5UaWUgPSBmdW5jdGlvbihtdWx0aWxpbmVWYXJzLCBvdmVybGF5TGV2ZWwsIGVsKSB7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMuaW5UaWVbb3ZlcmxheUxldmVsXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdC8vIElmIHRoaXMgaXMgc2luZ2xlIHZvaWNlIG11c2ljIHRoZW4gdGhlIHZvaWNlIGluZGV4IGlzbid0IHNldCwgc28gd2UgdXNlIHRoZSBmaXJzdCB2b2ljZS5cblx0XHR2YXIgdm9pY2VJbmRleCA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID8gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UuaW5kZXggOiAwO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmluVGllW292ZXJsYXlMZXZlbF1bdm9pY2VJbmRleF0pIHtcblx0XHRcdGlmIChlbC5waXRjaGVzICE9PSB1bmRlZmluZWQgfHwgZWwucmVzdC50eXBlICE9PSAnc3BhY2VyJylcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHR2YXIgc2V0SXNJblRpZSA9ZnVuY3Rpb24obXVsdGlsaW5lVmFycywgb3ZlcmxheUxldmVsLCB2YWx1ZSkge1xuXHRcdC8vIElmIHRoaXMgaXMgc2luZ2xlIHZvaWNlIG11c2ljIHRoZW4gdGhlIHZvaWNlIGluZGV4IGlzbid0IHNldCwgc28gd2UgdXNlIHRoZSBmaXJzdCB2b2ljZS5cblx0XHR2YXIgdm9pY2VJbmRleCA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID8gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UuaW5kZXggOiAwO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmluVGllW292ZXJsYXlMZXZlbF0gPT09IHVuZGVmaW5lZClcblx0XHRcdG11bHRpbGluZVZhcnMuaW5UaWVbb3ZlcmxheUxldmVsXSA9IFtdO1xuXHRcdG11bHRpbGluZVZhcnMuaW5UaWVbb3ZlcmxheUxldmVsXVt2b2ljZUluZGV4XSA9IHZhbHVlO1xuXHR9O1xuXG5cdHZhciBwYXJzZUxpbmUgPSBmdW5jdGlvbihsaW5lKSB7XG5cdFx0dmFyIHJldCA9IGhlYWRlci5wYXJzZUhlYWRlcihsaW5lKTtcblx0XHRpZiAocmV0LnJlZ3VsYXIpXG5cdFx0XHRwYXJzZVJlZ3VsYXJNdXNpY0xpbmUocmV0LnN0cik7XG5cdFx0aWYgKHJldC5uZXdsaW5lKVxuXHRcdFx0c3RhcnROZXdMaW5lKCk7XG5cdFx0aWYgKHJldC53b3Jkcylcblx0XHRcdGFkZFdvcmRzKHR1bmUuZ2V0Q3VycmVudFZvaWNlKCksIGxpbmUuc3Vic3RyaW5nKDIpKTtcblx0XHRpZiAocmV0LnN5bWJvbHMpXG5cdFx0XHRhZGRTeW1ib2xzKHR1bmUuZ2V0Q3VycmVudFZvaWNlKCksIGxpbmUuc3Vic3RyaW5nKDIpKTtcblx0XHRpZiAocmV0LnJlY3Vyc2UpXG5cdFx0XHRwYXJzZUxpbmUocmV0LnN0cik7XG5cdH07XG5cblx0ZnVuY3Rpb24gYXBwZW5kTGFzdE1lYXN1cmUodm9pY2UsIG5leHRWb2ljZSkge1xuXHRcdHZvaWNlLnB1c2goe1xuXHRcdFx0ZWxfdHlwZTogJ2hpbnQnXG5cdFx0fSk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Vm9pY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBlbGVtZW50ID0gbmV4dFZvaWNlW2ldO1xuXHRcdFx0dmFyIGhpbnQgPSBwYXJzZUNvbW1vbi5jbG9uZShlbGVtZW50KTtcblx0XHRcdHZvaWNlLnB1c2goaGludCk7XG5cdFx0XHRpZiAoZWxlbWVudC5lbF90eXBlID09PSAnYmFyJylcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYWRkSGludE1lYXN1cmUoc3RhZmYsIG5leHRTdGFmZikge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RhZmYubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBzdGF2ZSA9IHN0YWZmW2ldO1xuXHRcdFx0dmFyIG5leHRTdGF2ZSA9IG5leHRTdGFmZltpXTtcblx0XHRcdGlmIChuZXh0U3RhdmUpIHsgLy8gQmUgc3VyZSB0aGVyZSBpcyB0aGUgc2FtZSBudW1iZXIgb2Ygc3RhdmVzIG9uIHRoZSBuZXh0IGxpbmUuXG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgbmV4dFN0YXZlLnZvaWNlcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdHZhciBuZXh0Vm9pY2UgPSBuZXh0U3RhdmUudm9pY2VzW2pdO1xuXHRcdFx0XHRcdHZhciB2b2ljZSA9IHN0YXZlLnZvaWNlc1tqXTtcblx0XHRcdFx0XHRpZiAodm9pY2UpIHsgLy8gQmUgc3VyZSB0aGVyZSBhcmUgdGhlIHNhbWUgbnVtYmVyIG9mIHZvaWNlcyBvbiB0aGUgcHJldmlvdXMgbGluZS5cblx0XHRcdFx0XHRcdGFwcGVuZExhc3RNZWFzdXJlKHZvaWNlLCBuZXh0Vm9pY2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFkZEhpbnRNZWFzdXJlcygpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHR1bmUubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBsaW5lID0gdHVuZS5saW5lc1tpXS5zdGFmZjtcblx0XHRcdGlmIChsaW5lKSB7XG5cdFx0XHRcdHZhciBqID0gaSsxO1xuXHRcdFx0XHR3aGlsZSAoaiA8IHR1bmUubGluZXMubGVuZ3RoICYmIHR1bmUubGluZXNbal0uc3RhZmYgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdGlmIChqIDwgdHVuZS5saW5lcy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgbmV4dExpbmUgPSB0dW5lLmxpbmVzW2pdLnN0YWZmO1xuXHRcdFx0XHRcdGFkZEhpbnRNZWFzdXJlKGxpbmUsIG5leHRMaW5lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMucGFyc2UgPSBmdW5jdGlvbihzdHJUdW5lLCBzd2l0Y2hlcywgc3RhcnRQb3MpIHtcblx0XHQvLyB0aGUgc3dpdGNoZXMgYXJlIG9wdGlvbmFsIGFuZCBjYXVzZSBhIGRpZmZlcmVuY2UgaW4gdGhlIHdheSB0aGUgdHVuZSBpcyBwYXJzZWQuXG5cdFx0Ly8gc3dpdGNoZXMuaGVhZGVyX29ubHkgOiBzdG9wIHBhcnNpbmcgd2hlbiB0aGUgaGVhZGVyIGlzIGZpbmlzaGVkXG5cdFx0Ly8gc3dpdGNoZXMuc3RvcF9vbl93YXJuaW5nIDogc3RvcCBhdCB0aGUgZmlyc3Qgd2FybmluZyBlbmNvdW50ZXJlZC5cblx0XHQvLyBzd2l0Y2hlcy5wcmludDogZm9ybWF0IGZvciB0aGUgcGFnZSBpbnN0ZWFkIG9mIHRoZSBicm93c2VyLlxuXHRcdC8vIHN3aXRjaGVzLmZvcm1hdDogYSBoYXNoIG9mIHRoZSBkZXNpcmVkIGZvcm1hdHRpbmcgY29tbWFuZHMuXG5cdFx0Ly8gc3dpdGNoZXMuaGludF9tZWFzdXJlczogcHV0IHRoZSBuZXh0IG1lYXN1cmUgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLlxuXHRcdC8vIHN3aXRjaGVzLnRyYW5zcG9zZTogY2hhbmdlIHRoZSBrZXkgc2lnbmF0dXJlLCBjaG9yZHMsIGFuZCBub3RlcyBieSBhIG51bWJlciBvZiBoYWxmLXN0ZXBzLlxuXHRcdGlmICghc3dpdGNoZXMpIHN3aXRjaGVzID0ge307XG5cdFx0aWYgKCFzdGFydFBvcykgc3RhcnRQb3MgPSAwO1xuXHRcdHR1bmUucmVzZXQoKTtcblx0XHRpZiAoc3dpdGNoZXMucHJpbnQpXG5cdFx0XHR0dW5lLm1lZGlhID0gJ3ByaW50Jztcblx0XHRtdWx0aWxpbmVWYXJzLnJlc2V0KCk7XG5cdFx0bXVsdGlsaW5lVmFycy5pQ2hhciA9IHN0YXJ0UG9zO1xuXHRcdGlmIChzd2l0Y2hlcy52aXN1YWxUcmFuc3Bvc2UpIHtcblx0XHRcdG11bHRpbGluZVZhcnMuZ2xvYmFsVHJhbnNwb3NlID0gcGFyc2VJbnQoc3dpdGNoZXMudmlzdWFsVHJhbnNwb3NlKTtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmdsb2JhbFRyYW5zcG9zZSA9PT0gMClcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5nbG9iYWxUcmFuc3Bvc2UgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlXG5cdFx0XHRtdWx0aWxpbmVWYXJzLmdsb2JhbFRyYW5zcG9zZSA9IHVuZGVmaW5lZDtcblx0XHRpZiAoc3dpdGNoZXMubGluZUJyZWFrcykge1xuXHRcdFx0Ly8gY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIHRoZSBsaW5lIGJyZWFrcyBmb3IgZWFzeSB0ZXN0aW5nLlxuXHRcdFx0Ly8gVGhlIGxpbmUgYnJlYWsgbnVtYmVycyBhcmUgMC1iYXNlZCBhbmQgdGhleSByZWZsZWN0IHRoZSBsYXN0IG1lYXN1cmUgb2YgdGhlIGN1cnJlbnQgbGluZS5cblx0XHRcdG11bHRpbGluZVZhcnMubGluZUJyZWFrcyA9IHt9O1xuXHRcdFx0Ly9tdWx0aWxpbmVWYXJzLmNvbnRpbnVlYWxsID0gdHJ1ZTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3dpdGNoZXMubGluZUJyZWFrcy5sZW5ndGg7IGkrKylcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5saW5lQnJlYWtzWycnKyhzd2l0Y2hlcy5saW5lQnJlYWtzW2ldKzEpXSA9IHRydWU7IC8vIEFkZCAxIHNvIHRoYXQgdGhlIGxpbmUgYnJlYWsgaXMgdGhlIGZpcnN0IG1lYXN1cmUgb2YgdGhlIG5leHQgbGluZS5cblx0XHR9XG5cdFx0aGVhZGVyLnJlc2V0KHRva2VuaXplciwgd2FybiwgbXVsdGlsaW5lVmFycywgdHVuZSk7XG5cblx0XHQvLyBUYWtlIGNhcmUgb2Ygd2hhdGV2ZXIgbGluZSBlbmRpbmdzIGNvbWUgb3VyIHdheVxuXHRcdHN0clR1bmUgPSBwYXJzZUNvbW1vbi5nc3ViKHN0clR1bmUsICdcXHJcXG4nLCAnXFxuJyk7XG5cdFx0c3RyVHVuZSA9IHBhcnNlQ29tbW9uLmdzdWIoc3RyVHVuZSwgJ1xccicsICdcXG4nKTtcblx0XHRzdHJUdW5lICs9ICdcXG4nO1x0Ly8gVGFja2VkIG9uIHRlbXBvcmFyaWx5IHRvIG1ha2UgdGhlIGxhc3QgbGluZSBjb250aW51YXRpb24gd29ya1xuXHRcdHN0clR1bmUgPSBzdHJUdW5lLnJlcGxhY2UoL1xcblxcXFwuKlxcbi9nLCBcIlxcblwiKTtcdC8vIGdldCByaWQgb2YgbGF0ZXggY29tbWFuZHMuXG5cdFx0dmFyIGNvbnRpbnVhdGlvblJlcGxhY2VtZW50ID0gZnVuY3Rpb24oYWxsLCBiYWNrc2xhc2gsIGNvbW1lbnQpe1xuXHRcdFx0dmFyIHNwYWNlcyA9IFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjtcblx0XHRcdHZhciBwYWRkaW5nID0gY29tbWVudCA/IHNwYWNlcy5zdWJzdHJpbmcoMCwgY29tbWVudC5sZW5ndGgpIDogXCJcIjtcblx0XHRcdHJldHVybiBiYWNrc2xhc2ggKyBcIiBcXHgxMlwiICsgcGFkZGluZztcblx0XHR9O1xuXHRcdHN0clR1bmUgPSBzdHJUdW5lLnJlcGxhY2UoL1xcXFwoWyBcXHRdKikoJS4qKSpcXG4vZywgY29udGludWF0aW9uUmVwbGFjZW1lbnQpO1x0Ly8gdGFrZSBjYXJlIG9mIGxpbmUgY29udGludWF0aW9ucyByaWdodCBhd2F5LCBidXQga2VlcCB0aGUgc2FtZSBudW1iZXIgb2YgY2hhcmFjdGVyc1xuXHRcdHZhciBsaW5lcyA9IHN0clR1bmUuc3BsaXQoJ1xcbicpO1xuXHRcdGlmIChwYXJzZUNvbW1vbi5sYXN0KGxpbmVzKS5sZW5ndGggPT09IDApXHQvLyByZW1vdmUgdGhlIGJsYW5rIGxpbmUgd2UgYWRkZWQgYWJvdmUuXG5cdFx0XHRsaW5lcy5wb3AoKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHN3aXRjaGVzLmZvcm1hdCkge1xuXHRcdFx0XHRwYXJzZURpcmVjdGl2ZS5nbG9iYWxGb3JtYXR0aW5nKHN3aXRjaGVzLmZvcm1hdCk7XG5cdFx0XHR9XG5cdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGxpbmVzLCAgZnVuY3Rpb24obGluZSkge1xuXHRcdFx0XHRpZiAoc3dpdGNoZXMuaGVhZGVyX29ubHkgJiYgbXVsdGlsaW5lVmFycy5pc19pbl9oZWFkZXIgPT09IGZhbHNlKVxuXHRcdFx0XHRcdHRocm93IFwibm9ybWFsX2Fib3J0XCI7XG5cdFx0XHRcdGlmIChzd2l0Y2hlcy5zdG9wX29uX3dhcm5pbmcgJiYgbXVsdGlsaW5lVmFycy53YXJuaW5ncylcblx0XHRcdFx0XHR0aHJvdyBcIm5vcm1hbF9hYm9ydFwiO1xuXHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5pc19pbl9oaXN0b3J5KSB7XG5cdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KDEpID09PSAnOicpIHtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuaXNfaW5faGlzdG9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0cGFyc2VMaW5lKGxpbmUpO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0dHVuZS5hZGRNZXRhVGV4dChcImhpc3RvcnlcIiwgdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUpKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAobXVsdGlsaW5lVmFycy5pblRleHRCbG9jaykge1xuXHRcdFx0XHRcdGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKGxpbmUsIFwiJSVlbmR0ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHQvL3R1bmUuYWRkTWV0YVRleHQoXCJ0ZXh0QmxvY2tcIiwgbXVsdGlsaW5lVmFycy50ZXh0QmxvY2spO1xuXHRcdFx0XHRcdFx0dHVuZS5hZGRUZXh0KG11bHRpbGluZVZhcnMudGV4dEJsb2NrKTtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuaW5UZXh0QmxvY2sgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChsaW5lLCBcIiUlXCIpKVxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnRleHRCbG9jayArPSAnICcgKyBsaW5lLnN1YnN0cmluZygyKTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy50ZXh0QmxvY2sgKz0gJyAnICsgbGluZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAobXVsdGlsaW5lVmFycy5pblBzQmxvY2spIHtcblx0XHRcdFx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChsaW5lLCBcIiUlZW5kcHNcIikpIHtcblx0XHRcdFx0XHRcdC8vIEp1c3QgaWdub3JlIHBvc3RzY3JpcHRcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuaW5Qc0Jsb2NrID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMudGV4dEJsb2NrICs9ICcgJyArIGxpbmU7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdHBhcnNlTGluZShsaW5lKTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5pQ2hhciArPSBsaW5lLmxlbmd0aCArIDE7XG5cdFx0XHR9KTtcblx0XHRcdHZhciBwaCA9IDExKjcyO1xuXHRcdFx0dmFyIHBsID0gOC41KjcyO1xuXHRcdFx0c3dpdGNoIChtdWx0aWxpbmVWYXJzLnBhcGVyc2l6ZSkge1xuXHRcdFx0XHQvL2Nhc2UgXCJsZXR0ZXJcIjogcGggPSAxMSo3MjsgcGwgPSA4LjUqNzI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwibGVnYWxcIjogcGggPSAxNCo3MjsgcGwgPSA4LjUqNzI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiQTRcIjogcGggPSAxMS43KjcyOyBwbCA9IDguMyo3MjsgYnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5sYW5kc2NhcGUpIHtcblx0XHRcdFx0dmFyIHggPSBwaDtcblx0XHRcdFx0cGggPSBwbDtcblx0XHRcdFx0cGwgPSB4O1xuXHRcdFx0fVxuXHRcdFx0bXVsdGlsaW5lVmFycy5vcGVuU2x1cnMgPSB0dW5lLmNsZWFuVXAocGwsIHBoLCBtdWx0aWxpbmVWYXJzLmJhcnNwZXJzdGFmZiwgbXVsdGlsaW5lVmFycy5zdGFmZm5vbm90ZSwgbXVsdGlsaW5lVmFycy5vcGVuU2x1cnMpO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0aWYgKGVyciAhPT0gXCJub3JtYWxfYWJvcnRcIilcblx0XHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0XHRpZiAoc3dpdGNoZXMuaGludF9tZWFzdXJlcykge1xuXHRcdFx0YWRkSGludE1lYXN1cmVzKCk7XG5cdFx0fVxuXG5cdFx0d3JhcC53cmFwTGluZXModHVuZSwgbXVsdGlsaW5lVmFycy5saW5lQnJlYWtzKTtcblx0fTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyc2U7XG4iLCIvLyAgICBhYmNfdHVuZWJvb2suanM6IHNwbGl0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgQUJDIE11c2ljIE5vdGF0aW9uIGludG8gaW5kaXZpZHVhbCB0dW5lcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IFBhdWwgUm9zZW4gKHBhdWwgYXQgcGF1bHJvc2VuIGRvdCBuZXQpXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8qZ2xvYmFsIGRvY3VtZW50ICovXG4vKmdsb2JhbCB3aW5kb3csIEFCQ0pTLCBjb25zb2xlICovXG5cbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19jb21tb24nKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19wYXJzZScpO1xuXG52YXIgdHVuZWJvb2sgPSB7fTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR0dW5lYm9vay5udW1iZXJPZlR1bmVzID0gZnVuY3Rpb24oYWJjKSB7XG5cdFx0dmFyIHR1bmVzID0gYWJjLnNwbGl0KFwiXFxuWDpcIik7XG5cdFx0dmFyIG51bSA9IHR1bmVzLmxlbmd0aDtcblx0XHRpZiAobnVtID09PSAwKSBudW0gPSAxO1xuXHRcdHJldHVybiBudW07XG5cdH07XG5cblx0dmFyIFR1bmVCb29rID0gdHVuZWJvb2suVHVuZUJvb2sgPSBmdW5jdGlvbihib29rKSB7XG5cdFx0dmFyIFRoaXMgPSB0aGlzO1xuXHRcdHZhciBkaXJlY3RpdmVzID0gXCJcIjtcblx0XHRib29rID0gcGFyc2VDb21tb24uc3RyaXAoYm9vayk7XG5cdFx0dmFyIHR1bmVzID0gYm9vay5zcGxpdChcIlxcblg6XCIpO1xuXHRcdGZvciAodmFyIGkgPSAxOyBpIDwgdHVuZXMubGVuZ3RoOyBpKyspXHQvLyBQdXQgYmFjayB0aGUgWDogdGhhdCB3ZSBsb3N0IHdoZW4gc3BsaXR0aW5nIHRoZSB0dW5lcy5cblx0XHRcdHR1bmVzW2ldID0gXCJYOlwiICsgdHVuZXNbaV07XG5cdFx0Ly8gS2VlcCB0cmFjayBvZiB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGVhY2ggdHVuZSBzdGFydHMgd2l0aC5cblx0XHR2YXIgcG9zID0gMDtcblx0XHRUaGlzLnR1bmVzID0gW107XG5cdFx0cGFyc2VDb21tb24uZWFjaCh0dW5lcywgZnVuY3Rpb24odHVuZSkge1xuXHRcdFx0VGhpcy50dW5lcy5wdXNoKHsgYWJjOiB0dW5lLCBzdGFydFBvczogcG9zfSk7XG5cdFx0XHRwb3MgKz0gdHVuZS5sZW5ndGggKyAxOyAvLyBXZSBhbHNvIGxvc3QgYSBuZXdsaW5lIHdoZW4gc3BsaXR0aW5nLCBzbyBjb3VudCB0aGF0LlxuXHRcdH0pO1xuXHRcdGlmIChUaGlzLnR1bmVzLmxlbmd0aCA+IDEgJiYgIXBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoVGhpcy50dW5lc1swXS5hYmMsICdYOicpKSB7XHQvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSB0dW5lLCB0aGUgWDogbWlnaHQgYmUgbWlzc2luZywgb3RoZXJ3aXNlIGFzc3VtZSB0aGUgdG9wIG9mIHRoZSBmaWxlIGlzIFwiaW50ZXJ0dW5lXCJcblx0XHRcdC8vIFRoZXJlIGNvdWxkIGJlIGZpbGUtd2lkZSBkaXJlY3RpdmVzIGluIHRoaXMsIGlmIHNvLCB3ZSBuZWVkIHRvIGluc2VydCBpdCBpbnRvIGVhY2ggdHVuZS4gV2UgY2FuIHByb2JhYmx5IGdldCBhd2F5IHdpdGhcblx0XHRcdC8vIGp1c3QgbG9va2luZyBmb3IgZmlsZS13aWRlIGRpcmVjdGl2ZXMgaGVyZSAoYmVmb3JlIHRoZSBmaXJzdCB0dW5lKSBhbmQgaW5zZXJ0aW5nIHRoZW0gYXQgdGhlIGJvdHRvbSBvZiBlYWNoIHR1bmUsIHNpbmNlXG5cdFx0XHQvLyB0aGUgdHVuZSBpcyBwYXJzZWQgYWxsIGF0IG9uY2UuIFRoZSBkaXJlY3RpdmVzIHdpbGwgYmUgc2VlbiBiZWZvcmUgdGhlIGVuZ3JhdmVyIGJlZ2lucyBwcm9jZXNzaW5nLlxuXHRcdFx0dmFyIGRpciA9IFRoaXMudHVuZXMuc2hpZnQoKTtcblx0XHRcdHZhciBhcnJEaXIgPSBkaXIuYWJjLnNwbGl0KCdcXG4nKTtcblx0XHRcdHBhcnNlQ29tbW9uLmVhY2goYXJyRGlyLCBmdW5jdGlvbihsaW5lKSB7XG5cdFx0XHRcdGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKGxpbmUsICclJScpKVxuXHRcdFx0XHRcdGRpcmVjdGl2ZXMgKz0gbGluZSArICdcXG4nO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdFRoaXMuaGVhZGVyID0gZGlyZWN0aXZlcztcblxuXHRcdC8vIE5vdywgdGhlIHR1bmUgZW5kcyBhdCBhIGJsYW5rIGxpbmUsIHNvIHRydW5jYXRlIGl0IGlmIG5lZWRlZC4gVGhlcmUgbWF5IGJlIFwiaW50ZXJ0dW5lXCIgc3R1ZmYuXG5cdFx0cGFyc2VDb21tb24uZWFjaChUaGlzLnR1bmVzLCBmdW5jdGlvbih0dW5lKSB7XG5cdFx0XHR2YXIgZW5kID0gdHVuZS5hYmMuaW5kZXhPZignXFxuXFxuJyk7XG5cdFx0XHRpZiAoZW5kID4gMClcblx0XHRcdFx0dHVuZS5hYmMgPSB0dW5lLmFiYy5zdWJzdHJpbmcoMCwgZW5kKTtcblx0XHRcdHR1bmUucHVyZSA9IHR1bmUuYWJjO1xuXHRcdFx0dHVuZS5hYmMgPSBkaXJlY3RpdmVzICsgdHVuZS5hYmM7XG5cblx0XHRcdC8vIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlLCBwYXJzZSBhbmQgc3RvcmUgdGhlIHRpdGxlIHNlcGFyYXRlbHkuIFRoZSB0aXRsZSBpcyBiZXR3ZWVuIHRoZSBmaXJzdCBUOiBhbmQgdGhlIG5leHQgXFxuXG5cdFx0XHR2YXIgdGl0bGUgPSB0dW5lLnB1cmUuc3BsaXQoXCJUOlwiKTtcblx0XHRcdGlmICh0aXRsZS5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdHRpdGxlID0gdGl0bGVbMV0uc3BsaXQoXCJcXG5cIik7XG5cdFx0XHRcdHR1bmUudGl0bGUgPSB0aXRsZVswXS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0dHVuZS50aXRsZSA9IFwiXCI7XG5cblx0XHRcdC8vIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlLCBwYXJzZSBhbmQgc3RvcmUgdGhlIGlkIHNlcGFyYXRlbHkuIFRoZSBpZCBpcyBiZXR3ZWVuIHRoZSBmaXJzdCBYOiBhbmQgdGhlIG5leHQgXFxuXG5cdFx0XHR2YXIgaWQgPSB0dW5lLnB1cmUuc3Vic3RyaW5nKDIsIHR1bmUucHVyZS5pbmRleE9mKFwiXFxuXCIpKTtcblx0XHRcdHR1bmUuaWQgPSBpZC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdFx0fSk7XG5cdH07XG5cblx0VHVuZUJvb2sucHJvdG90eXBlLmdldFR1bmVCeUlkID0gZnVuY3Rpb24oaWQpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHVuZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLnR1bmVzW2ldLmlkID09PSAnJytpZClcblx0XHRcdFx0cmV0dXJuIHRoaXMudHVuZXNbaV07XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdFR1bmVCb29rLnByb3RvdHlwZS5nZXRUdW5lQnlUaXRsZSA9IGZ1bmN0aW9uKHRpdGxlKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnR1bmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy50dW5lc1tpXS50aXRsZSA9PT0gdGl0bGUpXG5cdFx0XHRcdHJldHVybiB0aGlzLnR1bmVzW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHR0dW5lYm9vay5wYXJzZU9ubHkgPSBmdW5jdGlvbihhYmMsIHBhcmFtcykge1xuXHRcdHZhciB0dW5lcyA9IFtdO1xuXHRcdHZhciBudW1UdW5lcyA9IHR1bmVib29rLm51bWJlck9mVHVuZXMoYWJjKTtcblxuXHRcdC8vIHRoaXMganVzdCBuZWVkcyB0byBiZSBwYXNzZWQgaW4gYmVjYXVzZSB0aGlzIHRlbGxzIHRoZSBlbmdpbmUgaG93IG1hbnkgdHVuZXMgdG8gcHJvY2Vzcy5cblx0XHR2YXIgb3V0cHV0ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1UdW5lczsgaSsrKSB7XG5cdFx0XHRvdXRwdXQucHVzaCgxKTtcblx0XHR9XG5cdFx0ZnVuY3Rpb24gY2FsbGJhY2soKSB7XG5cdFx0XHQvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHBhcnNlZCB0dW5lcy5cblx0XHR9XG5cdFx0cmV0dXJuIHR1bmVib29rLnJlbmRlckVuZ2luZShjYWxsYmFjaywgb3V0cHV0LCBhYmMsIHBhcmFtcyk7XG5cdH07XG5cblx0dHVuZWJvb2sucmVuZGVyRW5naW5lID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBvdXRwdXQsIGFiYywgcGFyYW1zKSB7XG5cdFx0dmFyIHJldCA9IFtdO1xuXHRcdHZhciBpc0FycmF5ID0gZnVuY3Rpb24odGVzdE9iamVjdCkge1xuXHRcdFx0cmV0dXJuIHRlc3RPYmplY3QgJiYgISh0ZXN0T2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlKCdsZW5ndGgnKSkgJiYgdHlwZW9mIHRlc3RPYmplY3QgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0ZXN0T2JqZWN0Lmxlbmd0aCA9PT0gJ251bWJlcic7XG5cdFx0fTtcblxuXHRcdC8vIGNoZWNrIGFuZCBub3JtYWxpemUgaW5wdXQgcGFyYW1ldGVyc1xuXHRcdGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCB8fCBhYmMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblx0XHRpZiAoIWlzQXJyYXkob3V0cHV0KSlcblx0XHRcdG91dHB1dCA9IFsgb3V0cHV0IF07XG5cdFx0aWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cGFyYW1zID0ge307XG5cdFx0dmFyIGN1cnJlbnRUdW5lID0gcGFyYW1zLnN0YXJ0aW5nVHVuZSA/IHBhcnNlSW50KHBhcmFtcy5zdGFydGluZ1R1bmUsIDEwKSA6IDA7XG5cblx0XHQvLyBwYXJzZSB0aGUgYWJjIHN0cmluZ1xuXHRcdHZhciBib29rID0gbmV3IFR1bmVCb29rKGFiYyk7XG5cdFx0dmFyIGFiY1BhcnNlciA9IG5ldyBQYXJzZSgpO1xuXG5cdFx0Ly8gb3V0cHV0IGVhY2ggdHVuZSwgaWYgaXQgZXhpc3RzLiBPdGhlcndpc2UgY2xlYXIgdGhlIGRpdi5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGRpdiA9IG91dHB1dFtpXTtcblx0XHRcdGlmIChkaXYgPT09IFwiKlwiKSB7XG5cdFx0XHRcdC8vIFRoaXMgaXMgZm9yIFwiaGVhZGxlc3NcIiByZW5kZXJpbmc6IGRvaW5nIHRoZSB3b3JrIGJ1dCBub3Qgc2hvd2luZyB0aGUgc3ZnLlxuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YoZGl2KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0ZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2KTtcblx0XHRcdGlmIChkaXYpIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRUdW5lID49IDAgJiYgY3VycmVudFR1bmUgPCBib29rLnR1bmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGFiY1BhcnNlci5wYXJzZShib29rLnR1bmVzW2N1cnJlbnRUdW5lXS5hYmMsIHBhcmFtcywgYm9vay50dW5lc1tjdXJyZW50VHVuZV0uc3RhcnRQb3MgLSBib29rLmhlYWRlci5sZW5ndGgpO1xuXHRcdFx0XHRcdHZhciB0dW5lID0gYWJjUGFyc2VyLmdldFR1bmUoKTtcblx0XHRcdFx0XHR2YXIgb3ZlcnJpZGUgPSBjYWxsYmFjayhkaXYsIHR1bmUsIGksIGJvb2sudHVuZXNbY3VycmVudFR1bmVdLmFiYyk7XG5cdFx0XHRcdFx0cmV0LnB1c2gob3ZlcnJpZGUgPyBvdmVycmlkZSA6IHR1bmUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChkaXYuaGFzT3duUHJvcGVydHkoJ2lubmVySFRNTCcpKVxuXHRcdFx0XHRcdFx0ZGl2LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUdW5lKys7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cblx0ZnVuY3Rpb24gZmxhdHRlblR1bmUodHVuZU9iaikge1xuXHRcdC8vIFRoaXMgcmVtb3ZlcyB0aGUgbGluZSBicmVha3MgYW5kIHJlbW92ZXMgdGhlIG5vbi1tdXNpYyBsaW5lcy5cblx0XHR2YXIgc3RhdmVzID0gW107XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0dW5lT2JqLmxpbmVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgbGluZSA9IHR1bmVPYmoubGluZXNbal07XG5cdFx0XHRpZiAobGluZS5zdGFmZikge1xuXHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGxpbmUuc3RhZmYubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHR2YXIgc3RhZmYgPSBsaW5lLnN0YWZmW2tdO1xuXHRcdFx0XHRcdGlmICghc3RhdmVzW2tdKVxuXHRcdFx0XHRcdFx0c3RhdmVzW2tdID0gc3RhZmY7XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0YWZmLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RhdmVzW2tdLnZvaWNlc1tpXSlcblx0XHRcdFx0XHRcdFx0XHRzdGF2ZXNba10udm9pY2VzW2ldID0gc3RhdmVzW2tdLnZvaWNlc1tpXS5jb25jYXQoc3RhZmYudm9pY2VzW2ldKTtcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IElmIHN0YXZlc1trXS52b2ljZXNbaV0gZG9lc24ndCBleGlzdCwgdGhhdCBtZWFucyBhIHZvaWNlIGFwcGVhcmVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIHR1bmUuIFRoYXQgaXNuJ3QgaGFuZGxlZCB5ZXQuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzdGF2ZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBtZWFzdXJlc1BhcnNlcihzdGFmZiwgdHVuZSkge1xuXHRcdHZhciB2b2ljZXMgPSBbXTtcblx0XHR2YXIgbGFzdENob3JkID0gbnVsbDtcblx0XHR2YXIgbWVhc3VyZVN0YXJ0Q2hvcmQgPSBudWxsO1xuXHRcdHZhciBmcmFnU3RhcnQgPSBudWxsO1xuXHRcdHZhciBoYXNOb3RlcyA9IGZhbHNlO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdGFmZi52b2ljZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciB2b2ljZSA9IHN0YWZmLnZvaWNlc1tpXTtcblx0XHRcdHZvaWNlcy5wdXNoKFtdKTtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdm9pY2UubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB2b2ljZVtqXTtcblx0XHRcdFx0aWYgKGZyYWdTdGFydCA9PT0gbnVsbCAmJiBlbGVtLnN0YXJ0Q2hhciA+PSAwKSB7XG5cdFx0XHRcdFx0ZnJhZ1N0YXJ0ID0gZWxlbS5zdGFydENoYXI7XG5cdFx0XHRcdFx0aWYgKGVsZW0uY2hvcmQgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdG1lYXN1cmVTdGFydENob3JkID0gbGFzdENob3JkO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdG1lYXN1cmVTdGFydENob3JkID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZWxlbS5jaG9yZClcblx0XHRcdFx0XHRsYXN0Q2hvcmQgPSBlbGVtO1xuXHRcdFx0XHRpZiAoZWxlbS5lbF90eXBlID09PSAnYmFyJykge1xuXHRcdFx0XHRcdGlmIChoYXNOb3Rlcykge1xuXHRcdFx0XHRcdFx0dmFyIGZyYWcgPSB0dW5lLmFiYy5zdWJzdHJpbmcoZnJhZ1N0YXJ0LCBlbGVtLmVuZENoYXIpO1xuXHRcdFx0XHRcdFx0dmFyIG1lYXN1cmUgPSB7YWJjOiBmcmFnfTtcblx0XHRcdFx0XHRcdGxhc3RDaG9yZCA9IG1lYXN1cmVTdGFydENob3JkICYmIG1lYXN1cmVTdGFydENob3JkLmNob3JkICYmIG1lYXN1cmVTdGFydENob3JkLmNob3JkLmxlbmd0aCA+IDAgPyBtZWFzdXJlU3RhcnRDaG9yZC5jaG9yZFswXS5uYW1lIDogbnVsbDtcblx0XHRcdFx0XHRcdGlmIChsYXN0Q2hvcmQpXG5cdFx0XHRcdFx0XHRcdG1lYXN1cmUubGFzdENob3JkID0gbGFzdENob3JkO1xuXHRcdFx0XHRcdFx0aWYgKGVsZW0uc3RhcnRFbmRpbmcpXG5cdFx0XHRcdFx0XHRcdG1lYXN1cmUuc3RhcnRFbmRpbmcgPSBlbGVtLnN0YXJ0RW5kaW5nO1xuXHRcdFx0XHRcdFx0aWYgKGVsZW0uZW5kRW5kaW5nKVxuXHRcdFx0XHRcdFx0XHRtZWFzdXJlLmVuZEVuZGluZyA9IGVsZW0uZW5kRW5kaW5nO1xuXHRcdFx0XHRcdFx0dm9pY2VzW2ldLnB1c2gobWVhc3VyZSk7XG5cdFx0XHRcdFx0XHRmcmFnU3RhcnQgPSBudWxsO1xuXHRcdFx0XHRcdFx0aGFzTm90ZXMgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbS5lbF90eXBlID09PSAnbm90ZScpIHtcblx0XHRcdFx0XHRoYXNOb3RlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZvaWNlcztcblx0fVxuXG5cdHR1bmVib29rLmV4dHJhY3RNZWFzdXJlcyA9IGZ1bmN0aW9uKGFiYykge1xuXHRcdHZhciB0dW5lcyA9IFtdO1xuXHRcdHZhciBib29rID0gbmV3IFR1bmVCb29rKGFiYyk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBib29rLnR1bmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgdHVuZSA9IGJvb2sudHVuZXNbaV07XG5cdFx0XHR2YXIgYXJyID0gdHVuZS5hYmMuc3BsaXQoXCJLOlwiKTtcblx0XHRcdHZhciBhcnIyID0gYXJyWzFdLnNwbGl0KFwiXFxuXCIpO1xuXHRcdFx0dmFyIGhlYWRlciA9IGFyclswXSArIFwiSzpcIiArIGFycjJbMF0gKyBcIlxcblwiO1xuXHRcdFx0dmFyIGxhc3RDaG9yZCA9IG51bGw7XG5cdFx0XHR2YXIgbWVhc3VyZVN0YXJ0Q2hvcmQgPSBudWxsO1xuXHRcdFx0dmFyIGZyYWdTdGFydCA9IG51bGw7XG5cdFx0XHR2YXIgbWVhc3VyZXMgPSBbXTtcblx0XHRcdHZhciBoYXNOb3RlcyA9IGZhbHNlO1xuXHRcdFx0dmFyIHR1bmVPYmogPSB0dW5lYm9vay5wYXJzZU9ubHkodHVuZS5hYmMpWzBdO1xuXHRcdFx0dmFyIGhhc1BpY2t1cCA9IHR1bmVPYmouZ2V0UGlja3VwTGVuZ3RoKCkgPiAwO1xuXHRcdFx0Ly8gdmFyIHN0YXZlcyA9IGZsYXR0ZW5UdW5lKHR1bmVPYmopO1xuXHRcdFx0Ly8gZm9yICh2YXIgcyA9IDA7IHMgPCBzdGF2ZXMubGVuZ3RoOyBzKyspIHtcblx0XHRcdC8vIFx0dmFyIHZvaWNlcyA9IG1lYXN1cmVzUGFyc2VyKHN0YXZlc1tzXSwgdHVuZSk7XG5cdFx0XHQvLyBcdGlmIChzID09PSAwKVxuXHRcdFx0Ly8gXHRcdG1lYXN1cmVzID0gdm9pY2VzO1xuXHRcdFx0Ly8gXHRlbHNlIHtcblx0XHRcdC8vIFx0XHRmb3IgKHZhciBzcyA9IDA7IHNzIDwgdm9pY2VzLmxlbmd0aDsgc3MrKykge1xuXHRcdFx0Ly8gXHRcdFx0dmFyIHZvaWNlID0gdm9pY2VzW3NzXTtcblx0XHRcdC8vIFx0XHRcdGlmIChtZWFzdXJlcy5sZW5ndGggPD0gc3MpXG5cdFx0XHQvLyBcdFx0XHRcdG1lYXN1cmVzLnB1c2goW10pO1xuXHRcdFx0Ly8gXHRcdFx0dmFyIG1lYXN1cmVWb2ljZSA9IG1lYXN1cmVzW3NzXTtcblx0XHRcdC8vIFx0XHRcdGZvciAodmFyIHNzcyA9IDA7IHNzcyA8IHZvaWNlLmxlbmd0aDsgc3NzKyspIHtcblx0XHRcdC8vIFx0XHRcdFx0aWYgKG1lYXN1cmVWb2ljZS5sZW5ndGggPiBzc3MpXG5cdFx0XHQvLyBcdFx0XHRcdFx0bWVhc3VyZVZvaWNlW3Nzc10uYWJjICs9IFwiXFxuXCIgKyB2b2ljZVtzc3NdLmFiYztcblx0XHRcdC8vIFx0XHRcdFx0ZWxzZVxuXHRcdFx0Ly8gXHRcdFx0XHRcdG1lYXN1cmVzLnB1c2godm9pY2Vbc3NzXSk7XG5cdFx0XHQvLyBcdFx0XHR9XG5cdFx0XHQvLyBcdFx0fVxuXHRcdFx0Ly8gXHR9XG5cdFx0XHQvLyBcdGNvbnNvbGUubG9nKHZvaWNlcyk7XG5cdFx0XHQvLyB9XG5cdFx0XHQvLyBtZWFzdXJlcyA9IG1lYXN1cmVzWzBdO1xuXG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHR1bmVPYmoubGluZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0dmFyIGxpbmUgPSB0dW5lT2JqLmxpbmVzW2pdO1xuXHRcdFx0XHRpZiAobGluZS5zdGFmZikge1xuXHRcdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgMSAvKmxpbmUuc3RhZmYubGVuZ3RoKi87IGsrKykge1xuXHRcdFx0XHRcdFx0dmFyIHN0YWZmID0gbGluZS5zdGFmZltrXTtcblx0XHRcdFx0XHRcdGZvciAodmFyIGtrID0gMDsga2sgPCAxIC8qc3RhZmYudm9pY2VzLmxlbmd0aCovOyBraysrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB2b2ljZSA9IHN0YWZmLnZvaWNlc1tra107XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGtrayA9IDA7IGtrayA8IHZvaWNlLmxlbmd0aDsga2trKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZWxlbSA9IHZvaWNlW2tra107XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZyYWdTdGFydCA9PT0gbnVsbCAmJiBlbGVtLnN0YXJ0Q2hhciA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmcmFnU3RhcnQgPSBlbGVtLnN0YXJ0Q2hhcjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtLmNob3JkID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1lYXN1cmVTdGFydENob3JkID0gbGFzdENob3JkO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZWFzdXJlU3RhcnRDaG9yZCA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtLmNob3JkKVxuXHRcdFx0XHRcdFx0XHRcdFx0bGFzdENob3JkID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbS5lbF90eXBlID09PSAnYmFyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGhhc05vdGVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBmcmFnID0gdHVuZS5hYmMuc3Vic3RyaW5nKGZyYWdTdGFydCwgZWxlbS5lbmRDaGFyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG1lYXN1cmUgPSB7YWJjOiBmcmFnfTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFzdENob3JkID0gbWVhc3VyZVN0YXJ0Q2hvcmQgJiYgbWVhc3VyZVN0YXJ0Q2hvcmQuY2hvcmQgJiYgbWVhc3VyZVN0YXJ0Q2hvcmQuY2hvcmQubGVuZ3RoID4gMCA/IG1lYXN1cmVTdGFydENob3JkLmNob3JkWzBdLm5hbWUgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGFzdENob3JkKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lYXN1cmUubGFzdENob3JkID0gbGFzdENob3JkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbS5zdGFydEVuZGluZylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZWFzdXJlLnN0YXJ0RW5kaW5nID0gZWxlbS5zdGFydEVuZGluZztcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW0uZW5kRW5kaW5nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lYXN1cmUuZW5kRW5kaW5nID0gZWxlbS5lbmRFbmRpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1lYXN1cmVzLnB1c2gobWVhc3VyZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZyYWdTdGFydCA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhhc05vdGVzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGVtLmVsX3R5cGUgPT09ICdub3RlJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aGFzTm90ZXMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dHVuZXMucHVzaCh7XG5cdFx0XHRcdGhlYWRlcjogaGVhZGVyLFxuXHRcdFx0XHRtZWFzdXJlczogbWVhc3VyZXMsXG5cdFx0XHRcdGhhc1BpY2t1cDogaGFzUGlja3VwXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHR1bmVzO1xuXHR9O1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSB0dW5lYm9vaztcbiIsIi8vICAgIGFiY19hYnNvbHV0ZV9lbGVtZW50LmpzOiBEZWZpbml0aW9uIG9mIHRoZSBBYnNvbHV0ZUVsZW1lbnQgY2xhc3MuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBzcGFjaW5nID0gcmVxdWlyZSgnLi9hYmNfc3BhY2luZycpO1xuXG4vLyBkdXJhdGlvbiAtIGFjdHVhbCBtdXNpY2FsIGR1cmF0aW9uIC0gZGlmZmVyZW50IGZyb20gbm90ZWhlYWQgZHVyYXRpb24gaW4gdHJpcGxldHMuIHJlZmVyIHRvIGFiY2VsZW0gdG8gZ2V0IHRoZSBub3RlaGVhZCBkdXJhdGlvblxuLy8gbWluc3BhY2luZyAtIHNwYWNpbmcgd2hpY2ggbXVzdCBiZSB0YWtlbiBvbiB0b3Agb2YgdGhlIHdpZHRoIGRlZmluZWQgYnkgdGhlIGR1cmF0aW9uXG4vLyB0eXBlIGlzIGEgbWV0YS10eXBlIGZvciB0aGUgZWxlbWVudC4gSXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgZHJhd2luZywgYnV0IGl0IGlzIHVzZWZ1bCB0byBtYWtlIHNlbWFudGljIHNlbnNlIG9mIHRoZSBlbGVtZW50LiBGb3IgaW5zdGFuY2UsIGl0IGNhbiBiZSB1c2VkIGluIHRoZSBlbGVtZW50J3MgY2xhc3MgbmFtZS5cbnZhciBBYnNvbHV0ZUVsZW1lbnQgPSBmdW5jdGlvbiBBYnNvbHV0ZUVsZW1lbnQoYWJjZWxlbSwgZHVyYXRpb24sIG1pbnNwYWNpbmcsIHR5cGUsIHR1bmVOdW1iZXIsIG9wdGlvbnMpIHtcblx0Ly9jb25zb2xlLmxvZyhcIkFic29sdXRlOlwiLGFiY2VsZW0sIHR5cGUpO1xuXHRpZiAoIW9wdGlvbnMpXG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR0aGlzLnR1bmVOdW1iZXIgPSB0dW5lTnVtYmVyO1xuXHR0aGlzLmFiY2VsZW0gPSBhYmNlbGVtO1xuXHR0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XG5cdHRoaXMuZHVyYXRpb25DbGFzcyA9IG9wdGlvbnMuZHVyYXRpb25DbGFzc092ZXJpZGUgPyBvcHRpb25zLmR1cmF0aW9uQ2xhc3NPdmVyaWRlIDogdGhpcy5kdXJhdGlvbjtcblx0dGhpcy5taW5zcGFjaW5nID0gbWluc3BhY2luZyB8fCAwO1xuXHR0aGlzLnggPSAwO1xuXHR0aGlzLmNoaWxkcmVuID0gW107XG5cdHRoaXMuaGVhZHMgPSBbXTtcblx0dGhpcy5leHRyYSA9IFtdO1xuXHR0aGlzLmV4dHJhdyA9IDA7XG5cdC8vdGhpcy5kZWNzID0gW107XG5cdHRoaXMudyA9IDA7XG5cdHRoaXMucmlnaHQgPSBbXTtcblx0dGhpcy5pbnZpc2libGUgPSBmYWxzZTtcblx0dGhpcy5ib3R0b20gPSB1bmRlZmluZWQ7XG5cdHRoaXMudG9wID0gdW5kZWZpbmVkO1xuXHR0aGlzLnR5cGUgPSB0eXBlO1xuXHQvLyB0aGVzZSBhcmUgdGhlIGhlaWdodHMgb2YgYWxsIG9mIHRoZSB2ZXJ0aWNhbCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIHBsYWNlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lLlxuXHQvLyB0aGUgdmVydGljYWwgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgYWJvdmUgaXM6IHRlbXBvLCBwYXJ0LCB2b2x1bWUvZHluYW1pYywgZW5kaW5nL2Nob3JkLCBseXJpY1xuXHQvLyB0aGUgdmVydGljYWwgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgYmVsb3cgaXM6IGx5cmljLCBjaG9yZCwgdm9sdW1lL2R5bmFtaWNcblx0dGhpcy5zcGVjaWFsWSA9IHtcblx0XHR0ZW1wb0hlaWdodEFib3ZlOiAwLFxuXHRcdHBhcnRIZWlnaHRBYm92ZTogMCxcblx0XHR2b2x1bWVIZWlnaHRBYm92ZTogMCxcblx0XHRkeW5hbWljSGVpZ2h0QWJvdmU6IDAsXG5cdFx0ZW5kaW5nSGVpZ2h0QWJvdmU6IDAsXG5cdFx0Y2hvcmRIZWlnaHRBYm92ZTogMCxcblx0XHRseXJpY0hlaWdodEFib3ZlOiAwLFxuXG5cdFx0bHlyaWNIZWlnaHRCZWxvdzogMCxcblx0XHRjaG9yZEhlaWdodEJlbG93OiAwLFxuXHRcdHZvbHVtZUhlaWdodEJlbG93OiAwLFxuXHRcdGR5bmFtaWNIZWlnaHRCZWxvdzogMFxuXHR9O1xufTtcblxuLy8gRm9yIGVhY2ggb2YgdGhlIHJlbGF0aXZlIGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgcGxhY2VkIGluIGFkdmFuY2UgKGJlY2F1c2UgdGhlaXIgdmVydGljYWwgcGxhY2VtZW50IGRlcGVuZHMgb24gZXZlcnl0aGluZ1xuLy8gZWxzZSBvbiB0aGUgbGluZSksIHRoaXMgaXRlcmF0ZXMgdGhyb3VnaCB0aGVtIGFuZCBzZXRzIHRoZWlyIHBpdGNoLiBCeSB0aGUgdGltZSB0aGlzIGlzIGNhbGxlZCwgc3BlY2lhbFlSZXNvbHZlZCBjb250YWlucyBhXG4vLyBoYXNoIHdpdGggdGhlIHZlcnRpY2FsIHBsYWNlbWVudCAoaW4gcGl0Y2ggdW5pdHMpIGZvciBlYWNoIHR5cGUuXG4vLyBUT0RPLVBFUjogSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIHNlcGFyYXRlZCBieSBcImFib3ZlXCIgYW5kIFwiYmVsb3dcIi4gSG93IGRvIHdlIGtub3cgdGhhdCBmb3IgZHluYW1pY3MgYXQgdGhlIHBvaW50IHdoZXJlIHRoZXkgYXJlIGJlaW5nIGRlZmluZWQsIHRob3VnaD8gV2UgbmVlZCBhIHBhc3MgdGhyb3VnaCBhbGwgdGhlIHJlbGF0aXZlIGVsZW1lbnRzIHRvIHNldCBcImFib3ZlXCIgYW5kIFwiYmVsb3dcIi5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzID0gZnVuY3Rpb24oc3BlY2lhbFlSZXNvbHZlZCkge1xuXHQvLyBzcGVjaWFsWVJlc29sdmVkIGNvbnRhaW5zIHRoZSBhY3R1YWwgcGl0Y2ggZm9yIGVhY2ggb2YgdGhlIGNsYXNzZXMgb2YgZWxlbWVudHMuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cdFx0Zm9yICh2YXIga2V5IGluIHRoaXMuc3BlY2lhbFkpIHsgLy8gZm9yIGVhY2ggY2xhc3Mgb2YgZWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIHBsYWNlZCB2ZXJ0aWNhbGx5XG5cdFx0XHRpZiAodGhpcy5zcGVjaWFsWS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdGlmIChjaGlsZFtrZXldKSB7IC8vIElmIHRoaXMgcmVsYXRpdmUgZWxlbWVudCBoYXMgZGVmaW5lZCBhIGhlaWdodCBmb3IgdGhpcyBjbGFzcyBvZiBlbGVtZW50XG5cdFx0XHRcdFx0Y2hpbGQucGl0Y2ggPSBzcGVjaWFsWVJlc29sdmVkW2tleV07XG5cdFx0XHRcdFx0aWYgKGNoaWxkLnRvcCA9PT0gdW5kZWZpbmVkKSB7IC8vIFRPRE8tUEVSOiBIQUNLISBOb3Qgc3VyZSB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyB0aGlzLlxuXHRcdFx0XHRcdFx0Y2hpbGQuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzKHNwZWNpYWxZUmVzb2x2ZWQpO1xuXHRcdFx0XHRcdFx0dGhpcy5wdXNoVG9wKGNoaWxkLnRvcCk7XG5cdFx0XHRcdFx0XHR0aGlzLnB1c2hCb3R0b20oY2hpbGQuYm90dG9tKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuZ2V0TWluV2lkdGggPSBmdW5jdGlvbiAoKSB7IC8vIGFic29sdXRlIHNwYWNlIHRha2VuIHRvIHRoZSByaWdodCBvZiB0aGUgbm90ZVxuXHRyZXR1cm4gdGhpcy53O1xufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5nZXRFeHRyYVdpZHRoID0gZnVuY3Rpb24gKCkgeyAvLyBzcGFjZSBuZWVkZWQgdG8gdGhlIGxlZnQgb2YgdGhlIG5vdGVcblx0cmV0dXJuIC10aGlzLmV4dHJhdztcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuYWRkRXh0cmEgPSBmdW5jdGlvbiAoZXh0cmEpIHtcblx0aWYgKGV4dHJhLmR4PHRoaXMuZXh0cmF3KSB0aGlzLmV4dHJhdyA9IGV4dHJhLmR4O1xuXHR0aGlzLmV4dHJhW3RoaXMuZXh0cmEubGVuZ3RoXSA9IGV4dHJhO1xuXHR0aGlzLmFkZENoaWxkKGV4dHJhKTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuYWRkSGVhZCA9IGZ1bmN0aW9uIChoZWFkKSB7XG5cdGlmIChoZWFkLmR4PHRoaXMuZXh0cmF3KSB0aGlzLmV4dHJhdyA9IGhlYWQuZHg7XG5cdHRoaXMuaGVhZHNbdGhpcy5oZWFkcy5sZW5ndGhdID0gaGVhZDtcblx0dGhpcy5hZGRSaWdodChoZWFkKTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuYWRkUmlnaHQgPSBmdW5jdGlvbiAocmlnaHQpIHtcblx0aWYgKHJpZ2h0LmR4K3JpZ2h0Lnc+dGhpcy53KSB0aGlzLncgPSByaWdodC5keCtyaWdodC53O1xuXHR0aGlzLnJpZ2h0W3RoaXMucmlnaHQubGVuZ3RoXSA9IHJpZ2h0O1xuXHR0aGlzLmFkZENoaWxkKHJpZ2h0KTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuYWRkQ2VudGVyZWQgPSBmdW5jdGlvbiAoZWxlbSkge1xuXHR2YXIgaGFsZiA9IGVsZW0udy8yO1xuXHRpZiAoLWhhbGY8dGhpcy5leHRyYXcpIHRoaXMuZXh0cmF3ID0gLWhhbGY7XG5cdHRoaXMuZXh0cmFbdGhpcy5leHRyYS5sZW5ndGhdID0gZWxlbTtcblx0aWYgKGVsZW0uZHgraGFsZj50aGlzLncpIHRoaXMudyA9IGVsZW0uZHgraGFsZjtcblx0dGhpcy5yaWdodFt0aGlzLnJpZ2h0Lmxlbmd0aF0gPSBlbGVtO1xuXHR0aGlzLmFkZENoaWxkKGVsZW0pO1xufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5zZXRMaW1pdCA9IGZ1bmN0aW9uKG1lbWJlciwgY2hpbGQpIHtcblx0aWYgKCFjaGlsZFttZW1iZXJdKSByZXR1cm47XG5cdGlmICghdGhpcy5zcGVjaWFsWVttZW1iZXJdKVxuXHRcdHRoaXMuc3BlY2lhbFlbbWVtYmVyXSA9IGNoaWxkW21lbWJlcl07XG5cdGVsc2Vcblx0XHR0aGlzLnNwZWNpYWxZW21lbWJlcl0gPSBNYXRoLm1heCh0aGlzLnNwZWNpYWxZW21lbWJlcl0sIGNoaWxkW21lbWJlcl0pO1xufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xuXHQvL2NvbnNvbGUubG9nKFwiUmVsYXRpdmU6XCIsY2hpbGQpO1xuXHRjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXHR0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoXSA9IGNoaWxkO1xuXHR0aGlzLnB1c2hUb3AoY2hpbGQudG9wKTtcblx0dGhpcy5wdXNoQm90dG9tKGNoaWxkLmJvdHRvbSk7XG5cdHRoaXMuc2V0TGltaXQoJ3RlbXBvSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ3BhcnRIZWlnaHRBYm92ZScsIGNoaWxkKTtcblx0dGhpcy5zZXRMaW1pdCgndm9sdW1lSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2R5bmFtaWNIZWlnaHRBYm92ZScsIGNoaWxkKTtcblx0dGhpcy5zZXRMaW1pdCgnZW5kaW5nSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2Nob3JkSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2x5cmljSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2x5cmljSGVpZ2h0QmVsb3cnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2Nob3JkSGVpZ2h0QmVsb3cnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ3ZvbHVtZUhlaWdodEJlbG93JywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdkeW5hbWljSGVpZ2h0QmVsb3cnLCBjaGlsZCk7XG59O1xuXG5BYnNvbHV0ZUVsZW1lbnQucHJvdG90eXBlLnB1c2hUb3AgPSBmdW5jdGlvbiAodG9wKSB7XG5cdGlmICh0b3AgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmICh0aGlzLnRvcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy50b3AgPSB0b3A7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy50b3AgPSBNYXRoLm1heCh0b3AsIHRoaXMudG9wKTtcblx0fVxufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5wdXNoQm90dG9tID0gZnVuY3Rpb24gKGJvdHRvbSkge1xuXHRpZiAoYm90dG9tICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAodGhpcy5ib3R0b20gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuYm90dG9tID0gYm90dG9tO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuYm90dG9tID0gTWF0aC5taW4oYm90dG9tLCB0aGlzLmJvdHRvbSk7XG5cdH1cbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuc2V0WCA9IGZ1bmN0aW9uICh4KSB7XG5cdHRoaXMueCA9IHg7XG5cdGZvciAodmFyIGk9MDsgaTx0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHRcdHRoaXMuY2hpbGRyZW5baV0uc2V0WCh4KTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuc2V0SGludCA9IGZ1bmN0aW9uICgpIHtcblx0dGhpcy5oaW50ID0gdHJ1ZTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChyZW5kZXJlciwgYmFydG9wKSB7XG5cdGlmICh0aGlzLmludmlzaWJsZSkgcmV0dXJuO1xuXHR0aGlzLmVsZW1zZXQgPSBbXTtcblx0cmVuZGVyZXIuYmVnaW5Hcm91cCgpO1xuXHRmb3IgKHZhciBpPTA7IGk8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdGlmICgvKkFCQ0pTLndyaXRlLmRlYnVnUGxhY2VtZW50Ki9mYWxzZSkge1xuXHRcdFx0aWYgKHRoaXMuY2hpbGRyZW5baV0ua2xhc3MgPT09ICdvcm5hbWVudCcpXG5cdFx0XHRcdHJlbmRlcmVyLnByaW50U2hhZGVkQm94KHRoaXMueCwgcmVuZGVyZXIuY2FsY1kodGhpcy5jaGlsZHJlbltpXS50b3ApLCB0aGlzLncsIHJlbmRlcmVyLmNhbGNZKHRoaXMuY2hpbGRyZW5baV0uYm90dG9tKS1yZW5kZXJlci5jYWxjWSh0aGlzLmNoaWxkcmVuW2ldLnRvcCksIFwicmdiKDAsMCwyMDApXCIsIDAuMyk7XG5cdFx0fVxuXHRcdHZhciBlbCA9IHRoaXMuY2hpbGRyZW5baV0uZHJhdyhyZW5kZXJlcixiYXJ0b3ApO1xuXHRcdGlmIChlbClcblx0XHRcdHRoaXMuZWxlbXNldC5wdXNoKGVsKTtcblx0fVxuXHR2YXIga2xhc3MgPSB0aGlzLnR5cGU7XG5cdGlmICh0aGlzLnR5cGUgPT09ICdub3RlJyB8fCB0aGlzLnR5cGUgPT09ICdyZXN0Jykge1xuXHRcdGtsYXNzICs9ICcgZCcgKyB0aGlzLmR1cmF0aW9uQ2xhc3M7XG5cdFx0a2xhc3MgPSBrbGFzcy5yZXBsYWNlKC9cXC4vZywgJy0nKTtcblx0XHRpZiAodGhpcy5hYmNlbGVtLnBpdGNoZXMpIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5hYmNlbGVtLnBpdGNoZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0a2xhc3MgKz0gJyBwJyArIHRoaXMuYWJjZWxlbS5waXRjaGVzW2pdLnBpdGNoO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR2YXIgZyA9IHJlbmRlcmVyLmVuZEdyb3VwKGtsYXNzKTtcblx0aWYgKGcpXG5cdFx0dGhpcy5lbGVtc2V0LnB1c2goZyk7XG5cdGlmICh0aGlzLmtsYXNzKVxuXHRcdHRoaXMuc2V0Q2xhc3MoXCJtYXJrXCIsIFwiXCIsIFwiIzAwZmYwMFwiKTtcblx0aWYgKHRoaXMuaGludClcblx0XHR0aGlzLnNldENsYXNzKFwiYWJjanMtaGludFwiLCBcIlwiLCBudWxsKTtcblx0dmFyIG9wYWNpdHkgPSAvKkFCQ0pTLndyaXRlLmRlYnVnUGxhY2VtZW50Ki9mYWxzZSA/IDAuMyA6IDA7IC8vIENyZWF0ZSB0cmFuc3BhcmVudCBib3ggdGhhdCBlbmNvbXBhc3NlcyB0aGUgZWxlbWVudCwgYW5kIG5vdCBzbyB0cmFuc3BhcmVudCB0byBkZWJ1ZyBpdC5cblx0dmFyIHRhcmdldCA9IHJlbmRlcmVyLnByaW50U2hhZGVkQm94KHRoaXMueCwgcmVuZGVyZXIuY2FsY1kodGhpcy50b3ApLCB0aGlzLncsIHJlbmRlcmVyLmNhbGNZKHRoaXMuYm90dG9tKS1yZW5kZXJlci5jYWxjWSh0aGlzLnRvcCksIFwiIzAwMDAwMFwiLCBvcGFjaXR5KTtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHR2YXIgY29udHJvbGxlciA9IHJlbmRlcmVyLmNvbnRyb2xsZXI7XG5cdHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZnVuY3Rpb24gKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cdFx0aWYgKHNlbGYuZWxlbXNldCkge1xuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBzZWxmLmVsZW1zZXQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0dmFyIGVzID0gc2VsZi5lbGVtc2V0W2pdO1xuXHRcdFx0XHRpZiAoZXMpXG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGVzLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29udHJvbGxlci5ub3RpZnlTZWxlY3Qoc2VsZiwgc2VsZi50dW5lTnVtYmVyLCBjbGFzc2VzKTtcblx0fSk7XG5cdHRoaXMuYWJjZWxlbS5hYnNlbGVtID0gdGhpcztcblxuXHR2YXIgc3RlcCA9IHNwYWNpbmcuU1RFUDtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuaXNJRT0vKkBjY19vbiFAKi9mYWxzZTsvL0lFIGRldGVjdG9yXG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuc2V0Q2xhc3MgPSBmdW5jdGlvbiAoYWRkQ2xhc3MsIHJlbW92ZUNsYXNzLCBjb2xvcikge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbXNldC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBlbCA9IHRoaXMuZWxlbXNldFtpXTtcblx0XHRlbC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIGNvbG9yKTtcblx0XHR2YXIga2xzID0gZWwuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG5cdFx0aWYgKCFrbHMpIGtscyA9IFwiXCI7XG5cdFx0a2xzID0ga2xzLnJlcGxhY2UocmVtb3ZlQ2xhc3MsIFwiXCIpO1xuXHRcdGtscyA9IGtscy5yZXBsYWNlKGFkZENsYXNzLCBcIlwiKTtcblx0XHRpZiAoYWRkQ2xhc3MubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGtscy5sZW5ndGggPiAwICYmIGtscy5jaGFyQXQoa2xzLmxlbmd0aCAtIDEpICE9PSAnICcpIGtscyArPSBcIiBcIjtcblx0XHRcdGtscyArPSBhZGRDbGFzcztcblx0XHR9XG5cdFx0ZWwuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwga2xzKTtcblx0fVxufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5oaWdobGlnaHQgPSBmdW5jdGlvbiAoa2xhc3MsIGNvbG9yKSB7XG5cdGlmIChrbGFzcyA9PT0gdW5kZWZpbmVkKVxuXHRcdGtsYXNzID0gXCJhYmNqcy1ub3RlX3NlbGVjdGVkXCI7XG5cdGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKVxuXHRcdGNvbG9yID0gXCIjZmYwMDAwXCI7XG5cdHRoaXMuc2V0Q2xhc3Moa2xhc3MsIFwiXCIsIGNvbG9yKTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUudW5oaWdobGlnaHQgPSBmdW5jdGlvbiAoa2xhc3MsIGNvbG9yKSB7XG5cdGlmIChrbGFzcyA9PT0gdW5kZWZpbmVkKVxuXHRcdGtsYXNzID0gXCJhYmNqcy1ub3RlX3NlbGVjdGVkXCI7XG5cdGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKVxuXHRcdGNvbG9yID0gXCIjMDAwMDAwXCI7XG5cdHRoaXMuc2V0Q2xhc3MoXCJcIiwga2xhc3MsIGNvbG9yKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQWJzb2x1dGVFbGVtZW50O1xuIiwiLy8gICAgYWJjX3JlbGF0aXZlX2VsZW1lbnQuanM6IERlZmluaXRpb24gb2YgdGhlIFJlbGF0aXZlRWxlbWVudCBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIFJlbGF0aXZlRWxlbWVudCA9IGZ1bmN0aW9uIFJlbGF0aXZlRWxlbWVudChjLCBkeCwgdywgcGl0Y2gsIG9wdCkge1xuXHRvcHQgPSBvcHQgfHwge307XG5cdHRoaXMueCA9IDA7XG5cdHRoaXMuYyA9IGM7ICAgICAgLy8gY2hhcmFjdGVyIG9yIHBhdGggb3Igc3RyaW5nXG5cdHRoaXMuZHggPSBkeDsgICAgLy8gcmVsYXRpdmUgeCBwb3NpdGlvblxuXHR0aGlzLncgPSB3OyAgICAgIC8vIG1pbmltdW0gd2lkdGggdGFrZW4gdXAgYnkgdGhpcyBlbGVtZW50IChjYW4gaW5jbHVkZSBncmF0dWl0b3VzIHNwYWNlKVxuXHR0aGlzLnBpdGNoID0gcGl0Y2g7IC8vIHJlbGF0aXZlIHkgcG9zaXRpb24gYnkgcGl0Y2hcblx0dGhpcy5zY2FsZXggPSBvcHQuc2NhbGV4IHx8IDE7IC8vIHNob3VsZCB0aGUgY2hhcmFjdGVyL3BhdGggYmUgc2NhbGVkP1xuXHR0aGlzLnNjYWxleSA9IG9wdC5zY2FsZXkgfHwgMTsgLy8gc2hvdWxkIHRoZSBjaGFyYWN0ZXIvcGF0aCBiZSBzY2FsZWQ/XG5cdHRoaXMudHlwZSA9IG9wdC50eXBlIHx8IFwic3ltYm9sXCI7IC8vIGNoZWFwIHR5cGVzLlxuXHR0aGlzLnBpdGNoMiA9IG9wdC5waXRjaDI7XG5cdHRoaXMubGluZXdpZHRoID0gb3B0LmxpbmV3aWR0aDtcblx0dGhpcy5rbGFzcyA9IG9wdC5rbGFzcztcblx0dGhpcy50b3AgPSBwaXRjaDtcblx0aWYgKHRoaXMucGl0Y2gyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5waXRjaDIgPiB0aGlzLnRvcCkgdGhpcy50b3AgPSB0aGlzLnBpdGNoMjtcblx0dGhpcy5ib3R0b20gPSBwaXRjaDtcblx0aWYgKHRoaXMucGl0Y2gyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5waXRjaDIgPCB0aGlzLmJvdHRvbSkgdGhpcy5ib3R0b20gPSB0aGlzLnBpdGNoMjtcblx0aWYgKG9wdC50aGlja25lc3MpIHtcblx0XHR0aGlzLnRvcCArPSBvcHQudGhpY2tuZXNzLzI7XG5cdFx0dGhpcy5ib3R0b20gLT0gb3B0LnRoaWNrbmVzcy8yO1xuXHR9XG5cdGlmIChvcHQuc3RlbUhlaWdodCkge1xuXHRcdGlmIChvcHQuc3RlbUhlaWdodCA+IDApXG5cdFx0XHR0aGlzLnRvcCArPSBvcHQuc3RlbUhlaWdodDtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmJvdHRvbSArPSBvcHQuc3RlbUhlaWdodDtcblx0fVxuXHQvL2lmICh0aGlzLnR5cGUgPT09IFwic3ltYm9sXCIpIHtcblx0Ly9cdHZhciBvZmZzZXQgPSBnbHlwaHMuZ2V0WUNvcnIodGhpcy5jKTtcblx0Ly9cdHRoaXMudG9wICs9IG9mZnNldDtcblx0Ly9cdHRoaXMuYm90dG9tICs9IG9mZnNldDtcblx0Ly99XG5cdHRoaXMuaGVpZ2h0ID0gb3B0LmhlaWdodCA/IG9wdC5oZWlnaHQgOiA0OyAvLyBUaGUgKzEgaXMgdG8gZ2l2ZSBhIGxpdHRsZSBiaXQgb2YgcGFkZGluZy5cblx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5ID0gZmFsc2U7XG5cdHN3aXRjaCAodGhpcy50eXBlKSB7XG5cdFx0Y2FzZSBcImRlYnVnXCI6XG5cdFx0XHR0aGlzLmNob3JkSGVpZ2h0QWJvdmUgPSB0aGlzLmhlaWdodDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJseXJpY1wiOlxuXHRcdFx0aWYgKG9wdC5wb3NpdGlvbiAmJiBvcHQucG9zaXRpb24gPT09ICdiZWxvdycpXG5cdFx0XHRcdHRoaXMubHlyaWNIZWlnaHRCZWxvdyA9IHRoaXMuaGVpZ2h0O1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLmx5cmljSGVpZ2h0QWJvdmUgPSB0aGlzLmhlaWdodDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJjaG9yZFwiOlxuXHRcdFx0aWYgKG9wdC5wb3NpdGlvbiAmJiBvcHQucG9zaXRpb24gPT09ICdiZWxvdycpXG5cdFx0XHRcdHRoaXMuY2hvcmRIZWlnaHRCZWxvdyA9IHRoaXMuaGVpZ2h0O1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLmNob3JkSGVpZ2h0QWJvdmUgPSB0aGlzLmhlaWdodDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJ0ZXh0XCI6XG5cdFx0XHRpZiAodGhpcy5waXRjaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChvcHQucG9zaXRpb24gJiYgb3B0LnBvc2l0aW9uID09PSAnYmVsb3cnKVxuXHRcdFx0XHRcdHRoaXMuY2hvcmRIZWlnaHRCZWxvdyA9IHRoaXMuaGVpZ2h0O1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dGhpcy5jaG9yZEhlaWdodEFib3ZlID0gdGhpcy5oZWlnaHQ7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5ID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJwYXJ0XCI6IHRoaXMucGFydEhlaWdodEFib3ZlID0gdGhpcy5oZWlnaHQ7IGJyZWFrO1xuXHR9XG59O1xuXG5SZWxhdGl2ZUVsZW1lbnQucHJvdG90eXBlLnNldFggPSBmdW5jdGlvbiAoeCkge1xuXHR0aGlzLnggPSB4K3RoaXMuZHg7XG59O1xuXG5SZWxhdGl2ZUVsZW1lbnQucHJvdG90eXBlLnNldFVwcGVyQW5kTG93ZXJFbGVtZW50cyA9IGZ1bmN0aW9uKHBvc2l0aW9uWSkge1xuXHRzd2l0Y2godGhpcy50eXBlKSB7XG5cdFx0Y2FzZSBcInBhcnRcIjpcblx0XHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLnBhcnRIZWlnaHRBYm92ZSArIHRoaXMuaGVpZ2h0O1xuXHRcdFx0dGhpcy5ib3R0b20gPSBwb3NpdGlvblkucGFydEhlaWdodEFib3ZlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRleHRcIjpcblx0XHRjYXNlIFwiY2hvcmRcIjpcblx0XHRcdGlmICh0aGlzLmNob3JkSGVpZ2h0QWJvdmUpIHtcblx0XHRcdFx0dGhpcy50b3AgPSBwb3NpdGlvblkuY2hvcmRIZWlnaHRBYm92ZTtcblx0XHRcdFx0dGhpcy5ib3R0b20gPSBwb3NpdGlvblkuY2hvcmRIZWlnaHRBYm92ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLmNob3JkSGVpZ2h0QmVsb3c7XG5cdFx0XHRcdHRoaXMuYm90dG9tID0gcG9zaXRpb25ZLmNob3JkSGVpZ2h0QmVsb3c7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwibHlyaWNcIjpcblx0XHRcdGlmICh0aGlzLmx5cmljSGVpZ2h0QWJvdmUpIHtcblx0XHRcdFx0dGhpcy50b3AgPSBwb3NpdGlvblkubHlyaWNIZWlnaHRBYm92ZTtcblx0XHRcdFx0dGhpcy5ib3R0b20gPSBwb3NpdGlvblkubHlyaWNIZWlnaHRBYm92ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLmx5cmljSGVpZ2h0QmVsb3c7XG5cdFx0XHRcdHRoaXMuYm90dG9tID0gcG9zaXRpb25ZLmx5cmljSGVpZ2h0QmVsb3c7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZGVidWdcIjpcblx0XHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLmNob3JkSGVpZ2h0QWJvdmU7XG5cdFx0XHR0aGlzLmJvdHRvbSA9IHBvc2l0aW9uWS5jaG9yZEhlaWdodEFib3ZlO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKHRoaXMucGl0Y2ggPT09IHVuZGVmaW5lZCB8fCB0aGlzLnRvcCA9PT0gdW5kZWZpbmVkKVxuXHRcdHdpbmRvdy5jb25zb2xlLmVycm9yKFwiUmVsYXRpdmVFbGVtZW50IHBvc2l0aW9uIG5vdCBzZXQuXCIsIHRoaXMudHlwZSwgdGhpcy5waXRjaCwgdGhpcy50b3AsIHBvc2l0aW9uWSk7XG59O1xuXG5SZWxhdGl2ZUVsZW1lbnQucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGJhcnRvcCkge1xuXHRpZiAodGhpcy5waXRjaCA9PT0gdW5kZWZpbmVkKVxuXHRcdHdpbmRvdy5jb25zb2xlLmVycm9yKHRoaXMudHlwZSArIFwiIFJlbGF0aXZlIEVsZW1lbnQgeS1jb29yZGluYXRlIG5vdCBzZXQuXCIpO1xuXHR2YXIgeSA9IHJlbmRlcmVyLmNhbGNZKHRoaXMucGl0Y2gpO1xuXHRzd2l0Y2godGhpcy50eXBlKSB7XG5cdFx0Y2FzZSBcInN5bWJvbFwiOlxuXHRcdFx0aWYgKHRoaXMuYz09PW51bGwpIHJldHVybiBudWxsO1xuXHRcdFx0dmFyIGtsYXNzID0gXCJzeW1ib2xcIjtcblx0XHRcdGlmICh0aGlzLmtsYXNzKSBrbGFzcyArPSBcIiBcIiArIHRoaXMua2xhc3M7XG5cdFx0XHR0aGlzLmdyYXBoZWxlbSA9IHJlbmRlcmVyLnByaW50U3ltYm9sKHRoaXMueCwgdGhpcy5waXRjaCwgdGhpcy5jLCB0aGlzLnNjYWxleCwgdGhpcy5zY2FsZXksIHJlbmRlcmVyLmFkZENsYXNzZXMoa2xhc3MpKTsgYnJlYWs7XG5cdFx0Y2FzZSBcImRlYnVnXCI6XG5cdFx0XHR0aGlzLmdyYXBoZWxlbSA9IHJlbmRlcmVyLnJlbmRlclRleHQodGhpcy54LCByZW5kZXJlci5jYWxjWSgxNSksIFwiXCIrdGhpcy5jLCBcImRlYnVnZm9udFwiLCAnZGVidWctbXNnJywgJ3N0YXJ0Jyk7IGJyZWFrO1xuXHRcdGNhc2UgXCJiYXJOdW1iZXJcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIFwiXCIrdGhpcy5jLCBcIm1lYXN1cmVmb250XCIsICdiYXItbnVtYmVyJywgXCJtaWRkbGVcIik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwibHlyaWNcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIHRoaXMuYywgXCJ2b2NhbGZvbnRcIiwgJ2x5cmljJywgXCJtaWRkbGVcIik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiY2hvcmRcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIHRoaXMuYywgJ2djaG9yZGZvbnQnLCBcImNob3JkXCIsIFwibWlkZGxlXCIpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImRlY29yYXRpb25cIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIHRoaXMuYywgJ2Fubm90YXRpb25mb250JywgXCJhbm5vdGF0aW9uXCIsIFwibWlkZGxlXCIsIHRydWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRleHRcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIHRoaXMuYywgJ2Fubm90YXRpb25mb250JywgXCJhbm5vdGF0aW9uXCIsIFwic3RhcnRcIiwgdGhpcy5jZW50ZXJWZXJ0aWNhbGx5KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJtdWx0aW1lYXN1cmUtdGV4dFwiOlxuXHRcdFx0dGhpcy5ncmFwaGVsZW0gPSByZW5kZXJlci5yZW5kZXJUZXh0KHRoaXMueCt0aGlzLncvMiwgeSwgdGhpcy5jLCAndGVtcG9mb250JywgXCJyZXN0XCIsIFwibWlkZGxlXCIsIGZhbHNlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJwYXJ0XCI6XG5cdFx0XHR0aGlzLmdyYXBoZWxlbSA9IHJlbmRlcmVyLnJlbmRlclRleHQodGhpcy54LCB5LCB0aGlzLmMsICdwYXJ0c2ZvbnQnLCBcInBhcnRcIiwgXCJzdGFydFwiKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJiYXJcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucHJpbnRTdGVtKHRoaXMueCwgdGhpcy5saW5ld2lkdGgsIHksIChiYXJ0b3ApP2JhcnRvcDpyZW5kZXJlci5jYWxjWSh0aGlzLnBpdGNoMikpOyBicmVhazsgLy8gYmFydG9wIGNhbid0IGJlIDBcblx0XHRjYXNlIFwic3RlbVwiOlxuXHRcdFx0dGhpcy5ncmFwaGVsZW0gPSByZW5kZXJlci5wcmludFN0ZW0odGhpcy54LCB0aGlzLmxpbmV3aWR0aCwgeSwgcmVuZGVyZXIuY2FsY1kodGhpcy5waXRjaDIpKTsgYnJlYWs7XG5cdFx0Y2FzZSBcImxlZGdlclwiOlxuXHRcdFx0dGhpcy5ncmFwaGVsZW0gPSByZW5kZXJlci5wcmludFN0YXZlTGluZSh0aGlzLngsIHRoaXMueCt0aGlzLncsIHRoaXMucGl0Y2gpOyBicmVhaztcblx0fVxuXHRpZiAodGhpcy5zY2FsZXghPT0xICYmIHRoaXMuZ3JhcGhlbGVtKSB7XG5cdFx0cmVuZGVyZXIuc2NhbGVFeGlzdGluZ0VsZW0odGhpcy5ncmFwaGVsZW0sIHRoaXMuc2NhbGV4LCB0aGlzLnNjYWxleSwgdGhpcy54LCB5KTtcblx0fVxuXHRyZXR1cm4gdGhpcy5ncmFwaGVsZW07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlbGF0aXZlRWxlbWVudDtcbiIsIi8vICAgIGFiY19iZWFtX2VsZW1lbnQuanM6IERlZmluaXRpb24gb2YgdGhlIEJlYW1FbGVtIGNsYXNzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQWJzb2x1dGVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfYWJzb2x1dGVfZWxlbWVudCcpO1xudmFyIFJlbGF0aXZlRWxlbWVudCA9IHJlcXVpcmUoJy4vYWJjX3JlbGF0aXZlX2VsZW1lbnQnKTtcbnZhciBzcGFjaW5nID0gcmVxdWlyZSgnLi9hYmNfc3BhY2luZycpO1xuXG52YXIgZ2V0RHVybG9nID0gZnVuY3Rpb24oZHVyYXRpb24pIHtcbiAgICAgICAgLy8gVE9ETy1QRVI6IFRoaXMgaXMgYSBoYWNrIHRvIHByZXZlbnQgYSBDaHJvbWUgbG9ja3VwLiBEdXJhdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGRlZmluZWQgYWxyZWFkeSxcbiAgICAgICAgLy8gYnV0IHRoZXJlJ3MgZGVmaW5pdGVseSBhIGNhc2Ugd2hlcmUgaXQgaXNuJ3QuIFtQcm9iYWJseSBzb21ldGhpbmcgdG8gZG8gd2l0aCB0cmlwbGV0cy5dXG4gICAgICAgIGlmIChkdXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbi8vICAgICAgICBjb25zb2xlLmxvZyhcImdldER1cmxvZzogXCIgKyBkdXJhdGlvbik7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nKGR1cmF0aW9uKS9NYXRoLmxvZygyKSk7XG59O1xuXG5cbi8vIE1vc3QgZWxlbWVudHMgb24gdGhlIHBhZ2UgYXJlIHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGFic29sdXRlIGVsZW1lbnQgLS0gbm90ZXMsIHJlc3RzLCBiYXJzLCBldGMuIEJlYW1zLCBob3dldmVyLCBzcGFuIG11bHRpcGxlIGVsZW1lbnRzLlxuLy8gVGhpcyBtZWFucyB0aGF0IGJlYW1zIGNhbid0IGJlIGxhaWQgb3V0IHVudGlsIHRoZSBhYnNvbHV0ZSBlbGVtZW50cyBhcmUgcGxhY2VkLiBUaGVyZSBpcyB0aGUgZnVydGhlciBjb21wbGljYXRpb24gdGhhdCB0aGUgc3RlbXMgZm9yIGJlYW1lZFxuLy8gbm90ZXMgY2FuJ3QgYmUgbGFpZCBvdXQgdW50aWwgdGhlIGJlYW1zIGFyZSBiZWNhdXNlIHdlIGRvbid0IGtub3cgaG93IGxvbmcgdGhleSB3aWxsIGJlIHVudGlsIHdlIGtub3cgdGhlIHNsb3BlIG9mIHRoZSBiZWFtIGFuZCB0aGUgaG9yaXpvbnRhbFxuLy8gc3BhY2luZyBvZiB0aGUgYWJzb2x1dGUgZWxlbWVudHMuXG4vL1xuLy8gU28sIHdoZW4gYSBiZWFtIGlzIGRldGVjdGVkLCBhIEJlYW1FbGVtIGlzIGNyZWF0ZWQsIHRoZW4gYWxsIG5vdGVzIGJlbG9uZ2luZyB0byB0aGF0IGJlYW0gYXJlIGFkZGVkIHRvIGl0LiBUaGVzZSBub3RlcyBhcmUgbm90IGdpdmVuIHN0ZW1zIGF0IHRoYXQgdGltZS5cbi8vIFRoZW4sIGFmdGVyIHRoZSBob3Jpem9udGFsIGxheW91dCBpcyBjb21wbGV0ZSwgYWxsIG9mIHRoZSBCZWFtRWxlbSBhcmUgaXRlcmF0ZWQgdG8gc2V0IHRoZSBiZWFtIHBvc2l0aW9uLCB0aGVuIGFsbCBvZiB0aGUgbm90ZXMgdGhhdCBhcmUgYmVhbWVkIGFyZSBnaXZlblxuLy8gc3RlbXMuIEFmdGVyIHRoYXQsIHdlIGFyZSByZWFkeSBmb3IgdGhlIGRyYXdpbmcgc3RlcC5cblxuLy8gVGhlcmUgYXJlIHRocmVlIHBoYXNlczogdGhlIHNldHVwIHBoYXNlLCB3aGVuIG5ldyBlbGVtZW50cyBhcmUgYmVpbmcgZGlzY292ZXJlZCwgdGhlIGxheW91dCBwaGFzZSwgd2hlbiBldmVyeXRoaW5nIGlzIGNhbGN1bGF0ZWQsIGFuZCB0aGUgZHJhd2luZyBwaGFzZSxcbi8vIHdoZW4gdGhlIG9iamVjdCBpcyBub3QgY2hhbmdlZCwgYnV0IGlzIHVzZWQgdG8gcHV0IHRoZSBlbGVtZW50cyBvbiB0aGUgcGFnZS5cblxudmFyIEJlYW1FbGVtO1xuXG4oZnVuY3Rpb24oKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8vXG5cdC8vIFNldHVwIHBoYXNlXG5cdC8vXG5cdEJlYW1FbGVtID0gZnVuY3Rpb24gQmVhbUVsZW0oc3RlbUhlaWdodCwgdHlwZSwgZmxhdCkge1xuXHRcdC8vIHR5cGUgaXMgXCJncmFjZVwiLCBcInVwXCIsIFwiZG93blwiLCBvciB1bmRlZmluZWQuIGZsYXQgaXMgdXNlZCB0byBmb3JjZSBmbGF0IGJlYW1zLCBhcyBpdCBjb21tb25seSBmb3VuZCBpbiB0aGUgZ3JhY2Ugbm90ZXMgb2YgYmFncGlwZSBtdXNpYy5cblx0XHR0aGlzLmlzZmxhdCA9IGZsYXQ7XG5cdFx0dGhpcy5pc2dyYWNlID0gKHR5cGUgJiYgdHlwZSA9PT0gXCJncmFjZVwiKTtcblx0XHR0aGlzLmZvcmNldXAgPSB0aGlzLmlzZ3JhY2UgfHwgKHR5cGUgJiYgdHlwZSA9PT0gXCJ1cFwiKTtcblx0XHR0aGlzLmZvcmNlZG93biA9ICh0eXBlICYmIHR5cGUgPT09IFwiZG93blwiKTtcblx0XHR0aGlzLmVsZW1zID0gW107IC8vIGFsbCB0aGUgQWJzb2x1dGVFbGVtZW50cyB0aGF0IHRoaXMgYmVhbSB0b3VjaGVzLiBJdCBtYXkgaW5jbHVkZSBlbWJlZGRlZCByZXN0cy5cblx0XHR0aGlzLnRvdGFsID0gMDtcblx0XHR0aGlzLmFsbHJlc3RzID0gdHJ1ZTtcblx0XHR0aGlzLnN0ZW1IZWlnaHQgPSBzdGVtSGVpZ2h0O1xuXHRcdHRoaXMuYmVhbXMgPSBbXTsgLy8gRHVyaW5nIHRoZSBsYXlvdXQgcGhhc2UsIHRoaXMgd2lsbCBiZWNvbWUgYSBsaXN0IG9mIHRoZSBiZWFtcyB0aGF0IG5lZWQgdG8gYmUgZHJhd24uXG5cdH07XG5cblx0QmVhbUVsZW0ucHJvdG90eXBlLnNldEhpbnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy5oaW50ID0gdHJ1ZTtcblx0fTtcblxuXHRCZWFtRWxlbS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oYWJzZWxlbSkge1xuXHRcdHZhciBwaXRjaCA9IGFic2VsZW0uYWJjZWxlbS5hdmVyYWdlcGl0Y2g7XG5cdFx0aWYgKHBpdGNoID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gZG9uJ3QgaW5jbHVkZSBlbGVtZW50cyBsaWtlIHNwYWNlcnMgaW4gYmVhbXNcblx0XHR0aGlzLmFsbHJlc3RzID0gdGhpcy5hbGxyZXN0cyAmJiBhYnNlbGVtLmFiY2VsZW0ucmVzdDtcblx0XHRhYnNlbGVtLmJlYW0gPSB0aGlzO1xuXHRcdHRoaXMuZWxlbXMucHVzaChhYnNlbGVtKTtcblx0XHQvL3ZhciBwaXRjaCA9IGFic2VsZW0uYWJjZWxlbS5hdmVyYWdlcGl0Y2g7XG5cdFx0dGhpcy50b3RhbCArPSBwaXRjaDsgLy8gVE9ETyBDSE9SRCAoZ2V0IHBpdGNoZXMgZnJvbSBhYnNlbGVtLmhlYWRzKVxuXHRcdGlmICh0aGlzLm1pbiA9PT0gdW5kZWZpbmVkIHx8IGFic2VsZW0uYWJjZWxlbS5taW5waXRjaCA8IHRoaXMubWluKSB7XG5cdFx0XHR0aGlzLm1pbiA9IGFic2VsZW0uYWJjZWxlbS5taW5waXRjaDtcblx0XHR9XG5cdFx0aWYgKHRoaXMubWF4ID09PSB1bmRlZmluZWQgfHwgYWJzZWxlbS5hYmNlbGVtLm1heHBpdGNoID4gdGhpcy5tYXgpIHtcblx0XHRcdHRoaXMubWF4ID0gYWJzZWxlbS5hYmNlbGVtLm1heHBpdGNoO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgbWlkZGxlTGluZSA9IDY7XHQvLyBoYXJkY29kZWQgNiBpcyBCXG5cblx0QmVhbUVsZW0ucHJvdG90eXBlLmNhbGNEaXIgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAodGhpcy5mb3JjZXVwKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAodGhpcy5mb3JjZWRvd24pIHJldHVybiBmYWxzZTtcblx0XHR2YXIgYXZlcmFnZSA9IGNhbGNBdmVyYWdlKHRoaXMudG90YWwsIHRoaXMuZWxlbXMubGVuZ3RoKTtcblx0XHRyZXR1cm4gYXZlcmFnZSA8IG1pZGRsZUxpbmU7XG5cdH07XG5cblx0Ly9cblx0Ly8gbGF5b3V0IHBoYXNlXG5cdC8vXG5cdEJlYW1FbGVtLnByb3RvdHlwZS5sYXlvdXQgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAodGhpcy5lbGVtcy5sZW5ndGggPT09IDAgfHwgdGhpcy5hbGxyZXN0cykgcmV0dXJuO1xuXG5cdFx0dGhpcy5zdGVtc1VwID0gdGhpcy5jYWxjRGlyKCk7IC8vIFRydWUgbWVhbnMgdGhlIHN0ZW1zIGFyZSBmYWNpbmcgdXAuXG5cdFx0dmFyIGR5ID0gY2FsY0R5KHRoaXMuc3RlbXNVcCwgdGhpcy5pc2dyYWNlKTsgLy8gVGhpcyBpcyB0aGUgd2lkdGggb2YgdGhlIGJlYW0gbGluZS5cblxuXHRcdC8vIGNyZWF0ZSB0aGUgbWFpbiBiZWFtXG5cdFx0dmFyIGZpcnN0RWxlbWVudCA9IHRoaXMuZWxlbXNbMF07XG5cdFx0dmFyIGxhc3RFbGVtZW50ID0gdGhpcy5lbGVtc1t0aGlzLmVsZW1zLmxlbmd0aCAtIDFdO1xuXHRcdHZhciBtaW5TdGVtSGVpZ2h0ID0gMDsgLy8gVGhlIGZvbGxvd2luZyBpcyB0byBsZWF2ZSBzcGFjZSBmb3IgXCIhLy8vIVwiIG1hcmtzLlxuXHRcdHZhciByZWZlcmVuY2VQaXRjaCA9IHRoaXMuc3RlbXNVcCA/IGZpcnN0RWxlbWVudC5hYmNlbGVtLm1heHBpdGNoIDogZmlyc3RFbGVtZW50LmFiY2VsZW0ubWlucGl0Y2g7XG5cdFx0bWluU3RlbUhlaWdodCA9IG1pblN0ZW0oZmlyc3RFbGVtZW50LCB0aGlzLnN0ZW1zVXAsIHJlZmVyZW5jZVBpdGNoLCBtaW5TdGVtSGVpZ2h0KTtcblx0XHRtaW5TdGVtSGVpZ2h0ID0gbWluU3RlbShsYXN0RWxlbWVudCwgdGhpcy5zdGVtc1VwLCByZWZlcmVuY2VQaXRjaCwgbWluU3RlbUhlaWdodCk7XG5cdFx0bWluU3RlbUhlaWdodCA9IE1hdGgubWF4KHRoaXMuc3RlbUhlaWdodCwgbWluU3RlbUhlaWdodCArIDMpOyAvLyBUT0RPLVBFUjogVGhlIDMgaXMgdGhlIHdpZHRoIG9mIGEgMTZ0aCBiZWFtLiBUaGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgYmVhbSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuXHRcdHZhciB5UG9zID0gY2FsY1lQb3ModGhpcy50b3RhbCwgdGhpcy5lbGVtcy5sZW5ndGgsIG1pblN0ZW1IZWlnaHQsIHRoaXMuc3RlbXNVcCwgZmlyc3RFbGVtZW50LmFiY2VsZW0uYXZlcmFnZXBpdGNoLCBsYXN0RWxlbWVudC5hYmNlbGVtLmF2ZXJhZ2VwaXRjaCwgdGhpcy5pc2ZsYXQsIHRoaXMubWluLCB0aGlzLm1heCwgdGhpcy5pc2dyYWNlKTtcblx0XHR2YXIgeFBvcyA9IGNhbGNYUG9zKHRoaXMuc3RlbXNVcCwgZmlyc3RFbGVtZW50LCBsYXN0RWxlbWVudCk7XG5cdFx0dGhpcy5iZWFtcy5wdXNoKHsgc3RhcnRYOiB4UG9zWzBdLCBlbmRYOiB4UG9zWzFdLCBzdGFydFk6IHlQb3NbMF0sIGVuZFk6IHlQb3NbMV0sIGR5OiBkeSB9KTtcblxuXHRcdC8vIGNyZWF0ZSB0aGUgcmVzdCBvZiB0aGUgYmVhbXMgKGluIHRoZSBjYXNlIG9mIDEvMTZ0aCBub3RlcywgZXRjLlxuXHRcdHZhciBiZWFtcyA9IGNyZWF0ZUFkZGl0aW9uYWxCZWFtcyh0aGlzLmVsZW1zLCB0aGlzLnN0ZW1zVXAsIHRoaXMuYmVhbXNbMF0sIHRoaXMuaXNncmFjZSwgZHkpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYmVhbXMubGVuZ3RoOyBpKyspXG5cdFx0XHR0aGlzLmJlYW1zLnB1c2goYmVhbXNbaV0pO1xuXG5cdFx0Ly8gTm93IHRoYXQgdGhlIG1haW4gYmVhbSBpcyBkZWZpbmVkLCB3ZSBrbm93IGhvdyB0YWxsIHRoZSBzdGVtcyBzaG91bGQgYmUsIHNvIGNyZWF0ZSB0aGVtIGFuZCBhdHRhY2ggdGhlbSB0byB0aGUgb3JpZ2luYWwgbm90ZXMuXG5cdFx0Y3JlYXRlU3RlbXModGhpcy5lbGVtcywgdGhpcy5zdGVtc1VwLCB0aGlzLmJlYW1zWzBdLCBkeSwgdGhpcy5tYWluTm90ZSk7XG5cdH07XG5cblx0QmVhbUVsZW0ucHJvdG90eXBlLmlzQWJvdmUgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGVtc1VwO1xuXHR9O1xuXG5cdC8vIFdlIGNhbid0IGp1c3QgdXNlIHRoZSBlbnRpcmUgYmVhbSBmb3IgdGhlIGNhbGN1bGF0aW9uLiBUaGUgcmFuZ2UgaGFzIHRvIGJlIHBhc3NlZCBpbiwgYmVjYXVzZSB0aGUgYmVhbSBtaWdodCBleHRlbmQgaW50byBzb21lIHVucmVsYXRlZCBub3Rlcy4gZm9yIGluc3RhbmNlLCAoM19hJ2YnZSdmJzIgd2hlbiBMOjE2XG5cdEJlYW1FbGVtLnByb3RvdHlwZS5oZWlnaHRBdE1pZHBvaW50ID0gZnVuY3Rpb24oc3RhcnRYLCBlbmRYKSB7XG5cdFx0aWYgKHRoaXMuYmVhbXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0dmFyIGJlYW0gPSB0aGlzLmJlYW1zWzBdO1xuXHRcdHZhciBtaWRQb2ludCA9IHN0YXJ0WCArIChlbmRYIC0gc3RhcnRYKSAvIDI7XG5cdFx0cmV0dXJuIGdldEJhcllBdChiZWFtLnN0YXJ0WCwgYmVhbS5zdGFydFksIGJlYW0uZW5kWCwgYmVhbS5lbmRZLCBtaWRQb2ludCk7XG5cdH07XG5cblx0QmVhbUVsZW0ucHJvdG90eXBlLnlBdE5vdGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0dmFyIGJlYW0gPSB0aGlzLmJlYW1zWzBdO1xuXHRcdHJldHVybiBnZXRCYXJZQXQoYmVhbS5zdGFydFgsIGJlYW0uc3RhcnRZLCBiZWFtLmVuZFgsIGJlYW0uZW5kWSwgZWxlbWVudC54KTtcblx0fTtcblxuXHRCZWFtRWxlbS5wcm90b3R5cGUueEF0TWlkcG9pbnQgPSBmdW5jdGlvbihzdGFydFgsIGVuZFgpIHtcblx0XHRyZXR1cm4gc3RhcnRYICsgKGVuZFggLSBzdGFydFgpLzI7XG5cdH07XG5cblx0Ly9cblx0Ly8gRHJhd2luZyBwaGFzZVxuXHQvL1xuXHRCZWFtRWxlbS5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHJlbmRlcmVyKSB7XG5cdFx0aWYgKHRoaXMuYmVhbXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRyZW5kZXJlci5iZWdpbkdyb3VwKCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJlYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYmVhbSA9IHRoaXMuYmVhbXNbaV07XG5cdFx0XHRkcmF3QmVhbShyZW5kZXJlciwgYmVhbS5zdGFydFgsIGJlYW0uc3RhcnRZLCBiZWFtLmVuZFgsIGJlYW0uZW5kWSwgYmVhbS5keSwgdGhpcy5oaW50KTtcblx0XHR9XG5cdFx0cmVuZGVyZXIuZW5kR3JvdXAoJ2JlYW0tZWxlbScpO1xuXHR9O1xuXG5cdC8vXG5cdC8vIHByaXZhdGUgZnVuY3Rpb25zXG5cdC8vXG5cdGZ1bmN0aW9uIG1pblN0ZW0oZWxlbWVudCwgc3RlbXNVcCwgcmVmZXJlbmNlUGl0Y2gsIG1pblN0ZW1IZWlnaHQpIHtcblx0XHRpZiAoIWVsZW1lbnQuY2hpbGRyZW4pXG5cdFx0XHRyZXR1cm4gbWluU3RlbUhlaWdodDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBlbGVtID0gZWxlbWVudC5jaGlsZHJlbltpXTtcblx0XHRcdGlmIChzdGVtc1VwICYmIGVsZW0udG9wICE9PSB1bmRlZmluZWQgJiYgZWxlbS5jID09PSBcImZsYWdzLnVncmFjZVwiKVxuXHRcdFx0XHRtaW5TdGVtSGVpZ2h0ID0gTWF0aC5tYXgobWluU3RlbUhlaWdodCwgZWxlbS50b3AgLSByZWZlcmVuY2VQaXRjaCk7XG5cdFx0XHRlbHNlIGlmICghc3RlbXNVcCAmJiBlbGVtLmJvdHRvbSAhPT0gdW5kZWZpbmVkICYmIGVsZW0uYyA9PT0gXCJmbGFncy51Z3JhY2VcIilcblx0XHRcdFx0bWluU3RlbUhlaWdodCA9IE1hdGgubWF4KG1pblN0ZW1IZWlnaHQsIHJlZmVyZW5jZVBpdGNoIC0gZWxlbS5ib3R0b20gKyA3KTsgLy8gVGhlIGV4dHJhIDcgaXMgYmVjYXVzZSB3ZSBhcmUgbWVhc3VyaW5nIHRoZSBzbGFzaCBmcm9tIHRoZSB0b3AuXG5cdFx0fVxuXHRcdHJldHVybiBtaW5TdGVtSGVpZ2h0O1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FsY1NsYW50KGxlZnRBdmVyYWdlUGl0Y2gsIHJpZ2h0QXZlcmFnZVBpdGNoLCBudW1TdGVtcywgaXNGbGF0KSB7XG5cdFx0aWYgKGlzRmxhdClcblx0XHRcdHJldHVybiAwO1xuXHRcdHZhciBzbGFudCA9IGxlZnRBdmVyYWdlUGl0Y2ggLSByaWdodEF2ZXJhZ2VQaXRjaDtcblx0XHR2YXIgbWF4U2xhbnQgPSBudW1TdGVtcyAvIDI7XG5cblx0XHRpZiAoc2xhbnQgPiBtYXhTbGFudCkgc2xhbnQgPSBtYXhTbGFudDtcblx0XHRpZiAoc2xhbnQgPCAtbWF4U2xhbnQpIHNsYW50ID0gLW1heFNsYW50O1xuXHRcdHJldHVybiBzbGFudDtcblx0fVxuXG5cdGZ1bmN0aW9uIGNhbGNBdmVyYWdlKHRvdGFsLCBudW1FbGVtZW50cykge1xuXHRcdGlmICghbnVtRWxlbWVudHMpXG5cdFx0XHRyZXR1cm4gMDtcblx0XHRyZXR1cm4gdG90YWwgLyBudW1FbGVtZW50cztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEJhcllBdChzdGFydHgsIHN0YXJ0eSwgZW5keCwgZW5keSwgeCkge1xuXHRcdHJldHVybiBzdGFydHkgKyAoZW5keSAtIHN0YXJ0eSkgLyAoZW5keCAtIHN0YXJ0eCkgKiAoeCAtIHN0YXJ0eCk7XG5cdH1cblxuXHRmdW5jdGlvbiBjYWxjRHkoYXNjLCBpc0dyYWNlKSB7XG5cdFx0dmFyIGR5ID0gKGFzYykgPyBzcGFjaW5nLlNURVAgOiAtc3BhY2luZy5TVEVQO1xuXHRcdGlmIChpc0dyYWNlKSBkeSA9IGR5ICogMC40O1xuXHRcdHJldHVybiBkeTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdCZWFtKHJlbmRlcmVyLCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHksIGlzSGludCkge1xuXHRcdHZhciBrbGFzcyA9ICdiZWFtLWVsZW0nO1xuXHRcdGlmIChpc0hpbnQpXG5cdFx0XHRrbGFzcyArPSBcIiBhYmNqcy1oaW50XCI7XG5cblx0XHQvLyB0aGUgWCBjb29yZGluYXRlcyBhcmUgYWN0dWFsIGNvb3JkaW5hdGVzLCBidXQgdGhlIFkgY29vcmRpbmF0ZXMgYXJlIGluIHBpdGNoZXMuXG5cdFx0c3RhcnRZID0gcmVuZGVyZXIuY2FsY1koc3RhcnRZKTtcblx0XHRlbmRZID0gcmVuZGVyZXIuY2FsY1koZW5kWSk7XG5cdFx0dmFyIHBhdGhTdHJpbmcgPSBcIk1cIiArIHN0YXJ0WCArIFwiIFwiICsgc3RhcnRZICsgXCIgTFwiICsgZW5kWCArIFwiIFwiICsgZW5kWSArXG5cdFx0XHRcIkxcIiArIGVuZFggKyBcIiBcIiArIChlbmRZICsgZHkpICsgXCIgTFwiICsgc3RhcnRYICsgXCIgXCIgKyAoc3RhcnRZICsgZHkpICsgXCJ6XCI7XG5cdFx0cmVuZGVyZXIucHJpbnRQYXRoKHtcblx0XHRcdHBhdGg6IHBhdGhTdHJpbmcsXG5cdFx0XHRzdHJva2U6IFwibm9uZVwiLFxuXHRcdFx0ZmlsbDogXCIjMDAwMDAwXCIsXG5cdFx0XHQnY2xhc3MnOiByZW5kZXJlci5hZGRDbGFzc2VzKGtsYXNzKVxuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FsY1hQb3MoYXNjLCBmaXJzdEVsZW1lbnQsIGxhc3RFbGVtZW50KSB7XG5cdFx0dmFyIHN0YXJ0aGVhZCA9IGZpcnN0RWxlbWVudC5oZWFkc1thc2MgPyAwIDogZmlyc3RFbGVtZW50LmhlYWRzLmxlbmd0aCAtIDFdO1xuXHRcdHZhciBlbmRoZWFkID0gbGFzdEVsZW1lbnQuaGVhZHNbYXNjID8gMCA6IGxhc3RFbGVtZW50LmhlYWRzLmxlbmd0aCAtIDFdO1xuXHRcdHZhciBzdGFydFggPSBzdGFydGhlYWQueDtcblx0XHRpZiAoYXNjKSBzdGFydFggKz0gc3RhcnRoZWFkLncgLSAwLjY7XG5cdFx0dmFyIGVuZFggPSBlbmRoZWFkLng7XG5cdFx0aWYgKGFzYykgZW5kWCArPSBlbmRoZWFkLnc7XG5cdFx0cmV0dXJuIFsgc3RhcnRYLCBlbmRYIF07XG5cdH1cblxuXHRmdW5jdGlvbiBjYWxjWVBvcyh0b3RhbCwgbnVtRWxlbWVudHMsIHN0ZW1IZWlnaHQsIGFzYywgZmlyc3RBdmVyYWdlUGl0Y2gsIGxhc3RBdmVyYWdlUGl0Y2gsIGlzRmxhdCwgbWluUGl0Y2gsIG1heFBpdGNoLCBpc0dyYWNlKSB7XG5cdFx0dmFyIGF2ZXJhZ2UgPSBjYWxjQXZlcmFnZSh0b3RhbCwgbnVtRWxlbWVudHMpOyAvLyBUaGlzIGlzIHRoZSBhdmVyYWdlIHBpdGNoIGZvciB0aGUgYWxsIHRoZSBub3RlcyB0aGF0IHdpbGwgYmUgYmVhbWVkLlxuXHRcdHZhciBiYXJwb3MgPSBzdGVtSGVpZ2h0IC0gMjsgLy8gKGlzR3JhY2UpPyA1Ojc7XG5cdFx0dmFyIGJhcm1pbnBvcyA9IHN0ZW1IZWlnaHQgLSAyO1xuXHRcdHZhciBwb3MgPSBNYXRoLnJvdW5kKGFzYyA/IE1hdGgubWF4KGF2ZXJhZ2UgKyBiYXJwb3MsIG1heFBpdGNoICsgYmFybWlucG9zKSA6IE1hdGgubWluKGF2ZXJhZ2UgLSBiYXJwb3MsIG1pblBpdGNoIC0gYmFybWlucG9zKSk7XG5cblx0XHR2YXIgc2xhbnQgPSBjYWxjU2xhbnQoZmlyc3RBdmVyYWdlUGl0Y2gsIGxhc3RBdmVyYWdlUGl0Y2gsIG51bUVsZW1lbnRzLCBpc0ZsYXQpO1xuXHRcdHZhciBzdGFydFkgPSBwb3MgKyBNYXRoLmZsb29yKHNsYW50IC8gMik7XG5cdFx0dmFyIGVuZFkgPSBwb3MgKyBNYXRoLmZsb29yKC1zbGFudCAvIDIpO1xuXG5cdFx0Ly8gSWYgdGhlIG5vdGVzIGFyZSB0b28gaGlnaCBvciB0b28gbG93LCBtYWtlIHRoZSBiZWFtIGdvIGRvd24gdG8gdGhlIG1pZGRsZVxuXHRcdGlmICghaXNHcmFjZSkge1xuXHRcdFx0aWYgKGFzYyAmJiBwb3MgPCA2KSB7XG5cdFx0XHRcdHN0YXJ0WSA9IDY7XG5cdFx0XHRcdGVuZFkgPSA2O1xuXHRcdFx0fSBlbHNlIGlmICghYXNjICYmIHBvcyA+IDYpIHtcblx0XHRcdFx0c3RhcnRZID0gNjtcblx0XHRcdFx0ZW5kWSA9IDY7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFsgc3RhcnRZLCBlbmRZXTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZVN0ZW1zKGVsZW1zLCBhc2MsIGJlYW0sIGR5LCBtYWluTm90ZSkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBlbGVtID0gZWxlbXNbaV07XG5cdFx0XHRpZiAoZWxlbS5hYmNlbGVtLnJlc3QpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0Ly8gVE9ETy1QRVI6IFRoaXMgaXMgb2RkLiBJZiBpdCBpcyBhIHJlZ3VsYXIgYmVhbSB0aGVuIGVsZW1zIGlzIGFuIGFycmF5IG9mIEFic29sdXRlRWxlbWVudHMsIGlmIGl0IGlzIGEgZ3JhY2UgYmVhbSB0aGVuIGl0IGlzIGFuIGFycmF5IG9mIG9iamVjdHMgLCBzbyB3ZSBkaXJlY3RseSBhdHRhY2ggdGhlIGVsZW1lbnQgdG8gdGhlIHBhcmVudC4gV2UgdGVsbCBpdCBpZiBpcyBhIGdyYWNlIG5vdGUgYmVjYXVzZSB0aGV5IGFyZSBwYXNzZWQgaW4gYXMgYSBnZW5lcmljIG9iamVjdCBpbnN0ZWFkIG9mIGFuIEFic29sdXRlRWxlbWVudC5cblx0XHRcdHZhciBpc0dyYWNlID0gZWxlbS5hZGRFeHRyYSA/IGZhbHNlIDogdHJ1ZTtcblx0XHRcdHZhciBwYXJlbnQgPSBpc0dyYWNlID8gbWFpbk5vdGUgOiBlbGVtO1xuXHRcdFx0dmFyIGZ1cnRoZXN0SGVhZCA9IGVsZW0uaGVhZHNbKGFzYykgPyAwIDogZWxlbS5oZWFkcy5sZW5ndGggLSAxXTtcblx0XHRcdHZhciBvdmFsRGVsdGEgPSAxIC8gNTsvLyhpc0dyYWNlKT8xLzM6MS81O1xuXHRcdFx0dmFyIHBpdGNoID0gZnVydGhlc3RIZWFkLnBpdGNoICsgKChhc2MpID8gb3ZhbERlbHRhIDogLW92YWxEZWx0YSk7XG5cdFx0XHR2YXIgZHggPSBhc2MgPyBmdXJ0aGVzdEhlYWQudyA6IDA7IC8vIGRvd24tcG9pbnRpbmcgc3RlbXMgc3RhcnQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgbm90ZSwgdXAtcG9pbnRpbmcgc3RlbXMgc3RhcnQgb24gdGhlIHJpZ2h0IHNpZGUsIHNvIHdlIG9mZnNldCBieSB0aGUgbm90ZSB3aWR0aC5cblx0XHRcdHZhciB4ID0gZnVydGhlc3RIZWFkLnggKyBkeDsgLy8gdGhpcyBpcyBub3cgdGhlIGFjdHVhbCB4IGxvY2F0aW9uIGluIHBpeGVscy5cblx0XHRcdHZhciBiYXJ5ID0gZ2V0QmFyWUF0KGJlYW0uc3RhcnRYLCBiZWFtLnN0YXJ0WSwgYmVhbS5lbmRYLCBiZWFtLmVuZFksIHgpO1xuXHRcdFx0dmFyIGxpbmVXaWR0aCA9IChhc2MpID8gLTAuNiA6IDAuNjtcblx0XHRcdGlmICghYXNjKVxuXHRcdFx0XHRiYXJ5IC09IChkeSAvIDIpIC8gc3BhY2luZy5TVEVQO1x0Ly8gVE9ETy1QRVI6IFRoaXMgaXMganVzdCBhIGZ1ZGdlIGZhY3RvciBzbyB0aGUgZG93bi1wb2ludGluZyBzdGVtcyBkb24ndCBvdmVybGFwLlxuXHRcdFx0aWYgKGlzR3JhY2UpXG5cdFx0XHRcdGR4ICs9IGVsZW0uaGVhZHNbMF0uZHg7XG5cdFx0XHQvLyBUT0RPLVBFUi1IQUNLOiBPbmUgdHlwZSBvZiBub3RlIGhlYWQgaGFzIGEgZGlmZmVyZW50IHBsYWNlbWVudCBvZiB0aGUgc3RlbS4gVGhpcyBzaG91bGQgYmUgbW9yZSBnZW5lcmljYWxseSBjYWxjdWxhdGVkOlxuXHRcdFx0aWYgKGZ1cnRoZXN0SGVhZC5jID09PSAnbm90ZWhlYWRzLnNsYXNoLnF1YXJ0ZXInKSB7XG5cdFx0XHRcdGlmIChhc2MpXG5cdFx0XHRcdFx0cGl0Y2ggKz0gMTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHBpdGNoIC09IDE7XG5cdFx0XHR9XG5cdFx0XHR2YXIgc3RlbSA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIDAsIHBpdGNoLCB7XG5cdFx0XHRcdFwidHlwZVwiOiBcInN0ZW1cIixcblx0XHRcdFx0XCJwaXRjaDJcIjogYmFyeSxcblx0XHRcdFx0bGluZXdpZHRoOiBsaW5lV2lkdGhcblx0XHRcdH0pO1xuXHRcdFx0c3RlbS5zZXRYKHBhcmVudC54KTsgLy8gVGhpcyBpcyBhZnRlciB0aGUgeCBjb29yZGluYXRlcyB3ZXJlIHNldCwgc28gd2UgaGF2ZSB0byBzZXQgaXQgZGlyZWN0bHkuXG5cdFx0XHRwYXJlbnQuYWRkRXh0cmEoc3RlbSk7XG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVBZGRpdGlvbmFsQmVhbXMoZWxlbXMsIGFzYywgYmVhbSwgaXNHcmFjZSwgZHkpIHtcblx0XHR2YXIgYmVhbXMgPSBbXTtcblx0XHR2YXIgYXV4QmVhbXMgPSBbXTsgIC8vIGF1eGJlYW0gd2lsbCBiZSB7eCwgeSwgZHVybG9nLCBzaW5nbGV9IGF1eGJlYW1bMF0gc2hvdWxkIG1hdGNoIHdpdGggZHVybG9nPS00ICgxNnRoKSAoaj0tNC1kdXJsb2cpXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGVsZW0gPSBlbGVtc1tpXTtcblx0XHRcdGlmIChlbGVtLmFiY2VsZW0ucmVzdClcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR2YXIgZnVydGhlc3RIZWFkID0gZWxlbS5oZWFkc1soYXNjKSA/IDAgOiBlbGVtLmhlYWRzLmxlbmd0aCAtIDFdO1xuXHRcdFx0dmFyIHggPSBmdXJ0aGVzdEhlYWQueCArICgoYXNjKSA/IGZ1cnRoZXN0SGVhZC53IDogMCk7XG5cdFx0XHR2YXIgYmFyeSA9IGdldEJhcllBdChiZWFtLnN0YXJ0WCwgYmVhbS5zdGFydFksIGJlYW0uZW5kWCwgYmVhbS5lbmRZLCB4KTtcblxuXHRcdFx0dmFyIHN5ID0gKGFzYykgPyAtMS41IDogMS41O1xuXHRcdFx0aWYgKGlzR3JhY2UpIHN5ID0gc3kgKiAyIC8gMzsgLy8gVGhpcyBtYWtlcyB0aGUgc2Vjb25kIGJlYW0gb24gZ3JhY2Ugbm90ZXMgY2xvc2VyIHRvIHRoZSBmaXJzdCBvbmUuXG5cdFx0XHR2YXIgZHVyYXRpb24gPSBlbGVtLmFiY2VsZW0uZHVyYXRpb247IC8vIGdldCB0aGUgZHVyYXRpb24gdmlhIGFiY2VsZW0gYmVjYXVzZSBvZiB0cmlwbGV0c1xuXHRcdFx0aWYgKGR1cmF0aW9uID09PSAwKSBkdXJhdGlvbiA9IDAuMjU7IC8vIGlmIHRoaXMgaXMgc3RlbWxlc3MsIHRoZW4gd2UgdXNlIHF1YXJ0ZXIgbm90ZSBhcyB0aGUgZHVyYXRpb24uXG5cdFx0XHRmb3IgKHZhciBkdXJsb2cgPSBnZXREdXJsb2coZHVyYXRpb24pOyBkdXJsb2cgPCAtMzsgZHVybG9nKyspIHtcblx0XHRcdFx0aWYgKGF1eEJlYW1zWy00IC0gZHVybG9nXSkge1xuXHRcdFx0XHRcdGF1eEJlYW1zWy00IC0gZHVybG9nXS5zaW5nbGUgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhdXhCZWFtc1stNCAtIGR1cmxvZ10gPSB7XG5cdFx0XHRcdFx0XHR4OiB4ICsgKChhc2MpID8gLTAuNiA6IDApLCB5OiBiYXJ5ICsgc3kgKiAoLTQgLSBkdXJsb2cgKyAxKSxcblx0XHRcdFx0XHRcdGR1cmxvZzogZHVybG9nLCBzaW5nbGU6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAodmFyIGogPSBhdXhCZWFtcy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuXHRcdFx0XHRpZiAoaSA9PT0gZWxlbXMubGVuZ3RoIC0gMSB8fCBnZXREdXJsb2coZWxlbXNbaSArIDFdLmFiY2VsZW0uZHVyYXRpb24pID4gKC1qIC0gNCkpIHtcblxuXHRcdFx0XHRcdHZhciBhdXhCZWFtRW5kWCA9IHg7XG5cdFx0XHRcdFx0dmFyIGF1eEJlYW1FbmRZID0gYmFyeSArIHN5ICogKGogKyAxKTtcblxuXG5cdFx0XHRcdFx0aWYgKGF1eEJlYW1zW2pdLnNpbmdsZSkge1xuXHRcdFx0XHRcdFx0YXV4QmVhbUVuZFggPSAoaSA9PT0gMCkgPyB4ICsgNSA6IHggLSA1O1xuXHRcdFx0XHRcdFx0YXV4QmVhbUVuZFkgPSBnZXRCYXJZQXQoYmVhbS5zdGFydFgsIGJlYW0uc3RhcnRZLCBiZWFtLmVuZFgsIGJlYW0uZW5kWSwgYXV4QmVhbUVuZFgpICsgc3kgKiAoaiArIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRiZWFtcy5wdXNoKHsgc3RhcnRYOiBhdXhCZWFtc1tqXS54LCBlbmRYOiBhdXhCZWFtRW5kWCwgc3RhcnRZOiBhdXhCZWFtc1tqXS55LCBlbmRZOiBhdXhCZWFtRW5kWSwgZHk6IGR5IH0pO1xuXHRcdFx0XHRcdGF1eEJlYW1zID0gYXV4QmVhbXMuc2xpY2UoMCwgaik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJlYW1zO1xuXHR9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJlYW1FbGVtO1xuIiwiLy8gICAgYWJjX2JyYWNlX2VsZW1lbnQuanM6IERlZmluaXRpb24gb2YgdGhlIEJyYWNlRWxlbWVudCBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIEJyYWNlRWxlbSA9IGZ1bmN0aW9uIEJyYWNlRWxlbSgpIHtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG59O1xuXG5CcmFjZUVsZW0ucHJvdG90eXBlLmluY3JlYXNlU3RhdmVzSW5jbHVkZWQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmxlbmd0aCsrO1xufTtcblxuQnJhY2VFbGVtLnByb3RvdHlwZS5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKHgpIHtcblx0dGhpcy54ID0geDtcbn07XG5cbkJyYWNlRWxlbS5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDEwOyAvLyBUT0RPLVBFUjogcmlnaHQgbm93IHRoZSBkcmF3aW5nIGZ1bmN0aW9uIGRvZXNuJ3QgdmFyeSB0aGUgd2lkdGggYXQgYWxsLiBJZiBpdCBkb2VzIGluIHRoZSBmdXR1cmUgdGhlbiB0aGlzIHdpbGwgY2hhbmdlLlxufTtcblxuQnJhY2VFbGVtLnByb3RvdHlwZS5sYXlvdXQgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHRvcCwgYm90dG9tKSB7XG4gICAgdGhpcy5zdGFydFkgPSB0b3A7XG4gICAgdGhpcy5lbmRZID0gYm90dG9tO1xufTtcblxuQnJhY2VFbGVtLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKHJlbmRlcmVyLCB0b3AsIGJvdHRvbSkge1xuICAgIHRoaXMubGF5b3V0KHJlbmRlcmVyLCB0b3AsIGJvdHRvbSk7XG4gICAgcmVuZGVyZXIuZHJhd0JyYWNlKHRoaXMueCx0aGlzLnN0YXJ0WSwgdGhpcy5lbmRZKTtcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBCcmFjZUVsZW07XG4iLCJ2YXIgc3BhY2luZyA9IHJlcXVpcmUoJy4vYWJjX3NwYWNpbmcnKTtcblxuLyoqXG4gKiBHbHlwaHMgYW5kIHNvbWUgbWV0aG9kcyB0byBhZGp1c3QgZm9yIHRoZWlyIHggYW5kIHkgYmFzZWxpbmVcbiAqL1xuXHR2YXIgZ2x5cGhzID1cblx0eycwJzp7ZDpbWydNJyw0LjgzLC0xNC45N10sWydjJywwLjMzLC0wLjAzLDEuMTEsMC4wMCwxLjQ3LDAuMDZdLFsnYycsMS42OCwwLjM2LDIuOTcsMS41OSwzLjc4LDMuNjBdLFsnYycsMS4yMCwyLjk3LDAuODEsNi45NiwtMC45MCw5LjI3XSxbJ2MnLC0wLjc4LDEuMDgsLTEuNzEsMS43MSwtMi45MSwxLjk1XSxbJ2MnLC0wLjQ1LDAuMDksLTEuMzIsMC4wOSwtMS43NywwLjAwXSxbJ2MnLC0wLjgxLC0wLjE4LC0xLjQ3LC0wLjUxLC0yLjA3LC0xLjAyXSxbJ2MnLC0yLjM0LC0yLjA3LC0zLjE1LC02LjcyLC0xLjc0LC0xMC4yMF0sWydjJywwLjg3LC0yLjE2LDIuMjgsLTMuNDIsNC4xNCwtMy42Nl0sWyd6J10sWydtJywxLjExLDAuODddLFsnYycsLTAuMjEsLTAuMDYsLTAuNjksLTAuMDksLTAuODcsLTAuMDZdLFsnYycsLTAuNTQsMC4xMiwtMC44NywwLjQyLC0xLjE3LDAuOTldLFsnYycsLTAuMzYsMC42NiwtMC41MSwxLjU2LC0wLjYwLDMuMDBdLFsnYycsLTAuMDMsMC43NSwtMC4wMyw0LjU5LDAuMDAsNS4zMV0sWydjJywwLjA5LDEuNTAsMC4yNywyLjQwLDAuNjAsMy4wNl0sWydjJywwLjI0LDAuNDgsMC41NywwLjc4LDAuOTYsMC45MF0sWydjJywwLjI3LDAuMDksMC43OCwwLjA5LDEuMDUsMC4wMF0sWydjJywwLjM5LC0wLjEyLDAuNzIsLTAuNDIsMC45NiwtMC45MF0sWydjJywwLjMzLC0wLjY2LDAuNTEsLTEuNTYsMC42MCwtMy4wNl0sWydjJywwLjAzLC0wLjcyLDAuMDMsLTQuNTYsMC4wMCwtNS4zMV0sWydjJywtMC4wOSwtMS40NywtMC4yNywtMi4zNywtMC42MCwtMy4wM10sWydjJywtMC4yNCwtMC40OCwtMC41NCwtMC43OCwtMC45MywtMC45MF0sWyd6J11dLHc6MTAuNzgsaDoxNC45NTl9LFxuXHRcdCcxJzp7ZDpbWydNJywzLjMwLC0xNS4wNl0sWydjJywwLjA2LC0wLjA2LDAuMjEsLTAuMDMsMC42NiwwLjE1XSxbJ2MnLDAuODEsMC4zOSwxLjA4LDAuMzksMS44MywwLjAzXSxbJ2MnLDAuMjEsLTAuMDksMC4zOSwtMC4xNSwwLjQyLC0wLjE1XSxbJ2MnLDAuMTIsMC4wMCwwLjIxLDAuMDksMC4yNywwLjIxXSxbJ2MnLDAuMDYsMC4xMiwwLjA2LDAuMzMsMC4wNiw1Ljk0XSxbJ2MnLDAuMDAsMy45MywwLjAwLDUuODUsMC4wMyw2LjAzXSxbJ2MnLDAuMDYsMC4zNiwwLjE1LDAuNjksMC4yNywwLjk2XSxbJ2MnLDAuMzYsMC43NSwwLjkzLDEuMTcsMS42OCwxLjI2XSxbJ2MnLDAuMzAsMC4wMywwLjM5LDAuMDksMC4zOSwwLjMwXSxbJ2MnLDAuMDAsMC4xNSwtMC4wMywwLjE4LC0wLjA5LDAuMjRdLFsnYycsLTAuMDYsMC4wNiwtMC4wOSwwLjA2LC0wLjQ4LDAuMDZdLFsnYycsLTAuNDIsMC4wMCwtMC42OSwtMC4wMywtMi4xMCwtMC4yNF0sWydjJywtMC45MCwtMC4xNSwtMS43NywtMC4xNSwtMi42NywwLjAwXSxbJ2MnLC0xLjQxLDAuMjEsLTEuNjgsMC4yNCwtMi4xMCwwLjI0XSxbJ2MnLC0wLjM5LDAuMDAsLTAuNDIsMC4wMCwtMC40OCwtMC4wNl0sWydjJywtMC4wNiwtMC4wNiwtMC4wNiwtMC4wOSwtMC4wNiwtMC4yNF0sWydjJywwLjAwLC0wLjIxLDAuMDYsLTAuMjcsMC4zNiwtMC4zMF0sWydjJywwLjc1LC0wLjA5LDEuMzIsLTAuNTEsMS42OCwtMS4yNl0sWydjJywwLjEyLC0wLjI3LDAuMjEsLTAuNjAsMC4yNywtMC45Nl0sWydjJywwLjAzLC0wLjE4LDAuMDMsLTEuNTksMC4wMywtNC4yOV0sWydjJywwLjAwLC0zLjg3LDAuMDAsLTQuMDUsLTAuMDYsLTQuMTRdLFsnYycsLTAuMDksLTAuMTUsLTAuMTgsLTAuMjQsLTAuMzksLTAuMjRdLFsnYycsLTAuMTIsMC4wMCwtMC4xNSwwLjAzLC0wLjIxLDAuMDZdLFsnYycsLTAuMDMsMC4wNiwtMC40NSwwLjk5LC0wLjk2LDIuMTNdLFsnYycsLTAuNDgsMS4xNCwtMC45MCwyLjEwLC0wLjkzLDIuMTZdLFsnYycsLTAuMDYsMC4xNSwtMC4yMSwwLjI0LC0wLjMzLDAuMjRdLFsnYycsLTAuMjQsMC4wMCwtMC40MiwtMC4xOCwtMC40MiwtMC4zOV0sWydjJywwLjAwLC0wLjA2LDMuMjcsLTcuNjIsMy4zMywtNy43NF0sWyd6J11dLHc6OC45NCxoOjE1LjA1OH0sXG5cdFx0JzInOntkOltbJ00nLDQuMjMsLTE0Ljk3XSxbJ2MnLDAuNTcsLTAuMDYsMS42OCwwLjAwLDIuMzQsMC4xOF0sWydjJywwLjY5LDAuMTgsMS41MCwwLjU0LDIuMDEsMC45MF0sWydjJywxLjM1LDAuOTYsMS45NSwyLjI1LDEuNzcsMy44MV0sWydjJywtMC4xNSwxLjM1LC0wLjY2LDIuMzQsLTEuNjgsMy4xNV0sWydjJywtMC42MCwwLjQ4LC0xLjQ0LDAuOTMsLTMuMTIsMS42NV0sWydjJywtMS4zMiwwLjU3LC0xLjgwLDAuODEsLTIuMzcsMS4xNF0sWydjJywtMC41NywwLjMzLC0wLjU3LDAuMzMsLTAuMjQsMC4yN10sWydjJywwLjM5LC0wLjA5LDEuMjYsLTAuMDksMS42OCwwLjAwXSxbJ2MnLDAuNzIsMC4xNSwxLjQxLDAuNDUsMi4xMCwwLjkwXSxbJ2MnLDAuOTksMC42MywxLjg2LDAuODcsMi41NSwwLjc1XSxbJ2MnLDAuMjQsLTAuMDYsMC40MiwtMC4xNSwwLjU3LC0wLjMwXSxbJ2MnLDAuMTIsLTAuMDksMC4zMCwtMC40MiwwLjMwLC0wLjUxXSxbJ2MnLDAuMDAsLTAuMDksMC4xMiwtMC4yMSwwLjI0LC0wLjI0XSxbJ2MnLDAuMTgsLTAuMDMsMC4zOSwwLjEyLDAuMzksMC4zMF0sWydjJywwLjAwLDAuMTIsLTAuMTUsMC41NywtMC4zMCwwLjg3XSxbJ2MnLC0wLjU0LDEuMDIsLTEuNTYsMS43NCwtMi43OSwyLjAxXSxbJ2MnLC0wLjQyLDAuMDksLTEuMjMsMC4wOSwtMS42MiwwLjAzXSxbJ2MnLC0wLjgxLC0wLjE4LC0xLjMyLC0wLjQ1LC0yLjAxLC0xLjExXSxbJ2MnLC0wLjQ1LC0wLjQ1LC0wLjYzLC0wLjU3LC0wLjk2LC0wLjY5XSxbJ2MnLC0wLjg0LC0wLjI3LC0xLjg5LDAuMTIsLTIuMjUsMC45MF0sWydjJywtMC4xMiwwLjIxLC0wLjIxLDAuNTQsLTAuMjEsMC43Ml0sWydjJywwLjAwLDAuMTIsLTAuMTIsMC4yMSwtMC4yNywwLjI0XSxbJ2MnLC0wLjE1LDAuMDAsLTAuMjcsLTAuMDMsLTAuMzMsLTAuMTVdLFsnYycsLTAuMDksLTAuMjEsMC4wOSwtMS4wOCwwLjMzLC0xLjcxXSxbJ2MnLDAuMjQsLTAuNjYsMC42NiwtMS4yNiwxLjI5LC0xLjg5XSxbJ2MnLDAuNDUsLTAuNDUsMC45MCwtMC44MSwxLjkyLC0xLjU2XSxbJ2MnLDEuMjksLTAuOTMsMS44OSwtMS40NCwyLjM0LC0xLjk4XSxbJ2MnLDAuODcsLTEuMDUsMS4yNiwtMi4xOSwxLjIwLC0zLjYzXSxbJ2MnLC0wLjA2LC0xLjI5LC0wLjM5LC0yLjMxLC0wLjk2LC0yLjkxXSxbJ2MnLC0wLjM2LC0wLjMzLC0wLjcyLC0wLjUxLC0xLjE3LC0wLjU0XSxbJ2MnLC0wLjg0LC0wLjAzLC0xLjUzLDAuNDIsLTEuNTksMS4wNV0sWydjJywtMC4wMywwLjMzLDAuMTIsMC42MCwwLjU3LDEuMTRdLFsnYycsMC40NSwwLjU0LDAuNTQsMC44NywwLjQyLDEuNDFdLFsnYycsLTAuMTUsMC42MywtMC41NCwxLjExLC0xLjA4LDEuMzhdLFsnYycsLTAuNjMsMC4zMywtMS4yMCwwLjMzLC0xLjgzLDAuMDBdLFsnYycsLTAuMjQsLTAuMTIsLTAuMzMsLTAuMTgsLTAuNTQsLTAuMzldLFsnYycsLTAuMTgsLTAuMTgsLTAuMjcsLTAuMzAsLTAuMzYsLTAuNTFdLFsnYycsLTAuMjQsLTAuNDUsLTAuMjcsLTAuODQsLTAuMjEsLTEuMzhdLFsnYycsMC4xMiwtMC43NSwwLjQ1LC0xLjQxLDEuMDIsLTEuOThdLFsnYycsMC43MiwtMC43MiwxLjc0LC0xLjE3LDIuODUsLTEuMzJdLFsneiddXSx3OjEwLjc2NCxoOjE0Ljk3fSxcblx0XHQnMyc6e2Q6W1snTScsMy43OCwtMTQuOTddLFsnYycsMC4zMCwtMC4wMywxLjQxLDAuMDAsMS44MywwLjA2XSxbJ2MnLDIuMjIsMC4zMCwzLjUxLDEuMzIsMy43MiwyLjkxXSxbJ2MnLDAuMDMsMC4zMywwLjAzLDEuMjYsLTAuMDMsMS42NV0sWydjJywtMC4xMiwwLjg0LC0wLjQ4LDEuNDcsLTEuMDUsMS43N10sWydjJywtMC4yNywwLjE1LC0wLjM2LDAuMjQsLTAuNDUsMC4zOV0sWydjJywtMC4wOSwwLjIxLC0wLjA5LDAuMzYsMC4wMCwwLjU3XSxbJ2MnLDAuMDksMC4xNSwwLjE4LDAuMjQsMC41MSwwLjM5XSxbJ2MnLDAuNzUsMC40MiwxLjIzLDEuMTQsMS40MSwyLjEzXSxbJ2MnLDAuMDYsMC40MiwwLjA2LDEuMzUsMC4wMCwxLjcxXSxbJ2MnLC0wLjE4LDAuODEsLTAuNDgsMS4zOCwtMS4wMiwxLjk1XSxbJ2MnLC0wLjc1LDAuNzIsLTEuODAsMS4yMCwtMy4xOCwxLjM4XSxbJ2MnLC0wLjQyLDAuMDYsLTEuNTYsMC4wNiwtMS45NSwwLjAwXSxbJ2MnLC0xLjg5LC0wLjMzLC0zLjE4LC0xLjI5LC0zLjUxLC0yLjY0XSxbJ2MnLC0wLjAzLC0wLjEyLC0wLjAzLC0wLjMzLC0wLjAzLC0wLjYwXSxbJ2MnLDAuMDAsLTAuMzYsMC4wMCwtMC40MiwwLjA2LC0wLjYzXSxbJ2MnLDAuMTIsLTAuMzAsMC4yNywtMC41MSwwLjUxLC0wLjc1XSxbJ2MnLDAuMjQsLTAuMjQsMC40NSwtMC4zOSwwLjc1LC0wLjUxXSxbJ2MnLDAuMjEsLTAuMDYsMC4yNywtMC4wNiwwLjYwLC0wLjA2XSxbJ2MnLDAuMzMsMC4wMCwwLjM5LDAuMDAsMC42MCwwLjA2XSxbJ2MnLDAuMzAsMC4xMiwwLjUxLDAuMjcsMC43NSwwLjUxXSxbJ2MnLDAuMzYsMC4zMywwLjU3LDAuNzUsMC42MCwxLjIwXSxbJ2MnLDAuMDAsMC4yMSwwLjAwLDAuMjcsLTAuMDYsMC40Ml0sWydjJywtMC4wOSwwLjE4LC0wLjEyLDAuMjQsLTAuNTQsMC41NF0sWydjJywtMC41MSwwLjM2LC0wLjYzLDAuNTQsLTAuNjAsMC44N10sWydjJywwLjA2LDAuNTQsMC41NCwwLjkwLDEuMzgsMC45OV0sWydjJywwLjM2LDAuMDYsMC43MiwwLjAzLDAuOTYsLTAuMDZdLFsnYycsMC44MSwtMC4yNywxLjI5LC0xLjIzLDEuNDQsLTIuNzldLFsnYycsMC4wMywtMC40NSwwLjAzLC0xLjk1LC0wLjAzLC0yLjM3XSxbJ2MnLC0wLjA5LC0wLjc1LC0wLjMzLC0xLjIzLC0wLjc1LC0xLjQ0XSxbJ2MnLC0wLjMzLC0wLjE4LC0wLjQ1LC0wLjE4LC0xLjk4LC0wLjE4XSxbJ2MnLC0xLjM1LDAuMDAsLTEuNDEsMC4wMCwtMS41MCwtMC4wNl0sWydjJywtMC4xOCwtMC4xMiwtMC4yNCwtMC4zOSwtMC4xMiwtMC42MF0sWydjJywwLjEyLC0wLjE1LDAuMTUsLTAuMTUsMS42OCwtMC4xNV0sWydjJywxLjUwLDAuMDAsMS42MiwwLjAwLDEuODksLTAuMTVdLFsnYycsMC4xOCwtMC4wOSwwLjQyLC0wLjM2LDAuNTQsLTAuNTddLFsnYycsMC4xOCwtMC40MiwwLjI3LC0wLjkwLDAuMzAsLTEuOTVdLFsnYycsMC4wMywtMS4yMCwtMC4wNiwtMS44MCwtMC4zNiwtMi4zN10sWydjJywtMC4yNCwtMC40OCwtMC42MywtMC44MSwtMS4xNCwtMC45Nl0sWydjJywtMC4zMCwtMC4wNiwtMS4wOCwtMC4wNiwtMS4zOCwwLjAzXSxbJ2MnLC0wLjYwLDAuMTUsLTAuOTAsMC40MiwtMC45NiwwLjg0XSxbJ2MnLC0wLjAzLDAuMzAsMC4wNiwwLjQ1LDAuNjMsMC44NF0sWydjJywwLjMzLDAuMjQsMC40MiwwLjM5LDAuNDUsMC42M10sWydjJywwLjAzLDAuNzIsLTAuNTcsMS41MCwtMS4zMiwxLjY1XSxbJ2MnLC0xLjA1LDAuMjcsLTIuMTAsLTAuNTcsLTIuMTAsLTEuNjVdLFsnYycsMC4wMCwtMC40NSwwLjE1LC0wLjk2LDAuMzksLTEuMzhdLFsnYycsMC4xMiwtMC4yMSwwLjU0LC0wLjYzLDAuODEsLTAuODFdLFsnYycsMC41NywtMC40MiwxLjM4LC0wLjY5LDIuMjUsLTAuODFdLFsneiddXSx3OjkuNzM1LGg6MTQuOTY3fSxcblx0XHQnNCc6e2Q6W1snTScsOC42NCwtMTQuOTRdLFsnYycsMC4yNywtMC4wOSwwLjQyLC0wLjEyLDAuNTQsLTAuMDNdLFsnYycsMC4wOSwwLjA2LDAuMTUsMC4yMSwwLjE1LDAuMzBdLFsnYycsLTAuMDMsMC4wNiwtMS45MiwyLjMxLC00LjIzLDUuMDRdLFsnYycsLTIuMzEsMi43MywtNC4yMyw0Ljk4LC00LjI2LDUuMDFdLFsnYycsLTAuMDMsMC4wNiwwLjEyLDAuMDYsMi41NSwwLjA2XSxbJ2wnLDIuNjEsMC4wMF0sWydsJywwLjAwLC0yLjM3XSxbJ2MnLDAuMDAsLTIuMTksMC4wMywtMi4zNywwLjA2LC0yLjQ2XSxbJ2MnLDAuMDMsLTAuMDYsMC4yMSwtMC4xOCwwLjU3LC0wLjQyXSxbJ2MnLDEuMDgsLTAuNzIsMS4zOCwtMS4wOCwxLjg2LC0yLjE2XSxbJ2MnLDAuMTIsLTAuMzAsMC4yNCwtMC41NCwwLjI3LC0wLjU3XSxbJ2MnLDAuMTIsLTAuMTIsMC4zOSwtMC4wNiwwLjQ1LDAuMTJdLFsnYycsMC4wNiwwLjA5LDAuMDYsMC41NywwLjA2LDMuOTZdLFsnbCcsMC4wMCwzLjkwXSxbJ2wnLDEuMDgsMC4wMF0sWydjJywxLjA1LDAuMDAsMS4xMSwwLjAwLDEuMjAsMC4wNl0sWydjJywwLjI0LDAuMTUsMC4yNCwwLjU0LDAuMDAsMC42OV0sWydjJywtMC4wOSwwLjA2LC0wLjE1LDAuMDYsLTEuMjAsMC4wNl0sWydsJywtMS4wOCwwLjAwXSxbJ2wnLDAuMDAsMC4zM10sWydjJywwLjAwLDAuNTcsMC4wOSwxLjExLDAuMzAsMS41M10sWydjJywwLjM2LDAuNzUsMC45MywxLjE3LDEuNjgsMS4yNl0sWydjJywwLjMwLDAuMDMsMC4zOSwwLjA5LDAuMzksMC4zMF0sWydjJywwLjAwLDAuMTUsLTAuMDMsMC4xOCwtMC4wOSwwLjI0XSxbJ2MnLC0wLjA2LDAuMDYsLTAuMDksMC4wNiwtMC40OCwwLjA2XSxbJ2MnLC0wLjQyLDAuMDAsLTAuNjksLTAuMDMsLTIuMTAsLTAuMjRdLFsnYycsLTAuOTAsLTAuMTUsLTEuNzcsLTAuMTUsLTIuNjcsMC4wMF0sWydjJywtMS40MSwwLjIxLC0xLjY4LDAuMjQsLTIuMTAsMC4yNF0sWydjJywtMC4zOSwwLjAwLC0wLjQyLDAuMDAsLTAuNDgsLTAuMDZdLFsnYycsLTAuMDYsLTAuMDYsLTAuMDYsLTAuMDksLTAuMDYsLTAuMjRdLFsnYycsMC4wMCwtMC4yMSwwLjA2LC0wLjI3LDAuMzYsLTAuMzBdLFsnYycsMC43NSwtMC4wOSwxLjMyLC0wLjUxLDEuNjgsLTEuMjZdLFsnYycsMC4yMSwtMC40MiwwLjMwLC0wLjk2LDAuMzAsLTEuNTNdLFsnbCcsMC4wMCwtMC4zM10sWydsJywtMi43MCwwLjAwXSxbJ2MnLC0yLjkxLDAuMDAsLTIuODUsMC4wMCwtMy4wOSwtMC4xNV0sWydjJywtMC4xOCwtMC4xMiwtMC4zMCwtMC4zOSwtMC4yNywtMC41NF0sWydjJywwLjAzLC0wLjA2LDAuMTgsLTAuMjQsMC4zMywtMC40NV0sWydjJywwLjc1LC0wLjkwLDEuNTksLTIuMDcsMi4xMywtMy4wM10sWydjJywwLjMzLC0wLjU0LDAuODQsLTEuNjIsMS4wNSwtMi4xNl0sWydjJywwLjU3LC0xLjQxLDAuODQsLTIuNjQsMC45MCwtNC4wNV0sWydjJywwLjAzLC0wLjYzLDAuMDYsLTAuNzIsMC4yNCwtMC44MV0sWydsJywwLjEyLC0wLjA2XSxbJ2wnLDAuNDUsMC4xMl0sWydjJywwLjY2LDAuMTgsMS4wMiwwLjI0LDEuNDcsMC4yN10sWydjJywwLjYwLDAuMDMsMS4yMywtMC4wOSwyLjAxLC0wLjMzXSxbJ3onXV0sdzoxMS43OTUsaDoxNC45OTR9LFxuXHRcdCc1Jzp7ZDpbWydNJywxLjAyLC0xNC45NF0sWydjJywwLjEyLC0wLjA5LDAuMDMsLTAuMDksMS4wOCwwLjA2XSxbJ2MnLDIuNDksMC4zNiw0LjM1LDAuMzYsNi45NiwtMC4wNl0sWydjJywwLjU3LC0wLjA5LDAuNjYsLTAuMDYsMC44MSwwLjA2XSxbJ2MnLDAuMTUsMC4xOCwwLjEyLDAuMjQsLTAuMTUsMC41MV0sWydjJywtMS4yOSwxLjI2LC0zLjI0LDIuMDQsLTUuNTgsMi4zMV0sWydjJywtMC42MCwwLjA5LC0xLjIwLDAuMTIsLTEuNzEsMC4xMl0sWydjJywtMC4zOSwwLjAwLC0wLjQ1LDAuMDAsLTAuNTcsMC4wNl0sWydjJywtMC4wOSwwLjA2LC0wLjE1LDAuMTIsLTAuMjEsMC4yMV0sWydsJywtMC4wNiwwLjEyXSxbJ2wnLDAuMDAsMS42NV0sWydsJywwLjAwLDEuNjVdLFsnbCcsMC4yMSwtMC4yMV0sWydjJywwLjY2LC0wLjU3LDEuNDEsLTAuOTYsMi4xOSwtMS4xNF0sWydjJywwLjMzLC0wLjA2LDEuNDEsLTAuMDYsMS45NSwwLjAwXSxbJ2MnLDIuNjEsMC4zNiw0LjAyLDEuNzQsNC4yNiw0LjE0XSxbJ2MnLDAuMDMsMC40NSwwLjAzLDEuMDgsLTAuMDMsMS40NF0sWydjJywtMC4xOCwxLjAyLC0wLjc4LDIuMDEsLTEuNTksMi43MF0sWydjJywtMC43MiwwLjU3LC0xLjYyLDEuMDIsLTIuNDksMS4yMF0sWydjJywtMS4zOCwwLjI3LC0zLjAzLDAuMDYsLTQuMjAsLTAuNTRdLFsnYycsLTEuMDgsLTAuNTQsLTEuNzEsLTEuMzIsLTEuODYsLTIuMjhdLFsnYycsLTAuMDksLTAuNjksMC4wOSwtMS4yOSwwLjU3LC0xLjc0XSxbJ2MnLDAuMjQsLTAuMjQsMC40NSwtMC4zOSwwLjc1LC0wLjUxXSxbJ2MnLDAuMjEsLTAuMDYsMC4yNywtMC4wNiwwLjYwLC0wLjA2XSxbJ2MnLDAuMzMsMC4wMCwwLjM5LDAuMDAsMC42MCwwLjA2XSxbJ2MnLDAuMzAsMC4xMiwwLjUxLDAuMjcsMC43NSwwLjUxXSxbJ2MnLDAuMzYsMC4zMywwLjU3LDAuNzUsMC42MCwxLjIwXSxbJ2MnLDAuMDAsMC4yMSwwLjAwLDAuMjcsLTAuMDYsMC40Ml0sWydjJywtMC4wOSwwLjE4LC0wLjEyLDAuMjQsLTAuNTQsMC41NF0sWydjJywtMC4xOCwwLjEyLC0wLjM2LDAuMzAsLTAuNDIsMC4zM10sWydjJywtMC4zNiwwLjQyLC0wLjE4LDAuOTksMC4zNiwxLjI2XSxbJ2MnLDAuNTEsMC4yNywxLjQ3LDAuMzYsMi4wMSwwLjI3XSxbJ2MnLDAuOTMsLTAuMjEsMS40NywtMS4xNywxLjY1LC0yLjkxXSxbJ2MnLDAuMDYsLTAuNDUsMC4wNiwtMS44OSwwLjAwLC0yLjMxXSxbJ2MnLC0wLjE1LC0xLjIwLC0wLjUxLC0yLjEwLC0xLjA1LC0yLjU1XSxbJ2MnLC0wLjIxLC0wLjE4LC0wLjU0LC0wLjM2LC0wLjgxLC0wLjM5XSxbJ2MnLC0wLjMwLC0wLjA2LC0wLjg0LC0wLjAzLC0xLjI2LDAuMDZdLFsnYycsLTAuOTMsMC4xOCwtMS42NSwwLjYwLC0yLjE2LDEuMjBdLFsnYycsLTAuMTUsMC4yMSwtMC4yNywwLjMwLC0wLjM5LDAuMzBdLFsnYycsLTAuMTUsMC4wMCwtMC4zMCwtMC4wOSwtMC4zNiwtMC4xOF0sWydjJywtMC4wNiwtMC4wOSwtMC4wNiwtMC4xNSwtMC4wNiwtMy42Nl0sWydjJywwLjAwLC0zLjM5LDAuMDAsLTMuNTcsMC4wNiwtMy42Nl0sWydjJywwLjAzLC0wLjA2LDAuMDksLTAuMTUsMC4xNSwtMC4xOF0sWyd6J11dLHc6MTAuMjEyLGg6MTQuOTk3fSxcblx0XHQnNic6e2Q6W1snTScsNC45OCwtMTQuOTddLFsnYycsMC4zNiwtMC4wMywxLjIwLDAuMDAsMS41OSwwLjA2XSxbJ2MnLDAuOTAsMC4xNSwxLjY4LDAuNTEsMi4yNSwxLjA1XSxbJ2MnLDAuNTcsMC41MSwwLjg3LDEuMjMsMC44NCwxLjk4XSxbJ2MnLC0wLjAzLDAuNTEsLTAuMjEsMC45MCwtMC42MCwxLjI2XSxbJ2MnLC0wLjI0LDAuMjQsLTAuNDUsMC4zOSwtMC43NSwwLjUxXSxbJ2MnLC0wLjIxLDAuMDYsLTAuMjcsMC4wNiwtMC42MCwwLjA2XSxbJ2MnLC0wLjMzLDAuMDAsLTAuMzksMC4wMCwtMC42MCwtMC4wNl0sWydjJywtMC4zMCwtMC4xMiwtMC41MSwtMC4yNywtMC43NSwtMC41MV0sWydjJywtMC4zOSwtMC4zNiwtMC41NywtMC43OCwtMC41NywtMS4yNl0sWydjJywwLjAwLC0wLjI3LDAuMDAsLTAuMzAsMC4wOSwtMC40Ml0sWydjJywwLjAzLC0wLjA5LDAuMTgsLTAuMjEsMC4zMCwtMC4zMF0sWydjJywwLjEyLC0wLjA5LDAuMzAsLTAuMjEsMC4zOSwtMC4yN10sWydjJywwLjA5LC0wLjA2LDAuMjEsLTAuMTgsMC4yNywtMC4yNF0sWydjJywwLjA2LC0wLjEyLDAuMDksLTAuMTUsMC4wOSwtMC4zM10sWydjJywwLjAwLC0wLjE4LC0wLjAzLC0wLjI0LC0wLjA5LC0wLjM2XSxbJ2MnLC0wLjI0LC0wLjM5LC0wLjc1LC0wLjYwLC0xLjM4LC0wLjU3XSxbJ2MnLC0wLjU0LDAuMDMsLTAuOTAsMC4xOCwtMS4yMywwLjQ4XSxbJ2MnLC0wLjgxLDAuNzIsLTEuMDgsMi4xNiwtMC45Niw1LjM3XSxbJ2wnLDAuMDAsMC42M10sWydsJywwLjMwLC0wLjEyXSxbJ2MnLDAuNzgsLTAuMjcsMS4yOSwtMC4zMywyLjEwLC0wLjI3XSxbJ2MnLDEuNDcsMC4xMiwyLjQ5LDAuNTQsMy4yNywxLjI5XSxbJ2MnLDAuNDgsMC41MSwwLjgxLDEuMTEsMC45NiwxLjg5XSxbJ2MnLDAuMDYsMC4yNywwLjA2LDAuNDIsMC4wNiwwLjkzXSxbJ2MnLDAuMDAsMC41NCwwLjAwLDAuNjksLTAuMDYsMC45Nl0sWydjJywtMC4xNSwwLjc4LC0wLjQ4LDEuMzgsLTAuOTYsMS44OV0sWydjJywtMC41NCwwLjUxLC0xLjE3LDAuODcsLTEuOTgsMS4wOF0sWydjJywtMS4xNCwwLjMwLC0yLjQwLDAuMzMsLTMuMjQsMC4wM10sWydjJywtMS41MCwtMC40OCwtMi42NCwtMS44OSwtMy4yNywtNC4wMl0sWydjJywtMC4zNiwtMS4yMywtMC41MSwtMi44MiwtMC40MiwtNC4wOF0sWydjJywwLjMwLC0zLjY2LDIuMjgsLTYuMzAsNC45NSwtNi42Nl0sWyd6J10sWydtJywwLjY2LDcuNDFdLFsnYycsLTAuMjcsLTAuMDksLTAuODEsLTAuMTIsLTEuMDgsLTAuMDZdLFsnYycsLTAuNzIsMC4xOCwtMS4wOCwwLjY5LC0xLjIzLDEuNzFdLFsnYycsLTAuMDYsMC41NCwtMC4wNiwzLjAwLDAuMDAsMy41NF0sWydjJywwLjE4LDEuMjYsMC43MiwxLjc3LDEuODAsMS43NF0sWydjJywwLjM5LC0wLjAzLDAuNjMsLTAuMDksMC45MCwtMC4yN10sWydjJywwLjY2LC0wLjQyLDAuOTAsLTEuMzIsMC45MCwtMy4yNF0sWydjJywwLjAwLC0yLjIyLC0wLjM2LC0zLjEyLC0xLjI5LC0zLjQyXSxbJ3onXV0sdzo5Ljk1NixoOjE0Ljk4Mn0sXG5cdFx0JzcnOntkOltbJ00nLDAuMjEsLTE0Ljk3XSxbJ2MnLDAuMjEsLTAuMDYsMC40NSwwLjAwLDAuNTQsMC4xNV0sWydjJywwLjA2LDAuMDksMC4wNiwwLjE1LDAuMDYsMC4zOV0sWydjJywwLjAwLDAuMjQsMC4wMCwwLjMzLDAuMDYsMC40Ml0sWydjJywwLjA2LDAuMTIsMC4yMSwwLjI0LDAuMjcsMC4yNF0sWydjJywwLjAzLDAuMDAsMC4xMiwtMC4xMiwwLjI0LC0wLjIxXSxbJ2MnLDAuOTYsLTEuMjAsMi41OCwtMS4zNSwzLjk5LC0wLjQyXSxbJ2MnLDAuMTUsMC4xMiwwLjQyLDAuMzAsMC41NCwwLjQ1XSxbJ2MnLDAuNDgsMC4zOSwwLjgxLDAuNTcsMS4yOSwwLjYwXSxbJ2MnLDAuNjksMC4wMywxLjUwLC0wLjMwLDIuMTMsLTAuODddLFsnYycsMC4wOSwtMC4wOSwwLjI3LC0wLjMwLDAuMzksLTAuNDVdLFsnYycsMC4xMiwtMC4xNSwwLjI0LC0wLjI3LDAuMzAsLTAuMzBdLFsnYycsMC4xOCwtMC4wNiwwLjM5LDAuMDMsMC41MSwwLjIxXSxbJ2MnLDAuMDYsMC4xOCwwLjA2LDAuMjQsLTAuMjcsMC43Ml0sWydjJywtMC4xOCwwLjI0LC0wLjU0LDAuNzgsLTAuNzgsMS4xN10sWydjJywtMi4zNywzLjU0LC0zLjU0LDYuMjcsLTMuODcsOS4wMF0sWydjJywtMC4wMywwLjMzLC0wLjAzLDAuNjYsLTAuMDMsMS4yNl0sWydjJywwLjAwLDAuOTAsMC4wMCwxLjA4LDAuMTUsMS44OV0sWydjJywwLjA2LDAuNDUsMC4wNiwwLjQ4LDAuMDMsMC42MF0sWydjJywtMC4wNiwwLjA5LC0wLjIxLDAuMjEsLTAuMzAsMC4yMV0sWydjJywtMC4wMywwLjAwLC0wLjI3LC0wLjA2LC0wLjU0LC0wLjE1XSxbJ2MnLC0wLjg0LC0wLjI3LC0xLjExLC0wLjMwLC0xLjY1LC0wLjMwXSxbJ2MnLC0wLjU3LDAuMDAsLTAuODQsMC4wMywtMS41NiwwLjI3XSxbJ2MnLC0wLjYwLDAuMTgsLTAuNjksMC4yMSwtMC44MSwwLjE1XSxbJ2MnLC0wLjEyLC0wLjA2LC0wLjIxLC0wLjE4LC0wLjIxLC0wLjMwXSxbJ2MnLDAuMDAsLTAuMTUsMC42MCwtMS40NCwxLjIwLC0yLjYxXSxbJ2MnLDEuMTQsLTIuMjIsMi43MywtNC42OCw1LjEwLC04LjAxXSxbJ2MnLDAuMjEsLTAuMjcsMC4zNiwtMC40OCwwLjMzLC0wLjQ4XSxbJ2MnLDAuMDAsMC4wMCwtMC4xMiwwLjA2LC0wLjI3LDAuMTJdLFsnYycsLTAuNTQsMC4zMCwtMC45OSwwLjM5LC0xLjU2LDAuMzldLFsnYycsLTAuNzUsMC4wMywtMS4yMCwtMC4xOCwtMS44MywtMC43NV0sWydjJywtMC45OSwtMC45MCwtMS44MywtMS4xNywtMi4zMSwtMC43Ml0sWydjJywtMC4xOCwwLjE1LC0wLjM2LDAuNTEsLTAuNDUsMC44NF0sWydjJywtMC4wNiwwLjI0LC0wLjA2LDAuMzMsLTAuMDksMS45OF0sWydjJywwLjAwLDEuNjIsLTAuMDMsMS43NCwtMC4wNiwxLjgwXSxbJ2MnLC0wLjE1LDAuMjQsLTAuNTQsMC4yNCwtMC42OSwwLjAwXSxbJ2MnLC0wLjA2LC0wLjA5LC0wLjA2LC0wLjE1LC0wLjA2LC0zLjU3XSxbJ2MnLDAuMDAsLTMuNDIsMC4wMCwtMy40OCwwLjA2LC0zLjU3XSxbJ2MnLDAuMDMsLTAuMDYsMC4wOSwtMC4xMiwwLjE1LC0wLjE1XSxbJ3onXV0sdzoxMC41NjEsaDoxNS4wOTN9LFxuXHRcdCc4Jzp7ZDpbWydNJyw0Ljk4LC0xNC45N10sWydjJywwLjMzLC0wLjAzLDEuMDIsLTAuMDMsMS4zMiwwLjAwXSxbJ2MnLDEuMzIsMC4xMiwyLjQ5LDAuNjAsMy4yMSwxLjMyXSxbJ2MnLDAuMzksMC4zOSwwLjY2LDAuODEsMC43OCwxLjI5XSxbJ2MnLDAuMDksMC4zNiwwLjA5LDEuMDgsMC4wMCwxLjQ0XSxbJ2MnLC0wLjIxLDAuODQsLTAuNjYsMS41OSwtMS41OSwyLjU1XSxbJ2wnLC0wLjMwLDAuMzBdLFsnbCcsMC4yNywwLjE4XSxbJ2MnLDEuNDcsMC45MywyLjMxLDIuMzEsMi4yNSwzLjc1XSxbJ2MnLC0wLjAzLDAuNzUsLTAuMjQsMS4zNSwtMC42MywxLjk1XSxbJ2MnLC0wLjQ1LDAuNjYsLTEuMDIsMS4xNCwtMS44MywxLjUzXSxbJ2MnLC0xLjgwLDAuODcsLTQuMjAsMC44NywtNi4wMCwwLjAzXSxbJ2MnLC0xLjYyLC0wLjc4LC0yLjUyLC0yLjE2LC0yLjQ2LC0zLjY2XSxbJ2MnLDAuMDYsLTAuOTksMC41NCwtMS43NywxLjgwLC0yLjk3XSxbJ2MnLDAuNTQsLTAuNTEsMC41NCwtMC41NCwwLjQ4LC0wLjU3XSxbJ2MnLC0wLjM5LC0wLjI3LC0wLjk2LC0wLjc4LC0xLjIwLC0xLjE0XSxbJ2MnLC0wLjc1LC0xLjExLC0wLjg3LC0yLjQwLC0wLjMwLC0zLjYwXSxbJ2MnLDAuNjksLTEuMzUsMi4yNSwtMi4yNSw0LjIwLC0yLjQwXSxbJ3onXSxbJ20nLDEuNTMsMC42OV0sWydjJywtMC40MiwtMC4wOSwtMS4xMSwtMC4xMiwtMS4zOCwtMC4wNl0sWydjJywtMC4zMCwwLjA2LC0wLjYwLDAuMTgsLTAuODEsMC4zMF0sWydjJywtMC4yMSwwLjEyLC0wLjYwLDAuNTEsLTAuNzIsMC43Ml0sWydjJywtMC41MSwwLjg3LC0wLjQyLDEuODksMC4yMSwyLjUyXSxbJ2MnLDAuMjEsMC4yMSwwLjM2LDAuMzAsMS45NSwxLjIzXSxbJ2MnLDAuOTYsMC41NCwxLjc0LDAuOTksMS43NywxLjAyXSxbJ2MnLDAuMDksMC4wMCwwLjYzLC0wLjYwLDAuOTksLTEuMTFdLFsnYycsMC4yMSwtMC4zNiwwLjQ4LC0wLjg3LDAuNTcsLTEuMjNdLFsnYycsMC4wNiwtMC4yNCwwLjA2LC0wLjM2LDAuMDYsLTAuNzJdLFsnYycsMC4wMCwtMC40NSwtMC4wMywtMC42NiwtMC4xNSwtMC45OV0sWydjJywtMC4zOSwtMC44MSwtMS4yOSwtMS40NCwtMi40OSwtMS42OF0sWyd6J10sWydtJywtMS40NCw4LjA3XSxbJ2wnLC0xLjg5LC0xLjA4XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMTgsMC4xNSwtMC4zOSwwLjMzXSxbJ2MnLC0xLjIwLDEuMDgsLTEuNjUsMS45NSwtMS41OSwzLjAwXSxbJ2MnLDAuMDksMS41OSwxLjM1LDIuODUsMy4yMSwzLjI0XSxbJ2MnLDAuMzMsMC4wNiwwLjQ1LDAuMDYsMC45MywwLjA2XSxbJ2MnLDAuNjMsMC4wMCwwLjgxLC0wLjAzLDEuMjksLTAuMjddLFsnYycsMC45MCwtMC40MiwxLjQ3LC0xLjQxLDEuNDEsLTIuNDBdLFsnYycsLTAuMDYsLTAuNjYsLTAuMzksLTEuMjksLTAuOTAsLTEuNjVdLFsnYycsLTAuMTIsLTAuMDksLTEuMDUsLTAuNjMsLTIuMDcsLTEuMjNdLFsneiddXSx3OjEwLjkyNixoOjE0Ljk4OX0sXG5cdFx0JzknOntkOltbJ00nLDQuMjMsLTE0Ljk3XSxbJ2MnLDAuNDIsLTAuMDMsMS4yOSwwLjAwLDEuNjIsMC4wNl0sWydjJywwLjUxLDAuMTIsMC45MywwLjMwLDEuMzgsMC41N10sWydjJywxLjUzLDEuMDIsMi41MiwzLjI0LDIuNzMsNS45NF0sWydjJywwLjE4LDIuNTUsLTAuNDgsNC45OCwtMS44Myw2LjU3XSxbJ2MnLC0xLjA1LDEuMjYsLTIuNDAsMS44OSwtMy45MywxLjgzXSxbJ2MnLC0xLjIzLC0wLjA2LC0yLjMxLC0wLjQ1LC0zLjAzLC0xLjE0XSxbJ2MnLC0wLjU3LC0wLjUxLC0wLjg3LC0xLjIzLC0wLjg0LC0xLjk4XSxbJ2MnLDAuMDMsLTAuNTEsMC4yMSwtMC45MCwwLjYwLC0xLjI2XSxbJ2MnLDAuMjQsLTAuMjQsMC40NSwtMC4zOSwwLjc1LC0wLjUxXSxbJ2MnLDAuMjEsLTAuMDYsMC4yNywtMC4wNiwwLjYwLC0wLjA2XSxbJ2MnLDAuMzMsMC4wMCwwLjM5LDAuMDAsMC42MCwwLjA2XSxbJ2MnLDAuMzAsMC4xMiwwLjUxLDAuMjcsMC43NSwwLjUxXSxbJ2MnLDAuMzksMC4zNiwwLjU3LDAuNzgsMC41NywxLjI2XSxbJ2MnLDAuMDAsMC4yNywwLjAwLDAuMzAsLTAuMDksMC40Ml0sWydjJywtMC4wMywwLjA5LC0wLjE4LDAuMjEsLTAuMzAsMC4zMF0sWydjJywtMC4xMiwwLjA5LC0wLjMwLDAuMjEsLTAuMzksMC4yN10sWydjJywtMC4wOSwwLjA2LC0wLjIxLDAuMTgsLTAuMjcsMC4yNF0sWydjJywtMC4wNiwwLjEyLC0wLjA2LDAuMTUsLTAuMDYsMC4zM10sWydjJywwLjAwLDAuMTgsMC4wMCwwLjI0LDAuMDYsMC4zNl0sWydjJywwLjI0LDAuMzksMC43NSwwLjYwLDEuMzgsMC41N10sWydjJywwLjU0LC0wLjAzLDAuOTAsLTAuMTgsMS4yMywtMC40OF0sWydjJywwLjgxLC0wLjcyLDEuMDgsLTIuMTYsMC45NiwtNS4zN10sWydsJywwLjAwLC0wLjYzXSxbJ2wnLC0wLjMwLDAuMTJdLFsnYycsLTAuNzgsMC4yNywtMS4yOSwwLjMzLC0yLjEwLDAuMjddLFsnYycsLTEuNDcsLTAuMTIsLTIuNDksLTAuNTQsLTMuMjcsLTEuMjldLFsnYycsLTAuNDgsLTAuNTEsLTAuODEsLTEuMTEsLTAuOTYsLTEuODldLFsnYycsLTAuMDYsLTAuMjcsLTAuMDYsLTAuNDIsLTAuMDYsLTAuOTZdLFsnYycsMC4wMCwtMC41MSwwLjAwLC0wLjY2LDAuMDYsLTAuOTNdLFsnYycsMC4xNSwtMC43OCwwLjQ4LC0xLjM4LDAuOTYsLTEuODldLFsnYycsMC4xNSwtMC4xMiwwLjMzLC0wLjI3LDAuNDIsLTAuMzZdLFsnYycsMC42OSwtMC41MSwxLjYyLC0wLjgxLDIuNzYsLTAuOTNdLFsneiddLFsnbScsMS4xNywwLjY2XSxbJ2MnLC0wLjIxLC0wLjA2LC0wLjU3LC0wLjA2LC0wLjgxLC0wLjAzXSxbJ2MnLC0wLjc4LDAuMTIsLTEuMjYsMC42OSwtMS40MSwxLjc0XSxbJ2MnLC0wLjEyLDAuNjMsLTAuMTUsMS45NSwtMC4wOSwyLjc5XSxbJ2MnLDAuMTIsMS43MSwwLjYzLDIuNDAsMS43NywyLjQ2XSxbJ2MnLDEuMDgsMC4wMywxLjYyLC0wLjQ4LDEuODAsLTEuNzRdLFsnYycsMC4wNiwtMC41NCwwLjA2LC0zLjAwLDAuMDAsLTMuNTRdLFsnYycsLTAuMTUsLTEuMDUsLTAuNTEsLTEuNTMsLTEuMjYsLTEuNjhdLFsneiddXSx3OjkuOTU5LGg6MTQuOTg2fSxcblx0XHQncmVzdHMubXVsdGltZWFzdXJlJzp7ZDpbWydNJywwLC00XSxbJ2wnLDAsMTZdLFsnbCcsMSwwXSxbJ2wnLDAsLTVdLFsnbCcsNDAsMF0sWydsJywwLDVdLFsnbCcsMSwwXSxbJ2wnLDAsLTE2XSxbJ2wnLC0xLDBdLFsnbCcsMCw1XSxbJ2wnLC00MCwwXSxbJ2wnLDAsLTVdLFsneiddXSx3OjQyLGg6MTh9LFxuXHRcdCdyZXN0cy53aG9sZSc6e2Q6W1snTScsMC4wNiwwLjAzXSxbJ2wnLDAuMDksLTAuMDZdLFsnbCcsNS40NiwwLjAwXSxbJ2wnLDUuNDksMC4wMF0sWydsJywwLjA5LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsMi4xOV0sWydsJywwLjAwLDIuMTldLFsnbCcsLTAuMDYsMC4wOV0sWydsJywtMC4wOSwwLjA2XSxbJ2wnLC01LjQ5LDAuMDBdLFsnbCcsLTUuNDYsMC4wMF0sWydsJywtMC4wOSwtMC4wNl0sWydsJywtMC4wNiwtMC4wOV0sWydsJywwLjAwLC0yLjE5XSxbJ2wnLDAuMDAsLTIuMTldLFsneiddXSx3OjExLjI1LGg6NC42OH0sXG5cdFx0J3Jlc3RzLmhhbGYnOntkOltbJ00nLDAuMDYsLTQuNjJdLFsnbCcsMC4wOSwtMC4wNl0sWydsJyw1LjQ2LDAuMDBdLFsnbCcsNS40OSwwLjAwXSxbJ2wnLDAuMDksMC4wNl0sWydsJywwLjA2LDAuMDldLFsnbCcsMC4wMCwyLjE5XSxbJ2wnLDAuMDAsMi4xOV0sWydsJywtMC4wNiwwLjA5XSxbJ2wnLC0wLjA5LDAuMDZdLFsnbCcsLTUuNDksMC4wMF0sWydsJywtNS40NiwwLjAwXSxbJ2wnLC0wLjA5LC0wLjA2XSxbJ2wnLC0wLjA2LC0wLjA5XSxbJ2wnLDAuMDAsLTIuMTldLFsnbCcsMC4wMCwtMi4xOV0sWyd6J11dLHc6MTEuMjUsaDo0LjY4fSxcblx0XHQncmVzdHMucXVhcnRlcic6e2Q6W1snTScsMS44OSwtMTEuODJdLFsnYycsMC4xMiwtMC4wNiwwLjI0LC0wLjA2LDAuMzYsLTAuMDNdLFsnYycsMC4wOSwwLjA2LDQuNzQsNS41OCw0Ljg2LDUuODJdLFsnYycsMC4yMSwwLjM5LDAuMTUsMC43OCwtMC4xNSwxLjI2XSxbJ2MnLC0wLjI0LDAuMzMsLTAuNzIsMC44MSwtMS42MiwxLjU2XSxbJ2MnLC0wLjQ1LDAuMzYsLTAuODcsMC43NSwtMC45NiwwLjg0XSxbJ2MnLC0wLjkzLDAuOTksLTEuMTQsMi40OSwtMC42MCwzLjYzXSxbJ2MnLDAuMTgsMC4zOSwwLjI3LDAuNDgsMS4zMiwxLjY4XSxbJ2MnLDEuOTIsMi4yNSwxLjgzLDIuMTYsMS44MywyLjM0XSxbJ2MnLDAuMDAsMC4xOCwtMC4xOCwwLjM2LC0wLjM2LDAuMzldLFsnYycsLTAuMTUsMC4wMCwtMC4yNywtMC4wNiwtMC40OCwtMC4yN10sWydjJywtMC43NSwtMC43NSwtMi40NiwtMS4yOSwtMy4zOSwtMS4wOF0sWydjJywtMC40NSwwLjA5LC0wLjY5LDAuMjcsLTAuOTAsMC42OV0sWydjJywtMC4xMiwwLjMwLC0wLjIxLDAuNjYsLTAuMjQsMS4xNF0sWydjJywtMC4wMywwLjY2LDAuMDksMS4zNSwwLjMwLDIuMDFdLFsnYycsMC4xNSwwLjQyLDAuMjQsMC42NiwwLjQ1LDAuOTZdLFsnYycsMC4xOCwwLjI0LDAuMTgsMC4zMywwLjAzLDAuNDJdLFsnYycsLTAuMTIsMC4wNiwtMC4xOCwwLjAzLC0wLjQ1LC0wLjMwXSxbJ2MnLC0xLjA4LC0xLjM4LC0yLjA3LC0zLjM2LC0yLjQwLC00LjgzXSxbJ2MnLC0wLjI3LC0xLjA1LC0wLjE1LC0xLjc3LDAuMjcsLTIuMDddLFsnYycsMC4yMSwtMC4xMiwwLjQyLC0wLjE1LDAuODcsLTAuMTVdLFsnYycsMC44NywwLjA2LDIuMTAsMC4zOSwzLjMwLDAuOTBdLFsnbCcsMC4zOSwwLjE4XSxbJ2wnLC0xLjY1LC0xLjk1XSxbJ2MnLC0yLjUyLC0yLjk3LC0yLjYxLC0zLjA5LC0yLjcwLC0zLjI3XSxbJ2MnLC0wLjA5LC0wLjI0LC0wLjEyLC0wLjQ4LC0wLjAzLC0wLjc1XSxbJ2MnLDAuMTUsLTAuNDgsMC41NywtMC45NiwxLjgzLC0yLjAxXSxbJ2MnLDAuNDUsLTAuMzYsMC44NCwtMC43MiwwLjkzLC0wLjc4XSxbJ2MnLDAuNjksLTAuNzUsMS4wMiwtMS44MCwwLjkwLC0yLjc5XSxbJ2MnLC0wLjA2LC0wLjMzLC0wLjIxLC0wLjg0LC0wLjM5LC0xLjExXSxbJ2MnLC0wLjA5LC0wLjE1LC0wLjQ1LC0wLjYwLC0wLjgxLC0xLjA1XSxbJ2MnLC0wLjM2LC0wLjQyLC0wLjY5LC0wLjgxLC0wLjcyLC0wLjg3XSxbJ2MnLC0wLjA5LC0wLjE4LDAuMDAsLTAuNDIsMC4yMSwtMC41MV0sWyd6J11dLHc6Ny44ODgsaDoyMS40MzV9LFxuXHRcdCdyZXN0cy44dGgnOntkOltbJ00nLDEuNjgsLTYuMTJdLFsnYycsMC42NiwtMC4wOSwxLjIzLDAuMDksMS42OCwwLjUxXSxbJ2MnLDAuMjcsMC4zMCwwLjM5LDAuNTQsMC41NywxLjI2XSxbJ2MnLDAuMDksMC4zMywwLjE4LDAuNjYsMC4yMSwwLjcyXSxbJ2MnLDAuMTIsMC4yNywwLjMzLDAuNDUsMC42MCwwLjQ4XSxbJ2MnLDAuMTIsMC4wMCwwLjE4LDAuMDAsMC4zMywtMC4wOV0sWydjJywwLjM5LC0wLjE4LDEuMzIsLTEuMjksMS42OCwtMS45OF0sWydjJywwLjA5LC0wLjIxLDAuMjQsLTAuMzAsMC4zOSwtMC4zMF0sWydjJywwLjEyLDAuMDAsMC4yNywwLjA5LDAuMzMsMC4xOF0sWydjJywwLjAzLDAuMDYsLTAuMjcsMS4xMSwtMS44Niw2LjQyXSxbJ2MnLC0xLjAyLDMuNDgsLTEuODksNi4zOSwtMS45Miw2LjQyXSxbJ2MnLDAuMDAsMC4wMywtMC4xMiwwLjEyLC0wLjI0LDAuMTVdLFsnYycsLTAuMTgsMC4wOSwtMC4yMSwwLjA5LC0wLjQ1LDAuMDldLFsnYycsLTAuMjQsMC4wMCwtMC4zMCwwLjAwLC0wLjQ4LC0wLjA2XSxbJ2MnLC0wLjA5LC0wLjA2LC0wLjIxLC0wLjEyLC0wLjIxLC0wLjE1XSxbJ2MnLC0wLjA2LC0wLjAzLDAuMTUsLTAuNTcsMS42OCwtNC45Ml0sWydjJywwLjk2LC0yLjY3LDEuNzQsLTQuODksMS43MSwtNC44OV0sWydsJywtMC41MSwwLjE1XSxbJ2MnLC0xLjA4LDAuMzYsLTEuNzQsMC40OCwtMi41NSwwLjQ4XSxbJ2MnLC0wLjY2LDAuMDAsLTAuODQsLTAuMDMsLTEuMzIsLTAuMjddLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC4zMywtMC40NSwwLjg0LC0wLjgxLDEuMzgsLTAuOTBdLFsneiddXSx3OjcuNTM0LGg6MTMuODgzfSxcblx0XHQncmVzdHMuMTZ0aCc6e2Q6W1snTScsMy4zMywtNi4xMl0sWydjJywwLjY2LC0wLjA5LDEuMjMsMC4wOSwxLjY4LDAuNTFdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xNSwwLjM5LDAuNTcsMC41NywwLjg3LDAuNDJdLFsnYycsMC4zOSwtMC4xOCwxLjIwLC0xLjIzLDEuNjIsLTIuMDddLFsnYycsMC4wNiwtMC4xNSwwLjI0LC0wLjI0LDAuMzYsLTAuMjRdLFsnYycsMC4xMiwwLjAwLDAuMjcsMC4wOSwwLjMzLDAuMThdLFsnYycsMC4wMywwLjA2LC0wLjQ1LDEuODYsLTIuNjcsMTAuMTddLFsnYycsLTEuNTAsNS41NSwtMi43MywxMC4xNCwtMi43NiwxMC4xN10sWydjJywtMC4wMywwLjAzLC0wLjEyLDAuMTIsLTAuMjQsMC4xNV0sWydjJywtMC4xOCwwLjA5LC0wLjIxLDAuMDksLTAuNDUsMC4wOV0sWydjJywtMC4yNCwwLjAwLC0wLjMwLDAuMDAsLTAuNDgsLTAuMDZdLFsnYycsLTAuMDksLTAuMDYsLTAuMjEsLTAuMTIsLTAuMjEsLTAuMTVdLFsnYycsLTAuMDYsLTAuMDMsMC4xMiwtMC41NywxLjQ0LC00LjkyXSxbJ2MnLDAuODEsLTIuNjcsMS40NywtNC44NiwxLjQ3LC00Ljg5XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMjcsMC4wNiwtMC41NCwwLjE1XSxbJ2MnLC0xLjA4LDAuMzYsLTEuNzcsMC40OCwtMi41OCwwLjQ4XSxbJ2MnLC0wLjY2LDAuMDAsLTAuODQsLTAuMDMsLTEuMzIsLTAuMjddLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC43MiwtMS4wNSwyLjIyLC0xLjIzLDMuMDYsLTAuNDJdLFsnYycsMC4zMCwwLjMzLDAuNDIsMC42MCwwLjYwLDEuMzhdLFsnYycsMC4wOSwwLjQ1LDAuMjEsMC43OCwwLjMzLDAuOTBdLFsnYycsMC4wOSwwLjA5LDAuMjcsMC4xOCwwLjQ1LDAuMjFdLFsnYycsMC4xMiwwLjAwLDAuMTgsMC4wMCwwLjMzLC0wLjA5XSxbJ2MnLDAuMzMsLTAuMTUsMS4wMiwtMC45MywxLjQxLC0xLjU5XSxbJ2MnLDAuMTIsLTAuMjEsMC4xOCwtMC4zOSwwLjM5LC0xLjA4XSxbJ2MnLDAuNjYsLTIuMTAsMS4xNywtMy44NCwxLjE3LC0zLjg3XSxbJ2MnLDAuMDAsMC4wMCwtMC4yMSwwLjA2LC0wLjQyLDAuMTVdLFsnYycsLTAuNTEsMC4xNSwtMS4yMCwwLjMzLC0xLjY4LDAuNDJdLFsnYycsLTAuMzMsMC4wNiwtMC41MSwwLjA2LC0wLjk2LDAuMDZdLFsnYycsLTAuNjYsMC4wMCwtMC44NCwtMC4wMywtMS4zMiwtMC4yN10sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjMzLC0wLjQ1LDAuODQsLTAuODEsMS4zOCwtMC45MF0sWyd6J11dLHc6OS43MjQsaDoyMS4zODN9LFxuXHRcdCdyZXN0cy4zMm5kJzp7ZDpbWydNJyw0LjIzLC0xMy42Ml0sWydjJywwLjY2LC0wLjA5LDEuMjMsMC4wOSwxLjY4LDAuNTFdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xMiwwLjI3LDAuMzMsMC40NSwwLjYwLDAuNDhdLFsnYycsMC4xMiwwLjAwLDAuMTgsMC4wMCwwLjI3LC0wLjA2XSxbJ2MnLDAuMzMsLTAuMjEsMC45OSwtMS4xMSwxLjQ0LC0xLjk4XSxbJ2MnLDAuMDksLTAuMjQsMC4yMSwtMC4zMywwLjM5LC0wLjMzXSxbJ2MnLDAuMTIsMC4wMCwwLjI3LDAuMDksMC4zMywwLjE4XSxbJ2MnLDAuMDMsMC4wNiwtMC41NywyLjY3LC0zLjIxLDEzLjg5XSxbJ2MnLC0xLjgwLDcuNjIsLTMuMzAsMTMuODksLTMuMzAsMTMuOTJdLFsnYycsLTAuMDMsMC4wNiwtMC4xMiwwLjEyLC0wLjI0LDAuMThdLFsnYycsLTAuMjEsMC4wOSwtMC4yNCwwLjA5LC0wLjQ4LDAuMDldLFsnYycsLTAuMjQsMC4wMCwtMC4zMCwwLjAwLC0wLjQ4LC0wLjA2XSxbJ2MnLC0wLjA5LC0wLjA2LC0wLjIxLC0wLjEyLC0wLjIxLC0wLjE1XSxbJ2MnLC0wLjA2LC0wLjAzLDAuMDksLTAuNTcsMS4yMywtNC45Ml0sWydjJywwLjY5LC0yLjY3LDEuMjYsLTQuODYsMS4yOSwtNC44OV0sWydjJywwLjAwLC0wLjAzLC0wLjEyLC0wLjAzLC0wLjQ4LDAuMTJdLFsnYycsLTEuMTcsMC4zOSwtMi4yMiwwLjU3LC0zLjAwLDAuNTRdLFsnYycsLTAuNDIsLTAuMDMsLTAuNzUsLTAuMTIsLTEuMTEsLTAuMzBdLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC43MiwtMS4wNSwyLjIyLC0xLjIzLDMuMDYsLTAuNDJdLFsnYycsMC4zMCwwLjMzLDAuNDIsMC42MCwwLjYwLDEuMzhdLFsnYycsMC4wOSwwLjQ1LDAuMjEsMC43OCwwLjMzLDAuOTBdLFsnYycsMC4xMiwwLjA5LDAuMzAsMC4xOCwwLjQ4LDAuMjFdLFsnYycsMC4xMiwwLjAwLDAuMTgsMC4wMCwwLjMwLC0wLjA5XSxbJ2MnLDAuNDIsLTAuMjEsMS4yOSwtMS4yOSwxLjU2LC0xLjg5XSxbJ2MnLDAuMDMsLTAuMTIsMS4yMywtNC41OSwxLjIzLC00LjY1XSxbJ2MnLDAuMDAsLTAuMDMsLTAuMTgsMC4wMywtMC4zOSwwLjEyXSxbJ2MnLC0wLjYzLDAuMTgsLTEuMjAsMC4zNiwtMS43NCwwLjQ1XSxbJ2MnLC0wLjM5LDAuMDYsLTAuNTQsMC4wNiwtMS4wMiwwLjA2XSxbJ2MnLC0wLjY2LDAuMDAsLTAuODQsLTAuMDMsLTEuMzIsLTAuMjddLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC43MiwtMS4wNSwyLjIyLC0xLjIzLDMuMDYsLTAuNDJdLFsnYycsMC4zMCwwLjMzLDAuNDIsMC42MCwwLjYwLDEuMzhdLFsnYycsMC4wOSwwLjQ1LDAuMjEsMC43OCwwLjMzLDAuOTBdLFsnYycsMC4xOCwwLjE4LDAuNTEsMC4yNywwLjcyLDAuMTVdLFsnYycsMC4zMCwtMC4xMiwwLjY5LC0wLjU3LDEuMDgsLTEuMTddLFsnYycsMC40MiwtMC42MCwwLjM5LC0wLjUxLDEuMDUsLTMuMDNdLFsnYycsMC4zMywtMS4yNiwwLjYwLC0yLjMxLDAuNjAsLTIuMzRdLFsnYycsMC4wMCwwLjAwLC0wLjIxLDAuMDMsLTAuNDUsMC4xMl0sWydjJywtMC41NywwLjE4LC0xLjE0LDAuMzMsLTEuNjIsMC40Ml0sWydjJywtMC4zMywwLjA2LC0wLjUxLDAuMDYsLTAuOTYsMC4wNl0sWydjJywtMC42NiwwLjAwLC0wLjg0LC0wLjAzLC0xLjMyLC0wLjI3XSxbJ2MnLC0xLjMyLC0wLjYzLC0xLjc3LC0yLjE2LC0xLjAyLC0zLjMwXSxbJ2MnLDAuMzMsLTAuNDUsMC44NCwtMC44MSwxLjM4LC0wLjkwXSxbJ3onXV0sdzoxMS4zNzMsaDoyOC44ODN9LFxuXHRcdCdyZXN0cy42NHRoJzp7ZDpbWydNJyw1LjEzLC0xMy42Ml0sWydjJywwLjY2LC0wLjA5LDEuMjMsMC4wOSwxLjY4LDAuNTFdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4xNSwwLjYzLDAuMjEsMC44MSwwLjMzLDAuOTZdLFsnYycsMC4xOCwwLjIxLDAuNTQsMC4zMCwwLjc1LDAuMThdLFsnYycsMC4yNCwtMC4xMiwwLjYzLC0wLjY2LDEuMDgsLTEuNTZdLFsnYycsMC4zMywtMC42NiwwLjM5LC0wLjcyLDAuNjAsLTAuNzJdLFsnYycsMC4xMiwwLjAwLDAuMjcsMC4wOSwwLjMzLDAuMThdLFsnYycsMC4wMywwLjA2LC0wLjY5LDMuNjYsLTMuNTQsMTcuNjRdLFsnYycsLTEuOTUsOS42NiwtMy41NywxNy42MSwtMy41NywxNy42NF0sWydjJywtMC4wMywwLjA2LC0wLjEyLDAuMTIsLTAuMjQsMC4xOF0sWydjJywtMC4yMSwwLjA5LC0wLjI0LDAuMDksLTAuNDgsMC4wOV0sWydjJywtMC4yNCwwLjAwLC0wLjMwLDAuMDAsLTAuNDgsLTAuMDZdLFsnYycsLTAuMDksLTAuMDYsLTAuMjEsLTAuMTIsLTAuMjEsLTAuMTVdLFsnYycsLTAuMDYsLTAuMDMsMC4wNiwtMC41NywxLjA1LC00Ljk1XSxbJ2MnLDAuNjAsLTIuNzAsMS4wOCwtNC44OSwxLjA4LC00LjkyXSxbJ2MnLDAuMDAsMC4wMCwtMC4yNCwwLjA2LC0wLjUxLDAuMTVdLFsnYycsLTAuNjYsMC4yNCwtMS4yMCwwLjM2LC0xLjc3LDAuNDhdLFsnYycsLTAuNDIsMC4wNiwtMC41NywwLjA2LC0xLjA1LDAuMDZdLFsnYycsLTAuNjksMC4wMCwtMC44NywtMC4wMywtMS4zNSwtMC4yN10sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjcyLC0xLjA1LDIuMjIsLTEuMjMsMy4wNiwtMC40Ml0sWydjJywwLjMwLDAuMzMsMC40MiwwLjYwLDAuNjAsMS4zOF0sWydjJywwLjA5LDAuNDUsMC4yMSwwLjc4LDAuMzMsMC45MF0sWydjJywwLjA5LDAuMDksMC4yNywwLjE4LDAuNDUsMC4yMV0sWydjJywwLjIxLDAuMDMsMC4zOSwtMC4wOSwwLjcyLC0wLjQyXSxbJ2MnLDAuNDUsLTAuNDUsMS4wMiwtMS4yNiwxLjE3LC0xLjY1XSxbJ2MnLDAuMDMsLTAuMDksMC4yNywtMS4xNCwwLjU0LC0yLjM0XSxbJ2MnLDAuMjcsLTEuMjAsMC40OCwtMi4xOSwwLjUxLC0yLjIyXSxbJ2MnLDAuMDAsLTAuMDMsLTAuMDksLTAuMDMsLTAuNDgsMC4xMl0sWydjJywtMS4xNywwLjM5LC0yLjIyLDAuNTcsLTMuMDAsMC41NF0sWydjJywtMC40MiwtMC4wMywtMC43NSwtMC4xMiwtMS4xMSwtMC4zMF0sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjM2LC0wLjU0LDAuOTYsLTAuODcsMS42NSwtMC45M10sWydjJywwLjU0LC0wLjAzLDEuMDIsMC4xNSwxLjQxLDAuNTRdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xNSwwLjM5LDAuNTcsMC41NywwLjkwLDAuNDJdLFsnYycsMC4zNiwtMC4xOCwxLjIwLC0xLjI2LDEuNDcsLTEuODldLFsnYycsMC4wMywtMC4wOSwwLjMwLC0xLjIwLDAuNTcsLTIuNDNdLFsnbCcsMC41MSwtMi4yOF0sWydsJywtMC41NCwwLjE4XSxbJ2MnLC0xLjExLDAuMzYsLTEuODAsMC40OCwtMi42MSwwLjQ4XSxbJ2MnLC0wLjY2LDAuMDAsLTAuODQsLTAuMDMsLTEuMzIsLTAuMjddLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC4zNiwtMC41NCwwLjk2LC0wLjg3LDEuNjUsLTAuOTNdLFsnYycsMC41NCwtMC4wMywxLjAyLDAuMTUsMS40MSwwLjU0XSxbJ2MnLDAuMjcsMC4zMCwwLjM5LDAuNTQsMC41NywxLjI2XSxbJ2MnLDAuMTUsMC42MywwLjIxLDAuODEsMC4zMywwLjk2XSxbJ2MnLDAuMjEsMC4yMSwwLjU0LDAuMzAsMC43NSwwLjE4XSxbJ2MnLDAuMzYsLTAuMTgsMC45MywtMC45MywxLjI5LC0xLjY4XSxbJ2MnLDAuMTIsLTAuMjQsMC4xOCwtMC40OCwwLjYzLC0yLjU1XSxbJ2wnLDAuNTEsLTIuMzFdLFsnYycsMC4wMCwtMC4wMywtMC4xOCwwLjAzLC0wLjM5LDAuMTJdLFsnYycsLTEuMTQsMC4zNiwtMi4xMCwwLjU0LC0yLjgyLDAuNTFdLFsnYycsLTAuNDIsLTAuMDMsLTAuNzUsLTAuMTIsLTEuMTEsLTAuMzBdLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC4zMywtMC40NSwwLjg0LC0wLjgxLDEuMzgsLTAuOTBdLFsneiddXSx3OjEyLjQ1MyxoOjM2LjM4M30sXG5cdFx0J3Jlc3RzLjEyOHRoJzp7ZDpbWydNJyw2LjAzLC0yMS4xMl0sWydjJywwLjY2LC0wLjA5LDEuMjMsMC4wOSwxLjY4LDAuNTFdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xMiwwLjI3LDAuMzMsMC40NSwwLjYwLDAuNDhdLFsnYycsMC4yMSwwLjAwLDAuMzMsLTAuMDYsMC41NCwtMC4zNl0sWydjJywwLjE1LC0wLjIxLDAuNTQsLTAuOTMsMC43OCwtMS40N10sWydjJywwLjE1LC0wLjMzLDAuMTgsLTAuMzksMC4zMCwtMC40OF0sWydjJywwLjE4LC0wLjA5LDAuNDUsMC4wMCwwLjUxLDAuMTVdLFsnYycsMC4wMywwLjA5LC03LjExLDQyLjc1LC03LjE3LDQyLjg0XSxbJ2MnLC0wLjAzLDAuMDMsLTAuMTUsMC4wOSwtMC4yNCwwLjE1XSxbJ2MnLC0wLjE4LDAuMDYsLTAuMjQsMC4wNiwtMC40NSwwLjA2XSxbJ2MnLC0wLjI0LDAuMDAsLTAuMzAsMC4wMCwtMC40OCwtMC4wNl0sWydjJywtMC4wOSwtMC4wNiwtMC4yMSwtMC4xMiwtMC4yMSwtMC4xNV0sWydjJywtMC4wNiwtMC4wMywwLjAzLC0wLjU3LDAuODQsLTQuOThdLFsnYycsMC41MSwtMi43MCwwLjkzLC00LjkyLDAuOTAsLTQuOTJdLFsnYycsMC4wMCwwLjAwLC0wLjE1LDAuMDYsLTAuMzYsMC4xMl0sWydjJywtMC43OCwwLjI3LC0xLjYyLDAuNDgsLTIuMzEsMC41N10sWydjJywtMC4xNSwwLjAzLC0wLjU0LDAuMDMsLTAuODEsMC4wM10sWydjJywtMC42NiwwLjAwLC0wLjg0LC0wLjAzLC0xLjMyLC0wLjI3XSxbJ2MnLC0xLjMyLC0wLjYzLC0xLjc3LC0yLjE2LC0xLjAyLC0zLjMwXSxbJ2MnLDAuMzYsLTAuNTQsMC45NiwtMC44NywxLjY1LC0wLjkzXSxbJ2MnLDAuNTQsLTAuMDMsMS4wMiwwLjE1LDEuNDEsMC41NF0sWydjJywwLjI3LDAuMzAsMC4zOSwwLjU0LDAuNTcsMS4yNl0sWydjJywwLjA5LDAuMzMsMC4xOCwwLjY2LDAuMjEsMC43Ml0sWydjJywwLjEyLDAuMjcsMC4zMywwLjQ1LDAuNjMsMC40OF0sWydjJywwLjEyLDAuMDAsMC4xOCwwLjAwLDAuMzAsLTAuMDldLFsnYycsMC40MiwtMC4yMSwxLjE0LC0xLjExLDEuNTAsLTEuODNdLFsnYycsMC4xMiwtMC4yNywwLjEyLC0wLjI3LDAuNTQsLTIuNTJdLFsnYycsMC4yNCwtMS4yMywwLjQyLC0yLjI1LDAuMzksLTIuMjVdLFsnYycsMC4wMCwwLjAwLC0wLjI0LDAuMDYsLTAuNTEsMC4xOF0sWydjJywtMS4yNiwwLjM5LC0yLjI1LDAuNTcsLTMuMDYsMC41NF0sWydjJywtMC40MiwtMC4wMywtMC43NSwtMC4xMiwtMS4xMSwtMC4zMF0sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjM2LC0wLjU0LDAuOTYsLTAuODcsMS42NSwtMC45M10sWydjJywwLjU0LC0wLjAzLDEuMDIsMC4xNSwxLjQxLDAuNTRdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4xNSwwLjYzLDAuMjEsMC44MSwwLjMzLDAuOTZdLFsnYycsMC4xOCwwLjIxLDAuNTEsMC4zMCwwLjc1LDAuMThdLFsnYycsMC4zNiwtMC4xNSwxLjA1LC0wLjk5LDEuNDEsLTEuNzddLFsnbCcsMC4xNSwtMC4zMF0sWydsJywwLjQyLC0yLjI1XSxbJ2MnLDAuMjEsLTEuMjYsMC40MiwtMi4yOCwwLjM5LC0yLjI4XSxbJ2wnLC0wLjUxLDAuMTVdLFsnYycsLTEuMTEsMC4zOSwtMS44OSwwLjUxLC0yLjcwLDAuNTFdLFsnYycsLTAuNjYsMC4wMCwtMC44NCwtMC4wMywtMS4zMiwtMC4yN10sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjM2LC0wLjU0LDAuOTYsLTAuODcsMS42NSwtMC45M10sWydjJywwLjU0LC0wLjAzLDEuMDIsMC4xNSwxLjQxLDAuNTRdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4xNSwwLjYzLDAuMjEsMC44MSwwLjMzLDAuOTZdLFsnYycsMC4xOCwwLjE4LDAuNDgsMC4yNywwLjcyLDAuMjFdLFsnYycsMC4zMywtMC4xMiwxLjE0LC0xLjI2LDEuNDEsLTEuOTVdLFsnYycsMC4wMCwtMC4wOSwwLjIxLC0xLjExLDAuNDUsLTIuMzRdLFsnYycsMC4yMSwtMS4yMCwwLjM5LC0yLjIyLDAuMzksLTIuMjhdLFsnYycsMC4wMywtMC4wMywwLjAwLC0wLjAzLC0wLjQ1LDAuMTJdLFsnYycsLTAuNTcsMC4xOCwtMS4yMCwwLjMzLC0xLjcxLDAuNDJdLFsnYycsLTAuMzAsMC4wNiwtMC41MSwwLjA2LC0wLjkzLDAuMDZdLFsnYycsLTAuNjYsMC4wMCwtMC44NCwtMC4wMywtMS4zMiwtMC4yN10sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjM2LC0wLjU0LDAuOTYsLTAuODcsMS42NSwtMC45M10sWydjJywwLjU0LC0wLjAzLDEuMDIsMC4xNSwxLjQxLDAuNTRdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xMiwwLjI3LDAuMzMsMC40NSwwLjYwLDAuNDhdLFsnYycsMC4xOCwwLjAwLDAuMzYsLTAuMDksMC41NywtMC4zM10sWydjJywwLjMzLC0wLjM2LDAuNzgsLTEuMTQsMC45MywtMS41Nl0sWydjJywwLjAzLC0wLjEyLDAuMjQsLTEuMjAsMC40NSwtMi40MF0sWydjJywwLjI0LC0xLjIwLDAuNDIsLTIuMjIsMC40MiwtMi4yOF0sWydjJywwLjAzLC0wLjAzLDAuMDAsLTAuMDMsLTAuMzksMC4wOV0sWydjJywtMS4wNSwwLjM2LC0xLjgwLDAuNDgsLTIuNTgsMC40OF0sWydjJywtMC42MywwLjAwLC0wLjg0LC0wLjAzLC0xLjI5LC0wLjI3XSxbJ2MnLC0xLjMyLC0wLjYzLC0xLjc3LC0yLjE2LC0xLjAyLC0zLjMwXSxbJ2MnLDAuMzMsLTAuNDUsMC44NCwtMC44MSwxLjM4LC0wLjkwXSxbJ3onXV0sdzoxMi45OTIsaDo0My44ODN9LFxuXHRcdCdhY2NpZGVudGFscy5zaGFycCc6e2Q6W1snTScsNS43MywtMTEuMTldLFsnYycsMC4yMSwtMC4xMiwwLjU0LC0wLjAzLDAuNjYsMC4yNF0sWydjJywwLjA2LDAuMTIsMC4wNiwwLjIxLDAuMDYsMi4zMV0sWydjJywwLjAwLDEuMjMsMC4wMCwyLjIyLDAuMDMsMi4yMl0sWydjJywwLjAwLDAuMDAsMC4yNywtMC4xMiwwLjYwLC0wLjI0XSxbJ2MnLDAuNjksLTAuMjcsMC43OCwtMC4zMCwwLjk2LC0wLjE1XSxbJ2MnLDAuMjEsMC4xNSwwLjIxLDAuMTgsMC4yMSwxLjM4XSxbJ2MnLDAuMDAsMS4wMiwwLjAwLDEuMTEsLTAuMDYsMS4yMF0sWydjJywtMC4wMywwLjA2LC0wLjA5LDAuMTIsLTAuMTIsMC4xNV0sWydjJywtMC4wNiwwLjAzLC0wLjQyLDAuMjEsLTAuODQsMC4zNl0sWydsJywtMC43NSwwLjMzXSxbJ2wnLC0wLjAzLDIuNDNdLFsnYycsMC4wMCwxLjMyLDAuMDAsMi40MywwLjAzLDIuNDNdLFsnYycsMC4wMCwwLjAwLDAuMjcsLTAuMTIsMC42MCwtMC4yNF0sWydjJywwLjY5LC0wLjI3LDAuNzgsLTAuMzAsMC45NiwtMC4xNV0sWydjJywwLjIxLDAuMTUsMC4yMSwwLjE4LDAuMjEsMS4zOF0sWydjJywwLjAwLDEuMDIsMC4wMCwxLjExLC0wLjA2LDEuMjBdLFsnYycsLTAuMDMsMC4wNiwtMC4wOSwwLjEyLC0wLjEyLDAuMTVdLFsnYycsLTAuMDYsMC4wMywtMC40MiwwLjIxLC0wLjg0LDAuMzZdLFsnbCcsLTAuNzUsMC4zM10sWydsJywtMC4wMywyLjUyXSxbJ2MnLDAuMDAsMi4yOCwtMC4wMywyLjU1LC0wLjA2LDIuNjRdLFsnYycsLTAuMjEsMC4zNiwtMC43MiwwLjM2LC0wLjkzLDAuMDBdLFsnYycsLTAuMDMsLTAuMDksLTAuMDYsLTAuMzMsLTAuMDYsLTIuNDNdLFsnbCcsMC4wMCwtMi4zMV0sWydsJywtMS4yOSwwLjUxXSxbJ2wnLC0xLjI2LDAuNTFdLFsnbCcsMC4wMCwyLjQzXSxbJ2MnLDAuMDAsMi41OCwwLjAwLDIuNTIsLTAuMTUsMi42N10sWydjJywtMC4wNiwwLjA5LC0wLjI3LDAuMTgsLTAuMzYsMC4xOF0sWydjJywtMC4xMiwwLjAwLC0wLjMzLC0wLjA5LC0wLjM5LC0wLjE4XSxbJ2MnLC0wLjE1LC0wLjE1LC0wLjE1LC0wLjA5LC0wLjE1LC0yLjQzXSxbJ2MnLDAuMDAsLTEuMjMsMC4wMCwtMi4yMiwtMC4wMywtMi4yMl0sWydjJywwLjAwLDAuMDAsLTAuMjcsMC4xMiwtMC42MCwwLjI0XSxbJ2MnLC0wLjY5LDAuMjcsLTAuNzgsMC4zMCwtMC45NiwwLjE1XSxbJ2MnLC0wLjIxLC0wLjE1LC0wLjIxLC0wLjE4LC0wLjIxLC0xLjM4XSxbJ2MnLDAuMDAsLTEuMDIsMC4wMCwtMS4xMSwwLjA2LC0xLjIwXSxbJ2MnLDAuMDMsLTAuMDYsMC4wOSwtMC4xMiwwLjEyLC0wLjE1XSxbJ2MnLDAuMDYsLTAuMDMsMC40MiwtMC4yMSwwLjg0LC0wLjM2XSxbJ2wnLDAuNzgsLTAuMzNdLFsnbCcsMC4wMCwtMi40M10sWydjJywwLjAwLC0xLjMyLDAuMDAsLTIuNDMsLTAuMDMsLTIuNDNdLFsnYycsMC4wMCwwLjAwLC0wLjI3LDAuMTIsLTAuNjAsMC4yNF0sWydjJywtMC42OSwwLjI3LC0wLjc4LDAuMzAsLTAuOTYsMC4xNV0sWydjJywtMC4yMSwtMC4xNSwtMC4yMSwtMC4xOCwtMC4yMSwtMS4zOF0sWydjJywwLjAwLC0xLjAyLDAuMDAsLTEuMTEsMC4wNiwtMS4yMF0sWydjJywwLjAzLC0wLjA2LDAuMDksLTAuMTIsMC4xMiwtMC4xNV0sWydjJywwLjA2LC0wLjAzLDAuNDIsLTAuMjEsMC44NCwtMC4zNl0sWydsJywwLjc4LC0wLjMzXSxbJ2wnLDAuMDAsLTIuNTJdLFsnYycsMC4wMCwtMi4yOCwwLjAzLC0yLjU1LDAuMDYsLTIuNjRdLFsnYycsMC4yMSwtMC4zNiwwLjcyLC0wLjM2LDAuOTMsMC4wMF0sWydjJywwLjAzLDAuMDksMC4wNiwwLjMzLDAuMDYsMi40M10sWydsJywwLjAzLDIuMzFdLFsnbCcsMS4yNiwtMC41MV0sWydsJywxLjI2LC0wLjUxXSxbJ2wnLDAuMDAsLTIuNDNdLFsnYycsMC4wMCwtMi4yOCwwLjAwLC0yLjQzLDAuMDYsLTIuNTVdLFsnYycsMC4wNiwtMC4xMiwwLjEyLC0wLjE4LDAuMjcsLTAuMjRdLFsneiddLFsnbScsLTAuMzMsMTAuNjVdLFsnbCcsMC4wMCwtMi40M10sWydsJywtMS4yOSwwLjUxXSxbJ2wnLC0xLjI2LDAuNTFdLFsnbCcsMC4wMCwyLjQ2XSxbJ2wnLDAuMDAsMi40M10sWydsJywwLjA5LC0wLjAzXSxbJ2MnLDAuMDYsLTAuMDMsMC42MywtMC4yNywxLjI5LC0wLjUxXSxbJ2wnLDEuMTcsLTAuNDhdLFsnbCcsMC4wMCwtMi40Nl0sWyd6J11dLHc6OC4yNSxoOjIyLjQ2Mn0sXG5cdFx0J2FjY2lkZW50YWxzLmhhbGZzaGFycCc6e2Q6W1snTScsMi40MywtMTAuMDVdLFsnYycsMC4yMSwtMC4xMiwwLjU0LC0wLjAzLDAuNjYsMC4yNF0sWydjJywwLjA2LDAuMTIsMC4wNiwwLjIxLDAuMDYsMi4wMV0sWydjJywwLjAwLDEuMDUsMC4wMCwxLjg5LDAuMDMsMS44OV0sWydsJywwLjcyLC0wLjQ4XSxbJ2MnLDAuNjksLTAuNDgsMC42OSwtMC41MSwwLjg3LC0wLjUxXSxbJ2MnLDAuMTUsMC4wMCwwLjE4LDAuMDMsMC4yNywwLjA5XSxbJ2MnLDAuMjEsMC4xNSwwLjIxLDAuMTgsMC4yMSwxLjQxXSxbJ2MnLDAuMDAsMS4xMSwtMC4wMywxLjE0LC0wLjA5LDEuMjNdLFsnYycsLTAuMDMsMC4wMywtMC40OCwwLjM5LC0xLjAyLDAuNzVdLFsnbCcsLTAuOTksMC42Nl0sWydsJywwLjAwLDIuMzddLFsnYycsMC4wMCwxLjMyLDAuMDAsMi4zNywwLjAzLDIuMzddLFsnbCcsMC43MiwtMC40OF0sWydjJywwLjY5LC0wLjQ4LDAuNjksLTAuNTEsMC44NywtMC41MV0sWydjJywwLjE1LDAuMDAsMC4xOCwwLjAzLDAuMjcsMC4wOV0sWydjJywwLjIxLDAuMTUsMC4yMSwwLjE4LDAuMjEsMS40MV0sWydjJywwLjAwLDEuMTEsLTAuMDMsMS4xNCwtMC4wOSwxLjIzXSxbJ2MnLC0wLjAzLDAuMDMsLTAuNDgsMC4zOSwtMS4wMiwwLjc1XSxbJ2wnLC0wLjk5LDAuNjZdLFsnbCcsMC4wMCwyLjI1XSxbJ2MnLDAuMDAsMS45NSwwLjAwLDIuMjgsLTAuMDYsMi4zN10sWydjJywtMC4wNiwwLjEyLC0wLjEyLDAuMjEsLTAuMjQsMC4yN10sWydjJywtMC4yNywwLjEyLC0wLjU0LDAuMDMsLTAuNjksLTAuMjRdLFsnYycsLTAuMDYsLTAuMTIsLTAuMDYsLTAuMjEsLTAuMDYsLTIuMDFdLFsnYycsMC4wMCwtMS4wNSwwLjAwLC0xLjg5LC0wLjAzLC0xLjg5XSxbJ2wnLC0wLjcyLDAuNDhdLFsnYycsLTAuNjksMC40OCwtMC42OSwwLjQ4LC0wLjg3LDAuNDhdLFsnYycsLTAuMTUsMC4wMCwtMC4xOCwwLjAwLC0wLjI3LC0wLjA2XSxbJ2MnLC0wLjIxLC0wLjE1LC0wLjIxLC0wLjE4LC0wLjIxLC0xLjQxXSxbJ2MnLDAuMDAsLTEuMTEsMC4wMywtMS4xNCwwLjA5LC0xLjIzXSxbJ2MnLDAuMDMsLTAuMDMsMC40OCwtMC4zOSwxLjAyLC0wLjc1XSxbJ2wnLDAuOTksLTAuNjZdLFsnbCcsMC4wMCwtMi4zN10sWydjJywwLjAwLC0xLjMyLDAuMDAsLTIuMzcsLTAuMDMsLTIuMzddLFsnbCcsLTAuNzIsMC40OF0sWydjJywtMC42OSwwLjQ4LC0wLjY5LDAuNDgsLTAuODcsMC40OF0sWydjJywtMC4xNSwwLjAwLC0wLjE4LDAuMDAsLTAuMjcsLTAuMDZdLFsnYycsLTAuMjEsLTAuMTUsLTAuMjEsLTAuMTgsLTAuMjEsLTEuNDFdLFsnYycsMC4wMCwtMS4xMSwwLjAzLC0xLjE0LDAuMDksLTEuMjNdLFsnYycsMC4wMywtMC4wMywwLjQ4LC0wLjM5LDEuMDIsLTAuNzVdLFsnbCcsMC45OSwtMC42Nl0sWydsJywwLjAwLC0yLjI1XSxbJ2MnLDAuMDAsLTIuMTMsMC4wMCwtMi4yOCwwLjA2LC0yLjQwXSxbJ2MnLDAuMDYsLTAuMTIsMC4xMiwtMC4xOCwwLjI3LC0wLjI0XSxbJ3onXV0sdzo1LjI1LGg6MjAuMTc0fSxcblx0XHQnYWNjaWRlbnRhbHMubmF0Jzp7ZDpbWydNJywwLjIxLC0xMS40MF0sWydjJywwLjI0LC0wLjA2LDAuNzgsMC4wMCwwLjk5LDAuMTVdLFsnYycsMC4wMywwLjAzLDAuMDMsMC40OCwwLjAwLDIuNjFdLFsnYycsLTAuMDMsMS40NCwtMC4wMywyLjYxLC0wLjAzLDIuNjFdLFsnYycsMC4wMCwwLjAzLDAuNzUsLTAuMDksMS42OCwtMC4yNF0sWydjJywwLjk2LC0wLjE4LDEuNzEsLTAuMjcsMS43NCwtMC4yN10sWydjJywwLjE1LDAuMDMsMC4yNywwLjE1LDAuMzYsMC4zMF0sWydsJywwLjA2LDAuMTJdLFsnbCcsMC4wOSw4LjY3XSxbJ2MnLDAuMDksNi45NiwwLjEyLDguNjcsMC4wOSw4LjY3XSxbJ2MnLC0wLjAzLDAuMDMsLTAuMTIsMC4wNiwtMC4yMSwwLjA5XSxbJ2MnLC0wLjI0LDAuMDksLTAuNzIsMC4wOSwtMC45NiwwLjAwXSxbJ2MnLC0wLjA5LC0wLjAzLC0wLjE4LC0wLjA2LC0wLjIxLC0wLjA5XSxbJ2MnLC0wLjAzLC0wLjAzLC0wLjAzLC0wLjQ4LDAuMDAsLTIuNjFdLFsnYycsMC4wMywtMS40NCwwLjAzLC0yLjYxLDAuMDMsLTIuNjFdLFsnYycsMC4wMCwtMC4wMywtMC43NSwwLjA5LC0xLjY4LDAuMjRdLFsnYycsLTAuOTYsMC4xOCwtMS43MSwwLjI3LC0xLjc0LDAuMjddLFsnYycsLTAuMTUsLTAuMDMsLTAuMjcsLTAuMTUsLTAuMzYsLTAuMzBdLFsnbCcsLTAuMDYsLTAuMTVdLFsnbCcsLTAuMDksLTcuNTNdLFsnYycsLTAuMDYsLTQuMTQsLTAuMDksLTguMDQsLTAuMTIsLTguNjddLFsnbCcsMC4wMCwtMS4xMV0sWydsJywwLjE1LC0wLjA2XSxbJ2MnLDAuMDksLTAuMDMsMC4yMSwtMC4wNiwwLjI3LC0wLjA5XSxbJ3onXSxbJ20nLDMuNzUsOC40MF0sWydjJywwLjAwLC0wLjMzLDAuMDAsLTAuNDIsLTAuMDMsLTAuNDJdLFsnYycsLTAuMTIsMC4wMCwtMi43OSwwLjQ1LC0yLjc5LDAuNDhdLFsnYycsLTAuMDMsMC4wMCwtMC4wOSw2LjMwLC0wLjA5LDYuMzNdLFsnYycsMC4wMywwLjAwLDIuNzksLTAuNDUsMi44MiwtMC40OF0sWydjJywwLjAwLDAuMDAsMC4wOSwtNC41MywwLjA5LC01LjkxXSxbJ3onXV0sdzo1LjQsaDoyMi44fSxcblx0XHQnYWNjaWRlbnRhbHMuZmxhdCc6e2Q6W1snTScsLTAuMzYsLTE0LjA3XSxbJ2MnLDAuMzMsLTAuMDYsMC44NywwLjAwLDEuMDgsMC4xNV0sWydjJywwLjA2LDAuMDMsMC4wNiwwLjM2LC0wLjAzLDUuMjVdLFsnYycsLTAuMDYsMi44NSwtMC4wOSw1LjE5LC0wLjA5LDUuMTldLFsnYycsMC4wMCwwLjAzLDAuMTIsLTAuMDMsMC4yNCwtMC4xMl0sWydjJywwLjYzLC0wLjQyLDEuNDEsLTAuNjYsMi4xOSwtMC43Ml0sWydjJywwLjgxLC0wLjAzLDEuNDcsMC4yMSwyLjA0LDAuNzhdLFsnYycsMC41NywwLjU0LDAuODcsMS4yNiwwLjkzLDIuMDRdLFsnYycsMC4wMywwLjU3LC0wLjA5LDEuMDgsLTAuMzYsMS42Ml0sWydjJywtMC40MiwwLjgxLC0xLjAyLDEuMzgsLTIuODIsMi42MV0sWydjJywtMS4xNCwwLjc4LC0xLjQ0LDEuMDIsLTEuODAsMS40NF0sWydjJywtMC4xOCwwLjE4LC0wLjM5LDAuMzksLTAuNDUsMC40Ml0sWydjJywtMC4yNywwLjE4LC0wLjU3LDAuMTUsLTAuODEsLTAuMDZdLFsnYycsLTAuMDYsLTAuMDksLTAuMTIsLTAuMTgsLTAuMTUsLTAuMjddLFsnYycsLTAuMDMsLTAuMDYsLTAuMDksLTMuMjcsLTAuMTgsLTguMzRdLFsnYycsLTAuMDksLTQuNTMsLTAuMTUsLTguNTgsLTAuMTgsLTkuMDNdLFsnbCcsMC4wMCwtMC43OF0sWydsJywwLjEyLC0wLjA2XSxbJ2MnLDAuMDYsLTAuMDMsMC4xOCwtMC4wOSwwLjI3LC0wLjEyXSxbJ3onXSxbJ20nLDMuMTgsMTEuMDFdLFsnYycsLTAuMjEsLTAuMTIsLTAuNTQsLTAuMTUsLTAuODEsLTAuMDZdLFsnYycsLTAuNTQsMC4xNSwtMC45OSwwLjYzLC0xLjE3LDEuMjZdLFsnYycsLTAuMDYsMC4zMCwtMC4xMiwyLjg4LC0wLjA2LDMuODddLFsnYycsMC4wMywwLjQyLDAuMDMsMC44MSwwLjA2LDAuOTBdLFsnbCcsMC4wMywwLjEyXSxbJ2wnLDAuNDUsLTAuMzldLFsnYycsMC42MywtMC41NCwxLjI2LC0xLjE3LDEuNTYsLTEuNTldLFsnYycsMC4zMCwtMC40MiwwLjYwLC0wLjk5LDAuNzIsLTEuNDFdLFsnYycsMC4xOCwtMC42OSwwLjA5LC0xLjQ3LC0wLjE4LC0yLjA3XSxbJ2MnLC0wLjE1LC0wLjMwLC0wLjMzLC0wLjUxLC0wLjYwLC0wLjYzXSxbJ3onXV0sdzo2Ljc1LGg6MTguODAxfSxcblx0XHQnYWNjaWRlbnRhbHMuaGFsZmZsYXQnOntkOltbJ00nLDQuODMsLTE0LjA3XSxbJ2MnLDAuMzMsLTAuMDYsMC44NywwLjAwLDEuMDgsMC4xNV0sWydjJywwLjA2LDAuMDMsMC4wNiwwLjYwLC0wLjEyLDkuMDZdLFsnYycsLTAuMDksNS41NSwtMC4xNSw5LjA2LC0wLjE4LDkuMTJdLFsnYycsLTAuMDMsMC4wOSwtMC4wOSwwLjE4LC0wLjE1LDAuMjddLFsnYycsLTAuMjQsMC4yMSwtMC41NCwwLjI0LC0wLjgxLDAuMDZdLFsnYycsLTAuMDYsLTAuMDMsLTAuMjcsLTAuMjQsLTAuNDUsLTAuNDJdLFsnYycsLTAuMzYsLTAuNDIsLTAuNjYsLTAuNjYsLTEuODAsLTEuNDRdLFsnYycsLTEuMjMsLTAuODQsLTEuODMsLTEuMzIsLTIuMjUsLTEuNzddLFsnYycsLTAuNjYsLTAuNzgsLTAuOTYsLTEuNTYsLTAuOTMsLTIuNDZdLFsnYycsMC4wOSwtMS40MSwxLjExLC0yLjU4LDIuNDAsLTIuNzldLFsnYycsMC4zMCwtMC4wNiwwLjg0LC0wLjAzLDEuMjMsMC4wNl0sWydjJywwLjU0LDAuMTIsMS4wOCwwLjMzLDEuNTMsMC42M10sWydjJywwLjEyLDAuMDksMC4yNCwwLjE1LDAuMjQsMC4xMl0sWydjJywwLjAwLDAuMDAsLTAuMTIsLTguMzcsLTAuMTgsLTkuNzVdLFsnbCcsMC4wMCwtMC42Nl0sWydsJywwLjEyLC0wLjA2XSxbJ2MnLDAuMDYsLTAuMDMsMC4xOCwtMC4wOSwwLjI3LC0wLjEyXSxbJ3onXSxbJ20nLC0xLjY1LDEwLjk1XSxbJ2MnLC0wLjYwLC0wLjE4LC0xLjA4LDAuMDksLTEuMzgsMC42OV0sWydjJywtMC4yNywwLjYwLC0wLjM2LDEuMzgsLTAuMTgsMi4wN10sWydjJywwLjEyLDAuNDIsMC40MiwwLjk5LDAuNzIsMS40MV0sWydjJywwLjMwLDAuNDIsMC45MywxLjA1LDEuNTYsMS41OV0sWydsJywwLjQ4LDAuMzldLFsnbCcsMC4wMCwtMC4xMl0sWydjJywwLjAzLC0wLjA5LDAuMDMsLTAuNDgsMC4wNiwtMC45MF0sWydjJywwLjAzLC0wLjU3LDAuMDMsLTEuMDgsMC4wMCwtMi4yMl0sWydjJywtMC4wMywtMS42MiwtMC4wMywtMS42MiwtMC4yNCwtMi4wN10sWydjJywtMC4yMSwtMC40MiwtMC42MCwtMC43NSwtMS4wMiwtMC44NF0sWyd6J11dLHc6Ni43MjgsaDoxOC44MDF9LFxuXHRcdCdhY2NpZGVudGFscy5kYmxmbGF0Jzp7ZDpbWydNJywtMC4zNiwtMTQuMDddLFsnYycsMC4zMywtMC4wNiwwLjg3LDAuMDAsMS4wOCwwLjE1XSxbJ2MnLDAuMDYsMC4wMywwLjA2LDAuMzMsLTAuMDMsNC44OV0sWydjJywtMC4wNiwyLjY3LC0wLjA5LDUuMDEsLTAuMDksNS4yMl0sWydsJywwLjAwLDAuMzZdLFsnbCcsMC4xNSwtMC4xNV0sWydjJywwLjM2LC0wLjMwLDAuNzUsLTAuNTEsMS4yMCwtMC42M10sWydjJywwLjMzLC0wLjA5LDAuOTYsLTAuMDksMS4yNiwtMC4wM10sWydjJywwLjI3LDAuMDksMC42MywwLjI3LDAuODcsMC40NV0sWydsJywwLjIxLDAuMTVdLFsnbCcsMC4wMCwtMC4yN10sWydjJywwLjAwLC0wLjE1LC0wLjAzLC0yLjQzLC0wLjA5LC01LjEwXSxbJ2MnLC0wLjA5LC00LjU2LC0wLjA5LC00Ljg2LC0wLjAzLC00Ljg5XSxbJ2MnLDAuMTUsLTAuMTIsMC4zOSwtMC4xNSwwLjcyLC0wLjE1XSxbJ2MnLDAuMzAsMC4wMCwwLjU0LDAuMDMsMC42OSwwLjE1XSxbJ2MnLDAuMDYsMC4wMywwLjA2LDAuMzMsLTAuMDMsNC45NV0sWydjJywtMC4wNiwyLjcwLC0wLjA5LDUuMDQsLTAuMDksNS4yMl0sWydsJywwLjAzLDAuMzBdLFsnbCcsMC4yMSwtMC4xNV0sWydjJywwLjY5LC0wLjQ4LDEuNDQsLTAuNjksMi4yOCwtMC42OV0sWydjJywwLjUxLDAuMDAsMC43OCwwLjAzLDEuMjAsMC4yMV0sWydjJywxLjMyLDAuNjMsMi4wMSwyLjI4LDEuNTMsMy42OV0sWydjJywtMC4yMSwwLjU3LC0wLjUxLDEuMDIsLTEuMDUsMS41Nl0sWydjJywtMC40MiwwLjQyLC0wLjgxLDAuNzIsLTEuOTIsMS41MF0sWydjJywtMS4yNiwwLjg3LC0xLjUwLDEuMDgsLTEuODYsMS41MF0sWydjJywtMC4zOSwwLjQ1LC0wLjU0LDAuNTQsLTAuODEsMC41MV0sWydjJywtMC4xOCwwLjAwLC0wLjIxLDAuMDAsLTAuMzMsLTAuMDZdLFsnbCcsLTAuMjEsLTAuMjFdLFsnbCcsLTAuMDYsLTAuMTJdLFsnbCcsLTAuMDMsLTAuOTldLFsnYycsLTAuMDMsLTAuNTQsLTAuMDMsLTEuMjksLTAuMDYsLTEuNjhdLFsnbCcsMC4wMCwtMC42OV0sWydsJywtMC4yMSwwLjI0XSxbJ2MnLC0wLjM2LDAuNDIsLTAuNzUsMC43NSwtMS44MCwxLjYyXSxbJ2MnLC0xLjAyLDAuODQsLTEuMjAsMC45OSwtMS40NCwxLjM4XSxbJ2MnLC0wLjM2LDAuNTEsLTAuNTQsMC42MCwtMC45MCwwLjUxXSxbJ2MnLC0wLjE1LC0wLjAzLC0wLjM5LC0wLjI3LC0wLjQyLC0wLjQyXSxbJ2MnLC0wLjAzLC0wLjA2LC0wLjA5LC0zLjI3LC0wLjE4LC04LjM0XSxbJ2MnLC0wLjA5LC00LjUzLC0wLjE1LC04LjU4LC0wLjE4LC05LjAzXSxbJ2wnLDAuMDAsLTAuNzhdLFsnbCcsMC4xMiwtMC4wNl0sWydjJywwLjA2LC0wLjAzLDAuMTgsLTAuMDksMC4yNywtMC4xMl0sWyd6J10sWydtJywyLjUyLDEwLjk4XSxbJ2MnLC0wLjE4LC0wLjA5LC0wLjQ4LC0wLjEyLC0wLjY2LC0wLjA2XSxbJ2MnLC0wLjM5LDAuMTUsLTAuNjksMC41NCwtMC44NCwxLjE0XSxbJ2MnLC0wLjA2LDAuMjQsLTAuMDYsMC4zOSwtMC4wOSwxLjc0XSxbJ2MnLC0wLjAzLDEuNDQsMC4wMCwyLjczLDAuMDYsMy4xOF0sWydsJywwLjAzLDAuMTVdLFsnbCcsMC4yNywtMC4yN10sWydjJywwLjkzLC0wLjk2LDEuNTAsLTEuOTUsMS43NCwtMy4wNl0sWydjJywwLjA2LC0wLjI3LDAuMDYsLTAuMzksMC4wNiwtMC45Nl0sWydjJywwLjAwLC0wLjU0LDAuMDAsLTAuNjksLTAuMDYsLTAuOTNdLFsnYycsLTAuMDksLTAuNTEsLTAuMjcsLTAuODEsLTAuNTEsLTAuOTNdLFsneiddLFsnbScsNS40MywwLjAwXSxbJ2MnLC0wLjE4LC0wLjA5LC0wLjUxLC0wLjEyLC0wLjcyLC0wLjA2XSxbJ2MnLC0wLjU0LDAuMTIsLTAuOTYsMC42MywtMS4xNywxLjI2XSxbJ2MnLC0wLjA2LDAuMzAsLTAuMTIsMi44OCwtMC4wNiwzLjkwXSxbJ2MnLDAuMDMsMC40MiwwLjAzLDAuODEsMC4wNiwwLjkwXSxbJ2wnLDAuMDMsMC4xMl0sWydsJywwLjM2LC0wLjMwXSxbJ2MnLDAuNDIsLTAuMzYsMS4wMiwtMC45NiwxLjI5LC0xLjI5XSxbJ2MnLDAuMzYsLTAuNDUsMC42NiwtMC45OSwwLjgxLC0xLjQxXSxbJ2MnLDAuNDIsLTEuMjMsMC4xNSwtMi43NiwtMC42MCwtMy4xMl0sWyd6J11dLHc6MTEuNjEzLGg6MTguODA0fSxcblx0XHQnYWNjaWRlbnRhbHMuZGJsc2hhcnAnOntkOltbJ00nLC0wLjE4LC0zLjk2XSxbJ2MnLDAuMDYsLTAuMDMsMC4xMiwtMC4wNiwwLjE1LC0wLjA2XSxbJ2MnLDAuMDksMC4wMCwyLjc2LDAuMjcsMi43OSwwLjMwXSxbJ2MnLDAuMTIsMC4wMywwLjE1LDAuMTIsMC4xNSwwLjUxXSxbJ2MnLDAuMDYsMC45NiwwLjI0LDEuNTksMC41NywyLjEwXSxbJ2MnLDAuMDYsMC4wOSwwLjE1LDAuMjEsMC4xOCwwLjI0XSxbJ2wnLDAuMDksMC4wNl0sWydsJywwLjA5LC0wLjA2XSxbJ2MnLDAuMDMsLTAuMDMsMC4xMiwtMC4xNSwwLjE4LC0wLjI0XSxbJ2MnLDAuMzMsLTAuNTEsMC41MSwtMS4xNCwwLjU3LC0yLjEwXSxbJ2MnLDAuMDAsLTAuMzksMC4wMywtMC40NSwwLjEyLC0wLjUxXSxbJ2MnLDAuMDMsMC4wMCwwLjY2LC0wLjA5LDEuNDQsLTAuMTVdLFsnYycsMS40NywtMC4xNSwxLjUwLC0wLjE1LDEuNTYsLTAuMDNdLFsnYycsMC4wMywwLjA2LDAuMDAsMC40MiwtMC4wOSwxLjQ0XSxbJ2MnLC0wLjA5LDAuNzIsLTAuMTUsMS4zNSwtMC4xNSwxLjM4XSxbJ2MnLDAuMDAsMC4wMywtMC4wMywwLjA5LC0wLjA2LDAuMTJdLFsnYycsLTAuMDYsMC4wNiwtMC4xMiwwLjA5LC0wLjUxLDAuMDldLFsnYycsLTEuMDgsMC4wNiwtMS44MCwwLjMwLC0yLjI4LDAuNzVdLFsnbCcsLTAuMTIsMC4wOV0sWydsJywwLjA5LDAuMDldLFsnYycsMC4xMiwwLjE1LDAuMzksMC4zMywwLjYzLDAuNDVdLFsnYycsMC40MiwwLjE4LDAuOTYsMC4yNywxLjY4LDAuMzNdLFsnYycsMC4zOSwwLjAwLDAuNDUsMC4wMywwLjUxLDAuMDldLFsnYycsMC4wMywwLjAzLDAuMDYsMC4wOSwwLjA2LDAuMTJdLFsnYycsMC4wMCwwLjAzLDAuMDYsMC42NiwwLjE1LDEuMzhdLFsnYycsMC4wOSwxLjAyLDAuMTIsMS4zOCwwLjA5LDEuNDRdLFsnYycsLTAuMDYsMC4xMiwtMC4wOSwwLjEyLC0xLjU2LC0wLjAzXSxbJ2MnLC0wLjc4LC0wLjA2LC0xLjQxLC0wLjE1LC0xLjQ0LC0wLjE1XSxbJ2MnLC0wLjA5LC0wLjA2LC0wLjEyLC0wLjEyLC0wLjEyLC0wLjU0XSxbJ2MnLC0wLjA2LC0wLjkzLC0wLjI0LC0xLjU2LC0wLjU3LC0yLjA3XSxbJ2MnLC0wLjA2LC0wLjA5LC0wLjE1LC0wLjIxLC0wLjE4LC0wLjI0XSxbJ2wnLC0wLjA5LC0wLjA2XSxbJ2wnLC0wLjA5LDAuMDZdLFsnYycsLTAuMDMsMC4wMywtMC4xMiwwLjE1LC0wLjE4LDAuMjRdLFsnYycsLTAuMzMsMC41MSwtMC41MSwxLjE0LC0wLjU3LDIuMDddLFsnYycsMC4wMCwwLjQyLC0wLjAzLDAuNDgsLTAuMTIsMC41NF0sWydjJywtMC4wMywwLjAwLC0wLjY2LDAuMDksLTEuNDQsMC4xNV0sWydjJywtMS40NywwLjE1LC0xLjUwLDAuMTUsLTEuNTYsMC4wM10sWydjJywtMC4wMywtMC4wNiwwLjAwLC0wLjQyLDAuMDksLTEuNDRdLFsnYycsMC4wOSwtMC43MiwwLjE1LC0xLjM1LDAuMTUsLTEuMzhdLFsnYycsMC4wMCwtMC4wMywwLjAzLC0wLjA5LDAuMDYsLTAuMTJdLFsnYycsMC4wNiwtMC4wNiwwLjEyLC0wLjA5LDAuNTEsLTAuMDldLFsnYycsMC43MiwtMC4wNiwxLjI2LC0wLjE1LDEuNjgsLTAuMzNdLFsnYycsMC4yNCwtMC4xMiwwLjUxLC0wLjMwLDAuNjMsLTAuNDVdLFsnbCcsMC4wOSwtMC4wOV0sWydsJywtMC4xMiwtMC4wOV0sWydjJywtMC40OCwtMC40NSwtMS4yMCwtMC42OSwtMi4yOCwtMC43NV0sWydjJywtMC4zOSwwLjAwLC0wLjQ1LC0wLjAzLC0wLjUxLC0wLjA5XSxbJ2MnLC0wLjAzLC0wLjAzLC0wLjA2LC0wLjA5LC0wLjA2LC0wLjEyXSxbJ2MnLDAuMDAsLTAuMDMsLTAuMDYsLTAuNjMsLTAuMTIsLTEuMzhdLFsnYycsLTAuMDksLTAuNzIsLTAuMTUsLTEuMzUsLTAuMTUsLTEuMzhdLFsneiddXSx3OjcuOTUsaDo3Ljk3N30sXG5cdFx0J2RvdHMuZG90Jzp7ZDpbWydNJywxLjMyLC0xLjY4XSxbJ2MnLDAuMDksLTAuMDMsMC4yNywtMC4wNiwwLjM5LC0wLjA2XSxbJ2MnLDAuOTYsMC4wMCwxLjc0LDAuNzgsMS43NCwxLjcxXSxbJ2MnLDAuMDAsMC45NiwtMC43OCwxLjc0LC0xLjcxLDEuNzRdLFsnYycsLTAuOTYsMC4wMCwtMS43NCwtMC43OCwtMS43NCwtMS43MV0sWydjJywwLjAwLC0wLjc4LDAuNTQsLTEuNTAsMS4zMiwtMS42OF0sWyd6J11dLHc6My40NSxoOjMuNDV9LFxuXHRcdCdub3RlaGVhZHMuZGJsJzp7ZDpbWydNJywtMC42OSwtNC4wMl0sWydjJywwLjE4LC0wLjA5LDAuMzYsLTAuMDksMC41NCwwLjAwXSxbJ2MnLDAuMTgsMC4wOSwwLjI0LDAuMTUsMC4zMywwLjMwXSxbJ2MnLDAuMDYsMC4xNSwwLjA2LDAuMTgsMC4wNiwxLjQxXSxbJ2wnLDAuMDAsMS4yM10sWydsJywwLjEyLC0wLjE4XSxbJ2MnLDAuNzIsLTEuMjYsMi42NCwtMi4zMSw0Ljg2LC0yLjY0XSxbJ2MnLDAuODEsLTAuMTUsMS4xMSwtMC4xNSwyLjEzLC0wLjE1XSxbJ2MnLDAuOTksMC4wMCwxLjI5LDAuMDAsMi4xMCwwLjE1XSxbJ2MnLDAuNzUsMC4xMiwxLjM4LDAuMjcsMi4wNCwwLjU0XSxbJ2MnLDEuMzUsMC41MSwyLjM0LDEuMjYsMi44MiwyLjEwXSxbJ2wnLDAuMTIsMC4xOF0sWydsJywwLjAwLC0xLjIzXSxbJ2MnLDAuMDAsLTEuMjAsMC4wMCwtMS4yNiwwLjA2LC0xLjM4XSxbJ2MnLDAuMDksLTAuMTgsMC4xNSwtMC4yNCwwLjMzLC0wLjMzXSxbJ2MnLDAuMTgsLTAuMDksMC4zNiwtMC4wOSwwLjU0LDAuMDBdLFsnYycsMC4xOCwwLjA5LDAuMjQsMC4xNSwwLjMzLDAuMzBdLFsnbCcsMC4wNiwwLjE1XSxbJ2wnLDAuMDAsMy41NF0sWydsJywwLjAwLDMuNTRdLFsnbCcsLTAuMDYsMC4xNV0sWydjJywtMC4wOSwwLjE4LC0wLjE1LDAuMjQsLTAuMzMsMC4zM10sWydjJywtMC4xOCwwLjA5LC0wLjM2LDAuMDksLTAuNTQsMC4wMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNCwtMC4xNSwtMC4zMywtMC4zM10sWydjJywtMC4wNiwtMC4xMiwtMC4wNiwtMC4xOCwtMC4wNiwtMS4zOF0sWydsJywwLjAwLC0xLjIzXSxbJ2wnLC0wLjEyLDAuMThdLFsnYycsLTAuNDgsMC44NCwtMS40NywxLjU5LC0yLjgyLDIuMTBdLFsnYycsLTAuODQsMC4zMywtMS43MSwwLjU0LC0yLjg1LDAuNjZdLFsnYycsLTAuNDUsMC4wNiwtMi4xNiwwLjA2LC0yLjYxLDAuMDBdLFsnYycsLTEuMTQsLTAuMTIsLTIuMDEsLTAuMzMsLTIuODUsLTAuNjZdLFsnYycsLTEuMzUsLTAuNTEsLTIuMzQsLTEuMjYsLTIuODIsLTIuMTBdLFsnbCcsLTAuMTIsLTAuMThdLFsnbCcsMC4wMCwxLjIzXSxbJ2MnLDAuMDAsMS4yMywwLjAwLDEuMjYsLTAuMDYsMS4zOF0sWydjJywtMC4wOSwwLjE4LC0wLjE1LDAuMjQsLTAuMzMsMC4zM10sWydjJywtMC4xOCwwLjA5LC0wLjM2LDAuMDksLTAuNTQsMC4wMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNCwtMC4xNSwtMC4zMywtMC4zM10sWydsJywtMC4wNiwtMC4xNV0sWydsJywwLjAwLC0zLjU0XSxbJ2MnLDAuMDAsLTMuNDgsMC4wMCwtMy41NCwwLjA2LC0zLjY2XSxbJ2MnLDAuMDksLTAuMTgsMC4xNSwtMC4yNCwwLjMzLC0wLjMzXSxbJ3onXSxbJ20nLDcuNzEsMC42M10sWydjJywtMC4zNiwtMC4wNiwtMC45MCwtMC4wNiwtMS4xNCwwLjAwXSxbJ2MnLC0wLjMwLDAuMDMsLTAuNjYsMC4yNCwtMC44NywwLjQyXSxbJ2MnLC0wLjYwLDAuNTQsLTAuOTAsMS42MiwtMC43NSwyLjgyXSxbJ2MnLDAuMTIsMC45MywwLjUxLDEuNjgsMS4xMSwyLjMxXSxbJ2MnLDAuNzUsMC43MiwxLjgzLDEuMjAsMi44NSwxLjI2XSxbJ2MnLDEuMDUsMC4wNiwxLjgzLC0wLjU0LDIuMTAsLTEuNjVdLFsnYycsMC4yMSwtMC45MCwwLjEyLC0xLjk1LC0wLjI0LC0yLjgyXSxbJ2MnLC0wLjM2LC0wLjgxLC0xLjA4LC0xLjUzLC0xLjk1LC0xLjk1XSxbJ2MnLC0wLjMwLC0wLjE1LC0wLjc4LC0wLjMwLC0xLjExLC0wLjM5XSxbJ3onXV0sdzoxNi44MyxoOjguMTQ1fSxcblx0XHQnbm90ZWhlYWRzLndob2xlJzp7ZDpbWydNJyw2LjUxLC00LjA1XSxbJ2MnLDAuNTEsLTAuMDMsMi4wMSwwLjAwLDIuNTIsMC4wM10sWydjJywxLjQxLDAuMTgsMi42NCwwLjUxLDMuNzIsMS4wOF0sWydjJywxLjIwLDAuNjMsMS45NSwxLjQxLDIuMTksMi4zMV0sWydjJywwLjA5LDAuMzMsMC4wOSwwLjkwLDAuMDAsMS4yM10sWydjJywtMC4yNCwwLjkwLC0wLjk5LDEuNjgsLTIuMTksMi4zMV0sWydjJywtMS4wOCwwLjU3LC0yLjI4LDAuOTAsLTMuNzUsMS4wOF0sWydjJywtMC42NiwwLjA2LC0yLjMxLDAuMDYsLTIuOTcsMC4wMF0sWydjJywtMS40NywtMC4xOCwtMi42NywtMC41MSwtMy43NSwtMS4wOF0sWydjJywtMS4yMCwtMC42MywtMS45NSwtMS40MSwtMi4xOSwtMi4zMV0sWydjJywtMC4wOSwtMC4zMywtMC4wOSwtMC45MCwwLjAwLC0xLjIzXSxbJ2MnLDAuMjQsLTAuOTAsMC45OSwtMS42OCwyLjE5LC0yLjMxXSxbJ2MnLDEuMjAsLTAuNjMsMi42MSwtMC45OSw0LjIzLC0xLjExXSxbJ3onXSxbJ20nLDAuNTcsMC42Nl0sWydjJywtMC44NywtMC4xNSwtMS41MywwLjAwLC0yLjA0LDAuNTFdLFsnYycsLTAuMTUsMC4xNSwtMC4yNCwwLjI3LC0wLjMzLDAuNDhdLFsnYycsLTAuMjQsMC41MSwtMC4zNiwxLjA4LC0wLjMzLDEuNzddLFsnYycsMC4wMywwLjY5LDAuMTgsMS4yNiwwLjQyLDEuNzddLFsnYycsMC42MCwxLjE3LDEuNzQsMS45OCwzLjE4LDIuMjJdLFsnYycsMS4xMSwwLjIxLDEuOTUsLTAuMTUsMi4zNCwtMC45OV0sWydjJywwLjI0LC0wLjUxLDAuMzYsLTEuMDgsMC4zMywtMS44MF0sWydjJywtMC4wNiwtMS4xMSwtMC40NSwtMi4wNCwtMS4xNywtMi43Nl0sWydjJywtMC42MywtMC42MywtMS40NywtMS4wNSwtMi40MCwtMS4yMF0sWyd6J11dLHc6MTQuOTg1LGg6OC4wOTd9LFxuXHRcdCdub3RlaGVhZHMuaGFsZic6e2Q6W1snTScsNy40NCwtNC4wNV0sWydjJywwLjA2LC0wLjAzLDAuMjcsLTAuMDMsMC40OCwtMC4wM10sWydjJywxLjA1LDAuMDAsMS43MSwwLjI0LDIuMTAsMC44MV0sWydjJywwLjQyLDAuNjAsMC40NSwxLjM1LDAuMTgsMi40MF0sWydjJywtMC40MiwxLjU5LC0xLjE0LDIuNzMsLTIuMTYsMy4zOV0sWydjJywtMS40MSwwLjkzLC0zLjE4LDEuNDQsLTUuNDAsMS41M10sWydjJywtMS4xNywwLjAzLC0xLjg5LC0wLjIxLC0yLjI4LC0wLjgxXSxbJ2MnLC0wLjQyLC0wLjYwLC0wLjQ1LC0xLjM1LC0wLjE4LC0yLjQwXSxbJ2MnLDAuNDIsLTEuNTksMS4xNCwtMi43MywyLjE2LC0zLjM5XSxbJ2MnLDAuNjMsLTAuNDIsMS4yMywtMC43MiwxLjk4LC0wLjk2XSxbJ2MnLDAuOTAsLTAuMzAsMS42NSwtMC40MiwzLjEyLC0wLjU0XSxbJ3onXSxbJ20nLDEuMjksMC44N10sWydjJywtMC4yNywtMC4wOSwtMC42MywtMC4xMiwtMC45MCwtMC4wM10sWydjJywtMC43MiwwLjI0LC0xLjUzLDAuNjksLTMuMjcsMS44MF0sWydjJywtMi4zNCwxLjUwLC0zLjMwLDIuMjUsLTMuNTcsMi43OV0sWydjJywtMC4zNiwwLjcyLC0wLjA2LDEuNTAsMC42NiwxLjc3XSxbJ2MnLDAuMjQsMC4xMiwwLjY5LDAuMDksMC45OSwwLjAwXSxbJ2MnLDAuODQsLTAuMzAsMS45MiwtMC45Myw0LjE0LC0yLjM3XSxbJ2MnLDEuNjIsLTEuMDgsMi4zNywtMS43MSwyLjYxLC0yLjE5XSxbJ2MnLDAuMzYsLTAuNzIsMC4wNiwtMS41MCwtMC42NiwtMS43N10sWyd6J11dLHc6MTAuMzcsaDo4LjEzMn0sXG5cdFx0J25vdGVoZWFkcy5xdWFydGVyJzp7ZDpbWydNJyw2LjA5LC00LjA1XSxbJ2MnLDAuMzYsLTAuMDMsMS4yMCwwLjAwLDEuNTMsMC4wNl0sWydjJywxLjE3LDAuMjQsMS44OSwwLjg0LDIuMTYsMS44M10sWydjJywwLjA2LDAuMTgsMC4wNiwwLjMwLDAuMDYsMC42Nl0sWydjJywwLjAwLDAuNDUsMC4wMCwwLjYzLC0wLjE1LDEuMDhdLFsnYycsLTAuNjYsMi4wNCwtMy4wNiwzLjkzLC01LjUyLDQuMzhdLFsnYycsLTAuNTQsMC4wOSwtMS40NCwwLjA5LC0xLjgzLDAuMDNdLFsnYycsLTEuMjMsLTAuMjcsLTEuOTgsLTAuODcsLTIuMjUsLTEuODZdLFsnYycsLTAuMDYsLTAuMTgsLTAuMDYsLTAuMzAsLTAuMDYsLTAuNjZdLFsnYycsMC4wMCwtMC40NSwwLjAwLC0wLjYzLDAuMTUsLTEuMDhdLFsnYycsMC4yNCwtMC43OCwwLjc1LC0xLjUzLDEuNDQsLTIuMjJdLFsnYycsMS4yMCwtMS4yMCwyLjg1LC0yLjAxLDQuNDcsLTIuMjJdLFsneiddXSx3OjkuODEsaDo4LjA5NH0sXG5cdFx0J25vdGVoZWFkcy5zbGFzaC5ub3N0ZW0nOntkOltbJ00nLDkuMzAsLTcuNzddLFsnYycsMC4wNiwtMC4wNiwwLjE4LC0wLjA2LDEuNzEsLTAuMDZdLFsnbCcsMS42NSwwLjAwXSxbJ2wnLDAuMDksMC4wOV0sWydjJywwLjA2LDAuMDYsMC4wNiwwLjA5LDAuMDYsMC4xNV0sWydjJywtMC4wMywwLjEyLC05LjIxLDE1LjI0LC05LjMwLDE1LjMzXSxbJ2MnLC0wLjA2LDAuMDYsLTAuMTgsMC4wNiwtMS43MSwwLjA2XSxbJ2wnLC0xLjY1LDAuMDBdLFsnbCcsLTAuMDksLTAuMDldLFsnYycsLTAuMDYsLTAuMDYsLTAuMDYsLTAuMDksLTAuMDYsLTAuMTVdLFsnYycsMC4wMywtMC4xMiw5LjIxLC0xNS4yNCw5LjMwLC0xNS4zM10sWyd6J11dLHc6MTIuODEsaDoxNS42M30sXG5cdFx0J25vdGVoZWFkcy5pbmRldGVybWluYXRlJzp7ZDpbWydNJywwLjc4LC00LjA1XSxbJ2MnLDAuMTIsLTAuMDMsMC4yNCwtMC4wMywwLjM2LDAuMDNdLFsnYycsMC4wMywwLjAzLDAuOTMsMC43MiwxLjk1LDEuNTZdLFsnbCcsMS44NiwxLjUwXSxbJ2wnLDEuODYsLTEuNTBdLFsnYycsMS4wMiwtMC44NCwxLjkyLC0xLjUzLDEuOTUsLTEuNTZdLFsnYycsMC4yMSwtMC4xMiwwLjMzLC0wLjA5LDAuNzUsMC4yNF0sWydjJywwLjMwLDAuMjcsMC4zNiwwLjM2LDAuMzYsMC41NF0sWydjJywwLjAwLDAuMDMsLTAuMDMsMC4xMiwtMC4wNiwwLjE4XSxbJ2MnLC0wLjAzLDAuMDYsLTAuOTAsMC43NSwtMS44OSwxLjU2XSxbJ2wnLC0xLjgwLDEuNDddLFsnYycsMC4wMCwwLjAzLDAuODEsMC42OSwxLjgwLDEuNTBdLFsnYycsMC45OSwwLjgxLDEuODYsMS41MCwxLjg5LDEuNTZdLFsnYycsMC4wMywwLjA2LDAuMDYsMC4xNSwwLjA2LDAuMThdLFsnYycsMC4wMCwwLjE4LC0wLjA2LDAuMjcsLTAuMzYsMC41NF0sWydjJywtMC40MiwwLjMzLC0wLjU0LDAuMzYsLTAuNzUsMC4yNF0sWydjJywtMC4wMywtMC4wMywtMC45MywtMC43MiwtMS45NSwtMS41Nl0sWydsJywtMS44NiwtMS41MF0sWydsJywtMS44NiwxLjUwXSxbJ2MnLC0xLjAyLDAuODQsLTEuOTIsMS41MywtMS45NSwxLjU2XSxbJ2MnLC0wLjIxLDAuMTIsLTAuMzMsMC4wOSwtMC43NSwtMC4yNF0sWydjJywtMC4zMCwtMC4yNywtMC4zNiwtMC4zNiwtMC4zNiwtMC41NF0sWydjJywwLjAwLC0wLjAzLDAuMDMsLTAuMTIsMC4wNiwtMC4xOF0sWydjJywwLjAzLC0wLjA2LDAuOTAsLTAuNzUsMS44OSwtMS41Nl0sWydsJywxLjgwLC0xLjQ3XSxbJ2MnLDAuMDAsLTAuMDMsLTAuODEsLTAuNjksLTEuODAsLTEuNTBdLFsnYycsLTAuOTksLTAuODEsLTEuODYsLTEuNTAsLTEuODksLTEuNTZdLFsnYycsLTAuMDYsLTAuMTIsLTAuMDksLTAuMjEsLTAuMDMsLTAuMzZdLFsnYycsMC4wMywtMC4wOSwwLjU3LC0wLjU3LDAuNzIsLTAuNjNdLFsneiddXSx3OjkuODQzLGg6OC4xMzl9LFxuXHRcdCdzY3JpcHRzLnVmZXJtYXRhJzp7ZDpbWydNJywtMC43NSwtMTAuNzddLFsnYycsMC4xMiwwLjAwLDAuNDUsLTAuMDMsMC42OSwtMC4wM10sWydjJywyLjkxLC0wLjAzLDUuNTUsMS41Myw3LjQxLDQuMzVdLFsnYycsMS4xNywxLjcxLDEuOTUsMy43MiwyLjQzLDYuMDNdLFsnYycsMC4xMiwwLjUxLDAuMTIsMC41NywwLjAzLDAuNjldLFsnYycsLTAuMTIsMC4yMSwtMC40OCwwLjI3LC0wLjY5LDAuMTJdLFsnYycsLTAuMTIsLTAuMDksLTAuMTgsLTAuMjQsLTAuMjcsLTAuNjldLFsnYycsLTAuNzgsLTMuNjMsLTMuNDIsLTYuNTQsLTYuNzgsLTcuMzhdLFsnYycsLTAuNzgsLTAuMjEsLTEuMjAsLTAuMjQsLTIuMDcsLTAuMjRdLFsnYycsLTAuNjMsMC4wMCwtMC44NCwwLjAwLC0xLjIwLDAuMDZdLFsnYycsLTEuODMsMC4yNywtMy40MiwxLjA4LC00LjgwLDIuMzddLFsnYycsLTEuNDEsMS4zNSwtMi40MCwzLjIxLC0yLjg1LDUuMTldLFsnYycsLTAuMDksMC40NSwtMC4xNSwwLjYwLC0wLjI3LDAuNjldLFsnYycsLTAuMjEsMC4xNSwtMC41NywwLjA5LC0wLjY5LC0wLjEyXSxbJ2MnLC0wLjA5LC0wLjEyLC0wLjA5LC0wLjE4LDAuMDMsLTAuNjldLFsnYycsMC4zMywtMS42MiwwLjc4LC0zLjAwLDEuNDcsLTQuMzhdLFsnYycsMS43NywtMy41NCw0LjQ0LC01LjY3LDcuNTYsLTUuOTddLFsneiddLFsnbScsMC4zMyw3LjQ3XSxbJ2MnLDEuMzgsLTAuMzAsMi41OCwwLjkwLDIuMzEsMi4yNV0sWydjJywtMC4xNSwwLjcyLC0wLjc4LDEuMzUsLTEuNDcsMS41MF0sWydjJywtMS4zOCwwLjI3LC0yLjU4LC0wLjkzLC0yLjMxLC0yLjMxXSxbJ2MnLDAuMTUsLTAuNjksMC43OCwtMS4yOSwxLjQ3LC0xLjQ0XSxbJ3onXV0sdzoxOS43NDgsaDoxMS4yODl9LFxuXHRcdCdzY3JpcHRzLmRmZXJtYXRhJzp7ZDpbWydNJywtOS42MywtMC40Ml0sWydjJywwLjE1LC0wLjA5LDAuMzYsLTAuMDYsMC41MSwwLjAzXSxbJ2MnLDAuMTIsMC4wOSwwLjE4LDAuMjQsMC4yNywwLjY2XSxbJ2MnLDAuNzgsMy42NiwzLjQyLDYuNTcsNi43OCw3LjQxXSxbJ2MnLDAuNzgsMC4yMSwxLjIwLDAuMjQsMi4wNywwLjI0XSxbJ2MnLDAuNjMsMC4wMCwwLjg0LDAuMDAsMS4yMCwtMC4wNl0sWydjJywxLjgzLC0wLjI3LDMuNDIsLTEuMDgsNC44MCwtMi4zN10sWydjJywxLjQxLC0xLjM1LDIuNDAsLTMuMjEsMi44NSwtNS4yMl0sWydjJywwLjA5LC0wLjQyLDAuMTUsLTAuNTcsMC4yNywtMC42Nl0sWydjJywwLjIxLC0wLjE1LDAuNTcsLTAuMDksMC42OSwwLjEyXSxbJ2MnLDAuMDksMC4xMiwwLjA5LDAuMTgsLTAuMDMsMC42OV0sWydjJywtMC4zMywxLjYyLC0wLjc4LDMuMDAsLTEuNDcsNC4zOF0sWydjJywtMS45MiwzLjg0LC00Ljg5LDYuMDAsLTguMzEsNi4wMF0sWydjJywtMy40MiwwLjAwLC02LjM5LC0yLjE2LC04LjMxLC02LjAwXSxbJ2MnLC0wLjQ4LC0wLjk2LC0wLjg0LC0xLjkyLC0xLjE0LC0yLjk3XSxbJ2MnLC0wLjE4LC0wLjY5LC0wLjQyLC0xLjc0LC0wLjQyLC0xLjkyXSxbJ2MnLDAuMDAsLTAuMTIsMC4wOSwtMC4yNywwLjI0LC0wLjMzXSxbJ3onXSxbJ20nLDkuMjEsMC4wMF0sWydjJywxLjIwLC0wLjI3LDIuMzQsMC42MywyLjM0LDEuODZdLFsnYycsMC4wMCwwLjkwLC0wLjY2LDEuNjgsLTEuNTAsMS44OV0sWydjJywtMS4zOCwwLjI3LC0yLjU4LC0wLjkzLC0yLjMxLC0yLjMxXSxbJ2MnLDAuMTUsLTAuNjksMC43OCwtMS4yOSwxLjQ3LC0xLjQ0XSxbJ3onXV0sdzoxOS43NDQsaDoxMS4yNzR9LFxuXHRcdCdzY3JpcHRzLnNmb3J6YXRvJzp7ZDpbWydNJywtNi40NSwtMy42OV0sWydjJywwLjA2LC0wLjAzLDAuMTUsLTAuMDYsMC4xOCwtMC4wNl0sWydjJywwLjA2LDAuMDAsMi44NSwwLjcyLDYuMjQsMS41OV0sWydsJyw2LjMzLDEuNjVdLFsnYycsMC4zMywwLjA2LDAuNDUsMC4yMSwwLjQ1LDAuNTFdLFsnYycsMC4wMCwwLjMwLC0wLjEyLDAuNDUsLTAuNDUsMC41MV0sWydsJywtNi4zMywxLjY1XSxbJ2MnLC0zLjM5LDAuODcsLTYuMTgsMS41OSwtNi4yMSwxLjU5XSxbJ2MnLC0wLjIxLDAuMDAsLTAuNDgsLTAuMjQsLTAuNTEsLTAuNDVdLFsnYycsMC4wMCwtMC4xNSwwLjA2LC0wLjM2LDAuMTgsLTAuNDVdLFsnYycsMC4wOSwtMC4wNiwwLjg3LC0wLjI3LDMuODQsLTEuMDVdLFsnYycsMi4wNCwtMC41NCwzLjg0LC0wLjk5LDQuMDIsLTEuMDJdLFsnYycsMC4xNSwtMC4wNiwxLjE0LC0wLjI0LDIuMjIsLTAuNDJdLFsnYycsMS4wNSwtMC4xOCwxLjkyLC0wLjM2LDEuOTIsLTAuMzZdLFsnYycsMC4wMCwwLjAwLC0wLjg3LC0wLjE4LC0xLjkyLC0wLjM2XSxbJ2MnLC0xLjA4LC0wLjE4LC0yLjA3LC0wLjM2LC0yLjIyLC0wLjQyXSxbJ2MnLC0wLjE4LC0wLjAzLC0xLjk4LC0wLjQ4LC00LjAyLC0xLjAyXSxbJ2MnLC0yLjk3LC0wLjc4LC0zLjc1LC0wLjk5LC0zLjg0LC0xLjA1XSxbJ2MnLC0wLjEyLC0wLjA5LC0wLjE4LC0wLjMwLC0wLjE4LC0wLjQ1XSxbJ2MnLDAuMDMsLTAuMTUsMC4xNSwtMC4zMCwwLjMwLC0wLjM5XSxbJ3onXV0sdzoxMy41LGg6Ny41fSxcblx0XHQnc2NyaXB0cy5zdGFjY2F0byc6e2Q6W1snTScsLTAuMzYsLTEuNDddLFsnYycsMC45MywtMC4yMSwxLjg2LDAuNTEsMS44NiwxLjQ3XSxbJ2MnLDAuMDAsMC45MywtMC44NywxLjY1LC0xLjgwLDEuNDddLFsnYycsLTAuNTQsLTAuMTIsLTEuMDIsLTAuNTcsLTEuMTQsLTEuMDhdLFsnYycsLTAuMjEsLTAuODEsMC4yNywtMS42NSwxLjA4LC0xLjg2XSxbJ3onXV0sdzoyLjk4OSxoOjMuMDA0fSxcblx0XHQnc2NyaXB0cy50ZW51dG8nOntkOltbJ00nLC00LjIwLC0wLjQ4XSxbJ2wnLDAuMTIsLTAuMDZdLFsnbCcsNC4wOCwwLjAwXSxbJ2wnLDQuMDgsMC4wMF0sWydsJywwLjEyLDAuMDZdLFsnYycsMC4zOSwwLjIxLDAuMzksMC43NSwwLjAwLDAuOTZdLFsnbCcsLTAuMTIsMC4wNl0sWydsJywtNC4wOCwwLjAwXSxbJ2wnLC00LjA4LDAuMDBdLFsnbCcsLTAuMTIsLTAuMDZdLFsnYycsLTAuMzksLTAuMjEsLTAuMzksLTAuNzUsMC4wMCwtMC45Nl0sWyd6J11dLHc6OC45ODUsaDoxLjA4fSxcblx0XHQnc2NyaXB0cy51bWFyY2F0byc6e2Q6W1snTScsLTAuMTUsLTguMTldLFsnYycsMC4xNSwtMC4xMiwwLjM2LC0wLjAzLDAuNDUsMC4xNV0sWydjJywwLjIxLDAuNDIsMy40NSw3LjY1LDMuNDUsNy43MV0sWydjJywwLjAwLDAuMTIsLTAuMTIsMC4yNywtMC4yMSwwLjMwXSxbJ2MnLC0wLjAzLDAuMDMsLTAuNTEsMC4wMywtMS4xNCwwLjAzXSxbJ2MnLC0xLjA1LDAuMDAsLTEuMDgsMC4wMCwtMS4xNywtMC4wNl0sWydjJywtMC4wOSwtMC4wNiwtMC4yNCwtMC4zNiwtMS4xNywtMi40MF0sWydjJywtMC41NywtMS4yOSwtMS4wNSwtMi4zNCwtMS4wOCwtMi4zNF0sWydjJywwLjAwLC0wLjAzLC0wLjUxLDEuMDIsLTEuMDgsMi4zNF0sWydjJywtMC45MywyLjA3LC0xLjA4LDIuMzQsLTEuMTQsMi40MF0sWydjJywtMC4wNiwwLjAzLC0wLjE1LDAuMDYsLTAuMTgsMC4wNl0sWydjJywtMC4xNSwwLjAwLC0wLjMzLC0wLjE4LC0wLjMzLC0wLjMzXSxbJ2MnLDAuMDAsLTAuMDYsMy4yNCwtNy4zMiwzLjQ1LC03LjcxXSxbJ2MnLDAuMDMsLTAuMDYsMC4wOSwtMC4xNSwwLjE1LC0wLjE1XSxbJ3onXV0sdzo3LjUsaDo4LjI0NX0sXG5cdFx0J3NjcmlwdHMuZG1hcmNhdG8nOntkOltbJ00nLC0zLjU3LDAuMDNdLFsnYycsMC4wMywwLjAwLDAuNTcsLTAuMDMsMS4xNywtMC4wM10sWydjJywxLjA1LDAuMDAsMS4wOCwwLjAwLDEuMTcsMC4wNl0sWydjJywwLjA5LDAuMDYsMC4yNCwwLjM2LDEuMTcsMi40MF0sWydjJywwLjU3LDEuMjksMS4wNSwyLjM0LDEuMDgsMi4zNF0sWydjJywwLjAwLDAuMDMsMC41MSwtMS4wMiwxLjA4LC0yLjM0XSxbJ2MnLDAuOTMsLTIuMDcsMS4wOCwtMi4zNCwxLjE0LC0yLjQwXSxbJ2MnLDAuMDYsLTAuMDMsMC4xNSwtMC4wNiwwLjE4LC0wLjA2XSxbJ2MnLDAuMTUsMC4wMCwwLjMzLDAuMTgsMC4zMywwLjMzXSxbJ2MnLDAuMDAsMC4wOSwtMy40NSw3Ljc0LC0zLjU0LDcuODNdLFsnYycsLTAuMTIsMC4xMiwtMC4zMCwwLjEyLC0wLjQyLDAuMDBdLFsnYycsLTAuMDksLTAuMDksLTMuNTQsLTcuNzQsLTMuNTQsLTcuODNdLFsnYycsMC4wMCwtMC4wOSwwLjEyLC0wLjI3LDAuMTgsLTAuMzBdLFsneiddXSx3OjcuNSxoOjguMjV9LFxuXHRcdCdzY3JpcHRzLnN0b3BwZWQnOntkOltbJ00nLC0wLjI3LC00LjA4XSxbJ2MnLDAuMTgsLTAuMDksMC4zNiwtMC4wOSwwLjU0LDAuMDBdLFsnYycsMC4xOCwwLjA5LDAuMjQsMC4xNSwwLjMzLDAuMzBdLFsnbCcsMC4wNiwwLjE1XSxbJ2wnLDAuMDAsMS41MF0sWydsJywwLjAwLDEuNDddLFsnbCcsMS40NywwLjAwXSxbJ2wnLDEuNTAsMC4wMF0sWydsJywwLjE1LDAuMDZdLFsnYycsMC4xNSwwLjA5LDAuMjEsMC4xNSwwLjMwLDAuMzNdLFsnYycsMC4wOSwwLjE4LDAuMDksMC4zNiwwLjAwLDAuNTRdLFsnYycsLTAuMDksMC4xOCwtMC4xNSwwLjI0LC0wLjMzLDAuMzNdLFsnYycsLTAuMTIsMC4wNiwtMC4xOCwwLjA2LC0xLjYyLDAuMDZdLFsnbCcsLTEuNDcsMC4wMF0sWydsJywwLjAwLDEuNDddLFsnbCcsMC4wMCwxLjQ3XSxbJ2wnLC0wLjA2LDAuMTVdLFsnYycsLTAuMDksMC4xOCwtMC4xNSwwLjI0LC0wLjMzLDAuMzNdLFsnYycsLTAuMTgsMC4wOSwtMC4zNiwwLjA5LC0wLjU0LDAuMDBdLFsnYycsLTAuMTgsLTAuMDksLTAuMjQsLTAuMTUsLTAuMzMsLTAuMzNdLFsnbCcsLTAuMDYsLTAuMTVdLFsnbCcsMC4wMCwtMS40N10sWydsJywwLjAwLC0xLjQ3XSxbJ2wnLC0xLjQ3LDAuMDBdLFsnYycsLTEuNDQsMC4wMCwtMS41MCwwLjAwLC0xLjYyLC0wLjA2XSxbJ2MnLC0wLjE4LC0wLjA5LC0wLjI0LC0wLjE1LC0wLjMzLC0wLjMzXSxbJ2MnLC0wLjA5LC0wLjE4LC0wLjA5LC0wLjM2LDAuMDAsLTAuNTRdLFsnYycsMC4wOSwtMC4xOCwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsnbCcsMC4xNSwtMC4wNl0sWydsJywxLjQ3LDAuMDBdLFsnbCcsMS40NywwLjAwXSxbJ2wnLDAuMDAsLTEuNDddLFsnYycsMC4wMCwtMS40NCwwLjAwLC0xLjUwLDAuMDYsLTEuNjJdLFsnYycsMC4wOSwtMC4xOCwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsneiddXSx3OjguMjk1LGg6OC4yOTV9LFxuXHRcdCdzY3JpcHRzLnVwYm93Jzp7ZDpbWydNJywtNC42NSwtMTUuNTRdLFsnYycsMC4xMiwtMC4wOSwwLjM2LC0wLjA2LDAuNDgsMC4wM10sWydjJywwLjAzLDAuMDMsMC4wOSwwLjA5LDAuMTIsMC4xNV0sWydjJywwLjAzLDAuMDYsMC42NiwyLjEzLDEuNDEsNC42Ml0sWydjJywxLjM1LDQuNDEsMS4zOCw0LjU2LDIuMDEsNi45Nl0sWydsJywwLjYzLDIuNDZdLFsnbCcsMC42MywtMi40Nl0sWydjJywwLjYzLC0yLjQwLDAuNjYsLTIuNTUsMi4wMSwtNi45Nl0sWydjJywwLjc1LC0yLjQ5LDEuMzgsLTQuNTYsMS40MSwtNC42Ml0sWydjJywwLjA2LC0wLjE1LDAuMTgsLTAuMjEsMC4zNiwtMC4yNF0sWydjJywwLjE1LDAuMDAsMC4zMCwwLjA2LDAuMzksMC4xOF0sWydjJywwLjE1LDAuMjEsMC4yNCwtMC4xOCwtMi4xMCw3LjU2XSxbJ2MnLC0xLjIwLDMuOTYsLTIuMjIsNy4zMiwtMi4yNSw3LjQxXSxbJ2MnLDAuMDAsMC4xMiwtMC4wNiwwLjI3LC0wLjA5LDAuMzBdLFsnYycsLTAuMTIsMC4yMSwtMC42MCwwLjIxLC0wLjcyLDAuMDBdLFsnYycsLTAuMDMsLTAuMDMsLTAuMDksLTAuMTgsLTAuMDksLTAuMzBdLFsnYycsLTAuMDMsLTAuMDksLTEuMDUsLTMuNDUsLTIuMjUsLTcuNDFdLFsnYycsLTIuMzQsLTcuNzQsLTIuMjUsLTcuMzUsLTIuMTAsLTcuNTZdLFsnYycsMC4wMywtMC4wMywwLjA5LC0wLjA5LDAuMTUsLTAuMTJdLFsneiddXSx3OjkuNzMsaDoxNS42MDh9LFxuXHRcdCdzY3JpcHRzLmRvd25ib3cnOntkOltbJ00nLC01LjU1LC05LjkzXSxbJ2wnLDAuMDksLTAuMDZdLFsnbCcsNS40NiwwLjAwXSxbJ2wnLDUuNDYsMC4wMF0sWydsJywwLjA5LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsNC43N10sWydjJywwLjAwLDUuMjgsMC4wMCw0Ljg5LC0wLjE4LDUuMDFdLFsnYycsLTAuMTgsMC4xMiwtMC40MiwwLjA2LC0wLjU0LC0wLjEyXSxbJ2MnLC0wLjA2LC0wLjA5LC0wLjA2LC0wLjE4LC0wLjA2LC0yLjk3XSxbJ2wnLDAuMDAsLTIuODVdLFsnbCcsLTQuODMsMC4wMF0sWydsJywtNC44MywwLjAwXSxbJ2wnLDAuMDAsMi44NV0sWydjJywwLjAwLDIuNzksMC4wMCwyLjg4LC0wLjA2LDIuOTddLFsnYycsLTAuMTUsMC4yNCwtMC41MSwwLjI0LC0wLjY2LDAuMDBdLFsnYycsLTAuMDYsLTAuMDksLTAuMDYsLTAuMjEsLTAuMDYsLTQuODldLFsnbCcsMC4wMCwtNC43N10sWyd6J11dLHc6MTEuMjIsaDo5Ljk5Mn0sXG5cdFx0J3NjcmlwdHMudHVybic6e2Q6W1snTScsLTQuNzcsLTMuOTBdLFsnYycsMC4zNiwtMC4wNiwxLjA1LC0wLjA2LDEuNDQsMC4wM10sWydjJywwLjc4LDAuMTUsMS41MCwwLjUxLDIuMzQsMS4xNF0sWydjJywwLjYwLDAuNDUsMS4wNSwwLjg3LDIuMjIsMi4wMV0sWydjJywxLjExLDEuMDgsMS42MiwxLjUwLDIuMjIsMS44Nl0sWydjJywwLjYwLDAuMzYsMS4zMiwwLjU3LDEuOTIsMC41N10sWydjJywwLjkwLDAuMDAsMS43MSwtMC41NywxLjg5LC0xLjM1XSxbJ2MnLDAuMjQsLTAuOTMsLTAuMzksLTEuODksLTEuMzUsLTIuMTBdLFsnbCcsLTAuMTUsLTAuMDZdLFsnbCcsLTAuMDksMC4xNV0sWydjJywtMC4wMywwLjA5LC0wLjE1LDAuMjQsLTAuMjQsMC4zM10sWydjJywtMC43MiwwLjcyLC0yLjA0LDAuNTQsLTIuNDksLTAuMzZdLFsnYycsLTAuNDgsLTAuOTMsMC4wMywtMS44NiwxLjE3LC0yLjE5XSxbJ2MnLDAuMzAsLTAuMDksMS4wMiwtMC4wOSwxLjM1LDAuMDBdLFsnYycsMC45OSwwLjI3LDEuNzQsMC44NywyLjI1LDEuODNdLFsnYycsMC42OSwxLjQxLDAuNjMsMy4wMCwtMC4yMSw0LjI2XSxbJ2MnLC0wLjIxLDAuMzAsLTAuNjksMC44MSwtMC45OSwxLjAyXSxbJ2MnLC0wLjMwLDAuMjEsLTAuODQsMC40NSwtMS4xNywwLjU0XSxbJ2MnLC0xLjIzLDAuMzYsLTIuNDksMC4xNSwtMy43MiwtMC42MF0sWydjJywtMC43NSwtMC40OCwtMS40MSwtMS4wMiwtMi44NSwtMi40Nl0sWydjJywtMS4xMSwtMS4wOCwtMS42MiwtMS41MCwtMi4yMiwtMS44Nl0sWydjJywtMC42MCwtMC4zNiwtMS4zMiwtMC41NywtMS45MiwtMC41N10sWydjJywtMC45MCwwLjAwLC0xLjcxLDAuNTcsLTEuODksMS4zNV0sWydjJywtMC4yNCwwLjkzLDAuMzksMS44OSwxLjM1LDIuMTBdLFsnbCcsMC4xNSwwLjA2XSxbJ2wnLDAuMDksLTAuMTVdLFsnYycsMC4wMywtMC4wOSwwLjE1LC0wLjI0LDAuMjQsLTAuMzNdLFsnYycsMC43MiwtMC43MiwyLjA0LC0wLjU0LDIuNDksMC4zNl0sWydjJywwLjQ4LDAuOTMsLTAuMDMsMS44NiwtMS4xNywyLjE5XSxbJ2MnLC0wLjMwLDAuMDksLTEuMDIsMC4wOSwtMS4zNSwwLjAwXSxbJ2MnLC0wLjk5LC0wLjI3LC0xLjc0LC0wLjg3LC0yLjI1LC0xLjgzXSxbJ2MnLC0wLjY5LC0xLjQxLC0wLjYzLC0zLjAwLDAuMjEsLTQuMjZdLFsnYycsMC4yMSwtMC4zMCwwLjY5LC0wLjgxLDAuOTksLTEuMDJdLFsnYycsMC40OCwtMC4zMywxLjExLC0wLjU3LDEuNzQsLTAuNjZdLFsneiddXSx3OjE2LjM2NixoOjcuODkzfSxcblx0XHQnc2NyaXB0cy50cmlsbCc6e2Q6W1snTScsLTAuNTEsLTE2LjAyXSxbJ2MnLDAuMTIsLTAuMDksMC4yMSwtMC4xOCwwLjIxLC0wLjE4XSxbJ2wnLC0wLjgxLDQuMDJdLFsnbCcsLTAuODEsNC4wMl0sWydjJywwLjAzLDAuMDAsMC41MSwtMC4yNywxLjA4LC0wLjYwXSxbJ2MnLDAuNjAsLTAuMzAsMS4xNCwtMC42MywxLjI2LC0wLjY2XSxbJ2MnLDEuMTQsLTAuNTQsMi4zMSwtMC42MCwzLjA5LC0wLjE4XSxbJ2MnLDAuMjcsMC4xNSwwLjU0LDAuMzYsMC42MCwwLjUxXSxbJ2wnLDAuMDYsMC4xMl0sWydsJywwLjIxLC0wLjIxXSxbJ2MnLDAuOTAsLTAuODEsMi4yMiwtMC45OSwzLjEyLC0wLjQyXSxbJ2MnLDAuNjAsMC40MiwwLjkwLDEuMTQsMC43OCwyLjA3XSxbJ2MnLC0wLjE1LDEuMjksLTEuMDUsMi4zMSwtMS45NSwyLjI1XSxbJ2MnLC0wLjQ4LC0wLjAzLC0wLjc4LC0wLjMwLC0wLjk2LC0wLjgxXSxbJ2MnLC0wLjA5LC0wLjI3LC0wLjA5LC0wLjkwLC0wLjAzLC0xLjIwXSxbJ2MnLDAuMjEsLTAuNzUsMC44MSwtMS4yMywxLjU5LC0xLjMyXSxbJ2wnLDAuMjQsLTAuMDNdLFsnbCcsLTAuMDksLTAuMTJdLFsnYycsLTAuNTEsLTAuNjYsLTEuNjIsLTAuNjMsLTIuMzEsMC4wM10sWydjJywtMC4zOSwwLjQyLC0wLjMwLDAuMDksLTEuMjMsNC43N10sWydsJywtMC44MSw0LjE0XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMTIsLTAuMDMsLTAuMjEsLTAuMDldLFsnYycsLTAuMzMsLTAuMTUsLTAuNTQsLTAuMTgsLTAuOTksLTAuMThdLFsnYycsLTAuNDIsMC4wMCwtMC42NiwwLjAzLC0xLjA1LDAuMThdLFsnYycsLTAuMTIsMC4wNiwtMC4yMSwwLjA5LC0wLjIxLDAuMDldLFsnYycsMC4wMCwtMC4wMywwLjM2LC0xLjg2LDAuODEsLTQuMTFdLFsnYycsMC45MCwtNC40NywwLjg3LC00LjI2LDAuNjksLTQuNTNdLFsnYycsLTAuMjEsLTAuMzYsLTAuNjYsLTAuNTEsLTEuMTcsLTAuMzZdLFsnYycsLTAuMTUsMC4wNiwtMi4yMiwxLjE0LC0yLjU4LDEuMzhdLFsnYycsLTAuMTIsMC4wOSwtMC4xMiwwLjA5LC0wLjIxLDAuNjBdLFsnbCcsLTAuMDksMC41MV0sWydsJywwLjIxLDAuMjRdLFsnYycsMC42MywwLjc1LDEuMDIsMS40NywxLjIwLDIuMTldLFsnYycsMC4wNiwwLjI3LDAuMDYsMC4zNiwwLjA2LDAuODFdLFsnYycsMC4wMCwwLjQyLDAuMDAsMC41NCwtMC4wNiwwLjc4XSxbJ2MnLC0wLjE1LDAuNTQsLTAuMzMsMC45MywtMC42MywxLjM1XSxbJ2MnLC0wLjE4LDAuMjQsLTAuNTcsMC42MywtMC44MSwwLjc4XSxbJ2MnLC0wLjI0LDAuMTUsLTAuNjMsMC4zNiwtMC44NCwwLjQyXSxbJ2MnLC0wLjI3LDAuMDYsLTAuNjYsMC4wNiwtMC44NywwLjAzXSxbJ2MnLC0wLjgxLC0wLjE4LC0xLjMyLC0xLjA1LC0xLjM4LC0yLjQ2XSxbJ2MnLC0wLjAzLC0wLjYwLDAuMDMsLTAuOTksMC4zMywtMi40Nl0sWydjJywwLjIxLC0xLjA4LDAuMjQsLTEuMzIsMC4yMSwtMS4yOV0sWydjJywtMS4yMCwwLjQ4LC0yLjQwLDAuNzUsLTMuMjEsMC43Ml0sWydjJywtMC42OSwtMC4wNiwtMS4xNywtMC4zMCwtMS40MSwtMC43Ml0sWydjJywtMC4zOSwtMC43NSwtMC4xMiwtMS44MCwwLjY2LC0yLjQ2XSxbJ2MnLDAuMjQsLTAuMTgsMC42OSwtMC40MiwxLjAyLC0wLjUxXSxbJ2MnLDAuNjksLTAuMTgsMS41MywtMC4xNSwyLjMxLDAuMDldLFsnYycsMC4zMCwwLjA5LDAuNzUsMC4zMCwwLjk5LDAuNDVdLFsnYycsMC4xMiwwLjA5LDAuMTUsMC4wOSwwLjE1LDAuMDNdLFsnYycsMC4wMywtMC4wMywwLjMzLC0xLjU5LDAuNzIsLTMuNDVdLFsnYycsMC4zNiwtMS44NiwwLjY2LC0zLjQyLDAuNjksLTMuNDVdLFsnYycsMC4wMCwtMC4wMywwLjAzLC0wLjAzLDAuMjEsMC4wM10sWydjJywwLjIxLDAuMDYsMC4yNywwLjA2LDAuNDgsMC4wNl0sWydjJywwLjQyLC0wLjAzLDAuNzgsLTAuMTgsMS4yNiwtMC40OF0sWydjJywwLjE1LC0wLjEyLDAuMzYsLTAuMjcsMC40OCwtMC4zOV0sWyd6J10sWydtJywtNS43Myw3LjY4XSxbJ2MnLC0wLjI3LC0wLjAzLC0wLjk2LC0wLjA2LC0xLjIwLC0wLjAzXSxbJ2MnLC0wLjgxLDAuMTIsLTEuMzUsMC41NywtMS41MCwxLjIwXSxbJ2MnLC0wLjE4LDAuNjYsMC4xMiwxLjE0LDAuNzUsMS4yOV0sWydjJywwLjY2LDAuMTIsMS45MiwtMC4xMiwzLjE4LC0wLjY2XSxbJ2wnLDAuMzMsLTAuMTVdLFsnbCcsMC4wOSwtMC4zOV0sWydjJywwLjA2LC0wLjIxLDAuMDksLTAuNDIsMC4wOSwtMC40NV0sWydjJywwLjAwLC0wLjAzLC0wLjQ1LC0wLjMwLC0wLjc1LC0wLjQ1XSxbJ2MnLC0wLjI3LC0wLjE1LC0wLjY2LC0wLjI3LC0wLjk5LC0wLjM2XSxbJ3onXSxbJ20nLDQuMjksMy42M10sWydjJywtMC4yNCwtMC4zOSwtMC41MSwtMC43NSwtMC41MSwtMC42OV0sWydjJywtMC4wNiwwLjEyLC0wLjM5LDEuOTIsLTAuNDUsMi4yOF0sWydjJywtMC4wOSwwLjU0LC0wLjEyLDEuMTQsLTAuMDYsMS4zOF0sWydjJywwLjA2LDAuNDIsMC4yMSwwLjYwLDAuNTEsMC41N10sWydjJywwLjM5LC0wLjA2LDAuNzUsLTAuNDgsMC45MywtMS4xNF0sWydjJywwLjA5LC0wLjMzLDAuMDksLTEuMDUsMC4wMCwtMS4zOF0sWydjJywtMC4wOSwtMC4zOSwtMC4yNCwtMC42OSwtMC40MiwtMS4wMl0sWyd6J11dLHc6MTcuOTYzLGg6MTYuNDl9LFxuXHRcdCdzY3JpcHRzLnNlZ25vJzp7ZDpbWydNJywtMy43MiwtMTEuMjJdLFsnYycsMC43OCwtMC4wOSwxLjU5LDAuMDMsMi4zMSwwLjQyXSxbJ2MnLDEuMjAsMC42MCwyLjAxLDEuNzEsMi4zMSwzLjA5XSxbJ2MnLDAuMDksMC40MiwwLjA5LDEuMjAsMC4wMywxLjUwXSxbJ2MnLC0wLjE1LDAuNDUsLTAuMzksMC44MSwtMC42NiwwLjkzXSxbJ2MnLC0wLjMzLDAuMTgsLTAuODQsMC4yMSwtMS4yMywwLjE1XSxbJ2MnLC0wLjgxLC0wLjE4LC0xLjMyLC0wLjkzLC0xLjI2LC0xLjg5XSxbJ2MnLDAuMDMsLTAuMzYsMC4wOSwtMC41NywwLjI0LC0wLjkwXSxbJ2MnLDAuMTUsLTAuMzMsMC40NSwtMC42MCwwLjcyLC0wLjc1XSxbJ2MnLDAuMTIsLTAuMDYsMC4xOCwtMC4wOSwwLjE4LC0wLjEyXSxbJ2MnLDAuMDAsLTAuMDMsLTAuMDMsLTAuMTUsLTAuMDksLTAuMjRdLFsnYycsLTAuMTgsLTAuNDUsLTAuNTQsLTAuODcsLTAuOTYsLTEuMDhdLFsnYycsLTEuMTEsLTAuNTcsLTIuMzQsLTAuMTgsLTIuODgsMC45MF0sWydjJywtMC4yNCwwLjUxLC0wLjMzLDEuMTEsLTAuMjQsMS44M10sWydjJywwLjI3LDEuOTIsMS41MCwzLjU0LDMuOTMsNS4xM10sWydjJywwLjQ4LDAuMzMsMS4yNiwwLjc4LDEuMjksMC43OF0sWydjJywwLjAzLDAuMDAsMS4zNSwtMi4xOSwyLjk0LC00Ljg5XSxbJ2wnLDIuODgsLTQuODldLFsnbCcsMC44NCwwLjAwXSxbJ2wnLDAuODcsMC4wMF0sWydsJywtMC4wMywwLjA2XSxbJ2MnLC0wLjE1LDAuMjEsLTYuMTUsMTAuNDEsLTYuMTUsMTAuNDRdLFsnYycsMC4wMCwwLjAwLDAuMjEsMC4xNSwwLjQ4LDAuMjddLFsnYycsMi42MSwxLjQ3LDQuMzUsMy4wMyw1LjEzLDQuNjVdLFsnYycsMS4xNCwyLjM0LDAuNTEsNS4wNywtMS40NCw2LjM5XSxbJ2MnLC0wLjY2LDAuNDIsLTEuMzIsMC42MywtMi4xMywwLjY5XSxbJ2MnLC0yLjAxLDAuMDksLTMuODEsLTEuNDEsLTQuMjYsLTMuNTRdLFsnYycsLTAuMDksLTAuNDIsLTAuMDksLTEuMjAsLTAuMDMsLTEuNTBdLFsnYycsMC4xNSwtMC40NSwwLjM5LC0wLjgxLDAuNjYsLTAuOTNdLFsnYycsMC4zMywtMC4xOCwwLjg0LC0wLjIxLDEuMjMsLTAuMTVdLFsnYycsMC44MSwwLjE4LDEuMzIsMC45MywxLjI2LDEuODldLFsnYycsLTAuMDMsMC4zNiwtMC4wOSwwLjU3LC0wLjI0LDAuOTBdLFsnYycsLTAuMTUsMC4zMywtMC40NSwwLjYwLC0wLjcyLDAuNzVdLFsnYycsLTAuMTIsMC4wNiwtMC4xOCwwLjA5LC0wLjE4LDAuMTJdLFsnYycsMC4wMCwwLjAzLDAuMDMsMC4xNSwwLjA5LDAuMjRdLFsnYycsMC4xOCwwLjQ1LDAuNTQsMC44NywwLjk2LDEuMDhdLFsnYycsMS4xMSwwLjU3LDIuMzQsMC4xOCwyLjg4LC0wLjkwXSxbJ2MnLDAuMjQsLTAuNTEsMC4zMywtMS4xMSwwLjI0LC0xLjgzXSxbJ2MnLC0wLjI3LC0xLjkyLC0xLjUwLC0zLjU0LC0zLjkzLC01LjEzXSxbJ2MnLC0wLjQ4LC0wLjMzLC0xLjI2LC0wLjc4LC0xLjI5LC0wLjc4XSxbJ2MnLC0wLjAzLDAuMDAsLTEuMzUsMi4xOSwtMi45MSw0Ljg5XSxbJ2wnLC0yLjg4LDQuODldLFsnbCcsLTAuODcsMC4wMF0sWydsJywtMC44NywwLjAwXSxbJ2wnLDAuMDMsLTAuMDZdLFsnYycsMC4xNSwtMC4yMSw2LjE1LC0xMC40MSw2LjE1LC0xMC40NF0sWydjJywwLjAwLDAuMDAsLTAuMjEsLTAuMTUsLTAuNDgsLTAuMzBdLFsnYycsLTIuNjEsLTEuNDQsLTQuMzUsLTMuMDAsLTUuMTMsLTQuNjJdLFsnYycsLTAuOTAsLTEuODksLTAuNzIsLTQuMDIsMC40OCwtNS41Ml0sWydjJywwLjY5LC0wLjg0LDEuNjgsLTEuNDEsMi43MywtMS41M10sWyd6J10sWydtJyw4Ljc2LDkuMDldLFsnYycsMC4wMywtMC4wMywwLjE1LC0wLjAzLDAuMjcsLTAuMDNdLFsnYycsMC4zMywwLjAzLDAuNTcsMC4xOCwwLjcyLDAuNDhdLFsnYycsMC4wOSwwLjE4LDAuMDksMC41NywwLjAwLDAuNzVdLFsnYycsLTAuMDksMC4xOCwtMC4yMSwwLjMwLC0wLjM2LDAuMzldLFsnYycsLTAuMTUsMC4wNiwtMC4yMSwwLjA2LC0wLjM5LDAuMDZdLFsnYycsLTAuMjEsMC4wMCwtMC4yNywwLjAwLC0wLjM5LC0wLjA2XSxbJ2MnLC0wLjMwLC0wLjE1LC0wLjQ4LC0wLjQ1LC0wLjQ4LC0wLjc1XSxbJ2MnLDAuMDAsLTAuMzksMC4yNCwtMC43MiwwLjYzLC0wLjg0XSxbJ3onXSxbJ20nLC0xMC41MywyLjYxXSxbJ2MnLDAuMDMsLTAuMDMsMC4xNSwtMC4wMywwLjI3LC0wLjAzXSxbJ2MnLDAuMzMsMC4wMywwLjU3LDAuMTgsMC43MiwwLjQ4XSxbJ2MnLDAuMDksMC4xOCwwLjA5LDAuNTcsMC4wMCwwLjc1XSxbJ2MnLC0wLjA5LDAuMTgsLTAuMjEsMC4zMCwtMC4zNiwwLjM5XSxbJ2MnLC0wLjE1LDAuMDYsLTAuMjEsMC4wNiwtMC4zOSwwLjA2XSxbJ2MnLC0wLjIxLDAuMDAsLTAuMjcsMC4wMCwtMC4zOSwtMC4wNl0sWydjJywtMC4zMCwtMC4xNSwtMC40OCwtMC40NSwtMC40OCwtMC43NV0sWydjJywwLjAwLC0wLjM5LDAuMjQsLTAuNzIsMC42MywtMC44NF0sWyd6J11dLHc6MTUsaDoyMi41MDR9LFxuXHRcdCdzY3JpcHRzLmNvZGEnOntkOltbJ00nLC0wLjIxLC0xMC40N10sWydjJywwLjE4LC0wLjEyLDAuNDIsLTAuMDYsMC41NCwwLjEyXSxbJ2MnLDAuMDYsMC4wOSwwLjA2LDAuMTgsMC4wNiwxLjUwXSxbJ2wnLDAuMDAsMS4zOF0sWydsJywwLjE4LDAuMDBdLFsnYycsMC4zOSwwLjA2LDAuOTYsMC4yNCwxLjM4LDAuNDhdLFsnYycsMS42OCwwLjkzLDIuODIsMy4yNCwzLjAzLDYuMTJdLFsnYycsMC4wMywwLjI0LDAuMDMsMC40NSwwLjAzLDAuNDVdLFsnYycsMC4wMCwwLjAzLDAuNjAsMC4wMywxLjM1LDAuMDNdLFsnYycsMS41MCwwLjAwLDEuNDcsMC4wMCwxLjU5LDAuMThdLFsnYycsMC4wOSwwLjEyLDAuMDksMC4zMCwwLjAwLDAuNDJdLFsnYycsLTAuMTIsMC4xOCwtMC4wOSwwLjE4LC0xLjU5LDAuMThdLFsnYycsLTAuNzUsMC4wMCwtMS4zNSwwLjAwLC0xLjM1LDAuMDNdLFsnYycsMC4wMCwwLjAwLDAuMDAsMC4yMSwtMC4wMywwLjQyXSxbJ2MnLC0wLjI0LDMuMTUsLTEuNTMsNS41OCwtMy40NSw2LjM2XSxbJ2MnLC0wLjI3LDAuMTIsLTAuNzIsMC4yNCwtMC45NiwwLjI3XSxbJ2wnLC0wLjE4LDAuMDBdLFsnbCcsMC4wMCwxLjM4XSxbJ2MnLDAuMDAsMS4zMiwwLjAwLDEuNDEsLTAuMDYsMS41MF0sWydjJywtMC4xNSwwLjI0LC0wLjUxLDAuMjQsLTAuNjYsMC4wMF0sWydjJywtMC4wNiwtMC4wOSwtMC4wNiwtMC4xOCwtMC4wNiwtMS41MF0sWydsJywwLjAwLC0xLjM4XSxbJ2wnLC0wLjE4LDAuMDBdLFsnYycsLTAuMzksLTAuMDYsLTAuOTYsLTAuMjQsLTEuMzgsLTAuNDhdLFsnYycsLTEuNjgsLTAuOTMsLTIuODIsLTMuMjQsLTMuMDMsLTYuMTVdLFsnYycsLTAuMDMsLTAuMjEsLTAuMDMsLTAuNDIsLTAuMDMsLTAuNDJdLFsnYycsMC4wMCwtMC4wMywtMC42MCwtMC4wMywtMS4zNSwtMC4wM10sWydjJywtMS41MCwwLjAwLC0xLjQ3LDAuMDAsLTEuNTksLTAuMThdLFsnYycsLTAuMDksLTAuMTIsLTAuMDksLTAuMzAsMC4wMCwtMC40Ml0sWydjJywwLjEyLC0wLjE4LDAuMDksLTAuMTgsMS41OSwtMC4xOF0sWydjJywwLjc1LDAuMDAsMS4zNSwwLjAwLDEuMzUsLTAuMDNdLFsnYycsMC4wMCwwLjAwLDAuMDAsLTAuMjEsMC4wMywtMC40NV0sWydjJywwLjI0LC0zLjEyLDEuNTMsLTUuNTUsMy40NSwtNi4zM10sWydjJywwLjI3LC0wLjEyLDAuNzIsLTAuMjQsMC45NiwtMC4yN10sWydsJywwLjE4LDAuMDBdLFsnbCcsMC4wMCwtMS4zOF0sWydjJywwLjAwLC0xLjUzLDAuMDAsLTEuNTAsMC4xOCwtMS42Ml0sWyd6J10sWydtJywtMC4xOCw2LjkzXSxbJ2MnLDAuMDAsLTIuOTcsMC4wMCwtMy4xNSwtMC4wNiwtMy4xNV0sWydjJywtMC4wOSwwLjAwLC0wLjUxLDAuMTUsLTAuNjYsMC4yMV0sWydjJywtMC44NywwLjUxLC0xLjM4LDEuNjIsLTEuNTYsMy41MV0sWydjJywtMC4wNiwwLjU0LC0wLjEyLDEuNTksLTAuMTIsMi4xNl0sWydsJywwLjAwLDAuNDJdLFsnbCcsMS4yMCwwLjAwXSxbJ2wnLDEuMjAsMC4wMF0sWydsJywwLjAwLC0zLjE1XSxbJ3onXSxbJ20nLDEuMTcsLTMuMDZdLFsnYycsLTAuMDksLTAuMDMsLTAuMjEsLTAuMDYsLTAuMjcsLTAuMDldLFsnbCcsLTAuMTIsMC4wMF0sWydsJywwLjAwLDMuMTVdLFsnbCcsMC4wMCwzLjE1XSxbJ2wnLDEuMjAsMC4wMF0sWydsJywxLjIwLDAuMDBdLFsnbCcsMC4wMCwtMC44MV0sWydjJywtMC4wNiwtMi40MCwtMC4zMywtMy42OSwtMC45MywtNC41OV0sWydjJywtMC4yNywtMC4zOSwtMC42NiwtMC42OSwtMS4wOCwtMC44MV0sWyd6J10sWydtJywtMS4xNywxMC4xNF0sWydsJywwLjAwLC0zLjE1XSxbJ2wnLC0xLjIwLDAuMDBdLFsnbCcsLTEuMjAsMC4wMF0sWydsJywwLjAwLDAuODFdLFsnYycsMC4wMywwLjk2LDAuMDYsMS40NywwLjE1LDIuMTNdLFsnYycsMC4yNCwyLjA0LDAuOTYsMy4xMiwyLjEzLDMuMzZdLFsnbCcsMC4xMiwwLjAwXSxbJ2wnLDAuMDAsLTMuMTVdLFsneiddLFsnbScsMy4xOCwtMi4zNF0sWydsJywwLjAwLC0wLjgxXSxbJ2wnLC0xLjIwLDAuMDBdLFsnbCcsLTEuMjAsMC4wMF0sWydsJywwLjAwLDMuMTVdLFsnbCcsMC4wMCwzLjE1XSxbJ2wnLDAuMTIsMC4wMF0sWydjJywxLjE3LC0wLjI0LDEuODksLTEuMzIsMi4xMywtMy4zNl0sWydjJywwLjA5LC0wLjY2LDAuMTIsLTEuMTcsMC4xNSwtMi4xM10sWyd6J11dLHc6MTYuMDM1LGg6MjEuMDYyfSxcblx0XHQnc2NyaXB0cy5jb21tYSc6e2Q6W1snTScsMS4xNCwtNC42Ml0sWydjJywwLjMwLC0wLjEyLDAuNjksLTAuMDMsMC45MywwLjE1XSxbJ2MnLDAuMTIsMC4xMiwwLjM2LDAuNDUsMC41MSwwLjc4XSxbJ2MnLDAuOTAsMS43NywwLjU0LDQuMDUsLTEuMDgsNi43NV0sWydjJywtMC4zNiwwLjYzLC0wLjg3LDEuMzgsLTAuOTYsMS40NF0sWydjJywtMC4xOCwwLjEyLC0wLjQyLDAuMDYsLTAuNTQsLTAuMTJdLFsnYycsLTAuMDksLTAuMTgsLTAuMDksLTAuMzAsMC4xMiwtMC42MF0sWydjJywwLjk2LC0xLjQ0LDEuNDQsLTIuOTcsMS4zOCwtNC4zNV0sWydjJywtMC4wNiwtMC45MywtMC4zMCwtMS42OCwtMC43OCwtMi40Nl0sWydjJywtMC4yNywtMC4zOSwtMC4zMywtMC42MywtMC4yNCwtMC45Nl0sWydjJywwLjA5LC0wLjI3LDAuMzYsLTAuNTQsMC42NiwtMC42M10sWyd6J11dLHc6My4wNDIsaDo5LjIzN30sXG5cdFx0J3NjcmlwdHMucm9sbCc6e2Q6W1snTScsMS45NSwtNi4wMF0sWydjJywwLjIxLC0wLjA5LDAuMzYsLTAuMDksMC41NywwLjAwXSxbJ2MnLDAuMzksMC4xNSwwLjYzLDAuMzksMS40NywxLjM1XSxbJ2MnLDAuNjYsMC43NSwwLjc4LDAuODcsMS4wOCwxLjA1XSxbJ2MnLDAuNzUsMC40NSwxLjY1LDAuNDIsMi40MCwtMC4wNl0sWydjJywwLjEyLC0wLjA5LDAuMjcsLTAuMjcsMC41NCwtMC42MF0sWydjJywwLjQyLC0wLjU0LDAuNTEsLTAuNjMsMC42OSwtMC42M10sWydjJywwLjA5LDAuMDAsMC4zMCwwLjEyLDAuMzYsMC4yMV0sWydjJywwLjA5LDAuMTIsMC4xMiwwLjMwLDAuMDMsMC40Ml0sWydjJywtMC4wNiwwLjEyLC0zLjE1LDMuOTAsLTMuMzAsNC4wOF0sWydjJywtMC4wNiwwLjA2LC0wLjE4LDAuMTIsLTAuMjcsMC4xOF0sWydjJywtMC4yNywwLjEyLC0wLjYwLDAuMDYsLTAuOTksLTAuMjddLFsnYycsLTAuMjcsLTAuMjEsLTAuNDIsLTAuMzksLTEuMDgsLTEuMTRdLFsnYycsLTAuNjMsLTAuNzIsLTAuODEsLTAuOTAsLTEuMTcsLTEuMDhdLFsnYycsLTAuMzYsLTAuMTgsLTAuNTcsLTAuMjEsLTAuOTksLTAuMjFdLFsnYycsLTAuMzksMC4wMCwtMC42MywwLjAzLC0wLjkzLDAuMThdLFsnYycsLTAuMzYsMC4xNSwtMC41MSwwLjI3LC0wLjkwLDAuODFdLFsnYycsLTAuMjQsMC4yNywtMC40NSwwLjUxLC0wLjQ4LDAuNTRdLFsnYycsLTAuMTIsMC4wOSwtMC4yNywwLjA2LC0wLjM5LDAuMDBdLFsnYycsLTAuMjQsLTAuMTUsLTAuMzMsLTAuMzksLTAuMjEsLTAuNjBdLFsnYycsMC4wOSwtMC4xMiwzLjE4LC0zLjg3LDMuMzMsLTQuMDJdLFsnYycsMC4wNiwtMC4wNiwwLjE4LC0wLjE1LDAuMjQsLTAuMjFdLFsneiddXSx3OjEwLjgxNyxoOjYuMTI1fSxcblx0XHQnc2NyaXB0cy5wcmFsbCc6e2Q6W1snTScsLTQuMzgsLTMuNjldLFsnYycsMC4wNiwtMC4wMywwLjE4LC0wLjA2LDAuMjQsLTAuMDZdLFsnYycsMC4zMCwwLjAwLDAuMjcsLTAuMDMsMS44OSwxLjk1XSxbJ2wnLDEuNTMsMS44M10sWydjJywwLjAzLDAuMDAsMC41NywtMC44NCwxLjIzLC0xLjgzXSxbJ2MnLDEuMTQsLTEuNjgsMS4yMywtMS44MywxLjM1LC0xLjg5XSxbJ2MnLDAuMDYsLTAuMDMsMC4xOCwtMC4wNiwwLjI0LC0wLjA2XSxbJ2MnLDAuMzAsMC4wMCwwLjI3LC0wLjAzLDEuODksMS45NV0sWydsJywxLjUzLDEuODNdLFsnbCcsMC40OCwtMC42OV0sWydjJywwLjUxLC0wLjc4LDAuNTQsLTAuODQsMC42OSwtMC45MF0sWydjJywwLjQyLC0wLjE4LDAuODcsMC4xNSwwLjgxLDAuNjBdLFsnYycsLTAuMDMsMC4xMiwtMC4zMCwwLjUxLC0xLjUwLDIuMzddLFsnYycsLTEuMzgsMi4wNywtMS41MCwyLjIyLC0xLjYyLDIuMjhdLFsnYycsLTAuMDYsMC4wMywtMC4xOCwwLjA2LC0wLjI0LDAuMDZdLFsnYycsLTAuMzAsMC4wMCwtMC4yNywwLjAzLC0xLjg5LC0xLjk1XSxbJ2wnLC0xLjUzLC0xLjgzXSxbJ2MnLC0wLjAzLDAuMDAsLTAuNTcsMC44NCwtMS4yMywxLjgzXSxbJ2MnLC0xLjE0LDEuNjgsLTEuMjMsMS44MywtMS4zNSwxLjg5XSxbJ2MnLC0wLjA2LDAuMDMsLTAuMTgsMC4wNiwtMC4yNCwwLjA2XSxbJ2MnLC0wLjMwLDAuMDAsLTAuMjcsMC4wMywtMS44OSwtMS45NV0sWydsJywtMS41MywtMS44M10sWydsJywtMC40OCwwLjY5XSxbJ2MnLC0wLjUxLDAuNzgsLTAuNTQsMC44NCwtMC42OSwwLjkwXSxbJ2MnLC0wLjQyLDAuMTgsLTAuODcsLTAuMTUsLTAuODEsLTAuNjBdLFsnYycsMC4wMywtMC4xMiwwLjMwLC0wLjUxLDEuNTAsLTIuMzddLFsnYycsMS4zOCwtMi4wNywxLjUwLC0yLjIyLDEuNjIsLTIuMjhdLFsneiddXSx3OjE1LjAxMSxoOjcuNX0sXG5cdFx0J3NjcmlwdHMuYXJwZWdnaW8nOntkOltbJ00nLDEuNSwwXSxbJ2MnLDEuNSwyLDEuNSwzLDEuNSwzXSxbJ3MnLDAsMSwtMiwxLjVdLFsncycsLTAuNSwzLDEsNS41XSxbJ2wnLDEuNSwwXSxbJ3MnLC0xLjc1LC0yLC0xLjksLTMuMjVdLFsncycsMi4xNSwtMC42LDIuOTUsLTEuNl0sWydzJywwLjQ1LC0xLDAuNSwtMS4yNV0sWydzJywwLC0xLC0yLC0zLjldLFsnbCcsLTEuNSwwXSxbJ3onXV0sdzo1LGg6MTB9LFxuXHRcdCdzY3JpcHRzLm1vcmRlbnQnOntkOltbJ00nLC0wLjIxLC00Ljk1XSxbJ2MnLDAuMjcsLTAuMTUsMC42MywwLjAwLDAuNzUsMC4yN10sWydjJywwLjA2LDAuMTIsMC4wNiwwLjI0LDAuMDYsMS40NF0sWydsJywwLjAwLDEuMjldLFsnbCcsMC41NywtMC44NF0sWydjJywwLjUxLC0wLjc1LDAuNTcsLTAuODQsMC42OSwtMC45MF0sWydjJywwLjA2LC0wLjAzLDAuMTgsLTAuMDYsMC4yNCwtMC4wNl0sWydjJywwLjMwLDAuMDAsMC4yNywtMC4wMywxLjg5LDEuOTVdLFsnbCcsMS41MywxLjgzXSxbJ2wnLDAuNDgsLTAuNjldLFsnYycsMC41MSwtMC43OCwwLjU0LC0wLjg0LDAuNjksLTAuOTBdLFsnYycsMC40MiwtMC4xOCwwLjg3LDAuMTUsMC44MSwwLjYwXSxbJ2MnLC0wLjAzLDAuMTIsLTAuMzAsMC41MSwtMS41MCwyLjM3XSxbJ2MnLC0xLjM4LDIuMDcsLTEuNTAsMi4yMiwtMS42MiwyLjI4XSxbJ2MnLC0wLjA2LDAuMDMsLTAuMTgsMC4wNiwtMC4yNCwwLjA2XSxbJ2MnLC0wLjMwLDAuMDAsLTAuMjcsMC4wMywtMS44MywtMS44OV0sWydjJywtMC44MSwtMC45OSwtMS41MCwtMS44MCwtMS41MywtMS44Nl0sWydjJywtMC4wNiwtMC4wMywtMC4wNiwtMC4wMywtMC4xMiwwLjAzXSxbJ2MnLC0wLjA2LDAuMDYsLTAuMDYsMC4xNSwtMC4wNiwyLjI4XSxbJ2MnLDAuMDAsMS45NSwwLjAwLDIuMjUsLTAuMDYsMi4zNF0sWydjJywtMC4xOCwwLjQ1LC0wLjgxLDAuNDgsLTEuMDUsMC4wM10sWydjJywtMC4wMywtMC4wNiwtMC4wNiwtMC4yNCwtMC4wNiwtMS40MV0sWydsJywwLjAwLC0xLjM1XSxbJ2wnLC0wLjU3LDAuODRdLFsnYycsLTAuNTQsMC43OCwtMC42MCwwLjg3LC0wLjcyLDAuOTNdLFsnYycsLTAuMDYsMC4wMywtMC4xOCwwLjA2LC0wLjI0LDAuMDZdLFsnYycsLTAuMzAsMC4wMCwtMC4yNywwLjAzLC0xLjg5LC0xLjk1XSxbJ2wnLC0xLjUzLC0xLjgzXSxbJ2wnLC0wLjQ4LDAuNjldLFsnYycsLTAuNTEsMC43OCwtMC41NCwwLjg0LC0wLjY5LDAuOTBdLFsnYycsLTAuNDIsMC4xOCwtMC44NywtMC4xNSwtMC44MSwtMC42MF0sWydjJywwLjAzLC0wLjEyLDAuMzAsLTAuNTEsMS41MCwtMi4zN10sWydjJywxLjM4LC0yLjA3LDEuNTAsLTIuMjIsMS42MiwtMi4yOF0sWydjJywwLjA2LC0wLjAzLDAuMTgsLTAuMDYsMC4yNCwtMC4wNl0sWydjJywwLjMwLDAuMDAsMC4yNywtMC4wMywxLjg5LDEuOTVdLFsnbCcsMS41MywxLjgzXSxbJ2MnLDAuMDMsMC4wMCwwLjA2LC0wLjA2LDAuMDksLTAuMDldLFsnYycsMC4wNiwtMC4xMiwwLjA2LC0wLjE1LDAuMDYsLTIuMjhdLFsnYycsMC4wMCwtMS45MiwwLjAwLC0yLjIyLDAuMDYsLTIuMzFdLFsnYycsMC4wNiwtMC4xNSwwLjE1LC0wLjI0LDAuMzAsLTAuMzBdLFsneiddXSx3OjE1LjAxMSxoOjEwLjAxMn0sXG5cdFx0J2ZsYWdzLnU4dGgnOntkOltbJ00nLC0wLjQyLDMuNzVdLFsnbCcsMC4wMCwtMy43NV0sWydsJywwLjIxLDAuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMDAsMC4xOF0sWydjJywwLjAwLDAuMzAsMC4wNiwwLjg0LDAuMTIsMS4yM10sWydjJywwLjI0LDEuNTMsMC45MCwzLjEyLDIuMTMsNS4xNl0sWydsJywwLjk5LDEuNTldLFsnYycsMC44NywxLjQ0LDEuMzgsMi4zNCwxLjc3LDMuMDldLFsnYycsMC44MSwxLjY4LDEuMjAsMy4wNiwxLjI2LDQuNTNdLFsnYycsMC4wMywxLjUzLC0wLjIxLDMuMjcsLTAuNzUsNS4wMV0sWydjJywtMC4yMSwwLjY5LC0wLjUxLDEuNTAsLTAuNjAsMS41OV0sWydjJywtMC4wOSwwLjEyLC0wLjI3LDAuMjEsLTAuNDIsMC4yMV0sWydjJywtMC4xNSwwLjAwLC0wLjQyLC0wLjEyLC0wLjUxLC0wLjIxXSxbJ2MnLC0wLjE1LC0wLjE4LC0wLjE4LC0wLjQyLC0wLjA5LC0wLjY2XSxbJ2MnLDAuMTUsLTAuMzMsMC40NSwtMS4yMCwwLjU3LC0xLjYyXSxbJ2MnLDAuNDIsLTEuMzgsMC42MCwtMi41OCwwLjYwLC0zLjkwXSxbJ2MnLDAuMDAsLTAuNjYsMC4wMCwtMC44MSwtMC4wNiwtMS4xMV0sWydjJywtMC4zOSwtMi4wNywtMS44MCwtNC4yNiwtNC41OSwtNy4xNF0sWydsJywtMC40MiwtMC40NV0sWydsJywtMC4yMSwwLjAwXSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsMC4wMCwtMy43NV0sWyd6J11dLHc6Ni42OTIsaDoyMi41OX0sXG5cdFx0J2ZsYWdzLnUxNnRoJzp7ZDpbWydNJywtMC40Miw3LjUwXSxbJ2wnLDAuMDAsLTcuNTBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMjEsMC4wMF0sWydsJywwLjAwLDAuMzldLFsnYycsMC4wNiwxLjA4LDAuMzksMi4xOSwwLjk5LDMuMzldLFsnYycsMC40NSwwLjkwLDAuODcsMS41OSwxLjk1LDMuMTJdLFsnYycsMS4yOSwxLjg2LDEuNzcsMi42NCwyLjIyLDMuNTddLFsnYycsMC40NSwwLjkzLDAuNzIsMS44MCwwLjg3LDIuNjRdLFsnYycsMC4wNiwwLjUxLDAuMDYsMS41MCwwLjAwLDEuOTJdLFsnYycsLTAuMTIsMC42MCwtMC4zMCwxLjIwLC0wLjU0LDEuNzFdLFsnbCcsLTAuMDksMC4yNF0sWydsJywwLjE4LDAuNDVdLFsnYycsMC41MSwxLjIwLDAuNzIsMi4yMiwwLjY5LDMuNDJdLFsnYycsLTAuMDYsMS41MywtMC4zOSwzLjAzLC0wLjk5LDQuNTNdLFsnYycsLTAuMzAsMC43NSwtMC4zNiwwLjgxLC0wLjU3LDAuOTBdLFsnYycsLTAuMTUsMC4wOSwtMC4zMywwLjA2LC0wLjQ4LDAuMDBdLFsnYycsLTAuMTgsLTAuMDksLTAuMjcsLTAuMTgsLTAuMzMsLTAuMzNdLFsnYycsLTAuMDksLTAuMTgsLTAuMDYsLTAuMzAsMC4xMiwtMC43NV0sWydjJywwLjY2LC0xLjQxLDEuMDIsLTIuODgsMS4wOCwtNC4zMl0sWydjJywwLjAwLC0wLjYwLC0wLjAzLC0xLjA1LC0wLjE4LC0xLjU5XSxbJ2MnLC0wLjMwLC0xLjIwLC0wLjk5LC0yLjQwLC0yLjI1LC0zLjg3XSxbJ2MnLC0wLjQyLC0wLjQ4LC0xLjUzLC0xLjYyLC0yLjE5LC0yLjIyXSxbJ2wnLC0wLjQ1LC0wLjQyXSxbJ2wnLC0wLjAzLDEuMTFdLFsnbCcsMC4wMCwxLjExXSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywwLjAwLC03LjUwXSxbJ3onXSxbJ20nLDEuNjUsMC4wOV0sWydjJywtMC4zMCwtMC4zMCwtMC42OSwtMC43MiwtMC45MCwtMC44N10sWydsJywtMC4zMywtMC4zM10sWydsJywwLjAwLDAuMTVdLFsnYycsMC4wMCwwLjMwLDAuMDYsMC44MSwwLjE1LDEuMjZdLFsnYycsMC4yNywxLjI5LDAuODcsMi42MSwyLjA0LDQuMjldLFsnYycsMC4xNSwwLjI0LDAuNjAsMC44NywwLjk2LDEuMzhdLFsnbCcsMS4wOCwxLjUzXSxbJ2wnLDAuNDIsMC42M10sWydjJywwLjAzLDAuMDAsMC4xMiwtMC4zNiwwLjIxLC0wLjcyXSxbJ2MnLDAuMDYsLTAuMzMsMC4wNiwtMS4yMCwwLjAwLC0xLjYyXSxbJ2MnLC0wLjMzLC0xLjcxLC0xLjQ0LC0zLjQ4LC0zLjYzLC01LjcwXSxbJ3onXV0sdzo2LjY5MyxoOjI2LjMzN30sXG5cdFx0J2ZsYWdzLnUzMm5kJzp7ZDpbWydNJywtMC40MiwxMS4yNV0sWydsJywwLjAwLC0xMS4yNV0sWydsJywwLjIxLDAuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMDAsMC4zNl0sWydjJywwLjA5LDEuNjgsMC42OSwzLjI3LDIuMDcsNS40Nl0sWydsJywwLjg3LDEuMzVdLFsnYycsMS4wMiwxLjYyLDEuNDcsMi4zNywxLjg2LDMuMThdLFsnYycsMC40OCwxLjAyLDAuNzgsMS45MiwwLjkzLDIuODhdLFsnYycsMC4wNiwwLjQ4LDAuMDYsMS41MCwwLjAwLDEuODldLFsnYycsLTAuMDksMC40MiwtMC4yMSwwLjg3LC0wLjM2LDEuMjZdLFsnbCcsLTAuMTIsMC4zMF0sWydsJywwLjE1LDAuMzldLFsnYycsMC42OSwxLjU2LDAuODQsMi44OCwwLjU0LDQuMzhdLFsnYycsLTAuMDksMC40NSwtMC4yNywxLjA4LC0wLjQ1LDEuNDddLFsnbCcsLTAuMTIsMC4yNF0sWydsJywwLjE4LDAuMzZdLFsnYycsMC4zMywwLjcyLDAuNTcsMS41NiwwLjY5LDIuMzRdLFsnYycsMC4xMiwxLjAyLC0wLjA2LDIuNTIsLTAuNDIsMy44NF0sWydjJywtMC4yNywwLjkzLC0wLjc1LDIuMTMsLTAuOTMsMi4zMV0sWydjJywtMC4xOCwwLjE1LC0wLjQ1LDAuMTgsLTAuNjYsMC4wOV0sWydjJywtMC4xOCwtMC4wOSwtMC4yNywtMC4xOCwtMC4zMywtMC4zM10sWydjJywtMC4wOSwtMC4xOCwtMC4wNiwtMC4zMCwwLjA2LC0wLjYwXSxbJ2MnLDAuMjEsLTAuMzYsMC40MiwtMC45MCwwLjU3LC0xLjM4XSxbJ2MnLDAuNTEsLTEuNDEsMC42OSwtMy4wNiwwLjQ4LC00LjA4XSxbJ2MnLC0wLjE1LC0wLjgxLC0wLjU3LC0xLjY4LC0xLjIwLC0yLjU1XSxbJ2MnLC0wLjcyLC0wLjk5LC0xLjgzLC0yLjEzLC0zLjMwLC0zLjMzXSxbJ2wnLC0wLjQ4LC0wLjQyXSxbJ2wnLC0wLjAzLDEuNTNdLFsnbCcsMC4wMCwxLjU2XSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywwLjAwLC0xMS4yNV0sWyd6J10sWydtJywxLjI2LC0zLjk2XSxbJ2MnLC0wLjI3LC0wLjMwLC0wLjU0LC0wLjYwLC0wLjY2LC0wLjcyXSxbJ2wnLC0wLjE4LC0wLjIxXSxbJ2wnLDAuMDAsMC40Ml0sWydjJywwLjA2LDAuODcsMC4yNCwxLjc0LDAuNjYsMi42N10sWydjJywwLjM2LDAuODcsMC45NiwxLjg2LDEuOTIsMy4xOF0sWydjJywwLjIxLDAuMzMsMC42MywwLjg3LDAuODcsMS4yM10sWydjJywwLjI3LDAuMzksMC42MCwwLjg0LDAuNzUsMS4wOF0sWydsJywwLjI3LDAuMzldLFsnbCcsMC4wMywtMC4xMl0sWydjJywwLjEyLC0wLjQ1LDAuMTUsLTEuMDUsMC4wOSwtMS41OV0sWydjJywtMC4yNywtMS44NiwtMS4zOCwtMy43OCwtMy43NSwtNi4zM10sWyd6J10sWydtJywtMC4yNyw2LjA5XSxbJ2MnLC0wLjI3LC0wLjIxLC0wLjQ4LC0wLjQyLC0wLjUxLC0wLjQ1XSxbJ2MnLC0wLjA2LC0wLjAzLC0wLjA2LC0wLjAzLC0wLjA2LDAuMjFdLFsnYycsMC4wMCwwLjkwLDAuMzAsMi4wNCwwLjgxLDMuMDldLFsnYycsMC40OCwxLjAyLDAuOTYsMS43NywyLjM3LDMuNjNdLFsnYycsMC42MCwwLjc4LDEuMDUsMS40NCwxLjI5LDEuNzddLFsnYycsMC4wNiwwLjEyLDAuMTUsMC4yMSwwLjE1LDAuMThdLFsnYycsMC4wMywtMC4wMywwLjE4LC0wLjU3LDAuMjQsLTAuODddLFsnYycsMC4wNiwtMC40NSwwLjA2LC0xLjMyLC0wLjAzLC0xLjc0XSxbJ2MnLC0wLjA5LC0wLjQ4LC0wLjI0LC0wLjkwLC0wLjUxLC0xLjQ0XSxbJ2MnLC0wLjY2LC0xLjM1LC0xLjgzLC0yLjcwLC0zLjc1LC00LjM4XSxbJ3onXV0sdzo2LjY5NyxoOjMyLjE0NX0sXG5cdFx0J2ZsYWdzLnU2NHRoJzp7ZDpbWydNJywtMC40MiwxNS4wMF0sWydsJywwLjAwLC0xNS4wMF0sWydsJywwLjIxLDAuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMDAsMC4zNl0sWydjJywwLjA2LDEuMjAsMC4zOSwyLjM3LDEuMDIsMy42Nl0sWydjJywwLjM5LDAuODEsMC44NCwxLjU2LDEuODAsMy4wOV0sWydjJywwLjgxLDEuMjYsMS4wNSwxLjY4LDEuMzUsMi4yMl0sWydjJywwLjg3LDEuNTAsMS4zNSwyLjc5LDEuNTYsNC4wOF0sWydjJywwLjA2LDAuNTQsMC4wNiwxLjU2LC0wLjAzLDIuMDRdLFsnYycsLTAuMDksMC40OCwtMC4yMSwwLjk5LC0wLjM2LDEuMzVdLFsnbCcsLTAuMTIsMC4yN10sWydsJywwLjEyLDAuMjddLFsnYycsMC4wOSwwLjE1LDAuMjEsMC40NSwwLjI3LDAuNjZdLFsnYycsMC42OSwxLjg5LDAuNjMsMy42NiwtMC4xOCw1LjQ2XSxbJ2wnLC0wLjE4LDAuMzldLFsnbCcsMC4xNSwwLjMzXSxbJ2MnLDAuMzAsMC42NiwwLjUxLDEuNDQsMC42MywyLjEwXSxbJ2MnLDAuMDYsMC40OCwwLjA2LDEuMzUsMC4wMCwxLjcxXSxbJ2MnLC0wLjE1LDAuNTcsLTAuNDIsMS4yMCwtMC43OCwxLjY4XSxbJ2wnLC0wLjIxLDAuMjddLFsnbCcsMC4xOCwwLjMzXSxbJ2MnLDAuNTcsMS4wNSwwLjkzLDIuMTMsMS4wMiwzLjE4XSxbJ2MnLDAuMDYsMC43MiwwLjAwLDEuODMsLTAuMjEsMi43OV0sWydjJywtMC4xOCwxLjAyLC0wLjYzLDIuMzQsLTEuMDIsMy4wOV0sWydjJywtMC4xNSwwLjMzLC0wLjQ4LDAuNDUsLTAuNzgsMC4zMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNywtMC4xOCwtMC4zMywtMC4zM10sWydjJywtMC4wOSwtMC4xOCwtMC4wNiwtMC4zMCwwLjAzLC0wLjU0XSxbJ2MnLDAuNzUsLTEuNTAsMS4yMywtMy40NSwxLjE3LC00Ljg5XSxbJ2MnLC0wLjA2LC0xLjAyLC0wLjQyLC0yLjAxLC0xLjE3LC0zLjE1XSxbJ2MnLC0wLjQ4LC0wLjcyLC0xLjAyLC0xLjM1LC0xLjg5LC0yLjIyXSxbJ2MnLC0wLjU3LC0wLjU3LC0xLjU2LC0xLjUwLC0xLjkyLC0xLjc3XSxbJ2wnLC0wLjEyLC0wLjA5XSxbJ2wnLDAuMDAsMS42OF0sWydsJywwLjAwLDEuNjhdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywtMC4yMSwwLjAwXSxbJ2wnLDAuMDAsLTE1LjAwXSxbJ3onXSxbJ20nLDAuOTMsLTguMDddLFsnYycsLTAuMjcsLTAuMzAsLTAuNDgsLTAuNTQsLTAuNTEsLTAuNTRdLFsnYycsMC4wMCwwLjAwLDAuMDAsMC42OSwwLjAzLDEuMDJdLFsnYycsMC4xNSwxLjQ3LDAuNzUsMi45NCwyLjA0LDQuODNdLFsnbCcsMS4wOCwxLjUzXSxbJ2MnLDAuMzksMC41NywwLjg0LDEuMjAsMC45OSwxLjQ0XSxbJ2MnLDAuMTUsMC4yNCwwLjMwLDAuNDUsMC4zMCwwLjQ1XSxbJ2MnLDAuMDAsMC4wMCwwLjAzLC0wLjA5LDAuMDYsLTAuMjFdLFsnYycsMC4zNiwtMS41OSwtMC4xNSwtMy4zMywtMS40NywtNS40MF0sWydjJywtMC42MywtMC45MywtMS4zNSwtMS44MywtMi41MiwtMy4xMl0sWyd6J10sWydtJywwLjA2LDYuNzJdLFsnYycsLTAuMjQsLTAuMjEsLTAuNDgsLTAuNDIsLTAuNTEsLTAuNDVdLFsnbCcsLTAuMDYsLTAuMDZdLFsnbCcsMC4wMCwwLjMzXSxbJ2MnLDAuMDAsMS4yMCwwLjMwLDIuMzQsMC45MywzLjYwXSxbJ2MnLDAuNDUsMC45MCwwLjk2LDEuNjgsMi4yNSwzLjUxXSxbJ2MnLDAuMzksMC41NCwwLjg0LDEuMTcsMS4wMiwxLjQ0XSxbJ2MnLDAuMjEsMC4zMywwLjMzLDAuNTEsMC4zMywwLjQ4XSxbJ2MnLDAuMDYsLTAuMDksMC4yMSwtMC42MywwLjMwLC0wLjk5XSxbJ2MnLDAuMDYsLTAuMzMsMC4wNiwtMC40NSwwLjA2LC0wLjk2XSxbJ2MnLDAuMDAsLTAuNjAsLTAuMDMsLTAuODQsLTAuMTgsLTEuMzVdLFsnYycsLTAuMzAsLTEuMDgsLTEuMDIsLTIuMjgsLTIuMTMsLTMuNTddLFsnYycsLTAuMzksLTAuNDUsLTEuNDQsLTEuNDcsLTIuMDEsLTEuOThdLFsneiddLFsnbScsMC4wMCw2LjcyXSxbJ2MnLC0wLjI0LC0wLjIxLC0wLjQ4LC0wLjM5LC0wLjUxLC0wLjQyXSxbJ2wnLC0wLjA2LC0wLjA2XSxbJ2wnLDAuMDAsMC4zM10sWydjJywwLjAwLDEuNDEsMC40NSwyLjgyLDEuMzgsNC4zNV0sWydjJywwLjQyLDAuNzIsMC43MiwxLjE0LDEuODYsMi43M10sWydjJywwLjM2LDAuNDUsMC43NSwwLjk5LDAuODcsMS4yMF0sWydjJywwLjE1LDAuMjEsMC4zMCwwLjM2LDAuMzAsMC4zNl0sWydjJywwLjA2LDAuMDAsMC4zMCwtMC40OCwwLjM5LC0wLjc1XSxbJ2MnLDAuMDksLTAuMzYsMC4xMiwtMC42MywwLjEyLC0xLjA1XSxbJ2MnLC0wLjA2LC0xLjA1LC0wLjQ1LC0yLjA0LC0xLjIwLC0zLjE4XSxbJ2MnLC0wLjU3LC0wLjg3LC0xLjExLC0xLjUzLC0yLjA3LC0yLjQ5XSxbJ2MnLC0wLjM2LC0wLjMzLC0wLjg0LC0wLjc4LC0xLjA4LC0xLjAyXSxbJ3onXV0sdzo2LjY4MixoOjM5LjY5NH0sXG5cdFx0J2ZsYWdzLmQ4dGgnOntkOltbJ00nLDUuNjcsLTIxLjYzXSxbJ2MnLDAuMjQsLTAuMTIsMC41NCwtMC4wNiwwLjY5LDAuMTVdLFsnYycsMC4wNiwwLjA2LDAuMjEsMC4zNiwwLjM5LDAuNjZdLFsnYycsMC44NCwxLjc3LDEuMjYsMy4zNiwxLjMyLDUuMTBdLFsnYycsMC4wMywxLjI5LC0wLjIxLDIuMzcsLTAuODEsMy42M10sWydjJywtMC42MCwxLjIzLC0xLjI2LDIuMTMsLTMuMjEsNC4zOF0sWydjJywtMS4zNSwxLjUzLC0xLjg2LDIuMTksLTIuNDAsMi45N10sWydjJywtMC42MywwLjkzLC0xLjExLDEuOTIsLTEuMzgsMi43OV0sWydjJywtMC4xNSwwLjU0LC0wLjI3LDEuMzUsLTAuMjcsMS44MF0sWydsJywwLjAwLDAuMTVdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywtMC4yMSwwLjAwXSxbJ2wnLDAuMDAsLTMuNzVdLFsnbCcsMC4wMCwtMy43NV0sWydsJywwLjIxLDAuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuNDgsLTAuMzBdLFsnYycsMS44MywtMS4xMSwzLjEyLC0yLjEwLDQuMTcsLTMuMTJdLFsnYycsMC43OCwtMC44MSwxLjMyLC0xLjUzLDEuNzEsLTIuMzFdLFsnYycsMC40NSwtMC45MywwLjYwLC0xLjc0LDAuNTEsLTIuODhdLFsnYycsLTAuMTIsLTEuNTYsLTAuNjMsLTMuMTgsLTEuNDcsLTQuNjhdLFsnYycsLTAuMTIsLTAuMjEsLTAuMTUsLTAuMzMsLTAuMDYsLTAuNTFdLFsnYycsMC4wNiwtMC4xNSwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsneiddXSx3OjguNDkyLGg6MjEuNjkxfSxcblx0XHQnZmxhZ3MudWdyYWNlJzp7ZDpbWydNJyw2LjAzLDYuOTNdLFsnYycsMC4xNSwtMC4wOSwwLjMzLC0wLjA2LDAuNTEsMC4wMF0sWydjJywwLjE1LDAuMDksMC4yMSwwLjE1LDAuMzAsMC4zM10sWydjJywwLjA5LDAuMTgsMC4wNiwwLjM5LC0wLjAzLDAuNTRdLFsnYycsLTAuMDYsMC4xNSwtMTAuODksOC44OCwtMTEuMDcsOC45N10sWydjJywtMC4xNSwwLjA5LC0wLjMzLDAuMDYsLTAuNDgsMC4wMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNCwtMC4xNSwtMC4zMywtMC4zM10sWydjJywtMC4wOSwtMC4xOCwtMC4wNiwtMC4zOSwwLjAzLC0wLjU0XSxbJ2MnLDAuMDYsLTAuMTUsMTAuODksLTguODgsMTEuMDcsLTguOTddLFsneiddXSx3OjEyLjAxOSxoOjkuOTU0fSxcblx0XHQnZmxhZ3MuZGdyYWNlJzp7ZDpbWydNJywtNi4wNiwtMTUuOTNdLFsnYycsMC4xOCwtMC4wOSwwLjMzLC0wLjEyLDAuNDgsLTAuMDZdLFsnYycsMC4xOCwwLjA5LDE0LjAxLDguMDQsMTQuMTAsOC4xMF0sWydjJywwLjEyLDAuMTIsMC4xOCwwLjMzLDAuMTgsMC41MV0sWydjJywtMC4wMywwLjIxLC0wLjE1LDAuMzksLTAuMzYsMC40OF0sWydjJywtMC4xOCwwLjA5LC0wLjMzLDAuMTIsLTAuNDgsMC4wNl0sWydjJywtMC4xOCwtMC4wOSwtMTQuMDEsLTguMDQsLTE0LjEwLC04LjEwXSxbJ2MnLC0wLjEyLC0wLjEyLC0wLjE4LC0wLjMzLC0wLjE4LC0wLjUxXSxbJ2MnLDAuMDMsLTAuMjEsMC4xNSwtMC4zOSwwLjM2LC0wLjQ4XSxbJ3onXV0sdzoxNS4xMixoOjkuMjEyfSxcblx0XHQnZmxhZ3MuZDE2dGgnOntkOltbJ00nLDYuODQsLTIyLjUzXSxbJ2MnLDAuMjcsLTAuMTIsMC41NywtMC4wNiwwLjcyLDAuMTVdLFsnYycsMC4xNSwwLjE1LDAuMzMsMC44NywwLjQ1LDEuNTZdLFsnYycsMC4wNiwwLjMzLDAuMDYsMS4zNSwwLjAwLDEuNjVdLFsnYycsLTAuMDYsMC4zMywtMC4xNSwwLjc4LC0wLjI3LDEuMTFdLFsnYycsLTAuMTIsMC4zMywtMC40NSwwLjk2LC0wLjY2LDEuMzJdLFsnbCcsLTAuMTgsMC4yN10sWydsJywwLjA5LDAuMThdLFsnYycsMC40OCwxLjAyLDAuNzIsMi4yNSwwLjY5LDMuMzBdLFsnYycsLTAuMDYsMS4yMywtMC40MiwyLjI4LC0xLjI2LDMuNDVdLFsnYycsLTAuNTcsMC44NywtMC45OSwxLjMyLC0zLjAwLDMuMzldLFsnYycsLTEuNTYsMS41NiwtMi4yMiwyLjQwLC0yLjc2LDMuNDVdLFsnYycsLTAuNDIsMC44NCwtMC42NiwxLjgwLC0wLjY2LDIuNTVdLFsnbCcsMC4wMCwwLjE1XSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywwLjAwLC03LjUwXSxbJ2wnLDAuMDAsLTcuNTBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMjEsMC4wMF0sWydsJywwLjAwLDEuMTRdLFsnbCcsMC4wMCwxLjExXSxbJ2wnLDAuMjcsLTAuMTVdLFsnYycsMS4xMSwtMC41NywxLjc3LC0wLjk5LDIuNTIsLTEuNDddLFsnYycsMi4zNywtMS41NiwzLjY5LC0zLjE1LDQuMDUsLTQuODNdLFsnYycsMC4wMywtMC4xOCwwLjAzLC0wLjM5LDAuMDMsLTAuNzhdLFsnYycsMC4wMCwtMC42MCwtMC4wMywtMC45MywtMC4yNCwtMS41MF0sWydjJywtMC4wNiwtMC4xOCwtMC4xMiwtMC4zOSwtMC4xNSwtMC40NV0sWydjJywtMC4wMywtMC4yNCwwLjEyLC0wLjQ4LDAuMzYsLTAuNjBdLFsneiddLFsnbScsLTAuNjMsNy41MF0sWydjJywtMC4wNiwtMC4xOCwtMC4xNSwtMC4zNiwtMC4xNSwtMC4zNl0sWydjJywtMC4wMywwLjAwLC0wLjAzLDAuMDMsLTAuMDYsMC4wNl0sWydjJywtMC4wNiwwLjEyLC0wLjk2LDEuMDIsLTEuOTUsMS45OF0sWydjJywtMC42MywwLjU3LC0xLjI2LDEuMTcsLTEuNDQsMS4zNV0sWydjJywtMS41MywxLjYyLC0yLjI4LDIuODUsLTIuNTUsNC4zMl0sWydjJywtMC4wMywwLjE4LC0wLjAzLDAuNTQsLTAuMDYsMC45OV0sWydsJywwLjAwLDAuNjldLFsnbCcsMC4xOCwtMC4wOV0sWydjJywwLjkzLC0wLjU0LDIuMTAsLTEuMjksMi44MiwtMS44M10sWydjJywwLjY5LC0wLjUxLDEuMDIsLTAuODEsMS41MywtMS4yOV0sWydjJywxLjg2LC0xLjg5LDIuMzcsLTMuNjYsMS42OCwtNS44Ml0sWyd6J11dLHc6OC40NzUsaDoyMi41OTF9LFxuXHRcdCdmbGFncy5kMzJuZCc6e2Q6W1snTScsNi44NCwtMjkuMTNdLFsnYycsMC4yNywtMC4xMiwwLjU3LC0wLjA2LDAuNzIsMC4xNV0sWydjJywwLjEyLDAuMTIsMC4yNywwLjYzLDAuMzYsMS4xMV0sWydjJywwLjMzLDEuNTksMC4wNiwzLjA2LC0wLjgxLDQuNDddLFsnbCcsLTAuMTgsMC4yN10sWydsJywwLjA5LDAuMTVdLFsnYycsMC4xMiwwLjI0LDAuMzMsMC42OSwwLjQ1LDEuMDVdLFsnYycsMC42MywxLjgzLDAuNDUsMy41NywtMC41Nyw1LjIyXSxbJ2wnLC0wLjE4LDAuMzBdLFsnbCcsMC4xNSwwLjI3XSxbJ2MnLDAuNDIsMC44NywwLjYwLDEuNzEsMC41NywyLjYxXSxbJ2MnLC0wLjA2LDEuMjksLTAuNDgsMi40NiwtMS4zNSwzLjc4XSxbJ2MnLC0wLjU0LDAuODEsLTAuOTMsMS4yOSwtMi40NiwzLjAwXSxbJ2MnLC0wLjUxLDAuNTQsLTEuMDUsMS4xNywtMS4yNiwxLjQxXSxbJ2MnLC0xLjU2LDEuODYsLTIuMjUsMy4zNiwtMi4zNyw1LjAxXSxbJ2wnLDAuMDAsMC4zM10sWydsJywtMC4yMSwwLjAwXSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsMC4wMCwtMTEuMjVdLFsnbCcsMC4wMCwtMTEuMjVdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMjEsMC4wMF0sWydsJywwLjAwLDEuMzVdLFsnbCcsMC4wMywxLjM1XSxbJ2wnLDAuNzgsLTAuMzldLFsnYycsMS4zOCwtMC42OSwyLjM0LC0xLjI2LDMuMjQsLTEuOTJdLFsnYycsMS4zOCwtMS4wMiwyLjI4LC0yLjEzLDIuNjQsLTMuMjFdLFsnYycsMC4xNSwtMC40OCwwLjE4LC0wLjcyLDAuMTgsLTEuMjldLFsnYycsMC4wMCwtMC41NywtMC4wNiwtMC45MCwtMC4yNCwtMS40N10sWydjJywtMC4wNiwtMC4xOCwtMC4xMiwtMC4zOSwtMC4xNSwtMC40NV0sWydjJywtMC4wMywtMC4yNCwwLjEyLC0wLjQ4LDAuMzYsLTAuNjBdLFsneiddLFsnbScsLTAuNjMsNy4yMF0sWydjJywtMC4wOSwtMC4xOCwtMC4xMiwtMC4yMSwtMC4xMiwtMC4xNV0sWydjJywtMC4wMywwLjA5LC0xLjAyLDEuMDgsLTIuMDQsMi4wNF0sWydjJywtMS4xNywxLjA4LC0xLjY1LDEuNTYsLTIuMDcsMi4wNF0sWydjJywtMC44NCwwLjk2LC0xLjM4LDEuODYsLTEuNjgsMi43Nl0sWydjJywtMC4yMSwwLjU3LC0wLjI3LDAuOTksLTAuMzAsMS42NV0sWydsJywwLjAwLDAuNTRdLFsnbCcsMC42NiwtMC4zM10sWydjJywzLjU3LC0xLjg2LDUuNDksLTMuNjksNS45NCwtNS43MF0sWydjJywwLjA2LC0wLjM5LDAuMDYsLTEuMjAsLTAuMDMsLTEuNjVdLFsnYycsLTAuMDYsLTAuMzksLTAuMjQsLTAuOTAsLTAuMzYsLTEuMjBdLFsneiddLFsnbScsLTAuMDYsNy4yMF0sWydjJywtMC4wNiwtMC4xNSwtMC4xMiwtMC4zMywtMC4xNSwtMC40NV0sWydsJywtMC4wNiwtMC4xOF0sWydsJywtMC4xOCwwLjIxXSxbJ2wnLC0xLjgzLDEuODNdLFsnYycsLTAuODcsMC45MCwtMS43NywxLjgwLC0xLjk1LDIuMDFdLFsnYycsLTEuMDgsMS4yOSwtMS42MiwyLjMxLC0xLjg5LDMuNTFdLFsnYycsLTAuMDYsMC4zMCwtMC4wNiwwLjUxLC0wLjA5LDAuOTNdLFsnbCcsMC4wMCwwLjU3XSxbJ2wnLDAuMDksLTAuMDZdLFsnYycsMC43NSwtMC40NSwxLjg5LC0xLjI2LDIuNTIsLTEuNzRdLFsnYycsMC44MSwtMC42NiwxLjc0LC0xLjUzLDIuMjIsLTIuMTZdLFsnYycsMS4yNiwtMS41MywxLjY4LC0zLjA2LDEuMzIsLTQuNDddLFsneiddXSx3OjguMzg1LGg6MjkuMTkxfSxcblx0XHQnZmxhZ3MuZDY0dGgnOntkOltbJ00nLDcuMDgsLTMyLjg4XSxbJ2MnLDAuMzAsLTAuMTIsMC42NiwtMC4wMywwLjc4LDAuMjRdLFsnYycsMC4xOCwwLjMzLDAuMjcsMi4xMCwwLjE1LDIuNjRdLFsnYycsLTAuMDksMC4zOSwtMC4yMSwwLjc4LC0wLjM5LDEuMDhdLFsnbCcsLTAuMTUsMC4zMF0sWydsJywwLjA5LDAuMjddLFsnYycsMC4wMywwLjEyLDAuMDksMC40NSwwLjEyLDAuNjldLFsnYycsMC4yNywxLjQ0LDAuMTgsMi41NSwtMC4zMCwzLjYwXSxbJ2wnLC0wLjEyLDAuMzNdLFsnbCcsMC4wNiwwLjQyXSxbJ2MnLDAuMjcsMS4zNSwwLjMzLDIuODIsMC4yMSwzLjYzXSxbJ2MnLC0wLjEyLDAuNjAsLTAuMzAsMS4yMywtMC41NywxLjgwXSxbJ2wnLC0wLjE1LDAuMjddLFsnbCcsMC4wMywwLjQyXSxbJ2MnLDAuMDYsMS4wMiwwLjA2LDIuNzAsMC4wMywzLjA2XSxbJ2MnLC0wLjE1LDEuNDcsLTAuNjYsMi43NiwtMS43NCw0LjQxXSxbJ2MnLC0wLjQ1LDAuNjksLTAuNzUsMS4xMSwtMS43NCwyLjM3XSxbJ2MnLC0xLjA1LDEuMzgsLTEuNTAsMS45OCwtMS45NSwyLjczXSxbJ2MnLC0wLjkzLDEuNTAsLTEuMzgsMi44MiwtMS40NCw0LjIwXSxbJ2wnLDAuMDAsMC40Ml0sWydsJywtMC4yMSwwLjAwXSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsMC4wMCwtMTUuMDBdLFsnbCcsMC4wMCwtMTUuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMjEsMC4wMF0sWydsJywwLjAwLDEuODZdLFsnbCcsMC4wMCwxLjg5XSxbJ2MnLDAuMDAsMC4wMCwwLjIxLC0wLjAzLDAuNDUsLTAuMDldLFsnYycsMi4yMiwtMC4zOSw0LjA4LC0xLjExLDUuMTksLTIuMDFdLFsnYycsMC42MywtMC41NCwxLjAyLC0xLjE0LDEuMjAsLTEuODBdLFsnYycsMC4wNiwtMC4zMCwwLjA2LC0xLjE0LC0wLjAzLC0xLjY1XSxbJ2MnLC0wLjAzLC0wLjE4LC0wLjA2LC0wLjM5LC0wLjA5LC0wLjQ4XSxbJ2MnLC0wLjAzLC0wLjI0LDAuMTIsLTAuNDgsMC4zNiwtMC42MF0sWyd6J10sWydtJywtMC40NSw2LjE1XSxbJ2MnLC0wLjAzLC0wLjE4LC0wLjA2LC0wLjQyLC0wLjA2LC0wLjU0XSxbJ2wnLC0wLjAzLC0wLjE4XSxbJ2wnLC0wLjMzLDAuMzBdLFsnYycsLTAuNDIsMC4zNiwtMC44NywwLjcyLC0xLjY4LDEuMjldLFsnYycsLTEuOTgsMS4zOCwtMi4yNSwxLjU5LC0yLjg1LDIuMTZdLFsnYycsLTAuNzUsMC42OSwtMS4yMywxLjQ0LC0xLjQ3LDIuMTldLFsnYycsLTAuMTUsMC40NSwtMC4xOCwwLjYzLC0wLjIxLDEuMzVdLFsnbCcsMC4wMCwwLjY2XSxbJ2wnLDAuMzksLTAuMThdLFsnYycsMS44MywtMC45MCwzLjQ1LC0xLjk1LDQuNDcsLTIuOTFdLFsnYycsMC45MywtMC45MCwxLjUzLC0xLjgzLDEuNzQsLTIuODJdLFsnYycsMC4wNiwtMC4zMywwLjA2LC0wLjg3LDAuMDMsLTEuMzJdLFsneiddLFsnbScsLTAuMjcsNC44Nl0sWydjJywtMC4wMywtMC4yMSwtMC4wNiwtMC4zNiwtMC4wNiwtMC4zNl0sWydjJywwLjAwLC0wLjAzLC0wLjEyLDAuMDksLTAuMjQsMC4yNF0sWydjJywtMC4zOSwwLjQ4LC0wLjk5LDEuMDgsLTIuMTYsMi4xOV0sWydjJywtMS40NywxLjM4LC0xLjkyLDEuODMsLTIuNDYsMi40OV0sWydjJywtMC42NiwwLjg3LC0xLjA4LDEuNzQsLTEuMjksMi41OF0sWydjJywtMC4wOSwwLjQyLC0wLjE1LDAuODcsLTAuMTUsMS40NF0sWydsJywwLjAwLDAuNTRdLFsnbCcsMC40OCwtMC4zM10sWydjJywxLjUwLC0xLjAyLDIuNTgsLTEuODksMy41MSwtMi44Ml0sWydjJywxLjQ3LC0xLjQ3LDIuMjUsLTIuODUsMi40MCwtNC4yNl0sWydjJywwLjAzLC0wLjM5LDAuMDMsLTEuMTcsLTAuMDMsLTEuNzFdLFsneiddLFsnbScsLTAuNjYsNy42OF0sWydjJywwLjAzLC0wLjE1LDAuMDMsLTAuNjAsMC4wMywtMC45OV0sWydsJywwLjAwLC0wLjcyXSxbJ2wnLC0wLjI3LDAuMzNdLFsnbCcsLTEuNzQsMS45OF0sWydjJywtMS43NywxLjkyLC0yLjQzLDIuNzYsLTIuOTcsMy45MF0sWydjJywtMC41MSwxLjAyLC0wLjcyLDEuNzcsLTAuNzUsMi45MV0sWydjJywwLjAwLDAuNjMsMC4wMCwwLjYzLDAuMDYsMC42MF0sWydjJywwLjAzLC0wLjAzLDAuMzAsLTAuMjcsMC42MywtMC41NF0sWydjJywwLjY2LC0wLjYwLDEuODYsLTEuODAsMi4zMSwtMi4zMV0sWydjJywxLjY1LC0xLjg5LDIuNTIsLTMuNTQsMi43MCwtNS4xNl0sWyd6J11dLHc6OC40ODUsaDozMi45MzJ9LFxuXHRcdCdjbGVmcy5DJzp7ZDpbWydNJywwLjA2LC0xNC45NF0sWydsJywwLjA5LC0wLjA2XSxbJ2wnLDEuOTIsMC4wMF0sWydsJywxLjkyLDAuMDBdLFsnbCcsMC4wOSwwLjA2XSxbJ2wnLDAuMDYsMC4wOV0sWydsJywwLjAwLDE0Ljg1XSxbJ2wnLDAuMDAsMTQuODJdLFsnbCcsLTAuMDYsMC4wOV0sWydsJywtMC4wOSwwLjA2XSxbJ2wnLC0xLjkyLDAuMDBdLFsnbCcsLTEuOTIsMC4wMF0sWydsJywtMC4wOSwtMC4wNl0sWydsJywtMC4wNiwtMC4wOV0sWydsJywwLjAwLC0xNC44Ml0sWydsJywwLjAwLC0xNC44NV0sWyd6J10sWydtJyw1LjM3LDAuMDBdLFsnYycsMC4wOSwtMC4wNiwwLjA5LC0wLjA2LDAuNTcsLTAuMDZdLFsnYycsMC40NSwwLjAwLDAuNDUsMC4wMCwwLjU0LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsNy4xNF0sWydsJywwLjAwLDcuMTFdLFsnbCcsMC4wOSwtMC4wNl0sWydjJywwLjE4LC0wLjE4LDAuNzIsLTAuODQsMC45NiwtMS4yMF0sWydjJywwLjMwLC0wLjQ1LDAuNjYsLTEuMTcsMC44NCwtMS42NV0sWydjJywwLjM2LC0wLjkwLDAuNTcsLTEuODMsMC42MCwtMi43OV0sWydjJywwLjAzLC0wLjQ4LDAuMDMsLTAuNTQsMC4wOSwtMC42M10sWydjJywwLjEyLC0wLjE4LDAuMzYsLTAuMjEsMC41NCwtMC4xMl0sWydjJywwLjE4LDAuMDksMC4yMSwwLjE1LDAuMjQsMC42Nl0sWydjJywwLjA2LDAuODcsMC4yMSwxLjU2LDAuNTcsMi4yMl0sWydjJywwLjUxLDEuMDIsMS4yNiwxLjY4LDIuMjIsMS45Ml0sWydjJywwLjIxLDAuMDYsMC4zMywwLjA2LDAuNzgsMC4wNl0sWydjJywwLjQ1LDAuMDAsMC41NywwLjAwLDAuODQsLTAuMDZdLFsnYycsMC40NSwtMC4xMiwwLjgxLC0wLjMzLDEuMDgsLTAuNjBdLFsnYycsMC41NywtMC41NywwLjg3LC0xLjQxLDAuOTksLTIuODhdLFsnYycsMC4wNiwtMC41NCwwLjA2LC0zLjAwLDAuMDAsLTMuNTddLFsnYycsLTAuMjEsLTIuNTgsLTAuODQsLTMuODcsLTIuMTYsLTQuNTBdLFsnYycsLTAuNDgsLTAuMjEsLTEuMTcsLTAuMzYsLTEuNzcsLTAuMzZdLFsnYycsLTAuNjksMC4wMCwtMS4yOSwwLjI3LC0xLjUwLDAuNzJdLFsnYycsLTAuMDYsMC4xNSwtMC4wNiwwLjIxLC0wLjA2LDAuNDJdLFsnYycsMC4wMCwwLjI0LDAuMDAsMC4zMCwwLjA2LDAuNDVdLFsnYycsMC4xMiwwLjI0LDAuMjQsMC4zOSwwLjYzLDAuNjZdLFsnYycsMC40MiwwLjMwLDAuNTcsMC40OCwwLjY5LDAuNzJdLFsnYycsMC4wNiwwLjE1LDAuMDYsMC4yMSwwLjA2LDAuNDhdLFsnYycsMC4wMCwwLjM5LC0wLjAzLDAuNjMsLTAuMjEsMC45Nl0sWydjJywtMC4zMCwwLjYwLC0wLjg3LDEuMDgsLTEuNTAsMS4yNl0sWydjJywtMC4yNywwLjA2LC0wLjg3LDAuMDYsLTEuMTQsMC4wMF0sWydjJywtMC43OCwtMC4yNCwtMS40NCwtMC44NywtMS42NSwtMS42OF0sWydjJywtMC4xMiwtMC40MiwtMC4wOSwtMS4xNywwLjA5LC0xLjcxXSxbJ2MnLDAuNTEsLTEuNjUsMS45OCwtMi44MiwzLjgxLC0zLjA5XSxbJ2MnLDAuODQsLTAuMDksMi40NiwwLjAzLDMuNTEsMC4yN10sWydjJywyLjIyLDAuNTcsMy42OSwxLjgwLDQuNDQsMy43NV0sWydjJywwLjM2LDAuOTMsMC41NywyLjEzLDAuNTcsMy4zNl0sWydjJywwLjAwLDEuNDQsLTAuNDgsMi43MywtMS4zOCwzLjgxXSxbJ2MnLC0xLjI2LDEuNTAsLTMuMjcsMi40MywtNS4yOCwyLjQzXSxbJ2MnLC0wLjQ4LDAuMDAsLTAuNTEsMC4wMCwtMC43NSwtMC4wOV0sWydjJywtMC4xNSwtMC4wMywtMC40OCwtMC4yMSwtMC43OCwtMC4zNl0sWydjJywtMC42OSwtMC4zNiwtMC44NywtMC40MiwtMS4yNiwtMC40Ml0sWydjJywtMC4yNywwLjAwLC0wLjMwLDAuMDAsLTAuNTEsMC4wOV0sWydjJywtMC41NywwLjMwLC0wLjgxLDAuOTAsLTAuODEsMi4xMF0sWydjJywwLjAwLDEuMjMsMC4yNCwxLjgzLDAuODEsMi4xM10sWydjJywwLjIxLDAuMDksMC4yNCwwLjA5LDAuNTEsMC4wOV0sWydjJywwLjM5LDAuMDAsMC41NywtMC4wNiwxLjI2LC0wLjQyXSxbJ2MnLDAuMzAsLTAuMTUsMC42MywtMC4zMywwLjc4LC0wLjM2XSxbJ2MnLDAuMjQsLTAuMDksMC4yNywtMC4wOSwwLjc1LC0wLjA5XSxbJ2MnLDIuMDEsMC4wMCw0LjAyLDAuOTMsNS4yOCwyLjQwXSxbJ2MnLDAuOTAsMS4xMSwxLjM4LDIuNDAsMS4zOCwzLjg0XSxbJ2MnLDAuMDAsMS41MCwtMC4zMCwyLjg4LC0wLjg0LDMuOTZdLFsnYycsLTAuNzgsMS41OSwtMi4xOSwyLjY0LC00LjE3LDMuMTVdLFsnYycsLTEuMDUsMC4yNCwtMi42NywwLjM2LC0zLjUxLDAuMjddLFsnYycsLTEuODMsLTAuMjcsLTMuMzAsLTEuNDQsLTMuODEsLTMuMDldLFsnYycsLTAuMTgsLTAuNTQsLTAuMjEsLTEuMjksLTAuMDksLTEuNzRdLFsnYycsMC4xNSwtMC42MCwwLjYzLC0xLjIwLDEuMjMsLTEuNDddLFsnYycsMC4zNiwtMC4xOCwwLjU3LC0wLjIxLDAuOTksLTAuMjFdLFsnYycsMC40MiwwLjAwLDAuNjMsMC4wMywxLjAyLDAuMjFdLFsnYycsMC40MiwwLjIxLDAuODQsMC42MywxLjA1LDEuMDVdLFsnYycsMC4xOCwwLjM2LDAuMjEsMC42MCwwLjIxLDAuOTZdLFsnYycsMC4wMCwwLjMwLDAuMDAsMC4zNiwtMC4wNiwwLjUxXSxbJ2MnLC0wLjEyLDAuMjQsLTAuMjcsMC40MiwtMC42OSwwLjcyXSxbJ2MnLC0wLjU3LDAuNDIsLTAuNjksMC42MywtMC42OSwxLjA4XSxbJ2MnLDAuMDAsMC4yNCwwLjAwLDAuMzAsMC4wNiwwLjQ1XSxbJ2MnLDAuMTIsMC4yMSwwLjMwLDAuMzksMC41NywwLjU0XSxbJ2MnLDAuNDIsMC4xOCwwLjg3LDAuMjEsMS41MywwLjE1XSxbJ2MnLDEuMDgsLTAuMTUsMS44MCwtMC41NywyLjM0LC0xLjMyXSxbJ2MnLDAuNTQsLTAuNzUsMC44NCwtMS44MywwLjk5LC0zLjUxXSxbJ2MnLDAuMDYsLTAuNTcsMC4wNiwtMy4wMywwLjAwLC0zLjU3XSxbJ2MnLC0wLjEyLC0xLjQ3LC0wLjQyLC0yLjMxLC0wLjk5LC0yLjg4XSxbJ2MnLC0wLjI3LC0wLjI3LC0wLjYzLC0wLjQ4LC0xLjA4LC0wLjYwXSxbJ2MnLC0wLjI3LC0wLjA2LC0wLjM5LC0wLjA2LC0wLjg0LC0wLjA2XSxbJ2MnLC0wLjQ1LDAuMDAsLTAuNTcsMC4wMCwtMC43OCwwLjA2XSxbJ2MnLC0xLjE0LDAuMjcsLTIuMDEsMS4xNywtMi40NiwyLjQ5XSxbJ2MnLC0wLjIxLDAuNTcsLTAuMzAsMC45OSwtMC4zMywxLjY1XSxbJ2MnLC0wLjAzLDAuNTEsLTAuMDYsMC41NywtMC4yNCwwLjY2XSxbJ2MnLC0wLjEyLDAuMDYsLTAuMjcsMC4wNiwtMC4zOSwwLjAwXSxbJ2MnLC0wLjIxLC0wLjA5LC0wLjIxLC0wLjE1LC0wLjI0LC0wLjc1XSxbJ2MnLC0wLjA5LC0xLjkyLC0wLjc4LC0zLjcyLC0yLjAxLC01LjE5XSxbJ2MnLC0wLjE4LC0wLjIxLC0wLjM2LC0wLjQyLC0wLjM5LC0wLjQ1XSxbJ2wnLC0wLjA5LC0wLjA2XSxbJ2wnLDAuMDAsNy4xMV0sWydsJywwLjAwLDcuMTRdLFsnbCcsLTAuMDYsMC4wOV0sWydjJywtMC4wOSwwLjA2LC0wLjA5LDAuMDYsLTAuNTQsMC4wNl0sWydjJywtMC40OCwwLjAwLC0wLjQ4LDAuMDAsLTAuNTcsLTAuMDZdLFsnbCcsLTAuMDYsLTAuMDldLFsnbCcsMC4wMCwtMTQuODJdLFsnbCcsMC4wMCwtMTQuODVdLFsneiddXSx3OjIwLjMxLGg6MjkuOTd9LFxuXHRcdCdjbGVmcy5GJzp7ZDpbWydNJyw2LjMwLC03LjgwXSxbJ2MnLDAuMzYsLTAuMDMsMS42NSwwLjAwLDIuMTMsMC4wM10sWydjJywzLjYwLDAuNDIsNi4wMywyLjEwLDYuOTMsNC44Nl0sWydjJywwLjI3LDAuODQsMC4zNiwxLjUwLDAuMzYsMi41OF0sWydjJywwLjAwLDAuOTAsLTAuMDMsMS4zNSwtMC4xOCwyLjE2XSxbJ2MnLC0wLjc4LDMuNzgsLTMuNTQsNy4wOCwtOC4zNyw5Ljk2XSxbJ2MnLC0xLjc0LDEuMDUsLTMuODcsMi4xMywtNi4xOCwzLjEyXSxbJ2MnLC0wLjM5LDAuMTgsLTAuNzUsMC4zMywtMC44MSwwLjM2XSxbJ2MnLC0wLjA2LDAuMDMsLTAuMTUsMC4wNiwtMC4xOCwwLjA2XSxbJ2MnLC0wLjE1LDAuMDAsLTAuMzMsLTAuMTgsLTAuMzMsLTAuMzNdLFsnYycsMC4wMCwtMC4xNSwwLjA2LC0wLjIxLDAuNTEsLTAuNDhdLFsnYycsMy4wMCwtMS43Nyw1LjEzLC0zLjIxLDYuODQsLTQuNzRdLFsnYycsMC41MSwtMC40NSwxLjU5LC0xLjUwLDEuOTUsLTEuOTVdLFsnYycsMS44OSwtMi4xOSwyLjg4LC00LjMyLDMuMTUsLTYuNzhdLFsnYycsMC4wNiwtMC40MiwwLjA2LC0xLjc3LDAuMDAsLTIuMTldLFsnYycsLTAuMjQsLTIuMDEsLTAuOTMsLTMuNjMsLTIuMDQsLTQuNzFdLFsnYycsLTAuNjMsLTAuNjMsLTEuMjksLTEuMDIsLTIuMDcsLTEuMjBdLFsnYycsLTEuNjIsLTAuMzksLTMuMzYsMC4xNSwtNC41NiwxLjQ0XSxbJ2MnLC0wLjU0LDAuNjAsLTEuMDUsMS40NywtMS4zMiwyLjIyXSxbJ2wnLC0wLjA5LDAuMjFdLFsnbCcsMC4yNCwtMC4xMl0sWydjJywwLjM5LC0wLjIxLDAuNjMsLTAuMjQsMS4xMSwtMC4yNF0sWydjJywwLjMwLDAuMDAsMC40NSwwLjAwLDAuNjYsMC4wNl0sWydjJywxLjkyLDAuNDgsMi44NSwyLjU1LDEuOTUsNC4zOF0sWydjJywtMC40NSwwLjk5LC0xLjQxLDEuNjIsLTIuNDYsMS43MV0sWydjJywtMS40NywwLjA5LC0yLjkxLC0wLjg3LC0zLjM5LC0yLjI1XSxbJ2MnLC0wLjE4LC0wLjU3LC0wLjIxLC0xLjMyLC0wLjAzLC0yLjI4XSxbJ2MnLDAuMzksLTIuMjUsMS44MywtNC4yMCwzLjgxLC01LjE5XSxbJ2MnLDAuNjksLTAuMzYsMS41OSwtMC42MCwyLjM3LC0wLjY5XSxbJ3onXSxbJ20nLDExLjU4LDIuNTJdLFsnYycsMC44NCwtMC4yMSwxLjcxLDAuMzAsMS44OSwxLjE0XSxbJ2MnLDAuMzAsMS4xNywtMC43MiwyLjE5LC0xLjg5LDEuODldLFsnYycsLTAuOTksLTAuMjEsLTEuNTAsLTEuMzIsLTEuMDIsLTIuMjVdLFsnYycsMC4xOCwtMC4zOSwwLjYwLC0wLjY5LDEuMDIsLTAuNzhdLFsneiddLFsnbScsMC4wMCw3LjUwXSxbJ2MnLDAuODQsLTAuMjEsMS43MSwwLjMwLDEuODksMS4xNF0sWydjJywwLjIxLDAuODcsLTAuMzAsMS43MSwtMS4xNCwxLjg5XSxbJ2MnLC0wLjg3LDAuMjEsLTEuNzEsLTAuMzAsLTEuODksLTEuMTRdLFsnYycsLTAuMjEsLTAuODQsMC4zMCwtMS43MSwxLjE0LC0xLjg5XSxbJ3onXV0sdzoyMC4xNTMsaDoyMy4xNDJ9LFxuXHRcdCdjbGVmcy5HJzp7ZDpbWydNJyw5LjY5LC0zNy40MV0sWydjJywwLjA5LC0wLjA5LDAuMjQsLTAuMDYsMC4zNiwwLjAwXSxbJ2MnLDAuMTIsMC4wOSwwLjU3LDAuNjAsMC45NiwxLjExXSxbJ2MnLDEuNzcsMi4zNCwzLjIxLDUuODUsMy41Nyw4LjczXSxbJ2MnLDAuMjEsMS41NiwwLjAzLDMuMjcsLTAuNDUsNC44Nl0sWydjJywtMC42OSwyLjMxLC0xLjkyLDQuNDcsLTQuMjMsNy40NF0sWydjJywtMC4zMCwwLjM5LC0wLjU3LDAuNzIsLTAuNjAsMC43NV0sWydjJywtMC4wMywwLjA2LDAuMDAsMC4xNSwwLjE4LDAuNzhdLFsnYycsMC41NCwxLjY4LDEuMzgsNC40NCwxLjY4LDUuNDldLFsnbCcsMC4wOSwwLjQyXSxbJ2wnLDAuMzksMC4wMF0sWydjJywxLjQ3LDAuMDksMi43NiwwLjUxLDMuOTYsMS4yOV0sWydjJywxLjgzLDEuMjMsMy4wNiwzLjIxLDMuMzksNS41Ml0sWydjJywwLjA5LDAuNDUsMC4xMiwxLjI5LDAuMDYsMS43NF0sWydjJywtMC4wOSwxLjAyLC0wLjMzLDEuODMsLTAuNzUsMi43M10sWydjJywtMC44NCwxLjcxLC0yLjI4LDMuMDYsLTQuMDIsMy43Ml0sWydsJywtMC4zMywwLjEyXSxbJ2wnLDAuMDMsMS4yNl0sWydjJywwLjAwLDEuNzQsLTAuMDYsMy42MywtMC4yMSw0LjYyXSxbJ2MnLC0wLjQ1LDMuMDYsLTIuMTksNS40OSwtNC40Nyw2LjIxXSxbJ2MnLC0wLjU3LDAuMTgsLTAuOTAsMC4yMSwtMS41OSwwLjIxXSxbJ2MnLC0wLjY5LDAuMDAsLTEuMDIsLTAuMDMsLTEuNjUsLTAuMjFdLFsnYycsLTEuMTQsLTAuMjcsLTIuMTMsLTAuODQsLTIuOTQsLTEuNjVdLFsnYycsLTAuOTksLTAuOTksLTEuNTYsLTIuMTYsLTEuNzEsLTMuNTRdLFsnYycsLTAuMDksLTAuODEsMC4wNiwtMS41MywwLjQ1LC0yLjEzXSxbJ2MnLDAuNjMsLTAuOTksMS44MywtMS41NiwzLjAwLC0xLjUzXSxbJ2MnLDEuNTAsMC4wOSwyLjY0LDEuMzIsMi43MywyLjk0XSxbJ2MnLDAuMDYsMS40NywtMC45MywyLjcwLC0yLjM3LDIuOTddLFsnYycsLTAuNDUsMC4wNiwtMC44NCwwLjAzLC0xLjI5LC0wLjA5XSxbJ2wnLC0wLjIxLC0wLjA5XSxbJ2wnLDAuMDksMC4xMl0sWydjJywwLjM5LDAuNTQsMC43OCwwLjkzLDEuMzIsMS4yNl0sWydjJywxLjM1LDAuODcsMy4wNiwxLjAyLDQuMzUsMC4zNl0sWydjJywxLjQ0LC0wLjcyLDIuNTIsLTIuMjgsMi45NywtNC4zNV0sWydjJywwLjE1LC0wLjY2LDAuMjQsLTEuNTAsMC4zMCwtMy4wM10sWydjJywwLjAzLC0wLjg0LDAuMDMsLTIuOTQsMC4wMCwtMy4wMF0sWydjJywtMC4wMywwLjAwLC0wLjE4LDAuMDAsLTAuMzYsMC4wM10sWydjJywtMC42NiwwLjEyLC0wLjk5LDAuMTIsLTEuODMsMC4xMl0sWydjJywtMS4wNSwwLjAwLC0xLjcxLC0wLjA2LC0yLjYxLC0wLjMwXSxbJ2MnLC00LjAyLC0wLjk5LC03LjExLC00LjM1LC03LjgwLC04LjQ2XSxbJ2MnLC0wLjEyLC0wLjY2LC0wLjEyLC0wLjk5LC0wLjEyLC0xLjgzXSxbJ2MnLDAuMDAsLTAuODQsMC4wMCwtMS4xNCwwLjE1LC0xLjkyXSxbJ2MnLDAuMzYsLTIuMjgsMS40MSwtNC42MiwzLjMwLC03LjI5XSxbJ2wnLDIuNzksLTMuNjBdLFsnYycsMC41NCwtMC42NiwwLjk2LC0xLjIwLDAuOTYsLTEuMjNdLFsnYycsMC4wMCwtMC4wMywtMC4wOSwtMC4zMywtMC4xOCwtMC42OV0sWydjJywtMC45NiwtMy4yMSwtMS40MSwtNS4yOCwtMS41OSwtNy42OF0sWydjJywtMC4xMiwtMS4zOCwtMC4xNSwtMy4wOSwtMC4wNiwtMy45Nl0sWydjJywwLjMzLC0yLjY3LDEuMzgsLTUuMDcsMy4xMiwtNy4wOF0sWydjJywwLjM2LC0wLjQyLDAuOTksLTEuMDUsMS4xNywtMS4xNF0sWyd6J10sWydtJywyLjAxLDQuNzFdLFsnYycsLTAuMTUsLTAuMzAsLTAuMzAsLTAuNTQsLTAuMzAsLTAuNTRdLFsnYycsLTAuMDMsMC4wMCwtMC4xOCwwLjA5LC0wLjMwLDAuMjFdLFsnYycsLTIuNDAsMS43NCwtMy44Nyw0LjIwLC00LjI2LDcuMTFdLFsnYycsLTAuMDYsMC41NCwtMC4wNiwxLjQxLC0wLjAzLDEuODldLFsnYycsMC4wOSwxLjI5LDAuNDgsMy4xMiwxLjA4LDUuMjJdLFsnYycsMC4xNSwwLjQyLDAuMjQsMC43OCwwLjI0LDAuODFdLFsnYycsMC4wMCwwLjAzLDAuODQsLTEuMTEsMS4yMywtMS42OF0sWydjJywxLjg5LC0yLjczLDIuODgsLTUuMDcsMy4xNSwtNy41M10sWydjJywwLjA5LC0wLjU3LDAuMTIsLTEuNzQsMC4wNiwtMi4zN10sWydjJywtMC4wOSwtMS4yMywtMC4yNywtMS45MiwtMC44NywtMy4xMl0sWyd6J10sWydtJywtMi45NCwyMC43MF0sWydjJywtMC4yMSwtMC43MiwtMC4zOSwtMS4zMiwtMC40MiwtMS4zMl0sWydjJywwLjAwLDAuMDAsLTEuMjAsMS40NywtMS44NiwyLjM3XSxbJ2MnLC0yLjc5LDMuNjMsLTQuMDIsNi4zMCwtNC4zNSw5LjMwXSxbJ2MnLC0wLjAzLDAuMjEsLTAuMDMsMC42OSwtMC4wMywxLjA4XSxbJ2MnLDAuMDAsMC42OSwwLjAwLDAuNzUsMC4wNiwxLjExXSxbJ2MnLDAuMTIsMC41NCwwLjI3LDAuOTksMC41MSwxLjQ3XSxbJ2MnLDAuNjksMS4zOCwxLjgzLDIuNTUsMy40MiwzLjQyXSxbJ2MnLDAuOTYsMC41NCwyLjA3LDAuOTAsMy4yMSwxLjA4XSxbJ2MnLDAuNzgsMC4xMiwyLjA0LDAuMTIsMi45NCwtMC4wM10sWydjJywwLjUxLC0wLjA2LDAuNDUsLTAuMDMsMC40MiwtMC4zMF0sWydjJywtMC4yNCwtMy4zMywtMC43MiwtNi4zMywtMS42MiwtMTAuMDhdLFsnYycsLTAuMDksLTAuMzksLTAuMTgsLTAuNzUsLTAuMTgsLTAuNzhdLFsnYycsLTAuMDMsLTAuMDMsLTAuNDIsMC4wMCwtMC44MSwwLjA5XSxbJ2MnLC0wLjkwLDAuMTgsLTEuNjUsMC41NywtMi4yMiwxLjE0XSxbJ2MnLC0wLjcyLDAuNzIsLTEuMDgsMS42NSwtMS4wNSwyLjY0XSxbJ2MnLDAuMDYsMC45NiwwLjQ4LDEuODMsMS4yMywyLjU4XSxbJ2MnLDAuMzYsMC4zNiwwLjcyLDAuNjMsMS4xNywwLjkwXSxbJ2MnLDAuMzMsMC4xOCwwLjM2LDAuMjEsMC40MiwwLjMzXSxbJ2MnLDAuMTgsMC40MiwtMC4xOCwwLjkwLC0wLjYwLDAuODddLFsnYycsLTAuMTgsLTAuMDMsLTAuODQsLTAuMzYsLTEuMjYsLTAuNjNdLFsnYycsLTAuNzgsLTAuNTEsLTEuMzgsLTEuMTEsLTEuODYsLTEuODNdLFsnYycsLTEuNzcsLTIuNzAsLTAuOTksLTYuNDIsMS43MSwtOC4xOV0sWydjJywwLjMwLC0wLjIxLDAuODEsLTAuNDgsMS4xNywtMC42M10sWydjJywwLjMwLC0wLjA5LDEuMDIsLTAuMzAsMS4xNCwtMC4zMF0sWydjJywwLjA2LDAuMDAsMC4wOSwwLjAwLDAuMDksLTAuMDNdLFsnYycsMC4wMywtMC4wMywtMC41MSwtMS45MiwtMS4yMywtNC4yNl0sWyd6J10sWydtJywzLjc4LDcuNDFdLFsnYycsLTAuMTgsLTAuMDMsLTAuMzYsLTAuMDYsLTAuMzksLTAuMDZdLFsnYycsLTAuMDMsMC4wMCwwLjAwLDAuMjEsMC4xOCwxLjAyXSxbJ2MnLDAuNzUsMy4xOCwxLjI2LDYuMzAsMS41MCw5LjA5XSxbJ2MnLDAuMDYsMC43MiwwLjAwLDAuNjksMC41MSwwLjQyXSxbJ2MnLDAuNzgsLTAuMzYsMS40NCwtMC45NiwxLjk4LC0xLjc3XSxbJ2MnLDEuMDgsLTEuNjIsMS4yMCwtMy42OSwwLjMwLC01LjU1XSxbJ2MnLC0wLjgxLC0xLjYyLC0yLjMxLC0yLjc5LC00LjA4LC0zLjE1XSxbJ3onXV0sdzoxOS4wNTEsaDo1Ny4wNTd9LFxuXHRcdCdjbGVmcy5wZXJjJzp7ZDpbWydNJyw1LjA3LC03LjQ0XSxbJ2wnLDAuMDksLTAuMDZdLFsnbCcsMS41MywwLjAwXSxbJ2wnLDEuNTMsMC4wMF0sWydsJywwLjA5LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsNy4zNV0sWydsJywwLjAwLDcuMzJdLFsnbCcsLTAuMDYsMC4wOV0sWydsJywtMC4wOSwwLjA2XSxbJ2wnLC0xLjUzLDAuMDBdLFsnbCcsLTEuNTMsMC4wMF0sWydsJywtMC4wOSwtMC4wNl0sWydsJywtMC4wNiwtMC4wOV0sWydsJywwLjAwLC03LjMyXSxbJ2wnLDAuMDAsLTcuMzVdLFsneiddLFsnbScsNi42MywwLjAwXSxbJ2wnLDAuMDksLTAuMDZdLFsnbCcsMS41MywwLjAwXSxbJ2wnLDEuNTMsMC4wMF0sWydsJywwLjA5LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsNy4zNV0sWydsJywwLjAwLDcuMzJdLFsnbCcsLTAuMDYsMC4wOV0sWydsJywtMC4wOSwwLjA2XSxbJ2wnLC0xLjUzLDAuMDBdLFsnbCcsLTEuNTMsMC4wMF0sWydsJywtMC4wOSwtMC4wNl0sWydsJywtMC4wNiwtMC4wOV0sWydsJywwLjAwLC03LjMyXSxbJ2wnLDAuMDAsLTcuMzVdLFsneiddXSx3OjkuOTksaDoxNC45N30sXG5cdFx0J3RpbWVzaWcuY29tbW9uJzp7ZDpbWydNJyw2LjY2LC03LjgzXSxbJ2MnLDAuNzIsLTAuMDYsMS40MSwtMC4wMywxLjk4LDAuMDldLFsnYycsMS4yMCwwLjI3LDIuMzQsMC45NiwzLjA5LDEuOTJdLFsnYycsMC42MywwLjgxLDEuMDgsMS44NiwxLjE0LDIuNzNdLFsnYycsMC4wNiwxLjAyLC0wLjUxLDEuOTIsLTEuNDQsMi4yMl0sWydjJywtMC4yNCwwLjA5LC0wLjMwLDAuMDksLTAuNjMsMC4wOV0sWydjJywtMC4zMywwLjAwLC0wLjQyLDAuMDAsLTAuNjMsLTAuMDZdLFsnYycsLTAuNjYsLTAuMjQsLTEuMTQsLTAuNjMsLTEuNDEsLTEuMjBdLFsnYycsLTAuMTUsLTAuMzAsLTAuMjEsLTAuNTEsLTAuMjQsLTAuOTBdLFsnYycsLTAuMDYsLTEuMDgsMC41NywtMi4wNCwxLjU2LC0yLjM3XSxbJ2MnLDAuMTgsLTAuMDYsMC4yNywtMC4wNiwwLjYzLC0wLjA2XSxbJ2wnLDAuNDUsMC4wMF0sWydjJywwLjA2LDAuMDMsMC4wOSwwLjAzLDAuMDksMC4wMF0sWydjJywwLjAwLDAuMDAsLTAuMDksLTAuMTIsLTAuMjQsLTAuMjddLFsnYycsLTEuMDIsLTEuMTEsLTIuNTUsLTEuNjgsLTQuMDgsLTEuNTBdLFsnYycsLTEuMjksMC4xNSwtMi4wNCwwLjY5LC0yLjQwLDEuNzRdLFsnYycsLTAuMzYsMC45MywtMC40MiwxLjg5LC0wLjQyLDUuMzddLFsnYycsMC4wMCwyLjk3LDAuMDYsMy45NiwwLjI0LDQuNzddLFsnYycsMC4yNCwxLjA4LDAuNjMsMS42OCwxLjQxLDIuMDddLFsnYycsMC44MSwwLjM5LDIuMTYsMC40NSwzLjE4LDAuMDldLFsnYycsMS4yOSwtMC40NSwyLjM3LC0xLjUzLDMuMDMsLTIuOTddLFsnYycsMC4xNSwtMC4zMywwLjMzLC0wLjg3LDAuMzksLTEuMTddLFsnYycsMC4wOSwtMC4yNCwwLjE1LC0wLjM2LDAuMzAsLTAuMzldLFsnYycsMC4yMSwtMC4wMywwLjQyLDAuMTUsMC4zOSwwLjM2XSxbJ2MnLC0wLjA2LDAuMzksLTAuNDIsMS4zOCwtMC42OSwxLjg5XSxbJ2MnLC0wLjk2LDEuODAsLTIuNDksMi45NCwtNC4yMywzLjE4XSxbJ2MnLC0wLjk5LDAuMTIsLTIuNTgsLTAuMDYsLTMuNjMsLTAuNDVdLFsnYycsLTAuOTYsLTAuMzYsLTEuNzEsLTAuODQsLTIuNDAsLTEuNTBdLFsnYycsLTEuMTEsLTEuMTEsLTEuODAsLTIuNjEsLTIuMDQsLTQuNTZdLFsnYycsLTAuMDYsLTAuNjAsLTAuMDYsLTIuMDEsMC4wMCwtMi42MV0sWydjJywwLjI0LC0xLjk1LDAuOTAsLTMuNDUsMi4wMSwtNC41Nl0sWydjJywwLjY5LC0wLjY2LDEuNDQsLTEuMTEsMi4zNywtMS40N10sWydjJywwLjYzLC0wLjI0LDEuNDcsLTAuNDIsMi4yMiwtMC40OF0sWyd6J11dLHc6MTMuMDM4LGg6MTUuNjg5fSxcblx0XHQndGltZXNpZy5jdXQnOntkOltbJ00nLDYuMjQsLTEwLjQ0XSxbJ2MnLDAuMDksLTAuMDYsMC4wOSwtMC4wNiwwLjQ4LC0wLjA2XSxbJ2MnLDAuMzYsMC4wMCwwLjM2LDAuMDAsMC40NSwwLjA2XSxbJ2wnLDAuMDYsMC4wOV0sWydsJywwLjAwLDEuMjNdLFsnbCcsMC4wMCwxLjI2XSxbJ2wnLDAuMjcsMC4wMF0sWydjJywxLjI2LDAuMDAsMi40OSwwLjQ1LDMuNDgsMS4yOV0sWydjJywxLjA1LDAuODcsMS44MCwyLjI4LDEuODksMy40OF0sWydjJywwLjA2LDEuMDIsLTAuNTEsMS45MiwtMS40NCwyLjIyXSxbJ2MnLC0wLjI0LDAuMDksLTAuMzAsMC4wOSwtMC42MywwLjA5XSxbJ2MnLC0wLjMzLDAuMDAsLTAuNDIsMC4wMCwtMC42MywtMC4wNl0sWydjJywtMC42NiwtMC4yNCwtMS4xNCwtMC42MywtMS40MSwtMS4yMF0sWydjJywtMC4xNSwtMC4zMCwtMC4yMSwtMC41MSwtMC4yNCwtMC45MF0sWydjJywtMC4wNiwtMS4wOCwwLjU3LC0yLjA0LDEuNTYsLTIuMzddLFsnYycsMC4xOCwtMC4wNiwwLjI3LC0wLjA2LDAuNjMsLTAuMDZdLFsnbCcsMC40NSwwLjAwXSxbJ2MnLDAuMDYsMC4wMywwLjA5LDAuMDMsMC4wOSwwLjAwXSxbJ2MnLDAuMDAsLTAuMDMsLTAuNDUsLTAuNTEsLTAuNjYsLTAuNjldLFsnYycsLTAuODcsLTAuNjksLTEuODMsLTEuMDUsLTIuOTQsLTEuMTFdLFsnbCcsLTAuNDIsMC4wMF0sWydsJywwLjAwLDcuMTddLFsnbCcsMC4wMCw3LjE0XSxbJ2wnLDAuNDIsMC4wMF0sWydjJywwLjY5LC0wLjAzLDEuMjMsLTAuMTgsMS44NiwtMC41MV0sWydjJywxLjA1LC0wLjUxLDEuODksLTEuNDcsMi40NiwtMi43MF0sWydjJywwLjE1LC0wLjMzLDAuMzMsLTAuODcsMC4zOSwtMS4xN10sWydjJywwLjA5LC0wLjI0LDAuMTUsLTAuMzYsMC4zMCwtMC4zOV0sWydjJywwLjIxLC0wLjAzLDAuNDIsMC4xNSwwLjM5LDAuMzZdLFsnYycsLTAuMDMsMC4yNCwtMC4yMSwwLjc4LC0wLjM5LDEuMjBdLFsnYycsLTAuOTYsMi4zNywtMi45NCwzLjkwLC01LjEzLDMuOTBdLFsnbCcsLTAuMzAsMC4wMF0sWydsJywwLjAwLDEuMjZdLFsnbCcsMC4wMCwxLjIzXSxbJ2wnLC0wLjA2LDAuMDldLFsnYycsLTAuMDksMC4wNiwtMC4wOSwwLjA2LC0wLjQ1LDAuMDZdLFsnYycsLTAuMzksMC4wMCwtMC4zOSwwLjAwLC0wLjQ4LC0wLjA2XSxbJ2wnLC0wLjA2LC0wLjA5XSxbJ2wnLDAuMDAsLTEuMjldLFsnbCcsMC4wMCwtMS4yOV0sWydsJywtMC4yMSwtMC4wM10sWydjJywtMS4yMywtMC4yMSwtMi4zMSwtMC42MywtMy4yMSwtMS4yOV0sWydjJywtMC4xNSwtMC4wOSwtMC40NSwtMC4zNiwtMC42NiwtMC41N10sWydjJywtMS4xMSwtMS4xMSwtMS44MCwtMi42MSwtMi4wNCwtNC41Nl0sWydjJywtMC4wNiwtMC42MCwtMC4wNiwtMi4wMSwwLjAwLC0yLjYxXSxbJ2MnLDAuMjQsLTEuOTUsMC45MywtMy40NSwyLjA0LC00LjU5XSxbJ2MnLDAuNDIsLTAuMzksMC43OCwtMC42NiwxLjI2LC0wLjkzXSxbJ2MnLDAuNzUsLTAuNDUsMS42NSwtMC43NSwyLjYxLC0wLjkwXSxbJ2wnLDAuMjEsLTAuMDNdLFsnbCcsMC4wMCwtMS4yOV0sWydsJywwLjAwLC0xLjI5XSxbJ3onXSxbJ20nLC0wLjA2LDEwLjQ0XSxbJ2MnLDAuMDAsLTUuNTgsMC4wMCwtNi45OSwtMC4wMywtNi45OV0sWydjJywtMC4xNSwwLjAwLC0wLjYzLDAuMjcsLTAuODcsMC40NV0sWydjJywtMC40NSwwLjM2LC0wLjc1LDAuOTMsLTAuOTMsMS43N10sWydjJywtMC4xOCwwLjgxLC0wLjI0LDEuODAsLTAuMjQsNC43NF0sWydjJywwLjAwLDIuOTcsMC4wNiwzLjk2LDAuMjQsNC43N10sWydjJywwLjI0LDEuMDgsMC42NiwxLjY4LDEuNDEsMi4wN10sWydjJywwLjEyLDAuMDYsMC4zMCwwLjEyLDAuMzMsMC4xNV0sWydsJywwLjA5LDAuMDBdLFsnbCcsMC4wMCwtNi45Nl0sWyd6J11dLHc6MTMuMDM4LGg6MjAuOTd9LFxuXHRcdCd0aW1lc2lnLmltcGVyZmVjdHVtJzp7ZDpbWydNJywxMywtNV0sWydhJyw4LDgsMCwxLDAsMCwxMF1dLHc6MTMuMDM4LGg6MjAuOTd9LFxuXHRcdCd0aW1lc2lnLmltcGVyZmVjdHVtMic6e2Q6W1snTScsMTMsLTVdLFsnYScsOCw4LDAsMSwwLDAsMTBdXSx3OjEzLjAzOCxoOjIwLjk3fSxcblx0XHQndGltZXNpZy5wZXJmZWN0dW0nOntkOltbJ00nLDEzLC01XSxbJ2EnLDgsOCwwLDEsMCwwLDEwXV0sdzoxMy4wMzgsaDoyMC45N30sXG5cdFx0J3RpbWVzaWcucGVyZmVjdHVtMic6e2Q6W1snTScsMTMsLTVdLFsnYScsOCw4LDAsMSwwLDAsMTBdXSx3OjEzLjAzOCxoOjIwLjk3fSxcblx0XHQnZic6e2Q6W1snTScsOS45MywtMTQuMjhdLFsnYycsMS41MywtMC4xOCwyLjg4LDAuNDUsMy4xMiwxLjUwXSxbJ2MnLDAuMTIsMC41MSwwLjAwLDEuMzIsLTAuMjcsMS44Nl0sWydjJywtMC4xNSwwLjMwLC0wLjQyLDAuNTcsLTAuNjMsMC42OV0sWydjJywtMC42OSwwLjM2LC0xLjU2LDAuMDMsLTEuODMsLTAuNjldLFsnYycsLTAuMDksLTAuMjQsLTAuMDksLTAuNjksMC4wMCwtMC44N10sWydjJywwLjA2LC0wLjEyLDAuMjEsLTAuMjQsMC40NSwtMC40Ml0sWydjJywwLjQyLC0wLjI0LDAuNTcsLTAuNDUsMC42MCwtMC43Ml0sWydjJywwLjAzLC0wLjMzLC0wLjA5LC0wLjM5LC0wLjYzLC0wLjQyXSxbJ2MnLC0wLjMwLDAuMDAsLTAuNDUsMC4wMCwtMC42MCwwLjAzXSxbJ2MnLC0wLjgxLDAuMjEsLTEuMzUsMC45MywtMS43NCwyLjQ2XSxbJ2MnLC0wLjA2LDAuMjcsLTAuNDgsMi4yNSwtMC40OCwyLjMxXSxbJ2MnLDAuMDAsMC4wMywwLjM5LDAuMDMsMC45MCwwLjAzXSxbJ2MnLDAuNzIsMC4wMCwwLjkwLDAuMDAsMC45OSwwLjA2XSxbJ2MnLDAuNDIsMC4xNSwwLjQ1LDAuNzIsMC4wMywwLjkwXSxbJ2MnLC0wLjEyLDAuMDYsLTAuMjQsMC4wNiwtMS4xNywwLjA2XSxbJ2wnLC0xLjA1LDAuMDBdLFsnbCcsLTAuNzgsMi41NV0sWydjJywtMC40NSwxLjQxLC0wLjg3LDIuNzksLTAuOTYsMy4wNl0sWydjJywtMC44NywyLjM3LC0yLjM3LDQuNzQsLTMuNzgsNS45MV0sWydjJywtMS4wNSwwLjkwLC0yLjA0LDEuMjMsLTMuMDksMS4wOF0sWydjJywtMS4xMSwtMC4xOCwtMS44OSwtMC43OCwtMi4wNCwtMS41OV0sWydjJywtMC4xMiwtMC42NiwwLjE1LC0xLjcxLDAuNTQsLTIuMTldLFsnYycsMC42OSwtMC43NSwxLjg2LC0wLjU0LDIuMjIsMC4zOV0sWydjJywwLjA2LDAuMTUsMC4wOSwwLjI3LDAuMDksMC40OF0sWydjJywwLjAwLDAuMjQsLTAuMDMsMC4yNywtMC4xMiwwLjQyXSxbJ2MnLC0wLjAzLDAuMDksLTAuMTUsMC4xOCwtMC4yNywwLjI3XSxbJ2MnLC0wLjA5LDAuMDYsLTAuMjcsMC4yMSwtMC4zNiwwLjI3XSxbJ2MnLC0wLjI0LDAuMTgsLTAuMzYsMC4zNiwtMC4zOSwwLjYwXSxbJ2MnLC0wLjAzLDAuMzMsMC4wOSwwLjM5LDAuNjMsMC40Ml0sWydjJywwLjQyLDAuMDAsMC42MywtMC4wMywwLjkwLC0wLjE1XSxbJ2MnLDAuNjAsLTAuMzAsMC45NiwtMC45NiwxLjM4LC0yLjY0XSxbJ2MnLDAuMDksLTAuNDIsMC42MywtMi41NSwxLjE3LC00Ljc3XSxbJ2wnLDEuMDIsLTQuMDhdLFsnYycsMC4wMCwtMC4wMywtMC4zNiwtMC4wMywtMC44MSwtMC4wM10sWydjJywtMC43MiwwLjAwLC0wLjgxLDAuMDAsLTAuOTMsLTAuMDZdLFsnYycsLTAuNDIsLTAuMTgsLTAuMzksLTAuNzUsMC4wMywtMC45MF0sWydjJywwLjA5LC0wLjA2LDAuMjcsLTAuMDYsMS4wNSwtMC4wNl0sWydsJywwLjk2LDAuMDBdLFsnbCcsMC4wMCwtMC4wOV0sWydjJywwLjA2LC0wLjE4LDAuMzAsLTAuNzIsMC41MSwtMS4xN10sWydjJywxLjIwLC0yLjQ2LDMuMzAsLTQuMjMsNS4zNCwtNC41MF0sWyd6J11dLHc6MTYuMTU1LGg6MTkuNDQ1fSxcblx0XHQnbSc6e2Q6W1snTScsMi43OSwtOC45MV0sWydjJywwLjA5LDAuMDAsMC4zMCwtMC4wMywwLjQ1LC0wLjAzXSxbJ2MnLDAuMjQsMC4wMywwLjMwLDAuMDMsMC40NSwwLjEyXSxbJ2MnLDAuMzYsMC4xNSwwLjYzLDAuNTQsMC43NSwxLjAyXSxbJ2wnLDAuMDMsMC4yMV0sWydsJywwLjMzLC0wLjMwXSxbJ2MnLDAuNjksLTAuNjksMS4zOCwtMS4wMiwyLjA3LC0xLjAyXSxbJ2MnLDAuMjcsMC4wMCwwLjMzLDAuMDAsMC40OCwwLjA2XSxbJ2MnLDAuMjEsMC4wOSwwLjQ4LDAuMzYsMC42MywwLjYwXSxbJ2MnLDAuMDMsMC4wOSwwLjEyLDAuMjcsMC4xOCwwLjQyXSxbJ2MnLDAuMDMsMC4xNSwwLjA5LDAuMjcsMC4xMiwwLjI3XSxbJ2MnLDAuMDAsMC4wMCwwLjA5LC0wLjA5LDAuMTgsLTAuMjFdLFsnYycsMC4zMywtMC4zOSwwLjg3LC0wLjgxLDEuMjksLTAuOTldLFsnYycsMC43OCwtMC4zMywxLjQ3LC0wLjIxLDIuMDEsMC4zM10sWydjJywwLjMwLDAuMzMsMC40OCwwLjY5LDAuNjAsMS4xNF0sWydjJywwLjA5LDAuNDIsMC4wNiwwLjU0LC0wLjU0LDMuMDZdLFsnYycsLTAuMzMsMS4yOSwtMC41NywyLjQwLC0wLjU3LDIuNDNdLFsnYycsMC4wMCwwLjEyLDAuMDksMC4yMSwwLjIxLDAuMjFdLFsnYycsMC4yNCwwLjAwLDAuNzUsLTAuMzAsMS4yMCwtMC43Ml0sWydjJywwLjQ1LC0wLjM5LDAuNjAsLTAuNDUsMC43OCwtMC4yN10sWydjJywwLjE4LDAuMTgsMC4wOSwwLjM2LC0wLjQ1LDAuODddLFsnYycsLTEuMDUsMC45NiwtMS44MywxLjQ3LC0yLjU4LDEuNzFdLFsnYycsLTAuOTMsMC4zMywtMS41MywwLjIxLC0xLjgwLC0wLjMzXSxbJ2MnLC0wLjA2LC0wLjE1LC0wLjA2LC0wLjIxLC0wLjA2LC0wLjQ1XSxbJ2MnLDAuMDAsLTAuMjQsMC4wMywtMC40OCwwLjYwLC0yLjgyXSxbJ2MnLDAuNDIsLTEuNzEsMC42MCwtMi42NCwwLjYzLC0yLjc5XSxbJ2MnLDAuMDMsLTAuNTcsLTAuMzAsLTAuNzUsLTAuODQsLTAuNDhdLFsnYycsLTAuMjQsMC4xMiwtMC41NCwwLjM5LC0wLjY2LDAuNjNdLFsnYycsLTAuMDMsMC4wOSwtMC40MiwxLjM4LC0wLjkwLDMuMDBdLFsnYycsLTAuOTAsMy4xNSwtMC44NCwzLjAwLC0xLjE0LDMuMTVdLFsnbCcsLTAuMTUsMC4wOV0sWydsJywtMC43OCwwLjAwXSxbJ2MnLC0wLjYwLDAuMDAsLTAuNzgsMC4wMCwtMC44NCwtMC4wNl0sWydjJywtMC4wOSwtMC4wMywtMC4xOCwtMC4xOCwtMC4xOCwtMC4yN10sWydjJywwLjAwLC0wLjAzLDAuMzYsLTEuMzgsMC44NCwtMi45N10sWydjJywwLjU3LC0yLjA0LDAuODEsLTIuOTcsMC44NCwtMy4xMl0sWydjJywwLjAzLC0wLjU0LC0wLjMwLC0wLjcyLC0wLjg0LC0wLjQ1XSxbJ2MnLC0wLjI0LDAuMTIsLTAuNTcsMC40MiwtMC42NiwwLjYzXSxbJ2MnLC0wLjA2LDAuMDksLTAuNTEsMS40NCwtMS4wNSwyLjk3XSxbJ2MnLC0wLjUxLDEuNTYsLTAuOTksMi44NSwtMC45OSwyLjkxXSxbJ2MnLC0wLjA2LDAuMTIsLTAuMjEsMC4yNCwtMC4zNiwwLjMwXSxbJ2MnLC0wLjEyLDAuMDYsLTAuMjEsMC4wNiwtMC45MCwwLjA2XSxbJ2MnLC0wLjYwLDAuMDAsLTAuNzgsMC4wMCwtMC44NCwtMC4wNl0sWydjJywtMC4wOSwtMC4wMywtMC4xOCwtMC4xOCwtMC4xOCwtMC4yN10sWydjJywwLjAwLC0wLjAzLDAuNDUsLTEuMzgsMC45OSwtMi45N10sWydjJywxLjA1LC0zLjE4LDEuMDUsLTMuMTgsMC45MywtMy40NV0sWydjJywtMC4xMiwtMC4yNywtMC4zOSwtMC4zMCwtMC43MiwtMC4xNV0sWydjJywtMC41NCwwLjI3LC0xLjE0LDEuMTcsLTEuNTYsMi40MF0sWydjJywtMC4wNiwwLjE1LC0wLjE1LDAuMzAsLTAuMTgsMC4zNl0sWydjJywtMC4yMSwwLjIxLC0wLjU3LDAuMjcsLTAuNzIsMC4wOV0sWydjJywtMC4wOSwtMC4wOSwtMC4wNiwtMC4yMSwwLjA2LC0wLjYzXSxbJ2MnLDAuNDgsLTEuMjYsMS4yNiwtMi40NiwyLjAxLC0zLjIxXSxbJ2MnLDAuNTcsLTAuNTQsMS4yMCwtMC44NywxLjgzLC0xLjAyXSxbJ3onXV0sdzoxNC42ODcsaDo5LjEyNn0sXG5cdFx0J3AnOntkOltbJ00nLDEuOTIsLTguNzBdLFsnYycsMC4yNywtMC4wOSwwLjgxLC0wLjA2LDEuMTEsMC4wM10sWydjJywwLjU0LDAuMTgsMC45MywwLjUxLDEuMTcsMC45OV0sWydjJywwLjA5LDAuMTUsMC4xNSwwLjMzLDAuMTgsMC4zNl0sWydsJywwLjAwLDAuMTJdLFsnbCcsMC4zMCwtMC4yN10sWydjJywwLjY2LC0wLjYwLDEuMzUsLTEuMDIsMi4xMywtMS4yMF0sWydjJywwLjIxLC0wLjA2LDAuMzMsLTAuMDYsMC43OCwtMC4wNl0sWydjJywwLjQ1LDAuMDAsMC41MSwwLjAwLDAuODQsMC4wOV0sWydjJywxLjI5LDAuMzMsMi4wNywxLjMyLDIuMjUsMi43OV0sWydjJywwLjA5LDAuODEsLTAuMDksMi4wMSwtMC40NSwyLjc5XSxbJ2MnLC0wLjU0LDEuMjYsLTEuODYsMi41NSwtMy4xOCwzLjAzXSxbJ2MnLC0wLjQ1LDAuMTgsLTAuODEsMC4yNCwtMS4yOSwwLjI0XSxbJ2MnLC0wLjY5LC0wLjAzLC0xLjM1LC0wLjE4LC0xLjg2LC0wLjQ1XSxbJ2MnLC0wLjMwLC0wLjE1LC0wLjUxLC0wLjE4LC0wLjY5LC0wLjA5XSxbJ2MnLC0wLjA5LDAuMDMsLTAuMTgsMC4wOSwtMC4xOCwwLjEyXSxbJ2MnLC0wLjA5LDAuMTIsLTEuMDUsMi45NCwtMS4wNSwzLjA2XSxbJ2MnLDAuMDAsMC4yNCwwLjE4LDAuNDgsMC41MSwwLjYzXSxbJ2MnLDAuMTgsMC4wNiwwLjU0LDAuMTUsMC43NSwwLjE1XSxbJ2MnLDAuMjEsMC4wMCwwLjM2LDAuMDYsMC40MiwwLjE4XSxbJ2MnLDAuMTIsMC4xOCwwLjA2LDAuNDIsLTAuMTIsMC41NF0sWydjJywtMC4wOSwwLjAzLC0wLjE1LDAuMDMsLTAuNzgsMC4wMF0sWydjJywtMS45OCwtMC4xNSwtMy44MSwtMC4xNSwtNS43OSwwLjAwXSxbJ2MnLC0wLjYzLDAuMDMsLTAuNjksMC4wMywtMC43OCwwLjAwXSxbJ2MnLC0wLjI0LC0wLjE1LC0wLjI0LC0wLjU3LDAuMDMsLTAuNjZdLFsnYycsMC4wNiwtMC4wMywwLjQ4LC0wLjA5LDAuOTksLTAuMTJdLFsnYycsMC44NywtMC4wNiwxLjExLC0wLjA5LDEuMzUsLTAuMjFdLFsnYycsMC4xOCwtMC4wNiwwLjMzLC0wLjE4LDAuMzksLTAuMzBdLFsnYycsMC4wNiwtMC4xMiwzLjI0LC05LjQyLDMuMjcsLTkuNjBdLFsnYycsMC4wNiwtMC4zMywwLjAzLC0wLjU3LC0wLjE1LC0wLjY5XSxbJ2MnLC0wLjA5LC0wLjA2LC0wLjEyLC0wLjA2LC0wLjMwLC0wLjA2XSxbJ2MnLC0wLjY5LDAuMDYsLTEuNTMsMS4wMiwtMi4yOCwyLjYxXSxbJ2MnLC0wLjA5LDAuMjEsLTAuMjEsMC40NSwtMC4yNywwLjUxXSxbJ2MnLC0wLjA5LDAuMTIsLTAuMzMsMC4yNCwtMC40OCwwLjI0XSxbJ2MnLC0wLjE4LDAuMDAsLTAuMzYsLTAuMTUsLTAuMzYsLTAuMzBdLFsnYycsMC4wMCwtMC4yNCwwLjc4LC0xLjgzLDEuMjYsLTIuNTVdLFsnYycsMC43MiwtMS4xMSwxLjQ3LC0xLjc0LDIuMjgsLTEuOTJdLFsneiddLFsnbScsNS4zNywxLjQ3XSxbJ2MnLC0wLjI3LC0wLjEyLC0wLjc1LC0wLjAzLC0xLjE0LDAuMjFdLFsnYycsLTAuNzUsMC40OCwtMS40NywxLjY4LC0xLjg5LDMuMTVdLFsnYycsLTAuNDUsMS40NywtMC40MiwyLjM0LDAuMDAsMi43MF0sWydjJywwLjQ1LDAuMzksMS4yNiwwLjIxLDEuODMsLTAuMzZdLFsnYycsMC41MSwtMC41MSwwLjk5LC0xLjY4LDEuMzgsLTMuMjddLFsnYycsMC4zMCwtMS4xNywwLjMzLC0xLjc0LDAuMTUsLTIuMTNdLFsnYycsLTAuMDksLTAuMTUsLTAuMTUsLTAuMjEsLTAuMzMsLTAuMzBdLFsneiddXSx3OjE0LjY4OSxoOjEzLjEyN30sXG5cdFx0J3InOntkOltbJ00nLDYuMzMsLTkuMTJdLFsnYycsMC4yNywtMC4wMywwLjkzLDAuMDAsMS4yMCwwLjA2XSxbJ2MnLDAuODQsMC4yMSwxLjIzLDAuODEsMS4wMiwxLjUzXSxbJ2MnLC0wLjI0LDAuNzUsLTAuOTAsMS4xNywtMS41NiwwLjk2XSxbJ2MnLC0wLjMzLC0wLjA5LC0wLjUxLC0wLjMwLC0wLjY2LC0wLjc1XSxbJ2MnLC0wLjAzLC0wLjEyLC0wLjA5LC0wLjI0LC0wLjEyLC0wLjMwXSxbJ2MnLC0wLjA5LC0wLjE1LC0wLjMwLC0wLjI0LC0wLjQ4LC0wLjI0XSxbJ2MnLC0wLjU3LDAuMDAsLTEuMzgsMC41NCwtMS42NSwxLjA4XSxbJ2MnLC0wLjA2LDAuMTUsLTAuMzMsMS4xNywtMC45MCwzLjI3XSxbJ2MnLC0wLjU3LDIuMzEsLTAuODEsMy4xMiwtMC44NywzLjIxXSxbJ2MnLC0wLjAzLDAuMDYsLTAuMTIsMC4xNSwtMC4xOCwwLjIxXSxbJ2wnLC0wLjEyLDAuMDZdLFsnbCcsLTAuODEsMC4wM10sWydjJywtMC42OSwwLjAwLC0wLjgxLDAuMDAsLTAuOTAsLTAuMDNdLFsnYycsLTAuMDksLTAuMDYsLTAuMTgsLTAuMjEsLTAuMTgsLTAuMzBdLFsnYycsMC4wMCwtMC4wNiwwLjM5LC0xLjYyLDAuOTAsLTMuNTFdLFsnYycsMC44NCwtMy4yNCwwLjg3LC0zLjQ1LDAuODcsLTMuNzJdLFsnYycsMC4wMCwtMC4yMSwwLjAwLC0wLjI3LC0wLjAzLC0wLjM2XSxbJ2MnLC0wLjEyLC0wLjE1LC0wLjIxLC0wLjI0LC0wLjQyLC0wLjI0XSxbJ2MnLC0wLjI0LDAuMDAsLTAuNDUsMC4xNSwtMC43OCwwLjQyXSxbJ2MnLC0wLjMzLDAuMzYsLTAuNDUsMC41NCwtMC43MiwxLjE0XSxbJ2MnLC0wLjAzLDAuMTIsLTAuMjEsMC4yNCwtMC4zNiwwLjI3XSxbJ2MnLC0wLjEyLDAuMDAsLTAuMTUsMC4wMCwtMC4yNCwtMC4wNl0sWydjJywtMC4xOCwtMC4xMiwtMC4xOCwtMC4yMSwtMC4wNiwtMC41NF0sWydjJywwLjIxLC0wLjU3LDAuNDIsLTAuOTMsMC43OCwtMS4zMl0sWydjJywwLjU0LC0wLjUxLDEuMjAsLTAuODEsMS45NSwtMC44N10sWydjJywwLjgxLC0wLjAzLDEuNTMsMC4zMCwxLjkyLDAuODddLFsnbCcsMC4xMiwwLjE4XSxbJ2wnLDAuMDksLTAuMDldLFsnYycsMC41NywtMC40NSwxLjQxLC0wLjg0LDIuMTksLTAuOTZdLFsneiddXSx3OjkuNDEsaDo5LjEzMn0sXG5cdFx0J3MnOntkOltbJ00nLDQuNDcsLTguNzNdLFsnYycsMC4wOSwwLjAwLDAuMzYsLTAuMDMsMC41NywtMC4wM10sWydjJywwLjc1LDAuMDMsMS4yOSwwLjI0LDEuNzEsMC42M10sWydjJywwLjUxLDAuNTQsMC42NiwxLjI2LDAuMzYsMS44M10sWydjJywtMC4yNCwwLjQyLC0wLjYzLDAuNTcsLTEuMTEsMC40Ml0sWydjJywtMC4zMywtMC4wOSwtMC42MCwtMC4zNiwtMC42MCwtMC41N10sWydjJywwLjAwLC0wLjAzLDAuMDYsLTAuMjEsMC4xNSwtMC4zOV0sWydjJywwLjEyLC0wLjIxLDAuMTUsLTAuMzMsMC4xOCwtMC40OF0sWydjJywwLjAwLC0wLjI0LC0wLjA2LC0wLjQ4LC0wLjE1LC0wLjYwXSxbJ2MnLC0wLjE1LC0wLjIxLC0wLjQyLC0wLjI0LC0wLjc1LC0wLjE1XSxbJ2MnLC0wLjI3LDAuMDYsLTAuNDgsMC4xOCwtMC42OSwwLjM2XSxbJ2MnLC0wLjM5LDAuMzksLTAuNTEsMC45NiwtMC4zMywxLjM4XSxbJ2MnLDAuMDksMC4yMSwwLjQyLDAuNTEsMC43OCwwLjcyXSxbJ2MnLDEuMTEsMC42OSwxLjU5LDEuMTEsMS44OSwxLjY4XSxbJ2MnLDAuMjEsMC4zOSwwLjI0LDAuNzgsMC4xNSwxLjI5XSxbJ2MnLC0wLjE4LDEuMjAsLTEuMTcsMi4xNiwtMi41MiwyLjUyXSxbJ2MnLC0xLjAyLDAuMjQsLTEuOTUsMC4xMiwtMi43MCwtMC40Ml0sWydjJywtMC43MiwtMC41MSwtMC45OSwtMS40NywtMC42MCwtMi4xOV0sWydjJywwLjI0LC0wLjQ4LDAuNzIsLTAuNjMsMS4xNywtMC40Ml0sWydjJywwLjMzLDAuMTgsMC41NCwwLjQ1LDAuNTcsMC44MV0sWydjJywwLjAwLDAuMjEsLTAuMDMsMC4zMCwtMC4zMywwLjUxXSxbJ2MnLC0wLjMzLDAuMjQsLTAuMzksMC40MiwtMC4yNywwLjY5XSxbJ2MnLDAuMDYsMC4xNSwwLjIxLDAuMjcsMC40NSwwLjMzXSxbJ2MnLDAuMzAsMC4wOSwwLjg3LDAuMDksMS4yMCwwLjAwXSxbJ2MnLDAuNzUsLTAuMjEsMS4yMywtMC43MiwxLjI5LC0xLjM1XSxbJ2MnLDAuMDMsLTAuNDIsLTAuMTUsLTAuODEsLTAuNTQsLTEuMjBdLFsnYycsLTAuMjQsLTAuMjQsLTAuNDgsLTAuNDIsLTEuNDEsLTEuMDJdLFsnYycsLTAuNjksLTAuNDIsLTEuMDUsLTAuOTMsLTEuMDUsLTEuNDddLFsnYycsMC4wMCwtMC4zOSwwLjEyLC0wLjg3LDAuMzAsLTEuMjNdLFsnYycsMC4yNywtMC41NywwLjc4LC0xLjA1LDEuMzgsLTEuMzVdLFsnYycsMC4yNCwtMC4xMiwwLjYzLC0wLjI3LDAuOTAsLTAuMzBdLFsneiddXSx3OjYuNjMyLGg6OC43NTh9LFxuXHRcdCd6Jzp7ZDpbWydNJywyLjY0LC03Ljk1XSxbJ2MnLDAuMzYsLTAuMDksMC44MSwtMC4wMywxLjcxLDAuMjddLFsnYycsMC43OCwwLjIxLDAuOTYsMC4yNywxLjc0LDAuMzBdLFsnYycsMC44NywwLjA2LDEuMDIsMC4wMywxLjM4LC0wLjIxXSxbJ2MnLDAuMjEsLTAuMTUsMC4zMywtMC4xNSwwLjQ4LC0wLjA2XSxbJ2MnLDAuMTUsMC4wOSwwLjIxLDAuMzAsMC4xNSwwLjQ1XSxbJ2MnLC0wLjAzLDAuMDYsLTEuMjYsMS4yNiwtMi43NiwyLjY3XSxbJ2wnLC0yLjczLDIuNTVdLFsnbCcsMC41NCwwLjAzXSxbJ2MnLDAuNTQsMC4wMywwLjcyLDAuMDMsMi4wMSwwLjE1XSxbJ2MnLDAuMzYsMC4wMywwLjkwLDAuMDYsMS4yMCwwLjA5XSxbJ2MnLDAuNjYsMC4wMCwwLjgxLC0wLjAzLDEuMDIsLTAuMjRdLFsnYycsMC4zMCwtMC4zMCwwLjM5LC0wLjcyLDAuMjcsLTEuMjNdLFsnYycsLTAuMDYsLTAuMjcsLTAuMDYsLTAuMjcsLTAuMDMsLTAuMzldLFsnYycsMC4xNSwtMC4zMCwwLjU0LC0wLjI3LDAuNjksMC4wM10sWydjJywwLjE1LDAuMzMsMC4yNywxLjAyLDAuMjcsMS41MF0sWydjJywwLjAwLDEuNDcsLTEuMTEsMi43MCwtMi41MiwyLjc5XSxbJ2MnLC0wLjU3LDAuMDMsLTEuMDIsLTAuMDksLTIuMDEsLTAuNTFdLFsnYycsLTEuMDIsLTAuNDIsLTEuMjMsLTAuNDgsLTIuMTMsLTAuNTRdLFsnYycsLTAuODEsLTAuMDYsLTAuOTYsLTAuMDMsLTEuMjYsMC4xOF0sWydjJywtMC4xMiwwLjA2LC0wLjI0LDAuMTIsLTAuMjcsMC4xMl0sWydjJywtMC4yNywwLjAwLC0wLjQ1LC0wLjMwLC0wLjM2LC0wLjUxXSxbJ2MnLDAuMDMsLTAuMDYsMS4zMiwtMS4zMiwyLjkxLC0yLjc5XSxbJ2wnLDIuODgsLTIuNzNdLFsnYycsLTAuMDMsMC4wMCwtMC4yMSwwLjAzLC0wLjQyLDAuMDZdLFsnYycsLTAuMjEsMC4wMywtMC43OCwwLjA5LC0xLjIzLDAuMTJdLFsnYycsLTEuMTEsMC4xMiwtMS4yMywwLjE1LC0xLjk1LDAuMjddLFsnYycsLTAuNzIsMC4xNSwtMS4xNywwLjE4LC0xLjI5LDAuMDldLFsnYycsLTAuMjcsLTAuMTgsLTAuMjEsLTAuNzUsMC4xMiwtMS4yNl0sWydjJywwLjM5LC0wLjYwLDAuOTMsLTEuMDIsMS41OSwtMS4yMF0sWyd6J11dLHc6OC41NzMsaDo4Ljc0M30sXG5cdFx0JysnOntkOltbJ00nLDMuNDgsLTkuM10sWydjJywwLjE4LC0wLjA5LDAuMzYsLTAuMDksMC41NCwwLjAwXSxbJ2MnLDAuMTgsMC4wOSwwLjI0LDAuMTUsMC4zMywwLjMwXSxbJ2wnLDAuMDYsMC4xNV0sWydsJywwLjAwLDEuMjldLFsnbCcsMC4wMCwxLjI5XSxbJ2wnLDEuMjksMC4wMF0sWydjJywxLjIzLDAuMDAsMS4yOSwwLjAwLDEuNDEsMC4wNl0sWydjJywwLjA2LDAuMDMsMC4xNSwwLjA5LDAuMTgsMC4xMl0sWydjJywwLjEyLDAuMDksMC4yMSwwLjMzLDAuMjEsMC40OF0sWydjJywwLjAwLDAuMTUsLTAuMDksMC4zOSwtMC4yMSwwLjQ4XSxbJ2MnLC0wLjAzLDAuMDMsLTAuMTIsMC4wOSwtMC4xOCwwLjEyXSxbJ2MnLC0wLjEyLDAuMDYsLTAuMTgsMC4wNiwtMS40MSwwLjA2XSxbJ2wnLC0xLjI5LDAuMDBdLFsnbCcsMC4wMCwxLjI5XSxbJ2MnLDAuMDAsMS4yMywwLjAwLDEuMjksLTAuMDYsMS40MV0sWydjJywtMC4wOSwwLjE4LC0wLjE1LDAuMjQsLTAuMzAsMC4zM10sWydjJywtMC4yMSwwLjA5LC0wLjM5LDAuMDksLTAuNTcsMC4wMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNCwtMC4xNSwtMC4zMywtMC4zM10sWydjJywtMC4wNiwtMC4xMiwtMC4wNiwtMC4xOCwtMC4wNiwtMS40MV0sWydsJywwLjAwLC0xLjI5XSxbJ2wnLC0xLjI5LDAuMDBdLFsnYycsLTEuMjMsMC4wMCwtMS4yOSwwLjAwLC0xLjQxLC0wLjA2XSxbJ2MnLC0wLjE4LC0wLjA5LC0wLjI0LC0wLjE1LC0wLjMzLC0wLjMzXSxbJ2MnLC0wLjA5LC0wLjE4LC0wLjA5LC0wLjM2LDAuMDAsLTAuNTRdLFsnYycsMC4wOSwtMC4xOCwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsnbCcsMC4xNSwtMC4wNl0sWydsJywxLjI2LDAuMDBdLFsnbCcsMS4yOSwwLjAwXSxbJ2wnLDAuMDAsLTEuMjldLFsnYycsMC4wMCwtMS4yMywwLjAwLC0xLjI5LDAuMDYsLTEuNDFdLFsnYycsMC4wOSwtMC4xOCwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsneiddXSx3OjcuNTA3LGg6Ny41MTV9LFxuXHRcdCcsJzp7ZDpbWydNJywxLjMyLC0zLjM2XSxbJ2MnLDAuNTcsLTAuMTUsMS4xNywwLjAzLDEuNTksMC40NV0sWydjJywwLjQ1LDAuNDUsMC42MCwwLjk2LDAuNTEsMS44OV0sWydjJywtMC4wOSwxLjIzLC0wLjQyLDIuNDYsLTAuOTksMy45M10sWydjJywtMC4zMCwwLjcyLC0wLjcyLDEuNjIsLTAuNzgsMS42OF0sWydjJywtMC4xOCwwLjIxLC0wLjUxLDAuMTgsLTAuNjYsLTAuMDZdLFsnYycsLTAuMDMsLTAuMDYsLTAuMDYsLTAuMTUsLTAuMDYsLTAuMThdLFsnYycsMC4wMCwtMC4wNiwwLjEyLC0wLjMzLDAuMjQsLTAuNjNdLFsnYycsMC44NCwtMS44MCwxLjAyLC0yLjYxLDAuNjksLTMuMjRdLFsnYycsLTAuMTIsLTAuMjQsLTAuMjcsLTAuMzYsLTAuNzUsLTAuNjBdLFsnYycsLTAuMzYsLTAuMTUsLTAuNDIsLTAuMjEsLTAuNjAsLTAuMzldLFsnYycsLTAuNjksLTAuNjksLTAuNjksLTEuNzEsMC4wMCwtMi40MF0sWydjJywwLjIxLC0wLjIxLDAuNTEsLTAuMzksMC44MSwtMC40NV0sWyd6J11dLHc6My40NTIsaDo4LjE0M30sXG5cdFx0Jy0nOntkOltbJ00nLDAuMTgsLTUuMzRdLFsnYycsMC4wOSwtMC4wNiwwLjE1LC0wLjA2LDIuMzEsLTAuMDZdLFsnYycsMi40NiwwLjAwLDIuMzcsMC4wMCwyLjQ2LDAuMjFdLFsnYycsMC4xMiwwLjIxLDAuMDMsMC40MiwtMC4xNSwwLjU0XSxbJ2MnLC0wLjA5LDAuMDYsLTAuMTUsMC4wNiwtMi4yOCwwLjA2XSxbJ2MnLC0yLjE2LDAuMDAsLTIuMjIsMC4wMCwtMi4zMSwtMC4wNl0sWydjJywtMC4yNywtMC4xNSwtMC4yNywtMC41NCwtMC4wMywtMC42OV0sWyd6J11dLHc6NS4wMDEsaDowLjgxfSxcblx0XHQnLic6e2Q6W1snTScsMS4zMiwtMy4zNl0sWydjJywxLjA1LC0wLjI3LDIuMTAsMC41NywyLjEwLDEuNjVdLFsnYycsMC4wMCwxLjA4LC0xLjA1LDEuOTIsLTIuMTAsMS42NV0sWydjJywtMC45MCwtMC4yMSwtMS41MCwtMS4xNCwtMS4yNiwtMi4wNF0sWydjJywwLjEyLC0wLjYzLDAuNjMsLTEuMTEsMS4yNiwtMS4yNl0sWyd6J11dLHc6My40MTMsaDozLjQwMn0sXG5cdFx0J3NjcmlwdHMud2VkZ2UnOntkOltbJ00nLC0zLjY2LC03LjQ0XSxbJ2MnLDAuMDYsLTAuMDksMC4wMCwtMC4wOSwwLjgxLDAuMDNdLFsnYycsMS44NiwwLjMwLDMuODQsMC4zMCw1LjczLDAuMDBdLFsnYycsMC43OCwtMC4xMiwwLjcyLC0wLjEyLDAuNzgsLTAuMDNdLFsnYycsMC4xNSwwLjE1LDAuMTIsMC4yNCwtMC4yNCwwLjYwXSxbJ2MnLC0wLjkzLDAuOTMsLTEuOTgsMi43NiwtMi42Nyw0LjYyXSxbJ2MnLC0wLjMwLDAuNzgsLTAuNTEsMS43MSwtMC41MSwyLjEzXSxbJ2MnLDAuMDAsMC4xNSwwLjAwLDAuMTgsLTAuMDYsMC4yN10sWydjJywtMC4xMiwwLjA5LC0wLjI0LDAuMDksLTAuMzYsMC4wMF0sWydjJywtMC4wNiwtMC4wOSwtMC4wNiwtMC4xMiwtMC4wNiwtMC4yN10sWydjJywwLjAwLC0wLjQyLC0wLjIxLC0xLjM1LC0wLjUxLC0yLjEzXSxbJ2MnLC0wLjY5LC0xLjg2LC0xLjc0LC0zLjY5LC0yLjY3LC00LjYyXSxbJ2MnLC0wLjM2LC0wLjM2LC0wLjM5LC0wLjQ1LC0wLjI0LC0wLjYwXSxbJ3onXV0sdzo3LjQ5LGg6Ny43NTJ9LFxuXHRcdCdzY3JpcHRzLnRodW1iJzp7ZDpbWydNJywtMC41NCwtMy42OV0sWydjJywwLjE1LC0wLjAzLDAuMzYsLTAuMDYsMC41MSwtMC4wNl0sWydjJywxLjQ0LDAuMDAsMi41OCwxLjExLDIuOTQsMi44NV0sWydjJywwLjA5LDAuNDgsMC4wOSwxLjMyLDAuMDAsMS44MF0sWydjJywtMC4yNywxLjQxLC0xLjA4LDIuNDMsLTIuMTYsMi43M10sWydsJywtMC4xOCwwLjA2XSxbJ2wnLDAuMDAsMC4xMl0sWydjJywwLjAzLDAuMDYsMC4wNiwwLjQ1LDAuMDksMC44N10sWydjJywwLjAzLDAuNTcsMC4wMywwLjc4LDAuMDAsMC44NF0sWydjJywtMC4wOSwwLjI3LC0wLjM5LDAuNDgsLTAuNjYsMC40OF0sWydjJywtMC4yNywwLjAwLC0wLjU3LC0wLjIxLC0wLjY2LC0wLjQ4XSxbJ2MnLC0wLjAzLC0wLjA2LC0wLjAzLC0wLjI3LDAuMDAsLTAuODRdLFsnYycsMC4wMywtMC40MiwwLjA2LC0wLjgxLDAuMDksLTAuODddLFsnbCcsMC4wMCwtMC4xMl0sWydsJywtMC4xOCwtMC4wNl0sWydjJywtMS4wOCwtMC4zMCwtMS44OSwtMS4zMiwtMi4xNiwtMi43M10sWydjJywtMC4wOSwtMC40OCwtMC4wOSwtMS4zMiwwLjAwLC0xLjgwXSxbJ2MnLDAuMTUsLTAuODQsMC41MSwtMS41MywxLjAyLC0yLjA0XSxbJ2MnLDAuMzksLTAuMzksMC44NCwtMC42MywxLjM1LC0wLjc1XSxbJ3onXSxbJ20nLDEuMDUsMC45MF0sWydjJywtMC4xNSwtMC4wOSwtMC4yMSwtMC4wOSwtMC40NSwtMC4xMl0sWydjJywtMC4xNSwwLjAwLC0wLjMwLDAuMDMsLTAuMzksMC4wM10sWydjJywtMC41NywwLjE4LC0wLjkwLDAuNzIsLTEuMDgsMS43NF0sWydjJywtMC4wNiwwLjQ4LC0wLjA2LDEuODAsMC4wMCwyLjI4XSxbJ2MnLDAuMTUsMC45MCwwLjQyLDEuNDQsMC45MCwxLjY1XSxbJ2MnLDAuMTgsMC4wOSwwLjIxLDAuMDksMC41MSwwLjA5XSxbJ2MnLDAuMzAsMC4wMCwwLjMzLDAuMDAsMC41MSwtMC4wOV0sWydjJywwLjQ4LC0wLjIxLDAuNzUsLTAuNzUsMC45MCwtMS42NV0sWydjJywwLjAzLC0wLjI3LDAuMDMsLTAuNTQsMC4wMywtMS4xNF0sWydjJywwLjAwLC0wLjYwLDAuMDAsLTAuODcsLTAuMDMsLTEuMTRdLFsnYycsLTAuMTUsLTAuOTAsLTAuNDUsLTEuNDQsLTAuOTAsLTEuNjVdLFsneiddXSx3OjUuOTU1LGg6OS43NX0sXG5cdFx0J3NjcmlwdHMub3Blbic6e2Q6W1snTScsLTAuNTQsLTMuNjldLFsnYycsMC4xNSwtMC4wMywwLjM2LC0wLjA2LDAuNTEsLTAuMDZdLFsnYycsMS40NCwwLjAwLDIuNTgsMS4xMSwyLjk0LDIuODVdLFsnYycsMC4wOSwwLjQ4LDAuMDksMS4zMiwwLjAwLDEuODBdLFsnYycsLTAuMzMsMS43NCwtMS40NywyLjg1LC0yLjkxLDIuODVdLFsnYycsLTEuNDQsMC4wMCwtMi41OCwtMS4xMSwtMi45MSwtMi44NV0sWydjJywtMC4wOSwtMC40OCwtMC4wOSwtMS4zMiwwLjAwLC0xLjgwXSxbJ2MnLDAuMTUsLTAuODQsMC41MSwtMS41MywxLjAyLC0yLjA0XSxbJ2MnLDAuMzksLTAuMzksMC44NCwtMC42MywxLjM1LC0wLjc1XSxbJ3onXSxbJ20nLDEuMTEsMC45MF0sWydjJywtMC4yMSwtMC4wOSwtMC4yNywtMC4wOSwtMC41MSwtMC4xMl0sWydjJywtMC4zMCwwLjAwLC0wLjQyLDAuMDMsLTAuNjYsMC4xNV0sWydjJywtMC4yNCwwLjEyLC0wLjUxLDAuMzksLTAuNjYsMC42M10sWydjJywtMC41NCwwLjkzLC0wLjYzLDIuNjQsLTAuMjEsMy44MV0sWydjJywwLjIxLDAuNTQsMC41MSwwLjkwLDAuOTMsMS4xMV0sWydjJywwLjIxLDAuMDksMC4yNCwwLjA5LDAuNTQsMC4wOV0sWydjJywwLjMwLDAuMDAsMC4zMywwLjAwLDAuNTQsLTAuMDldLFsnYycsMC40MiwtMC4yMSwwLjcyLC0wLjU3LDAuOTMsLTEuMTFdLFsnYycsMC4zNiwtMC45OSwwLjM2LC0yLjM3LDAuMDAsLTMuMzZdLFsnYycsLTAuMjEsLTAuNTQsLTAuNTEsLTAuOTAsLTAuOTAsLTEuMTFdLFsneiddXSx3OjUuOTU1LGg6Ny41fSxcblx0XHQnc2NyaXB0cy5sb25ncGhyYXNlJzp7ZDpbWydNJywxLjQ3LC0xNS4wOV0sWydjJywwLjM2LC0wLjA5LDAuNjYsLTAuMTgsMC42OSwtMC4xOF0sWydjJywwLjA2LDAuMDAsMC4wNiwwLjU0LDAuMDYsMTEuMjVdLFsnbCcsMC4wMCwxMS4yNV0sWydsJywtMC42MywwLjE1XSxbJ2MnLC0wLjY2LDAuMTgsLTEuNDQsMC4zOSwtMS41MCwwLjM5XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMDMsLTMuMzksLTAuMDMsLTExLjI1XSxbJ2wnLDAuMDAsLTExLjI1XSxbJ2wnLDAuMzYsLTAuMDldLFsnYycsMC4yMSwtMC4wNiwwLjY2LC0wLjE4LDEuMDUsLTAuMjddLFsneiddXSx3OjIuMTYsaDoyMy4wNH0sXG5cdFx0J3NjcmlwdHMubWVkaXVtcGhyYXNlJzp7ZDpbWydNJywxLjQ3LC03LjU5XSxbJ2MnLDAuMzYsLTAuMDksMC42NiwtMC4xOCwwLjY5LC0wLjE4XSxbJ2MnLDAuMDYsMC4wMCwwLjA2LDAuMzksMC4wNiw3LjUwXSxbJ2wnLDAuMDAsNy41MF0sWydsJywtMC42MywwLjE1XSxbJ2MnLC0wLjY2LDAuMTgsLTEuNDQsMC4zOSwtMS41MCwwLjM5XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMDMsLTIuMjgsLTAuMDMsLTcuNTBdLFsnbCcsMC4wMCwtNy41MF0sWydsJywwLjM2LC0wLjA5XSxbJ2MnLDAuMjEsLTAuMDYsMC42NiwtMC4xOCwxLjA1LC0wLjI3XSxbJ3onXV0sdzoyLjE2LGg6MTUuNTR9LFxuXHRcdCdzY3JpcHRzLnNob3J0cGhyYXNlJzp7ZDpbWydNJywxLjQ3LC03LjU5XSxbJ2MnLDAuMzYsLTAuMDksMC42NiwtMC4xOCwwLjY5LC0wLjE4XSxbJ2MnLDAuMDYsMC4wMCwwLjA2LDAuMjEsMC4wNiwzLjc1XSxbJ2wnLDAuMDAsMy43NV0sWydsJywtMC40MiwwLjA5XSxbJ2MnLC0wLjU3LDAuMTgsLTEuNjUsMC40NSwtMS43MSwwLjQ1XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMDMsLTAuNzIsLTAuMDMsLTMuNzVdLFsnbCcsMC4wMCwtMy43NV0sWydsJywwLjM2LC0wLjA5XSxbJ2MnLDAuMjEsLTAuMDYsMC42NiwtMC4xOCwxLjA1LC0wLjI3XSxbJ3onXV0sdzoyLjE2LGg6OC4wNH0sXG5cdFx0J3NjcmlwdHMuc25hcCc6e2Q6W1snTScsNC41MCwtMy4zOV0sWydjJywwLjM2LC0wLjAzLDAuOTYsLTAuMDMsMS4zNSwwLjAwXSxbJ2MnLDEuNTYsMC4xNSwzLjE1LDAuOTAsNC4yMCwyLjAxXSxbJ2MnLDAuMjQsMC4yNywwLjMzLDAuNDIsMC4zMywwLjYwXSxbJ2MnLDAuMDAsMC4yNywwLjAzLDAuMjQsLTIuNDYsMi4yMl0sWydjJywtMS4yOSwxLjAyLC0yLjQwLDEuODYsLTIuNDksMS45Ml0sWydjJywtMC4xOCwwLjA5LC0wLjMwLDAuMDksLTAuNDgsMC4wMF0sWydjJywtMC4wOSwtMC4wNiwtMS4yMCwtMC45MCwtMi40OSwtMS45Ml0sWydjJywtMi40OSwtMS45OCwtMi40NiwtMS45NSwtMi40NiwtMi4yMl0sWydjJywwLjAwLC0wLjE4LDAuMDksLTAuMzMsMC4zMywtMC42MF0sWydjJywxLjA1LC0xLjA4LDIuNjQsLTEuODYsNC4xNywtMi4wMV0sWyd6J10sWydtJywxLjI5LDEuMTddLFsnYycsLTEuNDcsLTAuMTUsLTIuOTcsMC4zMCwtNC4xNCwxLjIwXSxbJ2wnLC0wLjE4LDAuMTVdLFsnbCcsMC4wNiwwLjA5XSxbJ2MnLDAuMTUsMC4xMiwzLjYzLDIuODUsMy42NiwyLjg1XSxbJ2MnLDAuMDMsMC4wMCwzLjUxLC0yLjczLDMuNjYsLTIuODVdLFsnbCcsMC4wNiwtMC4wOV0sWydsJywtMC4xOCwtMC4xNV0sWydjJywtMC44NCwtMC42NiwtMS44OSwtMS4wOCwtMi45NCwtMS4yMF0sWyd6J11dLHc6MTAuMzgsaDo2Ljg0fX07XG5cblx0Ly8gQ3VzdG9tIGNoYXJhY3RlcnMgdGhhdCB3ZXJlbid0IGdlbmVyYXRlZCBmcm9tIHRoZSBmb250OlxuXHRnbHlwaHNbJ25vdGVoZWFkcy5zbGFzaC53aG9sZSddID0ge2Q6W1snTScsNSwtNV0sWydsJywxLDFdLFsnbCcsLTUsNV0sWydsJywtMSwtMV0sWyd6J10sWydtJyw0LDZdLFsnbCcsLTUsLTVdLFsnbCcsMiwtMl0sWydsJyw1LDVdLFsneiddLFsnbScsMCwtMl0sWydsJywxLDFdLFsnbCcsLTUsNV0sWydsJywtMSwtMV0sWyd6J10sWydtJywtNCw2XSxbJ2wnLC01LC01XSxbJ2wnLDIsLTJdLFsnbCcsNSw1XSxbJ3onXV0sdzoxMC44MSxoOjE1LjYzfTtcblxuXHRnbHlwaHNbJ25vdGVoZWFkcy5zbGFzaC5xdWFydGVyJ10gPSB7ZDpbWydNJyw5LC02XSxbJ2wnLDAsNF0sWydsJywtOSw5XSxbJ2wnLDAsLTRdLFsneiddXSx3OjksaDo5fTtcblxuXHRnbHlwaHNbJ25vdGVoZWFkcy5oYXJtb25pYy5xdWFydGVyJ10gPSB7ZDpbWydNJywzLjYzLC00LjAyXSxbJ2MnLDAuMDksLTAuMDYsMC4xOCwtMC4wOSwwLjI0LC0wLjAzXSxbJ2MnLDAuMDMsMC4wMywwLjg3LDAuOTMsMS44MywyLjAxXSxbJ2MnLDEuNTAsMS42NSwxLjgwLDEuOTgsMS44MCwyLjA0XSxbJ2MnLDAuMDAsMC4wNiwtMC4zMCwwLjM5LC0xLjgwLDIuMDRdLFsnYycsLTAuOTYsMS4wOCwtMS44MCwxLjk4LC0xLjgzLDIuMDFdLFsnYycsLTAuMDYsMC4wNiwtMC4xNSwwLjAzLC0wLjI0LC0wLjAzXSxbJ2MnLC0wLjEyLC0wLjA5LC0zLjU0LC0zLjg0LC0zLjYwLC0zLjkzXSxbJ2MnLC0wLjAzLC0wLjAzLC0wLjAzLC0wLjA5LC0wLjAzLC0wLjE1XSxbJ2MnLDAuMDMsLTAuMDYsMy40NSwtMy44NCwzLjYzLC0zLjk2XSxbJ3onXV0sdzo3LjUsaDo4LjE2NX07XG5cbnZhciBwYXRoQ2xvbmUgPSBmdW5jdGlvbiAocGF0aEFycmF5KSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDAsIGlpID0gcGF0aEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcblx0XHRyZXNbaV0gPSBbXTtcblx0XHRmb3IgKHZhciBqID0gMCwgamogPSBwYXRoQXJyYXlbaV0ubGVuZ3RoOyBqIDwgamo7IGorKykge1xuXHRcdFx0cmVzW2ldW2pdID0gcGF0aEFycmF5W2ldW2pdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzO1xufTtcblxudmFyIHBhdGhTY2FsZSA9IGZ1bmN0aW9uIChwYXRoQXJyYXksIGt4LCBreSkge1xuXHRmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRoQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuXHRcdHZhciBwID0gcGF0aEFycmF5W2ldO1xuXHRcdHZhciBqLCBqajtcblx0XHRmb3IgKGogPSAxLCBqaiA9IHAubGVuZ3RoOyBqIDwgamo7IGorKykge1xuXHRcdFx0cFtqXSAqPSAoaiAlIDIpID8ga3ggOiBreTtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBHbHlwaHMgPSB7XG5cdHByaW50U3ltYm9sOiBmdW5jdGlvbiAoeCx5LHN5bWIscGFwZXIsIGtsYXNzKSB7XG4gICAgaWYgKCFnbHlwaHNbc3ltYl0pIHJldHVybiBudWxsO1xuICAgIHZhciBwYXRoQXJyYXkgPSBwYXRoQ2xvbmUoZ2x5cGhzW3N5bWJdLmQpO1xuICAgIHBhdGhBcnJheVswXVsxXSArPXg7XG4gICAgcGF0aEFycmF5WzBdWzJdICs9eTtcbiAgICB2YXIgcGF0aCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQXJyYXkubGVuZ3RoOyBpKyspXG4gICAgXHRwYXRoICs9IHBhdGhBcnJheVtpXS5qb2luKFwiIFwiKTtcbiAgICByZXR1cm4gcGFwZXIucGF0aCh7cGF0aDpwYXRoLCBzdHJva2U6XCJub25lXCIsIGZpbGw6XCIjMDAwMDAwXCIsICdjbGFzcyc6IGtsYXNzIH0pO1xuICAgfSxcblxuICBnZXRQYXRoRm9yU3ltYm9sOiBmdW5jdGlvbiAoeCx5LHN5bWIsc2NhbGV4LCBzY2FsZXkpIHtcbiAgICBzY2FsZXggPSBzY2FsZXggfHwgMTtcbiAgICBzY2FsZXkgPSBzY2FsZXkgfHwgMTtcbiAgICBpZiAoIWdseXBoc1tzeW1iXSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHBhdGhBcnJheSA9IHBhdGhDbG9uZShnbHlwaHNbc3ltYl0uZCk7XG4gICAgaWYgKHNjYWxleCE9PTEgfHwgc2NhbGV5IT09MSkgcGF0aFNjYWxlKHBhdGhBcnJheSxzY2FsZXgsc2NhbGV5KTtcbiAgICBwYXRoQXJyYXlbMF1bMV0gKz14O1xuICAgIHBhdGhBcnJheVswXVsyXSArPXk7XG5cbiAgICByZXR1cm4gcGF0aEFycmF5O1xuICB9LFxuXG4gIGdldFN5bWJvbFdpZHRoOiBmdW5jdGlvbiAoc3ltYm9sKSB7XG4gICAgaWYgKGdseXBoc1tzeW1ib2xdKSByZXR1cm4gZ2x5cGhzW3N5bWJvbF0udztcbiAgICByZXR1cm4gMDtcbiAgfSxcblxuXHRzeW1ib2xIZWlnaHRJblBpdGNoZXM6IGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdHZhciBoZWlnaHQgPSBnbHlwaHNbc3ltYm9sXSA/IGdseXBoc1tzeW1ib2xdLmggOiAwO1xuXHRcdHJldHVybiBoZWlnaHQgLyBzcGFjaW5nLlNURVA7XG5cdH0sXG5cbiAgZ2V0U3ltYm9sQWxpZ246IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICBpZiAoc3ltYm9sLnN1YnN0cmluZygwLDcpPT09XCJzY3JpcHRzXCIgJiZcblx0c3ltYm9sIT09XCJzY3JpcHRzLnJvbGxcIikge1xuICAgICAgcmV0dXJuIFwiY2VudGVyXCI7XG4gICAgfVxuICAgIHJldHVybiBcImxlZnRcIjtcbiAgfSxcblxuICBnZXRZQ29ycjogZnVuY3Rpb24gKHN5bWJvbCkge1xuICAgIHN3aXRjaChzeW1ib2wpIHtcbiAgICBjYXNlIFwiMFwiOlxuICAgIGNhc2UgXCIxXCI6XG4gICAgY2FzZSBcIjJcIjpcbiAgICBjYXNlIFwiM1wiOlxuICAgIGNhc2UgXCI0XCI6XG4gICAgY2FzZSBcIjVcIjpcbiAgICBjYXNlIFwiNlwiOlxuICAgIGNhc2UgXCI3XCI6XG4gICAgY2FzZSBcIjhcIjpcbiAgICBjYXNlIFwiOVwiOlxuICAgIGNhc2UgXCIrXCI6IHJldHVybiAtMjtcbiAgICBjYXNlIFwidGltZXNpZy5jb21tb25cIjpcbiAgICBjYXNlIFwidGltZXNpZy5jdXRcIjogcmV0dXJuIDA7XG4gICAgY2FzZSBcImZsYWdzLmQzMm5kXCI6IHJldHVybiAtMTtcbiAgICBjYXNlIFwiZmxhZ3MuZDY0dGhcIjogcmV0dXJuIC0yO1xuICAgIGNhc2UgXCJmbGFncy51MzJuZFwiOiByZXR1cm4gMTtcbiAgICBjYXNlIFwiZmxhZ3MudTY0dGhcIjogcmV0dXJuIDM7XG4gICAgY2FzZSBcInJlc3RzLndob2xlXCI6IHJldHVybiAxO1xuICAgIGNhc2UgXCJyZXN0cy5oYWxmXCI6IHJldHVybiAtMTtcbiAgICBjYXNlIFwicmVzdHMuOHRoXCI6IHJldHVybiAtMTtcbiAgICBjYXNlIFwicmVzdHMucXVhcnRlclwiOiByZXR1cm4gLTE7XG4gICAgY2FzZSBcInJlc3RzLjE2dGhcIjogcmV0dXJuIC0xO1xuICAgIGNhc2UgXCJyZXN0cy4zMm5kXCI6IHJldHVybiAtMTtcbiAgICBjYXNlIFwicmVzdHMuNjR0aFwiOiByZXR1cm4gLTE7XG5cdFx0Y2FzZSBcImZcIjpcblx0XHRjYXNlIFwibVwiOlxuXHRcdGNhc2UgXCJwXCI6XG5cdFx0Y2FzZSBcInNcIjpcblx0XHRjYXNlIFwielwiOlxuXHRcdFx0cmV0dXJuIC00O1xuXHRcdGNhc2UgXCJzY3JpcHRzLnRyaWxsXCI6XG5cdFx0Y2FzZSBcInNjcmlwdHMudXBib3dcIjpcblx0XHRjYXNlIFwic2NyaXB0cy5kb3duYm93XCI6XG5cdFx0XHRyZXR1cm4gLTI7XG5cdFx0Y2FzZSBcInNjcmlwdHMudWZlcm1hdGFcIjpcblx0XHRjYXNlIFwic2NyaXB0cy53ZWRnZVwiOlxuXHRcdGNhc2UgXCJzY3JpcHRzLnJvbGxcIjpcblx0XHRjYXNlIFwic2NyaXB0cy5zaG9ydHBocmFzZVwiOlxuXHRcdGNhc2UgXCJzY3JpcHRzLmxvbmdwaHJhc2VcIjpcblx0XHRcdHJldHVybiAtMTtcblx0XHRjYXNlIFwic2NyaXB0cy5kZmVybWF0YVwiOlxuXHRcdFx0cmV0dXJuIDE7XG4gICAgZGVmYXVsdDogcmV0dXJuIDA7XG4gICAgfVxuICB9LFxuXHRzZXRTeW1ib2w6IGZ1bmN0aW9uKG5hbWUsIHBhdGgpIHtcblx0XHRnbHlwaHNbbmFtZV0gPSBwYXRoO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEdseXBoczsgLy8gd2UgbmVlZCB0aGUgZ2x5cGhzIGZvciBsYXlvdXQgaW5mb3JtYXRpb25cbiIsIi8vICAgIGFiY19jcmVhdGVfY2xlZi5qc1xuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQWJzb2x1dGVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfYWJzb2x1dGVfZWxlbWVudCcpO1xudmFyIGdseXBocyA9IHJlcXVpcmUoJy4vYWJjX2dseXBocycpO1xudmFyIFJlbGF0aXZlRWxlbWVudCA9IHJlcXVpcmUoJy4vYWJjX3JlbGF0aXZlX2VsZW1lbnQnKTtcblxudmFyIGNyZWF0ZUNsZWY7XG5cbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0Y3JlYXRlQ2xlZiA9IGZ1bmN0aW9uKGVsZW0sIHR1bmVOdW1iZXIpIHtcblx0XHR2YXIgY2xlZjtcblx0XHR2YXIgb2N0YXZlID0gMDtcblx0XHR2YXIgYWJzZWxlbSA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwwLDEwLCAnc3RhZmYtZXh0cmEnLCB0dW5lTnVtYmVyKTtcblx0XHRhYnNlbGVtLmlzQ2xlZiA9IHRydWU7XG5cdFx0c3dpdGNoIChlbGVtLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJ0cmVibGVcIjogY2xlZiA9IFwiY2xlZnMuR1wiOyBicmVhaztcblx0XHRcdGNhc2UgXCJ0ZW5vclwiOiBjbGVmPVwiY2xlZnMuQ1wiOyBicmVhaztcblx0XHRcdGNhc2UgXCJhbHRvXCI6IGNsZWY9XCJjbGVmcy5DXCI7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcImJhc3NcIjogY2xlZj1cImNsZWZzLkZcIjsgYnJlYWs7XG5cdFx0XHRjYXNlICd0cmVibGUrOCc6IGNsZWYgPSBcImNsZWZzLkdcIjsgb2N0YXZlID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICd0ZW5vcis4JzpjbGVmPVwiY2xlZnMuQ1wiOyBvY3RhdmUgPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2Jhc3MrOCc6IGNsZWY9XCJjbGVmcy5GXCI7IG9jdGF2ZSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnYWx0bys4JzogY2xlZj1cImNsZWZzLkNcIjsgb2N0YXZlID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICd0cmVibGUtOCc6IGNsZWYgPSBcImNsZWZzLkdcIjsgb2N0YXZlID0gLTE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndGVub3ItOCc6Y2xlZj1cImNsZWZzLkNcIjsgb2N0YXZlID0gLTE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnYmFzcy04JzogY2xlZj1cImNsZWZzLkZcIjsgb2N0YXZlID0gLTE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnYWx0by04JzogY2xlZj1cImNsZWZzLkNcIjsgb2N0YXZlID0gLTE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnbm9uZSc6IHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSAncGVyYyc6IGNsZWY9XCJjbGVmcy5wZXJjXCI7IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogYWJzZWxlbS5hZGRDaGlsZChuZXcgUmVsYXRpdmVFbGVtZW50KFwiY2xlZj1cIitlbGVtLnR5cGUsIDAsIDAsIHVuZGVmaW5lZCwge3R5cGU6XCJkZWJ1Z1wifSkpO1xuXHRcdH1cblx0XHQvLyBpZiAoZWxlbS52ZXJ0aWNhbFBvcykge1xuXHRcdC8vIHBpdGNoID0gZWxlbS52ZXJ0aWNhbFBvcztcblx0XHQvLyB9XG5cdFx0dmFyIGR4ID01O1xuXHRcdGlmIChjbGVmKSB7XG5cdFx0XHRhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoY2xlZiwgZHgsIGdseXBocy5nZXRTeW1ib2xXaWR0aChjbGVmKSwgZWxlbS5jbGVmUG9zKSk7XG5cblx0XHRcdGlmIChjbGVmID09PSAnY2xlZnMuRycpIHtcblx0XHRcdFx0YWJzZWxlbS50b3AgPSAxMztcblx0XHRcdFx0YWJzZWxlbS5ib3R0b20gPSAtMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFic2VsZW0udG9wID0gMTA7XG5cdFx0XHRcdGFic2VsZW0uYm90dG9tID0gMjtcblx0XHRcdH1cblx0XHRcdGlmIChvY3RhdmUgIT09IDApIHtcblx0XHRcdFx0dmFyIHNjYWxlID0gMiAvIDM7XG5cdFx0XHRcdHZhciBhZGp1c3RzcGFjaW5nID0gKGdseXBocy5nZXRTeW1ib2xXaWR0aChjbGVmKSAtIGdseXBocy5nZXRTeW1ib2xXaWR0aChcIjhcIikgKiBzY2FsZSkgLyAyO1xuXHRcdFx0XHRhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoXCI4XCIsIGR4ICsgYWRqdXN0c3BhY2luZywgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwiOFwiKSAqIHNjYWxlLCAob2N0YXZlID4gMCkgPyBhYnNlbGVtLnRvcCArIDMgOiBhYnNlbGVtLmJvdHRvbSAtIDEsIHtcblx0XHRcdFx0XHRzY2FsZXg6IHNjYWxlLFxuXHRcdFx0XHRcdHNjYWxleTogc2NhbGVcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRhYnNlbGVtLnRvcCArPSAyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWJzZWxlbTtcblx0fTtcblxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDbGVmO1xuIiwiLy8gICAgYWJjX2NyZWF0ZV9rZXlfc2lnbmF0dXJlLmpzXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBBYnNvbHV0ZUVsZW1lbnQgPSByZXF1aXJlKCcuL2FiY19hYnNvbHV0ZV9lbGVtZW50Jyk7XG52YXIgZ2x5cGhzID0gcmVxdWlyZSgnLi9hYmNfZ2x5cGhzJyk7XG52YXIgUmVsYXRpdmVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfcmVsYXRpdmVfZWxlbWVudCcpO1xuXG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfY29tbW9uJyk7XG5cbnZhciBjcmVhdGVLZXlTaWduYXR1cmU7XG5cbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0Y3JlYXRlS2V5U2lnbmF0dXJlID0gZnVuY3Rpb24oZWxlbSwgdHVuZU51bWJlcikge1xuXHRcdGlmICghZWxlbS5hY2NpZGVudGFscyB8fCBlbGVtLmFjY2lkZW50YWxzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdHZhciBhYnNlbGVtID0gbmV3IEFic29sdXRlRWxlbWVudChlbGVtLCAwLCAxMCwgJ3N0YWZmLWV4dHJhJywgdHVuZU51bWJlcik7XG5cdFx0YWJzZWxlbS5pc0tleVNpZyA9IHRydWU7XG5cdFx0dmFyIGR4ID0gMDtcblx0XHRwYXJzZUNvbW1vbi5lYWNoKGVsZW0uYWNjaWRlbnRhbHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0dmFyIHN5bWJvbDtcblx0XHRcdHN3aXRjaChhY2MuYWNjKSB7XG5cdFx0XHRcdGNhc2UgXCJzaGFycFwiOiBzeW1ib2wgPSBcImFjY2lkZW50YWxzLnNoYXJwXCI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwibmF0dXJhbFwiOiBzeW1ib2wgPSBcImFjY2lkZW50YWxzLm5hdFwiOyBicmVhaztcblx0XHRcdFx0Y2FzZSBcImZsYXRcIjogc3ltYm9sID0gXCJhY2NpZGVudGFscy5mbGF0XCI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicXVhcnRlcnNoYXJwXCI6IHN5bWJvbCA9IFwiYWNjaWRlbnRhbHMuaGFsZnNoYXJwXCI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicXVhcnRlcmZsYXRcIjogc3ltYm9sID0gXCJhY2NpZGVudGFscy5oYWxmZmxhdFwiOyBicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogc3ltYm9sID0gXCJhY2NpZGVudGFscy5mbGF0XCI7XG5cdFx0XHR9XG5cdFx0XHRhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoc3ltYm9sLCBkeCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWJvbCksIGFjYy52ZXJ0aWNhbFBvcywge3RoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhzeW1ib2wpfSkpO1xuXHRcdFx0ZHggKz0gZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWJvbCkgKyAyO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiBhYnNlbGVtO1xuXHR9O1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVLZXlTaWduYXR1cmU7XG4iLCIvLyAgICBhYmNfY3JlYXRlX3RpbWVfc2lnbmF0dXJlLmpzXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBBYnNvbHV0ZUVsZW1lbnQgPSByZXF1aXJlKCcuL2FiY19hYnNvbHV0ZV9lbGVtZW50Jyk7XG52YXIgZ2x5cGhzID0gcmVxdWlyZSgnLi9hYmNfZ2x5cGhzJyk7XG52YXIgUmVsYXRpdmVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfcmVsYXRpdmVfZWxlbWVudCcpO1xuXG52YXIgY3JlYXRlVGltZVNpZ25hdHVyZTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRjcmVhdGVUaW1lU2lnbmF0dXJlID0gZnVuY3Rpb24oZWxlbSwgdHVuZU51bWJlcikge1xuXHRcdHZhciBhYnNlbGVtID0gbmV3IEFic29sdXRlRWxlbWVudChlbGVtLDAsMTAsICdzdGFmZi1leHRyYScsIHR1bmVOdW1iZXIpO1xuXHRcdGlmIChlbGVtLnR5cGUgPT09IFwic3BlY2lmaWVkXCIpIHtcblx0XHRcdHZhciB4ID0gMDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS52YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoaSAhPT0gMCkge1xuXHRcdFx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudCgnKycsIHgrMSwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwiK1wiKSwgNiwge3RoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhcIitcIil9KSk7XG5cdFx0XHRcdFx0eCArPSBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoXCIrXCIpKzI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGVsZW0udmFsdWVbaV0uZGVuKSB7XG5cdFx0XHRcdFx0dmFyIG51bVdpZHRoID0gMDtcblx0XHRcdFx0XHRmb3IgKHZhciBpMiA9IDA7IGkyIDwgZWxlbS52YWx1ZVtpXS5udW0ubGVuZ3RoOyBpMisrKVxuXHRcdFx0XHRcdFx0bnVtV2lkdGggKz0gZ2x5cGhzLmdldFN5bWJvbFdpZHRoKGVsZW0udmFsdWVbaV0ubnVtLmNoYXJBdChpMikpO1xuXHRcdFx0XHRcdHZhciBkZW5XaWR0aCA9IDA7XG5cdFx0XHRcdFx0Zm9yIChpMiA9IDA7IGkyIDwgZWxlbS52YWx1ZVtpXS5udW0ubGVuZ3RoOyBpMisrKVxuXHRcdFx0XHRcdFx0ZGVuV2lkdGggKz0gZ2x5cGhzLmdldFN5bWJvbFdpZHRoKGVsZW0udmFsdWVbaV0uZGVuLmNoYXJBdChpMikpO1xuXHRcdFx0XHRcdHZhciBtYXhXaWR0aCA9IE1hdGgubWF4KG51bVdpZHRoLCBkZW5XaWR0aCk7XG5cdFx0XHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGVsZW0udmFsdWVbaV0ubnVtLCB4KyhtYXhXaWR0aC1udW1XaWR0aCkvMiwgbnVtV2lkdGgsIDgsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKGVsZW0udmFsdWVbaV0ubnVtLmNoYXJBdCgwKSkgfSkpO1xuXHRcdFx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChlbGVtLnZhbHVlW2ldLmRlbiwgeCsobWF4V2lkdGgtZGVuV2lkdGgpLzIsIGRlbldpZHRoLCA0LCB7IHRoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhlbGVtLnZhbHVlW2ldLmRlbi5jaGFyQXQoMCkpIH0pKTtcblx0XHRcdFx0XHR4ICs9IG1heFdpZHRoXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIHRoaXNXaWR0aCA9IDA7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaTMgPSAwOyBpMyA8IGVsZW0udmFsdWVbaV0ubnVtLmxlbmd0aDsgaTMrKylcblx0XHRcdFx0XHRcdHRoaXNXaWR0aCArPSBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoZWxlbS52YWx1ZVtpXS5udW0uY2hhckF0KGkzKSk7XG5cdFx0XHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGVsZW0udmFsdWVbaV0ubnVtLCB4LCB0aGlzV2lkdGgsIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKGVsZW0udmFsdWVbaV0ubnVtLmNoYXJBdCgwKSkgfSkpO1xuXHRcdFx0XHRcdHggKz0gdGhpc1dpZHRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChlbGVtLnR5cGUgPT09IFwiY29tbW9uX3RpbWVcIikge1xuXHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwidGltZXNpZy5jb21tb25cIiwgMCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwidGltZXNpZy5jb21tb25cIiksIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwidGltZXNpZy5jb21tb25cIikgfSkpO1xuXG5cdFx0fSBlbHNlIGlmIChlbGVtLnR5cGUgPT09IFwiY3V0X3RpbWVcIikge1xuXHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwidGltZXNpZy5jdXRcIiwgMCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwidGltZXNpZy5jdXRcIiksIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwidGltZXNpZy5jdXRcIikgfSkpO1xuXHRcdH0gZWxzZSBpZiAoZWxlbS50eXBlID09PSBcInRlbXB1c19pbXBlcmZlY3R1bVwiKSB7XG5cdFx0XHRhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoXCJ0aW1lc2lnLmltcGVyZmVjdHVtXCIsIDAsIGdseXBocy5nZXRTeW1ib2xXaWR0aChcInRpbWVzaWcuaW1wZXJmZWN0dW1cIiksIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwidGltZXNpZy5pbXBlcmZlY3R1bVwiKSB9KSk7XG5cdFx0fSBlbHNlIGlmIChlbGVtLnR5cGUgPT09IFwidGVtcHVzX2ltcGVyZmVjdHVtX3Byb2xhdGlvXCIpIHtcblx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcInRpbWVzaWcuaW1wZXJmZWN0dW0yXCIsIDAsIGdseXBocy5nZXRTeW1ib2xXaWR0aChcInRpbWVzaWcuaW1wZXJmZWN0dW0yXCIpLCA2LCB7IHRoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhcInRpbWVzaWcuaW1wZXJmZWN0dW0yXCIpIH0pKTtcblx0XHR9IGVsc2UgaWYgKGVsZW0udHlwZSA9PT0gXCJ0ZW1wdXNfcGVyZmVjdHVtXCIpIHtcblx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcInRpbWVzaWcucGVyZmVjdHVtXCIsIDAsIGdseXBocy5nZXRTeW1ib2xXaWR0aChcInRpbWVzaWcucGVyZmVjdHVtXCIpLCA2LCB7IHRoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhcInRpbWVzaWcucGVyZmVjdHVtXCIpIH0pKTtcblx0XHR9IGVsc2UgaWYgKGVsZW0udHlwZSA9PT0gXCJ0ZW1wdXNfcGVyZmVjdHVtX3Byb2xhdGlvXCIpIHtcblx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcInRpbWVzaWcucGVyZmVjdHVtMlwiLCAwLCBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoXCJ0aW1lc2lnLnBlcmZlY3R1bTJcIiksIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwidGltZXNpZy5wZXJmZWN0dW0yXCIpIH0pKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc29sZS5sb2coXCJ0aW1lIHNpZ25hdHVyZTpcIixlbGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFic2VsZW07XG5cdH07XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVRpbWVTaWduYXR1cmU7XG4iLCIvLyAgICBhYmNfZHluYW1pY19kZWNvcmF0aW9uLmpzOiBEZWZpbml0aW9uIG9mIHRoZSBEeW5hbWljRGVjb3JhdGlvbiBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuL2FiY19zcGFjaW5nJyk7XG5cbnZhciBEeW5hbWljRGVjb3JhdGlvbiA9IGZ1bmN0aW9uIER5bmFtaWNEZWNvcmF0aW9uKGFuY2hvciwgZGVjLCBwb3NpdGlvbikge1xuXHR0aGlzLmFuY2hvciA9IGFuY2hvcjtcblx0dGhpcy5kZWMgPSBkZWM7XG5cdGlmIChwb3NpdGlvbiA9PT0gJ2JlbG93Jylcblx0XHR0aGlzLnZvbHVtZUhlaWdodEJlbG93ID0gNTtcblx0ZWxzZVxuXHRcdHRoaXMudm9sdW1lSGVpZ2h0QWJvdmUgPSA1O1xuXHR0aGlzLnBpdGNoID0gdW5kZWZpbmVkOyAvLyBUaGlzIHdpbGwgYmUgc2V0IGxhdGVyXG59O1xuXG5EeW5hbWljRGVjb3JhdGlvbi5wcm90b3R5cGUuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzID0gZnVuY3Rpb24ocG9zaXRpb25ZKSB7XG5cdGlmICh0aGlzLnZvbHVtZUhlaWdodEFib3ZlKVxuXHRcdHRoaXMucGl0Y2ggPSBwb3NpdGlvblkudm9sdW1lSGVpZ2h0QWJvdmU7XG5cdGVsc2Vcblx0XHR0aGlzLnBpdGNoID0gcG9zaXRpb25ZLnZvbHVtZUhlaWdodEJlbG93O1xufTtcblxuRHluYW1pY0RlY29yYXRpb24ucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihyZW5kZXJlciwgbGluZXN0YXJ0eCwgbGluZWVuZHgpIHtcblx0aWYgKHRoaXMucGl0Y2ggPT09IHVuZGVmaW5lZClcblx0XHR3aW5kb3cuY29uc29sZS5lcnJvcihcIkR5bmFtaWMgRWxlbWVudCB5LWNvb3JkaW5hdGUgbm90IHNldC5cIik7XG5cdHZhciBzY2FsZXggPSAxO1xuXHR2YXIgc2NhbGV5ID0gMTtcblx0cmVuZGVyZXIucHJpbnRTeW1ib2wodGhpcy5hbmNob3IueCwgdGhpcy5waXRjaCwgdGhpcy5kZWMsIHNjYWxleCwgc2NhbGV5LCByZW5kZXJlci5hZGRDbGFzc2VzKCdkZWNvcmF0aW9uJykpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBEeW5hbWljRGVjb3JhdGlvbjtcbiIsIi8qKlxuICogc3ByaW50ZigpIGZvciBKYXZhU2NyaXB0IHYuMC40XG4gKlxuIENvcHlyaWdodCAoYykgMjAwNy1wcmVzZW50LCBBbGV4YW5kcnUgTcSDcsSDyJl0ZWFudSA8aGVsbG9AYWxleGVpLnJvPlxuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhpcyBzb2Z0d2FyZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlXG4gdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dFxuIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1JcbiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbi8vZnVuY3Rpb24gc3RyX3JlcGVhdChpLCBtKSB7IGZvciAodmFyIG8gPSBbXTsgbSA+IDA7IG9bLS1tXSA9IGkpOyByZXR1cm4oby5qb2luKCcnKSk7IH1cblxudmFyIHNwcmludGYgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGkgPSAwLCBhLCBmID0gYXJndW1lbnRzW2krK10sIG8gPSBbXSwgbSwgcCwgYywgeDtcbiAgd2hpbGUgKGYpIHtcbiAgICBpZiAobSA9IC9eW15cXHgyNV0rLy5leGVjKGYpKSBvLnB1c2gobVswXSk7XG4gICAgZWxzZSBpZiAobSA9IC9eXFx4MjV7Mn0vLmV4ZWMoZikpIG8ucHVzaCgnJScpO1xuICAgIGVsc2UgaWYgKG0gPSAvXlxceDI1KD86KFxcZCspXFwkKT8oXFwrKT8oMHwnW14kXSk/KC0pPyhcXGQrKT8oPzpcXC4oXFxkKykpPyhbYi1mb3N1eFhdKS8uZXhlYyhmKSkge1xuICAgICAgaWYgKCgoYSA9IGFyZ3VtZW50c1ttWzFdIHx8IGkrK10pID09IG51bGwpIHx8IChhID09IHVuZGVmaW5lZCkpIHRocm93KFwiVG9vIGZldyBhcmd1bWVudHMuXCIpO1xuICAgICAgaWYgKC9bXnNdLy50ZXN0KG1bN10pICYmICh0eXBlb2YoYSkgIT0gJ251bWJlcicpKVxuICAgICAgICB0aHJvdyhcIkV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kIFwiICsgdHlwZW9mKGEpKTtcbiAgICAgIHN3aXRjaCAobVs3XSkge1xuICAgICAgICBjYXNlICdiJzogYSA9IGEudG9TdHJpbmcoMik7IGJyZWFrO1xuICAgICAgICBjYXNlICdjJzogYSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYSk7IGJyZWFrO1xuICAgICAgICBjYXNlICdkJzogYSA9IHBhcnNlSW50KGEpOyBicmVhaztcbiAgICAgICAgY2FzZSAnZSc6IGEgPSBtWzZdID8gYS50b0V4cG9uZW50aWFsKG1bNl0pIDogYS50b0V4cG9uZW50aWFsKCk7IGJyZWFrO1xuICAgICAgICBjYXNlICdmJzogYSA9IG1bNl0gPyBwYXJzZUZsb2F0KGEpLnRvRml4ZWQobVs2XSkgOiBwYXJzZUZsb2F0KGEpOyBicmVhaztcbiAgICAgICAgY2FzZSAnbyc6IGEgPSBhLnRvU3RyaW5nKDgpOyBicmVhaztcbiAgICAgICAgY2FzZSAncyc6IGEgPSAoKGEgPSBTdHJpbmcoYSkpICYmIG1bNl0gPyBhLnN1YnN0cmluZygwLCBtWzZdKSA6IGEpOyBicmVhaztcbiAgICAgICAgY2FzZSAndSc6IGEgPSBNYXRoLmFicyhhKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3gnOiBhID0gYS50b1N0cmluZygxNik7IGJyZWFrO1xuICAgICAgICBjYXNlICdYJzogYSA9IGEudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IGJyZWFrO1xuICAgICAgfVxuICAgICAgYSA9ICgvW2RlZl0vLnRlc3QobVs3XSkgJiYgbVsyXSAmJiBhID4gMCA/ICcrJyArIGEgOiBhKTtcbiAgICAgIGMgPSBtWzNdID8gbVszXSA9PSAnMCcgPyAnMCcgOiBtWzNdLmNoYXJBdCgxKSA6ICcgJztcbiAgICAgIHggPSBtWzVdIC0gU3RyaW5nKGEpLmxlbmd0aDtcbiAgICAgIHAgPSBtWzVdID8gc3RyX3JlcGVhdChjLCB4KSA6ICcnO1xuICAgICAgby5wdXNoKG1bNF0gPyBhICsgcCA6IHAgKyBhKTtcbiAgICB9XG4gICAgZWxzZSB0aHJvdyAoXCJIdWggPyFcIik7XG4gICAgZiA9IGYuc3Vic3RyaW5nKG1bMF0ubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gby5qb2luKCcnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc3ByaW50ZjtcbiIsIi8vICAgIGFiY19jcmVzY2VuZG9fZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgQ3Jlc2NlbmRvRWxlbSBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHNwcmludGYgPSByZXF1aXJlKCcuL3NwcmludGYnKTtcblxudmFyIENyZXNjZW5kb0VsZW0gPSBmdW5jdGlvbiBDcmVzY2VuZG9FbGVtKGFuY2hvcjEsIGFuY2hvcjIsIGRpciwgcG9zaXRpb25pbmcpIHtcblx0dGhpcy5hbmNob3IxID0gYW5jaG9yMTsgLy8gbXVzdCBoYXZlIGEgLnggYW5kIGEgLnBhcmVudCBwcm9wZXJ0eSBvciBiZSBudWxsIChtZWFucyBzdGFydHMgYXQgdGhlIFwiYmVnaW5uaW5nXCIgb2YgdGhlIGxpbmUgLSBhZnRlciBrZXlzaWcpXG5cdHRoaXMuYW5jaG9yMiA9IGFuY2hvcjI7IC8vIG11c3QgaGF2ZSBhIC54IHByb3BlcnR5IG9yIGJlIG51bGwgKG1lYW5zIGVuZHMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSlcblx0dGhpcy5kaXIgPSBkaXI7IC8vIGVpdGhlciBcIjxcIiBvciBcIj5cIlxuXHRpZiAocG9zaXRpb25pbmcgPT09ICdhYm92ZScpXG5cdFx0dGhpcy5keW5hbWljSGVpZ2h0QWJvdmUgPSA0O1xuXHRlbHNlXG5cdFx0dGhpcy5keW5hbWljSGVpZ2h0QmVsb3cgPSA0O1xuXHR0aGlzLnBpdGNoID0gdW5kZWZpbmVkOyAvLyBUaGlzIHdpbGwgYmUgc2V0IGxhdGVyXG59O1xuXG5DcmVzY2VuZG9FbGVtLnByb3RvdHlwZS5zZXRVcHBlckFuZExvd2VyRWxlbWVudHMgPSBmdW5jdGlvbihwb3NpdGlvblkpIHtcblx0aWYgKHRoaXMuZHluYW1pY0hlaWdodEFib3ZlKVxuXHRcdHRoaXMucGl0Y2ggPSBwb3NpdGlvblkuZHluYW1pY0hlaWdodEFib3ZlO1xuXHRlbHNlXG5cdFx0dGhpcy5waXRjaCA9IHBvc2l0aW9uWS5keW5hbWljSGVpZ2h0QmVsb3c7XG59O1xuXG5DcmVzY2VuZG9FbGVtLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG5cdGlmICh0aGlzLnBpdGNoID09PSB1bmRlZmluZWQpXG5cdFx0d2luZG93LmNvbnNvbGUuZXJyb3IoXCJDcmVzY2VuZG8gRWxlbWVudCB5LWNvb3JkaW5hdGUgbm90IHNldC5cIik7XG5cdHZhciB5ID0gcmVuZGVyZXIuY2FsY1kodGhpcy5waXRjaCkgKyA0OyAvLyBUaGlzIGlzIHRoZSB0b3AgcGl4ZWwgdG8gdXNlIChpdCBpcyBvZmZzZXQgYSBsaXR0bGUgc28gdGhhdCBpdCBsb29rcyBnb29kIHdpdGggdGhlIHZvbHVtZSBtYXJrcy4pXG5cdHZhciBoZWlnaHQgPSA4O1xuXHRpZiAodGhpcy5kaXIgPT09IFwiPFwiKSB7XG5cdFx0dGhpcy5kcmF3TGluZShyZW5kZXJlciwgeStoZWlnaHQvMiwgeSk7XG5cdFx0dGhpcy5kcmF3TGluZShyZW5kZXJlciwgeStoZWlnaHQvMiwgeStoZWlnaHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuZHJhd0xpbmUocmVuZGVyZXIsIHksIHkraGVpZ2h0LzIpO1xuXHRcdHRoaXMuZHJhd0xpbmUocmVuZGVyZXIsIHkraGVpZ2h0LCB5K2hlaWdodC8yKTtcblx0fVxufTtcblxuQ3Jlc2NlbmRvRWxlbS5wcm90b3R5cGUuZHJhd0xpbmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHkxLCB5Mikge1xuXHQvLyBUT0RPLVBFUjogVGhpcyBpcyBqdXN0IGEgcXVpY2sgaGFjayB0byBtYWtlIHRoZSBkeW5hbWljIG1hcmtzIG5vdCBjcmFzaCBpZiB0aGV5IGFyZSBtaXNtYXRjaGVkLiBTZWUgdGhlIHNsdXIgdHJlYXRtZW50IGZvciB0aGUgd2F5IHRvIGdldCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQuXG5cdHZhciBsZWZ0ID0gdGhpcy5hbmNob3IxID8gdGhpcy5hbmNob3IxLnggOiAwO1xuXHR2YXIgcmlnaHQgPSB0aGlzLmFuY2hvcjIgPyB0aGlzLmFuY2hvcjIueCA6IDgwMDtcblx0dmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmXCIsXG5cdFx0bGVmdCwgeTEsIHJpZ2h0LCB5Mik7XG5cdHJlbmRlcmVyLnByaW50UGF0aCh7cGF0aDpwYXRoU3RyaW5nLCBzdHJva2U6XCIjMDAwMDAwXCIsICdjbGFzcyc6IHJlbmRlcmVyLmFkZENsYXNzZXMoJ2RlY29yYXRpb24nKX0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDcmVzY2VuZG9FbGVtO1xuIiwiLy8gICAgYWJjX3RpZV9lbGVtZW50LmpzOiBEZWZpbml0aW9uIG9mIHRoZSBUaWVFbGVtZW50IGNsYXNzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgVGllRWxlbSA9IGZ1bmN0aW9uIFRpZUVsZW0ob3B0aW9ucykge1xuLy9cdGNvbnNvbGUubG9nKFwiY29uc3RydWN0b3JcIiwgb3B0aW9ucy5hbmNob3IxID8gb3B0aW9ucy5hbmNob3IxLnBpdGNoIDogXCJOL0FcIiwgb3B0aW9ucy5hbmNob3IyID8gb3B0aW9ucy5hbmNob3IyLnBpdGNoIDogXCJOL0FcIiwgb3B0aW9ucy5pc1RpZSwgb3B0aW9ucy5pc0dyYWNlKTtcblx0dGhpcy5hbmNob3IxID0gb3B0aW9ucy5hbmNob3IxOyAvLyBtdXN0IGhhdmUgYSAueCBhbmQgYSAucGl0Y2gsIGFuZCBhIC5wYXJlbnQgcHJvcGVydHkgb3IgYmUgbnVsbCAobWVhbnMgc3RhcnRzIGF0IHRoZSBcImJlZ2lubmluZ1wiIG9mIHRoZSBsaW5lIC0gYWZ0ZXIga2V5c2lnKVxuXHR0aGlzLmFuY2hvcjIgPSBvcHRpb25zLmFuY2hvcjI7IC8vIG11c3QgaGF2ZSBhIC54IGFuZCBhIC5waXRjaCBwcm9wZXJ0eSBvciBiZSBudWxsIChtZWFucyBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpXG5cdGlmIChvcHRpb25zLmlzR3JhY2UpXG5cdFx0dGhpcy5pc0dyYWNlID0gdHJ1ZTtcblx0aWYgKG9wdGlvbnMuZml4ZWRZKVxuXHRcdHRoaXMuZml4ZWRZID0gdHJ1ZTtcblx0aWYgKG9wdGlvbnMuc3RlbURpcilcblx0XHR0aGlzLnN0ZW1EaXIgPSBvcHRpb25zLnN0ZW1EaXI7XG5cdGlmIChvcHRpb25zLnZvaWNlTnVtYmVyICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy52b2ljZU51bWJlciA9IG9wdGlvbnMudm9pY2VOdW1iZXI7XG5cdHRoaXMuaW50ZXJuYWxOb3RlcyA9IFtdO1xufTtcblxuVGllRWxlbS5wcm90b3R5cGUuYWRkSW50ZXJuYWxOb3RlID0gZnVuY3Rpb24obm90ZSkge1xuXHR0aGlzLmludGVybmFsTm90ZXMucHVzaChub3RlKTtcbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLnNldEVuZEFuY2hvciA9IGZ1bmN0aW9uKGFuY2hvcjIpIHtcbi8vXHRjb25zb2xlLmxvZyhcImVuZFwiLCB0aGlzLmFuY2hvcjEgPyB0aGlzLmFuY2hvcjEucGl0Y2ggOiBcIk4vQVwiLCBhbmNob3IyID8gYW5jaG9yMi5waXRjaCA6IFwiTi9BXCIsIHRoaXMuaXNUaWUsIHRoaXMuaXNHcmFjZSk7XG5cdHRoaXMuYW5jaG9yMiA9IGFuY2hvcjI7IC8vIG11c3QgaGF2ZSBhIC54IGFuZCBhIC5waXRjaCBwcm9wZXJ0eSBvciBiZSBudWxsIChtZWFucyBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpXG59O1xuXG4vLyBJZiB3ZSBlbmNvdW50ZXIgYSByZXBlYXQgc2lnbiwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGV4dGVuZCBlaXRoZXIgYSB0aWUgb3IgYSBzbHVyIHBhc3QgaXQsIHNvIHRoZXNlIGFyZSBjYWxsZWQgdG8gYmUgYSBsaW1pdC5cblRpZUVsZW0ucHJvdG90eXBlLnNldFN0YXJ0WCA9IGZ1bmN0aW9uKHN0YXJ0TGltaXRFbGVtKSB7XG5cdHRoaXMuc3RhcnRMaW1pdFggPSBzdGFydExpbWl0RWxlbTtcbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLnNldEVuZFggPSBmdW5jdGlvbihlbmRMaW1pdEVsZW0pIHtcblx0dGhpcy5lbmRMaW1pdFggPSBlbmRMaW1pdEVsZW07XG59O1xuXG5UaWVFbGVtLnByb3RvdHlwZS5zZXRIaW50ID0gZnVuY3Rpb24gKCkge1xuXHR0aGlzLmhpbnQgPSB0cnVlO1xufTtcblxuVGllRWxlbS5wcm90b3R5cGUuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzID0gZnVuY3Rpb24ocG9zaXRpb25ZKSB7XG5cdC8vIERvZXNuJ3QgZGVwZW5kIG9uIHRoZSBoaWdoZXN0IGFuZCBsb3dlc3QsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlLlxufTtcblxuVGllRWxlbS5wcm90b3R5cGUuY2FsY1RpZURpcmVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0Ly8gVGhlIHJ1bGVzOlxuXHQvLyAxKSBJZiBpdCBpcyBpbiBhIGdyYWNlIG5vdGUgZ3JvdXAsIHRoZW4gdGhlIGRpcmVjdGlvbiBpcyBhbHdheXMgQkVMT1cuXG5cdC8vIDIpIElmIGl0IGlzIGluIGEgc2luZ2xlIHZvaWNlLCB0aGVuIHRoZSBkaXJlY3Rpb24gaXMgYWx3YXlzIE9QUE9TSVRFIG9mIHRoZSBzdGVtIChvciB3aGVyZSB0aGUgc3RlbSB3b3VsZCBoYXZlIGJlZW4gaW4gdGhlIGNhc2Ugb2Ygd2hvbGUgbm90ZXMuKVxuXHQvLyAzKSBJZiB0aGUgc3RlbSBkaXJlY3Rpb24gaXMgZm9yY2VkIChwcm9iYWJseSBiZWNhdXNlIHRoZXJlIGFyZSB0d28gdm9pY2VzIG9uIHRoZSBzYW1lIGxpbmUpLCB0aGVuIHRoZSBkaXJlY3Rpb24gaXMgdGhlIFNBTUUgYXMgdGhlIHN0ZW0gZGlyZWN0aW9uLlxuXG5cdGlmICh0aGlzLmlzR3JhY2UpXG5cdFx0dGhpcy5hYm92ZSA9IGZhbHNlO1xuXHRlbHNlIGlmICh0aGlzLnZvaWNlTnVtYmVyID09PSAwKVxuXHRcdHRoaXMuYWJvdmUgPSB0cnVlO1xuXHRlbHNlIGlmICh0aGlzLnZvaWNlTnVtYmVyID4gMClcblx0XHR0aGlzLmFib3ZlID0gZmFsc2U7XG5cdGVsc2Uge1xuXHRcdHZhciByZWZlcmVuY2VQaXRjaDtcblx0XHRpZiAodGhpcy5hbmNob3IxKVxuXHRcdFx0cmVmZXJlbmNlUGl0Y2ggPSB0aGlzLmFuY2hvcjEucGl0Y2g7XG5cdFx0ZWxzZSBpZiAodGhpcy5hbmNob3IyKVxuXHRcdFx0cmVmZXJlbmNlUGl0Y2ggPSB0aGlzLmFuY2hvcjIucGl0Y2g7XG5cdFx0ZWxzZVxuXHRcdFx0cmVmZXJlbmNlUGl0Y2ggPSAxNDsgLy8gVE9ETy1QRVI6IHRoaXMgY2FuJ3QgcmVhbGx5IGhhcHBlbiBub3JtYWxseS4gVGhpcyB3b3VsZCBpbXBseSB0aGF0IGEgdGllIGNyb3NzZWQgb3ZlciB0aHJlZSBsaW5lcywgc29tZXRoaW5nIGxpa2UgXCJDLVxcbnpcXG5DXCJcblx0XHQvLyBQdXQgdGhlIGFyYyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHRoZSBzdGVtLiBUaGF0IGlzbid0IGFsd2F5cyB0aGUgcGl0Y2ggaWYgb25lIG9yIGJvdGggb2YgdGhlIG5vdGVzIGFyZSBiZWFtZWQgd2l0aCBzb21ldGhpbmcgdGhhdCBhZmZlY3RzIGl0cyBzdGVtLlxuXHRcdGlmICgodGhpcy5hbmNob3IxICYmIHRoaXMuYW5jaG9yMS5zdGVtRGlyID09PSAnZG93bicpICYmICh0aGlzLmFuY2hvcjIgJiYgdGhpcy5hbmNob3IyLnN0ZW1EaXIgPT09IFwiZG93blwiKSlcblx0XHRcdHRoaXMuYWJvdmUgPSB0cnVlO1xuXHRcdGVsc2UgaWYgKCh0aGlzLmFuY2hvcjEgJiYgdGhpcy5hbmNob3IxLnN0ZW1EaXIgPT09ICd1cCcpICYmICh0aGlzLmFuY2hvcjIgJiYgdGhpcy5hbmNob3IyLnN0ZW1EaXIgPT09IFwidXBcIikpXG5cdFx0XHR0aGlzLmFib3ZlID0gZmFsc2U7XG5cdFx0ZWxzZSBpZiAodGhpcy5hbmNob3IxICYmIHRoaXMuYW5jaG9yMilcblx0XHRcdHRoaXMuYWJvdmUgPSByZWZlcmVuY2VQaXRjaCA+PSA2O1xuXHRcdGVsc2UgaWYgKHRoaXMuYW5jaG9yMSlcblx0XHRcdHRoaXMuYWJvdmUgPSB0aGlzLmFuY2hvcjEuc3RlbURpciA9PT0gXCJkb3duXCI7XG5cdFx0ZWxzZSBpZiAodGhpcy5hbmNob3IyKVxuXHRcdFx0dGhpcy5hYm92ZSA9IHRoaXMuYW5jaG9yMi5zdGVtRGlyID09PSBcImRvd25cIjtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmFib3ZlID0gcmVmZXJlbmNlUGl0Y2ggPj0gNjtcblx0fVxufTtcblxuLy8gRnJvbSBcInN0YW5kYXJkIG11c2ljIG5vdGF0aW9uIHByYWN0aWNlXCIgYnkgTXVzaWMgUHVibGlzaGVyc+KAmSBBc3NvY2lhdGlvbjpcbi8vIDEpIFNsdXJzIGFyZSBwbGFjZWQgdW5kZXIgdGhlIG5vdGUgaGVhZHMgaWYgYWxsIHN0ZW1zIGdvIHVwLlxuLy8gMikgU2x1cnMgYXJlIHBsYWNlZCBvdmVyIHRoZSBub3RlIGhlYWRzIGlmIGFsbCBzdGVtcyBnbyBkb3duLlxuLy8gMykgSWYgdGhlcmUgYXJlIGJvdGggdXAgc3RlbXMgYW5kIGRvd24gc3RlbXMsIHByZWZlciBwbGFjaW5nIHRoZSBzbHVyIG92ZXIuXG4vLyA0KSBXaGVuIHRoZSBzdGFmZiBoYXMgb3Bwb3NpdGUgc3RlbW1lZCB2b2ljZXMsIGFsbCBzbHVycyBzaG91bGQgYmUgb24gdGhlIHN0ZW1tZWQgc2lkZS5cblxuVGllRWxlbS5wcm90b3R5cGUuY2FsY1NsdXJEaXJlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdGlmICh0aGlzLmlzR3JhY2UpXG5cdFx0dGhpcy5hYm92ZSA9IGZhbHNlO1xuXHRlbHNlIGlmICh0aGlzLnZvaWNlTnVtYmVyID09PSAwKVxuXHRcdHRoaXMuYWJvdmUgPSB0cnVlO1xuXHRlbHNlIGlmICh0aGlzLnZvaWNlTnVtYmVyID4gMClcblx0XHR0aGlzLmFib3ZlID0gZmFsc2U7XG5cdGVsc2Uge1xuXHRcdHZhciBoYXNEb3duU3RlbSA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmFuY2hvcjEgJiYgdGhpcy5hbmNob3IxLnN0ZW1EaXIgPT09IFwiZG93blwiKVxuXHRcdFx0aGFzRG93blN0ZW0gPSB0cnVlO1xuXHRcdGlmICh0aGlzLmFuY2hvcjIgJiYgdGhpcy5hbmNob3IyLnN0ZW1EaXIgPT09IFwiZG93blwiKVxuXHRcdFx0aGFzRG93blN0ZW0gPSB0cnVlO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcm5hbE5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgbiA9IHRoaXMuaW50ZXJuYWxOb3Rlc1tpXTtcblx0XHRcdGlmIChuLnN0ZW1EaXIgPT09IFwiZG93blwiKVxuXHRcdFx0XHRoYXNEb3duU3RlbSA9IHRydWU7XG5cdFx0fVxuXHRcdHRoaXMuYWJvdmUgPSBoYXNEb3duU3RlbTtcblx0fVxufTtcblxuVGllRWxlbS5wcm90b3R5cGUuY2FsY1ggPSBmdW5jdGlvbiAobGluZVN0YXJ0WCwgbGluZUVuZFgpIHtcblx0aWYgKHRoaXMuYW5jaG9yMSkge1xuXHRcdHRoaXMuc3RhcnRYID0gdGhpcy5hbmNob3IxLng7IC8vIFRoZSBub3JtYWwgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHN0YXJ0aW5nIGVsZW1lbnQgdG8gYXR0YWNoIHRvLlxuXHRcdGlmICh0aGlzLmFuY2hvcjEuc2NhbGV4IDwgMSkgLy8gdGhpcyBpcyBhIGdyYWNlIG5vdGUgLSBkb24ndCBvZmZzZXQgdGhlIHRpZSBhcyBtdWNoLlxuXHRcdFx0dGhpcy5zdGFydFggLT0gMztcblx0fSBlbHNlIGlmICh0aGlzLnN0YXJ0TGltaXRYKVxuXHRcdHRoaXMuc3RhcnRYID0gdGhpcy5zdGFydExpbWl0WC54K3RoaXMuc3RhcnRMaW1pdFgudzsgLy8gaWYgdGhlcmUgaXMgbm8gc3RhcnQgZWxlbWVudCwgYnV0IHRoZXJlIGlzIGEgcmVwZWF0IG1hcmsgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgbGluZS5cblx0ZWxzZVxuXHRcdHRoaXMuc3RhcnRYID0gbGluZVN0YXJ0WDsgLy8gVGhlcmUgaXMgbm8gZWxlbWVudCBhbmQgbm8gcmVwZWF0IG1hcms6IGV4dGVuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLlxuXG5cdGlmICh0aGlzLmFuY2hvcjIpXG5cdFx0dGhpcy5lbmRYID0gdGhpcy5hbmNob3IyLng7IC8vIFRoZSBub3JtYWwgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHN0YXJ0aW5nIGVsZW1lbnQgdG8gYXR0YWNoIHRvLlxuXHRlbHNlIGlmICh0aGlzLmVuZExpbWl0WClcblx0XHR0aGlzLmVuZFggPSB0aGlzLmVuZExpbWl0WC54OyAvLyBpZiB0aGVyZSBpcyBubyBzdGFydCBlbGVtZW50LCBidXQgdGhlcmUgaXMgYSByZXBlYXQgbWFyayBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLlxuXHRlbHNlXG5cdFx0dGhpcy5lbmRYID0gbGluZUVuZFg7IC8vIFRoZXJlIGlzIG5vIGVsZW1lbnQgYW5kIG5vIHJlcGVhdCBtYXJrOiBleHRlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS5cbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLmNhbGNUaWVZID0gZnVuY3Rpb24gKCkge1xuXHQvLyBJZiB0aGUgdGllIGNvbWVzIGZyb20gYW5vdGhlciBsaW5lLCB0aGVuIG9uZSBvciBib3RoIGFuY2hvcnMgd2lsbCBiZSBtaXNzaW5nLlxuXHRpZiAodGhpcy5hbmNob3IxKVxuXHRcdHRoaXMuc3RhcnRZID0gdGhpcy5hbmNob3IxLnBpdGNoO1xuXHRlbHNlIGlmICh0aGlzLmFuY2hvcjIpXG5cdFx0dGhpcy5zdGFydFkgPSB0aGlzLmFuY2hvcjIucGl0Y2g7XG5cdGVsc2Vcblx0XHR0aGlzLnN0YXJ0WSA9IHRoaXMuYWJvdmUgPyAxNCA6IDA7XG5cblx0aWYgKHRoaXMuYW5jaG9yMilcblx0XHR0aGlzLmVuZFkgPSB0aGlzLmFuY2hvcjIucGl0Y2g7XG5cdGVsc2UgaWYgKHRoaXMuYW5jaG9yMSlcblx0XHR0aGlzLmVuZFkgPSB0aGlzLmFuY2hvcjEucGl0Y2g7XG5cdGVsc2Vcblx0XHR0aGlzLmVuZFkgPSB0aGlzLmFib3ZlID8gMTQgOiAwO1xufTtcblxuLy8gRnJvbSBcInN0YW5kYXJkIG11c2ljIG5vdGF0aW9uIHByYWN0aWNlXCIgYnkgTXVzaWMgUHVibGlzaGVyc+KAmSBBc3NvY2lhdGlvbjpcbi8vIDEpIElmIHRoZSBhbmNob3Igbm90ZSBpcyBkb3duIHN0ZW0sIHRoZSBzbHVyIHBvaW50cyB0byB0aGUgbm90ZSBoZWFkLlxuLy8gMikgSWYgdGhlIGFuY2hvciBub3RlIGlzIHVwIHN0ZW0sIGFuZCB0aGUgc2x1ciBpcyBvdmVyLCB0aGVuIHBvaW50IHRvIG1pZGRsZSBvZiBzdGVtLlxuXG5UaWVFbGVtLnByb3RvdHlwZS5jYWxjU2x1clkgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICh0aGlzLmFuY2hvcjEgJiYgdGhpcy5hbmNob3IyKSB7XG5cdFx0aWYgKHRoaXMuYWJvdmUgJiYgdGhpcy5hbmNob3IxLnN0ZW1EaXIgPT09IFwidXBcIiAmJiAhdGhpcy5maXhlZFkpIHtcblx0XHRcdHRoaXMuc3RhcnRZID0gKHRoaXMuYW5jaG9yMS5oaWdoZXN0VmVydCArIHRoaXMuYW5jaG9yMS5waXRjaCkgLyAyO1xuXHRcdFx0dGhpcy5zdGFydFggKz0gdGhpcy5hbmNob3IxLncvMjsgLy8gV2hlbiBnb2luZyB0byB0aGUgbWlkZGxlIG9mIHRoZSBzdGVtLCBidW1wIHRoZSBsaW5lIHRvIHRoZSByaWdodCBhIGxpdHRsZSBiaXQgdG8gbWFrZSBpdCBsb29rIHJpZ2h0LlxuXHRcdH0gZWxzZVxuXHRcdFx0dGhpcy5zdGFydFkgPSB0aGlzLmFuY2hvcjEucGl0Y2g7XG5cblx0XHQvLyBJZiB0aGUgY2xvc2luZyBub3RlIGhhcyBhbiB1cCBzdGVtLCBhbmQgaXQgaXMgYmVhbWVkLCBhbmQgaXQgaXNuJ3QgdGhlIGZpcnN0IG5vdGUgaW4gdGhlIGJlYW0sIHRoZW4gdGhlIGJlYW0gd2lsbCBnZXQgaW4gdGhlIHdheS5cblx0XHR2YXIgYmVhbUludGVyZmVyZXMgPSB0aGlzLmFuY2hvcjIucGFyZW50LmJlYW0gJiYgdGhpcy5hbmNob3IyLnBhcmVudC5iZWFtLnN0ZW1zVXAgJiYgdGhpcy5hbmNob3IyLnBhcmVudC5iZWFtLmVsZW1zWzBdICE9PSB0aGlzLmFuY2hvcjIucGFyZW50O1xuXHRcdHZhciBtaWRQb2ludCA9ICh0aGlzLmFuY2hvcjIuaGlnaGVzdFZlcnQgKyB0aGlzLmFuY2hvcjIucGl0Y2gpIC8gMjtcblx0XHRpZiAodGhpcy5hYm92ZSAmJiB0aGlzLmFuY2hvcjIuc3RlbURpciA9PT0gXCJ1cFwiICYmICF0aGlzLmZpeGVkWSAmJiAhYmVhbUludGVyZmVyZXMgJiYgKG1pZFBvaW50IDwgdGhpcy5zdGFydFkpKSB7XG5cdFx0XHR0aGlzLmVuZFkgPSBtaWRQb2ludDtcblx0XHRcdHRoaXMuZW5kWCArPSB0aGlzLmFuY2hvcjIudy8yOyAvLyBXaGVuIGdvaW5nIHRvIHRoZSBtaWRkbGUgb2YgdGhlIHN0ZW0sIGJ1bXAgdGhlIGxpbmUgdG8gdGhlIHJpZ2h0IGEgbGl0dGxlIGJpdCB0byBtYWtlIGl0IGxvb2sgcmlnaHQuXG5cdFx0fSBlbHNlXG5cdFx0XHR0aGlzLmVuZFkgPSB0aGlzLmFib3ZlICYmIGJlYW1JbnRlcmZlcmVzID8gdGhpcy5hbmNob3IyLmhpZ2hlc3RWZXJ0IDogdGhpcy5hbmNob3IyLnBpdGNoO1xuXG5cdH0gZWxzZSBpZiAodGhpcy5hbmNob3IxKSB7XG5cdFx0dGhpcy5zdGFydFkgPSB0aGlzLmVuZFkgPSB0aGlzLmFuY2hvcjEucGl0Y2g7XG5cdH0gZWxzZSBpZiAodGhpcy5hbmNob3IyKSB7XG5cdFx0dGhpcy5zdGFydFkgPSB0aGlzLmVuZFkgPSB0aGlzLmFuY2hvcjIucGl0Y2g7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0aGUgc2x1ciBjb3ZlcnMgdGhlIGVudGlyZSBsaW5lLlxuXHRcdC8vIFRPRE8tUEVSOiBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWFsIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBsaW5lIGFyZS5cblx0XHR0aGlzLnN0YXJ0WSA9IHRoaXMuYWJvdmUgPyAxNCA6IDA7XG5cdFx0dGhpcy5lbmRZID0gdGhpcy5hYm92ZSA/IDE0IDogMDtcblx0fVxufTtcblxuVGllRWxlbS5wcm90b3R5cGUuYXZvaWRDb2xsaXNpb25BYm92ZSA9IGZ1bmN0aW9uICgpIHtcblx0Ly8gRG91YmxlIGNoZWNrIHRoYXQgYW4gaW50ZXJpb3Igbm90ZSBpbiB0aGUgc2x1ciBpc24ndCBzbyBoaWdoIHRoYXQgaXQgaW50ZXJmZXJlcy5cblx0aWYgKHRoaXMuYWJvdmUpIHtcblx0XHR2YXIgbWF4SW5uZXJIZWlnaHQgPSAtNTA7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmludGVybmFsTm90ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLmludGVybmFsTm90ZXNbaV0uaGlnaGVzdFZlcnQgPiBtYXhJbm5lckhlaWdodClcblx0XHRcdFx0bWF4SW5uZXJIZWlnaHQgPSB0aGlzLmludGVybmFsTm90ZXNbaV0uaGlnaGVzdFZlcnQ7XG5cdFx0fVxuXHRcdGlmIChtYXhJbm5lckhlaWdodCA+IHRoaXMuc3RhcnRZICYmIG1heElubmVySGVpZ2h0ID4gdGhpcy5lbmRZKVxuXHRcdFx0dGhpcy5zdGFydFkgPSB0aGlzLmVuZFkgPSBtYXhJbm5lckhlaWdodCAtIDE7XG5cdH1cbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLmxheW91dCA9IGZ1bmN0aW9uIChsaW5lU3RhcnRYLCBsaW5lRW5kWCkge1xuXHQvLyBXZSBub3cgaGF2ZSBhbGwgb2YgdGhlIGlucHV0IHZhcmlhYmxlcyBzZXQsIHNvIHdlIGNhbiBmaWd1cmUgb3V0IHRoZSBzdGFydCBhbmQgZW5kaW5nIHgseSBjb29yZGluYXRlcywgYW5kIGZpbmFsaXplIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFyYy5cblxuXHQvLyBUaWVzIGFuZCBzbHVycyBhcmUgaGFuZGxlZCBhIGxpdHRsZSBkaWZmZXJlbnRseSwgc28gZG8gY2FsY3VsYXRpb25zIGZvciB0aGVtIHNlcGFyYXRlbHkuXG5cdGlmICghdGhpcy5hbmNob3IxIHx8ICF0aGlzLmFuY2hvcjIpXG5cdFx0dGhpcy5pc1RpZSA9IHRydWU7IC8vIGlmIHRoZSBzbHVyIGdvZXMgb2ZmIHRoZSBlbmQgb2YgdGhlIGxpbmUsIHRoZW4gZHJhdyBpdCBsaWtlIGEgdGllXG5cdGVsc2UgaWYgKHRoaXMuYW5jaG9yMS5waXRjaCA9PT0gdGhpcy5hbmNob3IyLnBpdGNoICYmIHRoaXMuaW50ZXJuYWxOb3Rlcy5sZW5ndGggPT09IDApXG5cdFx0dGhpcy5pc1RpZSA9IHRydWU7XG5cdGVsc2Vcblx0XHR0aGlzLmlzVGllID0gZmFsc2U7XG5cblx0Ly8gVE9ETy1QRVI6IE5vdCBzdXJlIHdoeSB0aGlzIHdvdWxkIGJlIG5lZWRlZCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciB0byBmaWd1cmUgb3V0IGEgd2F5IHRvIGhhdmUgdGhlIGFuY2hvcnMgYmUgaW1tdXRhYmxlIGhlcmUgYW55d2F5LlxuXHQvLyBpZiAodGhpcy5pc1RpZSkge1xuXHQvLyBcdGlmICh0aGlzLmFuY2hvcjEpIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdGllIGNvbWVzIGZyb20gdGhlIHByZXZpb3VzIGxpbmUuXG5cdC8vIFx0XHR0aGlzLmFuY2hvcjEuaXNUaWUgPSB0cnVlO1xuXHQvLyBcdGlmICh0aGlzLmFuY2hvcjIpIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdGllIGRvZXMgbm90IGdvIHRvIHRoZSBuZXh0IGxpbmUuXG5cdC8vIFx0XHR0aGlzLmFuY2hvcjIuaXNUaWUgPSB0cnVlO1xuXHQvLyB9XG5cblx0aWYgKHRoaXMuaXNUaWUpIHtcblx0XHR0aGlzLmNhbGNUaWVEaXJlY3Rpb24oKTtcblx0XHQvLyBUT0RPLVBFUjogTm90IHN1cmUgd2h5IHRoaXMgd291bGQgYmUgbmVlZGVkLCBidXQgaXQgd291bGQgYmUgYmV0dGVyIHRvIGZpZ3VyZSBvdXQgYSB3YXkgdG8gaGF2ZSB0aGUgYW5jaG9ycyBiZSBpbW11dGFibGUgaGVyZSBhbnl3YXkuXG5cdFx0Ly8gaWYgKHRoaXMuYW5jaG9yMSkgLy8gdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB0aWUgY29tZXMgZnJvbSB0aGUgcHJldmlvdXMgbGluZS5cblx0XHQvLyBcdHRoaXMuYW5jaG9yMS50aWVBYm92ZSA9IHRoaXMuYWJvdmU7XG5cdFx0Ly8gaWYgKHRoaXMuYW5jaG9yMikgLy8gdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB0aWUgZ29lcyB0byB0aGUgbmV4dCBsaW5lLlxuXHRcdC8vIFx0dGhpcy5hbmNob3IyLnRpZUFib3ZlID0gdGhpcy5hYm92ZTtcblx0XHR0aGlzLmNhbGNYKGxpbmVTdGFydFgsIGxpbmVFbmRYKTtcblx0XHR0aGlzLmNhbGNUaWVZKCk7XG5cblx0fSBlbHNlIHtcblx0XHR0aGlzLmNhbGNTbHVyRGlyZWN0aW9uKCk7XG5cdFx0dGhpcy5jYWxjWChsaW5lU3RhcnRYLCBsaW5lRW5kWCk7XG5cdFx0dGhpcy5jYWxjU2x1clkoKTtcblx0fVxuXHR0aGlzLmF2b2lkQ29sbGlzaW9uQWJvdmUoKTtcbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGxpbmVzdGFydHgsIGxpbmVlbmR4KSB7XG5cdHRoaXMubGF5b3V0KGxpbmVzdGFydHgsIGxpbmVlbmR4KTtcblxuXHR2YXIga2xhc3M7XG5cdGlmICh0aGlzLmhpbnQpXG5cdFx0XHRrbGFzcyA9IFwiYWJjanMtaGludFwiO1xuXHR2YXIgZnVkZ2VZID0gIHRoaXMuZml4ZWRZID8gMS41IDogMDsgLy8gVE9ETy1QRVI6IFRoaXMganVzdCBjb21wZW5zYXRlcyBmb3IgZHJhd0FyYywgd2hpY2ggY29udGFpbnMgdG9vIG11Y2gga25vd2xlZGdlIG9mIHRpZXMgYW5kIHNsdXJzLlxuXHRyZW5kZXJlci5kcmF3QXJjKHRoaXMuc3RhcnRYLCB0aGlzLmVuZFgsIHRoaXMuc3RhcnRZK2Z1ZGdlWSwgdGhpcy5lbmRZK2Z1ZGdlWSwgIHRoaXMuYWJvdmUsIGtsYXNzLCB0aGlzLmlzVGllKTtcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWVFbGVtO1xuIiwiLy8gYWJjX2RlY29yYXRpb24uanM6IENyZWF0ZXMgYSBkYXRhIHN0cnVjdHVyZSBzdWl0YWJsZSBmb3IgcHJpbnRpbmcgYSBsaW5lIG9mIGFiY1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSAmIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLypnbG9iYWwgd2luZG93ICovXG5cbnZhciBEeW5hbWljRGVjb3JhdGlvbiA9IHJlcXVpcmUoJy4vYWJjX2R5bmFtaWNfZGVjb3JhdGlvbicpO1xudmFyIENyZXNjZW5kb0VsZW0gPSByZXF1aXJlKCcuL2FiY19jcmVzY2VuZG9fZWxlbWVudCcpO1xudmFyIGdseXBocyA9IHJlcXVpcmUoJy4vYWJjX2dseXBocycpO1xudmFyIFJlbGF0aXZlRWxlbWVudCA9IHJlcXVpcmUoJy4vYWJjX3JlbGF0aXZlX2VsZW1lbnQnKTtcbnZhciBUaWVFbGVtID0gcmVxdWlyZSgnLi9hYmNfdGllX2VsZW1lbnQnKTtcblxudmFyIERlY29yYXRpb247XG5cbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0RGVjb3JhdGlvbiA9IGZ1bmN0aW9uIERlY29yYXRpb24oKSB7XG5cdFx0dGhpcy5zdGFydERpbWludWVuZG9YID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuc3RhcnRDcmVzY2VuZG9YID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMubWluVG9wID0gMTI7XHQvLyBUT0RPLVBFUjogdGhpcyBpcyBhc3N1bWluZyBhIDUtbGluZSBzdGFmZi4gUGFzcyB0aGF0IGluZm8gaW4uXG5cdFx0dGhpcy5taW5Cb3R0b20gPSAwO1xuXHR9O1xuXG5cdHZhciBjbG9zZURlY29yYXRpb24gPSBmdW5jdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCByb29tdGFrZW4sIGRpciwgbWluUGl0Y2gpIHtcblx0XHR2YXIgeVBvcztcblx0XHRmb3IgKHZhciBpPTA7aTxkZWNvcmF0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZGVjb3JhdGlvbltpXT09PVwic3RhY2NhdG9cIiB8fCBkZWNvcmF0aW9uW2ldPT09XCJ0ZW51dG9cIiB8fCBkZWNvcmF0aW9uW2ldID09PSBcImFjY2VudFwiKSB7XG5cdFx0XHRcdHZhciBzeW1ib2wgPSBcInNjcmlwdHMuXCIgKyBkZWNvcmF0aW9uW2ldO1xuXHRcdFx0XHRpZiAoZGVjb3JhdGlvbltpXSA9PT0gXCJhY2NlbnRcIikgc3ltYm9sID0gXCJzY3JpcHRzLnNmb3J6YXRvXCI7XG5cdFx0XHRcdGlmICh5UG9zID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0eVBvcyA9IChkaXI9PT1cImRvd25cIikgPyBwaXRjaCsyOm1pblBpdGNoLTI7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR5UG9zID0gKGRpcj09PVwiZG93blwiKSA/IHlQb3MrMjp5UG9zLTI7XG5cdFx0XHRcdGlmIChkZWNvcmF0aW9uW2ldID09PSBcImFjY2VudFwiKSB7XG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHBsYWNlIHRoZSBhY2NlbnQgdGhyZWUgcGl0Y2hlcyBhd2F5LCBubyBtYXR0ZXIgd2hldGhlciB0aGF0IGlzIGEgbGluZSBvciBzcGFjZS5cblx0XHRcdFx0XHRpZiAoZGlyID09PSBcInVwXCIpIHlQb3MtLTtcblx0XHRcdFx0XHRlbHNlIHlQb3MrKztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBkb24ndCBwbGFjZSBvbiBhIHN0YXZlIGxpbmUuIFRoZSBzdGF2ZSBsaW5lcyBhcmUgMiw0LDYsOCwxMFxuXHRcdFx0XHRcdHN3aXRjaCAoeVBvcykge1xuXHRcdFx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHRcdFx0Y2FzZSA2OlxuXHRcdFx0XHRcdFx0Y2FzZSA4OlxuXHRcdFx0XHRcdFx0Y2FzZSAxMDpcblx0XHRcdFx0XHRcdFx0aWYgKGRpciA9PT0gXCJ1cFwiKSB5UG9zLS07XG5cdFx0XHRcdFx0XHRcdGVsc2UgeVBvcysrO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHBpdGNoPjkpIHlQb3MrKzsgLy8gdGFrZSB1cCBzb21lIHJvb20gb2YgdGhvc2UgdGhhdCBhcmUgYWJvdmVcblx0XHRcdFx0dmFyIGRlbHRhWCA9IHdpZHRoLzI7XG5cdFx0XHRcdGlmIChnbHlwaHMuZ2V0U3ltYm9sQWxpZ24oc3ltYm9sKSE9PVwiY2VudGVyXCIpIHtcblx0XHRcdFx0XHRkZWx0YVggLT0gKGdseXBocy5nZXRTeW1ib2xXaWR0aChzeW1ib2wpLzIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFic2VsZW0uYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChzeW1ib2wsIGRlbHRhWCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWJvbCksIHlQb3MpKTtcblx0XHRcdH1cblx0XHRcdGlmIChkZWNvcmF0aW9uW2ldPT09XCJzbGlkZVwiICYmIGFic2VsZW0uaGVhZHNbMF0pIHtcblx0XHRcdFx0dmFyIHlQb3MyID0gYWJzZWxlbS5oZWFkc1swXS5waXRjaDtcblx0XHRcdFx0eVBvczIgLT0gMjsgLy8gVE9ETy1QRVI6IG5vdCBzdXJlIHdoYXQgdGhpcyBmdWRnZSBmYWN0b3IgaXMuXG5cdFx0XHRcdHZhciBibGFuazEgPSBuZXcgUmVsYXRpdmVFbGVtZW50KFwiXCIsIC1yb29tdGFrZW4tMTUsIDAsIHlQb3MyLTEpO1xuXHRcdFx0XHR2YXIgYmxhbmsyID0gbmV3IFJlbGF0aXZlRWxlbWVudChcIlwiLCAtcm9vbXRha2VuLTUsIDAsIHlQb3MyKzEpO1xuXHRcdFx0XHRhYnNlbGVtLmFkZENoaWxkKGJsYW5rMSk7XG5cdFx0XHRcdGFic2VsZW0uYWRkQ2hpbGQoYmxhbmsyKTtcblx0XHRcdFx0dm9pY2UuYWRkT3RoZXIobmV3IFRpZUVsZW0oeyBhbmNob3IxOiBibGFuazEsIGFuY2hvcjI6IGJsYW5rMiwgZml4ZWRZOiB0cnVlfSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoeVBvcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0eVBvcyA9IHBpdGNoO1xuXG5cdFx0cmV0dXJuIHsgYWJvdmU6IHlQb3MsIGJlbG93OiBhYnNlbGVtLmJvdHRvbSB9O1xuXHR9O1xuXG5cdHZhciB2b2x1bWVEZWNvcmF0aW9uID0gZnVuY3Rpb24odm9pY2UsIGRlY29yYXRpb24sIGFic2VsZW0sIHBvc2l0aW9uaW5nKSB7XG5cdFx0Zm9yICh2YXIgaT0wO2k8ZGVjb3JhdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0c3dpdGNoKGRlY29yYXRpb25baV0pIHtcblx0XHRcdFx0Y2FzZSBcInBcIjpcblx0XHRcdFx0Y2FzZSBcIm1wXCI6XG5cdFx0XHRcdGNhc2UgXCJwcFwiOlxuXHRcdFx0XHRjYXNlIFwicHBwXCI6XG5cdFx0XHRcdGNhc2UgXCJwcHBwXCI6XG5cdFx0XHRcdGNhc2UgXCJmXCI6XG5cdFx0XHRcdGNhc2UgXCJmZlwiOlxuXHRcdFx0XHRjYXNlIFwiZmZmXCI6XG5cdFx0XHRcdGNhc2UgXCJmZmZmXCI6XG5cdFx0XHRcdGNhc2UgXCJzZnpcIjpcblx0XHRcdFx0Y2FzZSBcIm1mXCI6XG5cdFx0XHRcdFx0dmFyIGVsZW0gPSBuZXcgRHluYW1pY0RlY29yYXRpb24oYWJzZWxlbSwgZGVjb3JhdGlvbltpXSwgcG9zaXRpb25pbmcpO1xuXHRcdFx0XHRcdHZvaWNlLmFkZE90aGVyKGVsZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgY29tcG91bmREZWNvcmF0aW9uID0gZnVuY3Rpb24oZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCBkaXIpIHtcblx0XHRmdW5jdGlvbiBoaWdoZXN0UGl0Y2goKSB7XG5cdFx0XHRpZiAoYWJzZWxlbS5oZWFkcy5sZW5ndGggPT09IDApXG5cdFx0XHRcdHJldHVybiAxMDtcdC8vIFRPRE8tUEVSOiBJIGRvbid0IGtub3cgaWYgdGhpcyBjYW4gaGFwcGVuLCBidXQgd2UnbGwgcmV0dXJuIHRoZSB0b3Agb2YgdGhlIHN0YWZmIGlmIHNvLlxuXHRcdFx0dmFyIHBpdGNoID0gYWJzZWxlbS5oZWFkc1swXS5waXRjaDtcblx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgYWJzZWxlbS5oZWFkcy5sZW5ndGg7IGkrKylcblx0XHRcdFx0cGl0Y2ggPSBNYXRoLm1heChwaXRjaCwgYWJzZWxlbS5oZWFkc1tpXS5waXRjaCk7XG5cdFx0XHRyZXR1cm4gcGl0Y2g7XG5cdFx0fVxuXHRcdGZ1bmN0aW9uIGxvd2VzdFBpdGNoKCkge1xuXHRcdFx0aWYgKGFic2VsZW0uaGVhZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRyZXR1cm4gMjtcdC8vIFRPRE8tUEVSOiBJIGRvbid0IGtub3cgaWYgdGhpcyBjYW4gaGFwcGVuLCBidXQgd2UnbGwgcmV0dXJuIHRoZSBib3R0b20gb2YgdGhlIHN0YWZmIGlmIHNvLlxuXHRcdFx0dmFyIHBpdGNoID0gYWJzZWxlbS5oZWFkc1swXS5waXRjaDtcblx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgYWJzZWxlbS5oZWFkcy5sZW5ndGg7IGkrKylcblx0XHRcdFx0cGl0Y2ggPSBNYXRoLm1pbihwaXRjaCwgYWJzZWxlbS5oZWFkc1tpXS5waXRjaCk7XG5cdFx0XHRyZXR1cm4gcGl0Y2g7XG5cdFx0fVxuXHRcdGZ1bmN0aW9uIGNvbXBvdW5kRGVjb3JhdGlvbihzeW1ib2wsIGNvdW50KSB7XG5cdFx0XHR2YXIgcGxhY2VtZW50ID0gKGRpciA9PT0gJ2Rvd24nKSA/IGxvd2VzdFBpdGNoKCkrMTpoaWdoZXN0UGl0Y2goKSs5O1xuXHRcdFx0aWYgKGRpciAhPT0gJ2Rvd24nICYmIGNvdW50ID09PSAxKVxuXHRcdFx0XHRwbGFjZW1lbnQtLTtcblx0XHRcdHZhciBkZWx0YVggPSB3aWR0aC8yO1xuXHRcdFx0ZGVsdGFYICs9IChkaXIgPT09ICdkb3duJykgPyAtNSA6IDM7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0cGxhY2VtZW50IC09IDE7XG5cdFx0XHRcdGFic2VsZW0uYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChzeW1ib2wsIGRlbHRhWCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWJvbCksIHBsYWNlbWVudCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAodmFyIGk9MDtpPGRlY29yYXRpb24ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHN3aXRjaChkZWNvcmF0aW9uW2ldKSB7XG5cdFx0XHRcdGNhc2UgXCIvXCI6IGNvbXBvdW5kRGVjb3JhdGlvbihcImZsYWdzLnVncmFjZVwiLCAxKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgXCIvL1wiOiBjb21wb3VuZERlY29yYXRpb24oXCJmbGFncy51Z3JhY2VcIiwgMik7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiLy8vXCI6IGNvbXBvdW5kRGVjb3JhdGlvbihcImZsYWdzLnVncmFjZVwiLCAzKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgXCIvLy8vXCI6IGNvbXBvdW5kRGVjb3JhdGlvbihcImZsYWdzLnVncmFjZVwiLCA0KTsgYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBzdGFja2VkRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKGRlY29yYXRpb24sIHdpZHRoLCBhYnNlbGVtLCB5UG9zLCBwb3NpdGlvbmluZywgbWluVG9wLCBtaW5Cb3R0b20pIHtcblx0XHRmdW5jdGlvbiBpbmNyZW1lbnRQbGFjZW1lbnQocGxhY2VtZW50LCBoZWlnaHQpIHtcblx0XHRcdGlmIChwbGFjZW1lbnQgPT09ICdhYm92ZScpXG5cdFx0XHRcdHlQb3MuYWJvdmUgKz0gaGVpZ2h0O1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR5UG9zLmJlbG93IC09IGhlaWdodDtcblx0XHR9XG5cdFx0ZnVuY3Rpb24gZ2V0UGxhY2VtZW50KHBsYWNlbWVudCkge1xuXHRcdFx0dmFyIHk7XG5cdFx0XHRpZiAocGxhY2VtZW50ID09PSAnYWJvdmUnKSB7XG5cdFx0XHRcdHkgPSB5UG9zLmFib3ZlO1xuXHRcdFx0XHRpZiAoeSA8IG1pblRvcClcblx0XHRcdFx0XHR5ID0gbWluVG9wO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0eSA9IHlQb3MuYmVsb3c7XG5cdFx0XHRcdGlmICh5ID4gbWluQm90dG9tKVxuXHRcdFx0XHRcdHkgPSBtaW5Cb3R0b207XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geTtcblx0XHR9XG5cdFx0ZnVuY3Rpb24gdGV4dERlY29yYXRpb24odGV4dCwgcGxhY2VtZW50KSB7XG5cdFx0XHR2YXIgeSA9IGdldFBsYWNlbWVudChwbGFjZW1lbnQpO1xuXHRcdFx0dmFyIHRleHRGdWRnZSA9IDI7XG5cdFx0XHR2YXIgdGV4dEhlaWdodCA9IDU7XG5cdFx0XHQvLyBUT0RPLVBFUjogR2V0IHRoZSBoZWlnaHQgb2YgdGhlIGN1cnJlbnQgZm9udCBhbmQgdXNlIHRoYXQgZm9yIHRoZSB0aGlja25lc3MuXG5cdFx0XHRhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQodGV4dCwgd2lkdGgvMiwgMCwgeSt0ZXh0RnVkZ2UsIHt0eXBlOlwiZGVjb3JhdGlvblwiLCBrbGFzczogJ29ybmFtZW50JywgdGhpY2tuZXNzOiAzfSkpO1xuXG5cdFx0XHRpbmNyZW1lbnRQbGFjZW1lbnQocGxhY2VtZW50LCB0ZXh0SGVpZ2h0KTtcblx0XHR9XG5cdFx0ZnVuY3Rpb24gc3ltYm9sRGVjb3JhdGlvbihzeW1ib2wsIHBsYWNlbWVudCkge1xuXHRcdFx0dmFyIGRlbHRhWCA9IHdpZHRoLzI7XG5cdFx0XHRpZiAoZ2x5cGhzLmdldFN5bWJvbEFsaWduKHN5bWJvbCkgIT09IFwiY2VudGVyXCIpIHtcblx0XHRcdFx0ZGVsdGFYIC09IChnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoc3ltYm9sKSAvIDIpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGhlaWdodCA9IGdseXBocy5zeW1ib2xIZWlnaHRJblBpdGNoZXMoc3ltYm9sKSArIDE7IC8vIGFkZGluZyBhIGxpdHRsZSBwYWRkaW5nIHNvIG5vdGhpbmcgdG91Y2hlcy5cblx0XHRcdHZhciB5ID0gZ2V0UGxhY2VtZW50KHBsYWNlbWVudCk7XG5cdFx0XHR5ID0gKHBsYWNlbWVudCA9PT0gJ2Fib3ZlJykgPyB5ICsgaGVpZ2h0LzIgOiB5IC0gaGVpZ2h0LzI7Ly8gQ2VudGVyIHRoZSBlbGVtZW50IHZlcnRpY2FsbHkuXG5cdFx0XHRhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQoc3ltYm9sLCBkZWx0YVgsIGdseXBocy5nZXRTeW1ib2xXaWR0aChzeW1ib2wpLCB5LCB7IGtsYXNzOiAnb3JuYW1lbnQnLCB0aGlja25lc3M6IGdseXBocy5zeW1ib2xIZWlnaHRJblBpdGNoZXMoc3ltYm9sKSB9KSk7XG5cblx0XHRcdGluY3JlbWVudFBsYWNlbWVudChwbGFjZW1lbnQsIGhlaWdodCk7XG5cdFx0fVxuXG5cdFx0dmFyIHN5bWJvbExpc3QgPSB7XG5cdFx0XHRcIitcIjogXCJzY3JpcHRzLnN0b3BwZWRcIixcblx0XHRcdFwib3BlblwiOiBcInNjcmlwdHMub3BlblwiLFxuXHRcdFx0XCJzbmFwXCI6IFwic2NyaXB0cy5zbmFwXCIsXG5cdFx0XHRcIndlZGdlXCI6IFwic2NyaXB0cy53ZWRnZVwiLFxuXHRcdFx0XCJ0aHVtYlwiOiBcInNjcmlwdHMudGh1bWJcIixcblx0XHRcdFwic2hvcnRwaHJhc2VcIjogXCJzY3JpcHRzLnNob3J0cGhyYXNlXCIsXG5cdFx0XHRcIm1lZGl1bXBocmFzZVwiOiBcInNjcmlwdHMubWVkaXVtcGhyYXNlXCIsXG5cdFx0XHRcImxvbmdwaHJhc2VcIjogXCJzY3JpcHRzLmxvbmdwaHJhc2VcIixcblx0XHRcdFwidHJpbGxcIjogXCJzY3JpcHRzLnRyaWxsXCIsXG5cdFx0XHRcInJvbGxcIjogXCJzY3JpcHRzLnJvbGxcIixcblx0XHRcdFwiaXJpc2hyb2xsXCI6IFwic2NyaXB0cy5yb2xsXCIsXG5cdFx0XHRcIm1hcmNhdG9cIjogXCJzY3JpcHRzLnVtYXJjYXRvXCIsXG5cdFx0XHRcImRtYXJjYXRvXCI6IFwic2NyaXB0cy5kbWFyY2F0b1wiLFxuXHRcdFx0XCJ1bWFyY2F0b1wiOiBcInNjcmlwdHMudW1hcmNhdG9cIixcblx0XHRcdFwidHVyblwiOiBcInNjcmlwdHMudHVyblwiLFxuXHRcdFx0XCJ1cHBlcm1vcmRlbnRcIjogXCJzY3JpcHRzLnByYWxsXCIsXG5cdFx0XHRcInByYWxsdHJpbGxlclwiOiBcInNjcmlwdHMucHJhbGxcIixcblx0XHRcdFwibW9yZGVudFwiOiBcInNjcmlwdHMubW9yZGVudFwiLFxuXHRcdFx0XCJsb3dlcm1vcmRlbnRcIjogXCJzY3JpcHRzLm1vcmRlbnRcIixcblx0XHRcdFwiZG93bmJvd1wiOiBcInNjcmlwdHMuZG93bmJvd1wiLFxuXHRcdFx0XCJ1cGJvd1wiOiBcInNjcmlwdHMudXBib3dcIixcblx0XHRcdFwiZmVybWF0YVwiOiBcInNjcmlwdHMudWZlcm1hdGFcIixcblx0XHRcdFwiaW52ZXJ0ZWRmZXJtYXRhXCI6IFwic2NyaXB0cy5kZmVybWF0YVwiLFxuXHRcdFx0XCJicmVhdGhcIjogXCIsXCIsXG5cdFx0XHRcImNvZGFcIjogXCJzY3JpcHRzLmNvZGFcIixcblx0XHRcdFwic2Vnbm9cIjogXCJzY3JpcHRzLnNlZ25vXCJcblx0XHR9O1xuXG5cdFx0dmFyIGhhc09uZSA9IGZhbHNlO1xuXHRcdGZvciAodmFyIGk9MDtpPGRlY29yYXRpb24ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHN3aXRjaChkZWNvcmF0aW9uW2ldKSB7XG5cdFx0XHRcdGNhc2UgXCIwXCI6XG5cdFx0XHRcdGNhc2UgXCIxXCI6XG5cdFx0XHRcdGNhc2UgXCIyXCI6XG5cdFx0XHRcdGNhc2UgXCIzXCI6XG5cdFx0XHRcdGNhc2UgXCI0XCI6XG5cdFx0XHRcdGNhc2UgXCI1XCI6XG5cdFx0XHRcdGNhc2UgXCJELkMuXCI6XG5cdFx0XHRcdGNhc2UgXCJELlMuXCI6XG5cdFx0XHRcdFx0dGV4dERlY29yYXRpb24oZGVjb3JhdGlvbltpXSwgcG9zaXRpb25pbmcpO1xuXHRcdFx0XHRcdGhhc09uZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJmaW5lXCI6XG5cdFx0XHRcdFx0dGV4dERlY29yYXRpb24oXCJGSU5FXCIsIHBvc2l0aW9uaW5nKTtcblx0XHRcdFx0XHRoYXNPbmUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiK1wiOlxuXHRcdFx0XHRjYXNlIFwib3BlblwiOlxuXHRcdFx0XHRjYXNlIFwic25hcFwiOlxuXHRcdFx0XHRjYXNlIFwid2VkZ2VcIjpcblx0XHRcdFx0Y2FzZSBcInRodW1iXCI6XG5cdFx0XHRcdGNhc2UgXCJzaG9ydHBocmFzZVwiOlxuXHRcdFx0XHRjYXNlIFwibWVkaXVtcGhyYXNlXCI6XG5cdFx0XHRcdGNhc2UgXCJsb25ncGhyYXNlXCI6XG5cdFx0XHRcdGNhc2UgXCJ0cmlsbFwiOlxuXHRcdFx0XHRjYXNlIFwicm9sbFwiOlxuXHRcdFx0XHRjYXNlIFwiaXJpc2hyb2xsXCI6XG5cdFx0XHRcdGNhc2UgXCJtYXJjYXRvXCI6XG5cdFx0XHRcdGNhc2UgXCJkbWFyY2F0b1wiOlxuXHRcdFx0XHRjYXNlIFwidHVyblwiOlxuXHRcdFx0XHRjYXNlIFwidXBwZXJtb3JkZW50XCI6XG5cdFx0XHRcdGNhc2UgXCJwcmFsbHRyaWxsZXJcIjpcblx0XHRcdFx0Y2FzZSBcIm1vcmRlbnRcIjpcblx0XHRcdFx0Y2FzZSBcImxvd2VybW9yZGVudFwiOlxuXHRcdFx0XHRjYXNlIFwiZG93bmJvd1wiOlxuXHRcdFx0XHRjYXNlIFwidXBib3dcIjpcblx0XHRcdFx0Y2FzZSBcImZlcm1hdGFcIjpcblx0XHRcdFx0Y2FzZSBcImJyZWF0aFwiOlxuXHRcdFx0XHRjYXNlIFwidW1hcmNhdG9cIjpcblx0XHRcdFx0Y2FzZSBcImNvZGFcIjpcblx0XHRcdFx0Y2FzZSBcInNlZ25vXCI6XG5cdFx0XHRcdFx0c3ltYm9sRGVjb3JhdGlvbihzeW1ib2xMaXN0W2RlY29yYXRpb25baV1dLCBwb3NpdGlvbmluZyk7XG5cdFx0XHRcdFx0aGFzT25lID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImludmVydGVkZmVybWF0YVwiOlxuXHRcdFx0XHRcdHN5bWJvbERlY29yYXRpb24oc3ltYm9sTGlzdFtkZWNvcmF0aW9uW2ldXSwgJ2JlbG93Jyk7XG5cdFx0XHRcdFx0aGFzT25lID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIm1hcmtcIjpcblx0XHRcdFx0XHRhYnNlbGVtLmtsYXNzID0gXCJtYXJrXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBoYXNPbmU7XG5cdH07XG5cblx0ZnVuY3Rpb24gbGVmdERlY29yYXRpb24oZGVjb3JhdGlvbiwgYWJzZWxlbSwgcm9vbXRha2VuKSB7XG5cdFx0Zm9yICh2YXIgaT0wO2k8ZGVjb3JhdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0c3dpdGNoIChkZWNvcmF0aW9uW2ldKSB7XG5cdFx0XHRcdGNhc2UgXCJhcnBlZ2dpb1wiOlxuXHRcdFx0XHRcdC8vIFRoZSBhcnBlZ2dpbyBzeW1ib2wgaXMgdGhlIGhlaWdodCBvZiBhIG5vdGUgKHRoYXQgaXMsIHR3byBZIHVuaXRzKS4gVGhpcyBzdGFja3MgYXMgbWFueSBhcyB3ZSBuZWVkIHRvIGdvIGZyb20gdGhlXG5cdFx0XHRcdFx0Ly8gdG9wIG5vdGUgdG8gdGhlIGJvdHRvbSBub3RlLiBUaGUgYXJwZWdnaW8gc2hvdWxkIGFsc28gYmUgYSBsaXR0bGUgdGFsbGVyIHRoYW4gdGhlIHN0YWNrZWQgbm90ZXMsIHNvIHRoZXJlIGlzIGFuIGV4dHJhXG5cdFx0XHRcdFx0Ly8gb25lIGRyYXduIGFuZCBpdCBpcyBvZmZzZXQgYnkgaGFsZiBvZiBhIG5vdGUgaGVpZ2h0ICh0aGF0IGlzLCBvbmUgWSB1bml0KS5cblx0XHRcdFx0XHRmb3IgKHZhciBqID0gYWJzZWxlbS5hYmNlbGVtLm1pbnBpdGNoIC0gMTsgaiA8PSBhYnNlbGVtLmFiY2VsZW0ubWF4cGl0Y2g7IGogKz0gMikge1xuXHRcdFx0XHRcdFx0YWJzZWxlbS5hZGRFeHRyYShcblx0XHRcdFx0XHRcdFx0bmV3IFJlbGF0aXZlRWxlbWVudChcblx0XHRcdFx0XHRcdFx0XHRcInNjcmlwdHMuYXJwZWdnaW9cIixcblx0XHRcdFx0XHRcdFx0XHQtZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwic2NyaXB0cy5hcnBlZ2dpb1wiKSoyIC0gcm9vbXRha2VuLFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0aisyLFxuXHRcdFx0XHRcdFx0XHRcdHtrbGFzczogJ29ybmFtZW50JywgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwic2NyaXB0cy5hcnBlZ2dpb1wiKX1cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0RGVjb3JhdGlvbi5wcm90b3R5cGUuZHluYW1pY0RlY29yYXRpb24gPSBmdW5jdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgYWJzZWxlbSwgcG9zaXRpb25pbmcpIHtcblx0XHR2YXIgZGltaW51ZW5kbztcblx0XHR2YXIgY3Jlc2NlbmRvO1xuXHRcdGZvciAodmFyIGk9MDtpPGRlY29yYXRpb24ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHN3aXRjaChkZWNvcmF0aW9uW2ldKSB7XG5cdFx0XHRcdGNhc2UgXCJkaW1pbnVlbmRvKFwiOlxuXHRcdFx0XHRcdHRoaXMuc3RhcnREaW1pbnVlbmRvWCA9IGFic2VsZW07XG5cdFx0XHRcdFx0ZGltaW51ZW5kbyA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRpbWludWVuZG8pXCI6XG5cdFx0XHRcdFx0ZGltaW51ZW5kbyA9IHsgc3RhcnQ6IHRoaXMuc3RhcnREaW1pbnVlbmRvWCwgc3RvcDogYWJzZWxlbX07XG5cdFx0XHRcdFx0dGhpcy5zdGFydERpbWludWVuZG9YID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiY3Jlc2NlbmRvKFwiOlxuXHRcdFx0XHRcdHRoaXMuc3RhcnRDcmVzY2VuZG9YID0gYWJzZWxlbTtcblx0XHRcdFx0XHRjcmVzY2VuZG8gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJjcmVzY2VuZG8pXCI6XG5cdFx0XHRcdFx0Y3Jlc2NlbmRvID0geyBzdGFydDogdGhpcy5zdGFydENyZXNjZW5kb1gsIHN0b3A6IGFic2VsZW19O1xuXHRcdFx0XHRcdHRoaXMuc3RhcnRDcmVzY2VuZG9YID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoZGltaW51ZW5kbykge1xuXHRcdFx0dm9pY2UuYWRkT3RoZXIobmV3IENyZXNjZW5kb0VsZW0oZGltaW51ZW5kby5zdGFydCwgZGltaW51ZW5kby5zdG9wLCBcIj5cIiwgcG9zaXRpb25pbmcpKTtcblx0XHR9XG5cdFx0aWYgKGNyZXNjZW5kbykge1xuXHRcdFx0dm9pY2UuYWRkT3RoZXIobmV3IENyZXNjZW5kb0VsZW0oY3Jlc2NlbmRvLnN0YXJ0LCBjcmVzY2VuZG8uc3RvcCwgXCI8XCIsIHBvc2l0aW9uaW5nKSk7XG5cdFx0fVxuXHR9O1xuXG5cdERlY29yYXRpb24ucHJvdG90eXBlLmNyZWF0ZURlY29yYXRpb24gPSBmdW5jdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCByb29tdGFrZW4sIGRpciwgbWluUGl0Y2gsIHBvc2l0aW9uaW5nLCBoYXNWb2NhbHMpIHtcblx0XHRpZiAoIXBvc2l0aW9uaW5nKVxuXHRcdFx0cG9zaXRpb25pbmcgPSB7IG9ybmFtZW50UG9zaXRpb246ICdhYm92ZScsIHZvbHVtZVBvc2l0aW9uOiBoYXNWb2NhbHMgPyAnYWJvdmUnIDonYmVsb3cnLCBkeW5hbWljUG9zaXRpb246IGhhc1ZvY2FscyA/ICdhYm92ZScgOiAnYmVsb3cnIH07XG5cdFx0Ly8gVGhlc2UgZGVjb3JhdGlvbnMgZG9uJ3QgYWZmZWN0IHRoZSBwbGFjZW1lbnQgb2Ygb3RoZXIgZGVjb3JhdGlvbnNcblx0XHR2b2x1bWVEZWNvcmF0aW9uKHZvaWNlLCBkZWNvcmF0aW9uLCBhYnNlbGVtLCBwb3NpdGlvbmluZy52b2x1bWVQb3NpdGlvbik7XG5cdFx0dGhpcy5keW5hbWljRGVjb3JhdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgYWJzZWxlbSwgcG9zaXRpb25pbmcuZHluYW1pY1Bvc2l0aW9uKTtcblx0XHRjb21wb3VuZERlY29yYXRpb24oZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCBkaXIpO1xuXG5cdFx0Ly8gdHJlYXQgc3RhY2NhdG8sIGFjY2VudCwgYW5kIHRlbnV0byBmaXJzdCAobWF5IG5lZWQgdG8gc2hpZnQgb3RoZXIgbWFya2Vycylcblx0XHR2YXIgeVBvcyA9IGNsb3NlRGVjb3JhdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCByb29tdGFrZW4sIGRpciwgbWluUGl0Y2gpO1xuXHRcdC8vIHlQb3MgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgJ2Fib3ZlJyBhbmQgJ2JlbG93Jy4gVGhhdCBpcyB0aGUgcGxhY2VtZW50IG9mIHRoZSBuZXh0IHN5bWJvbCBvbiBlaXRoZXIgc2lkZS5cblxuXHRcdHlQb3MuYWJvdmUgPSBNYXRoLm1heCh5UG9zLmFib3ZlLCB0aGlzLm1pblRvcCk7XG5cdFx0dmFyIGhhc09uZSA9IHN0YWNrZWREZWNvcmF0aW9uKGRlY29yYXRpb24sIHdpZHRoLCBhYnNlbGVtLCB5UG9zLCBwb3NpdGlvbmluZy5vcm5hbWVudFBvc2l0aW9uLCB0aGlzLm1pblRvcCwgdGhpcy5taW5Cb3R0b20pO1xuXHRcdGlmIChoYXNPbmUpIHtcbi8vXHRcdFx0YWJzZWxlbS50b3AgPSBNYXRoLm1heCh5UG9zLmFib3ZlICsgMywgYWJzZWxlbS50b3ApOyAvLyBUT0RPLVBFUjogTm90IHN1cmUgd2h5IHdlIG5lZWQgdGhpcyBmdWRnZSBmYWN0b3IuXG5cdFx0fVxuXHRcdGxlZnREZWNvcmF0aW9uKGRlY29yYXRpb24sIGFic2VsZW0sIHJvb210YWtlbik7XG5cdH07XG5cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb3JhdGlvbjtcbiIsIi8vICAgIGFiY19lbmRpbmdfZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgRW5kaW5nRWxlbWVudCBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHNwcmludGYgPSByZXF1aXJlKCcuL3NwcmludGYnKTtcblxudmFyIEVuZGluZ0VsZW0gPSBmdW5jdGlvbiBFbmRpbmdFbGVtKHRleHQsIGFuY2hvcjEsIGFuY2hvcjIpIHtcblx0dGhpcy50ZXh0ID0gdGV4dDsgLy8gdGV4dCB0byBiZSBkaXNwbGF5ZWQgdG9wIGxlZnRcblx0dGhpcy5hbmNob3IxID0gYW5jaG9yMTsgLy8gbXVzdCBoYXZlIGEgLnggcHJvcGVydHkgb3IgYmUgbnVsbCAobWVhbnMgc3RhcnRzIGF0IHRoZSBcImJlZ2lubmluZ1wiIG9mIHRoZSBsaW5lIC0gYWZ0ZXIga2V5c2lnKVxuXHR0aGlzLmFuY2hvcjIgPSBhbmNob3IyOyAvLyBtdXN0IGhhdmUgYSAueCBwcm9wZXJ0eSBvciBiZSBudWxsIChtZWFucyBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpXG5cdHRoaXMuZW5kaW5nSGVpZ2h0QWJvdmUgPSA1O1xuXHR0aGlzLnBpdGNoID0gdW5kZWZpbmVkOyAvLyBUaGlzIHdpbGwgYmUgc2V0IGxhdGVyXG59O1xuXG5FbmRpbmdFbGVtLnByb3RvdHlwZS5zZXRVcHBlckFuZExvd2VyRWxlbWVudHMgPSBmdW5jdGlvbihwb3NpdGlvblkpIHtcblx0dGhpcy5waXRjaCA9IHBvc2l0aW9uWS5lbmRpbmdIZWlnaHRBYm92ZSAtIDI7XG59O1xuXG5FbmRpbmdFbGVtLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBsaW5lc3RhcnR4LCBsaW5lZW5keCkge1xuXHRpZiAodGhpcy5waXRjaCA9PT0gdW5kZWZpbmVkKVxuXHRcdHdpbmRvdy5jb25zb2xlLmVycm9yKFwiRW5kaW5nIEVsZW1lbnQgeS1jb29yZGluYXRlIG5vdCBzZXQuXCIpO1xuXHR2YXIgeSA9IHJlbmRlcmVyLmNhbGNZKHRoaXMucGl0Y2gpO1xuXHR2YXIgaGVpZ2h0ID0gMjA7XG5cdHZhciBwYXRoU3RyaW5nO1xuXHRpZiAodGhpcy5hbmNob3IxKSB7XG5cdFx0bGluZXN0YXJ0eCA9IHRoaXMuYW5jaG9yMS54K3RoaXMuYW5jaG9yMS53O1xuXHRcdHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmXCIsXG5cdFx0XHRsaW5lc3RhcnR4LCB5LCBsaW5lc3RhcnR4LCB5K2hlaWdodCk7XG5cdFx0cmVuZGVyZXIucHJpbnRQYXRoKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIiMwMDAwMDBcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogcmVuZGVyZXIuYWRkQ2xhc3NlcygnZW5kaW5nJyl9KTtcblx0XHRyZW5kZXJlci5yZW5kZXJUZXh0KGxpbmVzdGFydHgrNSwgcmVuZGVyZXIuY2FsY1kodGhpcy5waXRjaC0wLjUpLCB0aGlzLnRleHQsICdyZXBlYXRmb250JywgJ2VuZGluZycsXCJzdGFydFwiKTtcblx0fVxuXG5cdGlmICh0aGlzLmFuY2hvcjIpIHtcblx0XHRsaW5lZW5keCA9IHRoaXMuYW5jaG9yMi54O1xuXHRcdHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmXCIsXG5cdFx0XHRsaW5lZW5keCwgeSwgbGluZWVuZHgsIHkraGVpZ2h0KTtcblx0XHRyZW5kZXJlci5wcmludFBhdGgoe3BhdGg6cGF0aFN0cmluZywgc3Ryb2tlOlwiIzAwMDAwMFwiLCBmaWxsOlwiIzAwMDAwMFwiLCAnY2xhc3MnOiByZW5kZXJlci5hZGRDbGFzc2VzKCdlbmRpbmcnKX0pO1xuXHR9XG5cblxuXHRwYXRoU3RyaW5nID0gc3ByaW50ZihcIk0gJWYgJWYgTCAlZiAlZlwiLFxuXHRcdGxpbmVzdGFydHgsIHksIGxpbmVlbmR4LCB5KTtcblx0cmVuZGVyZXIucHJpbnRQYXRoKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIiMwMDAwMDBcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogcmVuZGVyZXIuYWRkQ2xhc3NlcygnZW5kaW5nJyl9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRW5kaW5nRWxlbTtcbiIsIi8vICAgIGFiY19zdGFmZl9ncm91cF9lbGVtZW50LmpzOiBEZWZpbml0aW9uIG9mIHRoZSBTdGFmZkdyb3VwRWxlbWVudCBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLypnbG9iYWxzIGNvbnNvbGUgKi9cblxudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuL2FiY19zcGFjaW5nJyk7XG5cbi8vIFN0YWZmR3JvdXBFbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBnbyB0b2dldGhlciB0byBtYWtlIG9uZSBsaW5lIG9mIG11c2ljLlxuLy8gVGhhdCBtaWdodCBiZSBtdWx0aXBsZSBzdGF2ZXMgdGhhdCBhcmUgdGllZCB0b2dldGhlciwgYW5kIGl0IG1pZ2h0IGJlIG11bHRpcGxlIHZvaWNlcyBvbiBvbmUgc3RhZmYuXG4vL1xuLy8gTWV0aG9kczpcbi8vIGNvbnN0cnVjdG9yOiBzb21lIGJhc2ljIGluaXRpYWxpemF0aW9uXG4vLyBhZGRWb2ljZSgpOiBDYWxsZWQgb25jZSBmb3IgZWFjaCB2b2ljZS4gTWF5IGFkZCBhIG5ldyBzdGFmZiBpZiBuZWVkZWQuXG4vLyBmaW5pc2hlZCgpOiBDYWxsZWQgb25seSBpbnRlcm5hbGx5IGJ5IGxheW91dCgpXG4vLyBsYXlvdXQoKTogVGhpcyBkb2VzIGFsbCB0aGUgbGF5b3V0LiBJdCBzZXRzIHRoZSBmb2xsb3dpbmc6IHNwYWNpbmd1bml0cywgc3RhcnR4LCBtaW5zcGFjZSwgdywgYW5kIHRoZSB4LWNvb3JkaW5hdGUgb2YgZWFjaCBlbGVtZW50IGluIGVhY2ggdm9pY2UuXG4vLyBkcmF3KCk6IENhbGxzIHRoZSB1bmRlcmx5aW5nIG1ldGhvZHMgb24gdGhlIHZvaWNlIG9iamVjdHMgdG8gZG8gdGhlIGRyYXdpbmcuIFNldHMgeSBhbmQgaGVpZ2h0LlxuLy9cbi8vIE1lbWJlcnM6XG4vLyBzdGFmZnM6IGFuIGFycmF5IG9mIGFsbCB0aGUgc3RhdmVzIGluIHRoaXMgZ3JvdXAuIEVhY2ggc3RhZmYgY29udGFpbnMgdGhlIGZvbGxvd2luZyBlbGVtZW50czpcbi8vICAgIHsgdG9wLCBib3R0b20sIGhpZ2hlc3QsIGxvd2VzdCwgeSB9XG4vLyB2b2ljZXM6IGFycmF5IG9mIFZvaWNlRWxlbWVudCBvYmplY3RzLiBUaGlzIGlzIG1vc3RseSBwYXNzZWQgaW4sIGJ1dCB0aGUgVm9pY2VFbGVtZW50IG9iamVjdHMgYXJlIG1vZGlmaWVkIGhlcmUuXG4vL1xuLy8gc3BhY2luZ3VuaXRzOiBudW1iZXIgb2YgcmVsYXRpdmUgeC11bml0cyBpbiB0aGUgbGluZS4gVXNlZCBieSB0aGUgY2FsbGluZyBmdW5jdGlvbiB0byBwYXNzIGJhY2sgaW4gYXMgdGhlIFwic3BhY2luZ1wiIGlucHV0IHBhcmFtZXRlci5cbi8vIFRPRE8tUEVSOiBUaGlzIHNob3VsZCBhY3R1YWxseSBiZSBwYXNzZWQgYmFjayBhcyBhIHJldHVybiB2YWx1ZS5cbi8vIG1pbnNwYWNlOiBzbWFsbGVzdCBzcGFjZSBiZXR3ZWVuIHR3byBub3Rlcy4gVXNlZCBieSB0aGUgY2FsbGluZyBmdW5jdGlvbiB0byBwYXNzIGJhY2sgaW4gYXMgdGhlIFwic3BhY2luZ1wiIGlucHV0IHBhcmFtZXRlci5cbi8vIFRPRE8tUEVSOiBUaGlzIHNob3VsZCBhY3R1YWxseSBiZSBwYXNzZWQgYmFjayBhcyBhIHJldHVybiB2YWx1ZS5cbi8vIHN0YXJ0eDogVGhlIGxlZnQgZWRnZSwgdGFraW5nIHRoZSBtYXJnaW4gYW5kIHRoZSBvcHRpb25hbCB2b2ljZSBuYW1lLiBVc2VkIGJ5IHRoZSBkcmF3KCkgbWV0aG9kLlxuLy8gdzogVGhlIHdpZHRoIG9mIHRoZSBsaW5lLiBVc2VkIGJ5IGNhbGxpbmcgZnVuY3Rpb24gdG8gcGFzcyBiYWNrIGluIGFzIHRoZSBcInNwYWNpbmdcIiBpbnB1dCBwYXJhbWV0ZXIsIGFuZCB0aGUgZHJhdygpIG1ldGhvZC5cbi8vIFRPRE8tUEVSOiBUaGlzIHNob3VsZCBhY3R1YWxseSBiZSBwYXNzZWQgYmFjayBhcyBhIHJldHVybiB2YWx1ZS4gIChUT0RPLVBFUjogaW4gcGl4ZWxzIG9yIHNwYWNpbmcgdW5pdHM/KVxuLy8geTogVGhlIHRvcCBvZiB0aGUgc3RhZmYgZ3JvdXAsIGluIHBpeGVscy4gVGhpcyBpcyBzZXQgaW4gdGhlIGRyYXcgbWV0aG9kLlxuLy8gVE9ETy1QRVI6IFdoZXJlIGlzIHRoYXQgdXNlZD8gSXQgbG9va3MgbGlrZSBpdCBtaWdodCBub3QgYmUgbmVlZGVkLlxuLy8gaGVpZ2h0OiBTZXQgaW4gdGhlIGRyYXcoKSBtZXRob2QgdG8gdGhlIGhlaWdodCBhY3R1YWxseSB1c2VkLiBVc2VkIGJ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHRvIGtub3cgd2hlcmUgdG8gc3RhcnQgdGhlIG5leHQgc3RhZmYgZ3JvdXAuXG4vLyBUT0RPLVBFUjogVGhpcyBzaG91bGQgYWN0dWFsbHkgYmUgc2V0IGluIHRoZSBsYXlvdXQgbWV0aG9kIGFuZCBwYXNzZWQgYmFjayBhcyBhIHJldHVybiB2YWx1ZS5cblxudmFyIFN0YWZmR3JvdXBFbGVtZW50ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMudm9pY2VzID0gW107XG5cdHRoaXMuc3RhZmZzID0gW107XG5cdHRoaXMuYnJhY2UgPSB1bmRlZmluZWQ7IC8vdG9ueVxufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLnNldExpbWl0ID0gZnVuY3Rpb24obWVtYmVyLCB2b2ljZSkge1xuXHRpZiAoIXZvaWNlLnNwZWNpYWxZW21lbWJlcl0pIHJldHVybjtcblx0aWYgKCF2b2ljZS5zdGFmZi5zcGVjaWFsWVttZW1iZXJdKVxuXHRcdHZvaWNlLnN0YWZmLnNwZWNpYWxZW21lbWJlcl0gPSB2b2ljZS5zcGVjaWFsWVttZW1iZXJdO1xuXHRlbHNlXG5cdFx0dm9pY2Uuc3RhZmYuc3BlY2lhbFlbbWVtYmVyXSA9IE1hdGgubWF4KHZvaWNlLnN0YWZmLnNwZWNpYWxZW21lbWJlcl0sIHZvaWNlLnNwZWNpYWxZW21lbWJlcl0pO1xufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLmFkZFZvaWNlID0gZnVuY3Rpb24gKHZvaWNlLCBzdGFmZm51bWJlciwgc3RhZmZsaW5lcykge1xuXHR2YXIgdm9pY2VOdW0gPSB0aGlzLnZvaWNlcy5sZW5ndGg7XG5cdHRoaXMudm9pY2VzW3ZvaWNlTnVtXSA9IHZvaWNlO1xuXHRpZiAodGhpcy5zdGFmZnNbc3RhZmZudW1iZXJdKVxuXHRcdHRoaXMuc3RhZmZzW3N0YWZmbnVtYmVyXS52b2ljZXMucHVzaCh2b2ljZU51bSk7XG5cdGVsc2Uge1xuXHRcdC8vIFRPRE8tUEVSOiBob3cgZG9lcyB0aGUgbWluL21heCBjaGFuZ2Ugd2hlbiBzdGFmZmxpbmVzIGlzIG5vdCA1P1xuXHRcdHRoaXMuc3RhZmZzW3RoaXMuc3RhZmZzLmxlbmd0aF0gPSB7XG5cdFx0XHR0b3A6IDEwLFxuXHRcdFx0Ym90dG9tOiAyLFxuXHRcdFx0bGluZXM6IHN0YWZmbGluZXMsXG5cdFx0XHR2b2ljZXM6IFt2b2ljZU51bV0sXG5cdFx0XHRzcGVjaWFsWToge1xuXHRcdFx0XHR0ZW1wb0hlaWdodEFib3ZlOiAwLFxuXHRcdFx0XHRwYXJ0SGVpZ2h0QWJvdmU6IDAsXG5cdFx0XHRcdHZvbHVtZUhlaWdodEFib3ZlOiAwLFxuXHRcdFx0XHRkeW5hbWljSGVpZ2h0QWJvdmU6IDAsXG5cdFx0XHRcdGVuZGluZ0hlaWdodEFib3ZlOiAwLFxuXHRcdFx0XHRjaG9yZEhlaWdodEFib3ZlOiAwLFxuXHRcdFx0XHRseXJpY0hlaWdodEFib3ZlOiAwLFxuXG5cdFx0XHRcdGx5cmljSGVpZ2h0QmVsb3c6IDAsXG5cdFx0XHRcdGNob3JkSGVpZ2h0QmVsb3c6IDAsXG5cdFx0XHRcdHZvbHVtZUhlaWdodEJlbG93OiAwLFxuXHRcdFx0XHRkeW5hbWljSGVpZ2h0QmVsb3c6IDBcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHZvaWNlLnN0YWZmID0gdGhpcy5zdGFmZnNbc3RhZmZudW1iZXJdO1xufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLnNldFN0YWZmTGltaXRzID0gZnVuY3Rpb24gKHZvaWNlKSB7XG5cdHZvaWNlLnN0YWZmLnRvcCA9IE1hdGgubWF4KHZvaWNlLnN0YWZmLnRvcCwgdm9pY2UudG9wKTtcblx0dm9pY2Uuc3RhZmYuYm90dG9tID0gTWF0aC5taW4odm9pY2Uuc3RhZmYuYm90dG9tLCB2b2ljZS5ib3R0b20pO1xuXHR0aGlzLnNldExpbWl0KCd0ZW1wb0hlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdwYXJ0SGVpZ2h0QWJvdmUnLCB2b2ljZSk7XG5cdHRoaXMuc2V0TGltaXQoJ3ZvbHVtZUhlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdkeW5hbWljSGVpZ2h0QWJvdmUnLCB2b2ljZSk7XG5cdHRoaXMuc2V0TGltaXQoJ2VuZGluZ0hlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdjaG9yZEhlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdseXJpY0hlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdseXJpY0hlaWdodEJlbG93Jywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdjaG9yZEhlaWdodEJlbG93Jywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCd2b2x1bWVIZWlnaHRCZWxvdycsIHZvaWNlKTtcblx0dGhpcy5zZXRMaW1pdCgnZHluYW1pY0hlaWdodEJlbG93Jywgdm9pY2UpO1xufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLnNldFVwcGVyQW5kTG93ZXJFbGVtZW50cyA9IGZ1bmN0aW9uKHJlbmRlcmVyKSB7XG5cdC8vIEVhY2ggc3RhZmYgYWxyZWFkeSBoYXMgdGhlIHRvcCBhbmQgYm90dG9tIHNldCwgbm93IHdlIHNlZSBpZiB0aGVyZSBhcmUgZWxlbWVudHMgdGhhdCBhcmUgYWx3YXlzIG9uIHRvcCBhbmQgYm90dG9tLCBhbmQgcmVzb2x2ZSB0aGVpciBwaXRjaC5cblx0Ly8gQWxzbywgZ2V0IHRoZSBvdmVyYWxsIGhlaWdodCBvZiBhbGwgdGhlIHN0YXZlcyBpbiB0aGlzIGdyb3VwLlxuXHR2YXIgbGFzdFN0YWZmQm90dG9tO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhZmZzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHN0YWZmID0gdGhpcy5zdGFmZnNbaV07XG5cdFx0Ly8gdGhlIHZlcnRpY2FsIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlIGFib3ZlIGlzOiB0ZW1wbywgcGFydCwgdm9sdW1lL2R5bmFtaWMsIGVuZGluZy9jaG9yZCwgbHlyaWNcblx0XHQvLyB0aGUgdmVydGljYWwgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgYmVsb3cgaXM6IGx5cmljLCBjaG9yZCwgdm9sdW1lL2R5bmFtaWNcblx0XHR2YXIgcG9zaXRpb25ZID0ge1xuXHRcdFx0dGVtcG9IZWlnaHRBYm92ZTogMCxcblx0XHRcdHBhcnRIZWlnaHRBYm92ZTogMCxcblx0XHRcdHZvbHVtZUhlaWdodEFib3ZlOiAwLFxuXHRcdFx0ZHluYW1pY0hlaWdodEFib3ZlOiAwLFxuXHRcdFx0ZW5kaW5nSGVpZ2h0QWJvdmU6IDAsXG5cdFx0XHRjaG9yZEhlaWdodEFib3ZlOiAwLFxuXHRcdFx0bHlyaWNIZWlnaHRBYm92ZTogMCxcblxuXHRcdFx0bHlyaWNIZWlnaHRCZWxvdzogMCxcblx0XHRcdGNob3JkSGVpZ2h0QmVsb3c6IDAsXG5cdFx0XHR2b2x1bWVIZWlnaHRCZWxvdzogMCxcblx0XHRcdGR5bmFtaWNIZWlnaHRCZWxvdzogMFxuXHRcdH07XG5cblx0XHRpZiAoLypBQkNKUy53cml0ZS5kZWJ1Z1BsYWNlbWVudCovZmFsc2UpIHtcblx0XHRcdHN0YWZmLm9yaWdpbmFsVG9wID0gc3RhZmYudG9wOyAvLyBUaGlzIGlzIGp1c3QgYmVpbmcgc3RvcmVkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG5cdFx0XHRzdGFmZi5vcmlnaW5hbEJvdHRvbSA9IHN0YWZmLmJvdHRvbTsgLy8gVGhpcyBpcyBqdXN0IGJlaW5nIHN0b3JlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuXHRcdH1cblxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5seXJpY0hlaWdodEFib3ZlKSB7IHN0YWZmLnRvcCArPSBzdGFmZi5zcGVjaWFsWS5seXJpY0hlaWdodEFib3ZlOyBwb3NpdGlvblkubHlyaWNIZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5jaG9yZEhlaWdodEFib3ZlKSB7IHN0YWZmLnRvcCArPSBzdGFmZi5zcGVjaWFsWS5jaG9yZEhlaWdodEFib3ZlOyBwb3NpdGlvblkuY2hvcmRIZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5lbmRpbmdIZWlnaHRBYm92ZSkge1xuXHRcdFx0aWYgKHN0YWZmLnNwZWNpYWxZLmNob3JkSGVpZ2h0QWJvdmUpXG5cdFx0XHRcdHN0YWZmLnRvcCArPSAyO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRzdGFmZi50b3AgKz0gc3RhZmYuc3BlY2lhbFkuZW5kaW5nSGVpZ2h0QWJvdmU7XG5cdFx0XHRwb3NpdGlvblkuZW5kaW5nSGVpZ2h0QWJvdmUgPSBzdGFmZi50b3A7XG5cdFx0fVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5keW5hbWljSGVpZ2h0QWJvdmUgJiYgc3RhZmYuc3BlY2lhbFkudm9sdW1lSGVpZ2h0QWJvdmUpIHtcblx0XHRcdHN0YWZmLnRvcCArPSBNYXRoLm1heChzdGFmZi5zcGVjaWFsWS5keW5hbWljSGVpZ2h0QWJvdmUsIHN0YWZmLnNwZWNpYWxZLnZvbHVtZUhlaWdodEFib3ZlKTtcblx0XHRcdHBvc2l0aW9uWS5keW5hbWljSGVpZ2h0QWJvdmUgPSBzdGFmZi50b3A7XG5cdFx0XHRwb3NpdGlvblkudm9sdW1lSGVpZ2h0QWJvdmUgPSBzdGFmZi50b3A7XG5cdFx0fSBlbHNlIGlmIChzdGFmZi5zcGVjaWFsWS5keW5hbWljSGVpZ2h0QWJvdmUpIHtcblx0XHRcdHN0YWZmLnRvcCArPSBzdGFmZi5zcGVjaWFsWS5keW5hbWljSGVpZ2h0QWJvdmU7IHBvc2l0aW9uWS5keW5hbWljSGVpZ2h0QWJvdmUgPSBzdGFmZi50b3A7XG5cdFx0fSBlbHNlIGlmIChzdGFmZi5zcGVjaWFsWS52b2x1bWVIZWlnaHRBYm92ZSkgeyBzdGFmZi50b3AgKz0gc3RhZmYuc3BlY2lhbFkudm9sdW1lSGVpZ2h0QWJvdmU7IHBvc2l0aW9uWS52b2x1bWVIZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5wYXJ0SGVpZ2h0QWJvdmUpIHsgc3RhZmYudG9wICs9IHN0YWZmLnNwZWNpYWxZLnBhcnRIZWlnaHRBYm92ZTsgcG9zaXRpb25ZLnBhcnRIZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS50ZW1wb0hlaWdodEFib3ZlKSB7IHN0YWZmLnRvcCArPSBzdGFmZi5zcGVjaWFsWS50ZW1wb0hlaWdodEFib3ZlOyBwb3NpdGlvblkudGVtcG9IZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXG5cdFx0aWYgKHN0YWZmLnNwZWNpYWxZLmx5cmljSGVpZ2h0QmVsb3cpIHsgcG9zaXRpb25ZLmx5cmljSGVpZ2h0QmVsb3cgPSBzdGFmZi5ib3R0b207IHN0YWZmLmJvdHRvbSAtPSBzdGFmZi5zcGVjaWFsWS5seXJpY0hlaWdodEJlbG93OyB9XG5cdFx0aWYgKHN0YWZmLnNwZWNpYWxZLmNob3JkSGVpZ2h0QmVsb3cpIHsgcG9zaXRpb25ZLmNob3JkSGVpZ2h0QmVsb3cgPSBzdGFmZi5ib3R0b207IHN0YWZmLmJvdHRvbSAtPSBzdGFmZi5zcGVjaWFsWS5jaG9yZEhlaWdodEJlbG93OyB9XG5cdFx0aWYgKHN0YWZmLnNwZWNpYWxZLnZvbHVtZUhlaWdodEJlbG93ICYmIHN0YWZmLnNwZWNpYWxZLmR5bmFtaWNIZWlnaHRCZWxvdykge1xuXHRcdFx0cG9zaXRpb25ZLnZvbHVtZUhlaWdodEJlbG93ID0gc3RhZmYuYm90dG9tO1xuXHRcdFx0cG9zaXRpb25ZLmR5bmFtaWNIZWlnaHRCZWxvdyA9IHN0YWZmLmJvdHRvbTtcblx0XHRcdHN0YWZmLmJvdHRvbSAtPSBNYXRoLm1heChzdGFmZi5zcGVjaWFsWS52b2x1bWVIZWlnaHRCZWxvdywgc3RhZmYuc3BlY2lhbFkuZHluYW1pY0hlaWdodEJlbG93KTtcblx0XHR9IGVsc2UgaWYgKHN0YWZmLnNwZWNpYWxZLnZvbHVtZUhlaWdodEJlbG93KSB7XG5cdFx0XHRwb3NpdGlvblkudm9sdW1lSGVpZ2h0QmVsb3cgPSBzdGFmZi5ib3R0b207IHN0YWZmLmJvdHRvbSAtPSBzdGFmZi5zcGVjaWFsWS52b2x1bWVIZWlnaHRCZWxvdztcblx0XHR9IGVsc2UgaWYgKHN0YWZmLnNwZWNpYWxZLmR5bmFtaWNIZWlnaHRCZWxvdykge1xuXHRcdFx0cG9zaXRpb25ZLmR5bmFtaWNIZWlnaHRCZWxvdyA9IHN0YWZmLmJvdHRvbTsgc3RhZmYuYm90dG9tIC09IHN0YWZmLnNwZWNpYWxZLmR5bmFtaWNIZWlnaHRCZWxvdztcblx0XHR9XG5cblx0XHRpZiAoLypBQkNKUy53cml0ZS5kZWJ1Z1BsYWNlbWVudCovZmFsc2UpXG5cdFx0XHRzdGFmZi5wb3NpdGlvblkgPSBwb3NpdGlvblk7IC8vIFRoaXMgaXMganVzdCBiZWluZyBzdG9yZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgc3RhZmYudm9pY2VzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgdm9pY2UgPSB0aGlzLnZvaWNlc1tzdGFmZi52b2ljZXNbal1dO1xuXHRcdFx0dm9pY2Uuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzKHBvc2l0aW9uWSk7XG5cdFx0fVxuXHRcdC8vIFdlIG1pZ2h0IG5lZWQgYSBsaXR0bGUgc3BhY2UgaW4gYmV0d2VlbiBzdGF2ZXMgaWYgdGhlIHN0YXZlcyBoYXZlbid0IGJlZW4gcHVzaGVkIGZhciBlbm91Z2ggYXBhcnQgYnkgbm90ZXMgb3IgZXh0cmEgdmVydGljYWwgc3R1ZmYuXG5cdFx0Ly8gT25seSB0cnkgdG8gcHV0IGluIGV4dHJhIHNwYWNlIGlmIHRoaXMgaXNuJ3QgdGhlIHRvcCBzdGFmZi5cblx0XHRpZiAobGFzdFN0YWZmQm90dG9tICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhciB0aGlzU3RhZmZUb3AgPSBzdGFmZi50b3AgLSAxMDtcblx0XHRcdHZhciBmb3JjZWRTcGFjaW5nQmV0d2VlbiA9IGxhc3RTdGFmZkJvdHRvbSArIHRoaXNTdGFmZlRvcDtcblx0XHRcdHZhciBtaW5TcGFjaW5nSW5QaXRjaGVzID0gcmVuZGVyZXIuc3BhY2luZy5zeXN0ZW1TdGFmZlNlcGFyYXRpb24vc3BhY2luZy5TVEVQO1xuXHRcdFx0dmFyIGFkZGVkU3BhY2UgPSBtaW5TcGFjaW5nSW5QaXRjaGVzIC0gZm9yY2VkU3BhY2luZ0JldHdlZW47XG5cdFx0XHRpZiAoYWRkZWRTcGFjZSA+IDApXG5cdFx0XHRcdHN0YWZmLnRvcCArPSBhZGRlZFNwYWNlO1xuXHRcdH1cblx0XHRsYXN0U3RhZmZCb3R0b20gPSAyIC0gc3RhZmYuYm90dG9tOyAvLyB0aGUgc3RhZmYgc3RhcnRzIGF0IHBvc2l0aW9uIDIgYW5kIHRoZSBib3R0b20gdmFyaWFibGUgaXMgbmVnYXRpdmUuIFRoZXJlZm9yZSB0byBmaW5kIG91dCBob3cgbGFyZ2UgdGhlIGJvdHRvbSBpcywgd2UgcmV2ZXJzZSB0aGUgc2lnbiBvZiB0aGUgYm90dG9tLCBhbmQgYWRkIHRoZSAyIGluLlxuXG5cdFx0Ly8gTm93IHdlIG5lZWQgYSBsaXR0bGUgbWFyZ2luIG9uIHRoZSB0b3AsIHNvIHdlJ2xsIGp1c3QgdGhyb3cgdGhhdCBpbi5cblx0XHQvL3N0YWZmLnRvcCArPSA0O1xuXHRcdC8vY29uc29sZS5sb2coXCJTdGFmZiBZOiBcIixpLGhlaWdodEluUGl0Y2hlcyxzdGFmZi50b3Asc3RhZmYuYm90dG9tKTtcblx0fVxuXHQvL2NvbnNvbGUubG9nKFwiU3RhZmYgSGVpZ2h0OiBcIixoZWlnaHRJblBpdGNoZXMsdGhpcy5oZWlnaHQpO1xufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLmZpbmlzaGVkID0gZnVuY3Rpb24oKSB7XG5cdGZvciAodmFyIGk9MDtpPHRoaXMudm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHRpZiAoIXRoaXMudm9pY2VzW2ldLmxheW91dEVuZGVkKCkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGdldExlZnRFZGdlT2ZTdGFmZihyZW5kZXJlciwgdm9pY2VzLCBicmFjZSkge1xuXHR2YXIgeCA9IHJlbmRlcmVyLnBhZGRpbmcubGVmdDtcblxuXHQvLyBmaW5kIG91dCBob3cgbXVjaCBzcGFjZSB3aWxsIGJlIHRha2VuIHVwIGJ5IHZvaWNlIGhlYWRlcnNcblx0dmFyIHZvaWNlaGVhZGVydyA9IDA7XG5cdGZvciAodmFyIGk9MDtpPHZvaWNlcy5sZW5ndGg7aSsrKSB7XG5cdFx0aWYodm9pY2VzW2ldLmhlYWRlcikge1xuXHRcdFx0dmFyIHNpemUgPSByZW5kZXJlci5nZXRUZXh0U2l6ZSh2b2ljZXNbaV0uaGVhZGVyLCAndm9pY2Vmb250JywgJycpO1xuXHRcdFx0dm9pY2VoZWFkZXJ3ID0gTWF0aC5tYXgodm9pY2VoZWFkZXJ3LHNpemUud2lkdGgpO1xuXHRcdH1cblx0fVxuXHRpZiAodm9pY2VoZWFkZXJ3KSB7XG5cdFx0Ly8gR2l2ZSBlbm91Z2ggc3BhY2luZyB0byB0aGUgcmlnaHQgLSB3ZSB1c2UgdGhlIHdpZHRoIG9mIGFuIEEgZm9yIHRoZSBhbW91bnQgb2Ygc3BhY2luZy5cblx0XHR2YXIgc2l6ZVcgPSByZW5kZXJlci5nZXRUZXh0U2l6ZShcIkFcIiwgJ3ZvaWNlZm9udCcsICcnKTtcblx0XHR2b2ljZWhlYWRlcncgKz0gc2l6ZVcud2lkdGg7XG5cdH1cblx0eCArPSB2b2ljZWhlYWRlcnc7XG5cblx0aWYgKGJyYWNlKSB7XG5cdFx0YnJhY2Uuc2V0TG9jYXRpb24oeCk7XG5cdFx0eCArPSBicmFjZS5nZXRXaWR0aCgpO1xuXHR9XG5cdHJldHVybiB4O1xufVxuXG5TdGFmZkdyb3VwRWxlbWVudC5wcm90b3R5cGUubGF5b3V0ID0gZnVuY3Rpb24oc3BhY2luZywgcmVuZGVyZXIsIGRlYnVnKSB7XG5cdHZhciBlcHNpbG9uID0gMC4wMDAwMDAxOyAvLyBGdWRnaW5nIGZvciBpbmV4YWN0bmVzcyBvZiBmbG9hdGluZyBwb2ludCBtYXRoLlxuXHR2YXIgc3BhY2luZ3VuaXRzID0gMDsgLy8gbnVtYmVyIG9mIHRpbWVzIHdlIHdpbGwgaGF2ZSBlbmRlZCB1cCB1c2luZyB0aGUgc3BhY2luZyBkaXN0YW5jZSAoYXMgb3Bwb3NlZCB0byBmaXhlZCB3aWR0aCBkaXN0YW5jZXMpXG5cdHZhciBtaW5zcGFjZSA9IDEwMDA7IC8vIGEgYmlnIG51bWJlciB0byBzdGFydCBvZmYgd2l0aCAtIHVzZWQgdG8gZmluZCBvdXQgd2hhdCB0aGUgc21hbGxlc3Qgc3BhY2UgYmV0d2VlbiB0d28gbm90ZXMgaXMgLS0gR0QgMjAxNC4xLjdcblxuXHR2YXIgeCA9IGdldExlZnRFZGdlT2ZTdGFmZihyZW5kZXJlciwgdGhpcy52b2ljZXMsIHRoaXMuYnJhY2UpO1xuXHR0aGlzLnN0YXJ0eD14O1xuXHR2YXIgaTtcblxuXHR2YXIgY3VycmVudGR1cmF0aW9uID0gMDtcblx0aWYgKGRlYnVnKSBjb25zb2xlLmxvZyhcImluaXQgbGF5b3V0XCIsIHNwYWNpbmcpO1xuXHRmb3IgKGk9MDtpPHRoaXMudm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHR0aGlzLnZvaWNlc1tpXS5iZWdpbkxheW91dCh4KTtcblx0fVxuXG5cdHZhciBzcGFjaW5ndW5pdCA9IDA7IC8vIG51bWJlciBvZiBzcGFjaW5ndW5pdHMgY29taW5nIGZyb20gdGhlIHByZXZpb3VzbHkgbGFpZCBvdXQgZWxlbWVudCB0byB0aGlzIG9uZVxuXHR3aGlsZSAoIXRoaXMuZmluaXNoZWQoKSkge1xuXHRcdC8vIGZpbmQgZmlyc3QgZHVyYXRpb24gbGV2ZWwgdG8gYmUgbGFpZCBvdXQgYW1vbmcgY2FuZGlkYXRlcyBhY3Jvc3Mgdm9pY2VzXG5cdFx0Y3VycmVudGR1cmF0aW9uPSBudWxsOyAvLyBjYW5kaWRhdGUgc21hbGxlc3QgZHVyYXRpb24gbGV2ZWxcblx0XHRmb3IgKGk9MDtpPHRoaXMudm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHRcdGlmICghdGhpcy52b2ljZXNbaV0ubGF5b3V0RW5kZWQoKSAmJiAoIWN1cnJlbnRkdXJhdGlvbiB8fCB0aGlzLnZvaWNlc1tpXS5nZXREdXJhdGlvbkluZGV4KCk8Y3VycmVudGR1cmF0aW9uKSlcblx0XHRcdFx0Y3VycmVudGR1cmF0aW9uPXRoaXMudm9pY2VzW2ldLmdldER1cmF0aW9uSW5kZXgoKTtcblx0XHR9XG5cblxuXHRcdC8vIGlzb2xhdGUgdm9pY2VzIGF0IGN1cnJlbnQgZHVyYXRpb24gbGV2ZWxcblx0XHR2YXIgY3VycmVudHZvaWNlcyA9IFtdO1xuXHRcdHZhciBvdGhlcnZvaWNlcyA9IFtdO1xuXHRcdGZvciAoaT0wO2k8dGhpcy52b2ljZXMubGVuZ3RoO2krKykge1xuXHRcdFx0dmFyIGR1cmF0aW9uSW5kZXggPSB0aGlzLnZvaWNlc1tpXS5nZXREdXJhdGlvbkluZGV4KCk7XG5cdFx0XHQvLyBQRVI6IEJlY2F1c2Ugb2YgdGhlIGluZXhhY3RuZXNzIG9mIEpTIGZsb2F0aW5nIHBvaW50IG1hdGgsIHdlIGp1c3QgZ2V0IGNsb3NlLlxuXHRcdFx0aWYgKGR1cmF0aW9uSW5kZXggLSBjdXJyZW50ZHVyYXRpb24gPiBlcHNpbG9uKSB7XG5cdFx0XHRcdG90aGVydm9pY2VzLnB1c2godGhpcy52b2ljZXNbaV0pO1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKFwib3V0OiB2b2ljZSBcIixpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1cnJlbnR2b2ljZXMucHVzaCh0aGlzLnZvaWNlc1tpXSk7XG5cdFx0XHRcdC8vaWYgKGRlYnVnKSBjb25zb2xlLmxvZyhcImluOiB2b2ljZSBcIixpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhbW9uZyB0aGUgY3VycmVudCBkdXJhdGlvbiBsZXZlbCBmaW5kIHRoZSBvbmUgd2hpY2ggbmVlZHMgc3RhcnRpbmcgZnVydGhlc3QgcmlnaHRcblx0XHRzcGFjaW5ndW5pdCA9IDA7IC8vIG51bWJlciBvZiBzcGFjaW5ndW5pdHMgY29taW5nIGZyb20gdGhlIHByZXZpb3VzbHkgbGFpZCBvdXQgZWxlbWVudCB0byB0aGlzIG9uZVxuXHRcdHZhciBzcGFjaW5nZHVyYXRpb24gPSAwO1xuXHRcdGZvciAoaT0wO2k8Y3VycmVudHZvaWNlcy5sZW5ndGg7aSsrKSB7XG5cdFx0XHQvL2NvbnNvbGUubG9nKFwiZ3JlYXRlc3Qgc3BhY2luZyB1bml0XCIsIHgsIGN1cnJlbnR2b2ljZXNbaV0uZ2V0TmV4dFgoKSwgY3VycmVudHZvaWNlc1tpXS5nZXRTcGFjaW5nVW5pdHMoKSwgY3VycmVudHZvaWNlc1tpXS5zcGFjaW5nZHVyYXRpb24pO1xuXHRcdFx0aWYgKGN1cnJlbnR2b2ljZXNbaV0uZ2V0TmV4dFgoKT54KSB7XG5cdFx0XHRcdHg9Y3VycmVudHZvaWNlc1tpXS5nZXROZXh0WCgpO1xuXHRcdFx0XHRzcGFjaW5ndW5pdD1jdXJyZW50dm9pY2VzW2ldLmdldFNwYWNpbmdVbml0cygpO1xuXHRcdFx0XHRzcGFjaW5nZHVyYXRpb24gPSBjdXJyZW50dm9pY2VzW2ldLnNwYWNpbmdkdXJhdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdFx0c3BhY2luZ3VuaXRzKz1zcGFjaW5ndW5pdDtcblx0XHRtaW5zcGFjZSA9IE1hdGgubWluKG1pbnNwYWNlLHNwYWNpbmd1bml0KTtcblx0XHRpZiAoZGVidWcpIGNvbnNvbGUubG9nKFwiY3VycmVudGR1cmF0aW9uOiBcIixjdXJyZW50ZHVyYXRpb24sIHNwYWNpbmd1bml0cywgbWluc3BhY2UpO1xuXG5cdFx0Zm9yIChpPTA7aTxjdXJyZW50dm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHRcdHZhciB2b2ljZWNoaWxkeCA9IGN1cnJlbnR2b2ljZXNbaV0ubGF5b3V0T25lSXRlbSh4LHNwYWNpbmcpO1xuXHRcdFx0dmFyIGR4ID0gdm9pY2VjaGlsZHgteDtcblx0XHRcdGlmIChkeD4wKSB7XG5cdFx0XHRcdHggPSB2b2ljZWNoaWxkeDsgLy91cGRhdGUgeFxuXHRcdFx0XHRmb3IgKHZhciBqPTA7ajxpO2orKykgeyAvLyBzaGlmdCBvdmVyIGFsbCBwcmV2aW91c2x5IGxhaWQgb3V0IGVsZW1lbnRzXG5cdFx0XHRcdFx0Y3VycmVudHZvaWNlc1tqXS5zaGlmdFJpZ2h0KGR4KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJlbW92ZSB0aGUgdmFsdWUgb2YgYWxyZWFkeSBjb3VudGVkIHNwYWNpbmcgdW5pdHMgaW4gb3RoZXIgdm9pY2VzIChlLmcuIGlmIGEgdm9pY2UgaGFkIHBsYW5uZWQgdG8gdXNlIHVwIDUgc3BhY2luZyB1bml0cyBidXQgaXMgbm90IGluIGxpbmUgdG8gYmUgbGFpZCBvdXQgYXQgdGhpcyBkdXJhdGlvbiBsZXZlbCAtIHdoZXJlIHdlJ3ZlIHVzZWQgMiBzcGFjaW5nIHVuaXRzIC0gdGhlbiB3ZSBtdXN0IHVzZSB1cCAzIHNwYWNpbmcgdW5pdHMsIG5vdCA1KVxuXHRcdGZvciAoaT0wO2k8b3RoZXJ2b2ljZXMubGVuZ3RoO2krKykge1xuXHRcdFx0b3RoZXJ2b2ljZXNbaV0uc3BhY2luZ2R1cmF0aW9uLT1zcGFjaW5nZHVyYXRpb247XG5cdFx0XHRvdGhlcnZvaWNlc1tpXS51cGRhdGVOZXh0WCh4LHNwYWNpbmcpOyAvLyBhZGp1c3Qgb3RoZXIgdm9pY2VzIGV4cGVjdGF0aW9uc1xuXHRcdH1cblxuXHRcdC8vIHVwZGF0ZSBpbmRleGVzIG9mIGN1cnJlbnRseSBsYWlkIG91dCBlbGVtc1xuXHRcdGZvciAoaT0wO2k8Y3VycmVudHZvaWNlcy5sZW5ndGg7aSsrKSB7XG5cdFx0XHR2YXIgdm9pY2UgPSBjdXJyZW50dm9pY2VzW2ldO1xuXHRcdFx0dm9pY2UudXBkYXRlSW5kaWNlcygpO1xuXHRcdH1cblx0fSAvLyBmaW5pc2hlZCBsYXlpbmcgb3V0XG5cblxuXHQvLyBmaW5kIHRoZSBncmVhdGVzdCByZW1haW5pbmcgeCBhcyBhIGJhc2UgZm9yIHRoZSB3aWR0aFxuXHRmb3IgKGk9MDtpPHRoaXMudm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHRpZiAodGhpcy52b2ljZXNbaV0uZ2V0TmV4dFgoKT54KSB7XG5cdFx0XHR4PXRoaXMudm9pY2VzW2ldLmdldE5leHRYKCk7XG5cdFx0XHRzcGFjaW5ndW5pdD10aGlzLnZvaWNlc1tpXS5nZXRTcGFjaW5nVW5pdHMoKTtcblx0XHR9XG5cdH1cblx0Ly9jb25zb2xlLmxvZyhcImdyZWF0ZXN0IHJlbWFpbmluZ1wiLHNwYWNpbmd1bml0LHgpO1xuXHRzcGFjaW5ndW5pdHMrPXNwYWNpbmd1bml0O1xuXHR0aGlzLncgPSB4O1xuXG5cdGZvciAoaT0wO2k8dGhpcy52b2ljZXMubGVuZ3RoO2krKykge1xuXHRcdHRoaXMudm9pY2VzW2ldLnc9dGhpcy53O1xuXHR9XG5cdHJldHVybiB7IHNwYWNpbmdVbml0czogc3BhY2luZ3VuaXRzLCBtaW5TcGFjZTogbWluc3BhY2UgfTtcbn07XG5cblN0YWZmR3JvdXBFbGVtZW50LnByb3RvdHlwZS5jYWxjSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuXHQvLyB0aGUgaGVpZ2h0IGlzIGNhbGN1bGF0ZWQgaGVyZSBpbiBhIHBhcmFsbGVsIHdheSB0byB0aGUgZHJhd2luZyBiZWxvdyBpbiBob3BlcyB0aGF0IGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgbW9kaWZpZWQgdG9nZXRoZXIuXG5cdC8vIFRPRE8tUEVSOiBhbHNvIGFkZCB0aGUgc3BhY2UgYmV0d2VlbiBzdGF2ZXMuIChUaGF0J3Mgc3lzdGVtU3RhZmZTZXBhcmF0aW9uLCB3aGljaCBpcyB0aGUgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBzdGFmZiBMSU5FUy4pXG5cdHZhciBoZWlnaHQgPSAwO1xuXHRmb3IgKHZhciBpPTA7aTx0aGlzLnZvaWNlcy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIHN0YWZmID0gdGhpcy52b2ljZXNbaV0uc3RhZmY7XG5cdFx0aWYgKCF0aGlzLnZvaWNlc1tpXS5kdXBsaWNhdGUpIHtcblx0XHRcdGhlaWdodCArPSBzdGFmZi50b3A7XG5cdFx0XHRpZiAoc3RhZmYuYm90dG9tIDwgMClcblx0XHRcdFx0aGVpZ2h0ICs9IC1zdGFmZi5ib3R0b207XG5cdFx0fVxuXHR9XG5cdHJldHVybiBoZWlnaHQ7XG59O1xuXG5TdGFmZkdyb3VwRWxlbWVudC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuXHQvLyBXZSBlbnRlciB0aGlzIG1ldGhvZCB3aXRoIHJlbmRlcmVyLnkgcG9pbnRpbmcgdG8gdGhlIHRvcG1vc3QgY29vcmRpbmF0ZSB0aGF0IHdlJ3JlIGFsbG93ZWQgdG8gZHJhdy5cblx0Ly8gQWxsIG9mIHRoZSBjaGlsZHJlbiB0aGF0IHdpbGwgYmUgZHJhd24gaGF2ZSBhIHJlbGF0aXZlIFwicGl0Y2hcIiBzZXQsIHdoZXJlIHplcm8gaXMgdGhlIGZpcnN0IGxlZGdlciBsaW5lIGJlbG93IHRoZSBzdGFmZi5cblx0Ly8gcmVuZGVyZXIueSB3aWxsIGJlIG9mZnNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc3RhZmYgYnkgdGhlIGFtb3VudCByZXF1aXJlZCB0byBtYWtlIHRoZSByZWxhdGl2ZSBwaXRjaCB3b3JrLlxuXHQvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RhdmVzLCB0aGVuIHJlbmRlcmVyLnkgd2lsbCBiZSBpbmNyZW1lbnRlZCBmb3IgZWFjaCBuZXcgc3RhZmYuXG5cblx0dmFyIGRlYnVnUHJpbnQ7XG5cdHZhciBjb2xvckluZGV4O1xuXHRpZiAoLypBQkNKUy53cml0ZS5kZWJ1Z1BsYWNlbWVudCovZmFsc2UpIHtcblx0XHR2YXIgY29sb3JzID0gWyBcInJnYigyMDcsMjcsMzYpXCIsIFwicmdiKDE2OCwyMTQsODApXCIsIFwicmdiKDExMCwxNjEsMjI0KVwiLCBcInJnYigxOTEsMTE5LDIxOClcIiwgXCJyZ2IoMTk1LDMwLDE1MSlcIixcblx0XHRcdFwicmdiKDMxLDE3MCwxNzcpXCIsIFwicmdiKDIyMCwxNjYsMTQyKVwiIF07XG5cdFx0ZGVidWdQcmludCA9IGZ1bmN0aW9uKHN0YWZmLCBrZXkpIHtcblx0XHRcdGlmIChzdGFmZi5wb3NpdGlvbllba2V5XSkge1xuXHRcdFx0XHQvL3JlbmRlcmVyLnByaW50SG9yaXpvbnRhbExpbmUoNTAsIHJlbmRlcmVyLmNhbGNZKHN0YWZmLnBvc2l0aW9uWVtrZXldKSwga2V5LnN1YnN0cigwLCA0KSArIFwiIFwiICsgTWF0aC5yb3VuZChzdGFmZi5wb3NpdGlvbllba2V5XSkpO1xuXHRcdFx0XHR2YXIgaGVpZ2h0ID0gc3RhZmYuc3BlY2lhbFlba2V5XSAqIHNwYWNpbmcuU1RFUDtcblx0XHRcdFx0cmVuZGVyZXIucHJpbnRTaGFkZWRCb3gocmVuZGVyZXIucGFkZGluZy5sZWZ0LCByZW5kZXJlci5jYWxjWShzdGFmZi5wb3NpdGlvbllba2V5XSksIHJlbmRlcmVyLmNvbnRyb2xsZXIud2lkdGgsIGhlaWdodCxjb2xvcnNbY29sb3JJbmRleF0sIDAuNCwga2V5LnN1YnN0cigwLCA0KSk7XG5cdFx0XHRcdGNvbG9ySW5kZXggKz0gMTsgaWYgKGNvbG9ySW5kZXggPiA2KSBjb2xvckluZGV4ID0gMDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gQW4gaW52aXNpYmxlIG1hcmtlciBpcyB1c2VmdWwgdG8gYmUgYWJsZSB0byBmaW5kIHdoZXJlIGVhY2ggc3lzdGVtIHN0YXJ0cy5cblx0cmVuZGVyZXIuYWRkSW52aXNpYmxlTWFya2VyKFwiYWJjanMtdG9wLW9mLXN5c3RlbVwiKTtcblxuXHR2YXIgc3RhcnRZID0gcmVuZGVyZXIueTsgLy8gU28gdGhhdCBpdCBjYW4gYmUgcmVzdG9yZWQgYWZ0ZXIgd2UncmUgZG9uZS5cblx0Ly8gU2V0IHRoZSBhYnNvbHV0ZSBZIHBvc2l0aW9uIGZvciBlYWNoIHN0YWZmIGhlcmUsIHNvIHRoZSB2b2ljZSBkcmF3aW5nIGJlbG93IGNhbiBqdXN0IHVzZSBpZi5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnN0YWZmcy5sZW5ndGg7IGorKykge1xuXHRcdHZhciBzdGFmZjEgPSB0aGlzLnN0YWZmc1tqXTtcblx0XHQvL3JlbmRlcmVyLnByaW50SG9yaXpvbnRhbExpbmUoNTAsIHJlbmRlcmVyLnksIFwic3RhcnRcIik7XG5cdFx0cmVuZGVyZXIubW92ZVkoc3BhY2luZy5TVEVQLCBzdGFmZjEudG9wKTtcblx0XHRzdGFmZjEuYWJzb2x1dGVZID0gcmVuZGVyZXIueTtcblx0XHRpZiAoLypBQkNKUy53cml0ZS5kZWJ1Z1BsYWNlbWVudCovZmFsc2UpIHtcblx0XHRcdGNvbG9ySW5kZXggPSAwO1xuXHRcdFx0cmVuZGVyZXIucHJpbnRTaGFkZWRCb3gocmVuZGVyZXIucGFkZGluZy5sZWZ0LCByZW5kZXJlci5jYWxjWShzdGFmZjEub3JpZ2luYWxUb3ApLCByZW5kZXJlci5jb250cm9sbGVyLndpZHRoLCByZW5kZXJlci5jYWxjWShzdGFmZjEub3JpZ2luYWxCb3R0b20pLXJlbmRlcmVyLmNhbGNZKHN0YWZmMS5vcmlnaW5hbFRvcCksIFwiIzAwMDAwMFwiLCAwLjEpO1xuXHRcdFx0ZGVidWdQcmludChzdGFmZjEsICdjaG9yZEhlaWdodEFib3ZlJyk7XG5cdFx0XHRkZWJ1Z1ByaW50KHN0YWZmMSwgJ2Nob3JkSGVpZ2h0QmVsb3cnKTtcblx0XHRcdGRlYnVnUHJpbnQoc3RhZmYxLCAnZHluYW1pY0hlaWdodEFib3ZlJyk7XG5cdFx0XHRkZWJ1Z1ByaW50KHN0YWZmMSwgJ2R5bmFtaWNIZWlnaHRCZWxvdycpO1xuXHRcdFx0ZGVidWdQcmludChzdGFmZjEsICdlbmRpbmdIZWlnaHRBYm92ZScpO1xuXHRcdFx0ZGVidWdQcmludChzdGFmZjEsICdseXJpY0hlaWdodEFib3ZlJyk7XG5cdFx0XHRkZWJ1Z1ByaW50KHN0YWZmMSwgJ2x5cmljSGVpZ2h0QmVsb3cnKTtcblx0XHRcdGRlYnVnUHJpbnQoc3RhZmYxLCAncGFydEhlaWdodEFib3ZlJyk7XG5cdFx0XHRkZWJ1Z1ByaW50KHN0YWZmMSwgJ3RlbXBvSGVpZ2h0QWJvdmUnKTtcblx0XHRcdGRlYnVnUHJpbnQoc3RhZmYxLCAndm9sdW1lSGVpZ2h0QWJvdmUnKTtcblx0XHRcdGRlYnVnUHJpbnQoc3RhZmYxLCAndm9sdW1lSGVpZ2h0QmVsb3cnKTtcblx0XHR9XG5cdFx0aWYgKHN0YWZmMS5ib3R0b20gPCAwKVxuXHRcdFx0cmVuZGVyZXIubW92ZVkoc3BhY2luZy5TVEVQLCAtc3RhZmYxLmJvdHRvbSk7XG5cdH1cblx0dmFyIHRvcExpbmU7IC8vIHRoZXNlIGFyZSB0byBjb25uZWN0IG11bHRpcGxlIHN0YXZlcy4gV2UgbmVlZCB0byByZW1lbWJlciB3aGVyZSB0aGV5IGFyZS5cblx0dmFyIGJvdHRvbUxpbmU7XG5cblx0dmFyIGJhcnRvcCA9IDA7XG5cdHJlbmRlcmVyLm1lYXN1cmVOdW1iZXIgPSBudWxsO1xuXHRyZW5kZXJlci5ub3RlTnVtYmVyID0gbnVsbDtcblx0Zm9yICh2YXIgaT0wO2k8dGhpcy52b2ljZXMubGVuZ3RoO2krKykge1xuXHRcdHZhciBzdGFmZiA9IHRoaXMudm9pY2VzW2ldLnN0YWZmO1xuXHRcdHJlbmRlcmVyLnkgPSBzdGFmZi5hYnNvbHV0ZVk7XG5cdFx0cmVuZGVyZXIudm9pY2VOdW1iZXIgPSBpO1xuXHRcdC8vcmVuZGVyZXIueSA9IHN0YWZmLnk7XG5cdFx0Ly8gb2Zmc2V0IGZvciBzdGFydGluZyB0aGUgY291bnRpbmcgYXQgbWlkZGxlIENcblx0XHRpZiAoIXRoaXMudm9pY2VzW2ldLmR1cGxpY2F0ZSkge1xuLy9cdFx0XHRyZW5kZXJlci5tb3ZlWShzcGFjaW5nLlNURVAsIHN0YWZmLnRvcCk7XG5cdFx0XHRpZiAoIXRvcExpbmUpIHRvcExpbmUgID0gcmVuZGVyZXIuY2FsY1koMTApO1xuXHRcdFx0Ym90dG9tTGluZSAgPSByZW5kZXJlci5jYWxjWSgyKTtcblx0XHRcdGlmIChzdGFmZi5saW5lcyAhPT0gMCkge1xuXHRcdFx0XHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyID0gbnVsbDtcblx0XHRcdFx0cmVuZGVyZXIubm90ZU51bWJlciA9IG51bGw7XG5cdFx0XHRcdHJlbmRlcmVyLnByaW50U3RhdmUodGhpcy5zdGFydHgsIHRoaXMudywgc3RhZmYubGluZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnZvaWNlc1tpXS5kcmF3KHJlbmRlcmVyLCBiYXJ0b3ApO1xuXHRcdHJlbmRlcmVyLm1lYXN1cmVOdW1iZXIgPSBudWxsO1xuXHRcdHJlbmRlcmVyLm5vdGVOdW1iZXIgPSBudWxsO1xuXHRcdGlmICghdGhpcy52b2ljZXNbaV0uZHVwbGljYXRlKSB7XG5cdFx0XHRiYXJ0b3AgPSByZW5kZXJlci5jYWxjWSgyKTsgLy8gVGhpcyBjb25uZWN0cyB0aGUgYmFyIGxpbmVzIGJldHdlZW4gdHdvIGRpZmZlcmVudCBzdGF2ZXMuXG4vL1x0XHRcdGlmIChzdGFmZi5ib3R0b20gPCAwKVxuLy9cdFx0XHRcdHJlbmRlcmVyLm1vdmVZKHNwYWNpbmcuU1RFUCwgLXN0YWZmLmJvdHRvbSk7XG5cdFx0fVxuXHRcdGlmKHRoaXMuYnJhY2UpIHsvL1Rvbnlcblx0XHRcdGlmIChpID09PSB0aGlzLmJyYWNlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0aWYgKHRoaXMuYnJhY2UpIHtcblx0XHRcdFx0XHR0aGlzLmJyYWNlLmRyYXcocmVuZGVyZXIsIHRvcExpbmUsIGJvdHRvbUxpbmUpOyAvL3Rvbnlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyID0gbnVsbDtcblx0cmVuZGVyZXIubm90ZU51bWJlciA9IG51bGw7XG5cblx0Ly8gY29ubmVjdCBhbGwgdGhlIHN0YXZlcyB0b2dldGhlciB3aXRoIGEgdmVydGljYWwgbGluZVxuXHRpZiAodGhpcy5zdGFmZnMubGVuZ3RoPjEpIHtcblx0XHRyZW5kZXJlci5wcmludFN0ZW0odGhpcy5zdGFydHgsIDAuNiwgdG9wTGluZSwgYm90dG9tTGluZSk7XG5cdH1cblx0cmVuZGVyZXIueSA9IHN0YXJ0WTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhZmZHcm91cEVsZW1lbnQ7XG4iLCIvLyAgICBhYmNfdGVtcG9fZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgVGVtcG9FbGVtZW50IGNsYXNzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQWJzb2x1dGVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfYWJzb2x1dGVfZWxlbWVudCcpO1xudmFyIFJlbGF0aXZlRWxlbWVudCA9IHJlcXVpcmUoJy4vYWJjX3JlbGF0aXZlX2VsZW1lbnQnKTtcblxudmFyIFRlbXBvRWxlbWVudDtcbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdHZhciB0b3RhbEhlaWdodEluUGl0Y2hlcyA9IDU7XG5cblx0VGVtcG9FbGVtZW50ID0gZnVuY3Rpb24gVGVtcG9FbGVtZW50KHRlbXBvLCB0dW5lTnVtYmVyLCBjcmVhdGVOb3RlSGVhZCkge1xuXHRcdHRoaXMudGVtcG8gPSB0ZW1wbztcblx0XHR0aGlzLnR1bmVOdW1iZXIgPSB0dW5lTnVtYmVyO1xuXHRcdHRoaXMudGVtcG9IZWlnaHRBYm92ZSA9IHRvdGFsSGVpZ2h0SW5QaXRjaGVzO1xuXHRcdHRoaXMucGl0Y2ggPSB1bmRlZmluZWQ7IC8vIFRoaXMgd2lsbCBiZSBzZXQgbGF0ZXJcblx0XHRpZiAodGhpcy50ZW1wby5kdXJhdGlvbiAmJiAhdGhpcy50ZW1wby5zdXBwcmVzc0JwbSkge1xuXHRcdFx0dGhpcy5ub3RlID0gdGhpcy5jcmVhdGVOb3RlKGNyZWF0ZU5vdGVIZWFkLCB0ZW1wbywgdHVuZU51bWJlcik7XG5cdFx0fVxuXHR9O1xuXG5cdFRlbXBvRWxlbWVudC5wcm90b3R5cGUuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzID0gZnVuY3Rpb24ocG9zaXRpb25ZKSB7IC8vIFRPRE8tUEVSOiBUaGlzIG1pZ2h0IG5vdCBiZSBjYWxsZWQuXG5cdFx0dGhpcy5waXRjaCA9IHBvc2l0aW9uWS50ZW1wb0hlaWdodEFib3ZlO1xuXHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLnRlbXBvSGVpZ2h0QWJvdmU7XG5cdFx0dGhpcy5ib3R0b20gPSBwb3NpdGlvblkudGVtcG9IZWlnaHRBYm92ZTtcblx0XHRpZiAodGhpcy5ub3RlKSB7XG5cdFx0XHR2YXIgdGVtcG9QaXRjaCA9IHRoaXMucGl0Y2ggLSB0b3RhbEhlaWdodEluUGl0Y2hlcyArIDE7IC8vIFRoZSBwaXRjaCB3ZSByZWNlaXZlIGlzIHRoZSB0b3Agb2YgdGhlIGFsbG90dGVkIGFyZWE6IGNoYW5nZSB0aGF0IHRvIHByYWN0aWNhbGx5IHRoZSBib3R0b20uXG5cdFx0XHR0aGlzLm5vdGUudG9wID0gdGVtcG9QaXRjaDtcblx0XHRcdHRoaXMubm90ZS5ib3R0b20gPSB0ZW1wb1BpdGNoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vdGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGNoaWxkID0gdGhpcy5ub3RlLmNoaWxkcmVuW2ldO1xuXHRcdFx0XHRjaGlsZC50b3AgKz0gdGVtcG9QaXRjaDtcblx0XHRcdFx0Y2hpbGQuYm90dG9tICs9IHRlbXBvUGl0Y2g7XG5cdFx0XHRcdGNoaWxkLnBpdGNoICs9IHRlbXBvUGl0Y2g7XG5cdFx0XHRcdGlmIChjaGlsZC5waXRjaDIgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjaGlsZC5waXRjaDIgKz0gdGVtcG9QaXRjaDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0VGVtcG9FbGVtZW50LnByb3RvdHlwZS5zZXRYID0gZnVuY3Rpb24gKHgpIHtcblx0XHR0aGlzLnggPSB4O1xuXHR9O1xuXG5cdFRlbXBvRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlTm90ZSA9IGZ1bmN0aW9uKGNyZWF0ZU5vdGVIZWFkLCB0ZW1wbywgdHVuZU51bWJlcikge1xuXHRcdHZhciB0ZW1wb3NjYWxlID0gMC43NTtcblx0XHR2YXIgZHVyYXRpb24gPSB0ZW1wby5kdXJhdGlvblswXTsgLy8gVE9ETyB3aGVuIG11bHRpcGxlIGR1cmF0aW9uc1xuXHRcdHZhciBhYnNFbGVtID0gbmV3IEFic29sdXRlRWxlbWVudCh0ZW1wbywgZHVyYXRpb24sIDEsICd0ZW1wbycsIHR1bmVOdW1iZXIpO1xuXHRcdC8vIFRoZXJlIGFyZW4ndCBhbiBpbmZpbml0ZSBudW1iZXIgb2Ygbm90ZSB2YWx1ZXMsIGJ1dCB3ZSBhcmUgcGFzc2VkIGEgZmxvYXQsIHNvIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgaXMgb2ZmIHVwc3RyZWFtLFxuXHRcdC8vIG1lcmdlIGFsbCBvZiB0aGUgaW4gYmV0d2VlbiBwb2ludHMuXG5cdFx0dmFyIGRvdDtcblx0XHR2YXIgZmxhZztcblx0XHR2YXIgbm90ZTtcblx0XHRpZiAoZHVyYXRpb24gPD0gMS8zMikgeyBub3RlID0gXCJub3RlaGVhZHMucXVhcnRlclwiOyBmbGFnID0gXCJmbGFncy51MzJuZFwiOyBkb3QgPSAwOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMS8xNikgeyBub3RlID0gXCJub3RlaGVhZHMucXVhcnRlclwiOyBmbGFnID0gXCJmbGFncy51MTZ0aFwiOyBkb3QgPSAwOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMy8zMikgeyBub3RlID0gXCJub3RlaGVhZHMucXVhcnRlclwiOyBmbGFnID0gXCJmbGFncy51MTZuZFwiOyBkb3QgPSAxOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMS84KSB7IG5vdGUgPSBcIm5vdGVoZWFkcy5xdWFydGVyXCI7IGZsYWcgPSBcImZsYWdzLnU4dGhcIjsgZG90ID0gMDsgfVxuXHRcdGVsc2UgaWYgKGR1cmF0aW9uIDw9IDMvMTYpIHsgbm90ZSA9IFwibm90ZWhlYWRzLnF1YXJ0ZXJcIjsgZmxhZyA9IFwiZmxhZ3MudTh0aFwiOyBkb3QgPSAxOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMS80KSB7IG5vdGUgPSBcIm5vdGVoZWFkcy5xdWFydGVyXCI7IGRvdCA9IDA7IH1cblx0XHRlbHNlIGlmIChkdXJhdGlvbiA8PSAzLzgpIHsgbm90ZSA9IFwibm90ZWhlYWRzLnF1YXJ0ZXJcIjsgZG90ID0gMTsgfVxuXHRcdGVsc2UgaWYgKGR1cmF0aW9uIDw9IDEvMikgeyBub3RlID0gXCJub3RlaGVhZHMuaGFsZlwiOyBkb3QgPSAwOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMy80KSB7IG5vdGUgPSBcIm5vdGVoZWFkcy5oYWxmXCI7IGRvdCA9IDE7IH1cblx0XHRlbHNlIGlmIChkdXJhdGlvbiA8PSAxKSB7IG5vdGUgPSBcIm5vdGVoZWFkcy53aG9sZVwiOyBkb3QgPSAwOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMS41KSB7IG5vdGUgPSBcIm5vdGVoZWFkcy53aG9sZVwiOyBkb3QgPSAxOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMikgeyBub3RlID0gXCJub3RlaGVhZHMuZGJsXCI7IGRvdCA9IDA7IH1cblx0XHRlbHNlIHsgbm90ZSA9IFwibm90ZWhlYWRzLmRibFwiOyBkb3QgPSAxOyB9XG5cblx0XHR2YXIgcmV0ID0gY3JlYXRlTm90ZUhlYWQoYWJzRWxlbSxcblx0XHRcdG5vdGUsXG5cdFx0XHR7IHZlcnRpY2FsUG9zOiAwfSwgLy8gVGhpcyBpcyBqdXN0IHRlbXBvcmFyeTogd2UnbGwgb2Zmc2V0IHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbmluZyB3aGVuIHdlIGdldCB0aGUgYWN0dWFsIHZlcnRpY2FsIHNwb3QuXG5cdFx0XHRcInVwXCIsXG5cdFx0XHQwLFxuXHRcdFx0MCxcblx0XHRcdGZsYWcsXG5cdFx0XHRkb3QsXG5cdFx0XHQwLFxuXHRcdFx0dGVtcG9zY2FsZSxcblx0XHRcdFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHRcdHZhciB0ZW1wb05vdGUgPSByZXQubm90ZWhlYWQ7XG5cdFx0YWJzRWxlbS5hZGRIZWFkKHRlbXBvTm90ZSk7XG5cdFx0dmFyIHN0ZW07XG5cdFx0aWYgKG5vdGUgIT09IFwibm90ZWhlYWRzLndob2xlXCIgJiYgbm90ZSAhPT0gXCJub3RlaGVhZHMuZGJsXCIpIHtcblx0XHRcdHZhciBwMSA9IDEgLyAzICogdGVtcG9zY2FsZTtcblx0XHRcdHZhciBwMiA9IDcgKiB0ZW1wb3NjYWxlO1xuXHRcdFx0dmFyIGR4ID0gdGVtcG9Ob3RlLmR4ICsgdGVtcG9Ob3RlLnc7XG5cdFx0XHR2YXIgd2lkdGggPSAtMC42O1xuXHRcdFx0c3RlbSA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIDAsIHAxLCB7XCJ0eXBlXCI6IFwic3RlbVwiLCBcInBpdGNoMlwiOiBwMiwgbGluZXdpZHRoOiB3aWR0aH0pO1xuXHRcdFx0YWJzRWxlbS5hZGRFeHRyYShzdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFic0VsZW07XG5cdH07XG5cblx0VGVtcG9FbGVtZW50LnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24ocmVuZGVyZXIpIHtcblx0XHR2YXIgeCA9IHRoaXMueDtcblx0XHRpZiAodGhpcy5waXRjaCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0d2luZG93LmNvbnNvbGUuZXJyb3IoXCJUZW1wbyBFbGVtZW50IHktY29vcmRpbmF0ZSBub3Qgc2V0LlwiKTtcblxuXHRcdHZhciB5ID0gcmVuZGVyZXIuY2FsY1kodGhpcy5waXRjaCk7XG5cdFx0dmFyIHRleHQ7XG5cdFx0aWYgKHRoaXMudGVtcG8ucHJlU3RyaW5nKSB7XG5cdFx0XHR0ZXh0ID0gcmVuZGVyZXIucmVuZGVyVGV4dCh4LCB5LCB0aGlzLnRlbXBvLnByZVN0cmluZywgJ3RlbXBvZm9udCcsICd0ZW1wbycsIFwic3RhcnRcIik7XG5cdFx0XHR2YXIgc2l6ZSA9IHJlbmRlcmVyLmdldFRleHRTaXplKHRoaXMudGVtcG8ucHJlU3RyaW5nLCAndGVtcG9mb250JywgJ3RlbXBvJywgdGV4dCk7XG5cdFx0XHR2YXIgcHJlV2lkdGggPSBzaXplLndpZHRoO1xuXHRcdFx0dmFyIGNoYXJXaWR0aCA9IHByZVdpZHRoIC8gdGhpcy50ZW1wby5wcmVTdHJpbmcubGVuZ3RoOyAvLyBKdXN0IGdldCBzb21lIGF2ZXJhZ2UgbnVtYmVyIHRvIGluY3JlYXNlIHRoZSBzcGFjaW5nLlxuXHRcdFx0eCArPSBwcmVXaWR0aCArIGNoYXJXaWR0aDtcblx0XHR9XG5cdFx0aWYgKHRoaXMubm90ZSkge1xuXHRcdFx0aWYgKHRoaXMubm90ZSlcblx0XHRcdFx0dGhpcy5ub3RlLnNldFgoeCk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm90ZS5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0XHRcdFx0dGhpcy5ub3RlLmNoaWxkcmVuW2ldLmRyYXcocmVuZGVyZXIsIHgpO1xuXHRcdFx0eCArPSAodGhpcy5ub3RlLncgKyA1KTtcblx0XHRcdHZhciBzdHIgPSBcIj0gXCIgKyB0aGlzLnRlbXBvLmJwbTtcblx0XHRcdHRleHQgPSByZW5kZXJlci5yZW5kZXJUZXh0KHgsIHksIHN0ciwgJ3RlbXBvZm9udCcsICd0ZW1wbycsIFwic3RhcnRcIik7XG5cdFx0XHRzaXplID0gcmVuZGVyZXIuZ2V0VGV4dFNpemUoc3RyLCAndGVtcG9mb250JywgJ3RlbXBvJywgdGV4dCk7XG5cdFx0XHR2YXIgcG9zdFdpZHRoID0gc2l6ZS53aWR0aDtcblx0XHRcdHZhciBjaGFyV2lkdGgyID0gcG9zdFdpZHRoIC8gc3RyLmxlbmd0aDsgLy8gSnVzdCBnZXQgc29tZSBhdmVyYWdlIG51bWJlciB0byBpbmNyZWFzZSB0aGUgc3BhY2luZy5cblx0XHRcdHggKz0gcG9zdFdpZHRoICsgY2hhcldpZHRoMjtcblx0XHR9XG5cdFx0aWYgKHRoaXMudGVtcG8ucG9zdFN0cmluZykge1xuXHRcdFx0cmVuZGVyZXIucmVuZGVyVGV4dCh4LCB5LCB0aGlzLnRlbXBvLnBvc3RTdHJpbmcsICd0ZW1wb2ZvbnQnLCAndGVtcG8nLCBcInN0YXJ0XCIpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gVGVtcG9FbGVtZW50O1xuIiwiLy8gICAgYWJjX3RyaXBsZXRfZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgVHJpcGxldEVsZW0gY2xhc3MuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBzcHJpbnRmID0gcmVxdWlyZSgnLi9zcHJpbnRmJyk7XG5cbnZhciBUcmlwbGV0RWxlbTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRUcmlwbGV0RWxlbSA9IGZ1bmN0aW9uIFRyaXBsZXRFbGVtKG51bWJlciwgYW5jaG9yMSwgb3B0aW9ucykge1xuXHRcdHRoaXMuYW5jaG9yMSA9IGFuY2hvcjE7IC8vIG11c3QgaGF2ZSBhIC54IGFuZCBhIC5wYXJlbnQgcHJvcGVydHkgb3IgYmUgbnVsbCAobWVhbnMgc3RhcnRzIGF0IHRoZSBcImJlZ2lubmluZ1wiIG9mIHRoZSBsaW5lIC0gYWZ0ZXIga2V5IHNpZ25hdHVyZSlcblx0XHR0aGlzLm51bWJlciA9IG51bWJlcjtcblx0XHR0aGlzLmR1cmF0aW9uID0gKCcnK2FuY2hvcjEucGFyZW50LmR1cmF0aW9uQ2xhc3MpLnJlcGxhY2UoL1xcLi8sICctJyk7XG5cdFx0dGhpcy5taWRkbGVFbGVtcyA9IFtdOyAvLyBUaGlzIGlzIHRvIGNhbGN1bGF0ZSB0aGUgaGlnaGVzdCBpbnRlcmlvciBwaXRjaC4gSXQgaXMgdXNlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZHJhd24gYnJhY2tldCBuZXZlciBjcm9zc2VzIGEgcmVhbGx5IGhpZ2ggbWlkZGxlIG5vdGUuXG5cdFx0dGhpcy5mbGF0QmVhbXMgPSBvcHRpb25zLmZsYXRCZWFtcztcblx0fTtcblxuXHRUcmlwbGV0RWxlbS5wcm90b3R5cGUuaXNDbG9zZWQgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5hbmNob3IyO1xuXHR9O1xuXG5cdFRyaXBsZXRFbGVtLnByb3RvdHlwZS5taWRkbGVOb3RlID0gZnVuY3Rpb24oZWxlbSkge1xuXHRcdHRoaXMubWlkZGxlRWxlbXMucHVzaChlbGVtKTtcblx0fTtcblxuXHRUcmlwbGV0RWxlbS5wcm90b3R5cGUuc2V0Q2xvc2VBbmNob3IgPSBmdW5jdGlvbihhbmNob3IyKSB7XG5cdFx0dGhpcy5hbmNob3IyID0gYW5jaG9yMjtcblx0XHQvLyBUT0RPLVBFUjogVW5mb3J0dW5hdGVseSwgSSBkb24ndCBrbm93IGlmIHRoZXJlIGlzIGEgYmVhbSBhYm92ZSB1bnRpbCBhZnRlciB0aGUgdmVydGljYWwgcG9zaXRpb25pbmcgaXMgZG9uZSxcblx0XHQvLyBzbyBJIGRvbid0IGtub3cgd2hldGhlciB0byBsZWF2ZSByb29tIGZvciB0aGUgbnVtYmVyIGFib3ZlLiBUaGVyZWZvcmUsIElmIHRoZXJlIGlzIGEgYmVhbSBvbiB0aGUgZmlyc3Qgbm90ZSwgSSdsbCBsZWF2ZSByb29tIGp1c3QgaW4gY2FzZS5cblx0XHRpZiAodGhpcy5hbmNob3IxLnBhcmVudC5iZWFtKVxuXHRcdFx0dGhpcy5lbmRpbmdIZWlnaHRBYm92ZSA9IDQ7XG5cdH07XG5cblx0VHJpcGxldEVsZW0ucHJvdG90eXBlLnNldFVwcGVyQW5kTG93ZXJFbGVtZW50cyA9IGZ1bmN0aW9uKC8qcG9zaXRpb25ZKi8pIHtcblx0fTtcblxuXHRUcmlwbGV0RWxlbS5wcm90b3R5cGUubGF5b3V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0Ly8gVE9ETyBlbmQgYW5kIGJlZ2lubmluZyBvZiBsaW5lIChQRVI6IFAuUy4gSSdtIG5vdCBzdXJlIHRoaXMgY2FuIGhhcHBlbjogSSB0aGluayB0aGUgcGFyc2VyIHdpbGwgYWx3YXlzIHNwZWNpZnkgYm90aCB0aGUgc3RhcnQgYW5kIGVuZCBwb2ludHMuKVxuXHRcdGlmICh0aGlzLmFuY2hvcjEgJiYgdGhpcy5hbmNob3IyKSB7XG5cdFx0XHR0aGlzLmhhc0JlYW0gPSB0aGlzLmFuY2hvcjEucGFyZW50LmJlYW0gJiYgdGhpcy5hbmNob3IxLnBhcmVudC5iZWFtID09PSB0aGlzLmFuY2hvcjIucGFyZW50LmJlYW07XG5cblx0XHRcdGlmICh0aGlzLmhhc0JlYW0pIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBiZWFtIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBkcmF3IGFueXRoaW5nIGV4Y2VwdCB0aGUgdGV4dC4gVGhlIGJlYW0gY291bGQgZWl0aGVyIGJlIGFib3ZlIG9yIGJlbG93LlxuXHRcdFx0XHR2YXIgYmVhbSA9IHRoaXMuYW5jaG9yMS5wYXJlbnQuYmVhbTtcblx0XHRcdFx0dmFyIGxlZnQgPSBiZWFtLmlzQWJvdmUoKSA/IHRoaXMuYW5jaG9yMS54ICsgdGhpcy5hbmNob3IxLncgOiB0aGlzLmFuY2hvcjEueDtcblx0XHRcdFx0dGhpcy55VGV4dFBvcyA9IGJlYW0uaGVpZ2h0QXRNaWRwb2ludChsZWZ0LCAgdGhpcy5hbmNob3IyLngpO1xuXHRcdFx0XHR0aGlzLnlUZXh0UG9zICs9IGJlYW0uaXNBYm92ZSgpID8gMyA6IC0yOyAvLyBUaGlzIGNyZWF0ZXMgc29tZSBzcGFjZSBiZXR3ZWVuIHRoZSBiZWFtIGFuZCB0aGUgbnVtYmVyLlxuXHRcdFx0XHR0aGlzLnRvcCA9IHRoaXMueVRleHRQb3MgKyAxO1xuXHRcdFx0XHR0aGlzLmJvdHRvbSA9IHRoaXMueVRleHRQb3MgLSAyO1xuXHRcdFx0XHRpZiAoYmVhbS5pc0Fib3ZlKCkpXG5cdFx0XHRcdFx0dGhpcy5lbmRpbmdIZWlnaHRBYm92ZSA9IDQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJZiB0aGVyZSBpc24ndCBhIGJlYW0sIHRoZW4gd2UgbmVlZCB0byBkcmF3IHRoZSBicmFja2V0IGFuZCB0aGUgdGV4dC4gVGhlIGJyYWNrZXQgaXMgYWx3YXlzIGFib3ZlLlxuXHRcdFx0XHQvLyBUaGUgYnJhY2tldCBpcyBuZXZlciBsb3dlciB0aGFuIHRoZSAnYScgbGluZSwgYnV0IGlzIDQgcGl0Y2hlcyBhYm92ZSB0aGUgZmlyc3QgYW5kIGxhc3Qgbm90ZXMuIElmIHRoZXJlIGlzXG5cdFx0XHRcdC8vIGEgdGFsbCBub3RlIGluIHRoZSBtaWRkbGUsIHRoZSBicmFja2V0IGlzIGhvcml6b250YWwgYW5kIGFib3ZlIHRoZSBoaWdoZXN0IG5vdGUuXG5cdFx0XHRcdHRoaXMuc3RhcnROb3RlID0gTWF0aC5tYXgodGhpcy5hbmNob3IxLnBhcmVudC50b3AsIDkpICsgNDtcblx0XHRcdFx0dGhpcy5lbmROb3RlID0gTWF0aC5tYXgodGhpcy5hbmNob3IyLnBhcmVudC50b3AsIDkpICsgNDtcblx0XHRcdFx0Ly8gSWYgaXQgc3RhcnRzIG9yIGVuZHMgb24gYSByZXN0LCBtYWtlIHRoZSBiZWFtIGhvcml6b250YWxcblx0XHRcdFx0aWYgKHRoaXMuYW5jaG9yMS5wYXJlbnQudHlwZSA9PT0gXCJyZXN0XCIgJiYgdGhpcy5hbmNob3IyLnBhcmVudC50eXBlICE9PSBcInJlc3RcIilcblx0XHRcdFx0XHR0aGlzLnN0YXJ0Tm90ZSA9IHRoaXMuZW5kTm90ZTtcblx0XHRcdFx0ZWxzZSBpZiAodGhpcy5hbmNob3IyLnBhcmVudC50eXBlID09PSBcInJlc3RcIiAmJiB0aGlzLmFuY2hvcjEucGFyZW50LnR5cGUgIT09IFwicmVzdFwiKVxuXHRcdFx0XHRcdHRoaXMuZW5kTm90ZSA9IHRoaXMuc3RhcnROb3RlO1xuXHRcdFx0XHQvLyBTZWUgaWYgdGhlIG1pZGRsZSBub3RlIGlzIHJlYWxseSBoaWdoLlxuXHRcdFx0XHR2YXIgbWF4ID0gMDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pZGRsZUVsZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bWF4ID0gTWF0aC5tYXgobWF4LCB0aGlzLm1pZGRsZUVsZW1zW2ldLnRvcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWF4ICs9IDQ7XG5cdFx0XHRcdGlmIChtYXggPiB0aGlzLnN0YXJ0Tm90ZSB8fCBtYXggPiB0aGlzLmVuZE5vdGUpIHtcblx0XHRcdFx0XHR0aGlzLnN0YXJ0Tm90ZSA9IG1heDtcblx0XHRcdFx0XHR0aGlzLmVuZE5vdGUgPSBtYXg7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuZmxhdEJlYW1zKSB7XG5cdFx0XHRcdFx0dGhpcy5zdGFydE5vdGUgPSBNYXRoLm1heCh0aGlzLnN0YXJ0Tm90ZSwgdGhpcy5lbmROb3RlKTtcblx0XHRcdFx0XHR0aGlzLmVuZE5vdGUgPSBNYXRoLm1heCh0aGlzLnN0YXJ0Tm90ZSwgdGhpcy5lbmROb3RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMueVRleHRQb3MgPSB0aGlzLnN0YXJ0Tm90ZSArICh0aGlzLmVuZE5vdGUgLSB0aGlzLnN0YXJ0Tm90ZSkgLyAyO1xuXHRcdFx0XHR0aGlzLnRvcCA9IHRoaXMueVRleHRQb3MgKyAxO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5taWRkbGVFbGVtcztcblx0XHRkZWxldGUgdGhpcy5mbGF0QmVhbXM7XG5cdH07XG5cblx0VHJpcGxldEVsZW0ucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihyZW5kZXJlcikge1xuXHRcdHZhciB4VGV4dFBvcztcblx0XHRpZiAodGhpcy5oYXNCZWFtKSB7XG5cdFx0XHR2YXIgbGVmdCA9IHRoaXMuYW5jaG9yMS5wYXJlbnQuYmVhbS5pc0Fib3ZlKCkgPyB0aGlzLmFuY2hvcjEueCArIHRoaXMuYW5jaG9yMS53IDogdGhpcy5hbmNob3IxLng7XG5cdFx0XHR4VGV4dFBvcyA9IHRoaXMuYW5jaG9yMS5wYXJlbnQuYmVhbS54QXRNaWRwb2ludChsZWZ0LCB0aGlzLmFuY2hvcjIueCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHhUZXh0UG9zID0gdGhpcy5hbmNob3IxLnggKyAodGhpcy5hbmNob3IyLnggKyB0aGlzLmFuY2hvcjIudyAtIHRoaXMuYW5jaG9yMS54KSAvIDI7XG5cdFx0XHRkcmF3QnJhY2tldChyZW5kZXJlciwgdGhpcy5hbmNob3IxLngsIHRoaXMuc3RhcnROb3RlLCB0aGlzLmFuY2hvcjIueCArIHRoaXMuYW5jaG9yMi53LCB0aGlzLmVuZE5vdGUsIHRoaXMuZHVyYXRpb24pO1xuXHRcdH1cblx0XHRyZW5kZXJlci5yZW5kZXJUZXh0KHhUZXh0UG9zLCByZW5kZXJlci5jYWxjWSh0aGlzLnlUZXh0UG9zKSwgXCJcIiArIHRoaXMubnVtYmVyLCAndHJpcGxldGZvbnQnLCByZW5kZXJlci5hZGRDbGFzc2VzKCd0cmlwbGV0IGQnK3RoaXMuZHVyYXRpb24pLCBcIm1pZGRsZVwiLCB0cnVlKTtcblx0fTtcblxuXHRmdW5jdGlvbiBkcmF3TGluZShyZW5kZXJlciwgbCwgdCwgciwgYiwgZHVyYXRpb24pIHtcblx0XHR2YXIgcGF0aFN0cmluZyA9IHNwcmludGYoXCJNICVmICVmIEwgJWYgJWZcIixcblx0XHRcdGwsIHQsIHIsIGIpO1xuXHRcdHJlbmRlcmVyLnByaW50UGF0aCh7cGF0aDogcGF0aFN0cmluZywgc3Ryb2tlOiBcIiMwMDAwMDBcIiwgJ2NsYXNzJzogcmVuZGVyZXIuYWRkQ2xhc3NlcygndHJpcGxldCBkJytkdXJhdGlvbil9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdCcmFja2V0KHJlbmRlcmVyLCB4MSwgeTEsIHgyLCB5MiwgZHVyYXRpb24pIHtcblx0XHR5MSA9IHJlbmRlcmVyLmNhbGNZKHkxKTtcblx0XHR5MiA9IHJlbmRlcmVyLmNhbGNZKHkyKTtcblx0XHR2YXIgYnJhY2tldEhlaWdodCA9IDU7XG5cblx0XHQvLyBEcmF3IHZlcnRpY2FsIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZFxuXHRcdGRyYXdMaW5lKHJlbmRlcmVyLCB4MSwgeTEsIHgxLCB5MSArIGJyYWNrZXRIZWlnaHQsIGR1cmF0aW9uKTtcblx0XHRkcmF3TGluZShyZW5kZXJlciwgeDIsIHkyLCB4MiwgeTIgKyBicmFja2V0SGVpZ2h0LCBkdXJhdGlvbik7XG5cblx0XHQvLyBmaWd1cmUgb3V0IG1pZHBvaW50cyB0byBkcmF3IHRoZSBicm9rZW4gbGluZS5cblx0XHR2YXIgbWlkWCA9IHgxICsgKHgyLXgxKS8yO1xuXHRcdC8vdmFyIG1pZFkgPSB5MSArICh5Mi15MSkvMjtcblx0XHR2YXIgZ2FwV2lkdGggPSA4O1xuXHRcdHZhciBzbG9wZSA9ICh5MiAtIHkxKSAvICh4MiAtIHgxKTtcblx0XHR2YXIgbGVmdEVuZFggPSBtaWRYIC0gZ2FwV2lkdGg7XG5cdFx0dmFyIGxlZnRFbmRZID0geTEgKyAobGVmdEVuZFggLSB4MSkgKiBzbG9wZTtcblx0XHRkcmF3TGluZShyZW5kZXJlciwgeDEsIHkxLCBsZWZ0RW5kWCwgbGVmdEVuZFksIGR1cmF0aW9uKTtcblx0XHR2YXIgcmlnaHRTdGFydFggPSBtaWRYICsgZ2FwV2lkdGg7XG5cdFx0dmFyIHJpZ2h0U3RhcnRZID0geTEgKyAocmlnaHRTdGFydFggLSB4MSkgKiBzbG9wZTtcblx0XHRkcmF3TGluZShyZW5kZXJlciwgcmlnaHRTdGFydFgsIHJpZ2h0U3RhcnRZLCB4MiwgeTIsIGR1cmF0aW9uKTtcblx0fVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmlwbGV0RWxlbTtcbiIsIi8vICAgIGFiY192b2ljZV9lbGVtZW50LmpzOiBEZWZpbml0aW9uIG9mIHRoZSBWb2ljZUVsZW1lbnQgY2xhc3MuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19jb21tb24nKTtcblxudmFyIFZvaWNlRWxlbWVudCA9IGZ1bmN0aW9uIFZvaWNlRWxlbWVudCh2b2ljZW51bWJlciwgdm9pY2V0b3RhbCkge1xuXHR0aGlzLmNoaWxkcmVuID0gW107XG5cdHRoaXMuYmVhbXMgPSBbXTtcblx0dGhpcy5vdGhlcmNoaWxkcmVuID0gW107IC8vIHRpZXMsIHNsdXJzLCB0cmlwbGV0c1xuXHR0aGlzLncgPSAwO1xuXHR0aGlzLmR1cGxpY2F0ZSA9IGZhbHNlO1xuXHR0aGlzLnZvaWNlbnVtYmVyID0gdm9pY2VudW1iZXI7IC8vbnVtYmVyIG9mIHRoZSB2b2ljZSBvbiBhIGdpdmVuIHN0YXZlIChub3Qgc3RhZmZncm91cClcblx0dGhpcy52b2ljZXRvdGFsID0gdm9pY2V0b3RhbDtcblx0dGhpcy5ib3R0b20gPSA3O1xuXHR0aGlzLnRvcCA9IDc7XG5cdHRoaXMuc3BlY2lhbFkgPSB7XG5cdFx0dGVtcG9IZWlnaHRBYm92ZTogMCxcblx0XHRwYXJ0SGVpZ2h0QWJvdmU6IDAsXG5cdFx0dm9sdW1lSGVpZ2h0QWJvdmU6IDAsXG5cdFx0ZHluYW1pY0hlaWdodEFib3ZlOiAwLFxuXHRcdGVuZGluZ0hlaWdodEFib3ZlOiAwLFxuXHRcdGNob3JkSGVpZ2h0QWJvdmU6IDAsXG5cdFx0bHlyaWNIZWlnaHRBYm92ZTogMCxcblxuXHRcdGx5cmljSGVpZ2h0QmVsb3c6IDAsXG5cdFx0Y2hvcmRIZWlnaHRCZWxvdzogMCxcblx0XHR2b2x1bWVIZWlnaHRCZWxvdzogMCxcblx0XHRkeW5hbWljSGVpZ2h0QmVsb3c6IDBcblx0fTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcblx0aWYgKGNoaWxkLnR5cGUgPT09ICdiYXInKSB7XG5cdFx0dmFyIGZpcnN0SXRlbSA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGZpcnN0SXRlbSAmJiBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMuY2hpbGRyZW5baV0udHlwZSAhPT0gXCJzdGFmZi1leHRyYVwiICYmIHRoaXMuY2hpbGRyZW5baV0udHlwZSAhPT0gXCJ0ZW1wb1wiKVxuXHRcdFx0XHRmaXJzdEl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFmaXJzdEl0ZW0pIHtcblx0XHRcdHRoaXMuYmVhbXMucHVzaChcImJhclwiKTtcblx0XHRcdHRoaXMub3RoZXJjaGlsZHJlbi5wdXNoKFwiYmFyXCIpO1xuXHRcdH1cblx0fVxuXHR0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoXSA9IGNoaWxkO1xuXHR0aGlzLnNldFJhbmdlKGNoaWxkKTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuc2V0TGltaXQgPSBmdW5jdGlvbihtZW1iZXIsIGNoaWxkKSB7XG5cdC8vIFNvbWV0aW1lcyB3ZSBnZXQgYW4gYWJzb2x1dGUgZWxlbWVudCBpbiBoZXJlIGFuZCBzb21ldGltZXMgd2UgZ2V0IHNvbWUgdHlwZSBvZiByZWxhdGl2ZSBlbGVtZW50LlxuXHQvLyBJZiB0aGVyZSBpcyBhIFwic3BlY2lhbFlcIiBlbGVtZW50LCB0aGVuIGFzc3VtZSBpdCBpcyBhbiBhYnNvbHV0ZSBlbGVtZW50LiBJZiB0aGF0IGRvZXNuJ3QgZXhpc3QsIGxvb2sgZm9yIHRoZVxuXHQvLyBzYW1lIG1lbWJlcnMgYXQgdGhlIHRvcCBsZXZlbCwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhleSBhcmUgaW4gcmVsYXRpdmUgZWxlbWVudHMuXG5cdHZhciBzcGVjaWFsWSA9IGNoaWxkLnNwZWNpYWxZO1xuXHRpZiAoIXNwZWNpYWxZKSBzcGVjaWFsWSA9IGNoaWxkO1xuXHRpZiAoIXNwZWNpYWxZW21lbWJlcl0pIHJldHVybjtcblx0aWYgKCF0aGlzLnNwZWNpYWxZW21lbWJlcl0pXG5cdFx0dGhpcy5zcGVjaWFsWVttZW1iZXJdID0gc3BlY2lhbFlbbWVtYmVyXTtcblx0ZWxzZVxuXHRcdHRoaXMuc3BlY2lhbFlbbWVtYmVyXSA9IE1hdGgubWF4KHRoaXMuc3BlY2lhbFlbbWVtYmVyXSwgc3BlY2lhbFlbbWVtYmVyXSk7XG59O1xuXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLm1vdmVEZWNvcmF0aW9ucyA9IGZ1bmN0aW9uKGJlYW0pIHtcblx0dmFyIHBhZGRpbmcgPSAxLjU7IC8vIFRoaXMgaXMgdGhlIHZlcnRpY2FsIHBhZGRpbmcgYmV0d2VlbiBlbGVtZW50cywgaW4gcGl0Y2hlcy5cblx0Zm9yICh2YXIgY2ggPSAwOyBjaCA8IGJlYW0uZWxlbXMubGVuZ3RoOyBjaCsrKSB7XG5cdFx0dmFyIGNoaWxkID0gYmVhbS5lbGVtc1tjaF07XG5cdFx0aWYgKGNoaWxkLnRvcCkge1xuXHRcdFx0Ly8gV2Ugbm93IGtub3cgd2hlcmUgdGhlIG9ybmFtZW50cyBzaG91bGQgaGF2ZSBiZWVuIHBsYWNlZCwgc28gbW92ZSB0aGVtIGlmIHRoZXkgd291bGQgb3ZlcmxhcC5cblx0XHRcdHZhciB0b3AgPSBiZWFtLnlBdE5vdGUoY2hpbGQpO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZWwgPSBjaGlsZC5jaGlsZHJlbltpXTtcblx0XHRcdFx0aWYgKGVsLmtsYXNzID09PSAnb3JuYW1lbnQnKSB7XG5cdFx0XHRcdFx0aWYgKGVsLmJvdHRvbSAtIHBhZGRpbmcgPCB0b3ApIHtcblx0XHRcdFx0XHRcdHZhciBkaXN0YW5jZSA9IHRvcCAtIGVsLmJvdHRvbSArIHBhZGRpbmc7IC8vIEZpbmQgdGhlIGRpc3RhbmNlIHRoYXQgaXQgbmVlZHMgdG8gbW92ZSBhbmQgYWRkIGEgbGl0dGxlIG1hcmdpbiBzbyB0aGUgZWxlbWVudCBkb2Vzbid0IHRvdWNoIHRoZSBiZWFtLlxuXHRcdFx0XHRcdFx0ZWwuYm90dG9tICs9IGRpc3RhbmNlO1xuXHRcdFx0XHRcdFx0ZWwudG9wICs9IGRpc3RhbmNlO1xuXHRcdFx0XHRcdFx0ZWwucGl0Y2ggKz0gZGlzdGFuY2U7XG5cdFx0XHRcdFx0XHR0b3AgPSBjaGlsZC50b3AgPSBlbC50b3A7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmFkanVzdFJhbmdlID0gZnVuY3Rpb24oY2hpbGQpIHtcblx0aWYgKGNoaWxkLmJvdHRvbSAhPT0gdW5kZWZpbmVkKVxuXHRcdHRoaXMuYm90dG9tID0gTWF0aC5taW4odGhpcy5ib3R0b20sIGNoaWxkLmJvdHRvbSk7XG5cdGlmIChjaGlsZC50b3AgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnRvcCA9IE1hdGgubWF4KHRoaXMudG9wLCBjaGlsZC50b3ApO1xufTtcblxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5zZXRSYW5nZSA9IGZ1bmN0aW9uKGNoaWxkKSB7XG5cdHRoaXMuYWRqdXN0UmFuZ2UoY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCd0ZW1wb0hlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdwYXJ0SGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ3ZvbHVtZUhlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdkeW5hbWljSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2VuZGluZ0hlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdjaG9yZEhlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdseXJpY0hlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdseXJpY0hlaWdodEJlbG93JywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdjaG9yZEhlaWdodEJlbG93JywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCd2b2x1bWVIZWlnaHRCZWxvdycsIGNoaWxkKTtcblx0dGhpcy5zZXRMaW1pdCgnZHluYW1pY0hlaWdodEJlbG93JywgY2hpbGQpO1xufTtcblxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5zZXRVcHBlckFuZExvd2VyRWxlbWVudHMgPSBmdW5jdGlvbihwb3NpdGlvblkpIHtcblx0dmFyIGk7XG5cdGZvciAoaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGFic2VsZW0gPSB0aGlzLmNoaWxkcmVuW2ldO1xuXHRcdGFic2VsZW0uc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzKHBvc2l0aW9uWSk7XG5cdH1cblx0Zm9yIChpID0gMDsgaSA8IHRoaXMub3RoZXJjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBhYnNlbGVtID0gdGhpcy5vdGhlcmNoaWxkcmVuW2ldO1xuXHRcdGlmICh0eXBlb2YgYWJzZWxlbSAhPT0gJ3N0cmluZycpXG5cdFx0XHRhYnNlbGVtLnNldFVwcGVyQW5kTG93ZXJFbGVtZW50cyhwb3NpdGlvblkpO1xuXHR9XG59O1xuXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmFkZE90aGVyID0gZnVuY3Rpb24gKGNoaWxkKSB7XG5cdHRoaXMub3RoZXJjaGlsZHJlbi5wdXNoKGNoaWxkKTtcblx0dGhpcy5zZXRSYW5nZShjaGlsZCk7XG59O1xuXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmFkZEJlYW0gPSBmdW5jdGlvbiAoY2hpbGQpIHtcblx0dGhpcy5iZWFtcy5wdXNoKGNoaWxkKTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlSW5kaWNlcyA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKCF0aGlzLmxheW91dEVuZGVkKCkpIHtcblx0XHR0aGlzLmR1cmF0aW9uaW5kZXggKz0gdGhpcy5jaGlsZHJlblt0aGlzLmldLmR1cmF0aW9uO1xuXHRcdGlmICh0aGlzLmNoaWxkcmVuW3RoaXMuaV0udHlwZSA9PT0gJ2JhcicpIHRoaXMuZHVyYXRpb25pbmRleCA9IE1hdGgucm91bmQodGhpcy5kdXJhdGlvbmluZGV4KjY0KS82NDsgLy8gZXZlcnl0aW1lIHdlIG1lZXQgYSBiYXJsaW5lLCBkbyByb3VuZGluZyB0byBuZWFyZXN0IDY0dGhcblx0XHR0aGlzLmkrKztcblx0fVxufTtcblxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5sYXlvdXRFbmRlZCA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICh0aGlzLmk+PXRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuZ2V0RHVyYXRpb25JbmRleCA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIHRoaXMuZHVyYXRpb25pbmRleCAtICh0aGlzLmNoaWxkcmVuW3RoaXMuaV0gJiYgKHRoaXMuY2hpbGRyZW5bdGhpcy5pXS5kdXJhdGlvbj4wKT8wOjAuMDAwMDAwNSk7IC8vIGlmIHRoZSBpdGggZWxlbWVudCBkb2Vzbid0IGhhdmUgYSBkdXJhdGlvbiAoaXMgbm90IGEgbm90ZSksIGl0cyBkdXJhdGlvbiBpbmRleCBpcyBmcmFjdGlvbmFsbHkgYmVmb3JlLiBUaGlzIGVuYWJsZXMgQ0xFRiBLRVlTSUcgVElNRVNJRyBQQVJULCBldGMuIHRvIGJlIGxhaWQgb3V0IGJlZm9yZSB3ZSBnZXQgdG8gdGhlIGZpcnN0IG5vdGUgb2Ygb3RoZXIgdm9pY2VzXG59O1xuXG4vLyBudW1iZXIgb2Ygc3BhY2luZyB1bml0cyBleHBlY3RlZCBmb3IgbmV4dCBwb3NpdGlvbmluZ1xuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5nZXRTcGFjaW5nVW5pdHMgPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiBNYXRoLnNxcnQodGhpcy5zcGFjaW5nZHVyYXRpb24qOCk7XG5cdC8vIFRPRE8tUEVSOiBPbiBzaG9ydCBsaW5lcywgdGhpcyB3b3VsZCBuZXZlciB0cmlnZ2VyLCBzbyB0aGUgc3BhY2luZyB3YXMgd3JvbmcuIEkganVzdCBjaGFuZ2VkIHRoaXMgbGluZSBlbXBpcmljYWxseSwgdGhvdWdoLCBzbyBJIGRvbid0IGtub3cgaWYgdGhlcmUgYXJlIG90aGVyIHJhbWlmaWNhdGlvbnMuXG5cdC8vcmV0dXJuICh0aGlzLm1pbng8dGhpcy5uZXh0eCkgPyBNYXRoLnNxcnQodGhpcy5zcGFjaW5nZHVyYXRpb24qOCkgOiAwOyAvLyB3ZSBoYXZlbid0IHVzZWQgYW55IHNwYWNpbmcgdW5pdHMgaWYgd2UgZW5kIHVwIHVzaW5nIG1pbnhcbn07XG5cbi8vXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmdldE5leHRYID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gTWF0aC5tYXgodGhpcy5taW54LCB0aGlzLm5leHR4KTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuYmVnaW5MYXlvdXQgPSBmdW5jdGlvbiAoc3RhcnR4KSB7XG5cdHRoaXMuaT0wO1xuXHR0aGlzLmR1cmF0aW9uaW5kZXg9MDtcblx0Ly90aGlzLmlpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuXHR0aGlzLnN0YXJ0eD1zdGFydHg7XG5cdHRoaXMubWlueD1zdGFydHg7IC8vIGZ1cnRoZXN0IGxlZnQgdG8gd2hlcmUgbmVnYXRpdmVseSBwb3NpdGlvbmVkIGVsZW1lbnRzIGFyZSBhbGxvd2VkIHRvIGdvXG5cdHRoaXMubmV4dHg9c3RhcnR4OyAvLyB4IHBvc2l0aW9uIHdoZXJlIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhpcyB2b2ljZSBzaG91bGQgYmUgcGxhY2VkIGFzc3VtaW5nIG5vIG90aGVyIHZvaWNlcyBhbmQgbm8gZml4ZWQgd2lkdGggY29uc3RyYWludHNcblx0dGhpcy5zcGFjaW5nZHVyYXRpb249MDsgLy8gZHVyYXRpb24gbGVmdCB0byBiZSBsYWlkIG91dCBpbiBjdXJyZW50IGl0ZXJhdGlvbiAob21pdHRpbmcgYWRkaXRpb25hbCBzcGFjaW5nIGR1ZSB0byBvdGhlciBhc3BlY3RzLCBzdWNoIGFzIGJhcnMsIGRvdHMsIHNoYXJwcyBhbmQgZmxhdHMpXG59O1xuXG4vLyBUcnkgdG8gbGF5b3V0IHRoZSBlbGVtZW50IGF0IGluZGV4IHRoaXMuaVxuLy8geCAtIHBvc2l0aW9uIHRvIHRyeSB0byBsYXlvdXQgdGhlIGVsZW1lbnQgYXRcbi8vIHNwYWNpbmcgLSBiYXNlIHNwYWNpbmdcbi8vIGNhbid0IGNhbGwgdGhpcyBmdW5jdGlvbiBtb3JlIHRoYW4gb25jZSBwZXIgaXRlcmF0aW9uXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmxheW91dE9uZUl0ZW0gPSBmdW5jdGlvbiAoeCwgc3BhY2luZykge1xuXHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW3RoaXMuaV07XG5cdGlmICghY2hpbGQpIHJldHVybiAwO1xuXHR2YXIgZXIgPSB4IC0gdGhpcy5taW54OyAvLyBhdmFpbGFibGUgZXh0cmF3aWR0aCB0byB0aGUgbGVmdFxuXHR2YXIgZXh0cmFXaWR0aCA9IGNoaWxkLmdldEV4dHJhV2lkdGgoKTtcblx0aWYgKGVyPGV4dHJhV2lkdGgpIHsgLy8gc2hpZnQgcmlnaHQgYnkgbmVlZGVkIGFtb3VudFxuXHRcdC8vIFRoZXJlJ3MgYW4gZXhjZXB0aW9uIGlmIGEgYmFyIGVsZW1lbnQgaXMgYWZ0ZXIgYSBQYXJ0IGVsZW1lbnQsIHRoZXJlIGlzIG5vIHNoaWZ0LlxuXHRcdGlmICh0aGlzLmkgPT09IDAgfHwgY2hpbGQudHlwZSAhPT0gJ2JhcicgfHwgKHRoaXMuY2hpbGRyZW5bdGhpcy5pLTFdLnR5cGUgIT09ICdwYXJ0JyAmJiB0aGlzLmNoaWxkcmVuW3RoaXMuaS0xXS50eXBlICE9PSAndGVtcG8nKSApXG5cdFx0XHR4Kz1leHRyYVdpZHRoLWVyO1xuXHR9XG5cdGNoaWxkLnNldFgoeCk7XG5cblx0dGhpcy5zcGFjaW5nZHVyYXRpb24gPSBjaGlsZC5kdXJhdGlvbjtcblx0Ly91cGRhdGUgbWlueFxuXHR0aGlzLm1pbnggPSB4K2NoaWxkLmdldE1pbldpZHRoKCk7IC8vIGFkZCBuZWNlc3NhcnkgbGF5b3V0IHNwYWNlXG5cdGlmICh0aGlzLmkhPT10aGlzLmNoaWxkcmVuLmxlbmd0aC0xKSB0aGlzLm1pbngrPWNoaWxkLm1pbnNwYWNpbmc7IC8vIGFkZCBtaW5pbXVtc3BhY2luZyBleGNlcHQgb24gbGFzdCBlbGVtXG5cblx0dGhpcy51cGRhdGVOZXh0WCh4LCBzcGFjaW5nKTtcblxuXHQvLyBjb250cmlidXRlIHRvIHN0YWZmIHkgcG9zaXRpb25cblx0Ly90aGlzLnN0YWZmLnRvcCA9IE1hdGgubWF4KGNoaWxkLnRvcCx0aGlzLnN0YWZmLnRvcCk7XG5cdC8vdGhpcy5zdGFmZi5ib3R0b20gPSBNYXRoLm1pbihjaGlsZC5ib3R0b20sdGhpcy5zdGFmZi5ib3R0b20pO1xuXG5cdHJldHVybiB4OyAvLyB3aGVyZSB3ZSBlbmQgdXAgaGF2aW5nIHBsYWNlZCB0aGUgY2hpbGRcbn07XG5cbi8vIGNhbGwgd2hlbiBzcGFjaW5nZHVyYXRpb24gaGFzIGJlZW4gdXBkYXRlZFxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS51cGRhdGVOZXh0WCA9IGZ1bmN0aW9uICh4LCBzcGFjaW5nKSB7XG5cdHRoaXMubmV4dHg9IHggKyAoc3BhY2luZypNYXRoLnNxcnQodGhpcy5zcGFjaW5nZHVyYXRpb24qOCkpO1xufTtcblxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5zaGlmdFJpZ2h0ID0gZnVuY3Rpb24gKGR4KSB7XG5cdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5pXTtcblx0aWYgKCFjaGlsZCkgcmV0dXJuO1xuXHRjaGlsZC5zZXRYKGNoaWxkLngrZHgpO1xuXHR0aGlzLm1pbngrPWR4O1xuXHR0aGlzLm5leHR4Kz1keDtcbn07XG5cbmZ1bmN0aW9uIGlzTm9uU3BhY2VyUmVzdChlbGVtKSB7XG5cdGlmIChlbGVtLnR5cGUgIT09ICdyZXN0Jylcblx0XHRyZXR1cm4gZmFsc2U7XG5cdGlmIChlbGVtLmFiY2VsZW0gJiYgZWxlbS5hYmNlbGVtLnJlc3QgJiYgZWxlbS5hYmNlbGVtLnJlc3QudHlwZSAhPT0gJ3NwYWNlcicpXG5cdFx0cmV0dXJuIHRydWU7XG5cdHJldHVybiBmYWxzZTtcbn1cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChyZW5kZXJlciwgYmFydG9wKSB7XG5cdHZhciB3aWR0aCA9IHRoaXMudy0xO1xuXHRyZW5kZXJlci5zdGFmZmJvdHRvbSA9IHRoaXMuc3RhZmYuYm90dG9tO1xuXHQvL3RoaXMuYmFyYm90dG9tID0gcmVuZGVyZXIuY2FsY1koMik7XG5cblx0cmVuZGVyZXIubWVhc3VyZU51bWJlciA9IG51bGw7XG5cdHJlbmRlcmVyLm5vdGVOdW1iZXIgPSBudWxsO1xuXHRpZiAodGhpcy5oZWFkZXIpIHsgLy8gcHJpbnQgdm9pY2UgbmFtZVxuXHRcdHZhciB0ZXh0cGl0Y2ggPSAxNCAtICh0aGlzLnZvaWNlbnVtYmVyKzEpKigxMi8odGhpcy52b2ljZXRvdGFsKzEpKTtcblx0XHRyZW5kZXJlci5yZW5kZXJUZXh0KHJlbmRlcmVyLnBhZGRpbmcubGVmdCwgcmVuZGVyZXIuY2FsY1kodGV4dHBpdGNoKSwgdGhpcy5oZWFkZXIsICd2b2ljZWZvbnQnLCAnc3RhZmYtZXh0cmEgdm9pY2UtbmFtZScsICdzdGFydCcpO1xuXHR9XG5cblx0Zm9yICh2YXIgaT0wLCBpaT10aGlzLmNoaWxkcmVuLmxlbmd0aDsgaTxpaTsgaSsrKSB7XG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblx0XHR2YXIganVzdEluaXRpYWxpemVkTWVhc3VyZU51bWJlciA9IGZhbHNlO1xuXHRcdGlmIChjaGlsZC50eXBlICE9PSAnc3RhZmYtZXh0cmEnICYmIHJlbmRlcmVyLm1lYXN1cmVOdW1iZXIgPT09IG51bGwpIHtcblx0XHRcdHJlbmRlcmVyLm1lYXN1cmVOdW1iZXIgPSAwO1xuXHRcdFx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdFx0XHRqdXN0SW5pdGlhbGl6ZWRNZWFzdXJlTnVtYmVyID0gdHJ1ZTtcblx0XHR9XG5cdFx0Y2hpbGQuZHJhdyhyZW5kZXJlciwgKHRoaXMuYmFydG8gfHwgaT09PWlpLTEpP2JhcnRvcDowKTtcblx0XHRpZiAoY2hpbGQudHlwZSA9PT0gJ25vdGUnIHx8IGlzTm9uU3BhY2VyUmVzdChjaGlsZCkpXG5cdFx0XHRyZW5kZXJlci5ub3RlTnVtYmVyKys7XG5cdFx0aWYgKGNoaWxkLnR5cGUgPT09ICdiYXInICYmICFqdXN0SW5pdGlhbGl6ZWRNZWFzdXJlTnVtYmVyKSB7XG5cdFx0XHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyKys7XG5cdFx0XHRyZW5kZXJlci5ub3RlTnVtYmVyID0gMDtcblx0XHR9XG5cdH1cblxuXHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyID0gMDtcblx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdHBhcnNlQ29tbW9uLmVhY2godGhpcy5iZWFtcywgZnVuY3Rpb24oYmVhbSkge1xuXHRcdGlmIChiZWFtID09PSAnYmFyJykge1xuXHRcdFx0cmVuZGVyZXIubWVhc3VyZU51bWJlcisrO1xuXHRcdFx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdFx0fSBlbHNlXG5cdFx0XHRiZWFtLmRyYXcocmVuZGVyZXIpOyAvLyBiZWFtcyBtdXN0IGJlIGRyYXduIGZpcnN0IGZvciBwcm9wZXIgcHJpbnRpbmcgb2YgdHJpcGxldHMsIHNsdXJzIGFuZCB0aWVzLlxuXHR9KTtcblxuXHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyID0gMDtcblx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cGFyc2VDb21tb24uZWFjaCh0aGlzLm90aGVyY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG5cdFx0aWYgKGNoaWxkID09PSAnYmFyJykge1xuXHRcdFx0cmVuZGVyZXIubWVhc3VyZU51bWJlcisrO1xuXHRcdFx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdFx0fSBlbHNlXG5cdFx0XHRjaGlsZC5kcmF3KHJlbmRlcmVyLHNlbGYuc3RhcnR4KzEwLHdpZHRoKTtcblx0fSk7XG5cbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUubGF5b3V0QmVhbXMgPSBmdW5jdGlvbigpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJlYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHRoaXMuYmVhbXNbaV0ubGF5b3V0KSB7XG5cdFx0XHR0aGlzLmJlYW1zW2ldLmxheW91dCgpO1xuXHRcdFx0dGhpcy5tb3ZlRGVjb3JhdGlvbnModGhpcy5iZWFtc1tpXSk7XG5cdFx0XHQvLyBUaGUgYWJvdmUgd2lsbCBjaGFuZ2UgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBhYnNlbGVtIGNoaWxkcmVuLCBzbyBzZWUgaWYgd2UgbmVlZCB0byBleHBhbmQgb3VyIHJhbmdlLlxuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmJlYW1zW2ldLmVsZW1zLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHRoaXMuYWRqdXN0UmFuZ2UodGhpcy5iZWFtc1tpXS5lbGVtc1tqXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIE5vdyB3ZSBjYW4gbGF5b3V0IHRoZSB0cmlwbGV0c1xuXHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5vdGhlcmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGNoaWxkID0gdGhpcy5vdGhlcmNoaWxkcmVuW2ldO1xuXHRcdGlmIChjaGlsZC5sYXlvdXQpIHtcblx0XHRcdGNoaWxkLmxheW91dCgpO1xuXHRcdFx0dGhpcy5hZGp1c3RSYW5nZShjaGlsZCk7XG5cdFx0fVxuXHR9XG5cdHRoaXMuc3RhZmYudG9wID0gTWF0aC5tYXgodGhpcy5zdGFmZi50b3AsIHRoaXMudG9wKTtcblx0dGhpcy5zdGFmZi5ib3R0b20gPSBNYXRoLm1pbih0aGlzLnN0YWZmLmJvdHRvbSwgdGhpcy5ib3R0b20pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBWb2ljZUVsZW1lbnQ7XG4iLCIvLyBhYmNfYWJzdHJhY3RfZW5ncmF2ZXIuanM6IENyZWF0ZXMgYSBkYXRhIHN0cnVjdHVyZSBzdWl0YWJsZSBmb3IgcHJpbnRpbmcgYSBsaW5lIG9mIGFiY1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQWJzb2x1dGVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfYWJzb2x1dGVfZWxlbWVudCcpO1xudmFyIEJlYW1FbGVtID0gcmVxdWlyZSgnLi9hYmNfYmVhbV9lbGVtZW50Jyk7XG52YXIgQnJhY2VFbGVtID0gcmVxdWlyZSgnLi9hYmNfYnJhY2VfZWxlbWVudCcpO1xudmFyIGNyZWF0ZUNsZWYgPSByZXF1aXJlKCcuL2FiY19jcmVhdGVfY2xlZicpO1xudmFyIGNyZWF0ZUtleVNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vYWJjX2NyZWF0ZV9rZXlfc2lnbmF0dXJlJyk7XG52YXIgY3JlYXRlVGltZVNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vYWJjX2NyZWF0ZV90aW1lX3NpZ25hdHVyZScpO1xudmFyIERlY29yYXRpb24gPSByZXF1aXJlKCcuL2FiY19kZWNvcmF0aW9uJyk7XG52YXIgRW5kaW5nRWxlbSA9IHJlcXVpcmUoJy4vYWJjX2VuZGluZ19lbGVtZW50Jyk7XG52YXIgZ2x5cGhzID0gcmVxdWlyZSgnLi9hYmNfZ2x5cGhzJyk7XG52YXIgUmVsYXRpdmVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfcmVsYXRpdmVfZWxlbWVudCcpO1xudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuL2FiY19zcGFjaW5nJyk7XG52YXIgU3RhZmZHcm91cEVsZW1lbnQgPSByZXF1aXJlKCcuL2FiY19zdGFmZl9ncm91cF9lbGVtZW50Jyk7XG52YXIgVGVtcG9FbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfdGVtcG9fZWxlbWVudCcpO1xudmFyIFRpZUVsZW0gPSByZXF1aXJlKCcuL2FiY190aWVfZWxlbWVudCcpO1xudmFyIFRyaXBsZXRFbGVtID0gcmVxdWlyZSgnLi9hYmNfdHJpcGxldF9lbGVtZW50Jyk7XG52YXIgVm9pY2VFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfdm9pY2VfZWxlbWVudCcpO1xuXG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfY29tbW9uJyk7XG5cbnZhciBBYnN0cmFjdEVuZ3JhdmVyO1xuXG4oZnVuY3Rpb24oKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2V0RHVyYXRpb24gPSBmdW5jdGlvbihlbGVtKSB7XG4gIHZhciBkID0gMDtcbiAgaWYgKGVsZW0uZHVyYXRpb24pIHtcbiAgICBkID0gZWxlbS5kdXJhdGlvbjtcbiAgfVxuICByZXR1cm4gZDtcbn07XG5cbnZhciBoaW50ID0gZmFsc2U7XG5cblx0dmFyIGNoYXJ0YWJsZSA9IHtcblx0XHRyZXN0OnswOlwicmVzdHMud2hvbGVcIiwgMTpcInJlc3RzLmhhbGZcIiwgMjpcInJlc3RzLnF1YXJ0ZXJcIiwgMzpcInJlc3RzLjh0aFwiLCA0OiBcInJlc3RzLjE2dGhcIiw1OiBcInJlc3RzLjMybmRcIiwgNjogXCJyZXN0cy42NHRoXCIsIDc6IFwicmVzdHMuMTI4dGhcIiwgXCJtdWx0aVwiOiBcInJlc3RzLm11bHRpbWVhc3VyZVwifSxcblx0XHRub3RlOntcIi0xXCI6IFwibm90ZWhlYWRzLmRibFwiLCAwOlwibm90ZWhlYWRzLndob2xlXCIsIDE6XCJub3RlaGVhZHMuaGFsZlwiLCAyOlwibm90ZWhlYWRzLnF1YXJ0ZXJcIiwgMzpcIm5vdGVoZWFkcy5xdWFydGVyXCIsIDQ6XCJub3RlaGVhZHMucXVhcnRlclwiLCA1Olwibm90ZWhlYWRzLnF1YXJ0ZXJcIiwgNjpcIm5vdGVoZWFkcy5xdWFydGVyXCIsIDc6XCJub3RlaGVhZHMucXVhcnRlclwiLCAnbm9zdGVtJzpcIm5vdGVoZWFkcy5xdWFydGVyXCJ9LFxuXHRcdHJoeXRobTp7XCItMVwiOiBcIm5vdGVoZWFkcy5zbGFzaC53aG9sZVwiLCAwOlwibm90ZWhlYWRzLnNsYXNoLndob2xlXCIsIDE6XCJub3RlaGVhZHMuc2xhc2gud2hvbGVcIiwgMjpcIm5vdGVoZWFkcy5zbGFzaC5xdWFydGVyXCIsIDM6XCJub3RlaGVhZHMuc2xhc2gucXVhcnRlclwiLCA0Olwibm90ZWhlYWRzLnNsYXNoLnF1YXJ0ZXJcIiwgNTpcIm5vdGVoZWFkcy5zbGFzaC5xdWFydGVyXCIsIDY6XCJub3RlaGVhZHMuc2xhc2gucXVhcnRlclwiLCA3Olwibm90ZWhlYWRzLnNsYXNoLnF1YXJ0ZXJcIiwgbm9zdGVtOiBcIm5vdGVoZWFkcy5zbGFzaC5ub3N0ZW1cIn0sXG5cdFx0eDp7XCItMVwiOiBcIm5vdGVoZWFkcy5pbmRldGVybWluYXRlXCIsIDA6XCJub3RlaGVhZHMuaW5kZXRlcm1pbmF0ZVwiLCAxOlwibm90ZWhlYWRzLmluZGV0ZXJtaW5hdGVcIiwgMjpcIm5vdGVoZWFkcy5pbmRldGVybWluYXRlXCIsIDM6XCJub3RlaGVhZHMuaW5kZXRlcm1pbmF0ZVwiLCA0Olwibm90ZWhlYWRzLmluZGV0ZXJtaW5hdGVcIiwgNTpcIm5vdGVoZWFkcy5pbmRldGVybWluYXRlXCIsIDY6XCJub3RlaGVhZHMuaW5kZXRlcm1pbmF0ZVwiLCA3Olwibm90ZWhlYWRzLmluZGV0ZXJtaW5hdGVcIiwgbm9zdGVtOiBcIm5vdGVoZWFkcy5pbmRldGVybWluYXRlXCJ9LFxuXHRcdGhhcm1vbmljOntcIi0xXCI6IFwibm90ZWhlYWRzLmhhcm1vbmljLnF1YXJ0ZXJcIiwgMDpcIm5vdGVoZWFkcy5oYXJtb25pYy5xdWFydGVyXCIsIDE6XCJub3RlaGVhZHMuaGFybW9uaWMucXVhcnRlclwiLCAyOlwibm90ZWhlYWRzLmhhcm1vbmljLnF1YXJ0ZXJcIiwgMzpcIm5vdGVoZWFkcy5oYXJtb25pYy5xdWFydGVyXCIsIDQ6XCJub3RlaGVhZHMuaGFybW9uaWMucXVhcnRlclwiLCA1Olwibm90ZWhlYWRzLmhhcm1vbmljLnF1YXJ0ZXJcIiwgNjpcIm5vdGVoZWFkcy5oYXJtb25pYy5xdWFydGVyXCIsIDc6XCJub3RlaGVhZHMuaGFybW9uaWMucXVhcnRlclwiLCBub3N0ZW06IFwibm90ZWhlYWRzLmhhcm1vbmljLnF1YXJ0ZXJcIn0sXG5cdFx0dWZsYWdzOnszOlwiZmxhZ3MudTh0aFwiLCA0OlwiZmxhZ3MudTE2dGhcIiwgNTpcImZsYWdzLnUzMm5kXCIsIDY6XCJmbGFncy51NjR0aFwifSxcblx0XHRkZmxhZ3M6ezM6XCJmbGFncy5kOHRoXCIsIDQ6XCJmbGFncy5kMTZ0aFwiLCA1OlwiZmxhZ3MuZDMybmRcIiwgNjpcImZsYWdzLmQ2NHRoXCJ9XG5cdH07XG5cbkFic3RyYWN0RW5ncmF2ZXIgPSBmdW5jdGlvbihyZW5kZXJlciwgdHVuZU51bWJlciwgb3B0aW9ucykge1xuXHR0aGlzLmRlY29yYXRpb24gPSBuZXcgRGVjb3JhdGlvbigpO1xuXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cdHRoaXMudHVuZU51bWJlciA9IHR1bmVOdW1iZXI7XG5cdHRoaXMuaXNCYWdwaXBlcyA9IG9wdGlvbnMuYmFncGlwZXM7XG5cdHRoaXMuZmxhdEJlYW1zID0gb3B0aW9ucy5mbGF0YmVhbXM7XG5cdHRoaXMucmVzZXQoKTtcbn07XG5cbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuc2x1cnMgPSB7fTtcblx0dGhpcy50aWVzID0gW107XG5cdHRoaXMudm9pY2VTY2FsZSA9IDE7XG5cdHRoaXMuc2x1cnNieXZvaWNlID0ge307XG5cdHRoaXMudGllc2J5dm9pY2UgPSB7fTtcblx0dGhpcy5lbmRpbmdzYnl2b2ljZSA9IHt9O1xuXHR0aGlzLnNjYWxlQnlWb2ljZSA9IHt9O1xuXHR0aGlzLnRyaXBsZXRtdWx0aXBsaWVyID0gMTtcblxuXHR0aGlzLmFiY2xpbmUgPSB1bmRlZmluZWQ7XG5cdHRoaXMuYWNjaWRlbnRhbFNsb3QgPSB1bmRlZmluZWQ7XG5cdHRoaXMuYWNjaWRlbnRhbHNoaWZ0eCA9IHVuZGVmaW5lZDtcblx0dGhpcy5kb3RzaGlmdHggPSB1bmRlZmluZWQ7XG5cdHRoaXMuaGFzVm9jYWxzID0gZmFsc2U7XG5cdHRoaXMubWluWSA9IHVuZGVmaW5lZDtcblx0dGhpcy5wYXJ0c3RhcnRlbGVtID0gdW5kZWZpbmVkO1xuXHR0aGlzLnN0YXJ0bGltaXRlbGVtID0gdW5kZWZpbmVkO1xuXHR0aGlzLnN0ZW1kaXIgPSB1bmRlZmluZWQ7XG59O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5zZXRTdGVtSGVpZ2h0ID0gZnVuY3Rpb24oaGVpZ2h0SW5QaXhlbHMpIHtcblx0dGhpcy5zdGVtSGVpZ2h0ID0gaGVpZ2h0SW5QaXhlbHMgLyBzcGFjaW5nLlNURVA7XG59O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5nZXRDdXJyZW50Vm9pY2VJZCA9IGZ1bmN0aW9uKHMsdikge1xuICByZXR1cm4gXCJzXCIrcytcInZcIit2O1xufTtcblxuQWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUucHVzaENyb3NzTGluZUVsZW1zID0gZnVuY3Rpb24ocyx2KSB7XG4gIHRoaXMuc2x1cnNieXZvaWNlW3RoaXMuZ2V0Q3VycmVudFZvaWNlSWQocyx2KV0gPSB0aGlzLnNsdXJzO1xuICB0aGlzLnRpZXNieXZvaWNlW3RoaXMuZ2V0Q3VycmVudFZvaWNlSWQocyx2KV0gPSB0aGlzLnRpZXM7XG4gIHRoaXMuZW5kaW5nc2J5dm9pY2VbdGhpcy5nZXRDdXJyZW50Vm9pY2VJZChzLHYpXSA9IHRoaXMucGFydHN0YXJ0ZWxlbTtcbiAgdGhpcy5zY2FsZUJ5Vm9pY2VbdGhpcy5nZXRDdXJyZW50Vm9pY2VJZChzLHYpXSA9IHRoaXMudm9pY2VTY2FsZTtcbn07XG5cbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLnBvcENyb3NzTGluZUVsZW1zID0gZnVuY3Rpb24ocyx2KSB7XG4gIHRoaXMuc2x1cnMgPSB0aGlzLnNsdXJzYnl2b2ljZVt0aGlzLmdldEN1cnJlbnRWb2ljZUlkKHMsdildIHx8IHt9O1xuICB0aGlzLnRpZXMgPSB0aGlzLnRpZXNieXZvaWNlW3RoaXMuZ2V0Q3VycmVudFZvaWNlSWQocyx2KV0gfHwgW107XG4gIHRoaXMucGFydHN0YXJ0ZWxlbSA9IHRoaXMuZW5kaW5nc2J5dm9pY2VbdGhpcy5nZXRDdXJyZW50Vm9pY2VJZChzLHYpXTtcbiAgdGhpcy52b2ljZVNjYWxlID0gdGhpcy5zY2FsZUJ5Vm9pY2VbdGhpcy5nZXRDdXJyZW50Vm9pY2VJZChzLHYpXTtcbiAgaWYgKHRoaXMudm9pY2VTY2FsZSA9PT0gdW5kZWZpbmVkKSB0aGlzLnZvaWNlU2NhbGUgPSAxO1xufTtcblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jb250YWluc0x5cmljcyA9IGZ1bmN0aW9uKHN0YXZlcykge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHN0YXZlc1tpXS52b2ljZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBzdGF2ZXNbaV0udm9pY2VzW2pdLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0dmFyIGVsID0gc3RhdmVzW2ldLnZvaWNlc1tqXVtrXTtcblx0XHRcdFx0XHRpZiAoZWwubHlyaWMpIHtcblx0XHRcdFx0XHRcdC8vIFdlIGp1c3Qgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIHZvY2FscyBiZWxvdyB0aGUgbXVzaWMgdG8ga25vdyB3aGVyZSB0byBwdXQgdGhlIGR5bmFtaWNzLlxuXHRcdFx0XHRcdFx0aWYgKCFlbC5wb3NpdGlvbmluZyB8fCBlbC5wb3NpdGlvbmluZy52b2NhbFBvc2l0aW9uID09PSAnYmVsb3cnKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhc1ZvY2FscyA9IHRydWU7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jcmVhdGVBQkNMaW5lID0gZnVuY3Rpb24oc3RhZmZzLCB0ZW1wbykge1xuICAgIHRoaXMubWluWSA9IDI7IC8vIFBFUjogVGhpcyB3aWxsIGJlIHRoZSBsb3dlc3QgdGhhdCBhbnkgbm90ZSByZWFjaGVzLiBJdCB3aWxsIGJlIHVzZWQgdG8gc2V0IHRoZSBkeW5hbWljcyByb3cuXG5cdC8vIFNlZSBpZiB0aGVyZSBhcmUgYW55IGx5cmljcyBvbiB0aGlzIGxpbmUuXG5cdHRoaXMuY29udGFpbnNMeXJpY3Moc3RhZmZzKTtcbiAgdmFyIHN0YWZmZ3JvdXAgPSBuZXcgU3RhZmZHcm91cEVsZW1lbnQoKTtcblx0dGhpcy50ZW1wb1NldCA9IGZhbHNlO1xuICBmb3IgKHZhciBzID0gMDsgcyA8IHN0YWZmcy5sZW5ndGg7IHMrKykge1xuXHQgIGlmIChoaW50KVxuXHRcdCAgdGhpcy5yZXN0b3JlU3RhdGUoKTtcblx0ICBoaW50ID0gZmFsc2U7XG4gICAgdGhpcy5jcmVhdGVBQkNTdGFmZihzdGFmZmdyb3VwLCBzdGFmZnNbc10sIHRlbXBvLCBzKTtcbiAgfVxuICByZXR1cm4gc3RhZmZncm91cDtcbn07XG5cbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLmNyZWF0ZUFCQ1N0YWZmID0gZnVuY3Rpb24oc3RhZmZncm91cCwgYWJjc3RhZmYsIHRlbXBvLCBzKSB7XG4vLyBJZiB0aGUgdGVtcG8gaXMgcGFzc2VkIGluLCB0aGVuIHRoZSBmaXJzdCBlbGVtZW50IHNob3VsZCBnZXQgdGhlIHRlbXBvIGF0dGFjaGVkIHRvIGl0LlxuICBmb3IgKHZhciB2ID0gMDsgdiA8IGFiY3N0YWZmLnZvaWNlcy5sZW5ndGg7IHYrKykge1xuICAgIHZhciB2b2ljZSA9IG5ldyBWb2ljZUVsZW1lbnQodixhYmNzdGFmZi52b2ljZXMubGVuZ3RoKTtcbiAgICBpZiAodj09PTApIHtcblx0ICAgIHZvaWNlLmJhcmZyb20gPSAoYWJjc3RhZmYuY29ubmVjdEJhckxpbmVzPT09XCJzdGFydFwiIHx8IGFiY3N0YWZmLmNvbm5lY3RCYXJMaW5lcz09PVwiY29udGludWVcIik7XG5cdCAgICB2b2ljZS5iYXJ0byA9IChhYmNzdGFmZi5jb25uZWN0QmFyTGluZXM9PT1cImNvbnRpbnVlXCIgfHwgYWJjc3RhZmYuY29ubmVjdEJhckxpbmVzPT09XCJlbmRcIik7XG4gICAgfSBlbHNlIHtcblx0ICAgIHZvaWNlLmR1cGxpY2F0ZSA9IHRydWU7IC8vIGJhciBsaW5lcyBhbmQgb3RoZXIgZHVwbGljYXRlIGluZm8gbmVlZCBub3QgYmUgY3JlYXRlZFxuICAgIH1cbiAgICBpZiAoYWJjc3RhZmYudGl0bGUgJiYgYWJjc3RhZmYudGl0bGVbdl0pIHZvaWNlLmhlYWRlcj1hYmNzdGFmZi50aXRsZVt2XTtcblx0ICB2YXIgY2xlZiA9IGNyZWF0ZUNsZWYoYWJjc3RhZmYuY2xlZiwgdGhpcy50dW5lTnVtYmVyKTtcblx0ICBpZiAoY2xlZikge1xuXHRcdCAgaWYgKHYgPT09MCAmJiBhYmNzdGFmZi5iYXJOdW1iZXIpIHtcblx0XHRcdCAgdGhpcy5hZGRNZWFzdXJlTnVtYmVyKGFiY3N0YWZmLmJhck51bWJlciwgY2xlZik7XG5cdFx0ICB9XG5cdFx0ICB2b2ljZS5hZGRDaGlsZChjbGVmKTtcblx0ICB9XG5cdCAgdmFyIGtleVNpZyA9IGNyZWF0ZUtleVNpZ25hdHVyZShhYmNzdGFmZi5rZXksIHRoaXMudHVuZU51bWJlcik7XG5cdCAgaWYgKGtleVNpZykge1xuXHRcdCAgdm9pY2UuYWRkQ2hpbGQoa2V5U2lnKTtcblx0XHQgIHRoaXMuc3RhcnRsaW1pdGVsZW0gPSBrZXlTaWc7IC8vIGxpbWl0IHRpZXMgaGVyZVxuXHQgIH1cbiAgICBpZiAoYWJjc3RhZmYubWV0ZXIpIHtcbiAgICBcdGlmIChhYmNzdGFmZi5tZXRlci50eXBlID09PSAnc3BlY2lmaWVkJykge1xuICAgIFx0XHR0aGlzLm1lYXN1cmVMZW5ndGggPSBhYmNzdGFmZi5tZXRlci52YWx1ZVswXS5udW0gLyBhYmNzdGFmZi5tZXRlci52YWx1ZVswXS5kZW47XG5cdCAgICB9IGVsc2Vcblx0ICAgIFx0dGhpcy5tZWFzdXJlTGVuZ3RoID0gMTtcblx0XHR2YXIgdHMgPSBjcmVhdGVUaW1lU2lnbmF0dXJlKGFiY3N0YWZmLm1ldGVyLCB0aGlzLnR1bmVOdW1iZXIpO1xuXHQgICAgdm9pY2UuYWRkQ2hpbGQodHMpO1xuXHRcdHRoaXMuc3RhcnRsaW1pdGVsZW0gPSB0czsgLy8gbGltaXQgdGllcyBoZXJlXG5cdH1cblx0ICBpZiAodm9pY2UuZHVwbGljYXRlKVxuXHRcdCAgdm9pY2UuY2hpbGRyZW4gPSBbXTsgLy8gd2Ugc2hvdWxkbid0IHJlcHJpbnQgdGhlIGFib3ZlIGlmIHdlJ3JlIHJldXNpbmcgdGhlIHNhbWUgc3RhZmYuIFdlIGp1c3QgY3JlYXRlZCB0aGVtIHRvIGdldCB0aGUgcmlnaHQgc3BhY2luZy5cbiAgICB2YXIgc3RhZmZMaW5lcyA9IGFiY3N0YWZmLmNsZWYuc3RhZmZsaW5lcyB8fCBhYmNzdGFmZi5jbGVmLnN0YWZmbGluZXMgPT09IDAgPyBhYmNzdGFmZi5jbGVmLnN0YWZmbGluZXMgOiA1O1xuICAgIHN0YWZmZ3JvdXAuYWRkVm9pY2Uodm9pY2UscyxzdGFmZkxpbmVzKTtcblx0ICB2YXIgaXNTaW5nbGVMaW5lU3RhZmYgPSBzdGFmZkxpbmVzID09PSAxO1xuXHQgIHRoaXMuY3JlYXRlQUJDVm9pY2UoYWJjc3RhZmYudm9pY2VzW3ZdLHRlbXBvLCBzLCB2LCBpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UpO1xuXHQgIHN0YWZmZ3JvdXAuc2V0U3RhZmZMaW1pdHModm9pY2UpO1xuICAgICAgICAgICAgLy9Ub255OiBIZXJlIEkgYW0gZm9sbG93aW5nIHdoYXQgc3RhdmVzIG5lZWQgdG8gYmUgc3Vycm91bmRlZCBieSB0aGUgYnJhY2UsIGJ5IGluY3JlbWVudGluZyB0aGUgbGVuZ3RoIG9mIHRoZSBicmFjZSBjbGFzcy5cbiAgICAgICAgICAgIC8vU28gYmFzaWNhbGx5IHRoaXMga2VlcHMgaW5jcmVtZW50aW5nIHRoZSBudW1iZXIgb2Ygc3RhZmYgc3Vycm91bmRlZCBieSB0aGUgYnJhY2UgdW50aWwgaXQgc2VlcyBcImVuZFwiLlxuICAgICAgICAgICAgLy9UaGlzIHRoZW4gZ2V0cyBwcm9jZXNzZWQgaW4gYWJjX3N0YWZmX2dyb3VwX2VsZW1lbnQuanMsIHNvIHRoYXQgaXQgd2lsbCBoYXZlIHRoZSBjb3JyZWN0IHRvcCBhbmQgYm90dG9tIGNvb3JkaW5hdGVzIGZvciB0aGUgYnJhY2UuXG5cdFx0XHRpZihhYmNzdGFmZi5icmFjZSA9PT0gXCJzdGFydFwiKXtcblx0XHRcdFx0c3RhZmZncm91cC5icmFjZSA9IG5ldyBCcmFjZUVsZW0oMSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGFiY3N0YWZmLmJyYWNlID09PSBcImVuZFwiICYmIHN0YWZmZ3JvdXAuYnJhY2UpIHtcblx0XHRcdFx0c3RhZmZncm91cC5icmFjZS5pbmNyZWFzZVN0YXZlc0luY2x1ZGVkKCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGFiY3N0YWZmLmJyYWNlID09PSBcImNvbnRpbnVlXCIgJiYgc3RhZmZncm91cC5icmFjZSl7XG5cdFx0XHRcdHN0YWZmZ3JvdXAuYnJhY2UuaW5jcmVhc2VTdGF2ZXNJbmNsdWRlZCgpO1xuXHRcdFx0fVxuICB9XG59O1xuXG5mdW5jdGlvbiBnZXRCZWFtR3JvdXAoYWJjbGluZSwgcG9zKSB7XG5cdC8vIElmIHRoZXJlIGFyZSBub3RlcyBiZWFtZWQgdG9nZXRoZXIsIHRoZXkgYXJlIGhhbmRsZWQgYXMgYSBncm91cCwgc28gZmluZCBhbGwgb2YgdGhlbSBoZXJlLlxuXHR2YXIgZWxlbSA9IGFiY2xpbmVbcG9zXTtcblx0aWYgKGVsZW0uZWxfdHlwZSAhPT0gJ25vdGUnIHx8ICFlbGVtLnN0YXJ0QmVhbSB8fCBlbGVtLmVuZEJlYW0pXG5cdFx0cmV0dXJuIHsgY291bnQ6IDEsIGVsZW06IGVsZW0gfTtcblxuXHR2YXIgZ3JvdXAgPSBbXTtcblx0d2hpbGUgKHBvcyA8IGFiY2xpbmUubGVuZ3RoICYmIGFiY2xpbmVbcG9zXS5lbF90eXBlID09PSAnbm90ZScpIHtcblx0XHRncm91cC5wdXNoKGFiY2xpbmVbcG9zXSk7XG5cdFx0aWYgKGFiY2xpbmVbcG9zXS5lbmRCZWFtKVxuXHRcdFx0YnJlYWs7XG5cdFx0cG9zKys7XG5cdH1cblx0cmV0dXJuIHsgY291bnQ6IGdyb3VwLmxlbmd0aCwgZWxlbTogZ3JvdXAgfTtcbn1cblxuQWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuY3JlYXRlQUJDVm9pY2UgPSBmdW5jdGlvbihhYmNsaW5lLCB0ZW1wbywgcywgdiwgaXNTaW5nbGVMaW5lU3RhZmYsIHZvaWNlKSB7XG4gIHRoaXMucG9wQ3Jvc3NMaW5lRWxlbXMocyx2KTtcbiAgdGhpcy5zdGVtZGlyID0gKHRoaXMuaXNCYWdwaXBlcyk/XCJkb3duXCI6bnVsbDtcbiAgdGhpcy5hYmNsaW5lID0gYWJjbGluZTtcbiAgaWYgKHRoaXMucGFydHN0YXJ0ZWxlbSkge1xuICAgIHRoaXMucGFydHN0YXJ0ZWxlbSA9IG5ldyBFbmRpbmdFbGVtKFwiXCIsIG51bGwsIG51bGwpO1xuXHQgIHZvaWNlLmFkZE90aGVyKHRoaXMucGFydHN0YXJ0ZWxlbSk7XG4gIH1cblx0dmFyIHZvaWNlTnVtYmVyID0gdm9pY2Uudm9pY2V0b3RhbCA8IDIgPyAtMSA6IHZvaWNlLnZvaWNlbnVtYmVyO1xuICBmb3IgKHZhciBzbHVyIGluIHRoaXMuc2x1cnMpIHtcbiAgICBpZiAodGhpcy5zbHVycy5oYXNPd25Qcm9wZXJ0eShzbHVyKSkge1xuXHQgICAgLy8gdGhpcyBpcyBhbHJlYWR5IGEgc2x1ciBlbGVtZW50LCBidXQgaXQgd2FzIGNyZWF0ZWQgZm9yIHRoZSBsYXN0IGxpbmUsIHNvIHJlY3JlYXRlIGl0LlxuICAgICAgdGhpcy5zbHVyc1tzbHVyXT0gbmV3IFRpZUVsZW0oe2ZvcmNlOiB0aGlzLnNsdXJzW3NsdXJdLmZvcmNlLCB2b2ljZU51bWJlcjogdm9pY2VOdW1iZXIsIHN0ZW1EaXI6IHRoaXMuc2x1cnNbc2x1cl0uc3RlbURpcn0pO1xuXHRcdGlmIChoaW50KSB0aGlzLnNsdXJzW3NsdXJdLnNldEhpbnQoKTtcblx0ICAgIHZvaWNlLmFkZE90aGVyKHRoaXMuc2x1cnNbc2x1cl0pO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBpPTA7IGk8dGhpcy50aWVzLmxlbmd0aDsgaSsrKSB7XG4gIFx0Ly8gdGhpcyBpcyBhbHJlYWR5IGEgdGllIGVsZW1lbnQsIGJ1dCBpdCB3YXMgY3JlYXRlZCBmb3IgdGhlIGxhc3QgbGluZSwgc28gcmVjcmVhdGUgaXQuXG4gICAgdGhpcy50aWVzW2ldPW5ldyBUaWVFbGVtKHsgZm9yY2U6IHRoaXMudGllc1tpXS5mb3JjZSwgc3RlbURpcjogdGhpcy50aWVzW2ldLnN0ZW1EaXIsIHZvaWNlTnVtYmVyOiB2b2ljZU51bWJlciB9KTtcblx0ICBpZiAoaGludCkgdGhpcy50aWVzW2ldLnNldEhpbnQoKTtcblx0ICB2b2ljZS5hZGRPdGhlcih0aGlzLnRpZXNbaV0pO1xuICB9XG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmFiY2xpbmUubGVuZ3RoOyBqKyspIHtcblx0ICBzZXRBdmVyYWdlUGl0Y2godGhpcy5hYmNsaW5lW2pdKTtcblx0ICB0aGlzLm1pblkgPSBNYXRoLm1pbih0aGlzLmFiY2xpbmVbal0ubWlucGl0Y2gsIHRoaXMubWluWSk7XG4gIH1cblxuXHR2YXIgaXNGaXJzdFN0YWZmID0gKHMgPT09IDApO1xuXHR2YXIgcG9zID0gMDtcblx0d2hpbGUgKHBvcyA8IHRoaXMuYWJjbGluZS5sZW5ndGgpIHtcblx0XHR2YXIgcmV0ID0gZ2V0QmVhbUdyb3VwKHRoaXMuYWJjbGluZSwgcG9zKTtcblx0XHR2YXIgYWJzZWxlbXMgPSB0aGlzLmNyZWF0ZUFCQ0VsZW1lbnQoaXNGaXJzdFN0YWZmLCBpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UsIHJldC5lbGVtKTtcblx0XHRpZiAoYWJzZWxlbXMpIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBhYnNlbGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoIXRoaXMudGVtcG9TZXQgJiYgdGVtcG8gJiYgIXRlbXBvLnN1cHByZXNzKSB7XG5cdFx0XHRcdFx0dGhpcy50ZW1wb1NldCA9IHRydWU7XG5cdFx0XHRcdFx0dmFyIHRlbXBvRWxlbWVudCA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQocmV0LmVsZW0sIDAsIDAsIFwidGVtcG9cIiwgdGhpcy50dW5lTnVtYmVyLCB7fSk7XG5cdFx0XHRcdFx0dGVtcG9FbGVtZW50LmFkZENoaWxkKG5ldyBUZW1wb0VsZW1lbnQodGVtcG8sIHRoaXMudHVuZU51bWJlciwgY3JlYXRlTm90ZUhlYWQpKTtcblx0XHRcdFx0XHR2b2ljZS5hZGRDaGlsZCh0ZW1wb0VsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZvaWNlLmFkZENoaWxkKGFic2VsZW1zW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cG9zICs9IHJldC5jb3VudDtcblx0fVxuXHR0aGlzLnB1c2hDcm9zc0xpbmVFbGVtcyhzLCB2KTtcbn07XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuc2F2ZVN0YXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy50aWVzU2F2ZSA9IHBhcnNlQ29tbW9uLmNsb25lQXJyYXkodGhpcy50aWVzKTtcblx0XHR0aGlzLnNsdXJzU2F2ZSA9IHBhcnNlQ29tbW9uLmNsb25lSGFzaE9mSGFzaCh0aGlzLnNsdXJzKTtcblx0XHR0aGlzLnNsdXJzYnl2b2ljZVNhdmUgPSBwYXJzZUNvbW1vbi5jbG9uZUhhc2hPZkhhc2godGhpcy5zbHVyc2J5dm9pY2UpO1xuXHRcdHRoaXMudGllc2J5dm9pY2VTYXZlID0gcGFyc2VDb21tb24uY2xvbmVIYXNoT2ZBcnJheU9mSGFzaCh0aGlzLnRpZXNieXZvaWNlKTtcblx0fTtcblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5yZXN0b3JlU3RhdGUgPSBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRpZXMgPSBwYXJzZUNvbW1vbi5jbG9uZUFycmF5KHRoaXMudGllc1NhdmUpO1xuXHRcdHRoaXMuc2x1cnMgPSBwYXJzZUNvbW1vbi5jbG9uZUhhc2hPZkhhc2godGhpcy5zbHVyc1NhdmUpO1xuXHRcdHRoaXMuc2x1cnNieXZvaWNlID0gcGFyc2VDb21tb24uY2xvbmVIYXNoT2ZIYXNoKHRoaXMuc2x1cnNieXZvaWNlU2F2ZSk7XG5cdFx0dGhpcy50aWVzYnl2b2ljZSA9IHBhcnNlQ29tbW9uLmNsb25lSGFzaE9mQXJyYXlPZkhhc2godGhpcy50aWVzYnl2b2ljZVNhdmUpO1xuXHR9O1xuXG5cdC8vIGZ1bmN0aW9uIHdyaXRlTWVhc3VyZVdpZHRoKHZvaWNlKSB7XG5cdC8vIFx0dmFyIHdpZHRoID0gMDtcblx0Ly8gXHRmb3IgKHZhciBpID0gdm9pY2UuY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKSB7XG5cdC8vIFx0XHR2YXIgZWxlbSA9IHZvaWNlLmNoaWxkcmVuW2ldO1xuXHQvLyBcdFx0aWYgKGVsZW0uYWJjZWxlbS5lbF90eXBlID09PSAnYmFyJylcblx0Ly8gXHRcdFx0YnJlYWs7XG5cdC8vIFx0XHR3aWR0aCArPSBlbGVtLnc7XG5cdC8vIFx0fVxuXHQvLyBcdHJldHVybiBuZXcgUmVsYXRpdmVFbGVtZW50KHdpZHRoLnRvRml4ZWQoMiksIC03MCwgMCwgdW5kZWZpbmVkLCB7dHlwZTpcImRlYnVnXCJ9KTtcblx0Ly8gfVxuXG5cdC8vIHJldHVybiBhbiBhcnJheSBvZiBBYnNvbHV0ZUVsZW1lbnRcbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLmNyZWF0ZUFCQ0VsZW1lbnQgPSBmdW5jdGlvbihpc0ZpcnN0U3RhZmYsIGlzU2luZ2xlTGluZVN0YWZmLCB2b2ljZSwgZWxlbSkge1xuICB2YXIgZWxlbXNldCA9IFtdO1xuICBzd2l0Y2ggKGVsZW0uZWxfdHlwZSkge1xuXHQgIGNhc2UgdW5kZWZpbmVkOlxuXHQgIFx0Ly8gaXQgaXMgdW5kZWZpbmVkIGlmIHdlIHdlcmUgcGFzc2VkIGFuIGFycmF5IGluIC0gYW4gYXJyYXkgbWVhbnMgYSBzZXQgb2Ygbm90ZXMgdGhhdCBzaG91bGQgYmUgYmVhbWVkIHRvZ2V0aGVyLlxuXHRcdCAgZWxlbXNldCA9IHRoaXMuY3JlYXRlQmVhbShpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UsIGVsZW0pO1xuXHQgIFx0YnJlYWs7XG4gIGNhc2UgXCJub3RlXCI6XG5cdCAgZWxlbXNldFswXSA9IHRoaXMuY3JlYXRlTm90ZShlbGVtLCBmYWxzZSwgaXNTaW5nbGVMaW5lU3RhZmYsIHZvaWNlKTtcblx0ICBpZiAodGhpcy50cmlwbGV0ICYmIHRoaXMudHJpcGxldC5pc0Nsb3NlZCgpKSB7XG5cdFx0ICB2b2ljZS5hZGRPdGhlcih0aGlzLnRyaXBsZXQpO1xuXHRcdCAgdGhpcy50cmlwbGV0ID0gbnVsbDtcblx0XHQgIHRoaXMudHJpcGxldG11bHRpcGxpZXIgPSAxO1xuXHQgIH1cbiAgICBicmVhaztcbiAgY2FzZSBcImJhclwiOlxuICAgIGVsZW1zZXRbMF0gPSB0aGlzLmNyZWF0ZUJhckxpbmUodm9pY2UsIGVsZW0sIGlzRmlyc3RTdGFmZik7XG4gICAgaWYgKHZvaWNlLmR1cGxpY2F0ZSAmJiBlbGVtc2V0Lmxlbmd0aCA+IDApIGVsZW1zZXRbMF0uaW52aXNpYmxlID0gdHJ1ZTtcbi8vXHQgIGVsZW1zZXRbMF0uYWRkQ2hpbGQod3JpdGVNZWFzdXJlV2lkdGgodm9pY2UpKTtcbiAgICBicmVhaztcbiAgY2FzZSBcIm1ldGVyXCI6XG4gICAgZWxlbXNldFswXSA9IGNyZWF0ZVRpbWVTaWduYXR1cmUoZWxlbSwgdGhpcy50dW5lTnVtYmVyKTtcblx0ICB0aGlzLnN0YXJ0bGltaXRlbGVtID0gZWxlbXNldFswXTsgLy8gbGltaXQgdGllcyBoZXJlXG4gICAgaWYgKHZvaWNlLmR1cGxpY2F0ZSAmJiBlbGVtc2V0Lmxlbmd0aCA+IDApIGVsZW1zZXRbMF0uaW52aXNpYmxlID0gdHJ1ZTtcbiAgICBicmVhaztcbiAgY2FzZSBcImNsZWZcIjpcbiAgICBlbGVtc2V0WzBdID0gY3JlYXRlQ2xlZihlbGVtLCB0aGlzLnR1bmVOdW1iZXIpO1xuXHQgIGlmICghZWxlbXNldFswXSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHZvaWNlLmR1cGxpY2F0ZSAmJiBlbGVtc2V0Lmxlbmd0aCA+IDApIGVsZW1zZXRbMF0uaW52aXNpYmxlID0gdHJ1ZTtcbiAgICBicmVhaztcbiAgY2FzZSBcImtleVwiOlxuXHQgIHZhciBhYnNLZXkgPSBjcmVhdGVLZXlTaWduYXR1cmUoZWxlbSwgdGhpcy50dW5lTnVtYmVyKTtcblx0ICBpZiAoYWJzS2V5KSB7XG5cdFx0ICBlbGVtc2V0WzBdID0gYWJzS2V5O1xuXHRcdCAgdGhpcy5zdGFydGxpbWl0ZWxlbSA9IGVsZW1zZXRbMF07IC8vIGxpbWl0IHRpZXMgaGVyZVxuXHQgIH1cbiAgICBpZiAodm9pY2UuZHVwbGljYXRlICYmIGVsZW1zZXQubGVuZ3RoID4gMCkgZWxlbXNldFswXS5pbnZpc2libGUgPSB0cnVlO1xuICAgIGJyZWFrO1xuICBjYXNlIFwic3RlbVwiOlxuICAgIHRoaXMuc3RlbWRpcj1lbGVtLmRpcmVjdGlvbjtcbiAgICBicmVhaztcbiAgY2FzZSBcInBhcnRcIjpcbiAgICB2YXIgYWJzZWxlbSA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwwLDAsICdwYXJ0JywgdGhpcy50dW5lTnVtYmVyKTtcblx0ICB2YXIgZGltID0gdGhpcy5yZW5kZXJlci5nZXRUZXh0U2l6ZShlbGVtLnRpdGxlLCAncGFydHNmb250JywgXCJwYXJ0XCIpO1xuICAgIGFic2VsZW0uYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChlbGVtLnRpdGxlLCAwLCAwLCB1bmRlZmluZWQsIHt0eXBlOlwicGFydFwiLCBoZWlnaHQ6IGRpbS5oZWlnaHQvc3BhY2luZy5TVEVQfSkpO1xuICAgIGVsZW1zZXRbMF0gPSBhYnNlbGVtO1xuICAgIGJyZWFrO1xuICBjYXNlIFwidGVtcG9cIjpcbiAgICB2YXIgYWJzZWxlbTMgPSBuZXcgQWJzb2x1dGVFbGVtZW50KGVsZW0sMCwwLCAndGVtcG8nLCB0aGlzLnR1bmVOdW1iZXIpO1xuICAgIGFic2VsZW0zLmFkZENoaWxkKG5ldyBUZW1wb0VsZW1lbnQoZWxlbSwgdGhpcy50dW5lTnVtYmVyLCBjcmVhdGVOb3RlSGVhZCkpO1xuICAgIGVsZW1zZXRbMF0gPSBhYnNlbGVtMztcbiAgICBicmVhaztcblx0ICBjYXNlIFwic3R5bGVcIjpcblx0XHQgIGlmIChlbGVtLmhlYWQgPT09IFwibm9ybWFsXCIpXG5cdFx0XHQgIGRlbGV0ZSB0aGlzLnN0eWxlO1xuXHRcdCAgZWxzZVxuXHRcdFx0ICB0aGlzLnN0eWxlID0gZWxlbS5oZWFkO1xuXHRcdCAgYnJlYWs7XG5cdCAgY2FzZSBcImhpbnRcIjpcblx0XHQgIGhpbnQgPSB0cnVlO1xuXHRcdCAgdGhpcy5zYXZlU3RhdGUoKTtcblx0XHQgIGJyZWFrO1xuXHQgIGNhc2UgXCJtaWRpXCI6XG5cdFx0Ly8gVGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSB2aXNpYmxlIG11c2ljLCBzbyBqdXN0IHNraXAgaXQuXG5cdFx0YnJlYWs7XG5cdCAgY2FzZSBcInNjYWxlXCI6XG5cdCAgXHR0aGlzLnZvaWNlU2NhbGUgPSBlbGVtLnNpemU7XG5cdCAgXHRicmVhaztcblxuICBkZWZhdWx0OlxuICAgIHZhciBhYnNlbGVtMiA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwwLDAsICd1bnN1cHBvcnRlZCcsIHRoaXMudHVuZU51bWJlcik7XG4gICAgYWJzZWxlbTIuYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChcImVsZW1lbnQgdHlwZSBcIitlbGVtLmVsX3R5cGUsIDAsIDAsIHVuZGVmaW5lZCwge3R5cGU6XCJkZWJ1Z1wifSkpO1xuICAgIGVsZW1zZXRbMF0gPSBhYnNlbGVtMjtcbiAgfVxuXG4gIHJldHVybiBlbGVtc2V0O1xufTtcblxuXHRmdW5jdGlvbiBzZXRBdmVyYWdlUGl0Y2goZWxlbSkge1xuXHRcdGlmIChlbGVtLnBpdGNoZXMpIHtcblx0XHRcdHNvcnRQaXRjaChlbGVtKTtcblx0XHRcdHZhciBzdW0gPSAwO1xuXHRcdFx0Zm9yICh2YXIgcCA9IDA7IHAgPCBlbGVtLnBpdGNoZXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0c3VtICs9IGVsZW0ucGl0Y2hlc1twXS52ZXJ0aWNhbFBvcztcblx0XHRcdH1cblx0XHRcdGVsZW0uYXZlcmFnZXBpdGNoID0gc3VtIC8gZWxlbS5waXRjaGVzLmxlbmd0aDtcblx0XHRcdGVsZW0ubWlucGl0Y2ggPSBlbGVtLnBpdGNoZXNbMF0udmVydGljYWxQb3M7XG5cdFx0XHRlbGVtLm1heHBpdGNoID0gZWxlbS5waXRjaGVzW2VsZW0ucGl0Y2hlcy5sZW5ndGggLSAxXS52ZXJ0aWNhbFBvcztcblx0XHR9XG5cdH1cblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jYWxjQmVhbURpciA9IGZ1bmN0aW9uIChpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UsIGVsZW1zKSB7XG5cdFx0aWYgKHRoaXMuc3RlbWRpcikgLy8gSWYgdGhlIHVzZXIgb3Igdm9pY2UgaXMgZm9yY2luZyB0aGUgc3RlbSBkaXJlY3Rpb24sIHdlIGFscmVhZHkga25vdyB0aGUgYW5zd2VyLlxuXHRcdFx0cmV0dXJuIHRoaXMuc3RlbWRpcjtcblx0XHR2YXIgYmVhbWVsZW0gPSBuZXcgQmVhbUVsZW0odGhpcy5zdGVtSGVpZ2h0ICogdGhpcy52b2ljZVNjYWxlLCB0aGlzLnN0ZW1kaXIsIHRoaXMuZmxhdEJlYW1zKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRiZWFtZWxlbS5hZGQoe2FiY2VsZW06IGVsZW1zW2ldfSk7IC8vIFRoaXMgaXMgYSBoYWNrIHRvIGNhbGwgYmVhbSBlbGVtIHdpdGgganVzdCBhIG1pbmltdW0gb2YgcHJvY2Vzc2luZzogZm9yIG91ciBwdXJwb3Nlcywgd2UgZG9uJ3QgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIHdob2xlIG5vdGUuXG5cdFx0fVxuXG5cdFx0dmFyIGRpciA9IGJlYW1lbGVtLmNhbGNEaXIoKTtcblx0XHRyZXR1cm4gZGlyID8gXCJ1cFwiIDogXCJkb3duXCI7XG5cdH07XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuY3JlYXRlQmVhbSA9IGZ1bmN0aW9uIChpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UsIGVsZW1zKSB7XG5cdFx0dmFyIGFic2VsZW1zZXQgPSBbXTtcblxuXHRcdHZhciBkaXIgPSB0aGlzLmNhbGNCZWFtRGlyKGlzU2luZ2xlTGluZVN0YWZmLCB2b2ljZSwgZWxlbXMpO1xuXHRcdHZhciBiZWFtZWxlbSA9IG5ldyBCZWFtRWxlbSh0aGlzLnN0ZW1IZWlnaHQgKiB0aGlzLnZvaWNlU2NhbGUsIGRpciwgdGhpcy5mbGF0QmVhbXMpO1xuXHRcdGlmIChoaW50KSBiZWFtZWxlbS5zZXRIaW50KCk7XG5cdFx0dmFyIG9sZERpciA9IHRoaXMuc3RlbWRpcjtcblx0XHR0aGlzLnN0ZW1kaXIgPSBkaXI7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGVsZW0gPSBlbGVtc1tpXTtcblx0XHRcdHZhciBhYnNlbGVtID0gdGhpcy5jcmVhdGVOb3RlKGVsZW0sIHRydWUsIGlzU2luZ2xlTGluZVN0YWZmLCB2b2ljZSk7XG5cdFx0XHRhYnNlbGVtc2V0LnB1c2goYWJzZWxlbSk7XG5cdFx0XHRiZWFtZWxlbS5hZGQoYWJzZWxlbSk7XG5cdFx0XHRpZiAodGhpcy50cmlwbGV0ICYmIHRoaXMudHJpcGxldC5pc0Nsb3NlZCgpKSB7XG5cdFx0XHRcdHZvaWNlLmFkZE90aGVyKHRoaXMudHJpcGxldCk7XG5cdFx0XHRcdHRoaXMudHJpcGxldCA9IG51bGw7XG5cdFx0XHRcdHRoaXMudHJpcGxldG11bHRpcGxpZXIgPSAxO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnN0ZW1kaXIgPSBvbGREaXI7XG5cdFx0dm9pY2UuYWRkQmVhbShiZWFtZWxlbSk7XG5cdFx0cmV0dXJuIGFic2VsZW1zZXQ7XG5cdH07XG5cbnZhciBzb3J0UGl0Y2ggPSBmdW5jdGlvbihlbGVtKSB7XG4gIHZhciBzb3J0ZWQ7XG4gIGRvIHtcbiAgICBzb3J0ZWQgPSB0cnVlO1xuICAgIGZvciAodmFyIHAgPSAwOyBwPGVsZW0ucGl0Y2hlcy5sZW5ndGgtMTsgcCsrKSB7XG4gICAgICBpZiAoZWxlbS5waXRjaGVzW3BdLnBpdGNoPmVsZW0ucGl0Y2hlc1twKzFdLnBpdGNoKSB7XG4gICAgICAgIHNvcnRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgdG1wID0gZWxlbS5waXRjaGVzW3BdO1xuICAgICAgICBlbGVtLnBpdGNoZXNbcF0gPSBlbGVtLnBpdGNoZXNbcCsxXTtcbiAgICAgICAgZWxlbS5waXRjaGVzW3ArMV0gPSB0bXA7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlICghc29ydGVkKTtcbn07XG5cbnZhciBsZWRnZXJMaW5lcyA9IGZ1bmN0aW9uKGFic2VsZW0sIG1pblBpdGNoLCBtYXhQaXRjaCwgaXNSZXN0LCBzeW1ib2xXaWR0aCwgYWRkaXRpb25hbExlZGdlcnMsIGRpciwgZHgsIHNjYWxlKSB7XG5cdGZvciAodmFyIGk9bWF4UGl0Y2g7IGk+MTE7IGktLSkge1xuXHRcdGlmIChpJTI9PT0wICYmICFpc1Jlc3QpIHtcblx0XHRcdGFic2VsZW0uYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChudWxsLCBkeCwgKHN5bWJvbFdpZHRoKzQpKnNjYWxlLCBpLCB7dHlwZTpcImxlZGdlclwifSkpO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaT1taW5QaXRjaDsgaTwxOyBpKyspIHtcblx0XHRpZiAoaSUyPT09MCAmJiAhaXNSZXN0KSB7XG5cdFx0XHRhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIChzeW1ib2xXaWR0aCs0KSpzY2FsZSwgaSwge3R5cGU6XCJsZWRnZXJcIn0pKTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYWRkaXRpb25hbExlZGdlcnMubGVuZ3RoOyBpKyspIHsgLy8gUEVSOiBkcmF3IGFkZGl0aW9uYWwgbGVkZ2Vyc1xuXHRcdHZhciBvZnMgPSBzeW1ib2xXaWR0aDtcblx0XHRpZiAoZGlyID09PSAnZG93bicpIG9mcyA9IC1vZnM7XG5cdFx0YWJzZWxlbS5hZGRDaGlsZChuZXcgUmVsYXRpdmVFbGVtZW50KG51bGwsIG9mcytkeCwgKHN5bWJvbFdpZHRoKzQpKnNjYWxlLCBhZGRpdGlvbmFsTGVkZ2Vyc1tpXSwge3R5cGU6XCJsZWRnZXJcIn0pKTtcblx0fVxufTtcblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5hZGRHcmFjZU5vdGVzID0gZnVuY3Rpb24gKGVsZW0sIHZvaWNlLCBhYnNlbGVtLCBub3RlaGVhZCwgc3RlbUhlaWdodCwgaXNCYWdwaXBlcywgcm9vbXRha2VuKSB7XG5cdFx0dmFyIGdyYWNlc2NhbGUgPSAzIC8gNTtcblx0XHR2YXIgZ3JhY2VTY2FsZVN0ZW0gPSAzLjUgLyA1OyAvLyBUT0RPLVBFUjogZW1waXJpY2FsbHkgZm91bmQgY29uc3RhbnQuXG5cdFx0dmFyIGdyYWNlYmVhbSA9IG51bGw7XG5cdFx0dmFyIGZsYWc7XG5cblx0XHRpZiAoZWxlbS5ncmFjZW5vdGVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGdyYWNlYmVhbSA9IG5ldyBCZWFtRWxlbShzdGVtSGVpZ2h0ICogZ3JhY2VTY2FsZVN0ZW0sIFwiZ3JhY2VcIiwgaXNCYWdwaXBlcyk7XG5cdFx0XHRpZiAoaGludCkgZ3JhY2ViZWFtLnNldEhpbnQoKTtcblx0XHRcdGdyYWNlYmVhbS5tYWluTm90ZSA9IGFic2VsZW07XHQvLyB0aGlzIGdpdmVzIHVzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIG5vdGUgdGhpcyBpcyBhdHRhY2hlZCB0byBzbyB0aGF0IHRoZSBzdGVtcyBjYW4gYmUgYXR0YWNoZWQgc29tZXdoZXJlLlxuXHRcdH1cblxuXHRcdHZhciBncmFjZW9mZnNldHMgPSBbXTtcblx0XHRmb3IgKGkgPSBlbGVtLmdyYWNlbm90ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsgLy8gZmlndXJlIG91dCB3aGVyZSB0byBwbGFjZSBlYWNoIGdyYWNlbm90ZVxuXHRcdFx0cm9vbXRha2VuICs9IDEwO1xuXHRcdFx0Z3JhY2VvZmZzZXRzW2ldID0gcm9vbXRha2VuO1xuXHRcdFx0aWYgKGVsZW0uZ3JhY2Vub3Rlc1tpXS5hY2NpZGVudGFsKSB7XG5cdFx0XHRcdHJvb210YWtlbiArPSA3O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBlbGVtLmdyYWNlbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBncmFjZXBpdGNoID0gZWxlbS5ncmFjZW5vdGVzW2ldLnZlcnRpY2FsUG9zO1xuXG5cdFx0XHRmbGFnID0gKGdyYWNlYmVhbSkgPyBudWxsIDogY2hhcnRhYmxlLnVmbGFnc1soaXNCYWdwaXBlcykgPyA1IDogM107XG5cdFx0XHR2YXIgYWNjaWRlbnRhbFNsb3QgPSBbXTtcblx0XHRcdHZhciByZXQgPSBjcmVhdGVOb3RlSGVhZChhYnNlbGVtLCBcIm5vdGVoZWFkcy5xdWFydGVyXCIsIGVsZW0uZ3JhY2Vub3Rlc1tpXSwgXCJ1cFwiLCAtZ3JhY2VvZmZzZXRzW2ldLCAtZ3JhY2VvZmZzZXRzW2ldLCBmbGFnLCAwLCAwLCBncmFjZXNjYWxlKnRoaXMudm9pY2VTY2FsZSwgYWNjaWRlbnRhbFNsb3QsIGZhbHNlKTtcblx0XHRcdHJldC5ub3RlaGVhZC5oaWdoZXN0VmVydCA9IHJldC5ub3RlaGVhZC5waXRjaCArIHN0ZW1IZWlnaHQgKiBncmFjZVNjYWxlU3RlbTtcblx0XHRcdHZhciBncmFjZSA9IHJldC5ub3RlaGVhZDtcblx0XHRcdHRoaXMuYWRkU2x1cnNBbmRUaWVzKGFic2VsZW0sIGVsZW0uZ3JhY2Vub3Rlc1tpXSwgZ3JhY2UsIHZvaWNlLCBcInVwXCIsIHRydWUpO1xuXG5cdFx0XHRhYnNlbGVtLmFkZEV4dHJhKGdyYWNlKTtcblx0XHRcdC8vIFBFUjogYWRkZWQgYWNjaWFjY2F0dXJhIHNsYXNoXG5cdFx0XHRpZiAoZWxlbS5ncmFjZW5vdGVzW2ldLmFjY2lhY2NhdHVyYSkge1xuXHRcdFx0XHR2YXIgcG9zID0gZWxlbS5ncmFjZW5vdGVzW2ldLnZlcnRpY2FsUG9zICsgNyAqIGdyYWNlc2NhbGU7ICAgICAgICAvLyB0aGUgc2FtZSBmb3JtdWxhIHRoYXQgZGV0ZXJtaW5lcyB0aGUgZmxhZyBwb3NpdGlvbi5cblx0XHRcdFx0dmFyIGRBY2NpYWNjYXR1cmEgPSBncmFjZWJlYW0gPyA1IDogNjsgICAgICAgIC8vIGp1c3QgYW4gb2Zmc2V0IHRvIG1ha2UgaXQgbGluZSB1cCBjb3JyZWN0bHkuXG5cdFx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcImZsYWdzLnVncmFjZVwiLCAtZ3JhY2VvZmZzZXRzW2ldICsgZEFjY2lhY2NhdHVyYSwgMCwgcG9zLCB7c2NhbGV4OiBncmFjZXNjYWxlLCBzY2FsZXk6IGdyYWNlc2NhbGV9KSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ3JhY2ViZWFtKSB7IC8vIGdpdmUgdGhlIGJlYW0gdGhlIG5lY2Vzc2FyeSBpbmZvXG5cdFx0XHRcdHZhciBncmFjZUR1cmF0aW9uID0gZWxlbS5ncmFjZW5vdGVzW2ldLmR1cmF0aW9uIC8gMjtcblx0XHRcdFx0aWYgKGlzQmFncGlwZXMpIGdyYWNlRHVyYXRpb24gLz0gMjtcblx0XHRcdFx0dmFyIHBzZXVkb2Fic2VsZW0gPSB7XG5cdFx0XHRcdFx0aGVhZHM6IFtncmFjZV0sXG5cdFx0XHRcdFx0YWJjZWxlbToge2F2ZXJhZ2VwaXRjaDogZ3JhY2VwaXRjaCwgbWlucGl0Y2g6IGdyYWNlcGl0Y2gsIG1heHBpdGNoOiBncmFjZXBpdGNoLCBkdXJhdGlvbjogZ3JhY2VEdXJhdGlvbn1cblx0XHRcdFx0fTtcblx0XHRcdFx0Z3JhY2ViZWFtLmFkZChwc2V1ZG9hYnNlbGVtKTtcblx0XHRcdH0gZWxzZSB7IC8vIGRyYXcgdGhlIHN0ZW1cblx0XHRcdFx0dmFyIHAxID0gZ3JhY2VwaXRjaCArIDEgLyAzICogZ3JhY2VzY2FsZTtcblx0XHRcdFx0dmFyIHAyID0gZ3JhY2VwaXRjaCArIDcgKiBncmFjZXNjYWxlO1xuXHRcdFx0XHR2YXIgZHggPSBncmFjZS5keCArIGdyYWNlLnc7XG5cdFx0XHRcdHZhciB3aWR0aCA9IC0wLjY7XG5cdFx0XHRcdGFic2VsZW0uYWRkRXh0cmEobmV3IFJlbGF0aXZlRWxlbWVudChudWxsLCBkeCwgMCwgcDEsIHtcInR5cGVcIjogXCJzdGVtXCIsIFwicGl0Y2gyXCI6IHAyLCBsaW5ld2lkdGg6IHdpZHRofSkpO1xuXHRcdFx0fVxuXHRcdFx0bGVkZ2VyTGluZXMoYWJzZWxlbSwgZ3JhY2VwaXRjaCwgZ3JhY2VwaXRjaCwgZmFsc2UsIGdseXBocy5nZXRTeW1ib2xXaWR0aChcIm5vdGVoZWFkcy5xdWFydGVyXCIpLCBbXSwgdHJ1ZSwgZ3JhY2UuZHggLSAxLCAwLjYpO1xuXG5cdFx0XHRpZiAoaSA9PT0gMCAmJiAhaXNCYWdwaXBlcyAmJiAhKGVsZW0ucmVzdCAmJiAoZWxlbS5yZXN0LnR5cGUgPT09IFwic3BhY2VyXCIgfHwgZWxlbS5yZXN0LnR5cGUgPT09IFwiaW52aXNpYmxlXCIpKSkge1xuXHRcdFx0XHQvLyBUaGlzIGlzIHRoZSBvdmVyYWxsIHNsdXIgdGhhdCBpcyB1bmRlciB0aGUgZ3JhY2Ugbm90ZXMuXG5cdFx0XHRcdHZhciBpc1RpZSA9IChlbGVtLmdyYWNlbm90ZXMubGVuZ3RoID09PSAxICYmIGdyYWNlLnBpdGNoID09PSBub3RlaGVhZC5waXRjaCk7XG5cdFx0XHRcdHZvaWNlLmFkZE90aGVyKG5ldyBUaWVFbGVtKHsgYW5jaG9yMTogZ3JhY2UsIGFuY2hvcjI6IG5vdGVoZWFkLCBpc0dyYWNlOiB0cnVlfSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChncmFjZWJlYW0pIHtcblx0XHRcdHZvaWNlLmFkZEJlYW0oZ3JhY2ViZWFtKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJvb210YWtlbjtcblx0fTtcblxuXHRmdW5jdGlvbiBhZGRSZXN0VG9BYnNFbGVtZW50KGFic2VsZW0sIGVsZW0sIGR1cmF0aW9uLCBkb3QsIGlzTXVsdGlWb2ljZSwgc3RlbWRpciwgaXNTaW5nbGVMaW5lU3RhZmYsIGR1cmxvZywgdm9pY2VTY2FsZSkge1xuXHRcdHZhciBjO1xuXHRcdHZhciByZXN0cGl0Y2ggPSA3O1xuXHRcdHZhciBub3RlSGVhZDtcblx0XHR2YXIgcm9vbVRha2VuO1xuXHRcdHZhciByb29tVGFrZW5SaWdodDtcblxuXHRcdGlmIChpc011bHRpVm9pY2UpIHtcblx0XHRcdGlmIChzdGVtZGlyID09PSBcImRvd25cIikgcmVzdHBpdGNoID0gMztcblx0XHRcdGlmIChzdGVtZGlyID09PSBcInVwXCIpIHJlc3RwaXRjaCA9IDExO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBpcyBzcGVjaWFsIHBsYWNlbWVudCBmb3IgdGhlIHBlcmN1c3Npb24gc3RhZmYuIElmIHRoZXJlIGlzIG9uZSBzdGFmZiBsaW5lLCB0aGVuIG1vdmUgdGhlIHJlc3QgcG9zaXRpb24uXG5cdFx0aWYgKGlzU2luZ2xlTGluZVN0YWZmKSB7XG5cdFx0XHQvLyBUaGUgaGFsZiBhbmQgd2hvbGUgcmVzdHMgYXJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBsaW5lcyBub3JtYWxseSwgc28gd2UgbmVlZCB0byB0d2VhayB0aGVpciBwb3NpdGlvbiB0byBnZXQgdGhlbSB0byBib3RoIGJlIGF0dGFjaGVkIHRvIHRoZSBzYW1lIG9uZS5cblx0XHRcdGlmIChkdXJhdGlvbiA8IDAuNSlcblx0XHRcdFx0cmVzdHBpdGNoID0gNztcblx0XHRcdGVsc2UgaWYgKGR1cmF0aW9uIDwgMSlcblx0XHRcdFx0cmVzdHBpdGNoID0gNztcdC8vIGhhbGYgcmVzdFxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXN0cGl0Y2ggPSA1OyAvLyB3aG9sZSByZXN0XG5cdFx0fVxuXHRcdHN3aXRjaCAoZWxlbS5yZXN0LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJ3aG9sZVwiOlxuXHRcdFx0XHRjID0gY2hhcnRhYmxlLnJlc3RbMF07XG5cdFx0XHRcdGVsZW0uYXZlcmFnZXBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRlbGVtLm1pbnBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRlbGVtLm1heHBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRkb3QgPSAwO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJyZXN0XCI6XG5cdFx0XHRcdGlmIChlbGVtLnN0eWxlID09PSBcInJoeXRobVwiKSAvLyBzcGVjaWFsIGNhc2UgZm9yIHJoeXRobTogcmVzdHMgYXJlIGEgaGFuZHkgd2F5IHRvIGV4cHJlc3MgdGhlIHJoeXRobS5cblx0XHRcdFx0XHRjID0gY2hhcnRhYmxlLnJoeXRobVstZHVybG9nXTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGMgPSBjaGFydGFibGUucmVzdFstZHVybG9nXTtcblx0XHRcdFx0ZWxlbS5hdmVyYWdlcGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGVsZW0ubWlucGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGVsZW0ubWF4cGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImludmlzaWJsZVwiOlxuXHRcdFx0Y2FzZSBcInNwYWNlclwiOlxuXHRcdFx0XHRjID0gXCJcIjtcblx0XHRcdFx0ZWxlbS5hdmVyYWdlcGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGVsZW0ubWlucGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGVsZW0ubWF4cGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm11bHRpbWVhc3VyZVwiOlxuXHRcdFx0XHRjID0gY2hhcnRhYmxlLnJlc3RbJ211bHRpJ107XG5cdFx0XHRcdGVsZW0uYXZlcmFnZXBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRlbGVtLm1pbnBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRlbGVtLm1heHBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRkb3QgPSAwO1xuXHRcdFx0XHR2YXIgbW1XaWR0aCA9IGdseXBocy5nZXRTeW1ib2xXaWR0aChjKTtcblx0XHRcdFx0YWJzZWxlbS5hZGRIZWFkKG5ldyBSZWxhdGl2ZUVsZW1lbnQoYywgLW1tV2lkdGgsIG1tV2lkdGggKiAyLCA3KSk7XG5cdFx0XHRcdHZhciBudW1NZWFzdXJlcyA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQoXCJcIiArIGVsZW0uZHVyYXRpb24sIDAsIG1tV2lkdGgsIDE2LCB7dHlwZTogXCJtdWx0aW1lYXN1cmUtdGV4dFwifSk7XG5cdFx0XHRcdGFic2VsZW0uYWRkRXh0cmEobnVtTWVhc3VyZXMpO1xuXHRcdH1cblx0XHRpZiAoZWxlbS5yZXN0LnR5cGUgIT09IFwibXVsdGltZWFzdXJlXCIpIHtcblx0XHRcdHZhciByZXQgPSBjcmVhdGVOb3RlSGVhZChhYnNlbGVtLCBjLCB7dmVydGljYWxQb3M6IHJlc3RwaXRjaH0sIG51bGwsIDAsIDAsIG51bGwsIGRvdCwgMCwgdm9pY2VTY2FsZSwgW10sIGZhbHNlKTtcblx0XHRcdG5vdGVIZWFkID0gcmV0Lm5vdGVoZWFkO1xuXHRcdFx0aWYgKG5vdGVIZWFkKSB7XG5cdFx0XHRcdGFic2VsZW0uYWRkSGVhZChub3RlSGVhZCk7XG5cdFx0XHRcdHJvb21UYWtlbiA9IHJldC5hY2NpZGVudGFsc2hpZnR4O1xuXHRcdFx0XHRyb29tVGFrZW5SaWdodCA9IHJldC5kb3RzaGlmdHg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IG5vdGVIZWFkOiBub3RlSGVhZCwgcm9vbVRha2VuOiByb29tVGFrZW4sIHJvb21UYWtlblJpZ2h0OiByb29tVGFrZW5SaWdodCB9O1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkSWZOb3RFeGlzdChhcnIsIGl0ZW0pIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKEpTT04uc3RyaW5naWZ5KGFycltpXSkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0pKVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGFyci5wdXNoKGl0ZW0pO1xuXHR9XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuYWRkTm90ZVRvQWJjRWxlbWVudCA9IGZ1bmN0aW9uKGFic2VsZW0sIGVsZW0sIGRvdCwgc3RlbWRpciwgc3R5bGUsIHplcm9EdXJhdGlvbiwgZHVybG9nLCBub3N0ZW0sIHZvaWNlKSB7XG5cdFx0dmFyIGRvdHNoaWZ0eCA9IDA7IC8vIHJvb20gdGFrZW4gYnkgY2hvcmRzIHdpdGggZGlzcGxhY2VkIG5vdGVoZWFkcyB3aGljaCBjYXVzZSBkb3RzIHRvIHNoaWZ0XG5cdFx0dmFyIG5vdGVIZWFkO1xuXHRcdHZhciByb29tVGFrZW4gPSAwO1xuXHRcdHZhciByb29tVGFrZW5SaWdodCA9IDA7XG5cdFx0dmFyIG1pbjtcblx0XHR2YXIgaTtcblx0XHR2YXIgYWRkaXRpb25hbExlZGdlcnMgPSBbXTtcblx0XHQvLyBUaGUgYWNjaWRlbnRhbFNsb3Qgd2lsbCBob2xkIGEgbGlzdCBvZiBhbGwgdGhlIGFjY2lkZW50YWxzIG9uIHRoaXMgY2hvcmQuIEVhY2ggZWxlbWVudCBpcyBhIHZlcnRpY2FsIHBsYWNlLFxuXHRcdC8vIGFuZCBjb250YWlucyBhIHBpdGNoLCB3aGljaCBpcyB0aGUgbGFzdCBwaXRjaCB0aGF0IGNvbnRhaW5zIGFuIGFjY2lkZW50YWwgaW4gdGhhdCBzbG90LiBUaGUgc2xvdHMgYXJlIG51bWJlcmVkXG5cdFx0Ly8gZnJvbSBjbG9zZXN0IHRvIHRoZSBub3RlIHRvIGZhcnRoZXIgbGVmdC4gV2Ugb25seSBuZWVkIHRvIGtub3cgdGhlIGxhc3QgYWNjaWRlbnRhbCB3ZSBwbGFjZWQgYmVjYXVzZVxuXHRcdC8vIHdlIGtub3cgdGhhdCB0aGUgcGl0Y2hlcyBhcmUgc29ydGVkIGJ5IG5vdy5cblx0XHR2YXIgYWNjaWRlbnRhbFNsb3QgPSBbXTtcblx0XHR2YXIgc3ltYm9sV2lkdGggPSAwO1xuXG5cdFx0dmFyIGRpciA9IChlbGVtLmF2ZXJhZ2VwaXRjaD49NikgPyBcImRvd25cIjogXCJ1cFwiO1xuXHRcdGlmIChzdGVtZGlyKSBkaXI9c3RlbWRpcjtcblxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSA/IGVsZW0uc3R5bGUgOiBzdHlsZTsgLy8gZ2V0IHRoZSBzdHlsZSBvZiBub3RlIGhlYWQuXG5cdFx0aWYgKCFzdHlsZSB8fCBzdHlsZSA9PT0gXCJub3JtYWxcIikgc3R5bGUgPSBcIm5vdGVcIjtcblx0XHR2YXIgbm90ZVN5bWJvbDtcblx0XHRpZiAoemVyb0R1cmF0aW9uKVxuXHRcdFx0bm90ZVN5bWJvbCA9IGNoYXJ0YWJsZVtzdHlsZV0ubm9zdGVtO1xuXHRcdGVsc2Vcblx0XHRcdG5vdGVTeW1ib2wgPSBjaGFydGFibGVbc3R5bGVdWy1kdXJsb2ddO1xuXHRcdGlmICghbm90ZVN5bWJvbClcblx0XHRcdGNvbnNvbGUubG9nKFwibm90ZVN5bWJvbDpcIiwgc3R5bGUsIGR1cmxvZywgemVyb0R1cmF0aW9uKTtcblxuXHRcdC8vIGRldGVybWluZSBlbGVtZW50cyBvZiBjaG9yZHMgd2hpY2ggc2hvdWxkIGJlIHNoaWZ0ZWRcblx0XHR2YXIgcDtcblx0XHRmb3IgKHA9KGRpcj09PVwiZG93blwiKT9lbGVtLnBpdGNoZXMubGVuZ3RoLTI6MTsgKGRpcj09PVwiZG93blwiKT9wPj0wOnA8ZWxlbS5waXRjaGVzLmxlbmd0aDsgcD0oZGlyPT09XCJkb3duXCIpP3AtMTpwKzEpIHtcblx0XHRcdHZhciBwcmV2ID0gZWxlbS5waXRjaGVzWyhkaXI9PT1cImRvd25cIik/cCsxOnAtMV07XG5cdFx0XHR2YXIgY3VyciA9IGVsZW0ucGl0Y2hlc1twXTtcblx0XHRcdHZhciBkZWx0YSA9IChkaXI9PT1cImRvd25cIik/cHJldi5waXRjaC1jdXJyLnBpdGNoOmN1cnIucGl0Y2gtcHJldi5waXRjaDtcblx0XHRcdGlmIChkZWx0YTw9MSAmJiAhcHJldi5wcmludGVyX3NoaWZ0KSB7XG5cdFx0XHRcdGN1cnIucHJpbnRlcl9zaGlmdD0oZGVsdGEpP1wiZGlmZmVyZW50XCI6XCJzYW1lXCI7XG5cdFx0XHRcdGlmIChjdXJyLnZlcnRpY2FsUG9zID4gMTEgfHwgY3Vyci52ZXJ0aWNhbFBvcyA8IDEpIHsgICAgICAgIC8vIFBFUjogYWRkIGV4dHJhIGxlZGdlciBsaW5lXG5cdFx0XHRcdFx0YWRkaXRpb25hbExlZGdlcnMucHVzaChjdXJyLnZlcnRpY2FsUG9zIC0gKGN1cnIudmVydGljYWxQb3MlMikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkaXI9PT1cImRvd25cIikge1xuXHRcdFx0XHRcdHJvb21UYWtlbiA9IGdseXBocy5nZXRTeW1ib2xXaWR0aChub3RlU3ltYm9sKSsyO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRvdHNoaWZ0eCA9IGdseXBocy5nZXRTeW1ib2xXaWR0aChub3RlU3ltYm9sKSsyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHBwID0gZWxlbS5waXRjaGVzLmxlbmd0aDtcblx0XHRmb3IgKHA9MDsgcDxlbGVtLnBpdGNoZXMubGVuZ3RoOyBwKyspIHtcblxuXHRcdFx0aWYgKCFub3N0ZW0pIHtcblx0XHRcdFx0dmFyIGZsYWc7XG5cdFx0XHRcdGlmICgoZGlyPT09XCJkb3duXCIgJiYgcCE9PTApIHx8IChkaXI9PT1cInVwXCIgJiYgcCE9PXBwLTEpKSB7IC8vIG5vdCB0aGUgc3RlbW1lZCBlbGVtIG9mIHRoZSBjaG9yZFxuXHRcdFx0XHRcdGZsYWcgPSBudWxsO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZsYWcgPSBjaGFydGFibGVbKGRpcj09PVwiZG93blwiKT9cImRmbGFnc1wiOlwidWZsYWdzXCJdWy1kdXJsb2ddO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR2YXIgYztcblx0XHRcdGlmIChlbGVtLnBpdGNoZXNbcF0uc3R5bGUpIHsgLy8gVGhlcmUgaXMgYSBzdHlsZSBmb3IgdGhlIHdob2xlIGdyb3VwIG9mIHBpdGNoZXMsIGJ1dCB0aGVyZSBjb3VsZCBhbHNvIGJlIGFuIG92ZXJyaWRlIGZvciBhIHBhcnRpY3VsYXIgcGl0Y2guXG5cdFx0XHRcdGMgPSBjaGFydGFibGVbZWxlbS5waXRjaGVzW3BdLnN0eWxlXVstZHVybG9nXTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjID0gbm90ZVN5bWJvbDtcblx0XHRcdC8vIFRoZSBoaWdoZXN0IHBvc2l0aW9uIGZvciB0aGUgc2FrZSBvZiBwbGFjaW5nIHNsdXJzIGlzIGl0c2VsZiBpZiB0aGUgc2x1ciBpcyBpbnRlcm5hbC4gSXQgaXMgdGhlIGhpZ2hlc3QgcG9zaXRpb24gcG9zc2libGUgaWYgdGhlIHNsdXIgaXMgZm9yIHRoZSB3aG9sZSBjaG9yZC5cblx0XHRcdC8vIElmIHRoZSBub3RlIGlzIHRoZSBvbmx5IG9uZSBpbiB0aGUgY2hvcmQsIHRoZW4gYW55IHNsdXIgaXQgaGFzIGNvdW50cyBhcyBpZiBpdCB3ZXJlIG9uIHRoZSB3aG9sZSBjaG9yZC5cblx0XHRcdGVsZW0ucGl0Y2hlc1twXS5oaWdoZXN0VmVydCA9IGVsZW0ucGl0Y2hlc1twXS52ZXJ0aWNhbFBvcztcblx0XHRcdHZhciBpc1RvcFdoZW5TdGVtSXNEb3duID0gKHN0ZW1kaXI9PT1cInVwXCIgfHwgZGlyPT09XCJ1cFwiKSAmJiBwPT09MDtcblx0XHRcdHZhciBpc0JvdHRvbVdoZW5TdGVtSXNVcCA9IChzdGVtZGlyPT09XCJkb3duXCIgfHwgZGlyPT09XCJkb3duXCIpICYmIHA9PT1wcC0xO1xuXHRcdFx0aWYgKGlzVG9wV2hlblN0ZW1Jc0Rvd24gfHwgaXNCb3R0b21XaGVuU3RlbUlzVXApIHsgLy8gcGxhY2UgdG8gcHV0IHNsdXJzIGlmIG5vdCBhbHJlYWR5IG9uIHBpdGNoZXNcblxuXHRcdFx0XHRpZiAoZWxlbS5zdGFydFNsdXIgfHwgcHAgPT09IDEpIHtcblx0XHRcdFx0XHRlbGVtLnBpdGNoZXNbcF0uaGlnaGVzdFZlcnQgPSBlbGVtLnBpdGNoZXNbcHAtMV0udmVydGljYWxQb3M7XG5cdFx0XHRcdFx0aWYgKGdldER1cmF0aW9uKGVsZW0pIDwgMSAmJiAoc3RlbWRpcj09PVwidXBcIiB8fCBkaXI9PT1cInVwXCIpKVxuXHRcdFx0XHRcdFx0ZWxlbS5waXRjaGVzW3BdLmhpZ2hlc3RWZXJ0ICs9IDY7ICAgICAgICAvLyBJZiB0aGUgc3RlbSBpcyB1cCwgdGhlbiBjb21wZW5zYXRlIGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBzdGVtXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGVsZW0uc3RhcnRTbHVyKSB7XG5cdFx0XHRcdFx0aWYgKCFlbGVtLnBpdGNoZXNbcF0uc3RhcnRTbHVyKSBlbGVtLnBpdGNoZXNbcF0uc3RhcnRTbHVyID0gW107IC8vVE9ETyBwb3NzaWJseSByZWR1bmRhbnQsIHByb3ZpZGVkIGFycmF5IGlzIG5vdCBvcHRpb25hbFxuXHRcdFx0XHRcdGZvciAoaT0wOyBpPGVsZW0uc3RhcnRTbHVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRhZGRJZk5vdEV4aXN0KGVsZW0ucGl0Y2hlc1twXS5zdGFydFNsdXIsIGVsZW0uc3RhcnRTbHVyW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZWxlbS5lbmRTbHVyKSB7XG5cdFx0XHRcdFx0ZWxlbS5waXRjaGVzW3BdLmhpZ2hlc3RWZXJ0ID0gZWxlbS5waXRjaGVzW3BwLTFdLnZlcnRpY2FsUG9zO1xuXHRcdFx0XHRcdGlmIChnZXREdXJhdGlvbihlbGVtKSA8IDEgJiYgKHN0ZW1kaXI9PT1cInVwXCIgfHwgZGlyPT09XCJ1cFwiKSlcblx0XHRcdFx0XHRcdGVsZW0ucGl0Y2hlc1twXS5oaWdoZXN0VmVydCArPSA2OyAgICAgICAgLy8gSWYgdGhlIHN0ZW0gaXMgdXAsIHRoZW4gY29tcGVuc2F0ZSBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgc3RlbVxuXHRcdFx0XHRcdGlmICghZWxlbS5waXRjaGVzW3BdLmVuZFNsdXIpIGVsZW0ucGl0Y2hlc1twXS5lbmRTbHVyID0gW107IC8vVE9ETyBwb3NzaWJseSByZWR1bmRhbnQsIHByb3ZpZGVkIGFycmF5IGlzIG5vdCBvcHRpb25hbFxuXHRcdFx0XHRcdGZvciAoaT0wOyBpPGVsZW0uZW5kU2x1ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0YWRkSWZOb3RFeGlzdChlbGVtLnBpdGNoZXNbcF0uZW5kU2x1ciwgZWxlbS5lbmRTbHVyW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGhhc1N0ZW0gPSAhbm9zdGVtICYmIGR1cmxvZzw9LTE7XG5cdFx0XHR2YXIgcmV0ID0gY3JlYXRlTm90ZUhlYWQoYWJzZWxlbSwgYywgZWxlbS5waXRjaGVzW3BdLCBkaXIsIDAsIC1yb29tVGFrZW4sIGZsYWcsIGRvdCwgZG90c2hpZnR4LCB0aGlzLnZvaWNlU2NhbGUsIGFjY2lkZW50YWxTbG90LCAhc3RlbWRpcik7XG5cdFx0XHRzeW1ib2xXaWR0aCA9IE1hdGgubWF4KGdseXBocy5nZXRTeW1ib2xXaWR0aChjKSwgc3ltYm9sV2lkdGgpO1xuXHRcdFx0YWJzZWxlbS5leHRyYXcgLT0gcmV0LmV4dHJhTGVmdDtcblx0XHRcdG5vdGVIZWFkID0gcmV0Lm5vdGVoZWFkO1xuXHRcdFx0aWYgKG5vdGVIZWFkKSB7XG5cdFx0XHRcdHRoaXMuYWRkU2x1cnNBbmRUaWVzKGFic2VsZW0sIGVsZW0ucGl0Y2hlc1twXSwgbm90ZUhlYWQsIHZvaWNlLCBoYXNTdGVtID8gZGlyIDogbnVsbCwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChlbGVtLmdyYWNlbm90ZXMgJiYgZWxlbS5ncmFjZW5vdGVzLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0bm90ZUhlYWQuYm90dG9tID0gbm90ZUhlYWQuYm90dG9tIC0gMTtcdCAvLyBJZiB0aGVyZSBpcyBhIHRpZSB0byB0aGUgZ3JhY2Ugbm90ZXMsIGxlYXZlIGEgbGl0dGxlIG1vcmUgcm9vbSBmb3IgdGhlIG5vdGUgdG8gYXZvaWQgY29sbGlzaW9ucy5cblx0XHRcdFx0YWJzZWxlbS5hZGRIZWFkKG5vdGVIZWFkKTtcblx0XHRcdH1cblx0XHRcdHJvb21UYWtlbiArPSByZXQuYWNjaWRlbnRhbHNoaWZ0eDtcblx0XHRcdHJvb21UYWtlblJpZ2h0ID0gTWF0aC5tYXgocm9vbVRha2VuUmlnaHQscmV0LmRvdHNoaWZ0eCk7XG5cdFx0fVxuXG5cdFx0Ly8gZHJhdyBzdGVtIGZyb20gdGhlIGZ1cnRoZXN0IG5vdGUgdG8gYSBwaXRjaCBhYm92ZS9iZWxvdyB0aGUgc3RlbW1lZCBub3RlXG5cdFx0aWYgKGhhc1N0ZW0pIHtcblx0XHRcdHZhciBzdGVtSGVpZ2h0ID0gNyAqIHRoaXMudm9pY2VTY2FsZTtcblx0XHRcdHZhciBwMSA9IChkaXI9PT1cImRvd25cIikgPyBlbGVtLm1pbnBpdGNoLXN0ZW1IZWlnaHQgOiBlbGVtLm1pbnBpdGNoKzEvMztcblx0XHRcdC8vIFBFUiBhZGRlZCBzdGVtZGlyIHRlc3QgdG8gbWFrZSB0aGUgbGluZSBtZWV0IHRoZSBub3RlLlxuXHRcdFx0aWYgKHAxPjYgJiYgIXN0ZW1kaXIpIHAxPTY7XG5cdFx0XHR2YXIgcDIgPSAoZGlyPT09XCJkb3duXCIpID8gZWxlbS5tYXhwaXRjaC0xLzMgOiBlbGVtLm1heHBpdGNoK3N0ZW1IZWlnaHQ7XG5cdFx0XHQvLyBQRVIgYWRkZWQgc3RlbWRpciB0ZXN0IHRvIG1ha2UgdGhlIGxpbmUgbWVldCB0aGUgbm90ZS5cblx0XHRcdGlmIChwMjw2ICYmICFzdGVtZGlyKSBwMj02O1xuXHRcdFx0dmFyIGR4ID0gKGRpcj09PVwiZG93blwiIHx8IGFic2VsZW0uaGVhZHMubGVuZ3RoID09PSAwKT8wOmFic2VsZW0uaGVhZHNbMF0udztcblx0XHRcdHZhciB3aWR0aCA9IChkaXI9PT1cImRvd25cIik/MTotMTtcblx0XHRcdC8vIFRPRE8tUEVSLUhBQ0s6IE9uZSB0eXBlIG9mIG5vdGUgaGVhZCBoYXMgYSBkaWZmZXJlbnQgcGxhY2VtZW50IG9mIHRoZSBzdGVtLiBUaGlzIHNob3VsZCBiZSBtb3JlIGdlbmVyaWNhbGx5IGNhbGN1bGF0ZWQ6XG5cdFx0XHRpZiAobm90ZUhlYWQuYyA9PT0gJ25vdGVoZWFkcy5zbGFzaC5xdWFydGVyJykge1xuXHRcdFx0XHRpZiAoZGlyID09PSAnZG93bicpXG5cdFx0XHRcdFx0cDIgLT0gMTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHAxICs9IDE7XG5cdFx0XHR9XG5cdFx0XHRhYnNlbGVtLmFkZEV4dHJhKG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIDAsIHAxLCB7XCJ0eXBlXCI6IFwic3RlbVwiLCBcInBpdGNoMlwiOnAyLCBsaW5ld2lkdGg6IHdpZHRofSkpO1xuXHRcdFx0Ly92YXIgUmVsYXRpdmVFbGVtZW50ID0gZnVuY3Rpb24gUmVsYXRpdmVFbGVtZW50KGMsIGR4LCB3LCBwaXRjaCwgb3B0KSB7XG5cdFx0XHRtaW4gPSBNYXRoLm1pbihwMSwgcDIpO1xuXHRcdH1cblx0XHRyZXR1cm4geyBub3RlSGVhZDogbm90ZUhlYWQsIHJvb21UYWtlbjogcm9vbVRha2VuLCByb29tVGFrZW5SaWdodDogcm9vbVRha2VuUmlnaHQsIG1pbjogbWluLCBhZGRpdGlvbmFsTGVkZ2VyczogYWRkaXRpb25hbExlZGdlcnMsIGRpcjogZGlyLCBzeW1ib2xXaWR0aDogc3ltYm9sV2lkdGggfTtcblx0fTtcblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5hZGRMeXJpYyA9IGZ1bmN0aW9uKGFic2VsZW0sIGVsZW0pIHtcblx0XHR2YXIgbHlyaWNTdHIgPSBcIlwiO1xuXHRcdHBhcnNlQ29tbW9uLmVhY2goZWxlbS5seXJpYywgZnVuY3Rpb24obHkpIHtcblx0XHRcdHZhciBkaXYgPSBseS5kaXZpZGVyID09PSAnICcgPyBcIlwiIDogbHkuZGl2aWRlcjtcblx0XHRcdGx5cmljU3RyICs9IGx5LnN5bGxhYmxlICsgZGl2ICsgXCJcXG5cIjtcblx0XHR9KTtcblx0XHR2YXIgbHlyaWNEaW0gPSB0aGlzLnJlbmRlcmVyLmdldFRleHRTaXplKGx5cmljU3RyLCAndm9jYWxmb250JywgXCJseXJpY1wiKTtcblx0XHR2YXIgcG9zaXRpb24gPSBlbGVtLnBvc2l0aW9uaW5nID8gZWxlbS5wb3NpdGlvbmluZy52b2NhbFBvc2l0aW9uIDogJ2JlbG93Jztcblx0XHRhYnNlbGVtLmFkZENlbnRlcmVkKG5ldyBSZWxhdGl2ZUVsZW1lbnQobHlyaWNTdHIsIDAsIGx5cmljRGltLndpZHRoLCB1bmRlZmluZWQsIHt0eXBlOlwibHlyaWNcIiwgcG9zaXRpb246IHBvc2l0aW9uLCBoZWlnaHQ6IGx5cmljRGltLmhlaWdodCAvIHNwYWNpbmcuU1RFUCB9KSk7XG5cdH07XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuYWRkQ2hvcmQgPSBmdW5jdGlvbihhYnNlbGVtLCBlbGVtLCByb29tVGFrZW4sIHJvb21UYWtlblJpZ2h0KSB7XG5cdFx0dmFyIGNob3JkTWFyZ2luID0gODsgLy8gSWYgdGhlcmUgYXJlIGNob3JkcyBuZXh0IHRvIGVhY2ggb3RoZXIsIHRoaXMgaXMgaG93IGNsb3NlIHRoZXkgY2FuIGdldC5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hvcmQubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciB4ID0gMDtcblx0XHRcdHZhciB5O1xuXHRcdFx0dmFyIGRpbSA9IHRoaXMucmVuZGVyZXIuZ2V0VGV4dFNpemUoZWxlbS5jaG9yZFtpXS5uYW1lLCAnYW5ub3RhdGlvbmZvbnQnLCBcImFubm90YXRpb25cIik7XG5cdFx0XHR2YXIgY2hvcmRXaWR0aCA9IGRpbS53aWR0aDtcblx0XHRcdHZhciBjaG9yZEhlaWdodCA9IGRpbS5oZWlnaHQgLyBzcGFjaW5nLlNURVA7XG5cdFx0XHRzd2l0Y2ggKGVsZW0uY2hvcmRbaV0ucG9zaXRpb24pIHtcblx0XHRcdFx0Y2FzZSBcImxlZnRcIjpcblx0XHRcdFx0XHRyb29tVGFrZW4rPWNob3JkV2lkdGgrNztcblx0XHRcdFx0XHR4ID0gLXJvb21UYWtlbjsgICAgICAgIC8vIFRPRE8tUEVSOiBUaGlzIGlzIGp1c3QgYSBndWVzcyBmcm9tIHRyaWFsIGFuZCBlcnJvclxuXHRcdFx0XHRcdHkgPSBlbGVtLmF2ZXJhZ2VwaXRjaDtcblx0XHRcdFx0XHRhYnNlbGVtLmFkZEV4dHJhKG5ldyBSZWxhdGl2ZUVsZW1lbnQoZWxlbS5jaG9yZFtpXS5uYW1lLCB4LCBjaG9yZFdpZHRoKzQsIHksIHt0eXBlOlwidGV4dFwiLCBoZWlnaHQ6IGNob3JkSGVpZ2h0fSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicmlnaHRcIjpcblx0XHRcdFx0XHRyb29tVGFrZW5SaWdodCs9NDtcblx0XHRcdFx0XHR4ID0gcm9vbVRha2VuUmlnaHQ7Ly8gVE9ETy1QRVI6IFRoaXMgaXMganVzdCBhIGd1ZXNzIGZyb20gdHJpYWwgYW5kIGVycm9yXG5cdFx0XHRcdFx0eSA9IGVsZW0uYXZlcmFnZXBpdGNoO1xuXHRcdFx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChlbGVtLmNob3JkW2ldLm5hbWUsIHgsIGNob3JkV2lkdGgrNCwgeSwge3R5cGU6XCJ0ZXh0XCIsIGhlaWdodDogY2hvcmRIZWlnaHR9KSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJiZWxvd1wiOlxuXHRcdFx0XHRcdC8vIHNldHRpbmcgdGhlIHktY29vcmRpbmF0ZSB0byB1bmRlZmluZWQgZm9yIG5vdzogaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlciBvbiwgYWZ0ZXIgd2UgZmlndXJlIG91dCB3aGF0IHRoZSBoaWdoZXN0IGVsZW1lbnQgb24gdGhlIGxpbmUgaXMuXG5cdFx0XHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGVsZW0uY2hvcmRbaV0ubmFtZSwgMCwgY2hvcmRXaWR0aCtjaG9yZE1hcmdpbiwgdW5kZWZpbmVkLCB7dHlwZTogXCJ0ZXh0XCIsIHBvc2l0aW9uOiBcImJlbG93XCIsIGhlaWdodDogY2hvcmRIZWlnaHR9KSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJhYm92ZVwiOlxuXHRcdFx0XHRcdC8vIHNldHRpbmcgdGhlIHktY29vcmRpbmF0ZSB0byB1bmRlZmluZWQgZm9yIG5vdzogaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlciBvbiwgYWZ0ZXIgd2UgZmlndXJlIG91dCB3aGF0IHRoZSBoaWdoZXN0IGVsZW1lbnQgb24gdGhlIGxpbmUgaXMuXG5cdFx0XHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGVsZW0uY2hvcmRbaV0ubmFtZSwgMCwgY2hvcmRXaWR0aCtjaG9yZE1hcmdpbiwgdW5kZWZpbmVkLCB7dHlwZTogXCJ0ZXh0XCIsIGhlaWdodDogY2hvcmRIZWlnaHR9KSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0aWYgKGVsZW0uY2hvcmRbaV0ucmVsX3Bvc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHR2YXIgcmVsUG9zaXRpb25ZID0gZWxlbS5jaG9yZFtpXS5yZWxfcG9zaXRpb24ueSArIDMqc3BhY2luZy5TVEVQOyAvLyBUT0RPLVBFUjogdGhpcyBpcyBhIGZ1ZGdlIGZhY3RvciB0byBtYWtlIGl0IGxpbmUgdXAgd2l0aCBhYmNtMnBzXG5cdFx0XHRcdFx0XHRhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQoZWxlbS5jaG9yZFtpXS5uYW1lLCB4ICsgZWxlbS5jaG9yZFtpXS5yZWxfcG9zaXRpb24ueCwgMCwgZWxlbS5taW5waXRjaCArIHJlbFBvc2l0aW9uWSAvIHNwYWNpbmcuU1RFUCwge3R5cGU6IFwidGV4dFwiLCBoZWlnaHQ6IGNob3JkSGVpZ2h0fSkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBzZXR0aW5nIHRoZSB5LWNvb3JkaW5hdGUgdG8gdW5kZWZpbmVkIGZvciBub3c6IGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIgb24sIGFmdGVyIHdlIGZpZ3VyZSBvdXQgd2hhdCB0aGUgaGlnaGVzdCBlbGVtZW50IG9uIHRoZSBsaW5lIGlzLlxuXHRcdFx0XHRcdFx0dmFyIHBvczIgPSAnYWJvdmUnO1xuXHRcdFx0XHRcdFx0aWYgKGVsZW0ucG9zaXRpb25pbmcgJiYgZWxlbS5wb3NpdGlvbmluZy5jaG9yZFBvc2l0aW9uKVxuXHRcdFx0XHRcdFx0XHRwb3MyID0gZWxlbS5wb3NpdGlvbmluZy5jaG9yZFBvc2l0aW9uO1xuXG5cdFx0XHRcdFx0XHRkaW0gPSB0aGlzLnJlbmRlcmVyLmdldFRleHRTaXplKGVsZW0uY2hvcmRbaV0ubmFtZSwgJ2djaG9yZGZvbnQnLCBcImNob3JkXCIpO1xuXHRcdFx0XHRcdFx0Y2hvcmRIZWlnaHQgPSBkaW0uaGVpZ2h0IC8gc3BhY2luZy5TVEVQO1xuXHRcdFx0XHRcdFx0Y2hvcmRXaWR0aCA9IGRpbS53aWR0aDsgLy8gU2luY2UgdGhlIGNob3JkIGlzIGNlbnRlcmVkLCB3ZSBvbmx5IHVzZSBoYWxmIHRoZSB3aWR0aC5cblx0XHRcdFx0XHRcdGFic2VsZW0uYWRkQ2VudGVyZWQobmV3IFJlbGF0aXZlRWxlbWVudChlbGVtLmNob3JkW2ldLm5hbWUsIHgsIGNob3JkV2lkdGgsIHVuZGVmaW5lZCwge3R5cGU6IFwiY2hvcmRcIiwgcG9zaXRpb246IHBvczIsIGhlaWdodDogY2hvcmRIZWlnaHQgfSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgcm9vbVRha2VuOiByb29tVGFrZW4sIHJvb21UYWtlblJpZ2h0OiByb29tVGFrZW5SaWdodCB9O1xuXHR9O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jcmVhdGVOb3RlID0gZnVuY3Rpb24oZWxlbSwgbm9zdGVtLCBpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UpIHsgLy9zdGVtIHByZXNlbmNlOiB0cnVlIGZvciBkcmF3aW5nIHN0ZW1sZXNzIG5vdGVoZWFkXG4gIHZhciBub3RlaGVhZCA9IG51bGw7XG4gIHZhciByb29tdGFrZW4gPSAwOyAvLyByb29tIG5lZWRlZCB0byB0aGUgbGVmdCBvZiB0aGUgbm90ZVxuICB2YXIgcm9vbXRha2VucmlnaHQgPSAwOyAvLyByb29tIG5lZWRlZCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vdGVcbiAgdmFyIHN5bWJvbFdpZHRoID0gMDtcbiAgdmFyIGFkZGl0aW9uYWxMZWRnZXJzID0gW107IC8vIFBFUjogaGFuZGxlIHRoZSBjYXNlIG9mIFtiYyddLCB3aGVyZSB0aGUgYiBkb2Vzbid0IGhhdmUgYSBsZWRnZXIgbGluZVxuXG4gIHZhciBpO1xuICB2YXIgZGlyO1xuXG5cdHZhciBkdXJhdGlvbiA9IGdldER1cmF0aW9uKGVsZW0pO1xuXHR2YXIgemVyb0R1cmF0aW9uID0gZmFsc2U7XG4gIGlmIChkdXJhdGlvbiA9PT0gMCkgeyB6ZXJvRHVyYXRpb24gPSB0cnVlOyBkdXJhdGlvbiA9IDAuMjU7IG5vc3RlbSA9IHRydWU7IH0gICAgICAgIC8vUEVSOiB6ZXJvIGR1cmF0aW9uIHdpbGwgZHJhdyBhIHF1YXJ0ZXIgbm90ZSBoZWFkLlxuICB2YXIgZHVybG9nID0gTWF0aC5mbG9vcihNYXRoLmxvZyhkdXJhdGlvbikvTWF0aC5sb2coMikpOyAvL1RPRE8gdXNlIGdldER1cmxvZ1xuICB2YXIgZG90PTA7XG5cbiAgZm9yICh2YXIgdG90ID0gTWF0aC5wb3coMixkdXJsb2cpLCBpbmM9dG90LzI7IHRvdDxkdXJhdGlvbjsgZG90KyssdG90Kz1pbmMsaW5jLz0yKTtcblxuXG5cdGlmIChlbGVtLnN0YXJ0VHJpcGxldCkge1xuXHRcdHRoaXMudHJpcGxldG11bHRpcGxpZXIgPSBlbGVtLnRyaXBsZXRNdWx0aXBsaWVyO1xuXHR9XG5cbiAgdmFyIGR1cmF0aW9uRm9yU3BhY2luZyA9IGR1cmF0aW9uICogdGhpcy50cmlwbGV0bXVsdGlwbGllcjtcbiAgaWYgKGVsZW0ucmVzdCAmJiBlbGVtLnJlc3QudHlwZSA9PT0gJ211bHRpbWVhc3VyZScpXG4gIFx0ZHVyYXRpb25Gb3JTcGFjaW5nID0gMTtcbiAgdmFyIGFic1R5cGUgPSBlbGVtLnJlc3QgPyBcInJlc3RcIiA6IFwibm90ZVwiO1xuICB2YXIgYWJzZWxlbSA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwgZHVyYXRpb25Gb3JTcGFjaW5nLCAxLCBhYnNUeXBlLCB0aGlzLnR1bmVOdW1iZXIsIHsgZHVyYXRpb25DbGFzc092ZXJpZGU6IGVsZW0uZHVyYXRpb24gKiB0aGlzLnRyaXBsZXRtdWx0aXBsaWVyfSk7XG4gIGlmIChoaW50KSBhYnNlbGVtLnNldEhpbnQoKTtcblxuICBpZiAoZWxlbS5yZXN0KSB7XG4gIFx0aWYgKHRoaXMubWVhc3VyZUxlbmd0aCA9PT0gZHVyYXRpb24gJiYgZWxlbS5yZXN0LnR5cGUgIT09ICdpbnZpc2libGUnICYmIGVsZW0ucmVzdC50eXBlICE9PSAnc3BhY2VyJylcblx0ICAgIGVsZW0ucmVzdC50eXBlID0gJ3dob2xlJzsgLy8gSWYgdGhlIHJlc3QgaXMgZXhhY3RseSBhIG1lYXN1cmUsIGFsd2F5cyB1c2UgYSB3aG9sZSByZXN0XG5cdCAgdmFyIHJldDEgPSBhZGRSZXN0VG9BYnNFbGVtZW50KGFic2VsZW0sIGVsZW0sIGR1cmF0aW9uLCBkb3QsIHZvaWNlLnZvaWNldG90YWwgPiAxLCB0aGlzLnN0ZW1kaXIsIGlzU2luZ2xlTGluZVN0YWZmLCBkdXJsb2csIHRoaXMudm9pY2VTY2FsZSk7XG5cdCAgbm90ZWhlYWQgPSByZXQxLm5vdGVIZWFkO1xuXHQgIHJvb210YWtlbiA9IHJldDEucm9vbVRha2VuO1xuXHQgIHJvb210YWtlbnJpZ2h0ID0gcmV0MS5yb29tVGFrZW5SaWdodDtcbiAgfSBlbHNlIHtcblx0ICB2YXIgcmV0MiA9IHRoaXMuYWRkTm90ZVRvQWJjRWxlbWVudChhYnNlbGVtLCBlbGVtLCBkb3QsIHRoaXMuc3RlbWRpciwgdGhpcy5zdHlsZSwgemVyb0R1cmF0aW9uLCBkdXJsb2csIG5vc3RlbSwgdm9pY2UpO1xuXHQgIGlmIChyZXQyLm1pbiAhPT0gdW5kZWZpbmVkKVxuXHRcdCAgdGhpcy5taW5ZID0gTWF0aC5taW4ocmV0Mi5taW4sIHRoaXMubWluWSk7XG5cdCAgbm90ZWhlYWQgPSByZXQyLm5vdGVIZWFkO1xuXHQgIHJvb210YWtlbiA9IHJldDIucm9vbVRha2VuO1xuXHQgIHJvb210YWtlbnJpZ2h0ID0gcmV0Mi5yb29tVGFrZW5SaWdodDtcblx0ICBhZGRpdGlvbmFsTGVkZ2VycyA9IHJldDIuYWRkaXRpb25hbExlZGdlcnM7XG5cdCAgZGlyID0gcmV0Mi5kaXI7XG5cdCAgc3ltYm9sV2lkdGggPSByZXQyLnN5bWJvbFdpZHRoO1xuICB9XG5cbiAgaWYgKGVsZW0ubHlyaWMgIT09IHVuZGVmaW5lZCkge1xuICBcdHRoaXMuYWRkTHlyaWMoYWJzZWxlbSwgZWxlbSk7XG4gIH1cblxuICBpZiAoZWxlbS5ncmFjZW5vdGVzICE9PSB1bmRlZmluZWQpIHtcblx0cm9vbXRha2VuICs9IHRoaXMuYWRkR3JhY2VOb3RlcyhlbGVtLCB2b2ljZSwgYWJzZWxlbSwgbm90ZWhlYWQsIHRoaXMuc3RlbUhlaWdodCAqIHRoaXMudm9pY2VTY2FsZSwgdGhpcy5pc0JhZ3BpcGVzLCByb29tdGFrZW4pO1xuICB9XG5cbiAgaWYgKGVsZW0uZGVjb3JhdGlvbikge1xuXHQgIHRoaXMuZGVjb3JhdGlvbi5jcmVhdGVEZWNvcmF0aW9uKHZvaWNlLCBlbGVtLmRlY29yYXRpb24sIGFic2VsZW0udG9wLCAobm90ZWhlYWQpP25vdGVoZWFkLnc6MCwgYWJzZWxlbSwgcm9vbXRha2VuLCBkaXIsIGFic2VsZW0uYm90dG9tLCBlbGVtLnBvc2l0aW9uaW5nLCB0aGlzLmhhc1ZvY2Fscyk7XG4gIH1cblxuICBpZiAoZWxlbS5iYXJOdW1iZXIpIHtcbiAgICBhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQoZWxlbS5iYXJOdW1iZXIsIC0xMCwgMCwgMCwge3R5cGU6XCJiYXJOdW1iZXJcIn0pKTtcbiAgfVxuXG4gIC8vIGxlZGdlciBsaW5lc1xuXHRsZWRnZXJMaW5lcyhhYnNlbGVtLCBlbGVtLm1pbnBpdGNoLCBlbGVtLm1heHBpdGNoLCBlbGVtLnJlc3QsIHN5bWJvbFdpZHRoLCBhZGRpdGlvbmFsTGVkZ2VycywgZGlyLCAtMiwgMSk7XG5cbiAgaWYgKGVsZW0uY2hvcmQgIT09IHVuZGVmaW5lZCkge1xuICBcdHZhciByZXQzID0gdGhpcy5hZGRDaG9yZChhYnNlbGVtLCBlbGVtLCByb29tdGFrZW4sIHJvb210YWtlbnJpZ2h0KTtcblx0ICByb29tdGFrZW4gPSByZXQzLnJvb21UYWtlbjtcblx0ICByb29tdGFrZW5yaWdodCA9IHJldDMucm9vbVRha2VuUmlnaHQ7XG4gIH1cblxuXG4gIGlmIChlbGVtLnN0YXJ0VHJpcGxldCkge1xuICAgIHRoaXMudHJpcGxldCA9IG5ldyBUcmlwbGV0RWxlbShlbGVtLnN0YXJ0VHJpcGxldCwgbm90ZWhlYWQsIHsgZmxhdEJlYW1zOiB0aGlzLmZsYXRCZWFtcyB9KTsgLy8gYWJvdmUgaXMgb3Bwb3NpdGUgZnJvbSBjYXNlIG9mIHNsdXJzXG4gIH1cblxuICBpZiAoZWxlbS5lbmRUcmlwbGV0ICYmIHRoaXMudHJpcGxldCkge1xuICAgIHRoaXMudHJpcGxldC5zZXRDbG9zZUFuY2hvcihub3RlaGVhZCk7XG4gIH1cblxuICBpZiAodGhpcy50cmlwbGV0ICYmICFlbGVtLnN0YXJ0VHJpcGxldCAmJiAhZWxlbS5lbmRUcmlwbGV0KSB7XG4gIFx0dGhpcy50cmlwbGV0Lm1pZGRsZU5vdGUobm90ZWhlYWQpO1xuICB9XG5cblxuICByZXR1cm4gYWJzZWxlbTtcbn07XG5cblxuXG5cbnZhciBjcmVhdGVOb3RlSGVhZCA9IGZ1bmN0aW9uKGFic2VsZW0sIGMsIHBpdGNoZWxlbSwgZGlyLCBoZWFkeCwgZXh0cmF4LCBmbGFnLCBkb3QsIGRvdHNoaWZ0eCwgc2NhbGUsIGFjY2lkZW50YWxTbG90LCBzaG91bGRFeHRlbmRTdGVtKSB7XG4gIC8vIFRPRE8gc2NhbGUgdGhlIGRvdCBhcyB3ZWxsXG4gIHZhciBwaXRjaCA9IHBpdGNoZWxlbS52ZXJ0aWNhbFBvcztcbiAgdmFyIG5vdGVoZWFkO1xuICB2YXIgaTtcbiAgdmFyIGFjY2lkZW50YWxzaGlmdHggPSAwO1xuICB2YXIgbmV3RG90U2hpZnRYID0gMDtcbiAgdmFyIGV4dHJhTGVmdCA9IDA7XG4gIGlmIChjID09PSB1bmRlZmluZWQpXG4gICAgYWJzZWxlbS5hZGRDaGlsZChuZXcgUmVsYXRpdmVFbGVtZW50KFwicGl0Y2ggaXMgdW5kZWZpbmVkXCIsIDAsIDAsIDAsIHt0eXBlOlwiZGVidWdcIn0pKTtcbiAgZWxzZSBpZiAoYz09PVwiXCIpIHtcbiAgICBub3RlaGVhZCA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgMCwgMCwgcGl0Y2gpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzaGlmdGhlYWR4ID0gaGVhZHg7XG4gICAgaWYgKHBpdGNoZWxlbS5wcmludGVyX3NoaWZ0KSB7XG4gICAgICB2YXIgYWRqdXN0ID0gKHBpdGNoZWxlbS5wcmludGVyX3NoaWZ0PT09XCJzYW1lXCIpPzE6MDtcbiAgICAgIHNoaWZ0aGVhZHggPSAoZGlyPT09XCJkb3duXCIpPy1nbHlwaHMuZ2V0U3ltYm9sV2lkdGgoYykqc2NhbGUrYWRqdXN0OmdseXBocy5nZXRTeW1ib2xXaWR0aChjKSpzY2FsZS1hZGp1c3Q7XG4gICAgfVxuXHQgIHZhciBvcHRzID0ge3NjYWxleDpzY2FsZSwgc2NhbGV5OiBzY2FsZSwgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKGMpKnNjYWxlIH07XG4gICAgbm90ZWhlYWQgPSBuZXcgUmVsYXRpdmVFbGVtZW50KGMsIHNoaWZ0aGVhZHgsIGdseXBocy5nZXRTeW1ib2xXaWR0aChjKSpzY2FsZSwgcGl0Y2gsIG9wdHMpO1xuICAgIG5vdGVoZWFkLnN0ZW1EaXIgPSBkaXI7XG4gICAgaWYgKGZsYWcpIHtcbiAgICAgIHZhciBwb3MgPSBwaXRjaCsoKGRpcj09PVwiZG93blwiKT8tNzo3KSpzY2FsZTtcbiAgICAgIC8vIGlmIHRoaXMgaXMgYSByZWd1bGFyIG5vdGUsIChub3QgZ3JhY2Ugb3IgdGVtcG8gaW5kaWNhdG9yKSB0aGVuIHRoZSBzdGVtIHdpbGwgaGF2ZSBiZWVuIHN0cmV0Y2hlZCB0byB0aGUgbWlkZGxlIGxpbmUgaWYgaXQgaXMgZmFyIGZyb20gdGhlIGNlbnRlci5cblx0ICAgIGlmIChzaG91bGRFeHRlbmRTdGVtKSB7XG5cdCAgICBcdGlmIChkaXI9PT1cImRvd25cIiAmJiBwb3MgPiA2KVxuXHQgICAgXHRcdHBvcyA9IDY7XG5cdCAgICBcdGlmIChkaXI9PT1cInVwXCIgJiYgcG9zIDwgNilcblx0ICAgIFx0XHRwb3MgPSA2O1xuXHQgICAgfVxuICAgICAgLy9pZiAoc2NhbGU9PT0xICYmIChkaXI9PT1cImRvd25cIik/KHBvcz42KToocG9zPDYpKSBwb3M9NjtcbiAgICAgIHZhciB4ZGVsdGEgPSAoZGlyPT09XCJkb3duXCIpP2hlYWR4OmhlYWR4K25vdGVoZWFkLnctMC42O1xuICAgICAgYWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGZsYWcsIHhkZWx0YSwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKGZsYWcpKnNjYWxlLCBwb3MsIHtzY2FsZXg6c2NhbGUsIHNjYWxleTogc2NhbGV9KSk7XG4gICAgfVxuXHQgIG5ld0RvdFNoaWZ0WCA9IG5vdGVoZWFkLncrZG90c2hpZnR4LTIrNSpkb3Q7XG4gICAgZm9yICg7ZG90PjA7ZG90LS0pIHtcbiAgICAgIHZhciBkb3RhZGp1c3R5ID0gKDEtTWF0aC5hYnMocGl0Y2gpJTIpOyAvL1BFUjogdGFrZSBhYnMgdmFsdWUgb2YgdGhlIHBpdGNoLiBBbmQgdGhlIHNoaWZ0IHN0aWxsIGhhcHBlbnMgb24gbGVkZ2VyIGxpbmVzLlxuICAgICAgYWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwiZG90cy5kb3RcIiwgbm90ZWhlYWQudytkb3RzaGlmdHgtMis1KmRvdCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwiZG90cy5kb3RcIiksIHBpdGNoK2RvdGFkanVzdHkpKTtcbiAgICB9XG4gIH1cbiAgICAgICAgaWYgKG5vdGVoZWFkKVxuICAgICAgICAgICAgICAgIG5vdGVoZWFkLmhpZ2hlc3RWZXJ0ID0gcGl0Y2hlbGVtLmhpZ2hlc3RWZXJ0O1xuXG4gIGlmIChwaXRjaGVsZW0uYWNjaWRlbnRhbCkge1xuICAgIHZhciBzeW1iO1xuICAgIHN3aXRjaCAocGl0Y2hlbGVtLmFjY2lkZW50YWwpIHtcbiAgICBjYXNlIFwicXVhcnRlcnNoYXJwXCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5oYWxmc2hhcnBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRibHNoYXJwXCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5kYmxzaGFycFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNoYXJwXCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5zaGFycFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInF1YXJ0ZXJmbGF0XCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5oYWxmZmxhdFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImZsYXRcIjpcbiAgICAgIHN5bWIgPSBcImFjY2lkZW50YWxzLmZsYXRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkYmxmbGF0XCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5kYmxmbGF0XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibmF0dXJhbFwiOlxuICAgICAgc3ltYiA9IFwiYWNjaWRlbnRhbHMubmF0XCI7XG4gICAgfVxuICAgICAgICAgLy8gaWYgYSBub3RlIGlzIGF0IGxlYXN0IGEgc2l4dGggYXdheSwgaXQgY2FuIHNoYXJlIGEgc2xvdCB3aXRoIGFub3RoZXIgYWNjaWRlbnRhbFxuICAgICAgICAgdmFyIGFjY1Nsb3RGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgdmFyIGFjY1BsYWNlID0gZXh0cmF4O1xuICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhY2NpZGVudGFsU2xvdC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICBpZiAocGl0Y2ggLSBhY2NpZGVudGFsU2xvdFtqXVswXSA+PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgYWNjaWRlbnRhbFNsb3Rbal1bMF0gPSBwaXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICBhY2NQbGFjZSA9IGFjY2lkZW50YWxTbG90W2pdWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgIGFjY1Nsb3RGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIGlmIChhY2NTbG90Rm91bmQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgIGFjY1BsYWNlIC09IChnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoc3ltYikqc2NhbGUrMik7XG4gICAgICAgICAgICAgICAgIGFjY2lkZW50YWxTbG90LnB1c2goW3BpdGNoLGFjY1BsYWNlXSk7XG4gICAgICAgICAgICAgICAgIGFjY2lkZW50YWxzaGlmdHggPSAoZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWIpKnNjYWxlKzIpO1xuICAgICAgICAgfVxuICAgIGFic2VsZW0uYWRkRXh0cmEobmV3IFJlbGF0aXZlRWxlbWVudChzeW1iLCBhY2NQbGFjZSwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWIpLCBwaXRjaCwge3NjYWxleDpzY2FsZSwgc2NhbGV5OiBzY2FsZX0pKTtcblx0ICBleHRyYUxlZnQgPSBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoc3ltYikgLyAyOyAvLyBUT0RPLVBFUjogV2UgbmVlZCBhIGxpdHRsZSBleHRyYSB3aWR0aCBpZiB0aGVyZSBpcyBhbiBhY2NpZGVudGFsLCBidXQgSSdtIG5vdCBzdXJlIHdoeSBpdCBpc24ndCB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgYWNjaWRlbnRhbC5cbiAgfVxuXG4gIHJldHVybiB7IG5vdGVoZWFkOiBub3RlaGVhZCwgYWNjaWRlbnRhbHNoaWZ0eDogYWNjaWRlbnRhbHNoaWZ0eCwgZG90c2hpZnR4OiBuZXdEb3RTaGlmdFgsIGV4dHJhTGVmdDogZXh0cmFMZWZ0IH07XG5cbn07XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuYWRkU2x1cnNBbmRUaWVzID0gZnVuY3Rpb24oYWJzZWxlbSwgcGl0Y2hlbGVtLCBub3RlaGVhZCwgdm9pY2UsIGRpciwgaXNHcmFjZSkge1xuXHRcdGlmIChwaXRjaGVsZW0uZW5kVGllKSB7XG5cdFx0XHRpZiAodGhpcy50aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIG9wZW4gdGllcywgZmluZCB0aGUgb25lIHRoYXQgYXBwbGllcyBieSBtYXRjaGluZyB0aGUgcGl0Y2gsIGlmIHBvc3NpYmxlLlxuXHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnRpZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRpZiAodGhpcy50aWVzW2pdLmFuY2hvcjEgJiYgdGhpcy50aWVzW2pdLmFuY2hvcjEucGl0Y2ggPT09IG5vdGVoZWFkLnBpdGNoKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRpZXNbal0uc2V0RW5kQW5jaG9yKG5vdGVoZWFkKTtcblx0XHRcdFx0XHRcdHRoaXMudGllcy5zcGxpY2UoaiwgMSk7XG5cdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFmb3VuZCkge1xuXHRcdFx0XHRcdHRoaXMudGllc1swXS5zZXRFbmRBbmNob3Iobm90ZWhlYWQpO1xuXHRcdFx0XHRcdHRoaXMudGllcy5zcGxpY2UoMCwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgdm9pY2VOdW1iZXIgPSB2b2ljZS52b2ljZXRvdGFsIDwgMiA/IC0xIDogdm9pY2Uudm9pY2VudW1iZXI7XG5cdFx0aWYgKHBpdGNoZWxlbS5zdGFydFRpZSkge1xuXHRcdFx0dmFyIHRpZSA9IG5ldyBUaWVFbGVtKHsgYW5jaG9yMTogbm90ZWhlYWQsIGZvcmNlOiAodGhpcy5zdGVtZGlyPT09XCJkb3duXCIgfHwgdGhpcy5zdGVtZGlyPT09XCJ1cFwiKSwgc3RlbURpcjogdGhpcy5zdGVtZGlyLCBpc0dyYWNlOiBpc0dyYWNlLCB2b2ljZU51bWJlcjogdm9pY2VOdW1iZXJ9KTtcblx0XHRcdGlmIChoaW50KSB0aWUuc2V0SGludCgpO1xuXG5cdFx0XHR0aGlzLnRpZXNbdGhpcy50aWVzLmxlbmd0aF09dGllO1xuXHRcdFx0dm9pY2UuYWRkT3RoZXIodGllKTtcblx0XHRcdC8vIEhBQ0stUEVSOiBGb3IgdGhlIGFuaW1hdGlvbiwgd2UgbmVlZCB0byBrbm93IGlmIGEgbm90ZSBpcyB0aWVkIHRvIHRoZSBuZXh0IG9uZSwgc28gaGVyZSdzIGEgZmxhZy5cblx0XHRcdC8vIFVuZm9ydHVuYXRlbHksIG9ubHkgc29tZSBvZiB0aGUgbm90ZXMgaW4gdGhlIGN1cnJlbnQgZXZlbnQgbWlnaHQgYmUgdGllZCwgYnV0IHRoaXMgd2lsbCBjb25zaWRlciBpdFxuXHRcdFx0Ly8gdGllZCBpZiBhbnkgb25lIG9mIHRoZW0gaXMuIFRoYXQgd2lsbCB3b3JrIGZvciBtb3N0IGNhc2VzLlxuXHRcdFx0YWJzZWxlbS5zdGFydFRpZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBpdGNoZWxlbS5lbmRTbHVyKSB7XG5cdFx0XHRmb3IgKHZhciBpPTA7IGk8cGl0Y2hlbGVtLmVuZFNsdXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHNsdXJpZCA9IHBpdGNoZWxlbS5lbmRTbHVyW2ldO1xuXHRcdFx0XHR2YXIgc2x1cjtcblx0XHRcdFx0aWYgKHRoaXMuc2x1cnNbc2x1cmlkXSkge1xuXHRcdFx0XHRcdHNsdXIgPSB0aGlzLnNsdXJzW3NsdXJpZF07XG5cdFx0XHRcdFx0c2x1ci5zZXRFbmRBbmNob3Iobm90ZWhlYWQpO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnNsdXJzW3NsdXJpZF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2x1ciA9IG5ldyBUaWVFbGVtKHsgYW5jaG9yMjogbm90ZWhlYWQsIHN0ZW1EaXI6IHRoaXMuc3RlbWRpciwgdm9pY2VOdW1iZXI6IHZvaWNlTnVtYmVyfSk7XG5cdFx0XHRcdFx0aWYgKGhpbnQpIHNsdXIuc2V0SGludCgpO1xuXHRcdFx0XHRcdHZvaWNlLmFkZE90aGVyKHNsdXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLnN0YXJ0bGltaXRlbGVtKSB7XG5cdFx0XHRcdFx0c2x1ci5zZXRTdGFydFgodGhpcy5zdGFydGxpbWl0ZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCFpc0dyYWNlKSB7XG5cdFx0XHRmb3IgKHZhciBzIGluIHRoaXMuc2x1cnMpIHtcblx0XHRcdFx0aWYgKHRoaXMuc2x1cnMuaGFzT3duUHJvcGVydHkocykpIHtcblx0XHRcdFx0XHR0aGlzLnNsdXJzW3NdLmFkZEludGVybmFsTm90ZShub3RlaGVhZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGl0Y2hlbGVtLnN0YXJ0U2x1cikge1xuXHRcdFx0Zm9yIChpPTA7IGk8cGl0Y2hlbGVtLnN0YXJ0U2x1ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgc2x1cmlkID0gcGl0Y2hlbGVtLnN0YXJ0U2x1cltpXS5sYWJlbDtcblx0XHRcdFx0dmFyIHNsdXIgPSBuZXcgVGllRWxlbSh7IGFuY2hvcjE6IG5vdGVoZWFkLCBzdGVtRGlyOiB0aGlzLnN0ZW1kaXIsIHZvaWNlTnVtYmVyOiB2b2ljZU51bWJlcn0pO1xuXHRcdFx0XHRpZiAoaGludCkgc2x1ci5zZXRIaW50KCk7XG5cdFx0XHRcdHRoaXMuc2x1cnNbc2x1cmlkXT1zbHVyO1xuXHRcdFx0XHR2b2ljZS5hZGRPdGhlcihzbHVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLmFkZE1lYXN1cmVOdW1iZXIgPSBmdW5jdGlvbiAobnVtYmVyLCBhYnNlbGVtKSB7XG5cdHZhciBtZWFzdXJlTnVtSGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5nZXRUZXh0U2l6ZShudW1iZXIsIFwibWVhc3VyZWZvbnRcIiwgJ2Jhci1udW1iZXInKTtcblx0YWJzZWxlbS5hZGRDaGlsZChuZXcgUmVsYXRpdmVFbGVtZW50KG51bWJlciwgMCwgMCwgMTErbWVhc3VyZU51bUhlaWdodC5oZWlnaHQgLyBzcGFjaW5nLlNURVAsIHt0eXBlOlwiYmFyTnVtYmVyXCJ9KSk7XG59O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jcmVhdGVCYXJMaW5lID0gZnVuY3Rpb24gKHZvaWNlLCBlbGVtLCBpc0ZpcnN0U3RhZmYpIHtcbi8vIGJhcl90aGluLCBiYXJfdGhpbl90aGljaywgYmFyX3RoaW5fdGhpbiwgYmFyX3RoaWNrX3RoaW4sIGJhcl9yaWdodF9yZXBlYXQsIGJhcl9sZWZ0X3JlcGVhdCwgYmFyX2RvdWJsZV9yZXBlYXRcblxuICB2YXIgYWJzZWxlbSA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwgMCwgMTAsICdiYXInLCB0aGlzLnR1bmVOdW1iZXIpO1xuICB2YXIgYW5jaG9yID0gbnVsbDsgLy8gcGxhY2UgdG8gYXR0YWNoIHBhcnQgbGluZXNcbiAgdmFyIGR4ID0gMDtcblxuXHRpZiAoZWxlbS5iYXJOdW1iZXIpIHtcblx0XHR0aGlzLmFkZE1lYXN1cmVOdW1iZXIoZWxlbS5iYXJOdW1iZXIsIGFic2VsZW0pO1xuXHR9XG5cblxuICB2YXIgZmlyc3Rkb3RzID0gKGVsZW0udHlwZT09PVwiYmFyX3JpZ2h0X3JlcGVhdFwiIHx8IGVsZW0udHlwZT09PVwiYmFyX2RibF9yZXBlYXRcIik7XG4gIHZhciBmaXJzdHRoaW4gPSAoZWxlbS50eXBlIT09XCJiYXJfbGVmdF9yZXBlYXRcIiAmJiBlbGVtLnR5cGUhPT1cImJhcl90aGlja190aGluXCIgJiYgZWxlbS50eXBlIT09XCJiYXJfaW52aXNpYmxlXCIpO1xuICB2YXIgdGhpY2sgPSAoZWxlbS50eXBlPT09XCJiYXJfcmlnaHRfcmVwZWF0XCIgfHwgZWxlbS50eXBlPT09XCJiYXJfZGJsX3JlcGVhdFwiIHx8IGVsZW0udHlwZT09PVwiYmFyX2xlZnRfcmVwZWF0XCIgfHxcbiAgICAgICAgIGVsZW0udHlwZT09PVwiYmFyX3RoaW5fdGhpY2tcIiB8fCBlbGVtLnR5cGU9PT1cImJhcl90aGlja190aGluXCIpO1xuICB2YXIgc2Vjb25kdGhpbiA9IChlbGVtLnR5cGU9PT1cImJhcl9sZWZ0X3JlcGVhdFwiIHx8IGVsZW0udHlwZT09PVwiYmFyX3RoaWNrX3RoaW5cIiB8fCBlbGVtLnR5cGU9PT1cImJhcl90aGluX3RoaW5cIiB8fCBlbGVtLnR5cGU9PT1cImJhcl9kYmxfcmVwZWF0XCIpO1xuICB2YXIgc2Vjb25kZG90cyA9IChlbGVtLnR5cGU9PT1cImJhcl9sZWZ0X3JlcGVhdFwiIHx8IGVsZW0udHlwZT09PVwiYmFyX2RibF9yZXBlYXRcIik7XG5cbiAgLy8gbGltaXQgcG9zaXRpb25pbmcgb2Ygc2x1cnNcbiAgaWYgKGZpcnN0ZG90cyB8fCBzZWNvbmRkb3RzKSB7XG4gICAgZm9yICh2YXIgc2x1ciBpbiB0aGlzLnNsdXJzKSB7XG4gICAgICBpZiAodGhpcy5zbHVycy5oYXNPd25Qcm9wZXJ0eShzbHVyKSkge1xuICAgICAgICB0aGlzLnNsdXJzW3NsdXJdLnNldEVuZFgoYWJzZWxlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRsaW1pdGVsZW0gPSBhYnNlbGVtO1xuICB9XG5cbiAgaWYgKGZpcnN0ZG90cykge1xuICAgIGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcImRvdHMuZG90XCIsIGR4LCAxLCA3KSk7XG4gICAgYWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwiZG90cy5kb3RcIiwgZHgsIDEsIDUpKTtcbiAgICBkeCs9NjsgLy8yIGhhcmRjb2RlZCwgdHdpY2U7XG4gIH1cblxuICBpZiAoZmlyc3R0aGluKSB7XG4gICAgYW5jaG9yID0gbmV3IFJlbGF0aXZlRWxlbWVudChudWxsLCBkeCwgMSwgMiwge1widHlwZVwiOiBcImJhclwiLCBcInBpdGNoMlwiOjEwLCBsaW5ld2lkdGg6MC42fSk7XG4gICAgYWJzZWxlbS5hZGRSaWdodChhbmNob3IpO1xuICB9XG5cbiAgaWYgKGVsZW0udHlwZT09PVwiYmFyX2ludmlzaWJsZVwiKSB7XG4gICAgYW5jaG9yID0gbmV3IFJlbGF0aXZlRWxlbWVudChudWxsLCBkeCwgMSwgMiwge1widHlwZVwiOiBcIm5vbmVcIiwgXCJwaXRjaDJcIjoxMCwgbGluZXdpZHRoOjAuNn0pO1xuICAgIGFic2VsZW0uYWRkUmlnaHQoYW5jaG9yKTtcbiAgfVxuXG4gIGlmIChlbGVtLmRlY29yYXRpb24pIHtcbiAgICB0aGlzLmRlY29yYXRpb24uY3JlYXRlRGVjb3JhdGlvbih2b2ljZSwgZWxlbS5kZWNvcmF0aW9uLCAxMiwgKHRoaWNrKT8zOjEsIGFic2VsZW0sIDAsIFwiZG93blwiLCAyLCBlbGVtLnBvc2l0aW9uaW5nLCB0aGlzLmhhc1ZvY2Fscyk7XG4gIH1cblxuICBpZiAodGhpY2spIHtcbiAgICBkeCs9NDsgLy8zIGhhcmRjb2RlZDtcbiAgICBhbmNob3IgPSBuZXcgUmVsYXRpdmVFbGVtZW50KG51bGwsIGR4LCA0LCAyLCB7XCJ0eXBlXCI6IFwiYmFyXCIsIFwicGl0Y2gyXCI6MTAsIGxpbmV3aWR0aDo0fSk7XG4gICAgYWJzZWxlbS5hZGRSaWdodChhbmNob3IpO1xuICAgIGR4Kz01O1xuICB9XG5cbi8vIGlmICh0aGlzLnBhcnRzdGFydGVsZW0gJiYgKHRoaWNrIHx8IChmaXJzdHRoaW4gJiYgc2Vjb25kdGhpbikpKSB7IC8vIG1lYW5zIGVuZCBvZiBudGggcGFydFxuLy8gdGhpcy5wYXJ0c3RhcnRlbGVtLmFuY2hvcjI9YW5jaG9yO1xuLy8gdGhpcy5wYXJ0c3RhcnRlbGVtID0gbnVsbDtcbi8vIH1cblxuICBpZiAodGhpcy5wYXJ0c3RhcnRlbGVtICYmIGVsZW0uZW5kRW5kaW5nKSB7XG4gICAgdGhpcy5wYXJ0c3RhcnRlbGVtLmFuY2hvcjI9YW5jaG9yO1xuICAgIHRoaXMucGFydHN0YXJ0ZWxlbSA9IG51bGw7XG4gIH1cblxuICBpZiAoc2Vjb25kdGhpbikge1xuICAgIGR4Kz0zOyAvLzMgaGFyZGNvZGVkO1xuICAgIGFuY2hvciA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIDEsIDIsIHtcInR5cGVcIjogXCJiYXJcIiwgXCJwaXRjaDJcIjoxMCwgbGluZXdpZHRoOjAuNn0pO1xuICAgIGFic2VsZW0uYWRkUmlnaHQoYW5jaG9yKTsgLy8gMyBpcyBoYXJkY29kZWRcbiAgfVxuXG4gIGlmIChzZWNvbmRkb3RzKSB7XG4gICAgZHgrPTM7IC8vMyBoYXJkY29kZWQ7XG4gICAgYWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwiZG90cy5kb3RcIiwgZHgsIDEsIDcpKTtcbiAgICBhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoXCJkb3RzLmRvdFwiLCBkeCwgMSwgNSkpO1xuICB9IC8vIDIgaXMgaGFyZGNvZGVkXG5cbiAgaWYgKGVsZW0uc3RhcnRFbmRpbmcgJiYgaXNGaXJzdFN0YWZmKSB7IC8vIG9ubHkgcHV0IHRoZSBmaXJzdCAmIHNlY29uZCBlbmRpbmcgbWFya3Mgb24gdGhlIGZpcnN0IHN0YWZmXG5cdCAgdmFyIHRleHRXaWR0aCA9IHRoaXMucmVuZGVyZXIuZ2V0VGV4dFNpemUoZWxlbS5zdGFydEVuZGluZywgXCJyZXBlYXRmb250XCIsICcnKS53aWR0aDtcblx0ICBhYnNlbGVtLm1pbnNwYWNpbmcgKz0gdGV4dFdpZHRoICsgMTA7IC8vIEdpdmUgcGxlbnR5IG9mIHJvb20gZm9yIHRoZSBlbmRpbmcgbnVtYmVyLlxuICAgIHRoaXMucGFydHN0YXJ0ZWxlbSA9IG5ldyBFbmRpbmdFbGVtKGVsZW0uc3RhcnRFbmRpbmcsIGFuY2hvciwgbnVsbCk7XG5cdCAgdm9pY2UuYWRkT3RoZXIodGhpcy5wYXJ0c3RhcnRlbGVtKTtcbiAgfVxuXG4gIC8vIEFkZCBhIGxpdHRsZSBzcGFjZSB0byB0aGUgbGVmdCBvZiB0aGUgYmFyIGxpbmUgc28gdGhhdCBub3RoaW5nIGNhbiBjcm93ZCBpdC5cblx0YWJzZWxlbS5leHRyYXcgLT0gNTtcblxuXHRyZXR1cm4gYWJzZWxlbTtcblxufTtcblxuXG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RW5ncmF2ZXI7XG4iLCIvLyAgICBhYmNfdm9pY2VfZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgVm9pY2VFbGVtZW50IGNsYXNzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLypnbG9iYWwgbW9kdWxlICovXG5cbnZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcblxuZnVuY3Rpb24gU3ZnKHdyYXBwZXIpIHtcblx0dGhpcy5zdmcgPSBjcmVhdGVTdmcoKTtcblx0d3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLnN2Zyk7XG59XG5cblN2Zy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuc3ZnKSB7XG5cdFx0dmFyIHdyYXBwZXIgPSB0aGlzLnN2Zy5wYXJlbnROb2RlO1xuXHRcdHRoaXMuc3ZnID0gY3JlYXRlU3ZnKCk7XG5cdFx0aWYgKHdyYXBwZXIpIHtcblx0XHRcdC8vIFRPRE8tUEVSOiBJZiB0aGUgd3JhcHBlciBpcyBub3QgcHJlc2VudCwgdGhlbiB0aGUgdW5kZXJseWluZyBkaXYgd2FzIHB1bGxlZCBvdXQgZnJvbSB1bmRlciB0aGlzIGluc3RhbmNlLiBJdCdzIHBvc3NpYmxlIHRoYXQgaXMgc3RpbGwgdXNlZnVsIChmb3IgY3JlYXRpbmcgdGhlIG11c2ljIG9mZiBwYWdlPylcblx0XHRcdHdyYXBwZXIuaW5uZXJIVE1MID0gXCJcIjtcblx0XHRcdHdyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5zdmcpO1xuXHRcdH1cblx0fVxufTtcblxuU3ZnLnByb3RvdHlwZS5zZXRUaXRsZSA9IGZ1bmN0aW9uKHRpdGxlKSB7XG5cdHZhciB0aXRsZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRpdGxlXCIpO1xuXHR2YXIgdGl0bGVOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGl0bGUpO1xuXHR0aXRsZUVsLmFwcGVuZENoaWxkKHRpdGxlTm9kZSk7XG5cdHRoaXMuc3ZnLmluc2VydEJlZm9yZSh0aXRsZUVsLCB0aGlzLnN2Zy5maXJzdENoaWxkKTtcbn07XG5cblN2Zy5wcm90b3R5cGUuc2V0UmVzcG9uc2l2ZVdpZHRoID0gZnVuY3Rpb24odywgaCkge1xuXHQvLyB0aGlzIHRlY2huaXF1ZSBpcyBmcm9tOiBodHRwOi8vdGhlbmV3Y29kZS5jb20vNzQ0L01ha2UtU1ZHLVJlc3BvbnNpdmUsIHRoeCB0byBodHRwczovL2dpdGh1Yi5jb20vaWFudHJlc21hblxuXHR0aGlzLnN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIFwiICsgdyArIFwiIFwiICsgaCk7XG5cdHRoaXMuc3ZnLnNldEF0dHJpYnV0ZShcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWluWU1pbiBtZWV0XCIpO1xuXHR0aGlzLnN2Zy5yZW1vdmVBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XG5cdHRoaXMuc3ZnLnJlbW92ZUF0dHJpYnV0ZShcIndpZHRoXCIpO1xuXHR0aGlzLnN2Zy5zdHlsZVsnZGlzcGxheSddID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0dGhpcy5zdmcuc3R5bGVbJ3Bvc2l0aW9uJ10gPSBcImFic29sdXRlXCI7XG5cdHRoaXMuc3ZnLnN0eWxlWyd0b3AnXSA9IFwiMFwiO1xuXHR0aGlzLnN2Zy5zdHlsZVsnbGVmdCddID0gXCIwXCI7XG5cblx0aWYgKHRoaXMuc3ZnLnBhcmVudE5vZGUpIHtcblx0XHR2YXIgY2xzID0gdGhpcy5zdmcucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcblx0XHRpZiAoIWNscylcblx0XHRcdHRoaXMuc3ZnLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJhYmNqcy1jb250YWluZXJcIik7XG5cdFx0ZWxzZSBpZiAoY2xzLmluZGV4T2YoXCJhYmNqcy1jb250YWluZXJcIikgPCAwKVxuXHRcdFx0dGhpcy5zdmcucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBjbHMgKyBcIiBhYmNqcy1jb250YWluZXJcIik7XG5cdFx0dGhpcy5zdmcucGFyZW50Tm9kZS5zdHlsZVsnZGlzcGxheSddID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHR0aGlzLnN2Zy5wYXJlbnROb2RlLnN0eWxlWydwb3NpdGlvbiddID0gXCJyZWxhdGl2ZVwiO1xuXHRcdHRoaXMuc3ZnLnBhcmVudE5vZGUuc3R5bGVbJ3dpZHRoJ10gPSBcIjEwMCVcIjtcblx0XHQvLyBQRVI6IEkgY2hhbmdlZCB0aGUgcGFkZGluZyBmcm9tIDEwMCUgdG8gdGhpcyB0aHJvdWdoIHRyaWFsIGFuZCBlcnJvci5cblx0XHQvLyBUaGUgZXhhbXBsZSB3YXMgdXNpbmcgYSBzcXVhcmUgaW1hZ2UsIGJ1dCB0aGlzIG11c2ljIG1pZ2h0IGJlIGVpdGhlciB3aWRlciBvciB0YWxsZXIuXG5cdFx0dmFyIHBhZGRpbmcgPSBoIC8gdyAqIDEwMDtcblx0XHR0aGlzLnN2Zy5wYXJlbnROb2RlLnN0eWxlWydwYWRkaW5nLWJvdHRvbSddID0gcGFkZGluZyArIFwiJVwiO1xuXHRcdHRoaXMuc3ZnLnBhcmVudE5vZGUuc3R5bGVbJ3ZlcnRpY2FsLWFsaWduJ10gPSBcIm1pZGRsZVwiO1xuXHRcdHRoaXMuc3ZnLnBhcmVudE5vZGUuc3R5bGVbJ292ZXJmbG93J10gPSBcImhpZGRlblwiO1xuXHR9XG59O1xuXG5TdmcucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbih3LCBoKSB7XG5cdHRoaXMuc3ZnLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB3KTtcblx0dGhpcy5zdmcuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBoKTtcblx0Ly8gVE9ETy1QRVI6IElzIHRoaXMgaGFjayBzdGlsbCBuZWVkZWQ/XG5cdC8vIENvcnJlY3QgZm9yIElFIHByb2JsZW0gaW4gY2FsY3VsYXRpbmcgaGVpZ2h0XG5cdC8vIHZhciBpc0lFID0gLypAY2Nfb24hQCovZmFsc2U7Ly9JRSBkZXRlY3RvclxuXHQvLyBpZiAoaXNJRSkge1xuXHQvLyBcdHRoaXMucGFwZXIuY2FudmFzLnBhcmVudE5vZGUuc3R5bGUud2lkdGggPSB3ICsgXCJweFwiO1xuXHQvLyBcdHRoaXMucGFwZXIuY2FudmFzLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0ID0gXCJcIiArIGggKyBcInB4XCI7XG5cdC8vIH0gZWxzZVxuXHQvLyBcdHRoaXMucGFwZXIuY2FudmFzLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDpcIiArIHcgKyBcInB4XCIpO1xufTtcblxuU3ZnLnByb3RvdHlwZS5zZXRTY2FsZSA9IGZ1bmN0aW9uKHNjYWxlKSB7XG5cdGlmIChzY2FsZSAhPT0gMSkge1xuXHRcdHRoaXMuc3ZnLnN0eWxlLnRyYW5zZm9ybSA9IFwic2NhbGUoXCIrc2NhbGUrXCIsXCIrc2NhbGUrXCIpXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy1tcy10cmFuc2Zvcm0nXSA9IFwic2NhbGUoXCIrc2NhbGUrXCIsXCIrc2NhbGUrXCIpXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy13ZWJraXQtdHJhbnNmb3JtJ10gPSBcInNjYWxlKFwiK3NjYWxlK1wiLFwiK3NjYWxlK1wiKVwiO1xuXHRcdHRoaXMuc3ZnLnN0eWxlWyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSBcIjAgMFwiO1xuXHRcdHRoaXMuc3ZnLnN0eWxlWyctbXMtdHJhbnNmb3JtLW9yaWdpbi14J10gPSBcIjBcIjtcblx0XHR0aGlzLnN2Zy5zdHlsZVsnLW1zLXRyYW5zZm9ybS1vcmlnaW4teSddID0gXCIwXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi14J10gPSBcIjBcIjtcblx0XHR0aGlzLnN2Zy5zdHlsZVsnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXknXSA9IFwiMFwiO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuc3ZnLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy1tcy10cmFuc2Zvcm0nXSA9IFwiXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy13ZWJraXQtdHJhbnNmb3JtJ10gPSBcIlwiO1xuXHR9XG59O1xuXG5TdmcucHJvdG90eXBlLnNldFBhcmVudFN0eWxlcyA9IGZ1bmN0aW9uKGF0dHIpIHtcblx0Ly8gVGhpcyBpcyBuZWVkZWQgdG8gZ2V0IHRoZSBzaXplIHJpZ2h0IHdoZW4gdGhlcmUgaXMgc2NhbGluZyBpbnZvbHZlZC5cblx0Zm9yICh2YXIga2V5IGluIGF0dHIpIHtcblx0XHRpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRpZiAodGhpcy5zdmcucGFyZW50Tm9kZSlcblx0XHRcdFx0dGhpcy5zdmcucGFyZW50Tm9kZS5zdHlsZVtrZXldID0gYXR0cltrZXldO1xuXHRcdH1cblx0fVxuXHQvLyBUaGlzIGlzIHRoZSBsYXN0IHRoaW5nIHRoYXQgZ2V0cyBjYWxsZWQsIHNvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IFNWRyBpZiBvbmUgd2FzIGNyZWF0ZWRcblx0aWYgKHRoaXMuZHVtbXlTdmcpIHtcblx0XHR2YXIgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcblx0XHRib2R5LnJlbW92ZUNoaWxkKHRoaXMuZHVtbXlTdmcpO1xuXHRcdHRoaXMuZHVtbXlTdmcgPSBudWxsO1xuXHR9XG5cbn07XG5cblN2Zy5wcm90b3R5cGUucmVjdCA9IGZ1bmN0aW9uKGF0dHIpIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInJlY3RcIik7XG5cdGZvciAodmFyIGtleSBpbiBhdHRyKSB7XG5cdFx0aWYgKGF0dHIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0dmFyIHRtcCA9IFwiXCIgKyBhdHRyW2tleV07XG5cdFx0XHRpZiAodG1wLmluZGV4T2YoXCJOYU5cIikgPj0gMClcblx0XHRcdFx0ZGVidWdnZXI7XG5cdFx0XHRlbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBrZXksIGF0dHJba2V5XSk7XG5cdFx0fVxuXHR9XG5cdHRoaXMuYXBwZW5kKGVsKTtcblx0cmV0dXJuIGVsO1xufTtcblxuU3ZnLnByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odGV4dCwgYXR0ciwgdGFyZ2V0KSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgJ3RleHQnKTtcblx0Zm9yICh2YXIga2V5IGluIGF0dHIpIHtcblx0XHRpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRlbC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyW2tleV0pO1xuXHRcdH1cblx0fVxuXHR2YXIgbGluZXMgPSAoXCJcIit0ZXh0KS5zcGxpdChcIlxcblwiKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCAndHNwYW4nKTtcblx0XHRsaW5lLnRleHRDb250ZW50ID0gbGluZXNbaV07XG5cdFx0bGluZS5zZXRBdHRyaWJ1dGUoXCJ4XCIsIGF0dHIueCA/IGF0dHIueCA6IDApO1xuXHRcdGlmIChpICE9PSAwKVxuXHRcdFx0bGluZS5zZXRBdHRyaWJ1dGUoXCJkeVwiLCBcIjEuMmVtXCIpO1xuXHRcdGVsLmFwcGVuZENoaWxkKGxpbmUpO1xuXHR9XG5cdGlmICh0YXJnZXQpXG5cdFx0dGFyZ2V0LmFwcGVuZENoaWxkKGVsKTtcblx0ZWxzZVxuXHRcdHRoaXMuYXBwZW5kKGVsKTtcblx0cmV0dXJuIGVsO1xufTtcblxuU3ZnLnByb3RvdHlwZS5ndWVzc1dpZHRoID0gZnVuY3Rpb24odGV4dCwgYXR0cikge1xuXHR2YXIgc3ZnID0gdGhpcy5jcmVhdGVEdW1teVN2ZygpO1xuXHR2YXIgZWwgPSB0aGlzLnRleHQodGV4dCwgYXR0ciwgc3ZnKTtcblx0dmFyIHNpemU7XG5cdHRyeSB7XG5cdFx0c2l6ZSAgPSBlbC5nZXRCQm94KCk7XG5cdFx0aWYgKGlzTmFOKHNpemUuaGVpZ2h0KSB8fCAhc2l6ZS5oZWlnaHQpIC8vIFRPRE8tUEVSOiBJIGRvbid0IHRoaW5rIHRoaXMgY2FuIGhhcHBlbiB1bmxlc3MgdGhlcmUgaXNuJ3QgYSBicm93c2VyIGF0IGFsbC5cblx0XHRcdHNpemUgPSB7IHdpZHRoOiBhdHRyWydmb250LXNpemUnXS8yLCBoZWlnaHQ6IGF0dHJbJ2ZvbnQtc2l6ZSddICsgMiB9OyAvLyBKdXN0IGEgd2lsZCBndWVzcy5cblx0XHRlbHNlXG5cdFx0XHRzaXplID0ge3dpZHRoOiBzaXplLndpZHRoLCBoZWlnaHQ6IHNpemUuaGVpZ2h0fTtcblx0fSBjYXRjaCAoZXgpIHtcblx0XHRzaXplID0geyB3aWR0aDogYXR0clsnZm9udC1zaXplJ10vMiwgaGVpZ2h0OiBhdHRyWydmb250LXNpemUnXSArIDIgfTsgLy8gSnVzdCBhIHdpbGQgZ3Vlc3MuXG5cdH1cblx0c3ZnLnJlbW92ZUNoaWxkKGVsKTtcblx0cmV0dXJuIHNpemU7XG59O1xuXG5TdmcucHJvdG90eXBlLmNyZWF0ZUR1bW15U3ZnID0gZnVuY3Rpb24oKSB7XG5cdGlmICghdGhpcy5kdW1teVN2Zykge1xuXHRcdHRoaXMuZHVtbXlTdmcgPSBjcmVhdGVTdmcoKTtcblx0XHR2YXIgc3R5bGVzID0gW1xuXHRcdFx0XCJkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1wiLFxuXHRcdFx0XCJoZWlnaHQ6IDFweDtcIixcblx0XHRcdFwid2lkdGg6IDFweDtcIixcblx0XHRcdFwicG9zaXRpb246IGFic29sdXRlO1wiXG5cdFx0XTtcblx0XHR0aGlzLmR1bW15U3ZnLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZXMuam9pbihcIlwiKSk7XG5cdFx0dmFyIGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG5cdFx0Ym9keS5hcHBlbmRDaGlsZCh0aGlzLmR1bW15U3ZnKTtcblx0fVxuXG5cdHJldHVybiB0aGlzLmR1bW15U3ZnO1xufTtcblxuU3ZnLnByb3RvdHlwZS5nZXRUZXh0U2l6ZSA9IGZ1bmN0aW9uKHRleHQsIGF0dHIsIGVsKSB7XG5cdGlmICh0eXBlb2YgdGV4dCA9PT0gJ251bWJlcicpXG5cdFx0dGV4dCA9ICcnK3RleHQ7XG5cdGlmICghdGV4dCB8fCB0ZXh0Lm1hdGNoKC9eXFxzKyQvKSlcblx0XHRyZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG5cdHZhciByZW1vdmVMYXRlciA9ICFlbDtcblx0aWYgKCFlbClcblx0XHRlbCA9IHRoaXMudGV4dCh0ZXh0LCBhdHRyKTtcblx0dmFyIHNpemU7XG5cdHRyeSB7XG5cdFx0c2l6ZSAgPSBlbC5nZXRCQm94KCk7XG5cdFx0aWYgKGlzTmFOKHNpemUuaGVpZ2h0KSB8fCAhc2l6ZS5oZWlnaHQpXG5cdFx0XHRzaXplID0gdGhpcy5ndWVzc1dpZHRoKHRleHQsIGF0dHIpO1xuXHRcdGVsc2Vcblx0XHRcdHNpemUgPSB7d2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHR9O1xuXHR9IGNhdGNoIChleCkge1xuXHRcdHNpemUgPSB0aGlzLmd1ZXNzV2lkdGgodGV4dCwgYXR0cik7XG5cdH1cblx0aWYgKHJlbW92ZUxhdGVyKSB7XG5cdFx0aWYgKHRoaXMuY3VycmVudEdyb3VwKVxuXHRcdFx0dGhpcy5jdXJyZW50R3JvdXAucmVtb3ZlQ2hpbGQoZWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuc3ZnLnJlbW92ZUNoaWxkKGVsKTtcblx0fVxuXHRyZXR1cm4gc2l6ZTtcbn07XG5cblN2Zy5wcm90b3R5cGUub3Blbkdyb3VwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyA/IG9wdGlvbnMgOiB7fTtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcImdcIik7XG5cdGlmIChvcHRpb25zLnByZXBlbmQpXG5cdFx0dGhpcy5zdmcuaW5zZXJ0QmVmb3JlKGVsLCB0aGlzLnN2Zy5maXJzdENoaWxkKTtcblx0ZWxzZVxuXHRcdHRoaXMuc3ZnLmFwcGVuZENoaWxkKGVsKTtcblx0dGhpcy5jdXJyZW50R3JvdXAgPSBlbDtcblx0cmV0dXJuIGVsO1xufTtcblxuU3ZnLnByb3RvdHlwZS5jbG9zZUdyb3VwID0gZnVuY3Rpb24oKSB7XG5cdHZhciBnID0gdGhpcy5jdXJyZW50R3JvdXA7XG5cdHRoaXMuY3VycmVudEdyb3VwID0gbnVsbDtcblx0cmV0dXJuIGc7XG59O1xuXG5TdmcucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbihhdHRyKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJwYXRoXCIpO1xuXHRmb3IgKHZhciBrZXkgaW4gYXR0cikge1xuXHRcdGlmIChhdHRyLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdGlmIChrZXkgPT09ICdwYXRoJylcblx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCBhdHRyLnBhdGgpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBrZXksIGF0dHJba2V5XSk7XG5cdFx0fVxuXHR9XG5cdHRoaXMuYXBwZW5kKGVsKTtcblx0cmV0dXJuIGVsO1xufTtcblxuU3ZnLnByb3RvdHlwZS5wYXRoVG9CYWNrID0gZnVuY3Rpb24oYXR0cikge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsIFwicGF0aFwiKTtcblx0Zm9yICh2YXIga2V5IGluIGF0dHIpIHtcblx0XHRpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRpZiAoa2V5ID09PSAncGF0aCcpXG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgYXR0ci5wYXRoKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlTlMobnVsbCwga2V5LCBhdHRyW2tleV0pO1xuXHRcdH1cblx0fVxuXHR0aGlzLnByZXBlbmQoZWwpO1xuXHRyZXR1cm4gZWw7XG59O1xuXG5TdmcucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGVsKSB7XG5cdGlmICh0aGlzLmN1cnJlbnRHcm91cClcblx0XHR0aGlzLmN1cnJlbnRHcm91cC5hcHBlbmRDaGlsZChlbCk7XG5cdGVsc2Vcblx0XHR0aGlzLnN2Zy5hcHBlbmRDaGlsZChlbCk7XG59O1xuXG5TdmcucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihlbCkge1xuXHQvLyBUaGUgZW50aXJlIGdyb3VwIGlzIHByZXBlbmRlZCwgc28gZG9uJ3QgcHJlcGVuZCB0aGUgaW5kaXZpZHVhbCBlbGVtZW50cy5cblx0aWYgKHRoaXMuY3VycmVudEdyb3VwKVxuXHRcdHRoaXMuY3VycmVudEdyb3VwLmFwcGVuZENoaWxkKGVsKTtcblx0ZWxzZVxuXHRcdHRoaXMuc3ZnLmluc2VydEJlZm9yZShlbCwgdGhpcy5zdmcuZmlyc3RDaGlsZCk7XG59O1xuXG5TdmcucHJvdG90eXBlLnNldEF0dHJpYnV0ZU9uRWxlbWVudCA9IGZ1bmN0aW9uKGVsLCBhdHRyKSB7XG5cdGZvciAodmFyIGtleSBpbiBhdHRyKSB7XG5cdFx0aWYgKGF0dHIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0ZWwuc2V0QXR0cmlidXRlTlMobnVsbCwga2V5LCBhdHRyW2tleV0pO1xuXHRcdH1cblx0fVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU3ZnKCkge1xuXHR2YXIgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInN2Z1wiKTtcblx0c3ZnLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIiwgXCJ4bWxuczp4bGlua1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIik7XG5cdHN2Zy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnaW1nJyk7ICAgIC8vIGZvciBhY2Nlc3NpYmlsaXR5XG5cdHJldHVybiBzdmc7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBTdmc7XG4iLCIvLyAgICBhYmNfcmVuZGVyZXIuanM6IEFQSSB0byByZW5kZXIgdG8gU1ZHL1JhcGhhZWwvd2hhdGV2ZXIgcmVuZGVyaW5nIGVuZ2luZVxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5cbi8qZ2xvYmFsIE1hdGgsIGNvbnNvbGUgKi9cblxudmFyIGdseXBocyA9IHJlcXVpcmUoJy4vYWJjX2dseXBocycpO1xudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuL2FiY19zcGFjaW5nJyk7XG52YXIgc3ByaW50ZiA9IHJlcXVpcmUoJy4vc3ByaW50ZicpO1xudmFyIFN2ZyA9IHJlcXVpcmUoJy4vc3ZnJyk7XG5cbi8qKlxuICogSW1wbGVtZW50cyB0aGUgQVBJIGZvciByZW5kZXJpbmcgQUJDSlMgQWJzdHJhY3QgUmVuZGVyaW5nIFN0cnVjdHVyZSB0byBhIGNhbnZhcy9wYXBlciAoZS5nLiBTVkcsIFJhcGhhZWwsIGV0YylcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXBlclxuICogQHBhcmFtIHtib29sfSBkb1JlZ3Jlc3Npb25cbiAqL1xudmFyIFJlbmRlcmVyID0gZnVuY3Rpb24ocGFwZXIsIGRvUmVncmVzc2lvbiwgc2hvdWxkQWRkQ2xhc3Nlcykge1xuICB0aGlzLnBhcGVyID0gbmV3IFN2ZyhwYXBlcik7XG4gIHRoaXMuY29udHJvbGxlciA9IG51bGw7IC8vVE9ETy1HRCBvbmx5IHVzZWQgd2hlbiBkcmF3aW5nIHRoZSBBQkNKUyBBUlMgdG8gY29ubmVjdCB0aGUgY29udHJvbGxlciB3aXRoIHRoZSBlbGVtZW50cyBmb3IgaGlnaGxpZ2h0aW5nXG5cblx0dGhpcy5zcGFjZSA9IDMqc3BhY2luZy5TUEFDRTtcbiAgdGhpcy5wYWRkaW5nID0ge307IC8vIHJlbmRlcmVyJ3MgcGFkZGluZyBpcyBtYW5hZ2VkIGJ5IHRoZSBjb250cm9sbGVyXG4gIHRoaXMuZG9SZWdyZXNzaW9uID0gZG9SZWdyZXNzaW9uO1xuICB0aGlzLnNob3VsZEFkZENsYXNzZXMgPSBzaG91bGRBZGRDbGFzc2VzO1xuICBpZiAodGhpcy5kb1JlZ3Jlc3Npb24pXG4gICAgdGhpcy5yZWdyZXNzaW9uTGluZXMgPSBbXTtcblx0dGhpcy5yZXNldCgpO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cblx0dGhpcy5wYXBlci5jbGVhcigpO1xuXHR0aGlzLnkgPSAwO1xuXHR0aGlzLmFiY3R1bmUgPSBudWxsO1xuXHR0aGlzLmxhc3RNID0gbnVsbDtcblx0dGhpcy5pbmdyb3VwID0gZmFsc2U7XG5cdHRoaXMucGF0aCA9IG51bGw7XG5cdHRoaXMuaXNQcmludCA9IGZhbHNlO1xuXHR0aGlzLmluaXRWZXJ0aWNhbFNwYWNlKCk7XG5cdGlmICh0aGlzLmRvUmVncmVzc2lvbilcblx0XHR0aGlzLnJlZ3Jlc3Npb25MaW5lcyA9IFtdO1xuXHQvLyBIQUNLLVBFUjogVGhlcmUgd2FzIGEgcHJvYmxlbSBpbiBSYXBoYWVsIHdoZXJlIGV2ZXJ5IHBhdGggc3RyaW5nIHRoYXQgd2FzIHNlbnQgdG8gaXQgd2FzIGNhY2hlZC5cblx0Ly8gVGhhdCB3YXMgY2F1c2luZyB0aGUgYnJvd3NlcidzIG1lbW9yeSB0byBzdGVhZGlseSBncm93IHVudGlsIHRoZSBicm93c2VyIHdlbnQgc2xvd2VyIGFuZCBzbG93ZXIgdW50aWxcblx0Ly8gaXQgY3Jhc2hlZC4gVGhlIGZpeCB0byB0aGF0IHdhcyBhIHBhdGNoIHRvIFJhcGhhZWwsIHNvIGl0IGlzIG9ubHkgcGF0Y2hlZCBvbiB0aGUgdmVyc2lvbnMgb2YgdGhpcyBsaWJyYXJ5IHRoYXRcblx0Ly8gYnVuZGxlIFJhcGhhZWwgd2l0aCBpdC4gQWxzbywgaWYgUmFwaGFlbCBnZXRzIGFuIHVwZGF0ZSwgdGhlbiB0aGF0IHBhdGNoIHdpbGwgYmUgbG9zdC4gT24gdmVyc2lvbiAyLjEuMiBvZiBSYXBoYWVsLFxuXHQvLyB0aGUgcGF0Y2ggaXMgb24gbGluZSAxNTQyIGFuZCAxNTQ1IGFuZCBpdCBpczpcblx0Ly8gICAgICAgICAgICAgcFtwc10uc2xlZXAgPSAxO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLm5ld1R1bmUgPSBmdW5jdGlvbihhYmNUdW5lKSB7XG5cdHRoaXMuYWJjdHVuZSA9IGFiY1R1bmU7IC8vIFRPRE8tUEVSOiB0aGlzIGlzIGp1c3QgdG8gZ2V0IHRoZSBmb250IGluZm8uXG5cdHRoaXMuc2V0VmVydGljYWxTcGFjZShhYmNUdW5lLmZvcm1hdHRpbmcpO1xuXHR0aGlzLm1lYXN1cmVOdW1iZXIgPSBudWxsO1xuXHR0aGlzLm5vdGVOdW1iZXIgPSBudWxsO1xuXHR0aGlzLnNldFByaW50TW9kZShhYmNUdW5lLm1lZGlhID09PSAncHJpbnQnKTtcblx0dGhpcy5zZXRQYWRkaW5nKGFiY1R1bmUpO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1TZXQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucGFwZXIub3Blbkdyb3VwKCk7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuY2xvc2VFbGVtU2V0ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnBhcGVyLmNsb3NlR3JvdXAoKTtcbn07XG5cbi8qKlxuICogU2V0IHdoZXRoZXIgd2UgYXJlIGZvcm1hdHRpbmcgdGhpcyBmb3IgdGhlIHNjcmVlbiwgb3IgYXMgYSBwcmV2aWV3IGZvciBjcmVhdGluZyBhIFBERiB2ZXJzaW9uLlxuICogQHBhcmFtIHtib29sfSBpc1ByaW50XG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5zZXRQcmludE1vZGUgPSBmdW5jdGlvbiAoaXNQcmludCkge1xuXHR0aGlzLmlzUHJpbnQgPSBpc1ByaW50O1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNpemUgb2YgdGhlIGNhbnZhcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtYXh3aWR0aFxuICogQHBhcmFtIHtvYmplY3R9IHNjYWxlXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5zZXRQYXBlclNpemUgPSBmdW5jdGlvbiAobWF4d2lkdGgsIHNjYWxlLCByZXNwb25zaXZlKSB7XG5cdHZhciB3ID0gKG1heHdpZHRoK3RoaXMucGFkZGluZy5yaWdodCkqc2NhbGU7XG5cdHZhciBoID0gKHRoaXMueSt0aGlzLnBhZGRpbmcuYm90dG9tKSpzY2FsZTtcblx0aWYgKHRoaXMuaXNQcmludClcblx0XHRoID0gTWF0aC5tYXgoaCwgMTA1Nik7IC8vIDExaW4geCA3MnB0L2luIHggMS4zM3B4L3B0XG5cdC8vIFRPRE8tUEVSOiBXZSBhcmUgbGV0dGluZyB0aGUgcGFnZSBnZXQgYXMgbG9uZyBhcyBpdCBuZWVkcyBub3csIGJ1dCBldmVudHVhbGx5IHRoYXQgc2hvdWxkIGdvIHRvIGEgc2Vjb25kIHBhZ2UuXG5cdGlmICh0aGlzLmRvUmVncmVzc2lvbilcblx0XHR0aGlzLnJlZ3Jlc3Npb25MaW5lcy5wdXNoKFwiUEFQRVIgU0laRTogKFwiK3crXCIsXCIraCtcIilcIik7XG5cblx0Ly8gZm9yIGFjY2Vzc2liaWxpdHlcblx0dmFyIHRleHQgPSBcIlNoZWV0IE11c2ljXCI7XG5cdGlmICh0aGlzLmFiY3R1bmUgJiYgdGhpcy5hYmN0dW5lLm1ldGFUZXh0ICYmIHRoaXMuYWJjdHVuZS5tZXRhVGV4dC50aXRsZSlcblx0XHR0ZXh0ICs9IFwiIGZvciBcXFwiXCIgKyB0aGlzLmFiY3R1bmUubWV0YVRleHQudGl0bGUgKyAnXCInO1xuXHR0aGlzLnBhcGVyLnNldFRpdGxlKHRleHQpO1xuXG5cdHZhciBwYXJlbnRTdHlsZXMgPSB7IG92ZXJmbG93OiBcImhpZGRlblwiIH07XG5cdGlmIChyZXNwb25zaXZlID09PSAncmVzaXplJykge1xuXHRcdHRoaXMucGFwZXIuc2V0UmVzcG9uc2l2ZVdpZHRoKHcsIGgpO1xuXHR9IGVsc2Uge1xuXHRcdHBhcmVudFN0eWxlcy53aWR0aCA9IFwiXCI7XG5cdFx0cGFyZW50U3R5bGVzLmhlaWdodCA9IGggKyBcInB4XCI7XG5cdFx0aWYgKHNjYWxlIDwgMSkge1xuXHRcdFx0cGFyZW50U3R5bGVzLndpZHRoID0gdyArIFwicHhcIjtcblx0XHRcdHRoaXMucGFwZXIuc2V0U2l6ZSh3IC8gc2NhbGUsIGggLyBzY2FsZSk7XG5cdFx0fSBlbHNlXG5cdFx0XHR0aGlzLnBhcGVyLnNldFNpemUodywgaCk7XG5cdH1cblx0dGhpcy5wYXBlci5zZXRTY2FsZShzY2FsZSk7XG5cdHRoaXMucGFwZXIuc2V0UGFyZW50U3R5bGVzKHBhcmVudFN0eWxlcyk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFkZGluZ1xuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtc1xuICovXG5SZW5kZXJlci5wcm90b3R5cGUuc2V0UGFkZGluZ092ZXJyaWRlID0gZnVuY3Rpb24ocGFyYW1zKSB7XG5cdHRoaXMucGFkZGluZ092ZXJyaWRlID0geyB0b3A6IHBhcmFtcy5wYWRkaW5ndG9wLCBib3R0b206IHBhcmFtcy5wYWRkaW5nYm90dG9tLFxuXHRcdHJpZ2h0OiBwYXJhbXMucGFkZGluZ3JpZ2h0LCBsZWZ0OiBwYXJhbXMucGFkZGluZ2xlZnQgfTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYWRkaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5zZXRQYWRkaW5nID0gZnVuY3Rpb24oYWJjdHVuZSkge1xuXHQvLyBJZiB0aGUgcGFkZGluZyBpcyBzZXQgaW4gdGhlIHR1bmUsIHRoZW4gdXNlIHRoYXQuXG5cdC8vIE90aGVyd2lzZSwgaWYgdGhlIHBhZGRpbmcgaXMgc2V0IGluIHRoZSBvdmVycmlkZSwgdXNlIHRoYXQuXG5cdC8vIE90aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0cyAodGhlcmUgYXJlIGEgZGlmZmVyZW50IHNldCBvZiBkZWZhdWx0cyBmb3Igc2NyZWVuIGFuZCBwcmludC4pXG5cdGZ1bmN0aW9uIHNldFBhZGRpbmdWYXJpYWJsZShzZWxmLCBwYWRkaW5nS2V5LCBmb3JtYXR0aW5nS2V5LCBwcmludERlZmF1bHQsIHNjcmVlbkRlZmF1bHQpIHtcblx0XHRpZiAoYWJjdHVuZS5mb3JtYXR0aW5nW2Zvcm1hdHRpbmdLZXldICE9PSB1bmRlZmluZWQpXG5cdFx0XHRzZWxmLnBhZGRpbmdbcGFkZGluZ0tleV0gPSBhYmN0dW5lLmZvcm1hdHRpbmdbZm9ybWF0dGluZ0tleV07XG5cdFx0ZWxzZSBpZiAoc2VsZi5wYWRkaW5nT3ZlcnJpZGVbcGFkZGluZ0tleV0gIT09IHVuZGVmaW5lZClcblx0XHRcdHNlbGYucGFkZGluZ1twYWRkaW5nS2V5XSA9IHNlbGYucGFkZGluZ092ZXJyaWRlW3BhZGRpbmdLZXldO1xuXHRcdGVsc2UgaWYgKHNlbGYuaXNQcmludClcblx0XHRcdHNlbGYucGFkZGluZ1twYWRkaW5nS2V5XSA9IHByaW50RGVmYXVsdDtcblx0XHRlbHNlXG5cdFx0XHRzZWxmLnBhZGRpbmdbcGFkZGluZ0tleV0gPSBzY3JlZW5EZWZhdWx0O1xuXHR9XG5cdC8vIDFjbSB4IDAuMzkzNzAxaW4vY20geCA3MnB0L2luIHggMS4zM3B4L3B0ID0gMzhweFxuXHQvLyAxLjhjbSB4IDAuMzkzNzAxaW4vY20geCA3MnB0L2luIHggMS4zM3B4L3B0ID0gNjhweFxuXHRzZXRQYWRkaW5nVmFyaWFibGUodGhpcywgJ3RvcCcsICd0b3BtYXJnaW4nLCAzOCwgMTUpO1xuXHRzZXRQYWRkaW5nVmFyaWFibGUodGhpcywgJ2JvdHRvbScsICdib3RtYXJnaW4nLCAzOCwgMTUpO1xuXHRzZXRQYWRkaW5nVmFyaWFibGUodGhpcywgJ2xlZnQnLCAnbGVmdG1hcmdpbicsIDY4LCAxNSk7XG5cdHNldFBhZGRpbmdWYXJpYWJsZSh0aGlzLCAncmlnaHQnLCAncmlnaHRtYXJnaW4nLCA2OCwgMTUpO1xufTtcblxuLyoqXG4gKiBTb21lIG9mIHRoZSBpdGVtcyBvbiB0aGUgcGFnZSBhcmUgbm90IHNjYWxlZCwgc28gYWRqdXN0IHRoZW0gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiBzY2FsaW5nIHRvIGNhbmNlbCBvdXQgdGhlIHNjYWxpbmcuXG4gKiBAcGFyYW0ge2Zsb2F0fSBzY2FsZVxuICovXG5SZW5kZXJlci5wcm90b3R5cGUuYWRqdXN0Tm9uU2NhbGVkSXRlbXMgPSBmdW5jdGlvbiAoc2NhbGUpIHtcblx0dGhpcy5wYWRkaW5nLnRvcCAvPSBzY2FsZTtcblx0dGhpcy5wYWRkaW5nLmJvdHRvbSAvPSBzY2FsZTtcblx0dGhpcy5wYWRkaW5nLmxlZnQgLz0gc2NhbGU7XG5cdHRoaXMucGFkZGluZy5yaWdodCAvPSBzY2FsZTtcblx0dGhpcy5hYmN0dW5lLmZvcm1hdHRpbmcuaGVhZGVyZm9udC5zaXplIC89IHNjYWxlO1xuXHR0aGlzLmFiY3R1bmUuZm9ybWF0dGluZy5mb290ZXJmb250LnNpemUgLz0gc2NhbGU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgdGhlIHZhbHVlcyBmb3IgYWxsIHRoZSBjb25maWd1cmFibGUgdmVydGljYWwgc3BhY2Ugb3B0aW9ucy5cbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLmluaXRWZXJ0aWNhbFNwYWNlID0gZnVuY3Rpb24oKSB7XG5cdC8vIGNvbnZlcnNpb246IDM3Ljc5NTMgPSBjb252ZXJzaW9uIGZhY3RvciBmb3IgY20gdG8gcHguXG5cdC8vIEFsbCBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgaW4gcHguXG5cdHRoaXMuc3BhY2luZyA9IHtcblx0XHRjb21wb3NlcjogNy41NiwgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgY29tcG9zZXIuXG5cdFx0Z3JhY2VCZWZvcmU6IDguNjcsIC8vIERlZmluZSB0aGUgc3BhY2UgYmVmb3JlLCBpbnNpZGUgYW5kIGFmdGVyIHRoZSBncmFjZSBub3Rlcy5cblx0XHRncmFjZUluc2lkZTogMTAuNjcsXG5cdFx0Z3JhY2VBZnRlcjogMTYsXG5cdFx0aW5mbzogMCwgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgaW5mb2xpbmUuXG5cdFx0bGluZVNraXBGYWN0b3I6IDEuMSwgLy8gU2V0IHRoZSBmYWN0b3IgZm9yIHNwYWNpbmcgYmV0d2VlbiBsaW5lcyBvZiB0ZXh0LiAobXVsdGlwbHkgdGhpcyBieSB0aGUgZm9udCBzaXplKVxuXHRcdG11c2ljOiA3LjU2LCAvLyBTZXQgdGhlIHZlcnRpY2FsIHNwYWNlIGFib3ZlIHRoZSBmaXJzdCBzdGFmZi5cblx0XHRwYXJhZ3JhcGhTa2lwRmFjdG9yOiAwLjQsIC8vIFNldCB0aGUgZmFjdG9yIGZvciBzcGFjaW5nIGJldHdlZW4gdGV4dCBwYXJhZ3JhcGhzLiAobXVsdGlwbHkgdGhpcyBieSB0aGUgZm9udCBzaXplKVxuXHRcdHBhcnRzOiAxMS4zMywgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSBhIG5ldyBwYXJ0LlxuXHRcdHNsdXJIZWlnaHQ6IDEuMCwgLy8gU2V0IHRoZSBzbHVyIGhlaWdodCBmYWN0b3IuXG5cdFx0c3RhZmZTZXBhcmF0aW9uOiA2MS4zMywgLy8gRG8gbm90IHB1dCBhIHN0YWZmIHN5c3RlbSBjbG9zZXIgdGhhbiA8dW5pdD4gZnJvbSB0aGUgcHJldmlvdXMgc3lzdGVtLlxuXHRcdHN0ZW1IZWlnaHQ6IDI2LjY3KzEwLCAvLyBTZXQgdGhlIHN0ZW0gaGVpZ2h0LlxuXHRcdHN1YnRpdGxlOiAzLjc4LCAvLyBTZXQgdGhlIHZlcnRpY2FsIHNwYWNlIGFib3ZlIHRoZSBzdWJ0aXRsZS5cblx0XHRzeXN0ZW1TdGFmZlNlcGFyYXRpb246IDQ4LCAvLyBEbyBub3QgcGxhY2UgdGhlIHN0YXZlcyBjbG9zZXIgdGhhbiA8dW5pdD4gaW5zaWRlIGEgc3lzdGVtLiAqIFRoaXMgdmFsdWVzIGFwcGxpZXMgdG8gYWxsIHN0YXZlcyB3aGVuIGluIHRoZSB0dW5lIGhlYWRlci4gT3RoZXJ3aXNlLCBpdCBhcHBsaWVzIHRvIHRoZSBuZXh0IHN0YWZmXG5cdFx0dGV4dDogMTguOSwgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgaGlzdG9yeS5cblx0XHR0aXRsZTogNy41NiwgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgdGl0bGUuXG5cdFx0dG9wOiAzMC4yNCwgLy9TZXQgdGhlIHZlcnRpY2FsIHNwYWNlIGFib3ZlIHRoZSB0dW5lcyBhbmQgb24gdGhlIHRvcCBvZiB0aGUgY29udGludWF0aW9uIHBhZ2VzLlxuXHRcdHZvY2FsOiAzMC42NywgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgbHlyaWNzIHVuZGVyIHRoZSBzdGF2ZXMuXG5cdFx0d29yZHM6IDAgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgbHlyaWNzIGF0IHRoZSBlbmQgb2YgdGhlIHR1bmUuXG5cdH07XG5cdC8qXG5cdFRPRE8tUEVSOiBIYW5kbGUgdGhlIHgtY29vcmRpbmF0ZSBzcGFjaW5nIGl0ZW1zLCB0b28uXG5tYXhzaHJpbmsgPGZsb2F0PkRlZmF1bHQ6IDAuNjVcblNldCBob3cgbXVjaCB0byBjb21wcmVzcyBob3Jpem9udGFsbHkgd2hlbiBtdXNpYyBsaW5lIGJyZWFrc1xuYXJlIGF1dG9tYXRpYy5cbjxmbG9hdD4gbXVzdCBiZSBiZXR3ZWVuIDAgKG5hdHVyYWwgc3BhY2luZylcbmFuZCAxIChtYXggc2hyaW5raW5nKS5cblxuLy8gVGhpcyBuZXh0IHZhbHVlIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgbmF0dXJhbCBzcGFjaW5nIG9mXG4vLyB0aGUgbm90ZXMuIFRoZSBiYXNlIHNwYWNpbmcgb2YgdGhlIGNyb3RjaGV0IGlzIGFsd2F5c1xuLy8gNDAgcHRzLiBXaGVuIHRoZSBkdXJhdGlvbiBvZiBhIG5vdGUgdHlwZSBpcyB0d2ljZSB0aGVcbi8vIGR1cmF0aW9uIG9mIGFuIG90aGVyIG5vdGUgdHlwZSwgaXRzIHNwYWNpbmcgaXMgbXVsdGlwbGllZFxuLy8gYnkgdGhpcyBmYWN0b3IuXG4vLyBUaGUgZGVmYXVsdCB2YWx1ZSBjYXVzZXMgdGhlIG5vdGUgc3BhY2luZyB0byBiZSBtdWx0aXBsaWVkXG4vLyBieSAyIHdoZW4gaXRzIGR1cmF0aW9uIGlzIG11bHRpcGxpZWQgYnkgNCwgaS5lLiB0aGVcbi8vIHNwYWNlIG9mIHRoZSBzZW1pYnJldmUgaXMgODAgcHRzIGFuZCB0aGUgc3BhY2Ugb2YgdGhlXG4vLyBzZW1pcXVhdmVyIGlzIDIwIHB0cy5cbi8vIFNldHRpbmcgdGhpcyB2YWx1ZSB0byAxIHNldHMgYWxsIG5vdGUgc3BhY2luZyB0byA0MCBwdHMuXG5ub3RlU3BhY2luZ0ZhY3RvcjogMS40MTQsIC8vIFNldCB0aGUgbm90ZSBzcGFjaW5nIGZhY3RvciB0byA8ZmxvYXQ+IChyYW5nZSAxLi4yKS5cblxuc2NhbGUgPGZsb2F0PiBEZWZhdWx0OiAwLjc1IFNldCB0aGUgcGFnZSBzY2FsZSBmYWN0b3IuIE5vdGUgdGhhdCB0aGUgaGVhZGVyIGFuZCBmb290ZXIgYXJlIG5vdCBzY2FsZWQuXG5cbnN0cmV0Y2hsYXN0IDxmbG9hdD5EZWZhdWx0OiAwLjhcblN0cmV0Y2ggdGhlIGxhc3QgbXVzaWMgbGluZSBvZiBhIHR1bmUgd2hlbiBpdCBleGNlZWRzXG50aGUgPGZsb2F0PiBmcmFjdGlvbiBvZiB0aGUgcGFnZSB3aWR0aC5cbjxmbG9hdD4gcmFuZ2UgaXMgMC4wIHRvIDEuMC5cblx0ICovXG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuc2V0VmVydGljYWxTcGFjZSA9IGZ1bmN0aW9uKGZvcm1hdHRpbmcpIHtcblx0Ly8gY29udmVyc2lvbiBmcm9tIHB0cyB0byBweCA0LzNcblx0aWYgKGZvcm1hdHRpbmcuc3RhZmZzZXAgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnNwYWNpbmcuc3RhZmZTZXBhcmF0aW9uID0gZm9ybWF0dGluZy5zdGFmZnNlcCAqNC8zO1xuXHRpZiAoZm9ybWF0dGluZy5jb21wb3NlcnNwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLmNvbXBvc2VyID0gZm9ybWF0dGluZy5jb21wb3NlcnNwYWNlICo0LzM7XG5cdGlmIChmb3JtYXR0aW5nLnBhcnRzc3BhY2UgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnNwYWNpbmcucGFydHMgPSBmb3JtYXR0aW5nLnBhcnRzc3BhY2UgKjQvMztcblx0aWYgKGZvcm1hdHRpbmcudGV4dHNwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLnRleHQgPSBmb3JtYXR0aW5nLnRleHRzcGFjZSAqNC8zO1xuXHRpZiAoZm9ybWF0dGluZy5tdXNpY3NwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLm11c2ljID0gZm9ybWF0dGluZy5tdXNpY3NwYWNlICo0LzM7XG5cdGlmIChmb3JtYXR0aW5nLnRpdGxlc3BhY2UgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnNwYWNpbmcudGl0bGUgPSBmb3JtYXR0aW5nLnRpdGxlc3BhY2UgKjQvMztcblx0aWYgKGZvcm1hdHRpbmcuc3lzc3RhZmZzZXAgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnNwYWNpbmcuc3lzdGVtU3RhZmZTZXBhcmF0aW9uID0gZm9ybWF0dGluZy5zeXNzdGFmZnNlcCAqNC8zO1xuXHRpZiAoZm9ybWF0dGluZy5zdWJ0aXRsZXNwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLnN1YnRpdGxlID0gZm9ybWF0dGluZy5zdWJ0aXRsZXNwYWNlICo0LzM7XG5cdGlmIChmb3JtYXR0aW5nLnRvcHNwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLnRvcCA9IGZvcm1hdHRpbmcudG9wc3BhY2UgKjQvMztcblx0aWYgKGZvcm1hdHRpbmcudm9jYWxzcGFjZSAhPT0gdW5kZWZpbmVkKVxuXHRcdHRoaXMuc3BhY2luZy52b2NhbCA9IGZvcm1hdHRpbmcudm9jYWxzcGFjZSAqNC8zO1xuXHRpZiAoZm9ybWF0dGluZy53b3Jkc3NwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLndvcmRzID0gZm9ybWF0dGluZy53b3Jkc3NwYWNlICo0LzM7XG59O1xuXG4vKipcbiAqIExlYXZlIHNwYWNlIGF0IHRoZSB0b3Agb2YgdGhlIHBhcGVyXG4gKiBAcGFyYW0ge29iamVjdH0gYWJjdHVuZVxuICovXG5SZW5kZXJlci5wcm90b3R5cGUudG9wTWFyZ2luID0gZnVuY3Rpb24oYWJjdHVuZSkge1xuXHRcdHRoaXMubW92ZVkodGhpcy5wYWRkaW5nLnRvcCk7XG59O1xuXG4vKipcbiAqIExlYXZlIHNwYWNlIGJlZm9yZSBwcmludGluZyB0aGUgbXVzaWNcbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLmFkZE11c2ljUGFkZGluZyA9IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubW92ZVkodGhpcy5zcGFjaW5nLm11c2ljKTtcbn07XG5cbi8qKlxuICogTGVhdmUgc3BhY2UgYmVmb3JlIHByaW50aW5nIGEgc3RhZmYgc3lzdGVtXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5hZGRTdGFmZlBhZGRpbmcgPSBmdW5jdGlvbihsYXN0U3RhZmZHcm91cCwgdGhpc1N0YWZmR3JvdXApIHtcblx0dmFyIGxhc3RTdGFmZiA9IGxhc3RTdGFmZkdyb3VwLnN0YWZmc1tsYXN0U3RhZmZHcm91cC5zdGFmZnMubGVuZ3RoLTFdO1xuXHR2YXIgbGFzdEJvdHRvbUxpbmUgPSAtKGxhc3RTdGFmZi5ib3R0b20gLSAyKTsgLy8gVGhlIDIgaXMgYmVjYXVzZSB0aGUgc2NhbGUgZ29lcyB0byAyIGJlbG93IHRoZSBsYXN0IGxpbmUuXG5cdHZhciBuZXh0VG9wTGluZSA9IHRoaXNTdGFmZkdyb3VwLnN0YWZmc1swXS50b3AgLSAxMDsgLy8gQmVjYXVzZSAxMCByZXByZXNlbnRzIHRoZSB0b3AgbGluZS5cblx0dmFyIG5hdHVyYWxTZXBhcmF0aW9uID0gbmV4dFRvcExpbmUgKyBsYXN0Qm90dG9tTGluZTsgLy8gVGhpcyBpcyBob3cgZmFyIGFwYXJ0IHRoZXknZCBiZSB3aXRob3V0IGV4dHJhIHNwYWNpbmdcblx0dmFyIHNlcGFyYXRpb25JblBpeGVscyA9IG5hdHVyYWxTZXBhcmF0aW9uICogc3BhY2luZy5TVEVQO1xuXHRpZiAoc2VwYXJhdGlvbkluUGl4ZWxzIDwgdGhpcy5zcGFjaW5nLnN0YWZmU2VwYXJhdGlvbilcblx0XHR0aGlzLm1vdmVZKHRoaXMuc3BhY2luZy5zdGFmZlNlcGFyYXRpb24tc2VwYXJhdGlvbkluUGl4ZWxzKTtcbn07XG5cbi8qKlxuICogVGV4dCB0aGF0IGdvZXMgYWJvdmUgdGhlIHNjb3JlXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBhYmN0dW5lXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5lbmdyYXZlVG9wVGV4dCA9IGZ1bmN0aW9uKHdpZHRoLCBhYmN0dW5lKSB7XG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0LmhlYWRlciAmJiB0aGlzLmlzUHJpbnQpIHtcblx0XHQvLyBOb3RlOiB3aGV0aGVyIHRoZXJlIGlzIGEgaGVhZGVyIG9yIG5vdCBkb2Vzbid0IGNoYW5nZSBhbnkgb3RoZXIgcG9zaXRpb25pbmcsIHNvIHRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIFktY29vcmRpbmF0ZS5cblx0XHQvLyBUaGlzIHRleHQgZ29lcyBhYm92ZSB0aGUgbWFyZ2luLCBzbyB3ZSdsbCB0ZW1wb3JhcmlseSBtb3ZlIHVwLlxuXHRcdHZhciBoZWFkZXJUZXh0SGVpZ2h0ID0gdGhpcy5nZXRUZXh0U2l6ZShcIlhYWFhcIiwgXCJoZWFkZXJmb250XCIsICdhYmNqcy1oZWFkZXIgYWJjanMtbWV0YS10b3AnKS5oZWlnaHQ7XG5cdFx0dGhpcy55IC09aGVhZGVyVGV4dEhlaWdodDtcblx0XHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCwgYWJjdHVuZS5tZXRhVGV4dC5oZWFkZXIubGVmdCwgJ2hlYWRlcmZvbnQnLCAnaGVhZGVyIG1ldGEtdG9wJywgMCwgbnVsbCwgJ3N0YXJ0Jyk7XG5cdFx0dGhpcy5vdXRwdXRUZXh0SWYodGhpcy5wYWRkaW5nLmxlZnQgKyB3aWR0aCAvIDIsIGFiY3R1bmUubWV0YVRleHQuaGVhZGVyLmNlbnRlciwgJ2hlYWRlcmZvbnQnLCAnaGVhZGVyIG1ldGEtdG9wJywgMCwgbnVsbCwgJ21pZGRsZScpO1xuXHRcdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0ICsgd2lkdGgsIGFiY3R1bmUubWV0YVRleHQuaGVhZGVyLnJpZ2h0LCAnaGVhZGVyZm9udCcsICdoZWFkZXIgbWV0YS10b3AnLCAwLCBudWxsLCAnZW5kJyk7XG5cdFx0dGhpcy55ICs9IGhlYWRlclRleHRIZWlnaHQ7XG5cdH1cblx0aWYgKHRoaXMuaXNQcmludClcblx0XHR0aGlzLm1vdmVZKHRoaXMuc3BhY2luZy50b3ApO1xuXHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoIC8gMiwgYWJjdHVuZS5tZXRhVGV4dC50aXRsZSwgJ3RpdGxlZm9udCcsICd0aXRsZSBtZXRhLXRvcCcsIHRoaXMuc3BhY2luZy50aXRsZSwgMCwgJ21pZGRsZScpO1xuXHRpZiAoYWJjdHVuZS5saW5lc1swXSlcblx0XHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoIC8gMiwgYWJjdHVuZS5saW5lc1swXS5zdWJ0aXRsZSwgJ3N1YnRpdGxlZm9udCcsICd0ZXh0IG1ldGEtdG9wJywgdGhpcy5zcGFjaW5nLnN1YnRpdGxlLCAwLCAnbWlkZGxlJyk7XG5cblx0aWYgKGFiY3R1bmUubWV0YVRleHQucmh5dGhtIHx8IGFiY3R1bmUubWV0YVRleHQub3JpZ2luIHx8IGFiY3R1bmUubWV0YVRleHQuY29tcG9zZXIpIHtcblx0XHR0aGlzLm1vdmVZKHRoaXMuc3BhY2luZy5jb21wb3Nlcik7XG5cdFx0dmFyIHJTcGFjZSA9IHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0LCBhYmN0dW5lLm1ldGFUZXh0LnJoeXRobSwgJ2luZm9mb250JywgJ21ldGEtdG9wJywgMCwgbnVsbCwgXCJzdGFydFwiKTtcblxuXHRcdHZhciBjb21wb3NlckxpbmUgPSBcIlwiO1xuXHRcdGlmIChhYmN0dW5lLm1ldGFUZXh0LmNvbXBvc2VyKSBjb21wb3NlckxpbmUgKz0gYWJjdHVuZS5tZXRhVGV4dC5jb21wb3Nlcjtcblx0XHRpZiAoYWJjdHVuZS5tZXRhVGV4dC5vcmlnaW4pIGNvbXBvc2VyTGluZSArPSAnICgnICsgYWJjdHVuZS5tZXRhVGV4dC5vcmlnaW4gKyAnKSc7XG5cdFx0aWYgKGNvbXBvc2VyTGluZS5sZW5ndGggPiAwKSB7XG5cdFx0XHR2YXIgc3BhY2UgPSB0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoLCBjb21wb3NlckxpbmUsICdjb21wb3NlcmZvbnQnLCAnbWV0YS10b3AnLCAwLCBudWxsLCBcImVuZFwiKTtcblx0XHRcdHRoaXMubW92ZVkoc3BhY2VbMV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1vdmVZKHJTcGFjZVsxXSk7XG5cdFx0fVxuXHRcdC8vIFRPRE8tUEVSOiBUaGUgZm9sbG93aW5nIGlzIGEgaGFjayB0byBtYWtlIHRoZSBlbGVtZW50cyBsaW5lIHVwIHdpdGggYWJjbTJwcy4gRG9uJ3Qga25vdyB3aGVyZSB0aGUgZXh0cmEgc3BhY2UgaXMgY29taW5nIGZyb20uXG5cdFx0dGhpcy5tb3ZlWSgtNik7XG5cdC8vfSBlbHNlIGlmICh0aGlzLmlzUHJpbnQpIHtcblx0Ly9cdC8vIGFiY20ycHMgYWRkcyB0aGlzIHNwYWNlIHdoZXRoZXIgdGhlcmUgaXMgYW55dGhpbmcgdG8gd3JpdGUgb3Igbm90LlxuXHQvL1x0dGhpcy5tb3ZlWSh0aGlzLnNwYWNpbmcuY29tcG9zZXIpO1xuXHQvL1x0dmFyIHNwYWNlMiA9IHRoaXMuZ2V0VGV4dFNpemUoXCJNXCIsICdjb21wb3NlcmZvbnQnLCAnbWV0YS10b3AnKTtcblx0Ly9cdHRoaXMubW92ZVkoc3BhY2UyLmhlaWdodCk7XG5cdH1cblxuXHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoLCBhYmN0dW5lLm1ldGFUZXh0LmF1dGhvciwgJ2NvbXBvc2VyZm9udCcsICdtZXRhLXRvcCcsIDAsIDAsIFwiZW5kXCIpO1xuXHQvL3RoaXMuc2tpcFNwYWNlWSgpO1xuXG5cdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0LCBhYmN0dW5lLm1ldGFUZXh0LnBhcnRPcmRlciwgJ3BhcnRzZm9udCcsICdtZXRhLWJvdHRvbScsIDAsIDAsIFwic3RhcnRcIik7XG59O1xuXG4vKipcbiAqIFRleHQgdGhhdCBnb2VzIGJlbG93IHRoZSBzY29yZVxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gKiBAcGFyYW0ge29iamVjdH0gYWJjdHVuZVxuICovXG5SZW5kZXJlci5wcm90b3R5cGUuZW5ncmF2ZUV4dHJhVGV4dCA9IGZ1bmN0aW9uKHdpZHRoLCBhYmN0dW5lKSB7XG5cdHRoaXMubGluZU51bWJlciA9IG51bGw7XG5cdHRoaXMubWVhc3VyZU51bWJlciA9IG51bGw7XG5cdHRoaXMubm90ZU51bWJlciA9IG51bGw7XG5cdHRoaXMudm9pY2VOdW1iZXIgPSBudWxsO1xuXG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzKSB7XG5cdFx0dmFyIGhhc2ggPSB0aGlzLmdldEZvbnRBbmRBdHRyKFwid29yZHNmb250XCIsICdtZXRhLWJvdHRvbScpO1xuXHRcdHZhciBzcGFjZSA9IHRoaXMuZ2V0VGV4dFNpemUoXCJpXCIsICd3b3Jkc2ZvbnQnLCAnbWV0YS1ib3R0b20nKTtcblxuXHRcdGlmIChhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzLmxlbmd0aCA+IDApXG5cdFx0XHR0aGlzLm1vdmVZKHRoaXMuc3BhY2luZy53b3JkcywgMSk7XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpZiAoYWJjdHVuZS5tZXRhVGV4dC51bmFsaWduZWRXb3Jkc1tqXSA9PT0gJycpXG5cdFx0XHRcdHRoaXMubW92ZVkoaGFzaC5mb250LnNpemUsIDEpO1xuXHRcdFx0ZWxzZSBpZiAodHlwZW9mIGFiY3R1bmUubWV0YVRleHQudW5hbGlnbmVkV29yZHNbal0gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0ICsgc3BhY2luZy5JTkRFTlQsIGFiY3R1bmUubWV0YVRleHQudW5hbGlnbmVkV29yZHNbal0sICd3b3Jkc2ZvbnQnLCAnbWV0YS1ib3R0b20nLCAwLCAwLCBcInN0YXJ0XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIGxhcmdlc3RZID0gMDtcblx0XHRcdFx0dmFyIG9mZnNldFggPSAwO1xuXHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGFiY3R1bmUubWV0YVRleHQudW5hbGlnbmVkV29yZHNbal0ubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHR2YXIgdGhpc1dvcmQgPSBhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzW2pdW2tdO1xuXHRcdFx0XHRcdHZhciB0eXBlID0gKHRoaXNXb3JkLmZvbnQpID8gdGhpc1dvcmQuZm9udCA6IFwid29yZHNmb250XCI7XG5cdFx0XHRcdFx0dmFyIGVsID0gdGhpcy5yZW5kZXJUZXh0KHRoaXMucGFkZGluZy5sZWZ0ICsgc3BhY2luZy5JTkRFTlQgKyBvZmZzZXRYLCB0aGlzLnksIHRoaXNXb3JkLnRleHQsIHR5cGUsICdtZXRhLWJvdHRvbScsIGZhbHNlKTtcblx0XHRcdFx0XHR2YXIgc2l6ZSA9IHRoaXMuZ2V0VGV4dFNpemUodGhpc1dvcmQudGV4dCwgdHlwZSwgJ21ldGEtYm90dG9tJyk7XG5cdFx0XHRcdFx0bGFyZ2VzdFkgPSBNYXRoLm1heChsYXJnZXN0WSwgc2l6ZS5oZWlnaHQpO1xuXHRcdFx0XHRcdG9mZnNldFggKz0gc2l6ZS53aWR0aDtcblx0XHRcdFx0XHQvLyBJZiB0aGUgcGhyYXNlIGVuZHMgaW4gYSBzcGFjZSwgdGhlbiB0aGF0IGlzIG5vdCBjb3VudGVkIGluIHRoZSB3aWR0aCwgc28gd2UgbmVlZCB0byBhZGQgdGhhdCBpbiBvdXJzZWx2ZXMuXG5cdFx0XHRcdFx0aWYgKHRoaXNXb3JkLnRleHRbdGhpc1dvcmQudGV4dC5sZW5ndGgtMV0gPT09ICcgJykge1xuXHRcdFx0XHRcdFx0b2Zmc2V0WCArPSBzcGFjZS53aWR0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5tb3ZlWShsYXJnZXN0WSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzLmxlbmd0aCA+IDApXG5cdFx0XHR0aGlzLm1vdmVZKGhhc2guZm9udC5zaXplLCAyKTtcblx0fVxuXG5cdHZhciBleHRyYVRleHQgPSBcIlwiO1xuXHRpZiAoYWJjdHVuZS5tZXRhVGV4dC5ib29rKSBleHRyYVRleHQgKz0gXCJCb29rOiBcIiArIGFiY3R1bmUubWV0YVRleHQuYm9vayArIFwiXFxuXCI7XG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0LnNvdXJjZSkgZXh0cmFUZXh0ICs9IFwiU291cmNlOiBcIiArIGFiY3R1bmUubWV0YVRleHQuc291cmNlICsgXCJcXG5cIjtcblx0aWYgKGFiY3R1bmUubWV0YVRleHQuZGlzY29ncmFwaHkpIGV4dHJhVGV4dCArPSBcIkRpc2NvZ3JhcGh5OiBcIiArIGFiY3R1bmUubWV0YVRleHQuZGlzY29ncmFwaHkgKyBcIlxcblwiO1xuXHRpZiAoYWJjdHVuZS5tZXRhVGV4dC5ub3RlcykgZXh0cmFUZXh0ICs9IFwiTm90ZXM6IFwiICsgYWJjdHVuZS5tZXRhVGV4dC5ub3RlcyArIFwiXFxuXCI7XG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0LnRyYW5zY3JpcHRpb24pIGV4dHJhVGV4dCArPSBcIlRyYW5zY3JpcHRpb246IFwiICsgYWJjdHVuZS5tZXRhVGV4dC50cmFuc2NyaXB0aW9uICsgXCJcXG5cIjtcblx0aWYgKGFiY3R1bmUubWV0YVRleHQuaGlzdG9yeSkgZXh0cmFUZXh0ICs9IFwiSGlzdG9yeTogXCIgKyBhYmN0dW5lLm1ldGFUZXh0Lmhpc3RvcnkgKyBcIlxcblwiO1xuXHRpZiAoYWJjdHVuZS5tZXRhVGV4dFsnYWJjLWNvcHlyaWdodCddKSBleHRyYVRleHQgKz0gXCJDb3B5cmlnaHQ6IFwiICsgYWJjdHVuZS5tZXRhVGV4dFsnYWJjLWNvcHlyaWdodCddICsgXCJcXG5cIjtcblx0aWYgKGFiY3R1bmUubWV0YVRleHRbJ2FiYy1jcmVhdG9yJ10pIGV4dHJhVGV4dCArPSBcIkNyZWF0b3I6IFwiICsgYWJjdHVuZS5tZXRhVGV4dFsnYWJjLWNyZWF0b3InXSArIFwiXFxuXCI7XG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0WydhYmMtZWRpdGVkLWJ5J10pIGV4dHJhVGV4dCArPSBcIkVkaXRlZCBCeTogXCIgKyBhYmN0dW5lLm1ldGFUZXh0WydhYmMtZWRpdGVkLWJ5J10gKyBcIlxcblwiO1xuXHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCwgZXh0cmFUZXh0LCAnaGlzdG9yeWZvbnQnLCAnbWV0YS1ib3R0b20nLCB0aGlzLnNwYWNpbmcuaW5mbywgMCwgXCJzdGFydFwiKTtcblxuXHRpZiAoYWJjdHVuZS5tZXRhVGV4dC5mb290ZXIgJiYgdGhpcy5pc1ByaW50KSB7XG5cdFx0Ly8gTm90ZTogd2hldGhlciB0aGVyZSBpcyBhIGZvb3RlciBvciBub3QgZG9lc24ndCBjaGFuZ2UgYW55IG90aGVyIHBvc2l0aW9uaW5nLCBzbyB0aGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBZLWNvb3JkaW5hdGUuXG5cdFx0dGhpcy5vdXRwdXRUZXh0SWYodGhpcy5wYWRkaW5nLmxlZnQsIGFiY3R1bmUubWV0YVRleHQuZm9vdGVyLmxlZnQsICdmb290ZXJmb250JywgJ2hlYWRlciBtZXRhLWJvdHRvbScsIDAsIG51bGwsICdzdGFydCcpO1xuXHRcdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0ICsgd2lkdGggLyAyLCBhYmN0dW5lLm1ldGFUZXh0LmZvb3Rlci5jZW50ZXIsICdmb290ZXJmb250JywgJ2hlYWRlciBtZXRhLWJvdHRvbScsIDAsIG51bGwsICdtaWRkbGUnKTtcblx0XHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoLCBhYmN0dW5lLm1ldGFUZXh0LmZvb3Rlci5yaWdodCwgJ2Zvb3RlcmZvbnQnLCAnaGVhZGVyIG1ldGEtYm90dG9tJywgMCwgbnVsbCwgJ2VuZCcpO1xuXHR9XG59O1xuXG4vKipcbiAqIE91dHB1dCB0ZXh0IGRlZmluZWQgd2l0aCAlJXRleHQuXG4gKiBAcGFyYW0ge2FycmF5IG9yIHN0cmluZ30gdGV4dFxuICovXG5SZW5kZXJlci5wcm90b3R5cGUub3V0cHV0RnJlZVRleHQgPSBmdW5jdGlvbiAodGV4dCwgdnNraXApIHtcblx0aWYgKHZza2lwKVxuXHRcdHRoaXMubW92ZVkodnNraXApO1xuXHR2YXIgaGFzaCA9IHRoaXMuZ2V0Rm9udEFuZEF0dHIoJ3RleHRmb250JywgJ2RlZmluZWQtdGV4dCcpO1xuXHRpZiAodGV4dCA9PT0gXCJcIikge1x0Ly8gd2UgZG8gd2FudCB0byBwcmludCBvdXQgYmxhbmsgbGluZXMgaWYgdGhleSBoYXZlIGJlZW4gc3BlY2lmaWVkLlxuXHRcdHRoaXMubW92ZVkoaGFzaC5hdHRyWydmb250LXNpemUnXSAqIDIpOyAvLyBtb3ZlIHRoZSBkaXN0YW5jZSBvZiB0aGUgbGluZSwgcGx1cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIG1hcmdpbiwgd2hpY2ggaXMgYWxzbyBvbmUgbGluZS5cblx0fSBlbHNlIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcblx0XHR0aGlzLm1vdmVZKGhhc2guYXR0clsnZm9udC1zaXplJ10vMik7IC8vIFRPRE8tUEVSOiBtb3ZlIGRvd24gc29tZSAtIHRoZSB5IGxvY2F0aW9uIHNob3VsZCBiZSB0aGUgdG9wIG9mIHRoZSB0ZXh0LCBidXQgd2Ugb3V0cHV0IHRleHQgc3BlY2lmeWluZyB0aGUgY2VudGVyIGxpbmUuXG5cdFx0dGhpcy5vdXRwdXRUZXh0SWYodGhpcy5wYWRkaW5nLmxlZnQsIHRleHQsICd0ZXh0Zm9udCcsICdkZWZpbmVkLXRleHQnLCAwLCAwLCBcInN0YXJ0XCIpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXHRcdHZhciBpc0NlbnRlcmVkID0gZmFsc2U7IC8vIFRoZSBzdHJ1Y3R1cmUgaXMgd3JvbmcgaGVyZTogaXQgcmVxdWlyZXMgYW4gYXJyYXkgdG8gZG8gY2VudGVyaW5nLCBidXQgaXQgc2hvdWxkbid0IGhhdmUuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGV4dFtpXS5mb250KVxuXHRcdFx0XHRzdHIgKz0gXCJGT05UKFwiICsgdGV4dFtpXS5mb250ICsgXCIpXCI7XG5cdFx0XHRzdHIgKz0gdGV4dFtpXS50ZXh0O1xuXHRcdFx0aWYgKHRleHRbaV0uY2VudGVyKVxuXHRcdFx0XHRpc0NlbnRlcmVkID0gdHJ1ZTtcblx0XHR9XG5cdFx0dmFyIGFsaWdubWVudCA9IGlzQ2VudGVyZWQgPyAnbWlkZGxlJyA6ICdzdGFydCc7XG5cdFx0dmFyIHggPSBpc0NlbnRlcmVkID8gdGhpcy5jb250cm9sbGVyLndpZHRoIC8gMiA6IHRoaXMucGFkZGluZy5sZWZ0O1xuXHRcdHRoaXMub3V0cHV0VGV4dElmKHgsIHN0ciwgJ3RleHRmb250JywgJ2RlZmluZWQtdGV4dCcsIDAsIDEsIGFsaWdubWVudCk7XG5cdH1cbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5vdXRwdXRTZXBhcmF0b3IgPSBmdW5jdGlvbiAoc2VwYXJhdG9yKSB7XG5cdGlmICghc2VwYXJhdG9yLmxpbmVMZW5ndGgpXG5cdFx0cmV0dXJuO1xuXHR0aGlzLm1vdmVZKHNlcGFyYXRvci5zcGFjZUFib3ZlKTtcblx0dGhpcy5wcmludFNlcGFyYXRvcihzZXBhcmF0b3IubGluZUxlbmd0aCk7XG5cdHRoaXMubW92ZVkoc2VwYXJhdG9yLnNwYWNlQmVsb3cpO1xufTtcblxuLyoqXG4gKiBPdXRwdXQgYW4gZXh0cmEgc3VidGl0bGUgdGhhdCBpcyBkZWZpbmVkIGxhdGVyIGluIHRoZSB0dW5lLlxuICovXG5SZW5kZXJlci5wcm90b3R5cGUub3V0cHV0U3VidGl0bGUgPSBmdW5jdGlvbiAod2lkdGgsIHN1YnRpdGxlKSB7XG5cdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0ICsgd2lkdGggLyAyLCBzdWJ0aXRsZSwgJ3N1YnRpdGxlZm9udCcsICd0ZXh0IG1ldGEtdG9wJywgdGhpcy5zcGFjaW5nLnN1YnRpdGxlLCAwLCAnbWlkZGxlJyk7XG59O1xuXG4vKipcbiAqIEJlZ2luIGEgZ3JvdXAgb2YgZ2x5cGhzIHRoYXQgd2lsbCBhbHdheXMgYmUgbW92ZWQsIHNjYWxlZCBhbmQgaGlnaGxpZ2h0ZWQgdG9nZXRoZXJcbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLmJlZ2luR3JvdXAgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucGF0aCA9IFtdO1xuICB0aGlzLmxhc3RNID0gWzAsMF07XG4gIHRoaXMuaW5ncm91cCA9IHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIHBhdGggdG8gdGhlIGN1cnJlbnQgZ3JvdXBcbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGhcbiAqIEBwcml2YXRlXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5hZGRQYXRoID0gZnVuY3Rpb24gKHBhdGgpIHtcbiAgcGF0aCA9IHBhdGggfHwgW107XG4gIGlmIChwYXRoLmxlbmd0aD09PTApIHJldHVybjtcbiAgcGF0aFswXVswXT1cIm1cIjtcbiAgcGF0aFswXVsxXS09dGhpcy5sYXN0TVswXTtcbiAgcGF0aFswXVsyXS09dGhpcy5sYXN0TVsxXTtcbiAgdGhpcy5sYXN0TVswXSs9cGF0aFswXVsxXTtcbiAgdGhpcy5sYXN0TVsxXSs9cGF0aFswXVsyXTtcbiAgdGhpcy5wYXRoLnB1c2gocGF0aFswXSk7XG4gIGZvciAodmFyIGk9MSxpaT1wYXRoLmxlbmd0aDtpPGlpO2krKykge1xuICAgIGlmIChwYXRoW2ldWzBdPT09XCJtXCIpIHtcbiAgICAgIHRoaXMubGFzdE1bMF0rPXBhdGhbaV1bMV07XG4gICAgICB0aGlzLmxhc3RNWzFdKz1wYXRoW2ldWzJdO1xuICAgIH1cbiAgICB0aGlzLnBhdGgucHVzaChwYXRoW2ldKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbmQgYSBncm91cCBvZiBnbHlwaHMgdGhhdCB3aWxsIGFsd2F5cyBiZSBtb3ZlZCwgc2NhbGVkIGFuZCBoaWdobGlnaHRlZCB0b2dldGhlclxuICovXG5SZW5kZXJlci5wcm90b3R5cGUuZW5kR3JvdXAgPSBmdW5jdGlvbiAoa2xhc3MpIHtcbiAgdGhpcy5pbmdyb3VwID0gZmFsc2U7XG4gIGlmICh0aGlzLnBhdGgubGVuZ3RoPT09MCkgcmV0dXJuIG51bGw7XG4gIHZhciBwYXRoID0gXCJcIjtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGgubGVuZ3RoOyBpKyspXG5cdFx0cGF0aCArPSB0aGlzLnBhdGhbaV0uam9pbihcIiBcIik7XG5cdHZhciByZXQgPSB0aGlzLnBhcGVyLnBhdGgoe3BhdGg6IHBhdGgsIHN0cm9rZTpcIm5vbmVcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKGtsYXNzKX0pO1xuXHR0aGlzLnBhdGggPSBbXTtcbiAgaWYgKHRoaXMuZG9SZWdyZXNzaW9uKSB0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG4vKipcbiAqIGdldHMgc2NhbGVkXG4gKiBAcGFyYW0ge251bWJlcn0geDEgc3RhcnQgeFxuICogQHBhcmFtIHtudW1iZXJ9IHgyIGVuZCB4XG4gKiBAcGFyYW0ge251bWJlcn0gcGl0Y2ggcGl0Y2ggdGhlIHN0YXZlIGxpbmUgaXMgZHJhd24gYXRcbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLnByaW50U3RhdmVMaW5lID0gZnVuY3Rpb24gKHgxLHgyLCBwaXRjaCwga2xhc3MpIHtcblx0dmFyIGV4dHJhQ2xhc3MgPSBcInN0YWZmXCI7XG5cdGlmIChrbGFzcyAhPT0gdW5kZWZpbmVkKVxuXHRcdGV4dHJhQ2xhc3MgKz0gXCIgXCIgKyBrbGFzcztcbiAgdmFyIGlzSUU9LypAY2Nfb24hQCovZmFsc2U7Ly9JRSBkZXRlY3RvclxuICB2YXIgZHkgPSAwLjM1O1xuICB2YXIgZmlsbCA9IFwiIzAwMDAwMFwiO1xuICBpZiAoaXNJRSkge1xuICAgIGR5ID0gMTtcbiAgICBmaWxsID0gXCIjNjY2NjY2XCI7XG4gIH1cbiAgdmFyIHkgPSB0aGlzLmNhbGNZKHBpdGNoKTtcbiAgdmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmIEwgJWYgJWYgTCAlZiAlZiB6XCIsIHgxLCB5LWR5LCB4MiwgeS1keSxcbiAgICAgeDIsIHkrZHksIHgxLCB5K2R5KTtcbiAgdmFyIHJldCA9IHRoaXMucGFwZXIucGF0aFRvQmFjayh7cGF0aDpwYXRoU3RyaW5nLCBzdHJva2U6XCJub25lXCIsIGZpbGw6ZmlsbCwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKGV4dHJhQ2xhc3MpfSk7XG4gIGlmICh0aGlzLmRvUmVncmVzc2lvbikgdGhpcy5hZGRUb1JlZ3Jlc3Npb24ocmV0KTtcblxuICByZXR1cm4gcmV0O1xufTtcblxuLyoqXG4gKiBnZXRzIHNjYWxlZCBpZiBub3QgaW4gYSBncm91cFxuICogQHBhcmFtIHtudW1iZXJ9IHggeCBjb29yZGluYXRlIG9mIHRoZSBzdGVtXG4gKiBAcGFyYW0ge251bWJlcn0gZHggc3RlbSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IHkxIHkgY29vcmRpbmF0ZSBvZiB0aGUgc3RlbSBib3R0b21cbiAqIEBwYXJhbSB7bnVtYmVyfSB5MiB5IGNvb3JkaW5hdGUgb2YgdGhlIHN0ZW0gdG9wXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludFN0ZW0gPSBmdW5jdGlvbiAoeCwgZHgsIHkxLCB5Mikge1xuICBpZiAoZHg8MCkgeyAvLyBjb3JyZWN0IHBhdGggXCJoYW5kZWRuZXNzXCIgZm9yIGludGVyc2VjdGlvbiB3aXRoIG90aGVyIGVsZW1lbnRzXG4gICAgdmFyIHRtcCA9IHkyO1xuICAgIHkyID0geTE7XG4gICAgeTEgPSB0bXA7XG4gIH1cbiAgdmFyIGlzSUU9LypAY2Nfb24hQCovZmFsc2U7Ly9JRSBkZXRlY3RvclxuICB2YXIgZmlsbCA9IFwiIzAwMDAwMFwiO1xuICBpZiAoaXNJRSAmJiBkeDwxKSB7XG4gICAgZHggPSAxO1xuICAgIGZpbGwgPSBcIiM2NjY2NjZcIjtcbiAgfVxuICBpZiAofn54ID09PSB4KSB4Kz0wLjA1OyAvLyByYXBoYWVsIGRvZXMgd2VpcmQgcm91bmRpbmcgKGZvciBWTUwpXG4gIHZhciBwYXRoQXJyYXkgPSBbW1wiTVwiLHgseTFdLFtcIkxcIiwgeCwgeTJdLFtcIkxcIiwgeCtkeCwgeTJdLFtcIkxcIix4K2R4LHkxXSxbXCJ6XCJdXTtcbiAgaWYgKCFpc0lFICYmIHRoaXMuaW5ncm91cCkge1xuICAgIHRoaXMuYWRkUGF0aChwYXRoQXJyYXkpO1xuICB9IGVsc2Uge1xuICBcdHZhciBwYXRoID0gXCJcIjtcbiAgXHRmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhBcnJheS5sZW5ndGg7IGkrKylcbiAgXHRcdHBhdGggKz0gcGF0aEFycmF5W2ldLmpvaW4oXCIgXCIpO1xuICAgIHZhciByZXQgPSB0aGlzLnBhcGVyLnBhdGhUb0JhY2soe3BhdGg6cGF0aCwgc3Ryb2tlOlwibm9uZVwiLCBmaWxsOmZpbGwsICdjbGFzcyc6IHRoaXMuYWRkQ2xhc3Nlcygnc3RlbScpfSk7XG4gICAgaWYgKHRoaXMuZG9SZWdyZXNzaW9uKSB0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTtcblxuZnVuY3Rpb24ga2VyblN5bWJvbHMobGFzdFN5bWJvbCwgdGhpc1N5bWJvbCwgbGFzdFN5bWJvbFdpZHRoKSB7XG5cdC8vIFRoaXMgaXMganVzdCBzb21lIGFkanVzdG1lbnRzIHRvIG1ha2UgaXQgbG9vayBiZXR0ZXIuXG5cdHZhciB3aWR0aCA9IGxhc3RTeW1ib2xXaWR0aDtcblx0aWYgKGxhc3RTeW1ib2wgPT09ICdmJyAmJiB0aGlzU3ltYm9sID09PSAnZicpXG5cdFx0d2lkdGggPSB3aWR0aCoyLzM7XG5cdGlmIChsYXN0U3ltYm9sID09PSAncCcgJiYgdGhpc1N5bWJvbCA9PT0gJ3AnKVxuXHRcdHdpZHRoID0gd2lkdGgqNS82O1xuXHRpZiAobGFzdFN5bWJvbCA9PT0gJ2YnICYmIHRoaXNTeW1ib2wgPT09ICd6Jylcblx0XHR3aWR0aCA9IHdpZHRoKjUvODtcblx0cmV0dXJuIHdpZHRoO1xufVxuXG4vKipcbiAqIGFzc3VtZXMgdGhpcy55IGlzIHNldCBhcHByb3ByaWF0ZWx5XG4gKiBpZiBzeW1ib2wgaXMgYSBtdWx0aWNoYXIgc3RyaW5nIHdpdGhvdXQgYSAuIChhcyBpbiBzY3JpcHRzLnN0YWNjYXRvKSAxIHN5bWJvbCBwZXIgY2hhciBpcyBhc3N1bWVkXG4gKiBub3Qgc2NhbGVkIGlmIG5vdCBpbiBwcmludGdyb3VwXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludFN5bWJvbCA9IGZ1bmN0aW9uICh4LCBvZmZzZXQsIHN5bWJvbCwgc2NhbGV4LCBzY2FsZXksIGtsYXNzKSB7XG5cdHZhciBlbDtcblx0dmFyIHljb3JyO1xuXHRpZiAoIXN5bWJvbCkgcmV0dXJuIG51bGw7XG5cdGlmIChzeW1ib2wubGVuZ3RoID4gMSAmJiBzeW1ib2wuaW5kZXhPZihcIi5cIikgPCAwKSB7XG5cdFx0dGhpcy5wYXBlci5vcGVuR3JvdXAoKTtcblx0XHR2YXIgZHggPSAwO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgcyA9IHN5bWJvbC5jaGFyQXQoaSk7XG5cdFx0XHR5Y29yciA9IGdseXBocy5nZXRZQ29ycihzKTtcblx0XHRcdGVsID0gZ2x5cGhzLnByaW50U3ltYm9sKHggKyBkeCwgdGhpcy5jYWxjWShvZmZzZXQgKyB5Y29yciksIHMsIHRoaXMucGFwZXIsIGtsYXNzKTtcblx0XHRcdGlmIChlbCkge1xuXHRcdFx0XHRpZiAodGhpcy5kb1JlZ3Jlc3Npb24pIHRoaXMuYWRkVG9SZWdyZXNzaW9uKGVsKTtcblx0XHRcdFx0Ly9lbGVtc2V0LnB1c2goZWwpO1xuXHRcdFx0XHRpZiAoaSA8IHN5bWJvbC5sZW5ndGggLSAxKVxuXHRcdFx0XHRcdGR4ICs9IGtlcm5TeW1ib2xzKHMsIHN5bWJvbC5jaGFyQXQoaSArIDEpLCBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgocykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5yZW5kZXJUZXh0KHgsIHRoaXMueSwgXCJubyBzeW1ib2w6XCIgKyBzeW1ib2wsIFwiZGVidWdmb250XCIsICdkZWJ1Zy1tc2cnLCAnc3RhcnQnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFwZXIuY2xvc2VHcm91cCgpO1xuXHR9IGVsc2Uge1xuXHRcdHljb3JyID0gZ2x5cGhzLmdldFlDb3JyKHN5bWJvbCk7XG5cdFx0aWYgKHRoaXMuaW5ncm91cCkge1xuXHRcdFx0dGhpcy5hZGRQYXRoKGdseXBocy5nZXRQYXRoRm9yU3ltYm9sKHgsIHRoaXMuY2FsY1kob2Zmc2V0ICsgeWNvcnIpLCBzeW1ib2wsIHNjYWxleCwgc2NhbGV5KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsID0gZ2x5cGhzLnByaW50U3ltYm9sKHgsIHRoaXMuY2FsY1kob2Zmc2V0ICsgeWNvcnIpLCBzeW1ib2wsIHRoaXMucGFwZXIsIGtsYXNzKTtcblx0XHRcdGlmIChlbCkge1xuXHRcdFx0XHRpZiAodGhpcy5kb1JlZ3Jlc3Npb24pIHRoaXMuYWRkVG9SZWdyZXNzaW9uKGVsKTtcblx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHRoaXMucmVuZGVyVGV4dCh4LCB0aGlzLnksIFwibm8gc3ltYm9sOlwiICsgc3ltYm9sLCBcImRlYnVnZm9udFwiLCAnZGVidWctbXNnJywgJ3N0YXJ0Jyk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuc2NhbGVFeGlzdGluZ0VsZW0gPSBmdW5jdGlvbiAoZWxlbSwgc2NhbGVYLCBzY2FsZVksIHgsIHkpIHtcblx0dGhpcy5wYXBlci5zZXRBdHRyaWJ1dGVPbkVsZW1lbnQoZWxlbSwgeyBzdHlsZTogXCJ0cmFuc2Zvcm06c2NhbGUoXCIrc2NhbGVYK1wiLFwiK3NjYWxlWSArIFwiKTt0cmFuc2Zvcm0tb3JpZ2luOlwiICsgeCArIFwicHggXCIgKyB5ICsgXCJweDtcIn0pO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnByaW50UGF0aCA9IGZ1bmN0aW9uIChhdHRycykge1xuICB2YXIgcmV0ID0gdGhpcy5wYXBlci5wYXRoKGF0dHJzKTtcbiAgaWYgKHRoaXMuZG9SZWdyZXNzaW9uKSB0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQpO1xuICByZXR1cm4gcmV0O1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmRyYXdCcmFjZSA9IGZ1bmN0aW9uKHhMZWZ0LCB5VG9wLCB5Qm90dG9tKSB7Ly9Ub255XG5cdHZhciB5SGVpZ2h0ID0geUJvdHRvbSAtIHlUb3A7XG5cblx0dmFyIHhDdXJ2ZSA9IFs3LjUsIC04LCAyMSwgMCwgMTguNSwgLTEwLjUsIDcuNV07XG5cdHZhciB5Q3VydmUgPSBbMCwgeUhlaWdodC81LjUsIHlIZWlnaHQvMy4xNCwgeUhlaWdodC8yLCB5SGVpZ2h0LzIuOTMsIHlIZWlnaHQvNC44OCwgMF07XG5cblx0dmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBDICVmICVmICVmICVmICVmICVmIEMgJWYgJWYgJWYgJWYgJWYgJWYgelwiLFxuXHRcdHhMZWZ0K3hDdXJ2ZVswXSwgeVRvcCt5Q3VydmVbMF0sXG5cdFx0eExlZnQreEN1cnZlWzFdLCB5VG9wK3lDdXJ2ZVsxXSxcblx0XHR4TGVmdCt4Q3VydmVbMl0sIHlUb3AreUN1cnZlWzJdLFxuXHRcdHhMZWZ0K3hDdXJ2ZVszXSwgeVRvcCt5Q3VydmVbM10sXG5cdFx0eExlZnQreEN1cnZlWzRdLCB5VG9wK3lDdXJ2ZVs0XSxcblx0XHR4TGVmdCt4Q3VydmVbNV0sIHlUb3AreUN1cnZlWzVdLFxuXHRcdHhMZWZ0K3hDdXJ2ZVs2XSwgeVRvcCt5Q3VydmVbNl0pO1xuXHR2YXIgcmV0MSA9IHRoaXMucGFwZXIucGF0aCh7cGF0aDpwYXRoU3RyaW5nLCBzdHJva2U6XCIjMDAwMDAwXCIsIGZpbGw6XCIjMDAwMDAwXCIsICdjbGFzcyc6IHRoaXMuYWRkQ2xhc3NlcygnYnJhY2UnKX0pO1xuXG5cdHhDdXJ2ZSA9IFswLCAxNy41LCAtNy41LCA2LjYsIC01LCAyMCwgMF07XG5cdHlDdXJ2ZSA9IFt5SGVpZ2h0LzIsIHlIZWlnaHQvMS40NiwgeUhlaWdodC8xLjIyLCB5SGVpZ2h0LCB5SGVpZ2h0LzEuMTksIHlIZWlnaHQvMS40MiwgeUhlaWdodC8yXTtcblxuXHRwYXRoU3RyaW5nID0gc3ByaW50ZihcIk0gJWYgJWYgQyAlZiAlZiAlZiAlZiAlZiAlZiBDICVmICVmICVmICVmICVmICVmIHpcIixcblx0XHR4TGVmdCt4Q3VydmVbIDBdLCB5VG9wK3lDdXJ2ZVswXSxcblx0XHR4TGVmdCt4Q3VydmVbMV0sIHlUb3AreUN1cnZlWzFdLFxuXHRcdHhMZWZ0K3hDdXJ2ZVsyXSwgeVRvcCt5Q3VydmVbMl0sXG5cdFx0eExlZnQreEN1cnZlWzNdLCB5VG9wK3lDdXJ2ZVszXSxcblx0XHR4TGVmdCt4Q3VydmVbNF0sIHlUb3AreUN1cnZlWzRdLFxuXHRcdHhMZWZ0K3hDdXJ2ZVs1XSwgeVRvcCt5Q3VydmVbNV0sXG5cdFx0eExlZnQreEN1cnZlWzZdLCB5VG9wK3lDdXJ2ZVs2XSk7XG5cdHZhciByZXQyID0gdGhpcy5wYXBlci5wYXRoKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIiMwMDAwMDBcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKCdicmFjZScpfSk7XG5cblx0aWYgKHRoaXMuZG9SZWdyZXNzaW9uKXtcblx0XHR0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQxKTtcblx0XHR0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQyKTtcblx0fVxuXHRyZXR1cm4gcmV0MSArIHJldDI7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuZHJhd0FyYyA9IGZ1bmN0aW9uKHgxLCB4MiwgcGl0Y2gxLCBwaXRjaDIsIGFib3ZlLCBrbGFzcywgaXNUaWUpIHtcblx0Ly8gSWYgaXQgaXMgYSB0aWUgdnMuIGEgc2x1ciwgZHJhdyBpdCBzaGFsbG93ZXIuXG5cdHZhciBzcGFjaW5nID0gaXNUaWUgPyAxLjIgOiAxLjU7XG5cbiAgeDEgPSB4MSArIDY7XG4gIHgyID0geDIgKyA0O1xuICBwaXRjaDEgPSBwaXRjaDEgKyAoKGFib3ZlKT9zcGFjaW5nOi1zcGFjaW5nKTtcbiAgcGl0Y2gyID0gcGl0Y2gyICsgKChhYm92ZSk/c3BhY2luZzotc3BhY2luZyk7XG4gIHZhciB5MSA9IHRoaXMuY2FsY1kocGl0Y2gxKTtcbiAgdmFyIHkyID0gdGhpcy5jYWxjWShwaXRjaDIpO1xuXG4gIC8vdW5pdCBkaXJlY3Rpb24gdmVjdG9yXG4gIHZhciBkeCA9IHgyLXgxO1xuICB2YXIgZHkgPSB5Mi15MTtcbiAgdmFyIG5vcm09IE1hdGguc3FydChkeCpkeCtkeSpkeSk7XG4gIHZhciB1eCA9IGR4L25vcm07XG4gIHZhciB1eSA9IGR5L25vcm07XG5cbiAgdmFyIGZsYXR0ZW4gPSBub3JtLzMuNTtcbiAgdmFyIG1heEZsYXR0ZW4gPSBpc1RpZSA/IDEwIDogMjU7ICAvLyBJZiBpdCBpcyBhIHRpZSB2cy4gYSBzbHVyLCBkcmF3IGl0IHNoYWxsb3dlci5cbiAgdmFyIGN1cnZlID0gKChhYm92ZSk/LTE6MSkqTWF0aC5taW4obWF4RmxhdHRlbiwgTWF0aC5tYXgoNCwgZmxhdHRlbikpO1xuXG4gIHZhciBjb250cm9seDEgPSB4MStmbGF0dGVuKnV4LWN1cnZlKnV5O1xuICB2YXIgY29udHJvbHkxID0geTErZmxhdHRlbip1eStjdXJ2ZSp1eDtcbiAgdmFyIGNvbnRyb2x4MiA9IHgyLWZsYXR0ZW4qdXgtY3VydmUqdXk7XG4gIHZhciBjb250cm9seTIgPSB5Mi1mbGF0dGVuKnV5K2N1cnZlKnV4O1xuICB2YXIgdGhpY2tuZXNzID0gMjtcbiAgdmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBDICVmICVmICVmICVmICVmICVmIEMgJWYgJWYgJWYgJWYgJWYgJWYgelwiLCB4MSwgeTEsXG4gICAgIGNvbnRyb2x4MSwgY29udHJvbHkxLCBjb250cm9seDIsIGNvbnRyb2x5MiwgeDIsIHkyLFxuICAgICBjb250cm9seDItdGhpY2tuZXNzKnV5LCBjb250cm9seTIrdGhpY2tuZXNzKnV4LCBjb250cm9seDEtdGhpY2tuZXNzKnV5LCBjb250cm9seTErdGhpY2tuZXNzKnV4LCB4MSwgeTEpO1xuXHRpZiAoa2xhc3MpXG5cdFx0a2xhc3MgKz0gJyBzbHVyJztcblx0ZWxzZVxuXHRcdGtsYXNzID0gJ3NsdXInO1xuICB2YXIgcmV0ID0gdGhpcy5wYXBlci5wYXRoKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIm5vbmVcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKGtsYXNzKX0pO1xuICBpZiAodGhpcy5kb1JlZ3Jlc3Npb24pIHRoaXMuYWRkVG9SZWdyZXNzaW9uKHJldCk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHkgZm9yIGEgZ2l2ZW4gcGl0Y2ggdmFsdWUgKHJlbGF0aXZlIHRvIHRoZSBzdGF2ZSB0aGUgcmVuZGVyZXIgaXMgY3VycmVudGx5IHByaW50aW5nKVxuICogQHBhcmFtIHtudW1iZXJ9IG9mcyBwaXRjaCB2YWx1ZSAoYm90dG9tIEMgb24gYSBHIGNsZWYgPSAwLCBEPTEsIGV0Yy4pXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5jYWxjWSA9IGZ1bmN0aW9uKG9mcykge1xuICByZXR1cm4gdGhpcy55IC0gb2ZzKnNwYWNpbmcuU1RFUDtcbn07XG5cbi8qKlxuICogUHJpbnQgQHBhcmFtIHtudW1iZXJ9IG51bUxpbmVzLiBJZiB0aGVyZSBpcyAxIGxpbmUgaXQgaXMgdGhlIEIgbGluZS4gT3RoZXJ3aXNlIHRoZSBib3R0b20gbGluZSBpcyB0aGUgRSBsaW5lLlxuICovXG5SZW5kZXJlci5wcm90b3R5cGUucHJpbnRTdGF2ZSA9IGZ1bmN0aW9uIChzdGFydHgsIGVuZHgsIG51bUxpbmVzKSB7XG5cdHZhciBrbGFzcyA9IFwidG9wLWxpbmVcIjtcblx0dGhpcy5wYXBlci5vcGVuR3JvdXAoeyBwcmVwZW5kOiB0cnVlIH0pO1xuXHQvLyBJZiB0aGVyZSBpcyBvbmUgbGluZSwgaXQgaXMgdGhlIEIgbGluZS4gT3RoZXJ3aXNlLCB0aGUgYm90dG9tIGxpbmUgaXMgdGhlIEUgbGluZS5cblx0aWYgKG51bUxpbmVzID09PSAxKSB7XG5cdFx0dGhpcy5wcmludFN0YXZlTGluZShzdGFydHgsZW5keCw2LCBrbGFzcyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZvciAodmFyIGkgPSBudW1MaW5lcy0xOyBpID49IDA7IGktLSkge1xuXHRcdHRoaXMucHJpbnRTdGF2ZUxpbmUoc3RhcnR4LGVuZHgsKGkrMSkqMiwga2xhc3MpO1xuXHRcdGtsYXNzID0gdW5kZWZpbmVkO1xuXHR9XG5cdHRoaXMucGFwZXIuY2xvc2VHcm91cCgpO1xufTtcblxuLyoqXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLmFkZENsYXNzZXMgPSBmdW5jdGlvbiAoYywgaXNOb3RlKSB7XG5cdGlmICghdGhpcy5zaG91bGRBZGRDbGFzc2VzKVxuXHRcdHJldHVybiBcIlwiO1xuXHR2YXIgcmV0ID0gW107XG5cdGlmIChjLmxlbmd0aCA+IDApIHJldC5wdXNoKGMpO1xuXHRpZiAodGhpcy5saW5lTnVtYmVyICE9PSBudWxsICYmIHRoaXMubGluZU51bWJlciAhPT0gdW5kZWZpbmVkKSByZXQucHVzaChcImxcIit0aGlzLmxpbmVOdW1iZXIpO1xuXHRpZiAodGhpcy5tZWFzdXJlTnVtYmVyICE9PSBudWxsICYmIHRoaXMubWVhc3VyZU51bWJlciAhPT0gdW5kZWZpbmVkKSByZXQucHVzaChcIm1cIit0aGlzLm1lYXN1cmVOdW1iZXIpO1xuXHRpZiAodGhpcy52b2ljZU51bWJlciAhPT0gbnVsbCAmJiB0aGlzLnZvaWNlTnVtYmVyICE9PSB1bmRlZmluZWQpIHJldC5wdXNoKFwidlwiK3RoaXMudm9pY2VOdW1iZXIpO1xuXHRpZiAoKGMuaW5kZXhPZignbm90ZScpID49IDAgfHwgYy5pbmRleE9mKCdyZXN0JykgPj0gMCB8fCBjLmluZGV4T2YoJ2x5cmljJykgPj0gMCApICYmIHRoaXMubm90ZU51bWJlciAhPT0gbnVsbCAmJiB0aGlzLm5vdGVOdW1iZXIgIT09IHVuZGVmaW5lZCkgcmV0LnB1c2goXCJuXCIrdGhpcy5ub3RlTnVtYmVyKTtcblx0Ly8gYWRkIGEgcHJlZml4IHRvIGFsbCBjbGFzc2VzIHRoYXQgYWJjanMgYWRkcy5cblx0aWYgKHJldC5sZW5ndGggPiAwKSB7XG5cdFx0cmV0ID0gcmV0LmpvaW4oJyAnKTsgLy8gU29tZSBzdHJpbmdzIGFyZSBjb21wb3VuZCBjbGFzc2VzIC0gdGhhdCBpcywgc3BlY2lmeSBtb3JlIHRoYW4gb25lIGNsYXNzIGluIGEgc3RyaW5nLlxuXHRcdHJldCA9IHJldC5zcGxpdCgnICcpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAocmV0W2ldLmluZGV4T2YoJ2FiY2pzLScpICE9PSAwICYmIHJldFtpXS5sZW5ndGggPiAwKSAvLyBpZiB0aGUgcHJlZml4IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBhbmQgdGhlIGNsYXNzIGlzIG5vdCBibGFuay5cblx0XHRcdFx0cmV0W2ldID0gJ2FiY2pzLScgKyByZXRbaV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXQuam9pbignICcpO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmdldEZvbnRBbmRBdHRyID0gZnVuY3Rpb24odHlwZSwga2xhc3MpIHtcblx0dmFyIGZvbnQ7XG5cdGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcblx0XHRmb250ID0gdGhpcy5hYmN0dW5lLmZvcm1hdHRpbmdbdHlwZV07XG5cdFx0Ly8gUmFwaGFlbCBkZWxpYmVyYXRlbHkgY2hhbmdlcyB0aGUgZm9udCB1bml0cyB0byBwaXhlbHMgZm9yIHNvbWUgcmVhc29uLCBzbyB3ZSBuZWVkIHRvIGNoYW5nZSBwb2ludHMgdG8gcGl4ZWxzIGhlcmUuXG5cdFx0aWYgKGZvbnQpXG5cdFx0XHRmb250ID0ge2ZhY2U6IGZvbnQuZmFjZSwgc2l6ZTogZm9udC5zaXplICogNCAvIDMsIGRlY29yYXRpb246IGZvbnQuZGVjb3JhdGlvbiwgc3R5bGU6IGZvbnQuc3R5bGUsIHdlaWdodDogZm9udC53ZWlnaHQsIGJveDogZm9udC5ib3h9O1xuXHRcdGVsc2Vcblx0XHRcdGZvbnQgPSB7ZmFjZTogXCJBcmlhbFwiLCBzaXplOiAxMiAqIDQgLyAzLCBkZWNvcmF0aW9uOiBcInVuZGVybGluZVwiLCBzdHlsZTogXCJub3JtYWxcIiwgd2VpZ2h0OiBcIm5vcm1hbFwifTtcblx0fSBlbHNlXG5cdFx0Zm9udCA9IHtmYWNlOiB0eXBlLmZhY2UsIHNpemU6IHR5cGUuc2l6ZSAqIDQgLyAzLCBkZWNvcmF0aW9uOiB0eXBlLmRlY29yYXRpb24sIHN0eWxlOiB0eXBlLnN0eWxlLCB3ZWlnaHQ6IHR5cGUud2VpZ2h0LCBib3g6IHR5cGUuYm94fTtcblxuXHR2YXIgYXR0ciA9IHtcImZvbnQtc2l6ZVwiOiBmb250LnNpemUsICdmb250LXN0eWxlJzogZm9udC5zdHlsZSxcblx0XHRcImZvbnQtZmFtaWx5XCI6IGZvbnQuZmFjZSwgJ2ZvbnQtd2VpZ2h0JzogZm9udC53ZWlnaHQsICd0ZXh0LWRlY29yYXRpb24nOiBmb250LmRlY29yYXRpb24sXG5cdFx0J2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKGtsYXNzKSB9O1xuXHRhdHRyLmZvbnQgPSBcIlwiO1x0Ly8gVGhlcmUgaXMgYSBzcHVyaW91cyBmb250IGRlZmluaXRpb24gdGhhdCBpcyBwdXQgb24gYWxsIHRleHQgZWxlbWVudHMuIFRoaXMgb3ZlcndyaXRlcyBpdC5cblx0cmV0dXJuIHsgZm9udDogZm9udCwgYXR0cjogYXR0ciB9O1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmdldFRleHRTaXplID0gZnVuY3Rpb24odGV4dCwgdHlwZSwga2xhc3MsIGVsKSB7XG5cdHZhciBoYXNoID0gdGhpcy5nZXRGb250QW5kQXR0cih0eXBlLCBrbGFzcyk7XG5cdHZhciBzaXplID0gdGhpcy5wYXBlci5nZXRUZXh0U2l6ZSh0ZXh0LCBoYXNoLmF0dHIsIGVsKTtcblx0aWYgKGhhc2guZm9udC5ib3gpIHtcblx0XHRzaXplLmhlaWdodCArPSA4O1xuXHRcdHNpemUud2lkdGggKz0gODtcblx0fVxuXHRyZXR1cm4gc2l6ZTtcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJUZXh0ID0gZnVuY3Rpb24oeCwgeSwgdGV4dCwgdHlwZSwga2xhc3MsIGFuY2hvciwgY2VudGVyVmVydGljYWxseSkge1xuXHR2YXIgaGFzaCA9IHRoaXMuZ2V0Rm9udEFuZEF0dHIodHlwZSwga2xhc3MpO1xuXHRpZiAoYW5jaG9yKVxuXHRcdGhhc2guYXR0cltcInRleHQtYW5jaG9yXCJdID0gYW5jaG9yO1xuXHRoYXNoLmF0dHIueCA9IHg7XG5cdGhhc2guYXR0ci55ID0geSArIDc7IC8vIFRPRE8tUEVSOiBOb3Qgc3VyZSB3aHkgdGhlIHRleHQgYXBwZWFycyB0byBiZSA3IHBpeGVscyBvZmYuXG5cdGlmICghY2VudGVyVmVydGljYWxseSlcblx0XHRoYXNoLmF0dHIuZHkgPSBcIjAuNWVtXCI7XG5cdGlmICh0eXBlID09PSAnZGVidWdmb250Jykge1xuXHRcdGNvbnNvbGUubG9nKFwiRGVidWcgbXNnOiBcIiArIHRleHQpO1xuXHRcdGhhc2guYXR0ci5zdHJva2UgPSBcIiNmZjAwMDBcIjtcblx0fVxuXG5cdHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcblxcbi9nLCBcIlxcbiBcXG5cIik7XG5cdHRleHQgPSB0ZXh0LnJlcGxhY2UoL15cXG4vLCBcIlxceEEwXFxuXCIpO1xuXG5cdGlmIChoYXNoLmZvbnQuYm94KSB7XG5cdFx0aGFzaC5hdHRyLnggKz0gMjtcblx0XHRoYXNoLmF0dHIueSArPSA0O1xuXHR9XG5cdHZhciBlbCA9IHRoaXMucGFwZXIudGV4dCh0ZXh0LCBoYXNoLmF0dHIpO1xuXG5cdGlmIChoYXNoLmZvbnQuYm94KSB7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFRleHRTaXplKHRleHQsIHR5cGUsIGtsYXNzKTtcblx0XHR2YXIgcGFkZGluZyA9IDI7XG5cdFx0dmFyIG1hcmdpbiA9IDI7XG5cdFx0dGhpcy5wYXBlci5yZWN0KHsgeDogeCAtIHBhZGRpbmcsIHk6IHksIHdpZHRoOiBzaXplLndpZHRoICsgcGFkZGluZyoyLCBoZWlnaHQ6IHNpemUuaGVpZ2h0ICsgcGFkZGluZyoyIC0gbWFyZ2luLCAgc3Ryb2tlOiBcIiM4ODg4ODhcIiwgZmlsbDogXCJ0cmFuc3BhcmVudFwifSk7XG5cdFx0Ly9zaXplLmhlaWdodCArPSA4O1xuXHR9XG5cdGlmICh0aGlzLmRvUmVncmVzc2lvbikgdGhpcy5hZGRUb1JlZ3Jlc3Npb24oZWwpO1xuXHRyZXR1cm4gZWw7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUubW92ZVkgPSBmdW5jdGlvbiAoZW0sIG51bUxpbmVzKSB7XG5cdGlmIChudW1MaW5lcyA9PT0gdW5kZWZpbmVkKSBudW1MaW5lcyA9IDE7XG5cdHRoaXMueSArPSBlbSpudW1MaW5lcztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5za2lwU3BhY2VZID0gZnVuY3Rpb24gKCkge1xuXHR0aGlzLnkgKz0gdGhpcy5zcGFjZTtcbn07XG5cbi8vIENhbGwgd2l0aCAna2luZCcgYmVpbmcgdGhlIGZvbnQgdHlwZSB0byB1c2UsXG4vLyBpZiBtYXJnaW5Cb3R0b20gPT09IG51bGwgdGhlbiBkb24ndCBpbmNyZW1lbnQgdGhlIFkgYWZ0ZXIgcHJpbnRpbmcsIG90aGVyd2lzZSB0aGF0IGlzIHRoZSBleHRyYSBudW1iZXIgb2YgZW0ncyB0byBsZWF2ZSBiZWxvdyB0aGUgbGluZS5cbi8vIGFuZCBhbGlnbm1lbnQgYmVpbmcgXCJzdGFydFwiLCBcIm1pZGRsZVwiLCBvciBcImVuZFwiLlxuUmVuZGVyZXIucHJvdG90eXBlLm91dHB1dFRleHRJZiA9IGZ1bmN0aW9uKHgsIHN0ciwga2luZCwga2xhc3MsIG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLCBhbGlnbm1lbnQpIHtcblx0aWYgKHN0cikge1xuXHRcdGlmIChtYXJnaW5Ub3ApXG5cdFx0XHR0aGlzLm1vdmVZKG1hcmdpblRvcCk7XG5cdFx0dmFyIGVsID0gdGhpcy5yZW5kZXJUZXh0KHgsIHRoaXMueSwgc3RyLCBraW5kLCBrbGFzcywgYWxpZ25tZW50KTtcblx0XHR2YXIgYmIgPSB0aGlzLmdldFRleHRTaXplKHN0ciwga2luZCwga2xhc3MpO1xuXHRcdHZhciB3aWR0aCA9IGlzTmFOKGJiLndpZHRoKSA/IDAgOiBiYi53aWR0aDtcblx0XHR2YXIgaGVpZ2h0ID0gaXNOYU4oYmIuaGVpZ2h0KSA/IDAgOiBiYi5oZWlnaHQ7XG5cdFx0dmFyIGhhc2ggPSB0aGlzLmdldEZvbnRBbmRBdHRyKGtpbmQsIGtsYXNzKTtcblx0XHRpZiAoaGFzaC5mb250LmJveCkge1xuXHRcdFx0d2lkdGggKz0gODtcblx0XHRcdGhlaWdodCArPSA4O1xuXHRcdH1cblx0XHRpZiAobWFyZ2luQm90dG9tICE9PSBudWxsKSB7XG5cdFx0XHR2YXIgbnVtTGluZXMgPSBzdHIuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xuXHRcdFx0aWYgKCFpc05hTihiYi5oZWlnaHQpKVxuXHRcdFx0XHR0aGlzLm1vdmVZKGhlaWdodC9udW1MaW5lcywgKG51bUxpbmVzICsgbWFyZ2luQm90dG9tKSk7XG5cdFx0fVxuXHRcdHJldHVybiBbd2lkdGgsIGhlaWdodF07XG5cdH1cblx0cmV0dXJuIFswLDBdO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmFkZEludmlzaWJsZU1hcmtlciA9IGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcblx0dmFyIGR5ID0gMC4zNTtcblx0dmFyIGZpbGwgPSBcInJnYmEoMCwwLDAsMClcIjtcblx0dmFyIHkgPSB0aGlzLnk7XG5cdHkgPSBNYXRoLnJvdW5kKHkpO1xuXHR2YXIgeDEgPSAwO1xuXHR2YXIgeDIgPSAxMDA7XG5cdHZhciBwYXRoU3RyaW5nID0gc3ByaW50ZihcIk0gJWYgJWYgTCAlZiAlZiBMICVmICVmIEwgJWYgJWYgelwiLCB4MSwgeS1keSwgeDEreDIsIHktZHksXG5cdFx0eDIsIHkrZHksIHgxLCB5K2R5KTtcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIm5vbmVcIiwgZmlsbDpmaWxsLCBcImZpbGwtb3BhY2l0eVwiOiAwLCAnY2xhc3MnOiB0aGlzLmFkZENsYXNzZXMoY2xhc3NOYW1lKSwgJ2RhdGEtdmVydGljYWwnOiB5IH0pO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnByaW50U2VwYXJhdG9yID0gZnVuY3Rpb24od2lkdGgpIHtcblx0dmFyIGZpbGwgPSBcInJnYmEoMCwwLDAsMjU1KVwiO1xuXHR2YXIgc3Ryb2tlID0gXCJyZ2JhKDAsMCwwLDApXCI7XG5cdHZhciB5ID0gTWF0aC5yb3VuZCh0aGlzLnkpO1xuXHR2YXIgc3RhZmZXaWR0aCA9IHRoaXMuY29udHJvbGxlci53aWR0aDtcblx0dmFyIHgxID0gKHN0YWZmV2lkdGggLSB3aWR0aCkvMjtcblx0dmFyIHgyID0geDEgKyB3aWR0aDtcblx0dmFyIHBhdGhTdHJpbmcgPSAnTSAnICsgeDEgKyAnICcgKyB5ICtcblx0XHQnIEwgJyArIHgyICsgJyAnICsgeSArXG5cdFx0JyBMICcgKyB4MiArICcgJyArICh5KzEpICtcblx0XHQnIEwgJyArIHgxICsgJyAnICsgKHkrMSkgK1xuXHRcdCcgTCAnICsgeDEgKyAnICcgKyB5ICsgJyB6Jztcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpzdHJva2UsIGZpbGw6ZmlsbCwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKCdkZWZpbmVkLXRleHQnKX0pO1xufTtcblxuLy8gRm9yIGRlYnVnZ2luZywgaXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBrbm93IHdoZXJlIHlvdSBhcmUgdmVydGljYWxseS5cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludEhvcml6b250YWxMaW5lID0gZnVuY3Rpb24gKHdpZHRoLCB2ZXJ0aWNhbCwgY29tbWVudCkge1xuXHR2YXIgZHkgPSAwLjM1O1xuXHR2YXIgZmlsbCA9IFwicmdiYSgwLDAsMjU1LC40KVwiO1xuXHR2YXIgeSA9IHRoaXMueTtcblx0aWYgKHZlcnRpY2FsKSB5ID0gdmVydGljYWw7XG5cdHkgPSBNYXRoLnJvdW5kKHkpO1xuXHR0aGlzLnBhcGVyLnRleHQoXCJcIitNYXRoLnJvdW5kKHkpLCB7eDogMTAsIHk6IHksIFwidGV4dC1hbmNob3JcIjogXCJzdGFydFwiLCBcImZvbnQtc2l6ZVwiOlwiMThweFwiLCBmaWxsOiBmaWxsLCBzdHJva2U6IGZpbGwgfSk7XG5cdHZhciB4MSA9IDUwO1xuXHR2YXIgeDIgPSB3aWR0aDtcblx0dmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmIEwgJWYgJWYgTCAlZiAlZiB6XCIsIHgxLCB5LWR5LCB4MSt4MiwgeS1keSxcblx0XHR4MiwgeStkeSwgeDEsIHkrZHkpO1xuXHR0aGlzLnBhcGVyLnBhdGhUb0JhY2soe3BhdGg6cGF0aFN0cmluZywgc3Ryb2tlOlwibm9uZVwiLCBmaWxsOmZpbGwsICdjbGFzcyc6IHRoaXMuYWRkQ2xhc3Nlcygnc3RhZmYnKX0pO1xuXHRmb3IgKHZhciBpID0gMTsgaSA8IHdpZHRoLzEwMDsgaSsrKSB7XG5cdFx0cGF0aFN0cmluZyA9IHNwcmludGYoXCJNICVmICVmIEwgJWYgJWYgTCAlZiAlZiBMICVmICVmIHpcIiwgaSoxMDAtZHksIHktNSwgaSoxMDAtZHksIHkrNSxcblx0XHRcdGkqMTAwK2R5LCB5LTUsIGkqMTAwK2R5LCB5KzUpO1xuXHRcdHRoaXMucGFwZXIucGF0aFRvQmFjayh7cGF0aDpwYXRoU3RyaW5nLCBzdHJva2U6XCJub25lXCIsIGZpbGw6ZmlsbCwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKCdzdGFmZicpfSk7XG5cdH1cblx0aWYgKGNvbW1lbnQpXG5cdFx0dGhpcy5wYXBlci50ZXh0KGNvbW1lbnQsIHt4OiB3aWR0aCs3MCwgeTogeSwgXCJ0ZXh0LWFuY2hvclwiOiBcInN0YXJ0XCIsIFwiZm9udC1zaXplXCI6XCIxOHB4XCIsIGZpbGw6IGZpbGwsIHN0cm9rZTogZmlsbCB9KTtcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludFNoYWRlZEJveCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3BhY2l0eSwgY29tbWVudCkge1xuXHR2YXIgYm94ID0gdGhpcy5wYXBlci5yZWN0KHsgeDogeCwgeTogeSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCwgZmlsbDogY29sb3IsIHN0cm9rZTogY29sb3IsIFwiZmlsbC1vcGFjaXR5XCI6IG9wYWNpdHksIFwic3Ryb2tlLW9wYWNpdHlcIjogb3BhY2l0eSB9KTtcblx0aWYgKGNvbW1lbnQpXG5cdFx0dGhpcy5wYXBlci50ZXh0KGNvbW1lbnQsIHt4OiAwLCB5OiB5KzcsIFwidGV4dC1hbmNob3JcIjogXCJzdGFydFwiLCBcImZvbnQtc2l6ZVwiOlwiMTRweFwiLCBmaWxsOiBcInJnYmEoMCwwLDI1NSwuNClcIiwgc3Ryb2tlOiBcInJnYmEoMCwwLDI1NSwuNClcIiB9KTtcblx0cmV0dXJuIGJveDtcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludFZlcnRpY2FsTGluZSA9IGZ1bmN0aW9uICh4LCB5MSwgeTIpIHtcblx0dmFyIGR5ID0gMC4zNTtcblx0dmFyIGZpbGwgPSBcIiMwMGFhYWFcIjtcblx0dmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmIEwgJWYgJWYgTCAlZiAlZiB6XCIsIHggLSBkeSwgeTEsIHggLSBkeSwgeTIsXG5cdFx0XHR4ICsgZHksIHkxLCB4ICsgZHksIHkyKTtcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOiBwYXRoU3RyaW5nLCBzdHJva2U6IFwibm9uZVwiLCBmaWxsOiBmaWxsLCAnY2xhc3MnOiB0aGlzLmFkZENsYXNzZXMoJ3N0YWZmJyl9KTtcblx0cGF0aFN0cmluZyA9IHNwcmludGYoXCJNICVmICVmIEwgJWYgJWYgTCAlZiAlZiBMICVmICVmIHpcIiwgeCAtIDIwLCB5MSwgeCAtIDIwLCB5MSszLFxuXHRcdHgsIHkxLCB4LCB5MSszKTtcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOiBwYXRoU3RyaW5nLCBzdHJva2U6IFwibm9uZVwiLCBmaWxsOiBmaWxsLCAnY2xhc3MnOiB0aGlzLmFkZENsYXNzZXMoJ3N0YWZmJyl9KTtcblx0cGF0aFN0cmluZyA9IHNwcmludGYoXCJNICVmICVmIEwgJWYgJWYgTCAlZiAlZiBMICVmICVmIHpcIiwgeCArIDIwLCB5MiwgeCArIDIwLCB5MiszLFxuXHRcdHgsIHkyLCB4LCB5MiszKTtcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOiBwYXRoU3RyaW5nLCBzdHJva2U6IFwibm9uZVwiLCBmaWxsOiBmaWxsLCAnY2xhc3MnOiB0aGlzLmFkZENsYXNzZXMoJ3N0YWZmJyl9KTtcblxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5SZW5kZXJlci5wcm90b3R5cGUuYWRkVG9SZWdyZXNzaW9uID0gZnVuY3Rpb24gKGVsKSB7XG5cdHZhciBib3g7XG5cdHRyeSB7XG5cdFx0Ym94ID0gZWwuZ2V0QkJveCgpO1xuXHR9IGNhdGNoKGUpIHtcblx0XHRib3ggPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblx0fVxuXHQvL3ZhciBzdHIgPSBcIihcIitib3gueCtcIixcIitib3gueStcIilbXCIrYm94LndpZHRoK1wiLFwiK2JveC5oZWlnaHQrXCJdIFwiXG5cdHZhciBzdHIgPSBlbC50eXBlICsgJyAnICsgYm94LnRvU3RyaW5nKCkgKyAnICc7XG5cdHZhciBhdHRycyA9IFtdO1xuXHRmb3IgKHZhciBrZXkgaW4gZWwuYXR0cnMpIHtcblx0XHRpZiAoZWwuYXR0cnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0aWYgKGtleSA9PT0gJ2NsYXNzJylcblx0XHRcdFx0c3RyID0gZWwuYXR0cnNba2V5XSArIFwiIFwiICsgc3RyO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRhdHRycy5wdXNoKGtleStcIjogXCIrZWwuYXR0cnNba2V5XSk7XG5cdFx0fVxuXHR9XG5cdGF0dHJzLnNvcnQoKTtcblx0c3RyICs9IFwieyBcIiArYXR0cnMuam9pbihcIiBcIikgKyBcIiB9XCI7XG5cdHRoaXMucmVncmVzc2lvbkxpbmVzLnB1c2goc3RyKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyZXI7XG4iLCIvLyAgICBhYmNfZW5ncmF2ZXJfY29udHJvbGxlci5qczogQ29udHJvbHMgdGhlIGVuZ3JhdmluZyBwcm9jZXNzIG9mIGFuIEFCQ0pTIGFic3RyYWN0IHN5bnRheCB0cmVlIGFzIHByb2R1Y2VkIGJ5IEFCQ0pTL3BhcnNlXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cblxuLypnbG9iYWwgTWF0aCAqL1xuXG52YXIgc3BhY2luZyA9IHJlcXVpcmUoJy4vYWJjX3NwYWNpbmcnKTtcbnZhciBBYnN0cmFjdEVuZ3JhdmVyID0gcmVxdWlyZSgnLi9hYmNfYWJzdHJhY3RfZW5ncmF2ZXInKTtcbnZhciBSZW5kZXJlciA9IHJlcXVpcmUoJy4vYWJjX3JlbmRlcmVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBDb250cm9scyB0aGUgZW5ncmF2aW5nIHByb2Nlc3MsIGZyb20gQUJDSlMgQWJzdHJhY3QgU3ludGF4IFRyZWUgKEFCQ0pTIEFTVCkgdG8gcmVuZGVyZWQgc2NvcmUgc2hlZXRcbiAqXG4gKiBDYWxsIGVuZ3JhdmVBQkMgdG8gcnVuIHRoZSBwcm9jZXNzLiBUaGlzIGNyZWF0ZXMgYSBncmFwaGVsZW1zIEFCQ0pTIEFic3RyYWN0IEVuZ3JhdmluZyBTdHJ1Y3R1cmUgKEFCQ0pTIEFFUykgdGhhdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGlzLnN0YWZmZ3JvdXBzXG4gKiB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGZpcnN0IGxhaWQgb3V0IChnaXZpbmcgdGhlIGdyYXBoZWxlbXMgeCBhbmQgeSBjb29yZGluYXRlcykgYW5kIHRoZW4gZHJhd24gb250byB0aGUgcmVuZGVyZXJcbiAqIGVhY2ggQUJDSlMgQUVTIHJlcHJlc2VudHMgYSBzaW5nbGUgc3RhZmZncm91cCAtIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBub3QgaW4gYSBzdGFmZmdyb3VwIGFyZSByZW5kZXJlZCBkaXJlY3RseSBieSB0aGUgY29udHJvbGxlclxuICpcbiAqIGVsZW1lbnRzIGluIEFCQ0pTIEFFUyBrbm93IHRoZWlyIFwic291cmNlIGRhdGFcIiBpbiB0aGUgQUJDSlMgQVNULCBhbmQgdGhlaXIgXCJ0YXJnZXQgc2hhcGVcIlxuICogaW4gdGhlIHJlbmRlcmVyIGZvciBoaWdobGlnaHRpbmcgcHVycG9zZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFwZXIgZGl2IGVsZW1lbnQgdGhhdCB3aWxsIHdyYXAgdGhlIFNWR1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBhbGwgdGhlIHBhcmFtcyAtLSBkb2N1bWVudGVkIG9uIGdpdGh1YiAvL1RPRE8tR0QgbW92ZSBzb21lIG9mIHRoYXQgZG9jdW1lbnRhdGlvbiBoZXJlXG4gKi9cbnZhciBFbmdyYXZlckNvbnRyb2xsZXIgPSBmdW5jdGlvbihwYXBlciwgcGFyYW1zKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgdGhpcy5yZXNwb25zaXZlID0gcGFyYW1zLnJlc3BvbnNpdmU7XG4gIHRoaXMuc3BhY2UgPSAzKnNwYWNpbmcuU1BBQ0U7XG4gIHRoaXMuc2NhbGUgPSBwYXJhbXMuc2NhbGUgPyBwYXJzZUZsb2F0KHBhcmFtcy5zY2FsZSkgOiAwO1xuICBpZiAoISh0aGlzLnNjYWxlID4gMC4xKSlcbiAgXHR0aGlzLnNjYWxlID0gdW5kZWZpbmVkO1xuXG5cdGlmIChwYXJhbXMuc3RhZmZ3aWR0aCkge1xuXHRcdC8vIE5vdGU6IE5vcm1hbGx5IGFsbCBtZWFzdXJlbWVudHMgdG8gdGhlIGVuZ3JhdmVyIGFyZSBpbiBQT0lOVFMuIEhvd2V2ZXIsIGlmIGEgcGVyc29uIGlzIGZvcm1hdHRpbmcgZm9yIHRoZVxuXHRcdC8vIHNjcmVlbiBhbmQgZGlyZWN0bHkgaW5wdXR0aW5nIHRoZSB3aWR0aCwgdGhlbiBpdCBpcyBtb3JlIGxvZ2ljYWwgdG8gaGF2ZSB0aGUgbWVhc3VyZW1lbnQgaW4gcGl4ZWxzLlxuXHRcdHRoaXMuc3RhZmZ3aWR0aFNjcmVlbiA9IHBhcmFtcy5zdGFmZndpZHRoO1xuXHRcdHRoaXMuc3RhZmZ3aWR0aFByaW50ID0gcGFyYW1zLnN0YWZmd2lkdGg7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5zdGFmZndpZHRoU2NyZWVuID0gNzQwOyAvLyBUT0RPLVBFUjogTm90IHN1cmUgd2hlcmUgdGhpcyBudW1iZXIgY29tZXMgZnJvbSwgYnV0IHRoaXMgaXMgaG93IGl0J3MgYWx3YXlzIGJlZW4uXG5cdFx0dGhpcy5zdGFmZndpZHRoUHJpbnQgPSA2ODA7IC8vIFRoZSBudW1iZXIgb2YgcGl4ZWxzIGluIDguNVwiLCBhZnRlciAxY20gb2YgbWFyZ2luIGhhcyBiZWVuIHJlbW92ZWQuXG5cdH1cbiAgdGhpcy5lZGl0YWJsZSA9IHBhcmFtcy5lZGl0YWJsZSB8fCBmYWxzZTtcblx0dGhpcy5saXN0ZW5lcnMgPSBbXTtcblx0aWYgKHBhcmFtcy5jbGlja0xpc3RlbmVyKVxuXHRcdHRoaXMuYWRkU2VsZWN0TGlzdGVuZXIocGFyYW1zLmNsaWNrTGlzdGVuZXIpO1xuXG4gIHRoaXMucmVuZGVyZXI9bmV3IFJlbmRlcmVyKHBhcGVyLCBwYXJhbXMucmVncmVzc2lvbiwgcGFyYW1zLmFkZF9jbGFzc2VzKTtcblx0dGhpcy5yZW5kZXJlci5zZXRQYWRkaW5nT3ZlcnJpZGUocGFyYW1zKTtcbiAgdGhpcy5yZW5kZXJlci5jb250cm9sbGVyID0gdGhpczsgLy8gVE9ETy1HRCBuZWVkZWQgZm9yIGhpZ2hsaWdodGluZ1xuXG5cdHRoaXMucmVzZXQoKTtcbn07XG5cbkVuZ3JhdmVyQ29udHJvbGxlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5zZWxlY3RlZCA9IFtdO1xuXHR0aGlzLmluZ3JvdXAgPSBmYWxzZTtcblx0dGhpcy5zdGFmZmdyb3VwcyA9IFtdO1xuXHR0aGlzLmxhc3RTdGFmZkdyb3VwSW5kZXggPSAtMTtcblx0aWYgKHRoaXMuZW5ncmF2ZXIpXG5cdFx0dGhpcy5lbmdyYXZlci5yZXNldCgpO1xuXHR0aGlzLmVuZ3JhdmVyID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlci5yZXNldCgpO1xufTtcblxuLyoqXG4gKiBydW4gdGhlIGVuZ3JhdmluZyBwcm9jZXNzXG4gKiBAcGFyYW0ge0FCQ0pTLlR1bmV8QUJDSlMuVHVuZVtdfSBhYmN0dW5lc1xuICovXG5FbmdyYXZlckNvbnRyb2xsZXIucHJvdG90eXBlLmVuZ3JhdmVBQkMgPSBmdW5jdGlvbihhYmN0dW5lcywgdHVuZU51bWJlcikge1xuICBpZiAoYWJjdHVuZXNbMF09PT11bmRlZmluZWQpIHtcbiAgICBhYmN0dW5lcyA9IFthYmN0dW5lc107XG4gIH1cblx0dGhpcy5yZXNldCgpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWJjdHVuZXMubGVuZ3RoOyBpKyspIHtcbiAgXHRpZiAodHVuZU51bWJlciA9PT0gdW5kZWZpbmVkKVxuICBcdFx0dHVuZU51bWJlciA9IGk7XG4gICAgdGhpcy5lbmdyYXZlVHVuZShhYmN0dW5lc1tpXSwgdHVuZU51bWJlcik7XG4gIH1cblx0aWYgKHRoaXMucmVuZGVyZXIuZG9SZWdyZXNzaW9uKVxuXHRcdHJldHVybiB0aGlzLnJlbmRlcmVyLnJlZ3Jlc3Npb25MaW5lcy5qb2luKFwiXFxuXCIpO1xufTtcblxuLyoqXG4gKiBTb21lIG9mIHRoZSBpdGVtcyBvbiB0aGUgcGFnZSBhcmUgbm90IHNjYWxlZCwgc28gYWRqdXN0IHRoZW0gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiBzY2FsaW5nIHRvIGNhbmNlbCBvdXQgdGhlIHNjYWxpbmcuXG4gKiBAcGFyYW0ge2Zsb2F0fSBzY2FsZVxuICovXG5FbmdyYXZlckNvbnRyb2xsZXIucHJvdG90eXBlLmFkanVzdE5vblNjYWxlZEl0ZW1zID0gZnVuY3Rpb24gKHNjYWxlKSB7XG5cdHRoaXMud2lkdGggLz0gc2NhbGU7XG5cdHRoaXMucmVuZGVyZXIuYWRqdXN0Tm9uU2NhbGVkSXRlbXMoc2NhbGUpO1xufTtcblxuRW5ncmF2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5nZXRNZWFzdXJlV2lkdGhzID0gZnVuY3Rpb24oYWJjVHVuZSkge1xuXHR0aGlzLnJlc2V0KCk7XG5cblx0dGhpcy5yZW5kZXJlci5saW5lTnVtYmVyID0gbnVsbDtcblxuXHR0aGlzLnJlbmRlcmVyLm5ld1R1bmUoYWJjVHVuZSk7XG5cdHRoaXMuZW5ncmF2ZXIgPSBuZXcgQWJzdHJhY3RFbmdyYXZlcih0aGlzLnJlbmRlcmVyLCAwLCB7IGJhZ3BpcGVzOiBhYmNUdW5lLmZvcm1hdHRpbmcuYmFncGlwZXMsIGZsYXRiZWFtczogYWJjVHVuZS5mb3JtYXR0aW5nLmZsYXRiZWFtcyB9KTtcblx0dGhpcy5lbmdyYXZlci5zZXRTdGVtSGVpZ2h0KHRoaXMucmVuZGVyZXIuc3BhY2luZy5zdGVtSGVpZ2h0KTtcblx0aWYgKGFiY1R1bmUuZm9ybWF0dGluZy5zdGFmZndpZHRoKSB7XG5cdFx0dGhpcy53aWR0aCA9IGFiY1R1bmUuZm9ybWF0dGluZy5zdGFmZndpZHRoICogMS4zMzsgLy8gVGhlIHdpZHRoIGlzIGV4cHJlc3NlZCBpbiBwdDsgY29udmVydCB0byBweC5cblx0fSBlbHNlIHtcblx0XHR0aGlzLndpZHRoID0gdGhpcy5yZW5kZXJlci5pc1ByaW50ID8gdGhpcy5zdGFmZndpZHRoUHJpbnQgOiB0aGlzLnN0YWZmd2lkdGhTY3JlZW47XG5cdH1cblxuXHR2YXIgc2NhbGUgPSBhYmNUdW5lLmZvcm1hdHRpbmcuc2NhbGUgPyBhYmNUdW5lLmZvcm1hdHRpbmcuc2NhbGUgOiB0aGlzLnNjYWxlO1xuXHRpZiAodGhpcy5yZXNwb25zaXZlID09PSBcInJlc2l6ZVwiKSAvLyBUaGUgcmVzaXppbmcgd2lsbCBtZXNzIHdpdGggdGhlIHNjYWxpbmcsIHNvIGp1c3QgZG9uJ3QgZG8gaXQgZXhwbGljaXRseS5cblx0XHRzY2FsZSA9IHVuZGVmaW5lZDtcblx0aWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHNjYWxlID0gdGhpcy5yZW5kZXJlci5pc1ByaW50ID8gMC43NSA6IDE7XG5cdHRoaXMuYWRqdXN0Tm9uU2NhbGVkSXRlbXMoc2NhbGUpO1xuXG5cdHZhciByZXQgPSB7IGxlZnQ6IDAsIG1lYXN1cmVXaWR0aHM6IFtdLCBoZWlnaHQ6IDAsIHRvdGFsOiAwIH07XG5cdC8vIFRPRE8tUEVSOiBuZWVkIHRvIGFkZCB0aGUgaGVpZ2h0IG9mIHRoZSB0aXRsZSBibG9jaywgdG9vLlxuXHRyZXQuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5wYWRkaW5nLnRvcCArIHRoaXMucmVuZGVyZXIuc3BhY2luZy5tdXNpYyArIHRoaXMucmVuZGVyZXIucGFkZGluZy5ib3R0b20gKyAyNDsgLy8gdGhlIDI0IGlzIHRoZSBlbXBpcmljYWwgdmFsdWUgYWRkZWQgdG8gdGhlIGJvdHRvbSBvZiBhbGwgdHVuZXMuXG5cdHZhciBkZWJ1ZyA9IGZhbHNlO1xuXHR2YXIgaGFzUHJpbnRlZFRlbXBvID0gZmFsc2U7XG5cdGZvcih2YXIgaT0wOyBpPGFiY1R1bmUubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgYWJjTGluZSA9IGFiY1R1bmUubGluZXNbaV07XG5cdFx0aWYgKGFiY0xpbmUuc3RhZmYpIHtcblx0XHRcdGFiY0xpbmUuc3RhZmZHcm91cCA9IHRoaXMuZW5ncmF2ZXIuY3JlYXRlQUJDTGluZShhYmNMaW5lLnN0YWZmLCAhaGFzUHJpbnRlZFRlbXBvID8gYWJjVHVuZS5tZXRhVGV4dC50ZW1wbzogbnVsbCk7XG5cblx0XHRcdGFiY0xpbmUuc3RhZmZHcm91cC5sYXlvdXQoMCwgdGhpcy5yZW5kZXJlciwgZGVidWcpO1xuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgdGhlIHZvaWNlcyBhcmUgbGFpZCBvdXQgc28gdGhhdCB0aGUgYmFyIGxpbmVzIGFyZSBldmVuIHdpdGggZWFjaCBvdGhlci4gU28gd2UganVzdCBuZWVkIHRvIGdldCB0aGUgcGxhY2VtZW50IG9mIHRoZSBmaXJzdCB2b2ljZS5cblx0XHRcdGlmIChhYmNMaW5lLnN0YWZmR3JvdXAudm9pY2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dmFyIHZvaWNlID0gYWJjTGluZS5zdGFmZkdyb3VwLnZvaWNlc1swXTtcblx0XHRcdFx0dmFyIGZvdW5kTm90U3RhZmZFeHRyYSA9IGZhbHNlO1xuXHRcdFx0XHR2YXIgbGFzdFhQb3NpdGlvbiA9IDA7XG5cdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgdm9pY2UuY2hpbGRyZW4ubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHR2YXIgY2hpbGQgPSB2b2ljZS5jaGlsZHJlbltrXTtcblx0XHRcdFx0XHRpZiAoIWZvdW5kTm90U3RhZmZFeHRyYSAmJiAhY2hpbGQuaXNDbGVmICYmICFjaGlsZC5pc0tleVNpZykge1xuXHRcdFx0XHRcdFx0Zm91bmROb3RTdGFmZkV4dHJhID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHJldC5sZWZ0ID0gY2hpbGQueDtcblx0XHRcdFx0XHRcdGxhc3RYUG9zaXRpb24gPSBjaGlsZC54O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2hpbGQudHlwZSA9PT0gJ2JhcicpIHtcblx0XHRcdFx0XHRcdHJldC5tZWFzdXJlV2lkdGhzLnB1c2goY2hpbGQueCAtIGxhc3RYUG9zaXRpb24pO1xuXHRcdFx0XHRcdFx0cmV0LnRvdGFsICs9IChjaGlsZC54IC0gbGFzdFhQb3NpdGlvbik7XG5cdFx0XHRcdFx0XHRsYXN0WFBvc2l0aW9uID0gY2hpbGQueDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGhhc1ByaW50ZWRUZW1wbyA9IHRydWU7XG5cdFx0XHRyZXQuaGVpZ2h0ICs9IGFiY0xpbmUuc3RhZmZHcm91cC5jYWxjSGVpZ2h0KCkgKiBzcGFjaW5nLlNURVA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXQ7XG59O1xuXG4vKipcbiAqIFJ1biB0aGUgZW5ncmF2aW5nIHByb2Nlc3Mgb24gYSBzaW5nbGUgdHVuZVxuICogQHBhcmFtIHtBQkNKUy5UdW5lfSBhYmN0dW5lXG4gKi9cbkVuZ3JhdmVyQ29udHJvbGxlci5wcm90b3R5cGUuZW5ncmF2ZVR1bmUgPSBmdW5jdGlvbiAoYWJjdHVuZSwgdHVuZU51bWJlcikge1xuXHR0aGlzLnJlbmRlcmVyLmxpbmVOdW1iZXIgPSBudWxsO1xuXG5cdHRoaXMucmVuZGVyZXIubmV3VHVuZShhYmN0dW5lKTtcblx0dGhpcy5lbmdyYXZlciA9IG5ldyBBYnN0cmFjdEVuZ3JhdmVyKHRoaXMucmVuZGVyZXIsIHR1bmVOdW1iZXIsIHsgYmFncGlwZXM6IGFiY3R1bmUuZm9ybWF0dGluZy5iYWdwaXBlcywgZmxhdGJlYW1zOiBhYmN0dW5lLmZvcm1hdHRpbmcuZmxhdGJlYW1zIH0pO1xuXHR0aGlzLmVuZ3JhdmVyLnNldFN0ZW1IZWlnaHQodGhpcy5yZW5kZXJlci5zcGFjaW5nLnN0ZW1IZWlnaHQpO1xuXHR0aGlzLmVuZ3JhdmVyLm1lYXN1cmVMZW5ndGggPSBhYmN0dW5lLmdldE1ldGVyRnJhY3Rpb24oKS5udW0vYWJjdHVuZS5nZXRNZXRlckZyYWN0aW9uKCkuZGVuO1xuXHRpZiAoYWJjdHVuZS5mb3JtYXR0aW5nLnN0YWZmd2lkdGgpIHtcblx0XHR0aGlzLndpZHRoID0gYWJjdHVuZS5mb3JtYXR0aW5nLnN0YWZmd2lkdGggKiAxLjMzOyAvLyBUaGUgd2lkdGggaXMgZXhwcmVzc2VkIGluIHB0OyBjb252ZXJ0IHRvIHB4LlxuXHR9IGVsc2Uge1xuXHRcdHRoaXMud2lkdGggPSB0aGlzLnJlbmRlcmVyLmlzUHJpbnQgPyB0aGlzLnN0YWZmd2lkdGhQcmludCA6IHRoaXMuc3RhZmZ3aWR0aFNjcmVlbjtcblx0fVxuXG5cdHZhciBzY2FsZSA9IGFiY3R1bmUuZm9ybWF0dGluZy5zY2FsZSA/IGFiY3R1bmUuZm9ybWF0dGluZy5zY2FsZSA6IHRoaXMuc2NhbGU7XG5cdGlmICh0aGlzLnJlc3BvbnNpdmUgPT09IFwicmVzaXplXCIpIC8vIFRoZSByZXNpemluZyB3aWxsIG1lc3Mgd2l0aCB0aGUgc2NhbGluZywgc28ganVzdCBkb24ndCBkbyBpdCBleHBsaWNpdGx5LlxuXHRcdHNjYWxlID0gdW5kZWZpbmVkO1xuXHRpZiAoc2NhbGUgPT09IHVuZGVmaW5lZCkgc2NhbGUgPSB0aGlzLnJlbmRlcmVyLmlzUHJpbnQgPyAwLjc1IDogMTtcblx0dGhpcy5hZGp1c3ROb25TY2FsZWRJdGVtcyhzY2FsZSk7XG5cblx0Ly8gR2VuZXJhdGUgdGhlIHJhdyBzdGFmZiBsaW5lIGRhdGFcblx0dmFyIGk7XG5cdHZhciBhYmNMaW5lO1xuXHR2YXIgaGFzUHJpbnRlZFRlbXBvID0gZmFsc2U7XG5cdGZvcihpPTA7IGk8YWJjdHVuZS5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdGFiY0xpbmUgPSBhYmN0dW5lLmxpbmVzW2ldO1xuXHRcdGlmIChhYmNMaW5lLnN0YWZmKSB7XG5cdFx0XHRhYmNMaW5lLnN0YWZmR3JvdXAgPSB0aGlzLmVuZ3JhdmVyLmNyZWF0ZUFCQ0xpbmUoYWJjTGluZS5zdGFmZiwgIWhhc1ByaW50ZWRUZW1wbyA/IGFiY3R1bmUubWV0YVRleHQudGVtcG86IG51bGwpO1xuXHRcdFx0aGFzUHJpbnRlZFRlbXBvID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvLyBBZGp1c3QgdGhlIHgtY29vcmRpbmF0ZXMgdG8gdGhlaXIgYWJzb2x1dGUgcG9zaXRpb25zXG5cdHZhciBtYXhXaWR0aCA9IHRoaXMud2lkdGg7XG5cdGZvcihpPTA7IGk8YWJjdHVuZS5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdGFiY0xpbmUgPSBhYmN0dW5lLmxpbmVzW2ldO1xuXHRcdGlmIChhYmNMaW5lLnN0YWZmKSB7XG5cdFx0XHR0aGlzLnNldFhTcGFjaW5nKGFiY0xpbmUuc3RhZmZHcm91cCwgYWJjdHVuZS5mb3JtYXR0aW5nLCBpID09PSBhYmN0dW5lLmxpbmVzLmxlbmd0aCAtIDEsIGZhbHNlKTtcblx0XHRcdGlmIChhYmNMaW5lLnN0YWZmR3JvdXAudyA+IG1heFdpZHRoKSBtYXhXaWR0aCA9IGFiY0xpbmUuc3RhZmZHcm91cC53O1xuXHRcdH1cblx0fVxuXG5cdC8vIExheW91dCB0aGUgYmVhbXMgYW5kIGFkZCB0aGUgc3RlbXMgdG8gdGhlIGJlYW1lZCBub3Rlcy5cblx0Zm9yKGk9MDsgaTxhYmN0dW5lLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YWJjTGluZSA9IGFiY3R1bmUubGluZXNbaV07XG5cdFx0aWYgKGFiY0xpbmUuc3RhZmZHcm91cCAmJiBhYmNMaW5lLnN0YWZmR3JvdXAudm9pY2VzKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGFiY0xpbmUuc3RhZmZHcm91cC52b2ljZXMubGVuZ3RoOyBqKyspXG5cdFx0XHRcdGFiY0xpbmUuc3RhZmZHcm91cC52b2ljZXNbal0ubGF5b3V0QmVhbXMoKTtcblx0XHRcdGFiY0xpbmUuc3RhZmZHcm91cC5zZXRVcHBlckFuZExvd2VyRWxlbWVudHModGhpcy5yZW5kZXJlcik7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBzdGFmZiBzcGFjaW5nXG5cdC8vIFRPRE8tUEVSOiB3ZSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZG8gdGhpcyBieSB0aGUgdGltZSB3ZSBjYWxsZWQgc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzLCBidXQgZm9yIHNvbWUgcmVhc29uIHRoZSBcImJvdHRvbVwiIGVsZW1lbnQgc2VlbXMgdG8gYmUgc2V0IGFzIGEgc2lkZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGUgWCBzcGFjaW5nLlxuXHRmb3IoaT0wOyBpPGFiY3R1bmUubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRhYmNMaW5lID0gYWJjdHVuZS5saW5lc1tpXTtcblx0XHRpZiAoYWJjTGluZS5zdGFmZkdyb3VwKSB7XG5cdFx0XHRhYmNMaW5lLnN0YWZmR3JvdXAuaGVpZ2h0ID0gYWJjTGluZS5zdGFmZkdyb3VwLmNhbGNIZWlnaHQoKTtcblx0XHR9XG5cdH1cblxuXHQvLyBEbyBhbGwgdGhlIHdyaXRpbmcgdG8gb3V0cHV0XG5cdHRoaXMucmVuZGVyZXIudG9wTWFyZ2luKGFiY3R1bmUpO1xuXHQvL3RoaXMucmVuZGVyZXIucHJpbnRIb3Jpem9udGFsTGluZSh0aGlzLndpZHRoICsgdGhpcy5yZW5kZXJlci5wYWRkaW5nLmxlZnQgKyB0aGlzLnJlbmRlcmVyLnBhZGRpbmcucmlnaHQpO1xuXHR0aGlzLnJlbmRlcmVyLmVuZ3JhdmVUb3BUZXh0KHRoaXMud2lkdGgsIGFiY3R1bmUpO1xuXHR0aGlzLnJlbmRlcmVyLmFkZE11c2ljUGFkZGluZygpO1xuXG5cdHRoaXMuc3RhZmZncm91cHMgPSBbXTtcblx0dGhpcy5sYXN0U3RhZmZHcm91cEluZGV4ID0gLTE7XG5cdGZvciAodmFyIGxpbmUgPSAwOyBsaW5lIDwgYWJjdHVuZS5saW5lcy5sZW5ndGg7IGxpbmUrKykge1xuXHRcdHRoaXMucmVuZGVyZXIubGluZU51bWJlciA9IGxpbmU7XG5cdFx0YWJjTGluZSA9IGFiY3R1bmUubGluZXNbbGluZV07XG5cdFx0aWYgKGFiY0xpbmUuc3RhZmYpIHtcblx0XHRcdHRoaXMuZW5ncmF2ZVN0YWZmTGluZShhYmNMaW5lLnN0YWZmR3JvdXApO1xuXHRcdH0gZWxzZSBpZiAoYWJjTGluZS5zdWJ0aXRsZSAmJiBsaW5lICE9PSAwKSB7XG5cdFx0XHR0aGlzLnJlbmRlcmVyLm91dHB1dFN1YnRpdGxlKHRoaXMud2lkdGgsIGFiY0xpbmUuc3VidGl0bGUpO1xuXHRcdH0gZWxzZSBpZiAoYWJjTGluZS50ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMucmVuZGVyZXIub3V0cHV0RnJlZVRleHQoYWJjTGluZS50ZXh0LCBhYmNMaW5lLnZza2lwKTtcblx0XHR9IGVsc2UgaWYgKGFiY0xpbmUuc2VwYXJhdG9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMucmVuZGVyZXIub3V0cHV0U2VwYXJhdG9yKGFiY0xpbmUuc2VwYXJhdG9yKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnJlbmRlcmVyLm1vdmVZKDI0KTsgLy8gVE9ETy1QRVI6IEVtcGlyaWNhbGx5IGRpc2NvdmVyZWQuIFdoYXQgdmFyaWFibGUgc2hvdWxkIHRoaXMgYmU/XG5cdHRoaXMucmVuZGVyZXIuZW5ncmF2ZUV4dHJhVGV4dCh0aGlzLndpZHRoLCBhYmN0dW5lKTtcblx0dGhpcy5yZW5kZXJlci5zZXRQYXBlclNpemUobWF4V2lkdGgsIHNjYWxlLCB0aGlzLnJlc3BvbnNpdmUpO1xufTtcblxuZnVuY3Rpb24gY2FsY0hvcml6b250YWxTcGFjaW5nKGlzTGFzdExpbmUsIHN0cmV0Y2hMYXN0LCB0YXJnZXRXaWR0aCwgbGluZVdpZHRoLCBzcGFjaW5nLCBzcGFjaW5nVW5pdHMsIG1pblNwYWNlKSB7XG5cdC8vIFRPRE8tUEVSOiBUaGlzIHVzZWQgdG8gc3RyZXRjaCB0aGUgZmlyc3QgbGluZSB3aGVuIGl0IGlzIHRoZSBvbmx5IGxpbmUsIGJ1dCBJJ20gbm90IHN1cmUgd2h5LiBhYmNtMnBzIGRvZXNuJ3QgZG8gdGhhdFxuXHRpZiAoaXNMYXN0TGluZSAmJiBsaW5lV2lkdGggLyB0YXJnZXRXaWR0aCA8IDAuNjYgJiYgIXN0cmV0Y2hMYXN0KSByZXR1cm4gbnVsbDsgLy8gZG9uJ3Qgc3RyZXRjaCBsYXN0IGxpbmUgdG9vIG11Y2hcblx0aWYgKE1hdGguYWJzKHRhcmdldFdpZHRoLWxpbmVXaWR0aCkgPCAyKSByZXR1cm4gbnVsbDsgLy8gaWYgd2UgYXJlIGFscmVhZHkgbmVhciB0aGUgdGFyZ2V0IHdpZHRoLCB3ZSdyZSBkb25lLlxuXHR2YXIgcmVsU3BhY2UgPSBzcGFjaW5nVW5pdHMgKiBzcGFjaW5nO1xuXHR2YXIgY29uc3RTcGFjZSA9IGxpbmVXaWR0aCAtIHJlbFNwYWNlO1xuXHRpZiAoc3BhY2luZ1VuaXRzID4gMCkge1xuXHRcdHNwYWNpbmcgPSAodGFyZ2V0V2lkdGggLSBjb25zdFNwYWNlKSAvIHNwYWNpbmdVbml0cztcblx0XHRpZiAoc3BhY2luZyAqIG1pblNwYWNlID4gNTApIHtcblx0XHRcdHNwYWNpbmcgPSA1MCAvIG1pblNwYWNlO1xuXHRcdH1cblx0XHRyZXR1cm4gc3BhY2luZztcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBEbyB0aGUgeC1heGlzIHBvc2l0aW9uaW5nIGZvciBhIHNpbmdsZSBsaW5lIChhIGdyb3VwIG9mIHJlbGF0ZWQgc3RhZmZzKVxuICogQHBhcmFtIHtBQkNKUy5UdW5lfSBhYmN0dW5lIGFuIEFCQ0pTIEFTVFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWZmR3JvdXAgYW4gc3RhZmZHcm91cFxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1hdHRpbmcgYW4gZm9ybWF0dGluZ1xuICogQHBhcmFtIHtib29sZWFufSBpc0xhc3RMaW5lIGlzIHRoaXMgdGhlIGxhc3QgbGluZSB0byBiZSBwcmludGVkP1xuICogQHByaXZhdGVcbiAqL1xuRW5ncmF2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5zZXRYU3BhY2luZyA9IGZ1bmN0aW9uIChzdGFmZkdyb3VwLCBmb3JtYXR0aW5nLCBpc0xhc3RMaW5lLCBkZWJ1Zykge1xuICAgdmFyIG5ld3NwYWNlID0gdGhpcy5zcGFjZTtcbiAgZm9yICh2YXIgaXQgPSAwOyBpdCA8IDg7IGl0KyspIHsgLy8gVE9ETy1QRVI6IHNob3VsZG4ndCBuZWVkIG11bHRpcGxlIHBhc3NlcywgYnV0IGVhY2ggcGFzcyBnZXRzIGl0IGNsb3NlciB0byB0aGUgcmlnaHQgc3BhY2luZy4gKE9ubHkgYWZmZWN0cyBsb25nIGxpbmVzOiBub3JtYWwgbGluZXMgYnJlYWsgb3V0IG9mIHRoaXMgbG9vcCBxdWlja2x5Lilcblx0ICB2YXIgcmV0ID0gc3RhZmZHcm91cC5sYXlvdXQobmV3c3BhY2UsIHRoaXMucmVuZGVyZXIsIGRlYnVnKTtcblx0ICB2YXIgc3RyZXRjaExhc3QgPSBmb3JtYXR0aW5nLnN0cmV0Y2hsYXN0ID8gZm9ybWF0dGluZy5zdHJldGNobGFzdCA6IGZhbHNlO1xuXHRcdG5ld3NwYWNlID0gY2FsY0hvcml6b250YWxTcGFjaW5nKGlzTGFzdExpbmUsIHN0cmV0Y2hMYXN0LCB0aGlzLndpZHRoK3RoaXMucmVuZGVyZXIucGFkZGluZy5sZWZ0LCBzdGFmZkdyb3VwLncsIG5ld3NwYWNlLCByZXQuc3BhY2luZ1VuaXRzLCByZXQubWluU3BhY2UpO1xuXHRcdGlmIChkZWJ1Zylcblx0XHRcdGNvbnNvbGUubG9nKFwic2V0WFNwYWNlXCIsIGl0LCBzdGFmZkdyb3VwLncsIG5ld3NwYWNlLCBzdGFmZkdyb3VwLm1pbnNwYWNlKTtcblx0XHRpZiAobmV3c3BhY2UgPT09IG51bGwpIGJyZWFrO1xuICB9XG5cdGNlbnRlcldob2xlUmVzdHMoc3RhZmZHcm91cC52b2ljZXMpO1xuXHQvL3RoaXMucmVuZGVyZXIucHJpbnRIb3Jpem9udGFsTGluZSh0aGlzLndpZHRoKTtcbn07XG5cbi8qKlxuICogRW5ncmF2ZSBhIHNpbmdsZSBsaW5lIChhIGdyb3VwIG9mIHJlbGF0ZWQgc3RhZmZzKVxuICogQHBhcmFtIHtBQkNKUy5UdW5lfSBhYmN0dW5lIGFuIEFCQ0pTIEFTVFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWZmR3JvdXAgYW4gc3RhZmZHcm91cFxuICogQHByaXZhdGVcbiAqL1xuRW5ncmF2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5lbmdyYXZlU3RhZmZMaW5lID0gZnVuY3Rpb24gKHN0YWZmR3JvdXApIHtcblx0aWYgKHRoaXMubGFzdFN0YWZmR3JvdXBJbmRleCA+IC0xKVxuXHRcdHRoaXMucmVuZGVyZXIuYWRkU3RhZmZQYWRkaW5nKHRoaXMuc3RhZmZncm91cHNbdGhpcy5sYXN0U3RhZmZHcm91cEluZGV4XSwgc3RhZmZHcm91cCk7XG5cdHRoaXMucmVuZGVyZXIudm9pY2VOdW1iZXIgPSBudWxsO1xuXHRzdGFmZkdyb3VwLmRyYXcodGhpcy5yZW5kZXJlcik7XG5cdHZhciBoZWlnaHQgPSBzdGFmZkdyb3VwLmhlaWdodCAqIHNwYWNpbmcuU1RFUDtcblx0Ly90aGlzLnJlbmRlcmVyLnByaW50VmVydGljYWxMaW5lKHRoaXMud2lkdGgrdGhpcy5yZW5kZXJlci5wYWRkaW5nLmxlZnQsIHRoaXMucmVuZGVyZXIueSwgdGhpcy5yZW5kZXJlci55K2hlaWdodCk7XG4gIHRoaXMuc3RhZmZncm91cHNbdGhpcy5zdGFmZmdyb3Vwcy5sZW5ndGhdID0gc3RhZmZHcm91cDtcblx0dGhpcy5sYXN0U3RhZmZHcm91cEluZGV4ID0gdGhpcy5zdGFmZmdyb3Vwcy5sZW5ndGgtMTtcblx0dGhpcy5yZW5kZXJlci55ICs9IGhlaWdodDtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGJ5IHRoZSBBYnN0cmFjdCBFbmdyYXZpbmcgU3RydWN0dXJlIG9yIGFueSBvdGhlciAoZS5nLiBtaWRpIHBsYXliYWNrKSB0byBzYXkgaXQgd2FzIHNlbGVjdGVkIChub3RlaGVhZCBjbGlja2VkIG9uKVxuICogQHByb3RlY3RlZFxuICovXG5FbmdyYXZlckNvbnRyb2xsZXIucHJvdG90eXBlLm5vdGlmeVNlbGVjdCA9IGZ1bmN0aW9uIChhYnNlbGVtLCB0dW5lTnVtYmVyLCBjbGFzc2VzKSB7XG4gIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgaWYgKGFic2VsZW0uaGlnaGxpZ2h0KSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IFthYnNlbGVtXTtcbiAgICBhYnNlbGVtLmhpZ2hsaWdodCgpO1xuICB9XG4gIHZhciBhYmNlbGVtID0gYWJzZWxlbS5hYmNlbGVtIHx8IHt9O1xuICBmb3IgKHZhciBpPTA7IGk8dGhpcy5saXN0ZW5lcnMubGVuZ3RoO2krKykge1xuXHQgIHRoaXMubGlzdGVuZXJzW2ldKGFiY2VsZW0sIHR1bmVOdW1iZXIsIGNsYXNzZXMpO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCBieSB0aGUgQWJzdHJhY3QgRW5ncmF2aW5nIFN0cnVjdHVyZSB0byBzYXkgaXQgd2FzIG1vZGlmaWVkIChlLmcuIG5vdGVoZWFkIGRyYWdnZWQpXG4gKiBAcHJvdGVjdGVkXG4gKi9cbi8vIEVuZ3JhdmVyQ29udHJvbGxlci5wcm90b3R5cGUubm90aWZ5Q2hhbmdlID0gZnVuY3Rpb24gKC8qYWJzZWxlbSovKSB7XG4vLyAgIGZvciAodmFyIGk9MDsgaTx0aGlzLmxpc3RlbmVycy5sZW5ndGg7aSsrKSB7XG4vLyAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2ldLm1vZGVsQ2hhbmdlZClcbi8vICAgICAgIHRoaXMubGlzdGVuZXJzW2ldLm1vZGVsQ2hhbmdlZCgpO1xuLy8gICB9XG4vLyB9O1xuXG4vKipcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5FbmdyYXZlckNvbnRyb2xsZXIucHJvdG90eXBlLmNsZWFyU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpPTA7aTx0aGlzLnNlbGVjdGVkLmxlbmd0aDtpKyspIHtcbiAgICB0aGlzLnNlbGVjdGVkW2ldLnVuaGlnaGxpZ2h0KCk7XG4gIH1cbiAgdGhpcy5zZWxlY3RlZCA9IFtdO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gbGlzdGVuZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyLm1vZGVsQ2hhbmdlZCB0aGUgbW9kZWwgdGhlIGxpc3RlbmVyIHBhc3NlZCB0byB0aGlzIGNvbnRyb2xsZXIgaGFzIGNoYW5nZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyLmhpZ2hsaWdodCB0aGUgYWJjZWxlbSBvZiB0aGUgbW9kZWwgdGhlIGxpc3RlbmVyIHBhc3NlZCB0byB0aGlzIGNvbnRyb2xsZXIgc2hvdWxkIGJlIGhpZ2hsaWdodGVkXG4gKi9cbkVuZ3JhdmVyQ29udHJvbGxlci5wcm90b3R5cGUuYWRkU2VsZWN0TGlzdGVuZXIgPSBmdW5jdGlvbiAoY2xpY2tMaXN0ZW5lcikge1xuICB0aGlzLmxpc3RlbmVyc1t0aGlzLmxpc3RlbmVycy5sZW5ndGhdID0gY2xpY2tMaXN0ZW5lcjtcbn07XG5cbi8qKlxuICogVGVsbCB0aGUgY29udHJvbGxlciB0byBoaWdobGlnaHQgc29tZSBub3RlaGVhZHMgb2YgaXRzIGVuZ3JhdmVkIHNjb3JlXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgdGhlIGNoYXJhY3RlciBpbiB0aGUgc291cmNlIGFiYyB3aGVyZSBoaWdobGlnaHRpbmcgc2hvdWxkIHN0YXJ0XG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIHNvdXJjZSBhYmMgd2hlcmUgaGlnaGxpZ2h0aW5nIHNob3VsZCBlbmRcbiAqL1xuRW5ncmF2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5yYW5nZUhpZ2hsaWdodCA9IGZ1bmN0aW9uKHN0YXJ0LGVuZClcbntcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgZm9yICh2YXIgbGluZT0wO2xpbmU8dGhpcy5zdGFmZmdyb3Vwcy5sZW5ndGg7IGxpbmUrKykge1xuXHR2YXIgdm9pY2VzID0gdGhpcy5zdGFmZmdyb3Vwc1tsaW5lXS52b2ljZXM7XG5cdGZvciAodmFyIHZvaWNlPTA7dm9pY2U8dm9pY2VzLmxlbmd0aDt2b2ljZSsrKSB7XG5cdCAgICB2YXIgZWxlbXMgPSB2b2ljZXNbdm9pY2VdLmNoaWxkcmVuO1xuXHQgICAgZm9yICh2YXIgZWxlbT0wOyBlbGVtPGVsZW1zLmxlbmd0aDsgZWxlbSsrKSB7XG5cdFx0Ly8gU2luY2UgdGhlIHVzZXIgY2FuIGhpZ2hsaWdodCBtb3JlIHRoYW4gYW4gZWxlbWVudCwgb3IgcGFydCBvZiBhbiBlbGVtZW50LCBhIGhpdCBpcyBpZiBhbnkgb2YgdGhlIGVuZHBvaW50c1xuXHRcdC8vIGlzIGluc2lkZSB0aGUgb3RoZXIgcmFuZ2UuXG5cdFx0dmFyIGVsU3RhcnQgPSBlbGVtc1tlbGVtXS5hYmNlbGVtLnN0YXJ0Q2hhcjtcblx0XHR2YXIgZWxFbmQgPSBlbGVtc1tlbGVtXS5hYmNlbGVtLmVuZENoYXI7XG5cdFx0aWYgKChlbmQ+ZWxTdGFydCAmJiBzdGFydDxlbEVuZCkgfHwgKChlbmQ9PT1zdGFydCkgJiYgZW5kPT09ZWxFbmQpKSB7XG5cdFx0ICAgIC8vXHRcdGlmIChlbGVtc1tlbGVtXS5hYmNlbGVtLnN0YXJ0Q2hhcj49c3RhcnQgJiYgZWxlbXNbZWxlbV0uYWJjZWxlbS5lbmRDaGFyPD1lbmQpIHtcblx0XHQgICAgdGhpcy5zZWxlY3RlZFt0aGlzLnNlbGVjdGVkLmxlbmd0aF09ZWxlbXNbZWxlbV07XG5cdFx0ICAgIGVsZW1zW2VsZW1dLmhpZ2hsaWdodCgpO1xuXHRcdH1cblx0ICAgIH1cblx0fVxuICAgIH1cbn07XG5cblxuZnVuY3Rpb24gY2VudGVyV2hvbGVSZXN0cyh2b2ljZXMpIHtcblx0Ly8gd2hvbGUgcmVzdHMgYXJlIGEgc3BlY2lhbCBjYXNlOiBpZiB0aGV5IGFyZSBieSB0aGVtc2VsdmVzIGluIGEgbWVhc3VyZSwgdGhlbiB0aGV5IHNob3VsZCBiZSBjZW50ZXJlZC5cblx0Ly8gKElmIHRoZXkgYXJlIG5vdCBieSB0aGVtc2VsdmVzLCB0aGF0IGlzIHByb2JhYmx5IGEgdXNlciBlcnJvciwgYnV0IHdlJ2xsIGp1c3QgY2VudGVyIGl0IGJldHdlZW4gdGhlIHR3byBpdGVtcyB0byBlaXRoZXIgc2lkZSBvZiBpdC4pXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHZvaWNlID0gdm9pY2VzW2ldO1xuXHRcdC8vIExvb2sgdGhyb3VnaCBhbGwgb2YgdGhlIGVsZW1lbnRzIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGFuZCBsYXN0LiBJZiB0aGUgd2hvbGUgbm90ZSBhcHBlYXJzIHRoZXJlIHRoZW4gdGhlcmUgaXNuJ3QgYW55dGhpbmcgdG8gY2VudGVyIGl0IGJldHdlZW4gYW55d2F5LlxuXHRcdGZvciAodmFyIGogPSAxOyBqIDwgdm9pY2UuY2hpbGRyZW4ubGVuZ3RoLTE7IGorKykge1xuXHRcdFx0dmFyIGFic0VsZW0gPSB2b2ljZS5jaGlsZHJlbltqXTtcblx0XHRcdGlmIChhYnNFbGVtLmFiY2VsZW0ucmVzdCAmJiAoYWJzRWxlbS5hYmNlbGVtLnJlc3QudHlwZSA9PT0gJ3dob2xlJyB8fCBhYnNFbGVtLmFiY2VsZW0ucmVzdC50eXBlID09PSAnbXVsdGltZWFzdXJlJykpIHtcblx0XHRcdFx0dmFyIGJlZm9yZSA9IHZvaWNlLmNoaWxkcmVuW2otMV07XG5cdFx0XHRcdHZhciBhZnRlciA9IHZvaWNlLmNoaWxkcmVuW2orMV07XG5cdFx0XHRcdHZhciBtaWRwb2ludCA9IChhZnRlci54IC0gYmVmb3JlLngpIC8gMiArIGJlZm9yZS54O1xuXHRcdFx0XHRhYnNFbGVtLnggPSBtaWRwb2ludCAtIGFic0VsZW0udyAvIDI7XG5cdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgYWJzRWxlbS5jaGlsZHJlbi5sZW5ndGg7IGsrKylcblx0XHRcdFx0XHRhYnNFbGVtLmNoaWxkcmVuW2tdLnggPSBhYnNFbGVtLng7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW5ncmF2ZXJDb250cm9sbGVyO1xuIiwidmFyIHR1bmVib29rID0gcmVxdWlyZSgnLi9hYmNfdHVuZWJvb2snKTtcbnZhciBUdW5lID0gcmVxdWlyZSgnLi4vZGF0YS9hYmNfdHVuZScpO1xuXG52YXIgRW5ncmF2ZXJDb250cm9sbGVyID0gcmVxdWlyZSgnLi4vd3JpdGUvYWJjX2VuZ3JhdmVyX2NvbnRyb2xsZXInKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19wYXJzZScpO1xudmFyIHdyYXAgPSByZXF1aXJlKCcuLi9wYXJzZS93cmFwX2xpbmVzJyk7XG5cbnZhciByZXNpemVEaXZzID0ge307XG5mdW5jdGlvbiByZXNpemVPdXRlcigpIHtcbiAgICB2YXIgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBmb3IgKHZhciBpZCBpbiByZXNpemVEaXZzKSB7XG4gICAgICAgIGlmIChyZXNpemVEaXZzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgdmFyIG91dGVyID0gcmVzaXplRGl2c1tpZF07XG4gICAgICAgICAgICB2YXIgb2ZzID0gb3V0ZXIub2Zmc2V0TGVmdDtcbiAgICAgICAgICAgIHdpZHRoIC09IG9mcyAqIDI7XG4gICAgICAgICAgICBvdXRlci5zdHlsZS53aWR0aCA9IHdpZHRoICsgXCJweFwiO1xuICAgICAgICB9XG4gICAgfVxufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVPdXRlcik7XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uQ2hhbmdlXCIsIHJlc2l6ZU91dGVyKTtcblxuZnVuY3Rpb24gcmVuZGVyT25lKGRpdiwgdHVuZSwgcGFyYW1zLCB0dW5lTnVtYmVyKSB7XG4gICAgaWYgKHBhcmFtcy52aWV3cG9ydEhvcml6b250YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGlubmVyIGRpdiB0aGF0IGhvbGRzIHRoZSBtdXNpYywgc28gdGhhdCB0aGUgcGFzc2VkIGluIGRpdiB3aWxsIGJlIHRoZSB2aWV3cG9ydC5cbiAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiYWJjanMtaW5uZXJcIj48L2Rpdj4nO1xuICAgICAgICBpZiAocGFyYW1zLnNjcm9sbEhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvd1ggPSBcImF1dG9cIjtcbiAgICAgICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvd1kgPSBcImhpZGRlblwiO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgICAgIHJlc2l6ZURpdnNbZGl2LmlkXSA9IGRpdjsgLy8gV2UgdXNlIGEgaGFzaCBvbiB0aGUgZWxlbWVudCdzIGlkIHNvIHRoYXQgbXVsdGlwbGUgY2FsbHMgd29uJ3Qga2VlcCBhZGRpbmcgdG8gdGhlIGxpc3QuXG4gICAgICAgIGRpdiA9IGRpdi5jaGlsZHJlblswXTsgLy8gVGhlIG11c2ljIHNob3VsZCBiZSByZW5kZXJlZCBpbiB0aGUgaW5uZXIgZGl2LlxuICAgIH1cbiAgICBlbHNlIGlmIChwYXJhbXMudmlld3BvcnRWZXJ0aWNhbCkge1xuICAgICAgICAvLyBDcmVhdGUgYW4gaW5uZXIgZGl2IHRoYXQgaG9sZHMgdGhlIG11c2ljLCBzbyB0aGF0IHRoZSBwYXNzZWQgaW4gZGl2IHdpbGwgYmUgdGhlIHZpZXdwb3J0LlxuICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJhYmNqcy1pbm5lciBzY3JvbGwtYW1vdW50XCI+PC9kaXY+JztcbiAgICAgICAgZGl2LnN0eWxlLm92ZXJmbG93WCA9IFwiaGlkZGVuXCI7XG4gICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvd1kgPSBcImF1dG9cIjtcbiAgICAgICAgZGl2ID0gZGl2LmNoaWxkcmVuWzBdOyAvLyBUaGUgbXVzaWMgc2hvdWxkIGJlIHJlbmRlcmVkIGluIHRoZSBpbm5lciBkaXYuXG4gICAgfVxuICAgIGVsc2Vcblx0ICAgIGRpdi5pbm5lckhUTUwgPSBcIlwiO1xuICAgIHZhciBlbmdyYXZlcl9jb250cm9sbGVyID0gbmV3IEVuZ3JhdmVyQ29udHJvbGxlcihkaXYsIHBhcmFtcyk7XG4gICAgZW5ncmF2ZXJfY29udHJvbGxlci5lbmdyYXZlQUJDKHR1bmUsIHR1bmVOdW1iZXIpO1xuICAgIHR1bmUuZW5ncmF2ZXIgPSBlbmdyYXZlcl9jb250cm9sbGVyO1xuICAgIGlmIChwYXJhbXMudmlld3BvcnRWZXJ0aWNhbCB8fCBwYXJhbXMudmlld3BvcnRIb3Jpem9udGFsKSB7XG4gICAgICAgIC8vIElmIHdlIGFkZGVkIGEgd3JhcHBlciBhcm91bmQgdGhlIGRpdiwgdGhlbiB3ZSBuZWVkIHRvIHNpemUgdGhlIHdyYXBwZXIsIHRvby5cbiAgICAgICAgdmFyIHBhcmVudCA9IGRpdi5wYXJlbnROb2RlO1xuICAgICAgICBwYXJlbnQuc3R5bGUud2lkdGggPSBkaXYuc3R5bGUud2lkdGg7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJFYWNoTGluZVNlcGFyYXRlbHkoZGl2LCB0dW5lLCBwYXJhbXMsIHR1bmVOdW1iZXIpIHtcbiAgICBmdW5jdGlvbiBpbml0aWFsaXplVHVuZUxpbmUodHVuZSkge1xuICAgICAgICB2YXIgb2JqID0gbmV3IFR1bmUoKTtcbiAgICAgICAgb2JqLmZvcm1hdHRpbmcgPSB0dW5lLmZvcm1hdHRpbmc7XG4gICAgICAgIG9iai5tZWRpYSA9IHR1bmUubWVkaWE7XG4gICAgICAgIG9iai52ZXJzaW9uID0gdHVuZS52ZXJzaW9uO1xuICAgICAgICBvYmoubWV0YVRleHQgPSB7fTtcbiAgICAgICAgb2JqLmxpbmVzID0gW107XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgLy8gQmVmb3JlIHJlbmRlcmluZywgY2hvcCB1cCB0aGUgcmV0dXJuZWQgdHVuZSBpbnRvIGFuIGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBhIGxpbmUuXG4gICAgLy8gVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IGdldHMgdGhlIHRpdGxlIGFuZCBvdGhlciBpdGVtcyB0aGF0IGdvIG9uIHRvcCwgdGhlIGxhc3QgZWxlbWVudFxuICAgIC8vIG9mIHRoZSBhcnJheSBnZXRzIHRoZSBleHRyYSB0ZXh0IHRoYXQgZ29lcyBvbiBib3R0b20uIEVhY2ggZWxlbWVudCBnZXRzIGFueSBub24tbXVzaWMgaW5mbyB0aGF0IGNvbWVzIGJlZm9yZSBpdC5cbiAgICB2YXIgdHVuZXMgPSBbXTtcbiAgICB2YXIgdHVuZUxpbmU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0dW5lLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBsaW5lID0gdHVuZS5saW5lc1tpXTtcbiAgICAgICAgaWYgKCF0dW5lTGluZSlcbiAgICAgICAgICAgIHR1bmVMaW5lID0gaW5pdGlhbGl6ZVR1bmVMaW5lKHR1bmUpO1xuXG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBUaGVzZSBpdGVtcyBnbyBvbiB0b3Agb2YgdGhlIG11c2ljXG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC50ZW1wbyA9IHR1bmUubWV0YVRleHQudGVtcG87XG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC50aXRsZSA9IHR1bmUubWV0YVRleHQudGl0bGU7XG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC5oZWFkZXIgPSB0dW5lLm1ldGFUZXh0LmhlYWRlcjtcbiAgICAgICAgICAgIHR1bmVMaW5lLm1ldGFUZXh0LnJoeXRobSA9IHR1bmUubWV0YVRleHQucmh5dGhtO1xuICAgICAgICAgICAgdHVuZUxpbmUubWV0YVRleHQub3JpZ2luID0gdHVuZS5tZXRhVGV4dC5vcmlnaW47XG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC5jb21wb3NlciA9IHR1bmUubWV0YVRleHQuY29tcG9zZXI7XG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC5hdXRob3IgPSB0dW5lLm1ldGFUZXh0LmF1dGhvcjtcbiAgICAgICAgICAgIHR1bmVMaW5lLm1ldGFUZXh0LnBhcnRPcmRlciA9IHR1bmUubWV0YVRleHQucGFydE9yZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHVzaCB0aGUgbGluZXMgdW50aWwgd2UgZ2V0IHRvIGEgbXVzaWMgbGluZVxuICAgICAgICB0dW5lTGluZS5saW5lcy5wdXNoKGxpbmUpO1xuICAgICAgICBpZiAobGluZS5zdGFmZikge1xuICAgICAgICAgICAgdHVuZXMucHVzaCh0dW5lTGluZSk7XG4gICAgICAgICAgICB0dW5lTGluZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZGQgYW55IGV4dHJhIHN0dWZmIHRvIHRoZSBsYXN0IGxpbmUuXG4gICAgaWYgKHR1bmVMaW5lKSB7XG4gICAgICAgIHZhciBsYXN0TGluZSA9IHR1bmVzW3R1bmVzLmxlbmd0aC0xXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0dW5lTGluZS5saW5lcy5sZW5ndGg7IGorKylcbiAgICAgICAgICAgIGxhc3RMaW5lLmxpbmVzLnB1c2godHVuZUxpbmUubGluZXNbal0pO1xuICAgIH1cblxuICAgIC8vIFRoZXNlIGl0ZW1zIGdvIGJlbG93IHRoZSBtdXNpY1xuICAgIHR1bmVMaW5lID0gdHVuZXNbdHVuZXMubGVuZ3RoLTFdO1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzID0gdHVuZS5tZXRhVGV4dC51bmFsaWduZWRXb3JkcztcbiAgICB0dW5lTGluZS5tZXRhVGV4dC5ib29rID0gdHVuZS5tZXRhVGV4dC5ib29rO1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0LnNvdXJjZSA9IHR1bmUubWV0YVRleHQuc291cmNlO1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0LmRpc2NvZ3JhcGh5ID0gdHVuZS5tZXRhVGV4dC5kaXNjb2dyYXBoeTtcbiAgICB0dW5lTGluZS5tZXRhVGV4dC5ub3RlcyA9IHR1bmUubWV0YVRleHQubm90ZXM7XG4gICAgdHVuZUxpbmUubWV0YVRleHQudHJhbnNjcmlwdGlvbiA9IHR1bmUubWV0YVRleHQudHJhbnNjcmlwdGlvbjtcbiAgICB0dW5lTGluZS5tZXRhVGV4dC5oaXN0b3J5ID0gdHVuZS5tZXRhVGV4dC5oaXN0b3J5O1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0WydhYmMtY29weXJpZ2h0J10gPSB0dW5lLm1ldGFUZXh0WydhYmMtY29weXJpZ2h0J107XG4gICAgdHVuZUxpbmUubWV0YVRleHRbJ2FiYy1jcmVhdG9yJ10gPSB0dW5lLm1ldGFUZXh0WydhYmMtY3JlYXRvciddO1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0WydhYmMtZWRpdGVkLWJ5J10gPSB0dW5lLm1ldGFUZXh0WydhYmMtZWRpdGVkLWJ5J107XG4gICAgdHVuZUxpbmUubWV0YVRleHQuZm9vdGVyID0gdHVuZS5tZXRhVGV4dC5mb290ZXI7XG5cbiAgICAvLyBOb3cgY3JlYXRlIHN1Yi1kaXZzIGFuZCByZW5kZXIgZWFjaCBsaW5lLiBOZWVkIHRvIGNvcHkgdGhlIHBhcmFtcyB0byBjaGFuZ2UgdGhlIHBhZGRpbmcgZm9yIHRoZSBpbnRlcmlvciBzbGljZXMuXG4gICAgdmFyIGVwID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHBhcmFtcykge1xuICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGVwW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgb3JpZ1BhZGRpbmdUb3AgPSBlcC5wYWRkaW5ndG9wO1xuICAgIHZhciBvcmlnUGFkZGluZ0JvdHRvbSA9IGVwLnBhZGRpbmdib3R0b207XG4gICAgZGl2LmlubmVySFRNTCA9IFwiXCI7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCB0dW5lcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgbGluZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGxpbmVFbCk7XG5cbiAgICAgICAgaWYgKGsgPT09IDApIHtcblx0ICAgICAgICBlcC5wYWRkaW5ndG9wID0gb3JpZ1BhZGRpbmdUb3A7XG5cdCAgICAgICAgZXAucGFkZGluZ2JvdHRvbSA9IC0yMDtcbiAgICAgICAgfSBlbHNlIGlmIChrID09PSB0dW5lcy5sZW5ndGgtMSkge1xuXHQgICAgICAgIGVwLnBhZGRpbmd0b3AgPSAxMDtcblx0ICAgICAgICBlcC5wYWRkaW5nYm90dG9tID0gb3JpZ1BhZGRpbmdCb3R0b207XG4gICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgZXAucGFkZGluZ3RvcCA9IDEwO1xuXHQgICAgICAgIGVwLnBhZGRpbmdib3R0b20gPSAtMjA7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyT25lKGxpbmVFbCwgdHVuZXNba10sIGVwLCB0dW5lTnVtYmVyKTtcbiAgICAgICAgaWYgKGsgPT09IDApXG4gICAgICAgICAgICB0dW5lLmVuZ3JhdmVyID0gdHVuZXNba10uZW5ncmF2ZXI7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0dW5lLmVuZ3JhdmVyLnN0YWZmZ3JvdXBzKVxuICAgICAgICAgICAgICAgIHR1bmUuZW5ncmF2ZXIuc3RhZmZncm91cHMgPSB0dW5lc1trXS5lbmdyYXZlci5zdGFmZmdyb3VwcztcbiAgICAgICAgICAgIGVsc2UgaWYgKHR1bmVzW2tdLmVuZ3JhdmVyLnN0YWZmZ3JvdXBzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgdHVuZS5lbmdyYXZlci5zdGFmZmdyb3Vwcy5wdXNoKHR1bmVzW2tdLmVuZ3JhdmVyLnN0YWZmZ3JvdXBzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQSBxdWljayB3YXkgdG8gcmVuZGVyIGEgdHVuZSBmcm9tIGphdmFzY3JpcHQgd2hlbiBpbnRlcmFjdGl2aXR5IGlzIG5vdCByZXF1aXJlZC5cbi8vIFRoaXMgaXMgdXNlZCB3aGVuIGEgamF2YXNjcmlwdCByb3V0aW5lIGhhcyBzb21lIGFiYyB0ZXh0IHRoYXQgaXQgd2FudHMgdG8gcmVuZGVyXG4vLyBpbiBhIGRpdiBvciBjb2xsZWN0aW9uIG9mIGRpdnMuIE9uZSB0dW5lIG9yIG1hbnkgY2FuIGJlIHJlbmRlcmVkLlxuLy9cbi8vIHBhcmFtZXRlcnM6XG4vLyAgICAgIG91dHB1dDogYW4gYXJyYXkgb2YgZGl2cyB0aGF0IHRoZSBpbmRpdmlkdWFsIHR1bmVzIGFyZSByZW5kZXJlZCB0by5cbi8vICAgICAgICAgIElmIHRoZSBudW1iZXIgb2YgdHVuZXMgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGRpdnMgaW4gdGhlIGFycmF5LCB0aGVuXG4vLyAgICAgICAgICBvbmx5IHRoZSBmaXJzdCB0dW5lcyBhcmUgcmVuZGVyZWQuIElmIHRoZSBudW1iZXIgb2YgZGl2cyBleGNlZWRzIHRoZSBudW1iZXJcbi8vICAgICAgICAgIG9mIHR1bmVzLCB0aGVuIHRoZSB1bnVzZWQgZGl2cyBhcmUgY2xlYXJlZC4gVGhlIGRpdnMgY2FuIGJlIHBhc3NlZCBhcyBlaXRoZXJcbi8vICAgICAgICAgIGVsZW1lbnRzIG9yIHN0cmluZ3Mgb2YgaWRzLiBJZiBpZHMgYXJlIHBhc3NlZCwgdGhlbiB0aGUgZGl2IE1VU1QgZXhpc3QgYWxyZWFkeS5cbi8vICAgICAgICAgIChpZiBhIHNpbmdsZSBlbGVtZW50IGlzIHBhc3NlZCwgdGhlbiBpdCBpcyBhbiBpbXBsaWVkIGFycmF5IG9mIGxlbmd0aCBvbmUuKVxuLy8gICAgICAgICAgKGlmIGEgbnVsbCBpcyBwYXNzZWQgZm9yIGFuIGVsZW1lbnQsIG9yIHRoZSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhhdCB0dW5lIGlzIHNraXBwZWQuKVxuLy8gICAgICBhYmM6IHRleHQgcmVwcmVzZW50aW5nIGEgdHVuZSBvciBhbiBlbnRpcmUgdHVuZSBib29rIGluIEFCQyBub3RhdGlvbi5cbi8vICAgICAgcmVuZGVyUGFyYW1zOiBoYXNoIG9mOlxuLy8gICAgICAgICAgc3RhcnRpbmdUdW5lOiBhbiBpbmRleCwgc3RhcnRpbmcgYXQgemVybywgcmVwcmVzZW50aW5nIHdoaWNoIHR1bmUgdG8gc3RhcnQgcmVuZGVyaW5nIGF0LlxuLy8gICAgICAgICAgICAgIChJZiB0aGlzIGVsZW1lbnQgaXMgbm90IHByZXNlbnQsIHRoZW4gcmVuZGVyaW5nIHN0YXJ0cyBhdCB6ZXJvLilcbi8vICAgICAgICAgIHdpZHRoOiA4MDAgYnkgZGVmYXVsdC4gVGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgb3V0cHV0IHBhcGVyXG52YXIgcmVuZGVyQWJjID0gZnVuY3Rpb24ob3V0cHV0LCBhYmMsIHBhcnNlclBhcmFtcywgZW5ncmF2ZXJQYXJhbXMsIHJlbmRlclBhcmFtcykge1xuICAgIC8vIE5vdGU6IGFsbCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBjb25kZW5zZWQgaW50byB0aGUgZmlyc3Qgb25lcy4gSXQgZG9lc24ndCBodXJ0IGFueXRoaW5nIHRvIGFsbG93IHRoZSBvbGQgZm9ybWF0LCBzbyBqdXN0IGNvcHkgdGhlbSBoZXJlLlxuICAgIHZhciBwYXJhbXMgPSB7fTtcbiAgICB2YXIga2V5O1xuICAgIGlmIChwYXJzZXJQYXJhbXMpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gcGFyc2VyUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAocGFyc2VyUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNba2V5XSA9IHBhcnNlclBhcmFtc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbmdyYXZlclBhcmFtcykge1xuICAgICAgICBmb3IgKGtleSBpbiBlbmdyYXZlclBhcmFtcykge1xuICAgICAgICAgICAgaWYgKGVuZ3JhdmVyUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0ICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBjb25mbGljdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgXCJsaXN0ZW5lclwiLiBJZiBpdCBpcyBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlciwgdGhlbiBpdCBpcyBmb3IgY2xpY2suXG5cdCAgICAgICAgICAgIGlmIChrZXkgPT09IFwibGlzdGVuZXJcIikge1xuXHQgICAgICAgICAgICBcdGlmIChlbmdyYXZlclBhcmFtc1trZXldLmhpZ2hsaWdodClcblx0XHQgICAgICAgICAgICAgICAgcGFyYW1zLmNsaWNrTGlzdGVuZXIgPSBlbmdyYXZlclBhcmFtc1trZXldLmhpZ2hsaWdodDtcblx0ICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1trZXldID0gZW5ncmF2ZXJQYXJhbXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVuZGVyUGFyYW1zKSB7XG4gICAgICAgIGZvciAoa2V5IGluIHJlbmRlclBhcmFtcykge1xuICAgICAgICAgICAgaWYgKHJlbmRlclBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSByZW5kZXJQYXJhbXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGRpdiwgdHVuZSwgdHVuZU51bWJlciwgYWJjU3RyaW5nKSB7XG4gICAgICAgIHZhciByZW1vdmVEaXYgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRpdiA9PT0gXCIqXCIpIHtcbiAgICAgICAgICAgIHJlbW92ZURpdiA9IHRydWU7XG4gICAgICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiZGlzcGxheTpub25lO1wiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgfVxuICAgIFx0aWYgKHBhcmFtcy5hZnRlclBhcnNpbmcpXG4gICAgXHRcdHBhcmFtcy5hZnRlclBhcnNpbmcodHVuZSwgdHVuZU51bWJlciwgYWJjU3RyaW5nKTtcbiAgICAgICAgaWYgKCFyZW1vdmVEaXYgJiYgcGFyYW1zLndyYXAgJiYgcGFyYW1zLnN0YWZmd2lkdGgpIHtcblx0ICAgICAgICB0dW5lID0gZG9MaW5lV3JhcHBpbmcoZGl2LCB0dW5lLCB0dW5lTnVtYmVyLCBhYmNTdHJpbmcsIHBhcmFtcyk7XG5cdCAgICAgICAgcmV0dXJuIHR1bmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocmVtb3ZlRGl2IHx8ICFwYXJhbXMub25lU3ZnUGVyTGluZSB8fCB0dW5lLmxpbmVzLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICByZW5kZXJPbmUoZGl2LCB0dW5lLCBwYXJhbXMsIHR1bmVOdW1iZXIpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZW5kZXJFYWNoTGluZVNlcGFyYXRlbHkoZGl2LCB0dW5lLCBwYXJhbXMsIHR1bmVOdW1iZXIpO1xuICAgICAgICBpZiAocmVtb3ZlRGl2KVxuICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR1bmVib29rLnJlbmRlckVuZ2luZShjYWxsYmFjaywgb3V0cHV0LCBhYmMsIHBhcmFtcyk7XG59O1xuXG5mdW5jdGlvbiBkb0xpbmVXcmFwcGluZyhkaXYsIHR1bmUsIHR1bmVOdW1iZXIsIGFiY1N0cmluZywgcGFyYW1zKSB7XG5cdHZhciBlbmdyYXZlcl9jb250cm9sbGVyID0gbmV3IEVuZ3JhdmVyQ29udHJvbGxlcihkaXYsIHBhcmFtcyk7XG5cdHZhciB3aWR0aHMgPSBlbmdyYXZlcl9jb250cm9sbGVyLmdldE1lYXN1cmVXaWR0aHModHVuZSk7XG5cblx0dmFyIHJldCA9IHdyYXAuY2FsY0xpbmVXcmFwcyh0dW5lLCB3aWR0aHMsIGFiY1N0cmluZywgcGFyYW1zLCBQYXJzZSwgZW5ncmF2ZXJfY29udHJvbGxlcik7XG4gICAgaWYgKCFwYXJhbXMub25lU3ZnUGVyTGluZSB8fCByZXQudHVuZS5saW5lcy5sZW5ndGggPCAyKVxuICAgICAgICByZW5kZXJPbmUoZGl2LCByZXQudHVuZSwgcmV0LnJldmlzZWRQYXJhbXMsIHR1bmVOdW1iZXIpO1xuICAgIGVsc2VcbiAgICAgICAgcmVuZGVyRWFjaExpbmVTZXBhcmF0ZWx5KGRpdiwgcmV0LnR1bmUsIHJldC5yZXZpc2VkUGFyYW1zLCB0dW5lTnVtYmVyKTtcblx0cmV0LnR1bmUuZXhwbGFuYXRpb24gPSByZXQuZXhwbGFuYXRpb247XG5cdHJldHVybiByZXQudHVuZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZW5kZXJBYmM7XG4iLCJ2YXIgc291bmRzQ2FjaGUgPSB7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNvdW5kc0NhY2hlO1xuIiwiLy8gTG9hZCBvbmUgbXAzIGZpbGUgZm9yIG9uZSBub3RlLlxuLy8gdXJsID0gdGhlIGJhc2UgdXJsIGZvciB0aGUgc291bmRmb250XG4vLyBpbnN0cnVtZW50ID0gdGhlIGluc3RydW1lbnQgbmFtZSAoZS5nLiBcImFjb3VzdGljX2dyYW5kX3BpYW5vXCIpXG4vLyBuYW1lID0gdGhlIHBpdGNoIG5hbWUgKGUuZy4gXCJBM1wiKVxudmFyIHNvdW5kc0NhY2hlID0gcmVxdWlyZSgnLi9zb3VuZHMtY2FjaGUnKTtcblxudmFyIGdldE5vdGUgPSBmdW5jdGlvbih1cmwsIGluc3RydW1lbnQsIG5hbWUsIGF1ZGlvQ29udGV4dCkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdGlmICghc291bmRzQ2FjaGVbaW5zdHJ1bWVudF0pXG5cdFx0XHRzb3VuZHNDYWNoZVtpbnN0cnVtZW50XSA9IHt9O1xuXHRcdHZhciBpbnN0cnVtZW50Q2FjaGUgPSBzb3VuZHNDYWNoZVtpbnN0cnVtZW50XTtcblxuXHRcdGlmIChpbnN0cnVtZW50Q2FjaGVbbmFtZV0gPT09ICdlcnJvcicpIHtcblx0XHRcdHJldHVybiByZWplY3QobmV3IEVycm9yKFwiVW5hYmxlIHRvIGxvYWQgc291bmQgZm9udFwiICsgJyAnICsgdXJsICsgJyAnICsgaW5zdHJ1bWVudCArICcgJyArIG5hbWUpKTtcblx0XHR9XG5cdFx0aWYgKGluc3RydW1lbnRDYWNoZVtuYW1lXSkge1xuXHRcdFx0cmV0dXJuIHJlc29sdmUoe2luc3RydW1lbnQ6IGluc3RydW1lbnQsIG5hbWU6IG5hbWV9KTtcblx0XHR9XG5cblx0XHQvLyBpZiAodGhpcy5kZWJ1Z0NhbGxiYWNrKVxuXHRcdC8vIFx0dGhpcy5kZWJ1Z0NhbGxiYWNrKGBMb2FkaW5nIHNvdW5kOiAke2luc3RydW1lbnR9ICR7bmFtZX1gKTtcblx0XHRpbnN0cnVtZW50Q2FjaGVbbmFtZV0gPSBcInBlbmRpbmdcIjsgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGluIHBhcmFsbGVsLCBzbyBkb24ndCBjYWxsIGl0IGEgc2Vjb25kIHRpbWUgYmVmb3JlIHRoZSBmaXJzdCBvbmUgaGFzIGxvYWRlZC5cblx0XHR2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0eGhyLm9wZW4oJ0dFVCcsIHVybCtpbnN0cnVtZW50KyctbXAzLycrbmFtZSsnLm1wMycsIHRydWUpO1xuXHRcdHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuXG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGZ1bmN0aW9uIG9uU3VjY2VzcyhhdWRpb0J1ZmZlcikge1xuXHRcdFx0aW5zdHJ1bWVudENhY2hlW25hbWVdID0gYXVkaW9CdWZmZXI7XG5cdFx0XHQvLyBpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0Ly8gXHRzZWxmLmRlYnVnQ2FsbGJhY2soYFNvdW5kIGxvYWRlZDogJHtpbnN0cnVtZW50fSAke25hbWV9ICR7dXJsfWApO1xuXHRcdFx0cmVzb2x2ZSh7aW5zdHJ1bWVudDogaW5zdHJ1bWVudCwgbmFtZTogbmFtZX0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uRmFpbHVyZShlcnJvcikge1xuXHRcdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdFx0c2VsZi5kZWJ1Z0NhbGxiYWNrKGVycm9yKTtcblx0XHRcdGNvbnNvbGUubG9nKGVycm9yKTtcblx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0fVxuXG5cdFx0eGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuXHRcdFx0XHRhdWRpb0NvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHRoaXMucmVzcG9uc2UsIG9uU3VjY2Vzcywgb25GYWlsdXJlKTsvLy50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBcdHJldHVybiByZXNvbHZlKHtpbnN0cnVtZW50OiBpbnN0cnVtZW50LCBuYW1lOiBuYW1lfSk7XG5cdFx0XHRcdC8vIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG5cdFx0XHRcdC8vIFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoY2FudExvYWRNcDMgKyBlcnJvcikpO1xuXHRcdFx0XHQvLyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGluc3RydW1lbnRDYWNoZVtuYW1lXSA9IFwiZXJyb3JcIjsgLy8gVG8ga2VlcCB0aGlzIGZyb20gdHJ5aW5nIHRvIGxvYWQgcmVwZWF0ZWRseS5cblx0XHRcdFx0dmFyIGNhbnRMb2FkTXAzID0gXCJPbmxvYWQgZXJyb3IgbG9hZGluZyBzb3VuZDogXCIgKyAgbmFtZSArIFwiIFwiICsgdXJsICsgXCIgXCIgKyBlLmN1cnJlbnRUYXJnZXQuc3RhdHVzICsgXCIgXCIgKyBlLmN1cnJlbnRUYXJnZXQuc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soY2FudExvYWRNcDMpO1xuXHRcdFx0XHRyZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihjYW50TG9hZE1wMykpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0eGhyLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpbnN0cnVtZW50Q2FjaGVbbmFtZV0gPSBcImVycm9yXCI7IC8vIFRvIGtlZXAgdGhpcyBmcm9tIHRyeWluZyB0byBsb2FkIHJlcGVhdGVkbHkuXG5cdFx0XHR2YXIgY2FudExvYWRNcDMgPSBcIkVycm9yIGluIGxvYWRpbmcgc291bmQ6IFwiICsgXCIgXCIgKyB1cmw7XG5cdFx0XHRpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soY2FudExvYWRNcDMpO1xuXHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoY2FudExvYWRNcDMpKTtcblx0XHR9LCBmYWxzZSk7XG5cdFx0eGhyLnNlbmQoKTtcblx0fSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5vdGU7XG4iLCJ2YXIgaW5zdHJ1bWVudEluZGV4VG9OYW1lID0gW1xuXHRcImFjb3VzdGljX2dyYW5kX3BpYW5vXCIsXG5cdFwiYnJpZ2h0X2Fjb3VzdGljX3BpYW5vXCIsXG5cdFwiZWxlY3RyaWNfZ3JhbmRfcGlhbm9cIixcblx0XCJob25reXRvbmtfcGlhbm9cIixcblx0XCJlbGVjdHJpY19waWFub18xXCIsXG5cdFwiZWxlY3RyaWNfcGlhbm9fMlwiLFxuXHRcImhhcnBzaWNob3JkXCIsXG5cdFwiY2xhdmluZXRcIixcblxuXHRcImNlbGVzdGFcIixcblx0XCJnbG9ja2Vuc3BpZWxcIixcblx0XCJtdXNpY19ib3hcIixcblx0XCJ2aWJyYXBob25lXCIsXG5cdFwibWFyaW1iYVwiLFxuXHRcInh5bG9waG9uZVwiLFxuXHRcInR1YnVsYXJfYmVsbHNcIixcblx0XCJkdWxjaW1lclwiLFxuXG5cdFwiZHJhd2Jhcl9vcmdhblwiLFxuXHRcInBlcmN1c3NpdmVfb3JnYW5cIixcblx0XCJyb2NrX29yZ2FuXCIsXG5cdFwiY2h1cmNoX29yZ2FuXCIsXG5cdFwicmVlZF9vcmdhblwiLFxuXHRcImFjY29yZGlvblwiLFxuXHRcImhhcm1vbmljYVwiLFxuXHRcInRhbmdvX2FjY29yZGlvblwiLFxuXG5cdFwiYWNvdXN0aWNfZ3VpdGFyX255bG9uXCIsXG5cdFwiYWNvdXN0aWNfZ3VpdGFyX3N0ZWVsXCIsXG5cdFwiZWxlY3RyaWNfZ3VpdGFyX2phenpcIixcblx0XCJlbGVjdHJpY19ndWl0YXJfY2xlYW5cIixcblx0XCJlbGVjdHJpY19ndWl0YXJfbXV0ZWRcIixcblx0XCJvdmVyZHJpdmVuX2d1aXRhclwiLFxuXHRcImRpc3RvcnRpb25fZ3VpdGFyXCIsXG5cdFwiZ3VpdGFyX2hhcm1vbmljc1wiLFxuXG5cdFwiYWNvdXN0aWNfYmFzc1wiLFxuXHRcImVsZWN0cmljX2Jhc3NfZmluZ2VyXCIsXG5cdFwiZWxlY3RyaWNfYmFzc19waWNrXCIsXG5cdFwiZnJldGxlc3NfYmFzc1wiLFxuXHRcInNsYXBfYmFzc18xXCIsXG5cdFwic2xhcF9iYXNzXzJcIixcblx0XCJzeW50aF9iYXNzXzFcIixcblx0XCJzeW50aF9iYXNzXzJcIixcblxuXHRcInZpb2xpblwiLFxuXHRcInZpb2xhXCIsXG5cdFwiY2VsbG9cIixcblx0XCJjb250cmFiYXNzXCIsXG5cdFwidHJlbW9sb19zdHJpbmdzXCIsXG5cdFwicGl6emljYXRvX3N0cmluZ3NcIixcblx0XCJvcmNoZXN0cmFsX2hhcnBcIixcblx0XCJ0aW1wYW5pXCIsXG5cblx0XCJzdHJpbmdfZW5zZW1ibGVfMVwiLFxuXHRcInN0cmluZ19lbnNlbWJsZV8yXCIsXG5cdFwic3ludGhfc3RyaW5nc18xXCIsXG5cdFwic3ludGhfc3RyaW5nc18yXCIsXG5cdFwiY2hvaXJfYWFoc1wiLFxuXHRcInZvaWNlX29vaHNcIixcblx0XCJzeW50aF9jaG9pclwiLFxuXHRcIm9yY2hlc3RyYV9oaXRcIixcblxuXHRcInRydW1wZXRcIixcblx0XCJ0cm9tYm9uZVwiLFxuXHRcInR1YmFcIixcblx0XCJtdXRlZF90cnVtcGV0XCIsXG5cdFwiZnJlbmNoX2hvcm5cIixcblx0XCJicmFzc19zZWN0aW9uXCIsXG5cdFwic3ludGhfYnJhc3NfMVwiLFxuXHRcInN5bnRoX2JyYXNzXzJcIixcblxuXHRcInNvcHJhbm9fc2F4XCIsXG5cdFwiYWx0b19zYXhcIixcblx0XCJ0ZW5vcl9zYXhcIixcblx0XCJiYXJpdG9uZV9zYXhcIixcblx0XCJvYm9lXCIsXG5cdFwiZW5nbGlzaF9ob3JuXCIsXG5cdFwiYmFzc29vblwiLFxuXHRcImNsYXJpbmV0XCIsXG5cblx0XCJwaWNjb2xvXCIsXG5cdFwiZmx1dGVcIixcblx0XCJyZWNvcmRlclwiLFxuXHRcInBhbl9mbHV0ZVwiLFxuXHRcImJsb3duX2JvdHRsZVwiLFxuXHRcInNoYWt1aGFjaGlcIixcblx0XCJ3aGlzdGxlXCIsXG5cdFwib2NhcmluYVwiLFxuXG5cdFwibGVhZF8xX3NxdWFyZVwiLFxuXHRcImxlYWRfMl9zYXd0b290aFwiLFxuXHRcImxlYWRfM19jYWxsaW9wZVwiLFxuXHRcImxlYWRfNF9jaGlmZlwiLFxuXHRcImxlYWRfNV9jaGFyYW5nXCIsXG5cdFwibGVhZF82X3ZvaWNlXCIsXG5cdFwibGVhZF83X2ZpZnRoc1wiLFxuXHRcImxlYWRfOF9iYXNzX19sZWFkXCIsXG5cblx0XCJwYWRfMV9uZXdfYWdlXCIsXG5cdFwicGFkXzJfd2FybVwiLFxuXHRcInBhZF8zX3BvbHlzeW50aFwiLFxuXHRcInBhZF80X2Nob2lyXCIsXG5cdFwicGFkXzVfYm93ZWRcIixcblx0XCJwYWRfNl9tZXRhbGxpY1wiLFxuXHRcInBhZF83X2hhbG9cIixcblx0XCJwYWRfOF9zd2VlcFwiLFxuXG5cdFwiZnhfMV9yYWluXCIsXG5cdFwiZnhfMl9zb3VuZHRyYWNrXCIsXG5cdFwiZnhfM19jcnlzdGFsXCIsXG5cdFwiZnhfNF9hdG1vc3BoZXJlXCIsXG5cdFwiZnhfNV9icmlnaHRuZXNzXCIsXG5cdFwiZnhfNl9nb2JsaW5zXCIsXG5cdFwiZnhfN19lY2hvZXNcIixcblx0XCJmeF84X3NjaWZpXCIsXG5cblx0XCJzaXRhclwiLFxuXHRcImJhbmpvXCIsXG5cdFwic2hhbWlzZW5cIixcblx0XCJrb3RvXCIsXG5cdFwia2FsaW1iYVwiLFxuXHRcImJhZ3BpcGVcIixcblx0XCJmaWRkbGVcIixcblx0XCJzaGFuYWlcIixcblxuXHRcInRpbmtsZV9iZWxsXCIsXG5cdFwiYWdvZ29cIixcblx0XCJzdGVlbF9kcnVtc1wiLFxuXHRcIndvb2RibG9ja1wiLFxuXHRcInRhaWtvX2RydW1cIixcblx0XCJtZWxvZGljX3RvbVwiLFxuXHRcInN5bnRoX2RydW1cIixcblx0XCJyZXZlcnNlX2N5bWJhbFwiLFxuXG5cdFwiZ3VpdGFyX2ZyZXRfbm9pc2VcIixcblx0XCJicmVhdGhfbm9pc2VcIixcblx0XCJzZWFzaG9yZVwiLFxuXHRcImJpcmRfdHdlZXRcIixcblx0XCJ0ZWxlcGhvbmVfcmluZ1wiLFxuXHRcImhlbGljb3B0ZXJcIixcblx0XCJhcHBsYXVzZVwiLFxuXHRcImd1bnNob3RcIixcblxuXHRcInBlcmN1c3Npb25cIlxuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnN0cnVtZW50SW5kZXhUb05hbWU7XG4iLCIvLyBDb252ZXJ0IHRoZSBpbnB1dCBzdHJ1Y3R1cmUgdG8gYSBtb3JlIHVzZWZ1bCBzdHJ1Y3R1cmUgd2hlcmUgZWFjaCBpdGVtIGhhcyBhIGxlbmd0aCBvZiBpdHMgb3duLlxuXG52YXIgaW5zdHJ1bWVudEluZGV4VG9OYW1lID0gcmVxdWlyZSgnLi9pbnN0cnVtZW50LWluZGV4LXRvLW5hbWUnKTtcblxudmFyIGNyZWF0ZU5vdGVNYXAgPSBmdW5jdGlvbihzZXF1ZW5jZSkge1xuXHR2YXIgbWFwID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgc2VxdWVuY2UudHJhY2tzLmxlbmd0aDsgaSsrKVxuXHRcdG1hcC5wdXNoKFtdKTtcblxuXHQvLyBUT0RPLVBFUjogaGFuZGxlIG1vcmUgdGhhbiBvbmUgbm90ZSBpbiBhIHRyYWNrXG5cdHZhciBuZXh0Tm90ZSA9IHt9O1xuXHR2YXIgY3VycmVudEluc3RydW1lbnQgPSBpbnN0cnVtZW50SW5kZXhUb05hbWVbMF07XG5cdHNlcXVlbmNlLnRyYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrLCBpKSB7XG5cdFx0dmFyIGN1cnJlbnRUaW1lID0gMDtcblx0XHR0cmFjay5mb3JFYWNoKGZ1bmN0aW9uKGV2KSB7XG5cdFx0XHRzd2l0Y2ggKGV2LmNtZCkge1xuXHRcdFx0XHRjYXNlIFwic3RhcnRcIjpcblx0XHRcdFx0XHRuZXh0Tm90ZVtldi5waXRjaF0gPSB7IHRpbWU6IGN1cnJlbnRUaW1lLCBpbnN0cnVtZW50OiBjdXJyZW50SW5zdHJ1bWVudCwgdm9sdW1lOiBldi52b2x1bWUgfTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIm1vdmVcIjpcblx0XHRcdFx0XHRjdXJyZW50VGltZSArPSBldi5kdXJhdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInN0b3BcIjpcblx0XHRcdFx0XHRtYXBbaV0ucHVzaCh7cGl0Y2g6IGV2LnBpdGNoLCBpbnN0cnVtZW50OiBuZXh0Tm90ZVtldi5waXRjaF0uaW5zdHJ1bWVudCwgc3RhcnQ6IG5leHROb3RlW2V2LnBpdGNoXS50aW1lLCBlbmQ6IGN1cnJlbnRUaW1lLCB2b2x1bWU6IG5leHROb3RlW2V2LnBpdGNoXS52b2x1bWV9KTtcblx0XHRcdFx0XHRkZWxldGUgbmV4dE5vdGVbZXYucGl0Y2hdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicHJvZ3JhbVwiOlxuXHRcdFx0XHRcdGN1cnJlbnRJbnN0cnVtZW50ID0gaW5zdHJ1bWVudEluZGV4VG9OYW1lW2V2Lmluc3RydW1lbnRdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBoYW5kbGUgb3RoZXIgZXZlbnQgdHlwZXNcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlVuaGFuZGVkIG1pZGkgZXZlbnRcIiwgZXYpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0cmV0dXJuIG1hcDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlTm90ZU1hcDtcbiIsIi8vIENhbGwgdGhpcyB3aGVuIGl0IGlzIHNhZmUgZm9yIHRoZSBhYmNqcyB0byBwcm9kdWNlIHNvdW5kLiBUaGlzIGlzIGFmdGVyIHRoZSBmaXJzdCB1c2VyIGdlc3R1cmUgb24gdGhlIHBhZ2UuXG4vLyBJZiB5b3UgY2FsbCBpdCB3aXRoIG5vIHBhcmFtZXRlcnMsIHRoZW4gYW4gQXVkaW9Db250ZXh0IGlzIGNyZWF0ZWQgYW5kIHN0b3JlZC5cbi8vIElmIHlvdSBjYWxsIGl0IHdpdGggYSBwYXJhbWV0ZXIsIHRoYXQgaXMgdXNlZCBhcyBhbiBhbHJlYWR5IGNyZWF0ZWQgQXVkaW9Db250ZXh0LlxuXG5mdW5jdGlvbiByZWdpc3RlckF1ZGlvQ29udGV4dChhYykge1xuXHRpZiAoIXdpbmRvdy5hYmNqc0F1ZGlvQ29udGV4dCkge1xuXHRcdGlmICghYWMpIHtcblx0XHRcdGFjID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fFxuXHRcdFx0XHR3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0IHx8XG5cdFx0XHRcdG5hdmlnYXRvci5tb3pBdWRpb0NvbnRleHQgfHxcblx0XHRcdFx0bmF2aWdhdG9yLm1zQXVkaW9Db250ZXh0O1xuXHRcdFx0YWMgPSBuZXcgYWMoKTtcblx0XHR9XG5cdFx0d2luZG93LmFiY2pzQXVkaW9Db250ZXh0ID0gYWM7XG5cdH1cblx0cmV0dXJuIHdpbmRvdy5hYmNqc0F1ZGlvQ29udGV4dC5zdGF0ZSAhPT0gXCJzdXNwZW5kZWRcIjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdpc3RlckF1ZGlvQ29udGV4dDtcbiIsImZ1bmN0aW9uIGFjdGl2ZUF1ZGlvQ29udGV4dCgpIHtcblx0cmV0dXJuIHdpbmRvdy5hYmNqc0F1ZGlvQ29udGV4dDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhY3RpdmVBdWRpb0NvbnRleHQ7XG4iLCJ2YXIgYWN0aXZlQXVkaW9Db250ZXh0ID0gcmVxdWlyZSgnLi9hY3RpdmUtYXVkaW8tY29udGV4dCcpO1xuXG4vL1xuLy8gU3VwcG9ydCBmb3IgYXVkaW8gZGVwZW5kcyBvbiB0aHJlZSB0aGluZ3M6IHN1cHBvcnQgZm9yIFByb21pc2UsIHN1cHBvcnQgZm9yIEF1ZGlvQ29udGV4dCwgYW5kIHN1cHBvcnQgZm9yIEF1ZGlvQ29udGV4dC5yZXN1bWUuXG4vLyBVbmZvcnR1bmF0ZWx5LCBBdWRpb0NvbnRleHQucmVzdW1lIGNhbm5vdCBiZSBkZXRlY3RlZCB1bmxlc3MgYW4gQXVkaW9Db250ZXh0IGlzIGNyZWF0ZWQsIGFuZCBjcmVhdGluZyBhbiBBdWRpb0NvbnRleHQgY2FuJ3Rcbi8vIGJlIGRvbmUgdW50aWwgYSB1c2VyIGNsaWNrLCBzbyB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyBmb3Igc3VyZSBpZiBhdWRpbyBpcyBzdXBwb3J0ZWQgdW50aWwgdGhlIHVzZXIgdHJpZXMuXG4vLyBXZSBjYW4gZ2V0IGNsb3NlLCB0aG91Z2ggLSB3ZSBjYW4gdGVzdCBmb3IgUHJvbWlzZXMgYW5kIEF1ZGlvQ29udGV4dCAtIHRoZXJlIGFyZSBqdXN0IGEgZmV3IGV2ZXJncmVlbiBicm93c2VycyB0aGF0IHN1cHBvcnRlZFxuLy8gdGhhdCBiZWZvcmUgc3VwcG9ydGluZyByZXN1bWUsIHNvIHdlJ2xsIHRlc3Qgd2hhdCB3ZSBjYW4uXG5cbi8vIFRoZSBiZXN0IHVzZSBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gY2FsbCBpdCBiZWZvcmUgZG9pbmcgYW55IGF1ZGlvIHJlbGF0ZWQgc3R1ZmYgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYm90aGVyLlxuLy8gQnV0IHRoZW4sIGNhbGwgaXQgYWdhaW4gYWZ0ZXIgYSB1c2VyIGludGVyYWN0aW9uIHRvIHRlc3QgZm9yIHJlc3VtZS5cblxuZnVuY3Rpb24gc3VwcG9ydHNBdWRpbygpIHtcblx0dmFyIGFhYyA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpO1xuXHRpZiAoYWFjKVxuXHRcdHJldHVybiBhYWMucmVzdW1lICE9PSB1bmRlZmluZWQ7XG5cblx0aWYgKCF3aW5kb3cuUHJvbWlzZSlcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0cmV0dXJuIHdpbmRvdy5BdWRpb0NvbnRleHQgfHxcblx0XHR3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0IHx8XG5cdFx0bmF2aWdhdG9yLm1vekF1ZGlvQ29udGV4dCB8fFxuXHRcdG5hdmlnYXRvci5tc0F1ZGlvQ29udGV4dDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdXBwb3J0c0F1ZGlvO1xuIiwidmFyIHBpdGNoVG9Ob3RlTmFtZSA9IHtcblx0MjE6ICdBMCcsXG5cdDIyOiAnQmIwJyxcblx0MjM6ICdCMCcsXG5cdDI0OiAnQzEnLFxuXHQyNTogJ0RiMScsXG5cdDI2OiAnRDEnLFxuXHQyNzogJ0ViMScsXG5cdDI4OiAnRTEnLFxuXHQyOTogJ0YxJyxcblx0MzA6ICdHYjEnLFxuXHQzMTogJ0cxJyxcblx0MzI6ICdBYjEnLFxuXHQzMzogJ0ExJyxcblx0MzQ6ICdCYjEnLFxuXHQzNTogJ0IxJyxcblx0MzY6ICdDMicsXG5cdDM3OiAnRGIyJyxcblx0Mzg6ICdEMicsXG5cdDM5OiAnRWIyJyxcblx0NDA6ICdFMicsXG5cdDQxOiAnRjInLFxuXHQ0MjogJ0diMicsXG5cdDQzOiAnRzInLFxuXHQ0NDogJ0FiMicsXG5cdDQ1OiAnQTInLFxuXHQ0NjogJ0JiMicsXG5cdDQ3OiAnQjInLFxuXHQ0ODogJ0MzJyxcblx0NDk6ICdEYjMnLFxuXHQ1MDogJ0QzJyxcblx0NTE6ICdFYjMnLFxuXHQ1MjogJ0UzJyxcblx0NTM6ICdGMycsXG5cdDU0OiAnR2IzJyxcblx0NTU6ICdHMycsXG5cdDU2OiAnQWIzJyxcblx0NTc6ICdBMycsXG5cdDU4OiAnQmIzJyxcblx0NTk6ICdCMycsXG5cdDYwOiAnQzQnLFxuXHQ2MTogJ0RiNCcsXG5cdDYyOiAnRDQnLFxuXHQ2MzogJ0ViNCcsXG5cdDY0OiAnRTQnLFxuXHQ2NTogJ0Y0Jyxcblx0NjY6ICdHYjQnLFxuXHQ2NzogJ0c0Jyxcblx0Njg6ICdBYjQnLFxuXHQ2OTogJ0E0Jyxcblx0NzA6ICdCYjQnLFxuXHQ3MTogJ0I0Jyxcblx0NzI6ICdDNScsXG5cdDczOiAnRGI1Jyxcblx0NzQ6ICdENScsXG5cdDc1OiAnRWI1Jyxcblx0NzY6ICdFNScsXG5cdDc3OiAnRjUnLFxuXHQ3ODogJ0diNScsXG5cdDc5OiAnRzUnLFxuXHQ4MDogJ0FiNScsXG5cdDgxOiAnQTUnLFxuXHQ4MjogJ0JiNScsXG5cdDgzOiAnQjUnLFxuXHQ4NDogJ0M2Jyxcblx0ODU6ICdEYjYnLFxuXHQ4NjogJ0Q2Jyxcblx0ODc6ICdFYjYnLFxuXHQ4ODogJ0U2Jyxcblx0ODk6ICdGNicsXG5cdDkwOiAnR2I2Jyxcblx0OTE6ICdHNicsXG5cdDkyOiAnQWI2Jyxcblx0OTM6ICdBNicsXG5cdDk0OiAnQmI2Jyxcblx0OTU6ICdCNicsXG5cdDk2OiAnQzcnLFxuXHQ5NzogJ0RiNycsXG5cdDk4OiAnRDcnLFxuXHQ5OTogJ0ViNycsXG5cdDEwMDogJ0U3Jyxcblx0MTAxOiAnRjcnLFxuXHQxMDI6ICdHYjcnLFxuXHQxMDM6ICdHNycsXG5cdDEwNDogJ0FiNycsXG5cdDEwNTogJ0E3Jyxcblx0MTA2OiAnQmI3Jyxcblx0MTA3OiAnQjcnLFxuXHQxMDg6ICdDOCcsXG5cdDEwOTogJ0RiOCcsXG5cdDExMDogJ0Q4Jyxcblx0MTExOiAnRWI4Jyxcblx0MTEyOiAnRTgnLFxuXHQxMTM6ICdGOCcsXG5cdDExNDogJ0diOCcsXG5cdDExNTogJ0c4Jyxcblx0MTE2OiAnQWI4Jyxcblx0MTE3OiAnQTgnLFxuXHQxMTg6ICdCYjgnLFxuXHQxMTk6ICdCOCcsXG5cdDEyMDogJ0M5Jyxcblx0MTIxOiAnRGI5J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwaXRjaFRvTm90ZU5hbWU7XG4iLCJ2YXIgZG93bmxvYWRCdWZmZXIgPSBmdW5jdGlvbihidWZmZXIpIHtcblx0cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJ1ZmZlclRvV2F2ZShidWZmZXIuYXVkaW9CdWZmZXJzKSk7XG59O1xuXG4vLyBDb252ZXJ0IGFuIEF1ZGlvQnVmZmVyIHRvIGEgQmxvYiB1c2luZyBXQVZFIHJlcHJlc2VudGF0aW9uXG5mdW5jdGlvbiBidWZmZXJUb1dhdmUoYXVkaW9CdWZmZXJzKSB7XG5cdHZhciBudW1PZkNoYW4gPSBhdWRpb0J1ZmZlcnMubGVuZ3RoO1xuXHR2YXIgbGVuZ3RoID0gYXVkaW9CdWZmZXJzWzBdLmxlbmd0aCAqIG51bU9mQ2hhbiAqIDIgKyA0NDtcblx0dmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGgpO1xuXHR2YXIgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpO1xuXHR2YXIgY2hhbm5lbHMgPSBbXTtcblx0dmFyIGk7XG5cdHZhciBzYW1wbGU7XG5cdHZhciBvZmZzZXQgPSAwO1xuXHR2YXIgcG9zID0gMDtcblxuXHQvLyB3cml0ZSBXQVZFIGhlYWRlclxuXHRzZXRVaW50MzIoMHg0NjQ2NDk1Mik7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiUklGRlwiXG5cdHNldFVpbnQzMihsZW5ndGggLSA4KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsZSBsZW5ndGggLSA4XG5cdHNldFVpbnQzMigweDQ1NTY0MTU3KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJXQVZFXCJcblxuXHRzZXRVaW50MzIoMHgyMDc0NmQ2Nik7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiZm10IFwiIGNodW5rXG5cdHNldFVpbnQzMigxNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoID0gMTZcblx0c2V0VWludDE2KDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQQ00gKHVuY29tcHJlc3NlZClcblx0c2V0VWludDE2KG51bU9mQ2hhbik7XG5cdHNldFVpbnQzMihhdWRpb0J1ZmZlcnNbMF0uc2FtcGxlUmF0ZSk7XG5cdHNldFVpbnQzMihhdWRpb0J1ZmZlcnNbMF0uc2FtcGxlUmF0ZSAqIDIgKiBudW1PZkNoYW4pOyAvLyBhdmcuIGJ5dGVzL3NlY1xuXHRzZXRVaW50MTYobnVtT2ZDaGFuICogMik7ICAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrLWFsaWduXG5cdHNldFVpbnQxNigxNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTYtYml0IChoYXJkY29kZWQgaW4gdGhpcyBkZW1vKVxuXG5cdHNldFVpbnQzMigweDYxNzQ2MTY0KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJkYXRhXCIgLSBjaHVua1xuXHRzZXRVaW50MzIobGVuZ3RoIC0gcG9zIC0gNCk7ICAgICAgICAgICAgICAgICAgIC8vIGNodW5rIGxlbmd0aFxuXG5cdC8vIHdyaXRlIGludGVybGVhdmVkIGRhdGFcblx0Zm9yKGkgPSAwOyBpIDwgYXVkaW9CdWZmZXJzLmxlbmd0aDsgaSsrKVxuXHRcdGNoYW5uZWxzLnB1c2goYXVkaW9CdWZmZXJzW2ldLmdldENoYW5uZWxEYXRhKDApKTtcblxuXHR3aGlsZShwb3MgPCBsZW5ndGgpIHtcblx0XHRmb3IoaSA9IDA7IGkgPCBjaGFubmVscy5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAvLyBpbnRlcmxlYXZlIGNoYW5uZWxzXG5cdFx0XHRzYW1wbGUgPSBNYXRoLm1heCgtMSwgTWF0aC5taW4oMSwgY2hhbm5lbHNbaV1bb2Zmc2V0XSkpOyAvLyBjbGFtcFxuXHRcdFx0c2FtcGxlID0gKDAuNSArIHNhbXBsZSA8IDAgPyBzYW1wbGUgKiAzMjc2OCA6IHNhbXBsZSAqIDMyNzY3KXwwOyAvLyBzY2FsZSB0byAxNi1iaXQgc2lnbmVkIGludFxuXHRcdFx0dmlldy5zZXRJbnQxNihwb3MsIHNhbXBsZSwgdHJ1ZSk7ICAgICAgICAgIC8vIHdyaXRlIDE2LWJpdCBzYW1wbGVcblx0XHRcdHBvcyArPSAyO1xuXHRcdH1cblx0XHRvZmZzZXQrKzsgLy8gbmV4dCBzb3VyY2Ugc2FtcGxlXG5cdH1cblxuXHQvLyBjcmVhdGUgQmxvYlxuXHRyZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHt0eXBlOiBcImF1ZGlvL3dhdlwifSk7XG5cblx0ZnVuY3Rpb24gc2V0VWludDE2KGRhdGEpIHtcblx0XHR2aWV3LnNldFVpbnQxNihwb3MsIGRhdGEsIHRydWUpO1xuXHRcdHBvcyArPSAyO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0VWludDMyKGRhdGEpIHtcblx0XHR2aWV3LnNldFVpbnQzMihwb3MsIGRhdGEsIHRydWUpO1xuXHRcdHBvcyArPSA0O1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZG93bmxvYWRCdWZmZXI7XG4iLCIvLyAgICBhYmNfbWlkaV9zZXF1ZW5jZXIuanM6IFR1cm4gcGFyc2VkIGFiYyBpbnRvIGEgbGluZWFyIHNlcmllcyBvZiBldmVudHMuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBzZXF1ZW5jZTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgbWVhc3VyZUxlbmd0aDtcblx0Ly8gVGhlIGFiYyBpcyBwcm92aWRlZCB0byB1cyBsaW5lIGJ5IGxpbmUuIEl0IG1pZ2h0IGhhdmUgcmVwZWF0cyBpbiBpdC4gV2Ugd2FudCB0byByZSBhcnJhbmdlIHRoZSBlbGVtZW50cyB0b1xuXHQvLyBiZSBhbiBhcnJheSBvZiB2b2ljZXMgd2l0aCBhbGwgdGhlIHJlcGVhdHMgZW1iZWRkZWQsIGFuZCBubyBsaW5lcy4gVGhlbiBpdCBpcyB0cml2aWFsIHRvIGdvIHRocm91Z2ggdGhlIGV2ZW50c1xuXHQvLyBvbmUgYXQgYSB0aW1lIGFuZCB0dXJuIGl0IGludG8gbWlkaS5cblxuXHR2YXIgUEVSQ1VTU0lPTl9QUk9HUkFNID0gMTI4O1xuXG5cdHNlcXVlbmNlID0gZnVuY3Rpb24oYWJjdHVuZSwgb3B0aW9ucykge1xuXHRcdC8vIEdsb2JhbCBvcHRpb25zXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0dmFyIHFwbSA9IHVuZGVmaW5lZDtcblx0XHR2YXIgcHJvZ3JhbSA9IG9wdGlvbnMucHJvZ3JhbSB8fCAwO1x0Ly8gVGhlIHByb2dyYW0gaWYgdGhlcmUgaXNuJ3QgYSBwcm9ncmFtIHNwZWNpZmllZC5cblx0XHR2YXIgdHJhbnNwb3NlID0gb3B0aW9ucy5taWRpVHJhbnNwb3NlIHx8IDA7XG5cdFx0dmFyIGNoYW5uZWwgPSBvcHRpb25zLmNoYW5uZWwgfHwgMDtcblx0XHR2YXIgZHJ1bVBhdHRlcm4gPSBvcHRpb25zLmRydW0gfHwgXCJcIjtcblx0XHR2YXIgZHJ1bUJhcnMgPSBvcHRpb25zLmRydW1CYXJzIHx8IDE7XG5cdFx0dmFyIGRydW1JbnRybyA9IG9wdGlvbnMuZHJ1bUludHJvIHx8IDA7XG5cdFx0dmFyIGRydW1PbiA9IGRydW1QYXR0ZXJuICE9PSBcIlwiO1xuXG5cdFx0Ly8gQWxsIG9mIHRoZSBhYm92ZSBvdmVycmlkZXMgbmVlZCB0byBiZSBpbnRlZ2Vyc1xuXHRcdHByb2dyYW0gPSBwYXJzZUludChwcm9ncmFtLCAxMCk7XG5cdFx0dHJhbnNwb3NlID0gcGFyc2VJbnQodHJhbnNwb3NlLCAxMCk7XG5cdFx0Y2hhbm5lbCA9IHBhcnNlSW50KGNoYW5uZWwsIDEwKTtcblx0XHRpZiAoY2hhbm5lbCA9PT0gMTApXG5cdFx0XHRwcm9ncmFtID0gUEVSQ1VTU0lPTl9QUk9HUkFNO1xuXHRcdGRydW1QYXR0ZXJuID0gZHJ1bVBhdHRlcm4uc3BsaXQoXCIgXCIpO1xuXHRcdGRydW1CYXJzID0gcGFyc2VJbnQoZHJ1bUJhcnMsIDEwKTtcblx0XHRkcnVtSW50cm8gPSBwYXJzZUludChkcnVtSW50cm8sIDEwKTtcblxuXHRcdHZhciBiYWdwaXBlcyA9IGFiY3R1bmUuZm9ybWF0dGluZy5iYWdwaXBlczsgLy8gSWYgaXQgaXMgYmFncGlwZXMsIHRoZW4gdGhlIGdyYWNlbm90ZXMgYXJlIHBsYXllZCBvbiB0b3Agb2YgdGhlIG1haW4gbm90ZS5cblx0XHRpZiAoYmFncGlwZXMpXG5cdFx0XHRwcm9ncmFtID0gNzE7XG5cblx0XHQvLyAlJU1JREkgZmVybWF0YWZpeGVkXG5cdFx0Ly8gJSVNSURJIGZlcm1hdGFwcm9wb3J0aW9uYWxcblx0XHQvLyAlJU1JREkgZGVsdGFsb3VkbmVzcyBuXG5cdFx0Ly8gJSVNSURJIGdyYWNlZGl2aWRlciBiXG5cdFx0Ly8gJSVNSURJIHJhdGlvIG4gbVxuXHRcdC8vICUlTUlESSBiZWF0IGEgYiBjIG5cblx0XHQvLyAlJU1JREkgZ3JhY2UgYS9iXG5cdFx0Ly8gJSVNSURJIHRyaW0geC95XG5cblx0XHQvLyAlTUlESSBnY2hvcmRvblxuXHRcdC8vICVNSURJIGdjaG9yZG9mZlxuXHRcdC8vICUlTUlESSBiYXNzcHJvZyA0NVxuXHRcdC8vICUlTUlESSBjaG9yZHByb2cgMjRcblx0XHQvLyAlJU1JREkgY2hvcmRuYW1lIG5hbWUgbjEgbjIgbjMgbjQgbjUgbjZcblxuXHRcdC8vJSVNSURJIGJlYXQg4p+oaW50MeKfqSDin6hpbnQy4p+pIOKfqGludDPin6kg4p+oaW50NOKfqTogY29udHJvbHMgdGhlIHZvbHVtZXMgb2YgdGhlIG5vdGVzIGluIGEgbWVhc3VyZS4gVGhlIGZpcnN0IG5vdGUgaW4gYSBiYXIgaGFzIHZvbHVtZSDin6hpbnQx4p+pOyBvdGhlciDigJhzdHJvbmfigJkgbm90ZXMgaGF2ZSB2b2x1bWUg4p+oaW50MuKfqSBhbmQgYWxsIHRoZSByZXN0IGhhdmUgdm9sdW1lIOKfqGludDPin6kuIFRoZXNlIHZhbHVlcyBtdXN0IGJlIGluIHRoZSByYW5nZSAw4oCTMTI3LiBUaGUgcGFyYW1ldGVyIOKfqGludDTin6kgZGV0ZXJtaW5lcyB3aGljaCBub3RlcyBhcmUg4oCYc3Ryb25n4oCZLiBJZiB0aGUgdGltZSBzaWduYXR1cmUgaXMgeC95LCB0aGVuIGVhY2ggbm90ZSBpcyBnaXZlbiBhIHBvc2l0aW9uIG51bWJlciBrID0gMCwgMSwgMi4gLiAuIHgtMSB3aXRoaW4gZWFjaCBiYXIuIElmIGsgaXMgYSBtdWx0aXBsZSBvZiDin6hpbnQ04p+pLCB0aGVuIHRoZSBub3RlIGlzIOKAmHN0cm9uZ+KAmS5cblxuXHRcdHZhciBzdGFydGluZ01pZGkgPSBbXTtcblx0XHRpZiAoYWJjdHVuZS5mb3JtYXR0aW5nLm1pZGkpIHtcblx0XHRcdC8vY29uc29sZS5sb2coXCJNSURJIEZvcm1hdHRpbmc6XCIsIGFiY3R1bmUuZm9ybWF0dGluZy5taWRpKTtcblx0XHRcdHZhciBnbG9iYWxzID0gYWJjdHVuZS5mb3JtYXR0aW5nLm1pZGk7XG5cdFx0XHRpZiAoZ2xvYmFscy5wcm9ncmFtICYmIGdsb2JhbHMucHJvZ3JhbS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHByb2dyYW0gPSBnbG9iYWxzLnByb2dyYW1bMF07XG5cdFx0XHRcdGlmIChnbG9iYWxzLnByb2dyYW0ubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHByb2dyYW0gPSBnbG9iYWxzLnByb2dyYW1bMV07XG5cdFx0XHRcdFx0Y2hhbm5lbCA9IGdsb2JhbHMucHJvZ3JhbVswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGdsb2JhbHMudHJhbnNwb3NlKVxuXHRcdFx0XHR0cmFuc3Bvc2UgPSBnbG9iYWxzLnRyYW5zcG9zZVswXTtcblx0XHRcdGlmIChnbG9iYWxzLmNoYW5uZWwpXG5cdFx0XHRcdGNoYW5uZWwgPSBnbG9iYWxzLmNoYW5uZWxbMF07XG5cdFx0XHRpZiAoZ2xvYmFscy5kcnVtKVxuXHRcdFx0XHRkcnVtUGF0dGVybiA9IGdsb2JhbHMuZHJ1bTtcblx0XHRcdGlmIChnbG9iYWxzLmRydW1iYXJzKVxuXHRcdFx0XHRkcnVtQmFycyA9IGdsb2JhbHMuZHJ1bWJhcnNbMF07XG5cdFx0XHRpZiAoZ2xvYmFscy5kcnVtb24pXG5cdFx0XHRcdGRydW1PbiA9IHRydWU7XG5cdFx0XHRpZiAoY2hhbm5lbCA9PT0gMTApXG5cdFx0XHRcdHByb2dyYW0gPSBQRVJDVVNTSU9OX1BST0dSQU07XG5cdFx0XHRpZiAoZ2xvYmFscy5iZWF0KVxuXHRcdFx0XHRzdGFydGluZ01pZGkucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IGdsb2JhbHMuYmVhdCB9KVxuXHRcdFx0aWYgKGdsb2JhbHMubm9iZWF0YWNjZW50cylcblx0XHRcdFx0c3RhcnRpbmdNaWRpLnB1c2goeyBlbF90eXBlOiAnYmVhdGFjY2VudHMnLCB2YWx1ZTogZmFsc2UgfSk7XG5cblx0XHR9XG5cblx0XHQvLyBTcGVjaWZpZWQgb3B0aW9ucyBpbiBhYmMgc3RyaW5nLlxuXG5cdFx0Ly8gSWYgdGhlIHRlbXBvIHdhcyBwYXNzZWQgaW4sIHVzZSB0aGF0LlxuXHRcdC8vIElmIHRoZSB0ZW1wbyBpcyBzcGVjaWZpZWQsIHVzZSB0aGF0LlxuXHRcdC8vIElmIHRoZXJlIGlzIGEgZGVmYXVsdCwgdXNlIHRoYXQuXG5cdFx0Ly8gT3RoZXJ3aXNlLCB1c2UgdGhlIGRlZmF1bHQuXG5cdFx0aWYgKG9wdGlvbnMucXBtKVxuXHRcdFx0cXBtID0gcGFyc2VJbnQob3B0aW9ucy5xcG0sIDEwKTtcblx0XHRlbHNlIGlmIChhYmN0dW5lLm1ldGFUZXh0LnRlbXBvKVxuXHRcdFx0cXBtID0gaW50ZXJwcmV0VGVtcG8oYWJjdHVuZS5tZXRhVGV4dC50ZW1wbyk7XG5cdFx0ZWxzZSBpZiAob3B0aW9ucy5kZWZhdWx0UXBtKVxuXHRcdFx0cXBtID0gb3B0aW9ucy5kZWZhdWx0UXBtO1xuXHRcdGVsc2Vcblx0XHRcdHFwbSA9IDE4MDsgXHQvLyBUaGUgdGVtcG8gaWYgdGhlcmUgaXNuJ3QgYSB0ZW1wbyBzcGVjaWZpZWQuXG5cblx0XHR2YXIgc3RhcnRWb2ljZSA9IFtdO1xuXHRcdGlmIChiYWdwaXBlcylcblx0XHRcdHN0YXJ0Vm9pY2UucHVzaCh7IGVsX3R5cGU6ICdiYWdwaXBlcycgfSk7XG5cdFx0c3RhcnRWb2ljZS5wdXNoKHsgZWxfdHlwZTogJ2luc3RydW1lbnQnLCBwcm9ncmFtOiBwcm9ncmFtIH0pO1xuXHRcdGlmIChjaGFubmVsKVxuXHRcdFx0c3RhcnRWb2ljZS5wdXNoKHsgZWxfdHlwZTogJ2NoYW5uZWwnLCBjaGFubmVsOiBjaGFubmVsIH0pO1xuXHRcdGlmICh0cmFuc3Bvc2UpXG5cdFx0XHRzdGFydFZvaWNlLnB1c2goeyBlbF90eXBlOiAndHJhbnNwb3NlJywgdHJhbnNwb3NlOiB0cmFuc3Bvc2UgfSk7XG5cdFx0c3RhcnRWb2ljZS5wdXNoKHsgZWxfdHlwZTogJ3RlbXBvJywgcXBtOiBxcG0gfSk7XG5cdFx0Zm9yICh2YXIgc3MgPSAwOyBzcyA8IHN0YXJ0aW5nTWlkaS5sZW5ndGg7c3MrKylcblx0XHRcdHN0YXJ0Vm9pY2UucHVzaChzdGFydGluZ01pZGlbc3NdKTtcblxuXHRcdC8vIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBpbnB1dCBzdHJ1Y3R1cmUgaXM6XG5cdFx0Ly8gYWJjdHVuZVxuXHRcdC8vXHRcdGFycmF5IGxpbmVzXG5cdFx0Ly9cdFx0XHRhcnJheSBzdGFmZlxuXHRcdC8vXHRcdFx0XHRvYmplY3Qga2V5XG5cdFx0Ly9cdFx0XHRcdG9iamVjdCBtZXRlclxuXHRcdC8vXHRcdFx0XHRhcnJheSB2b2ljZXNcblx0XHQvL1x0XHRcdFx0XHRhcnJheSBhYmNlbGVtXG5cblx0XHQvLyB2aXNpdCBlYWNoIHZvaWNlIGNvbXBsZXRlbHkgaW4gdHVyblxuXHRcdHZhciB2b2ljZXMgPSBbXTtcblx0XHR2YXIgc3RhcnRSZXBlYXRQbGFjZWhvbGRlciA9IFtdOyAvLyBUaGVyZSBpcyBhIHBsYWNlIGhvbGRlciBmb3IgZWFjaCB2b2ljZS5cblx0XHR2YXIgc2tpcEVuZGluZ1BsYWNlaG9sZGVyID0gW107IC8vIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHRoZSBmaXJzdCBlbmRpbmcgc3RhcnRzLlxuXHRcdHZhciBzdGFydGluZ0RydW1TZXQgPSBmYWxzZTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFiY3R1bmUubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdC8vIEZvciBlYWNoIGdyb3VwIG9mIHN0YWZmIGxpbmVzIGluIHRoZSB0dW5lLlxuXHRcdFx0dmFyIGxpbmUgPSBhYmN0dW5lLmxpbmVzW2ldO1xuXHRcdFx0aWYgKGxpbmUuc3RhZmYpIHtcblx0XHRcdFx0dmFyIHN0YXZlcyA9IGxpbmUuc3RhZmY7XG5cdFx0XHRcdHZhciB2b2ljZU51bWJlciA9IDA7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgc3RhdmVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIHN0YWZmID0gc3RhdmVzW2pdO1xuXHRcdFx0XHRcdC8vIEZvciBlYWNoIHN0YWZmIGxpbmVcblx0XHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IHN0YWZmLnZvaWNlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRcdFx0Ly8gRm9yIGVhY2ggdm9pY2UgaW4gYSBzdGFmZiBsaW5lXG5cdFx0XHRcdFx0XHR2YXIgdm9pY2UgPSBzdGFmZi52b2ljZXNba107XG5cdFx0XHRcdFx0XHRpZiAoIXZvaWNlc1t2b2ljZU51bWJlcl0pIHtcblx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXSA9IFtdLmNvbmNhdChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN0YXJ0Vm9pY2UpKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoc3RhZmYuY2xlZiAmJiBzdGFmZi5jbGVmLnR5cGUgPT09ICdwZXJjJykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjbCA9IDA7IGNsIDwgdm9pY2VzW3ZvaWNlTnVtYmVyXS5sZW5ndGg7IGNsKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodm9pY2VzW3ZvaWNlTnVtYmVyXVtjbF0uZWxfdHlwZSA9PT0gJ2luc3RydW1lbnQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXVtjbF0ucHJvZ3JhbSA9IFBFUkNVU1NJT05fUFJPR1JBTTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzdGFmZi5rZXkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmLmtleS5yb290ID09PSAnSFAnKVxuXHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7ZWxfdHlwZTogJ2tleScsIGFjY2lkZW50YWxzOiBbe2FjYzogJ25hdHVyYWwnLCBub3RlOiAnZyd9LCB7YWNjOiAnc2hhcnAnLCBub3RlOiAnZid9LCB7YWNjOiAnc2hhcnAnLCBub3RlOiAnYyd9XX0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHtlbF90eXBlOiAna2V5JywgYWNjaWRlbnRhbHM6IHN0YWZmLmtleS5hY2NpZGVudGFscyB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChzdGFmZi5tZXRlcikge1xuXHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goaW50ZXJwcmV0TWV0ZXIoc3RhZmYubWV0ZXIpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghc3RhcnRpbmdEcnVtU2V0ICYmIGRydW1PbikgeyAvLyBkcnVtIGluZm9ybWF0aW9uIGlzIG9ubHkgbmVlZGVkIG9uY2UsIHNvIHVzZSB0aGUgZmlyc3QgbGluZSBhbmQgdHJhY2sgMC5cblx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHtlbF90eXBlOiAnZHJ1bScsIHBhcmFtczoge3BhdHRlcm46IGRydW1QYXR0ZXJuLCBiYXJzOiBkcnVtQmFycywgb246IGRydW1PbiwgaW50cm86IGRydW1JbnRyb319KTtcblx0XHRcdFx0XHRcdFx0c3RhcnRpbmdEcnVtU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChzdGFmZi5jbGVmICYmIHN0YWZmLmNsZWYudHJhbnNwb3NlKSB7XG5cdFx0XHRcdFx0XHRcdHN0YWZmLmNsZWYuZWxfdHlwZSA9ICdjbGVmJztcblx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ3RyYW5zcG9zZScsIHRyYW5zcG9zZTogc3RhZmYuY2xlZi50cmFuc3Bvc2UgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYWJjdHVuZS5mb3JtYXR0aW5nLm1pZGkgJiYgYWJjdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW9mZikge1xuXHRcdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIGRydW0gb2ZmIGNvbW1hbmQgcmlnaHQgYXQgdGhlIGJlZ2lubmluZyBpdCBpcyBwdXQgaW4gdGhlIG1ldGFUZXh0IGluc3RlYWQgb2YgdGhlIHN0cmVhbSxcblx0XHRcdFx0XHRcdFx0Ly8gc28gd2Ugd2lsbCBqdXN0IGluc2VydCBpdCBoZXJlLlxuXHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAnYmFyJyB9KTtcblx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHtlbF90eXBlOiAnZHJ1bScsIHBhcmFtczoge3BhdHRlcm46IFwiXCIsIG9uOiBmYWxzZSB9fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgbm90ZUV2ZW50c0luQmFyID0gMDtcblx0XHRcdFx0XHRcdGZvciAodmFyIHYgPSAwOyB2IDwgdm9pY2UubGVuZ3RoOyB2KyspIHtcblx0XHRcdFx0XHRcdFx0Ly8gRm9yIGVhY2ggZWxlbWVudCBpbiBhIHZvaWNlXG5cdFx0XHRcdFx0XHRcdHZhciBlbGVtID0gdm9pY2Vbdl07XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoZWxlbS5lbF90eXBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5vdGVcIjpcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlZ3VsYXIgaXRlbXMgYXJlIGp1c3QgcHVzaGVkLlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFlbGVtLnJlc3QgfHwgZWxlbS5yZXN0LnR5cGUgIT09ICdzcGFjZXInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtLmRlY29yYXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbS5kZWNvcmF0aW9uLmluZGV4T2YoJ3BwcCcpID49IDApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAnYmVhdCcsIGJlYXRzOiBbMzAsIDIwLCAxMCwgMV0gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoZWxlbS5kZWNvcmF0aW9uLmluZGV4T2YoJ3BwJykgPj0gMClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IFs0NSwgMzUsIDIwLCAxXSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChlbGVtLmRlY29yYXRpb24uaW5kZXhPZigncCcpID49IDApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAnYmVhdCcsIGJlYXRzOiBbNjAsIDUwLCAzNSwgMV0gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoZWxlbS5kZWNvcmF0aW9uLmluZGV4T2YoJ21wJykgPj0gMClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IFs3NSwgNjUsIDUwLCAxXSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChlbGVtLmRlY29yYXRpb24uaW5kZXhPZignbWYnKSA+PSAwKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2JlYXQnLCBiZWF0czogWzkwLCA4MCwgNjUsIDFdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGVsZW0uZGVjb3JhdGlvbi5pbmRleE9mKCdmJykgPj0gMClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IFsxMDUsIDk1LCA4MCwgMV0gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoZWxlbS5kZWNvcmF0aW9uLmluZGV4T2YoJ2ZmJykgPj0gMClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IFsxMjAsIDExMCwgOTUsIDFdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGVsZW0uZGVjb3JhdGlvbi5pbmRleE9mKCdmZmYnKSA+PSAwKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2JlYXQnLCBiZWF0czogWzEyNywgMTI1LCAxMTAsIDFdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaChlbGVtKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm90ZUV2ZW50c0luQmFyKys7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwia2V5XCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbS5yb290ID09PSAnSFAnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goe2VsX3R5cGU6ICdrZXknLCBhY2NpZGVudGFsczogW3thY2M6ICduYXR1cmFsJywgbm90ZTogJ2cnfSwge2FjYzogJ3NoYXJwJywgbm90ZTogJ2YnfSwge2FjYzogJ3NoYXJwJywgbm90ZTogJ2MnfV19KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHtlbF90eXBlOiAna2V5JywgYWNjaWRlbnRhbHM6IGVsZW0uYWNjaWRlbnRhbHMgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibWV0ZXJcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaChpbnRlcnByZXRNZXRlcihlbGVtKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiY2xlZlwiOiAvLyBuZWVkIHRvIGtlZXAgdGhpcyB0byBjYXRjaCB0aGUgXCJ0cmFuc3Bvc2VcIiBlbGVtZW50LlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW0udHJhbnNwb3NlKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAndHJhbnNwb3NlJywgdHJhbnNwb3NlOiBlbGVtLnRyYW5zcG9zZSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJ0ZW1wb1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cXBtID0gaW50ZXJwcmV0VGVtcG8oZWxlbSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAndGVtcG8nLCBxcG06IHFwbSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJiYXJcIjpcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChub3RlRXZlbnRzSW5CYXIgPiAwKSAvLyBkb24ndCBhZGQgdHdvIGJhcnMgaW4gYSByb3cuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiYXInIH0pOyAvLyBXZSBuZWVkIHRoZSBiYXIgbWFya2luZyB0byByZXNldCB0aGUgYWNjaWRlbnRhbHMuXG5cdFx0XHRcdFx0XHRcdFx0XHRub3RlRXZlbnRzSW5CYXIgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZmlndXJlIG91dCByZXBlYXRzIGFuZCBlbmRpbmdzIC0tXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgaW1wb3J0YW50IHBhcnQgaXMgd2hlcmUgdGhlcmUgaXMgYSBzdGFydCByZXBlYXQsIGFuZCBlbmQgcmVwZWF0LCBvciBhIGZpcnN0IGVuZGluZy5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlbmRSZXBlYXQgPSAoZWxlbS50eXBlID09PSBcImJhcl9yaWdodF9yZXBlYXRcIiB8fCBlbGVtLnR5cGUgPT09IFwiYmFyX2RibF9yZXBlYXRcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgc3RhcnRFbmRpbmcgPSAoZWxlbS5zdGFydEVuZGluZyA9PT0gJzEnKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBzdGFydFJlcGVhdCA9IChlbGVtLnR5cGUgPT09IFwiYmFyX2xlZnRfcmVwZWF0XCIgfHwgZWxlbS50eXBlID09PSBcImJhcl9kYmxfcmVwZWF0XCIgfHwgZWxlbS50eXBlID09PSBcImJhcl9yaWdodF9yZXBlYXRcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZW5kUmVwZWF0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzID0gc3RhcnRSZXBlYXRQbGFjZWhvbGRlclt2b2ljZU51bWJlcl07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghcykgcyA9IDA7IC8vIElmIHRoZXJlIHdhc24ndCBhIGxlZnQgcmVwZWF0LCB0aGVuIHdlIHJlcGVhdCBmcm9tIHRoZSBiZWdpbm5pbmcuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBlID0gc2tpcEVuZGluZ1BsYWNlaG9sZGVyW3ZvaWNlTnVtYmVyXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFlKSBlID0gdm9pY2VzW3ZvaWNlTnVtYmVyXS5sZW5ndGg7IC8vIElmIHRoZXJlIHdhc24ndCBhIGZpcnN0IGVuZGluZyBtYXJrZXIsIHRoZW4gd2UgY29weSBldmVyeXRoaW5nLlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdID0gdm9pY2VzW3ZvaWNlTnVtYmVyXS5jb25jYXQodm9pY2VzW3ZvaWNlTnVtYmVyXS5zbGljZShzLCBlKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlc2V0IHRoZXNlIGluIGNhc2UgdGhlcmUgaXMgYSBzZWNvbmQgcmVwZWF0IGxhdGVyIG9uLlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRza2lwRW5kaW5nUGxhY2Vob2xkZXJbdm9pY2VOdW1iZXJdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFJlcGVhdFBsYWNlaG9sZGVyW3ZvaWNlTnVtYmVyXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChzdGFydEVuZGluZylcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2tpcEVuZGluZ1BsYWNlaG9sZGVyW3ZvaWNlTnVtYmVyXSA9IHZvaWNlc1t2b2ljZU51bWJlcl0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0UmVwZWF0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFJlcGVhdFBsYWNlaG9sZGVyW3ZvaWNlTnVtYmVyXSA9IHZvaWNlc1t2b2ljZU51bWJlcl0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnc3R5bGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IElmIHRoaXMgaXMgc2V0IHRvIHJoeXRobSBoZWFkcywgdGhlbiBpdCBzaG91bGQgdXNlIHRoZSBwZXJjdXNzaW9uIGNoYW5uZWwuXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlICdwYXJ0Jzpcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBJZiB0aGVyZSBpcyBhIHBhcnQgc2VjdGlvbiBpbiB0aGUgaGVhZGVyLCB0aGVuIHRoaXMgc2hvdWxkIHByb2JhYmx5IGFmZmVjdCB0aGUgcmVwZWF0cy5cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3N0ZW0nOlxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3NjYWxlJzpcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZXNlIGVsZW1lbnRzIGRvbid0IGFmZmVjdCBzb3VuZFxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnbWlkaSc6XG5cdFx0XHRcdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKFwiTUlESSBpbmxpbmVcIiwgZWxlbSk7IC8vIFRPRE8tUEVSOiBmb3IgZGVidWdnaW5nLiBSZW1vdmUgdGhpcy5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBkcnVtQ2hhbmdlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGVsZW0uY21kKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJkcnVtb25cIjogZHJ1bU9uID0gdHJ1ZTsgZHJ1bUNoYW5nZSA9IHRydWU7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZHJ1bW9mZlwiOiBkcnVtT24gPSBmYWxzZTsgZHJ1bUNoYW5nZSA9IHRydWU7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZHJ1bVwiOiBkcnVtUGF0dGVybiA9IGVsZW0ucGFyYW1zOyBkcnVtQ2hhbmdlID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJkcnVtYmFyc1wiOiBkcnVtQmFycyA9IGVsZW0ucGFyYW1zWzBdOyBkcnVtQ2hhbmdlID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJkcnVtbWFwXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBoYW5kbGVkIGJlZm9yZSBnZXR0aW5nIGhlcmUgc28gaXQgY2FuIGJlIGlnbm9yZWQuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJwcm9ncmFtXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2luc3RydW1lbnQnLCBwcm9ncmFtOiBlbGVtLnBhcmFtc1swXSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInRyYW5zcG9zZVwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICd0cmFuc3Bvc2UnLCB0cmFuc3Bvc2U6IGVsZW0ucGFyYW1zWzBdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZ2Nob3Jkb2ZmXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2djaG9yZCcsIHRhY2V0OiB0cnVlIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZ2Nob3Jkb25cIjpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAnZ2Nob3JkJywgdGFjZXQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiYmVhdFwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IGVsZW0ucGFyYW1zIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibm9iZWF0YWNjZW50c1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0YWNjZW50cycsIHZhbHVlOiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImJlYXRhY2NlbnRzXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2JlYXRhY2NlbnRzJywgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJ2b2xcIjpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAndm9sJywgdm9sdW1lOiBlbGVtLnBhcmFtc1swXSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInZvbGluY1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICd2b2xpbmMnLCB2b2x1bWU6IGVsZW0ucGFyYW1zWzBdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiTUlESSBzZXE6IG1pZGkgY21kIG5vdCBoYW5kbGVkOiBcIiwgZWxlbS5jbWQsIGVsZW0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGRydW1DaGFuZ2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzWzBdLnB1c2goe2VsX3R5cGU6ICdkcnVtJywgcGFyYW1zOiB7IHBhdHRlcm46IGRydW1QYXR0ZXJuLCBiYXJzOiBkcnVtQmFycywgaW50cm86IGRydW1JbnRybywgb246IGRydW1Pbn19KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRpbmdEcnVtU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIk1JREk6IGVsZW1lbnQgdHlwZSBcIiArIGVsZW0uZWxfdHlwZSArIFwiIG5vdCBoYW5kbGVkLlwiKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dm9pY2VOdW1iZXIrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGRydW1JbnRybykge1xuXHRcdFx0dmFyIHBpY2t1cHMgPSBhYmN0dW5lLmdldFBpY2t1cExlbmd0aCgpO1xuXHRcdFx0Ly8gYWRkIHNvbWUgbWVhc3VyZXMgb2YgcmVzdHMgdG8gdGhlIHN0YXJ0IG9mIGVhY2ggdHJhY2suXG5cdFx0XHRmb3IgKHZhciB2diA9IDA7IHZ2IDwgdm9pY2VzLmxlbmd0aDsgdnYrKykge1xuXHRcdFx0XHR2YXIgaW5zZXJ0UG9pbnQgPSAwO1xuXHRcdFx0XHR3aGlsZSAodm9pY2VzW3Z2XVtpbnNlcnRQb2ludF0uZWxfdHlwZSAhPT0gXCJub3RlXCIgJiYgdm9pY2VzW3Z2XS5sZW5ndGggPiBpbnNlcnRQb2ludClcblx0XHRcdFx0XHRpbnNlcnRQb2ludCsrO1xuXHRcdFx0XHRpZiAodm9pY2VzW3Z2XS5sZW5ndGggPiBpbnNlcnRQb2ludCkge1xuXHRcdFx0XHRcdGZvciAodmFyIHcgPSAwOyB3IDwgZHJ1bUludHJvOyB3KyspIHtcblx0XHRcdFx0XHRcdC8vIElmIGl0IGlzIHRoZSBsYXN0IG1lYXN1cmUgb2YgaW50cm8sIHN1YnRyYWN0IHRoZSBwaWNrdXBzLlxuXHRcdFx0XHRcdFx0aWYgKHBpY2t1cHMgPT09IDAgfHwgdyA8IGRydW1JbnRyby0xKVxuXHRcdFx0XHRcdFx0XHR2b2ljZXNbdnZdLnNwbGljZShpbnNlcnRQb2ludCwgMCwge2VsX3R5cGU6IFwibm90ZVwiLCByZXN0OiB7dHlwZTogXCJyZXN0XCJ9LCBkdXJhdGlvbjogbWVhc3VyZUxlbmd0aH0sXG5cdFx0XHRcdFx0XHRcdFx0eyBlbF90eXBlOiBcImJhclwiIH0pO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZvaWNlc1t2dl0uc3BsaWNlKGluc2VydFBvaW50LCAwLCB7ZWxfdHlwZTogXCJub3RlXCIsIHJlc3Q6IHt0eXBlOiBcInJlc3RcIn0sIGR1cmF0aW9uOiBtZWFzdXJlTGVuZ3RoLXBpY2t1cHN9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZvaWNlcztcblx0fTtcblxuXHRmdW5jdGlvbiBpbnRlcnByZXRUZW1wbyhlbGVtZW50KSB7XG5cdFx0dmFyIGR1cmF0aW9uID0gMS80O1xuXHRcdGlmIChlbGVtZW50LmR1cmF0aW9uKSB7XG5cdFx0XHRkdXJhdGlvbiA9IGVsZW1lbnQuZHVyYXRpb25bMF07XG5cdFx0fVxuXHRcdHZhciBicG0gPSA2MDtcblx0XHRpZiAoZWxlbWVudC5icG0pIHtcblx0XHRcdGJwbSA9IGVsZW1lbnQuYnBtO1xuXHRcdH1cblx0XHQvLyBUaGUgdGVtcG8gaXMgZGVmaW5lZCB3aXRoIGEgYmVhdCBvZiBhIDEvNCBub3RlLCBzbyB3ZSBuZWVkIHRvIGFkanVzdCBpdCBpZiB0aGUgdGVtcG8gaXMgZXhwcmVzc2VkIHdpdGggb3RoZXIgdGhhbiBhIHF1YXJ0ZXIgbm90ZS5cblx0XHQvLyBleHByZXNzZWREdXJhdGlvbiAqIGV4cHJlc3NlZEJlYXRzUGVyTWludXRlIC8gbGVuZ3RoT2ZRdWFydGVyTm90ZSA9IHF1YXJ0ZXJOb3Rlc1Blck1pbnV0ZVxuXHRcdHJldHVybiBkdXJhdGlvbiAqIGJwbSAvIDAuMjU7XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRlcnByZXRNZXRlcihlbGVtZW50KSB7XG5cdFx0dmFyIG1ldGVyO1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tbW9uX3RpbWVcIjpcblx0XHRcdFx0bWV0ZXIgPSB7IGVsX3R5cGU6ICdtZXRlcicsIG51bTogNCwgZGVuOiA0IH07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImN1dF90aW1lXCI6XG5cdFx0XHRcdG1ldGVyID0geyBlbF90eXBlOiAnbWV0ZXInLCBudW06IDIsIGRlbjogMiB9O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzcGVjaWZpZWRcIjpcblx0XHRcdFx0Ly8gVE9ETy1QRVI6IG9ubHkgdGFraW5nIHRoZSBmaXJzdCBtZXRlciwgc28gdGhlIGNvbXBsZXggbWV0ZXJzIGFyZSBub3QgaGFuZGxlZC5cblx0XHRcdFx0bWV0ZXIgPSB7IGVsX3R5cGU6ICdtZXRlcicsIG51bTogZWxlbWVudC52YWx1ZVswXS5udW0sIGRlbjogZWxlbWVudC52YWx1ZVswXS5kZW4gfTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG5cdFx0XHRcdG1ldGVyID0geyBlbF90eXBlOiAnbWV0ZXInIH07XG5cdFx0fVxuXHRcdG1lYXN1cmVMZW5ndGggPSBtZXRlci5udW0vbWV0ZXIuZGVuO1xuXHRcdHJldHVybiBtZXRlcjtcblx0fVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXF1ZW5jZTtcbiIsIi8vICAgIGFiY19taWRpX2ZsYXR0ZW5lci5qczogVHVybiBhIGxpbmVhciBzZXJpZXMgb2YgZXZlbnRzIGludG8gYSBzZXJpZXMgb2YgTUlESSBjb21tYW5kcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gV2UgaW5wdXQgYSBzZXQgb2Ygdm9pY2VzLCBidXQgdGhlIG5vdGVzIGFyZSBzdGlsbCBjb21wbGV4LiBUaGlzIHBhc3MgY2hhbmdlcyB0aGUgbG9naWNhbCBkZWZpbml0aW9uc1xuLy8gb2YgdGhlIGdyYWNlIG5vdGVzLCBkZWNvcmF0aW9ucywgdGllcywgdHJpcGxldHMsIHJlc3RzLCB0cmFuc3Bvc2l0aW9ucywga2V5cywgYW5kIGFjY2lkZW50YWxzIGludG8gYWN0dWFsIG5vdGUgZHVyYXRpb25zLlxuLy8gSXQgYWxzbyBleHRyYWN0cyBndWl0YXIgY2hvcmRzIHRvIGEgc2VwYXJhdGUgdm9pY2UgYW5kIHJlc29sdmVzIHRoZWlyIHJoeXRobS5cblxudmFyIGZsYXR0ZW47XG5cbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIGJhckFjY2lkZW50YWxzO1xuXHR2YXIgYWNjaWRlbnRhbHM7XG5cdHZhciB0cmFuc3Bvc2U7XG5cdHZhciBiYWdwaXBlcztcblx0dmFyIG11bHRpcGxpZXI7XG5cdHZhciB0cmFja3M7XG5cdHZhciBzdGFydGluZ1RlbXBvO1xuXHR2YXIgc3RhcnRpbmdNZXRlcjtcblx0dmFyIHRlbXBvQ2hhbmdlRmFjdG9yID0gMTtcblx0dmFyIGluc3RydW1lbnQ7XG5cdHZhciBjdXJyZW50SW5zdHJ1bWVudDtcblx0Ly8gdmFyIGNoYW5uZWw7XG5cdHZhciBjdXJyZW50VHJhY2s7XG5cdHZhciBwaXRjaGVzVGllZDtcblx0dmFyIGxhc3ROb3RlRHVyYXRpb25Qb3NpdGlvbjtcblx0dmFyIGN1cnJlbnRUcmFja0NvdW50ZXI7XG5cblx0dmFyIG1ldGVyID0geyBudW06IDQsIGRlbjogNCB9O1xuXHR2YXIgY2hvcmRUcmFjaztcblx0dmFyIGNob3JkVHJhY2tGaW5pc2hlZDtcblx0dmFyIGNob3JkQ2hhbm5lbDtcblx0dmFyIGNob3JkSW5zdHJ1bWVudCA9IDA7XG5cdHZhciBkcnVtSW5zdHJ1bWVudCA9IDEyODtcblx0dmFyIGN1cnJlbnRDaG9yZHM7XG5cdHZhciBsYXN0Q2hvcmQ7XG5cdHZhciBiYXJCZWF0O1xuXHR2YXIgZ0Nob3JkVGFjZXQgPSBmYWxzZTtcblx0dmFyIGRvQmVhdEFjY2VudHMgPSB0cnVlO1xuXHR2YXIgc3RyZXNzQmVhdDEgPSAxMDU7XG5cdHZhciBzdHJlc3NCZWF0RG93biA9IDk1O1xuXHR2YXIgc3RyZXNzQmVhdFVwID0gODU7XG5cdHZhciBiZWF0RnJhY3Rpb24gPSAwLjI1O1xuXHR2YXIgbmV4dFZvbHVtZTtcblx0dmFyIG5leHRWb2x1bWVEZWx0YTtcblxuXHR2YXIgZHJ1bVRyYWNrO1xuXHR2YXIgZHJ1bVRyYWNrRmluaXNoZWQ7XG5cdHZhciBkcnVtRGVmaW5pdGlvbiA9IHt9O1xuXG5cdHZhciBub3JtYWxCcmVha0JldHdlZW5Ob3RlcyA9IDEuMC8xMjg7XHQvLyBhIDEyOHRoIG5vdGUgb2Ygc2lsZW5jZSBiZXR3ZWVuIG5vdGVzIGZvciBhcnRpY3VsYXRpb24uXG5cblx0ZmxhdHRlbiA9IGZ1bmN0aW9uKHZvaWNlcywgb3B0aW9ucykge1xuXHRcdGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuXHRcdGJhckFjY2lkZW50YWxzID0gW107XG5cdFx0YWNjaWRlbnRhbHMgPSBbMCwwLDAsMCwwLDAsMF07XG5cdFx0YmFncGlwZXMgPSBmYWxzZTtcblx0XHRtdWx0aXBsaWVyID0gMTtcblx0XHR0cmFja3MgPSBbXTtcblx0XHRzdGFydGluZ1RlbXBvID0gdW5kZWZpbmVkO1xuXHRcdHN0YXJ0aW5nTWV0ZXIgPSB1bmRlZmluZWQ7XG5cdFx0dGVtcG9DaGFuZ2VGYWN0b3IgPSAxO1xuXHRcdGluc3RydW1lbnQgPSB1bmRlZmluZWQ7XG5cdFx0Y3VycmVudEluc3RydW1lbnQgPSB1bmRlZmluZWQ7XG5cdFx0Ly8gY2hhbm5lbCA9IHVuZGVmaW5lZDtcblx0XHRjdXJyZW50VHJhY2sgPSB1bmRlZmluZWQ7XG5cdFx0Y3VycmVudFRyYWNrQ291bnRlciA9IHVuZGVmaW5lZDtcblx0XHRwaXRjaGVzVGllZCA9IHt9O1xuXG5cdFx0Ly8gRm9yIHJlc29sdmluZyBjaG9yZHMuXG5cdFx0bWV0ZXIgPSB7IG51bTogNCwgZGVuOiA0IH07XG5cdFx0Y2hvcmRUcmFjayA9IFtdO1xuXHRcdGNob3JkQ2hhbm5lbCA9IHZvaWNlcy5sZW5ndGg7IC8vIGZpcnN0IGZyZWUgY2hhbm5lbCBmb3IgY2hvcmRzXG5cdFx0Y2hvcmRUcmFja0ZpbmlzaGVkID0gZmFsc2U7XG5cdFx0Y3VycmVudENob3JkcyA9IFtdO1xuXHRcdGxhc3RDaG9yZCA9IHVuZGVmaW5lZDtcblx0XHRiYXJCZWF0ID0gMDtcblx0XHRnQ2hvcmRUYWNldCA9IG9wdGlvbnMuY2hvcmRzT2ZmID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0ZG9CZWF0QWNjZW50cyA9IHRydWU7XG5cdFx0c3RyZXNzQmVhdDEgPSAxMDU7XG5cdFx0c3RyZXNzQmVhdERvd24gPSA5NTtcblx0XHRzdHJlc3NCZWF0VXAgPSA4NTtcblx0XHRiZWF0RnJhY3Rpb24gPSAwLjI1O1xuXHRcdG5leHRWb2x1bWUgPSB1bmRlZmluZWQ7XG5cdFx0bmV4dFZvbHVtZURlbHRhID0gdW5kZWZpbmVkO1xuXG5cdFx0Ly8gRm9yIHRoZSBkcnVtL21ldHJvbm9tZSB0cmFjay5cblx0XHRkcnVtVHJhY2sgPSBbXTtcblx0XHRkcnVtVHJhY2tGaW5pc2hlZCA9IGZhbHNlO1xuXHRcdGRydW1EZWZpbml0aW9uID0ge307XG5cblx0XHR6ZXJvT3V0TWlsbGlzZWNvbmRzKHZvaWNlcyk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dHJhbnNwb3NlID0gMDtcblx0XHRcdGxhc3ROb3RlRHVyYXRpb25Qb3NpdGlvbiA9IC0xO1xuXHRcdFx0dmFyIHZvaWNlID0gdm9pY2VzW2ldO1xuXHRcdFx0Y3VycmVudFRyYWNrID0gW3sgY21kOiAncHJvZ3JhbScsIGNoYW5uZWw6IGksIGluc3RydW1lbnQ6IGluc3RydW1lbnQgfV07XG5cdFx0XHRjdXJyZW50VHJhY2tDb3VudGVyID0gMDtcblx0XHRcdHBpdGNoZXNUaWVkID0ge307XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHZvaWNlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHZhciBlbGVtZW50ID0gdm9pY2Vbal07XG5cdFx0XHRcdHN3aXRjaCAoZWxlbWVudC5lbF90eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIm5vdGVcIjpcblx0XHRcdFx0XHRcdHdyaXRlTm90ZShlbGVtZW50LCBvcHRpb25zLnZvaWNlc09mZik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwia2V5XCI6XG5cdFx0XHRcdFx0XHRhY2NpZGVudGFscyA9IHNldEtleVNpZ25hdHVyZShlbGVtZW50KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJtZXRlclwiOlxuXHRcdFx0XHRcdFx0aWYgKCFzdGFydGluZ01ldGVyKVxuXHRcdFx0XHRcdFx0XHRzdGFydGluZ01ldGVyID0gZWxlbWVudDtcblx0XHRcdFx0XHRcdG1ldGVyID0gZWxlbWVudDtcblx0XHRcdFx0XHRcdGJlYXRGcmFjdGlvbiA9IGdldEJlYXRGcmFjdGlvbihtZXRlcik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwidGVtcG9cIjpcblx0XHRcdFx0XHRcdGlmICghc3RhcnRpbmdUZW1wbylcblx0XHRcdFx0XHRcdFx0c3RhcnRpbmdUZW1wbyA9IGVsZW1lbnQucXBtO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHR0ZW1wb0NoYW5nZUZhY3RvciA9IGVsZW1lbnQucXBtID8gc3RhcnRpbmdUZW1wbyAvIGVsZW1lbnQucXBtIDogMTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJ0cmFuc3Bvc2VcIjpcblx0XHRcdFx0XHRcdHRyYW5zcG9zZSA9IGVsZW1lbnQudHJhbnNwb3NlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImJhclwiOlxuXHRcdFx0XHRcdFx0aWYgKGNob3JkVHJhY2subGVuZ3RoID4gMCAmJiBpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVDaG9yZHMoKTtcblx0XHRcdFx0XHRcdFx0Y3VycmVudENob3JkcyA9IFtdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YmFyQmVhdCA9IDA7XG5cdFx0XHRcdFx0XHRiYXJBY2NpZGVudGFscyA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGkgPT09IDApIC8vIE9ubHkgd3JpdGUgdGhlIGRydW0gcGFydCBvbiB0aGUgZmlyc3Qgdm9pY2Ugc28gdGhhdCBpdCBpcyBub3QgZHVwbGljYXRlZC5cblx0XHRcdFx0XHRcdFx0d3JpdGVEcnVtKHZvaWNlcy5sZW5ndGgrMSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiYmFncGlwZXNcIjpcblx0XHRcdFx0XHRcdGJhZ3BpcGVzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJpbnN0cnVtZW50XCI6XG5cdFx0XHRcdFx0XHRpZiAoaW5zdHJ1bWVudCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHRpbnN0cnVtZW50ID0gZWxlbWVudC5wcm9ncmFtO1xuXHRcdFx0XHRcdFx0Y3VycmVudEluc3RydW1lbnQgPSBlbGVtZW50LnByb2dyYW07XG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudFRyYWNrLmxlbmd0aCA+IDAgJiYgY3VycmVudFRyYWNrW2N1cnJlbnRUcmFjay5sZW5ndGgtMV0uY21kID09PSAncHJvZ3JhbScpXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUcmFja1tjdXJyZW50VHJhY2subGVuZ3RoLTFdLmluc3RydW1lbnQgPSBlbGVtZW50LnByb2dyYW07XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGlpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGlpID0gY3VycmVudFRyYWNrLmxlbmd0aC0xOyBpaSA+PSAwICYmIGN1cnJlbnRUcmFja1tpaV0uY21kICE9PSAncHJvZ3JhbSc7IGlpLS0pXG5cdFx0XHRcdFx0XHRcdFx0O1xuXHRcdFx0XHRcdFx0XHRpZiAoaWkgPCAwIHx8IGN1cnJlbnRUcmFja1tpaV0uaW5zdHJ1bWVudCAhPT0gZWxlbWVudC5wcm9ncmFtKVxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUcmFjay5wdXNoKHtjbWQ6ICdwcm9ncmFtJywgY2hhbm5lbDogaSwgaW5zdHJ1bWVudDogZWxlbWVudC5wcm9ncmFtfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY2hhbm5lbFwiOlxuXHRcdFx0XHRcdC8vIFx0aWYgKGNoYW5uZWwgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHQvLyBcdFx0Y2hhbm5lbCA9IGVsZW1lbnQuY2hhbm5lbDtcblx0XHRcdFx0XHQvLyBcdGN1cnJlbnRUcmFja1swXS5jaGFubmVsID0gZWxlbWVudC5jaGFubmVsO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImRydW1cIjpcblx0XHRcdFx0XHRcdGRydW1EZWZpbml0aW9uID0gbm9ybWFsaXplRHJ1bURlZmluaXRpb24oZWxlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImdjaG9yZFwiOlxuXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmNob3Jkc09mZilcblx0XHRcdFx0XHRcdFx0Z0Nob3JkVGFjZXQgPSBlbGVtZW50LnRhY2V0O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImJlYXRcIjpcblx0XHRcdFx0XHRcdHN0cmVzc0JlYXQxID0gZWxlbWVudC5iZWF0c1swXTtcblx0XHRcdFx0XHRcdHN0cmVzc0JlYXREb3duID0gZWxlbWVudC5iZWF0c1sxXTtcblx0XHRcdFx0XHRcdHN0cmVzc0JlYXRVcCA9IGVsZW1lbnQuYmVhdHNbMl07XG5cdFx0XHRcdFx0XHQvLyBUT0RPLVBFUjogYWxzbyB1c2UgdGhlIGxhc3QgcGFyYW1ldGVyIC0gd2hpY2ggY2hhbmdlcyB3aGljaCBiZWF0cyBhcmUgc3Ryb25nLlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInZvbFwiOlxuXHRcdFx0XHRcdFx0bmV4dFZvbHVtZSA9IGVsZW1lbnQudm9sdW1lO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInZvbGluY1wiOlxuXHRcdFx0XHRcdFx0bmV4dFZvbHVtZURlbHRhID0gZWxlbWVudC52b2x1bWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiYmVhdGFjY2VudHNcIjpcblx0XHRcdFx0XHRcdGRvQmVhdEFjY2VudHMgPSBlbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJNSURJIGNyZWF0aW9uLiBVbmtub3duIGVsX3R5cGU6IFwiICsgZWxlbWVudC5lbF90eXBlICsgXCJcXG5cIik7Ly8ganNoaW50IGlnbm9yZTpsaW5lXG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRUcmFja1swXS5pbnN0cnVtZW50ID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGN1cnJlbnRUcmFja1swXS5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudCA/IGluc3RydW1lbnQgOiAwO1xuXHRcdFx0dHJhY2tzLnB1c2goY3VycmVudFRyYWNrKTtcblx0XHRcdGlmIChjaG9yZFRyYWNrLmxlbmd0aCA+IDApIC8vIERvbid0IGRvIGNob3JkcyBvbiBtb3JlIHRoYW4gb25lIHRyYWNrLCBzbyB0dXJuIG9mZiBjaG9yZCBkZXRlY3Rpb24gYWZ0ZXIgd2UgY3JlYXRlIGl0LlxuXHRcdFx0XHRjaG9yZFRyYWNrRmluaXNoZWQgPSB0cnVlO1xuXHRcdFx0aWYgKGRydW1UcmFjay5sZW5ndGggPiAwKSAvLyBEb24ndCBkbyBkcnVtcyBvbiBtb3JlIHRoYW4gb25lIHRyYWNrLCBzbyB0dXJuIG9mZiBkcnVtIGFmdGVyIHdlIGNyZWF0ZSBpdC5cblx0XHRcdFx0ZHJ1bVRyYWNrRmluaXNoZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoY2hvcmRUcmFjay5sZW5ndGggPiAwKVxuXHRcdFx0dHJhY2tzLnB1c2goY2hvcmRUcmFjayk7XG5cdFx0aWYgKGRydW1UcmFjay5sZW5ndGggPiAwKVxuXHRcdFx0dHJhY2tzLnB1c2goZHJ1bVRyYWNrKTtcblx0XHQvLyBBZGp1c3QgdGhlIHRlbXBvIGFjY29yZGluZyB0byB0aGUgbWV0ZXIuIFRoZSBydWxlcyBhcmUgdGhpczpcblx0XHQvLyAxKSBJZiB0aGUgZGVub21pbmF0b3IgaXMgMiBvciA0LCB0aGVuIGFsd2F5cyBtYWtlIGEgYmVhdCBiZSB0aGUgZGVub21pbmF0b3IuXG5cdFx0Ly9cblx0XHQvLyAyKSBJZiB0aGUgZGVub21pbmF0b3IgaXMgOCBvciAxNiwgdGhlbjpcblx0XHQvLyBhKSBJZiB0aGUgbnVtZXJhdG9yIGlzIGRpdmlzaWJsZSBieSAzLCB0aGUgYmVhdCBpcyAzKmRlbm9taW5hdG9yLlxuXHRcdC8vIGIpIE90aGVyd2lzZSB0aGUgYmVhdCBpcyB0aGUgZGVub21pbmF0b3IuXG5cdFx0Ly9cblx0XHQvLyAzKSBJZiB0aGUgZGVub21pbmF0b3IgaXMgYW55dGhpbmcgZWxzZSwgdGhlbiBkb24ndCB3b3JyeSBhYm91dCBpdCBiZWNhdXNlIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZS4gRG9uJ3QgbW9kaWZ5IGl0IGFuZCBob3BlIGZvciB0aGUgYmVzdC5cblx0XHQvL1xuXHRcdC8vIFJpZ2h0IG5vdywgdGhlIHN0YXJ0aW5nVGVtcG8gaXMgY2FsY3VsYXRlZCBmb3IgYSBxdWFydGVyIG5vdGUsIHNvIG1vZGlmeSBpdCBpZiBuZWNlc3NhcnkuXG5cdFx0Ly8gdmFyIG51bSA9IHN0YXJ0aW5nTWV0ZXIgPyBwYXJzZUludChzdGFydGluZ01ldGVyLm51bSwgMTApIDogbWV0ZXIubnVtO1xuXHRcdC8vIHZhciBkZW4gPSBzdGFydGluZ01ldGVyID8gcGFyc2VJbnQoc3RhcnRpbmdNZXRlci5kZW4sIDEwKSA6IG1ldGVyLmRlbjtcblx0XHQvLyBpZiAoZGVuID09PSAyKVxuXHRcdC8vIFx0c3RhcnRpbmdUZW1wbyAqPSAyO1xuXHRcdC8vIGVsc2UgaWYgKGRlbiA9PT0gOCkge1xuXHRcdC8vIFx0aWYgKHBhcnNlSW50KG51bSwgMTApICUgMyA9PT0gMClcblx0XHQvLyBcdFx0c3RhcnRpbmdUZW1wbyAqPSAzLzI7XG5cdFx0Ly8gXHRlbHNlXG5cdFx0Ly8gXHRcdHN0YXJ0aW5nVGVtcG8gLz0gMjtcblx0XHQvLyB9IGVsc2UgaWYgKGRlbiA9PT0gMTYpIHtcblx0XHQvLyBcdGlmIChudW0gJSAzID09PSAwKVxuXHRcdC8vIFx0XHRzdGFydGluZ1RlbXBvICo9IDMvNDtcblx0XHQvLyBcdGVsc2Vcblx0XHQvLyBcdFx0c3RhcnRpbmdUZW1wbyAvPSA0O1xuXHRcdC8vIH1cblxuXHRcdHJldHVybiB7IHRlbXBvOiBzdGFydGluZ1RlbXBvLCBpbnN0cnVtZW50OiBpbnN0cnVtZW50LCB0cmFja3M6IHRyYWNrcywgdG90YWxEdXJhdGlvbjogdG90YWxEdXJhdGlvbih0cmFja3MpIH07XG5cdH07XG5cblx0ZnVuY3Rpb24gemVyb091dE1pbGxpc2Vjb25kcyh2b2ljZXMpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHZvaWNlID0gdm9pY2VzW2ldO1xuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB2b2ljZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHR2YXIgZWxlbWVudCA9IHZvaWNlW2pdO1xuXHRcdFx0XHRkZWxldGUgZWxlbWVudC5jdXJyZW50VHJhY2tNaWxsaXNlY29uZHM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdG90YWxEdXJhdGlvbih0cmFja3MpIHtcblx0XHR2YXIgdG90YWwgPSAwO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgdHJhY2sgPSB0cmFja3NbaV07XG5cdFx0XHR2YXIgdHJhY2tUb3RhbCA9IDA7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRyYWNrLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHZhciBldmVudCA9IHRyYWNrW2pdO1xuXHRcdFx0XHRpZiAoZXZlbnQuZHVyYXRpb24pXG5cdFx0XHRcdFx0dHJhY2tUb3RhbCArPSBldmVudC5kdXJhdGlvbjtcblx0XHRcdH1cblx0XHRcdHRvdGFsID0gTWF0aC5tYXgodG90YWwsIHRyYWNrVG90YWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gdG90YWw7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRCZWF0RnJhY3Rpb24obWV0ZXIpIHtcblx0XHRzd2l0Y2ggKG1ldGVyLmRlbikge1xuXHRcdFx0Y2FzZSAyOiByZXR1cm4gMC41O1xuXHRcdFx0Y2FzZSA0OiByZXR1cm4gMC4yNTtcblx0XHRcdGNhc2UgODogcmV0dXJuIDAuMzc1O1xuXHRcdFx0Y2FzZSAxNjogcmV0dXJuIDAuMTI1O1xuXHRcdH1cblx0XHRyZXR1cm4gMC4yNTtcblx0fVxuXHQvL1xuXHQvLyBUaGUgYWxnb3JpdGhtIGZvciBjaG9yZHMgaXM6XG5cdC8vIC0gVGhlIGNob3JkcyBhcmUgZG9uZSBpbiBhIHNlcGFyYXRlIHRyYWNrLlxuXHQvLyAtIElmIHRoZXJlIGFyZSBub3RlcyBiZWZvcmUgdGhlIGZpcnN0IGNob3JkLCB0aGVuIHB1dCB0aGF0IG11Y2ggc2lsZW5jZSB0byBzdGFydCB0aGUgdHJhY2suXG5cdC8vIC0gVGhlIHBhdHRlcm4gb2YgY2hvcmQgZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBtZXRlciwgYW5kIGhvdyBtYW55IGNob3JkcyBhcmUgaW4gYSBtZWFzdXJlLlxuXHQvLyAtIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCBhIG1lYXN1cmUgd2lsbCBoYXZlIGFuIGluY29ycmVjdCBudW1iZXIgb2YgYmVhdHMsIGlmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZW5cblx0Ly8gc3RhcnQgdGhlIHBhdHRlcm4gYW5ldyBvbiB0aGUgbmV4dCBtZWFzdXJlIG51bWJlci5cblx0Ly8gLSBJZiBhIGNob3JkIHJvb3QgaXMgbm90IEEtRywgdGhlbiBpZ25vcmUgaXQgYXMgaWYgdGhlIGNob3JkIHdhc24ndCB0aGVyZSBhdCBhbGwuXG5cdC8vIC0gSWYgYSBjaG9yZCBtb2RpZmljYXRpb24gaXNuJ3QgaW4gb3VyIHN1cHBvcnRlZCBsaXN0LCBjaGFuZ2UgaXQgdG8gYSBtYWpvciB0cmlhZC5cblx0Ly9cblx0Ly8gLSBJZiB0aGVyZSBpcyBvbmx5IG9uZSBjaG9yZCBpbiBhIG1lYXN1cmU6XG5cdC8vXHRcdC0gSWYgMi80LCBwbGF5IHJvb3QgY2hvcmRcblx0Ly9cdFx0LSBJZiBjdXQgdGltZSwgcGxheSByb290KDEpIGNob3JkKDMpXG5cdC8vXHRcdC0gSWYgMy80LCBwbGF5IHJvb3QgY2hvcmQgY2hvcmRcblx0Ly9cdFx0LSBJZiA0LzQgb3IgY29tbW9uIHRpbWUsIHBsYXkgcm9vdCBjaG9yZCBmaWZ0aCBjaG9yZFxuXHQvL1x0XHQtIElmIDYvOCwgcGxheSByb290KDEpIGNob3JkKDMpIGZpZnRoKDQpIGNob3JkKDYpXG5cdC8vXHRcdC0gRm9yIGFueSBvdGhlciBtZXRlciwgcGxheSB0aGUgZnVsbCBjaG9yZCBvbiBlYWNoIGJlYXQuIChUT0RPLVBFUjogZXhwYW5kIHRoaXMgYXMgbW9yZSBzdXBwb3J0IGlzIGFkZGVkLilcblx0Ly9cblx0Ly9cdC0gSWYgdGhlcmUgaXMgYSBjaG9yZCBzcGVjaWZpZWQgdGhhdCBpcyBub3Qgb24gYSBiZWF0LCBtb3ZlIGl0IGVhcmxpZXIgdG8gdGhlIHByZXZpb3VzIGJlYXQsIHVubGVzcyB0aGVyZSBpcyBhbHJlYWR5IGEgY2hvcmQgb24gdGhhdCBiZWF0LlxuXHQvL1x0LSBPdGhlcndpc2UsIG1vdmUgaXQgbGF0ZXIsIHVubGVzcyB0aGVyZSBpcyBhbHJlYWR5IGEgY2hvcmQgb24gdGhhdCBiZWF0LlxuXHQvLyBcdC0gT3RoZXJ3aXNlLCBpZ25vcmUgaXQuIChUT0RPLVBFUjogZXhwYW5kIHRoaXMgYXMgbW9yZSBzdXBwb3J0IGlzIGFkZGVkLilcblx0Ly9cblx0Ly8gLSBJZiB0aGVyZSBpcyBhIGNob3JkIG9uIHRoZSBzZWNvbmQgYmVhdCwgcGxheSBhIGNob3JkIGZvciB0aGUgZmlyc3QgYmVhdCBpbnN0ZWFkIG9mIGEgYmFzcyBub3RlLlxuXHQvLyAtIExpa2V3aXNlLCBpZiB0aGVyZSBpcyBhIGNob3JkIG9uIHRoZSBmb3VydGggYmVhdCBvZiA0LzQsIHBsYXkgYSBjaG9yZCBvbiB0aGUgdGhpcmQgYmVhdCBpbnN0ZWFkIG9mIGEgYmFzcyBub3RlLlxuXHQvL1xuXHR2YXIgYnJlYWtTeW5vbnltcyA9IFsgJ2JyZWFrJywgJyhicmVhayknLCAnbm8gY2hvcmQnLCAnbi5jLicsICd0YWNldCddO1xuXG5cdGZ1bmN0aW9uIGZpbmRDaG9yZChlbGVtKSB7XG5cdFx0aWYgKGdDaG9yZFRhY2V0KVxuXHRcdFx0cmV0dXJuICdicmVhayc7XG5cblx0XHQvLyBUT0RPLVBFUjogSnVzdCB1c2luZyB0aGUgZmlyc3QgY2hvcmQgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUuXG5cdFx0aWYgKGNob3JkVHJhY2tGaW5pc2hlZCB8fCAhZWxlbS5jaG9yZCB8fCBlbGVtLmNob3JkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBmaXJzdCBhbm5vdGF0aW9uIHRoYXQgaXMgYSByZWd1bGFyIGNob3JkOiB0aGF0IGlzLCBpdCBpcyBpbiB0aGUgZGVmYXVsdCBwbGFjZSBvciBpcyBhIHJlY29nbml6ZWQgXCJ0YWNldFwiIHBocmFzZS5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hvcmQubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjaCA9IGVsZW0uY2hvcmRbaV07XG5cdFx0XHRpZiAoY2gucG9zaXRpb24gPT09ICdkZWZhdWx0Jylcblx0XHRcdFx0cmV0dXJuIGNoLm5hbWU7XG5cdFx0XHRpZiAoYnJlYWtTeW5vbnltcy5pbmRleE9mKGNoLm5hbWUudG9Mb3dlckNhc2UoKSkgPj0gMClcblx0XHRcdFx0cmV0dXJuICdicmVhayc7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gdGltZUZyb21TdGFydCgpIHtcblx0XHR2YXIgZGlzdGFuY2UgPSAwO1xuXHRcdGZvciAodmFyIGN0ID0gMDsgY3QgPCBjdXJyZW50VHJhY2subGVuZ3RoOyBjdCsrKSB7XG5cdFx0XHRpZiAoY3VycmVudFRyYWNrW2N0XS5jbWQgPT09ICdtb3ZlJylcblx0XHRcdFx0ZGlzdGFuY2UgKz0gY3VycmVudFRyYWNrW2N0XS5kdXJhdGlvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGRpc3RhbmNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3JpdGVOb3RlKGVsZW0sIHZvaWNlT2ZmKSB7XG5cdFx0Ly9cblx0XHQvLyBDcmVhdGUgYSBzZXJpZXMgb2Ygbm90ZSBldmVudHMgdG8gYXBwZW5kIHRvIHRoZSBjdXJyZW50IHRyYWNrLlxuXHRcdC8vIFRoZSBvdXRwdXQgZXZlbnQgaXMgb25lIG9mOiB7IHBpdGNoU3RhcnQ6IHBpdGNoX2luX2FiY191bml0cywgdm9sdW1lOiBmcm9tXzFfdG9fNjQgfVxuXHRcdC8vIHsgcGl0Y2hTdG9wOiBwaXRjaF9pbl9hYmNfdW5pdHMgfVxuXHRcdC8vIHsgbW92ZVRpbWU6IGR1cmF0aW9uX2luX2FiY191bml0cyB9XG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGd1aXRhciBjaG9yZHMsIHRoZW4gdGhleSBhcmUgcHV0IGluIGEgc2VwYXJhdGUgdHJhY2ssIGJ1dCB0aGV5IGhhdmUgdGhlIHNhbWUgZm9ybWF0LlxuXHRcdC8vXG5cblx0XHR2YXIgdm9sdW1lO1xuXHRcdGlmIChuZXh0Vm9sdW1lKSB7XG5cdFx0XHR2b2x1bWUgPSBuZXh0Vm9sdW1lO1xuXHRcdFx0bmV4dFZvbHVtZSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKCFkb0JlYXRBY2NlbnRzKSB7XG5cdFx0XHR2b2x1bWUgPSBzdHJlc3NCZWF0RG93bjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGJhckJlYXQgPT09IDApXG5cdFx0XHRcdHZvbHVtZSA9IHN0cmVzc0JlYXQxO1xuXHRcdFx0ZWxzZSBpZiAoYmFyQmVhdCAlIGJlYXRGcmFjdGlvbiA8IDAuMDAxKSAvLyBBIGxpdHRsZSBzbG9wIGJlY2F1c2Ugb2YgSmF2YVNjcmlwdCBmbG9hdGluZyBwb2ludCBtYXRoLlxuXHRcdFx0XHR2b2x1bWUgPSBzdHJlc3NCZWF0RG93bjtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dm9sdW1lID0gc3RyZXNzQmVhdFVwO1xuXHRcdH1cblx0XHRpZiAobmV4dFZvbHVtZURlbHRhKSB7XG5cdFx0XHR2b2x1bWUgKz0gbmV4dFZvbHVtZURlbHRhO1xuXHRcdFx0bmV4dFZvbHVtZURlbHRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAodm9sdW1lIDwgMClcblx0XHRcdHZvbHVtZSA9IDA7XG5cdFx0aWYgKHZvbHVtZSA+IDEyNylcblx0XHRcdHZvbHVtZSA9IDEyNztcblx0XHR2YXIgdmVsb2NpdHkgPSB2b2ljZU9mZiA/IDAgOiB2b2x1bWU7XG5cdFx0dmFyIGNob3JkID0gZmluZENob3JkKGVsZW0pO1xuXHRcdGlmIChjaG9yZCkge1xuXHRcdFx0dmFyIGMgPSBpbnRlcnByZXRDaG9yZChjaG9yZCk7XG5cdFx0XHQvLyBJZiB0aGlzIGlzbid0IGEgcmVjb2duaXplZCBjaG9yZCwganVzdCBjb21wbGV0ZWx5IGlnbm9yZSBpdC5cblx0XHRcdGlmIChjKSB7XG5cdFx0XHRcdC8vIElmIHdlIGV2ZXIgaGF2ZSBhIGNob3JkIGluIHRoaXMgdm9pY2UsIHRoZW4gd2UgYWRkIHRoZSBjaG9yZCB0cmFjay5cblx0XHRcdFx0Ly8gSG93ZXZlciwgaWYgdGhlcmUgYXJlIGNob3JkcyBvbiBtb3JlIHRoYW4gb25lIHZvaWNlLCB0aGVuIGp1c3QgdXNlIHRoZSBmaXJzdCB2b2ljZS5cblx0XHRcdFx0aWYgKGNob3JkVHJhY2subGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Y2hvcmRUcmFjay5wdXNoKHtjbWQ6ICdwcm9ncmFtJywgY2hhbm5lbDogY2hvcmRDaGFubmVsLCBpbnN0cnVtZW50OiBjaG9yZEluc3RydW1lbnR9KTtcblx0XHRcdFx0XHQvLyBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGZhciBpbiB0aW1lIHRoZSBjaG9yZCBzdGFydGVkOiBpZiB0aGVyZSBhcmUgcGlja3VwIG5vdGVzIGJlZm9yZSB0aGUgY2hvcmRzIHN0YXJ0LCB3ZSBuZWVkIHBhdXNlcy5cblx0XHRcdFx0XHR2YXIgZGlzdGFuY2UgPSB0aW1lRnJvbVN0YXJ0KCk7XG5cdFx0XHRcdFx0aWYgKGRpc3RhbmNlID4gMClcblx0XHRcdFx0XHRcdGNob3JkVHJhY2sucHVzaCh7Y21kOiAnbW92ZScsIGR1cmF0aW9uOiBkaXN0YW5jZSp0ZW1wb0NoYW5nZUZhY3RvciB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxhc3RDaG9yZCA9IGM7XG5cdFx0XHRcdGN1cnJlbnRDaG9yZHMucHVzaCh7Y2hvcmQ6IGxhc3RDaG9yZCwgYmVhdDogYmFyQmVhdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbGVtLnN0YXJ0VHJpcGxldCkge1xuXHRcdFx0bXVsdGlwbGllciA9IGVsZW0udHJpcGxldE11bHRpcGxpZXI7XG5cdFx0fVxuXG5cdFx0dmFyIGR1cmF0aW9uID0gKGVsZW0uZHVyYXRpb25DbGFzcyA/IGVsZW0uZHVyYXRpb25DbGFzcyA6IGVsZW0uZHVyYXRpb24pICptdWx0aXBsaWVyO1xuXHRcdGJhckJlYXQgKz0gZHVyYXRpb247XG5cblx0XHQvLyBpZiB0aGVyZSBhcmUgZ3JhY2Ugbm90ZXMsIHRoZW4gYWxzbyBwbGF5IHRoZW0uXG5cdFx0Ly8gSSdtIG5vdCBzdXJlIHRoZXJlIGlzIGFuIGV4YWN0IHJ1bGUgZm9yIHRoZSBsZW5ndGggb2YgdGhlIG5vdGVzLiBNeSBydWxlLCB1bmxlc3MgSSBmaW5kXG5cdFx0Ly8gYSBiZXR0ZXIgb25lIGlzOiB0aGUgZ3JhY2Ugbm90ZXMgY2Fubm90IHRha2UgbW9yZSB0aGFuIDEvMiBvZiB0aGUgbWFpbiBub3RlJ3MgdmFsdWUuXG5cdFx0Ly8gQSBncmFjZSBub3RlIChvZiAxLzggbm90ZSBkdXJhdGlvbikgdGFrZXMgMS84IG9mIHRoZSBtYWluIG5vdGUncyB2YWx1ZS5cblx0XHR2YXIgZ3JhY2VzO1xuXHRcdGlmIChlbGVtLmdyYWNlbm90ZXMpIHtcblx0XHRcdC8vIFRoZXJlIGFyZSB0d28gY2FzZXM6IGlmIHRoaXMgaXMgYmFncGlwZSwgdGhlIGdyYWNlIG5vdGVzIGFyZSBwbGF5ZWQgb24gdGhlIGJlYXQgd2l0aCB0aGUgY3VycmVudCBub3RlLlxuXHRcdFx0Ly8gTm9ybWFsbHksIHRoZSBncmFjZSBub3RlcyB3b3VsZCBiZSBwbGF5ZWQgYmVmb3JlIHRoZSBiZWF0LiAoSWYgdGhpcyBpcyB0aGUgZmlyc3Qgbm90ZSBpbiB0aGUgdHJhY2ssIGhvd2V2ZXIsIHRoZW4gaXQgaXMgcGxheWVkIG9uIHRoZSBjdXJyZW50IGJlYXQuKVxuXHRcdFx0Ly8gVGhlIHJlYXNvbiBmb3IgdGhlIGV4Y2VwdGlvbiBvbiB0aGUgZmlyc3Qgbm90ZSBpcyB0aGF0IGl0IHdvdWxkIG90aGVyd2lzZSBtb3ZlIHRoZSB3aG9sZSB0cmFjayBpbiB0aW1lIGFuZCB3b3VsZCBhZmZlY3QgYWxsIHRoZSBvdGhlciB0cmFja3MuXG5cdFx0XHR2YXIgc3RlYWxGcm9tQ3VycmVudCA9IChiYWdwaXBlcyB8fCBsYXN0Tm90ZUR1cmF0aW9uUG9zaXRpb24gPCAwIHx8IGN1cnJlbnRUcmFjay5sZW5ndGggPT09IDApO1xuXHRcdFx0dmFyIHN0ZWFsRnJvbUR1cmF0aW9uID0gc3RlYWxGcm9tQ3VycmVudCA/IGR1cmF0aW9uIDogY3VycmVudFRyYWNrW2xhc3ROb3RlRHVyYXRpb25Qb3NpdGlvbl0uZHVyYXRpb247XG5cdFx0XHRncmFjZXMgPSBwcm9jZXNzR3JhY2VOb3RlcyhlbGVtLmdyYWNlbm90ZXMsIHN0ZWFsRnJvbUR1cmF0aW9uKTtcblx0XHRcdGlmICghYmFncGlwZXMpIHtcblx0XHRcdFx0ZHVyYXRpb24gPSB3cml0ZUdyYWNlTm90ZXMoZ3JhY2VzLCBzdGVhbEZyb21DdXJyZW50LCBkdXJhdGlvbiwgbnVsbCwgdmVsb2NpdHkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFRoZSBjdXJyZW50VHJhY2tDb3VudGVyIGlzIHRoZSBudW1iZXIgb2Ygd2hvbGUgbm90ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwaWVjZS5cblx0XHQvLyBUaGUgYmVhdCBmcmFjdGlvbiBpcyB0aGUgbm90ZSB0aGF0IGdldHMgYSBiZWF0ICguMjUgaXMgYSBxdWFydGVyIG5vdGUpXG5cdFx0Ly8gVGhlIHRlbXBvIGlzIGluIG1pbnV0ZXMgYW5kIHdlIHdhbnQgdG8gZ2V0IHRvIG1pbGxpc2Vjb25kcy5cblx0XHRpZiAoIWVsZW0uY3VycmVudFRyYWNrTWlsbGlzZWNvbmRzKVxuXHRcdFx0ZWxlbS5jdXJyZW50VHJhY2tNaWxsaXNlY29uZHMgPSBbXTtcblx0XHRlbGVtLmN1cnJlbnRUcmFja01pbGxpc2Vjb25kcy5wdXNoKGN1cnJlbnRUcmFja0NvdW50ZXIgLyBiZWF0RnJhY3Rpb24gLyBzdGFydGluZ1RlbXBvICogNjAqMTAwMCk7XG5cdFx0aWYgKGVsZW0ucGl0Y2hlcykge1xuXHRcdFx0aWYgKGdyYWNlcyAmJiBiYWdwaXBlcykge1xuXHRcdFx0XHQvLyBJZiBpdCBpcyBiYWdwaXBlcywgdGhlbiB0aGUgZ3JhY2VzIGFyZSBwbGF5ZWQgd2l0aCB0aGUgbm90ZS4gSWYgdGhlIGdyYWNlIGhhcyB0aGUgc2FtZSBwaXRjaCBhcyB0aGUgbm90ZSwgdGhlbiB3ZSBqdXN0IHNraXAgaXQuXG5cdFx0XHRcdGR1cmF0aW9uID0gd3JpdGVHcmFjZU5vdGVzKGdyYWNlcywgdHJ1ZSwgZHVyYXRpb24sIG51bGwsIHZlbG9jaXR5KTtcblx0XHRcdH1cblx0XHRcdHZhciBwaXRjaGVzID0gW107XG5cdFx0XHRlbGVtLm1pZGlQaXRjaGVzID0gW107XG5cdFx0XHRmb3IgKHZhciBpPTA7IGk8ZWxlbS5waXRjaGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBub3RlID0gZWxlbS5waXRjaGVzW2ldO1xuXHRcdFx0XHR2YXIgYWN0dWFsUGl0Y2ggPSBhZGp1c3RQaXRjaChub3RlKTtcblx0XHRcdFx0cGl0Y2hlcy5wdXNoKHsgcGl0Y2g6IGFjdHVhbFBpdGNoLCBzdGFydFRpZTogbm90ZS5zdGFydFRpZSB9KTtcblx0XHRcdFx0ZWxlbS5taWRpUGl0Y2hlcy5wdXNoKHsgcGl0Y2g6IGFjdHVhbFBpdGNoKzYwLCBkdXJhdGlvbkluTWVhc3VyZXM6IGR1cmF0aW9uKnRlbXBvQ2hhbmdlRmFjdG9yLCB2b2x1bWU6IHZvbHVtZSwgaW5zdHJ1bWVudDogY3VycmVudEluc3RydW1lbnQgfSk7IC8vIFRPRE8tUEVSOiB3aHkgaXMgdGhlIGludGVybmFsIG51bWJlcmluZyBzeXN0ZW0gb2Zmc2V0IGJ5IDYwIGZyb20gbWlkaT8gSXQgc2hvdWxkIHByb2JhYmx5IGJlIHRoZSBzYW1lIGFzIG1pZGkuXG5cblx0XHRcdFx0aWYgKCFwaXRjaGVzVGllZFsnJythY3R1YWxQaXRjaF0pXHQvLyBJZiB0aGlzIGlzIHRoZSBzZWNvbmQgbm90ZSBvZiBhIHRpZSwgd2UgZG9uJ3Qgc3RhcnQgaXQgYWdhaW4uXG5cdFx0XHRcdFx0Y3VycmVudFRyYWNrLnB1c2goeyBjbWQ6ICdzdGFydCcsIHBpdGNoOiBhY3R1YWxQaXRjaCwgdm9sdW1lOiB2ZWxvY2l0eSB9KTtcblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Ly8gYnV0IHdlIGRvIGFkZCB0aGUgZHVyYXRpb24gdG8gd2hhdCB3ZSBjYWxsIGJhY2suXG5cdFx0XHRcdFx0Zm9yICh2YXIgbGFzdCA9IGN1cnJlbnRUcmFjay5sZW5ndGgtMTsgbGFzdCA+PSAwOyBsYXN0LS0pIHtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50VHJhY2tbbGFzdF0uY21kID09PSAnc3RhcnQnICYmIGN1cnJlbnRUcmFja1tsYXN0XS5waXRjaCA9PT0gYWN0dWFsUGl0Y2ggJiYgY3VycmVudFRyYWNrW2xhc3RdLmVsZW0pIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBpdGNoQXJyYXkgPSBjdXJyZW50VHJhY2tbbGFzdF0uZWxlbS5taWRpUGl0Y2hlcztcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbGFzdDIgPSAwOyBsYXN0MiA8IHBpdGNoQXJyYXkubGVuZ3RoOyBsYXN0MisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHBpdGNoQXJyYXlbbGFzdDJdLnBpdGNoLTYwID09PSBhY3R1YWxQaXRjaCkgeyAvLyBUT0RPLVBFUjogdGhlIDYwIGlzIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBtaWRpIHBpdGNoIG51bWJlcnMgYWdhaW4uXG5cdFx0XHRcdFx0XHRcdFx0XHRwaXRjaEFycmF5W2xhc3QyXS5kdXJhdGlvbkluTWVhc3VyZXMgKz0gZHVyYXRpb24gKiB0ZW1wb0NoYW5nZUZhY3Rvcjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG5vdGUuc3RhcnRUaWUpIHtcblx0XHRcdFx0XHRwaXRjaGVzVGllZFsnJyArIGFjdHVhbFBpdGNoXSA9IHRydWU7XG5cdFx0XHRcdFx0Y3VycmVudFRyYWNrW2N1cnJlbnRUcmFjay5sZW5ndGgtMV0uZWxlbSA9IGVsZW07XG5cdFx0XHRcdH0gZWxzZSBpZiAobm90ZS5lbmRUaWUpXG5cdFx0XHRcdFx0cGl0Y2hlc1RpZWRbJycrYWN0dWFsUGl0Y2hdID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZWxlbS5ncmFjZW5vdGVzKSB7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgZWxlbS5ncmFjZW5vdGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ZWxlbS5taWRpR3JhY2VOb3RlUGl0Y2hlcyA9IFtdO1xuXHRcdFx0XHRcdHZhciBncmFjZSA9IGVsZW0uZ3JhY2Vub3Rlc1tqXTtcblx0XHRcdFx0XHRlbGVtLm1pZGlHcmFjZU5vdGVQaXRjaGVzLnB1c2goeyBwaXRjaDogYWRqdXN0UGl0Y2goZ3JhY2UpKzYwLCBkdXJhdGlvbkluTWVhc3VyZXM6IDAsIHZvbHVtZTogdm9sdW1lLCBpbnN0cnVtZW50OiBjdXJyZW50SW5zdHJ1bWVudH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR2YXIgdGhpc0JyZWFrQmV0d2Vlbk5vdGVzID0gbm9ybWFsQnJlYWtCZXR3ZWVuTm90ZXM7XG5cdFx0XHR2YXIgc291bmREdXJhdGlvbiA9IGR1cmF0aW9uLW5vcm1hbEJyZWFrQmV0d2Vlbk5vdGVzO1xuXHRcdFx0aWYgKHNvdW5kRHVyYXRpb24gPCAwKSB7XG5cdFx0XHRcdHNvdW5kRHVyYXRpb24gPSAwO1xuXHRcdFx0XHR0aGlzQnJlYWtCZXR3ZWVuTm90ZXMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0Y3VycmVudFRyYWNrLnB1c2goeyBjbWQ6ICdtb3ZlJywgZHVyYXRpb246IHNvdW5kRHVyYXRpb24qdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdFx0XHRsYXN0Tm90ZUR1cmF0aW9uUG9zaXRpb24gPSBjdXJyZW50VHJhY2subGVuZ3RoLTE7XG5cdFx0XHRjdXJyZW50VHJhY2tDb3VudGVyICs9IHNvdW5kRHVyYXRpb24qdGVtcG9DaGFuZ2VGYWN0b3I7XG5cblx0XHRcdGZvciAodmFyIGlpID0gMDsgaWkgPCBwaXRjaGVzLmxlbmd0aDsgaWkrKykge1xuXHRcdFx0XHRpZiAoIXBpdGNoZXNUaWVkWycnK3BpdGNoZXNbaWldLnBpdGNoXSlcblx0XHRcdFx0XHRjdXJyZW50VHJhY2sucHVzaCh7IGNtZDogJ3N0b3AnLCBwaXRjaDogcGl0Y2hlc1tpaV0ucGl0Y2ggfSk7XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VHJhY2sucHVzaCh7IGNtZDogJ21vdmUnLCBkdXJhdGlvbjogdGhpc0JyZWFrQmV0d2Vlbk5vdGVzKnRlbXBvQ2hhbmdlRmFjdG9yIH0pO1xuXHRcdFx0Y3VycmVudFRyYWNrQ291bnRlciArPSB0aGlzQnJlYWtCZXR3ZWVuTm90ZXMqdGVtcG9DaGFuZ2VGYWN0b3I7XG5cdFx0fSBlbHNlIGlmIChlbGVtLnJlc3QpIHtcblx0XHRcdGN1cnJlbnRUcmFjay5wdXNoKHsgY21kOiAnbW92ZScsIGR1cmF0aW9uOiBkdXJhdGlvbip0ZW1wb0NoYW5nZUZhY3RvciB9KTtcblx0XHRcdGN1cnJlbnRUcmFja0NvdW50ZXIgKz0gZHVyYXRpb24qdGVtcG9DaGFuZ2VGYWN0b3I7XG5cdFx0fVxuXG5cdFx0aWYgKGVsZW0uZW5kVHJpcGxldCkge1xuXHRcdFx0bXVsdGlwbGllcj0xO1xuXHRcdH1cblx0fVxuXG5cdHZhciBzY2FsZSA9IFswLDIsNCw1LDcsOSwxMV07XG5cdGZ1bmN0aW9uIGFkanVzdFBpdGNoKG5vdGUpIHtcblx0XHRpZiAobm90ZS5taWRpcGl0Y2gpXG5cdFx0XHRyZXR1cm4gbm90ZS5taWRpcGl0Y2ggLSA2MDtcblx0XHR2YXIgcGl0Y2ggPSBub3RlLnBpdGNoO1xuXHRcdGlmIChub3RlLmFjY2lkZW50YWwpIHtcblx0XHRcdHN3aXRjaChub3RlLmFjY2lkZW50YWwpIHsgLy8gY2hhbmdlIHRoYXQgcGl0Y2ggKG5vdCBvdGhlciBvY3RhdmVzKSBmb3IgdGhlIHJlc3Qgb2YgdGhlIGJhclxuXHRcdFx0XHRjYXNlIFwic2hhcnBcIjpcblx0XHRcdFx0XHRiYXJBY2NpZGVudGFsc1twaXRjaF09MTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJmbGF0XCI6XG5cdFx0XHRcdFx0YmFyQWNjaWRlbnRhbHNbcGl0Y2hdPS0xOyBicmVhaztcblx0XHRcdFx0Y2FzZSBcIm5hdHVyYWxcIjpcblx0XHRcdFx0XHRiYXJBY2NpZGVudGFsc1twaXRjaF09MDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJkYmxzaGFycFwiOlxuXHRcdFx0XHRcdGJhckFjY2lkZW50YWxzW3BpdGNoXT0yOyBicmVhaztcblx0XHRcdFx0Y2FzZSBcImRibGZsYXRcIjpcblx0XHRcdFx0XHRiYXJBY2NpZGVudGFsc1twaXRjaF09LTI7IGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBhY3R1YWxQaXRjaCA9IGV4dHJhY3RPY3RhdmUocGl0Y2gpICoxMiArIHNjYWxlW2V4dHJhY3ROb3RlKHBpdGNoKV07XG5cblx0XHRpZiAoIGJhckFjY2lkZW50YWxzW3BpdGNoXSE9PXVuZGVmaW5lZCkge1xuXHRcdFx0YWN0dWFsUGl0Y2ggKz0gIGJhckFjY2lkZW50YWxzW3BpdGNoXTtcblx0XHR9IGVsc2UgeyAvLyB1c2Ugbm9ybWFsIGFjY2lkZW50YWxzXG5cdFx0XHRhY3R1YWxQaXRjaCArPSAgYWNjaWRlbnRhbHNbZXh0cmFjdE5vdGUocGl0Y2gpXTtcblx0XHR9XG5cdFx0YWN0dWFsUGl0Y2ggKz0gdHJhbnNwb3NlO1xuXHRcdHJldHVybiBhY3R1YWxQaXRjaDtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldEtleVNpZ25hdHVyZShlbGVtKSB7XG5cdFx0dmFyIGFjY2lkZW50YWxzID0gWzAsMCwwLDAsMCwwLDBdO1xuXHRcdGlmICghZWxlbS5hY2NpZGVudGFscykgcmV0dXJuIGFjY2lkZW50YWxzO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS5hY2NpZGVudGFscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFjYyA9IGVsZW0uYWNjaWRlbnRhbHNbaV07XG5cdFx0XHR2YXIgZCA9IChhY2MuYWNjID09PSBcInNoYXJwXCIpID8gMSA6IChhY2MuYWNjID09PSBcIm5hdHVyYWxcIikgPzAgOiAtMTtcblxuXHRcdFx0dmFyIGxvd2VyY2FzZSA9IGFjYy5ub3RlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR2YXIgbm90ZSA9IGV4dHJhY3ROb3RlKGxvd2VyY2FzZS5jaGFyQ29kZUF0KDApLSdjJy5jaGFyQ29kZUF0KDApKTtcblx0XHRcdGFjY2lkZW50YWxzW25vdGVdKz1kO1xuXHRcdH1cblx0XHRyZXR1cm4gYWNjaWRlbnRhbHM7XG5cdH1cblxuXHR2YXIgZ3JhY2VEaXZpZGVyID0gODsgLy8gVGhpcyBpcyB0aGUgZnJhY3Rpb24gb2YgYSBub3RlIHRoYXQgdGhlIGdyYWNlIHJlcHJlc2VudHMuIFRoYXQgaXMsIGlmIHRoaXMgaXMgMiwgdGhlbiBhIGdyYWNlIG5vdGUgb2YgMS8xNiB3b3VsZCBiZSBhIDEvMzIuXG5cdGZ1bmN0aW9uIHByb2Nlc3NHcmFjZU5vdGVzKGdyYWNlcywgY29tcGFuaW9uRHVyYXRpb24pIHtcblx0XHR2YXIgZ3JhY2VEdXJhdGlvbiA9IDA7XG5cdFx0dmFyIHJldCA9IFtdO1xuXHRcdHZhciBncmFjZTtcblx0XHRmb3IgKHZhciBnID0gMDsgZyA8IGdyYWNlcy5sZW5ndGg7IGcrKykge1xuXHRcdFx0Z3JhY2UgPSBncmFjZXNbZ107XG5cdFx0XHRncmFjZUR1cmF0aW9uICs9IGdyYWNlLmR1cmF0aW9uO1xuXHRcdH1cblx0XHRncmFjZUR1cmF0aW9uID0gZ3JhY2VEdXJhdGlvbiAvIGdyYWNlRGl2aWRlcjtcblx0XHR2YXIgbXVsdGlwbGllciA9IChncmFjZUR1cmF0aW9uICogMiA+IGNvbXBhbmlvbkR1cmF0aW9uKSA/IGNvbXBhbmlvbkR1cmF0aW9uLyhncmFjZUR1cmF0aW9uICogMikgOiAxO1xuXG5cdFx0Zm9yIChnID0gMDsgZyA8IGdyYWNlcy5sZW5ndGg7IGcrKykge1xuXHRcdFx0Z3JhY2UgPSBncmFjZXNbZ107XG5cdFx0XHR2YXIgcGl0Y2ggPSBncmFjZS5taWRpcGl0Y2ggPyBncmFjZS5taWRpcGl0Y2ggLSA2MCA6IGdyYWNlLnBpdGNoO1xuXHRcdFx0cmV0LnB1c2goeyBwaXRjaDogcGl0Y2gsIGR1cmF0aW9uOiBncmFjZS5kdXJhdGlvbi9ncmFjZURpdmlkZXIqbXVsdGlwbGllciB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyaXRlR3JhY2VOb3RlcyhncmFjZXMsIHN0ZWFsRnJvbUN1cnJlbnQsIGR1cmF0aW9uLCBza2lwTm90ZSwgdmVsb2NpdHkpIHtcblx0XHRmb3IgKHZhciBnID0gMDsgZyA8IGdyYWNlcy5sZW5ndGg7IGcrKykge1xuXHRcdFx0dmFyIGdwID0gZ3JhY2VzW2ddO1xuXHRcdFx0aWYgKGdwICE9PSBza2lwTm90ZSlcblx0XHRcdFx0Y3VycmVudFRyYWNrLnB1c2goe2NtZDogJ3N0YXJ0JywgcGl0Y2g6IGdwLnBpdGNoLCB2b2x1bWU6IHZlbG9jaXR5fSk7XG5cdFx0XHRjdXJyZW50VHJhY2sucHVzaCh7Y21kOiAnbW92ZScsIGR1cmF0aW9uOiBncmFjZXNbZ10uZHVyYXRpb24qdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdFx0XHRpZiAoZ3AgIT09IHNraXBOb3RlKVxuXHRcdFx0XHRjdXJyZW50VHJhY2sucHVzaCh7Y21kOiAnc3RvcCcsIHBpdGNoOiBncC5waXRjaH0pO1xuXHRcdFx0aWYgKCFzdGVhbEZyb21DdXJyZW50KVxuXHRcdFx0XHRjdXJyZW50VHJhY2tbbGFzdE5vdGVEdXJhdGlvblBvc2l0aW9uXS5kdXJhdGlvbiAtPSBncmFjZXNbZ10uZHVyYXRpb247XG5cdFx0XHRkdXJhdGlvbiAtPSBncmFjZXNbZ10uZHVyYXRpb247XG5cdFx0fVxuXHRcdHJldHVybiBkdXJhdGlvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dHJhY3RPY3RhdmUocGl0Y2gpIHtcblx0XHRyZXR1cm4gTWF0aC5mbG9vcihwaXRjaC83KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dHJhY3ROb3RlKHBpdGNoKSB7XG5cdFx0cGl0Y2ggPSBwaXRjaCU3O1xuXHRcdGlmIChwaXRjaDwwKSBwaXRjaCs9Nztcblx0XHRyZXR1cm4gcGl0Y2g7XG5cdH1cblxuXHR2YXIgYmFzc2VzID0ge1xuXHRcdCdBJzogLTI3LCAnQic6IC0yNSwgJ0MnOiAtMjQsICdEJzogLTIyLCAnRSc6IC0yMCwgJ0YnOiAtMTksICdHJzogLTE3XG5cdH07XG5cdGZ1bmN0aW9uIGludGVycHJldENob3JkKG5hbWUpIHtcblx0XHQvLyBjaG9yZHMgaGF2ZSB0aGUgZm9ybWF0OlxuXHRcdC8vIFtyb290XVthY2NdW21vZGlmaWVyXVsvXVtiYXNzXVthY2NdXG5cdFx0Ly8gKFRoZSBjaG9yZCBtaWdodCBiZSBzdXJyb3VuZGVkIGJ5IHBhcmVucy4gSnVzdCBpZ25vcmUgdGhlbS4pXG5cdFx0Ly8gcm9vdCBtdXN0IGJlIHByZXNlbnQgYW5kIG11c3QgYmUgZnJvbSBBLUcuXG5cdFx0Ly8gYWNjIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgIyBvciBiXG5cdFx0Ly8gVGhlIG1vZGlmaWVyIGNhbiBiZSBhIHdpZGUgdmFyaWV0eSBvZiB0aGluZ3MsIGxpa2UgXCJtYWo3XCIuIEFzIHRoZXkgYXJlIGRpc2NvdmVyZWQsIG1vcmUgYXJlIHN1cHBvcnRlZCBoZXJlLlxuXHRcdC8vIElmIHRoZXJlIGlzIGEgc2xhc2gsIHRoZW4gdGhlcmUgaXMgYSBiYXNzIG5vdGUsIHdoaWNoIGNhbiBiZSBmcm9tIEEtRywgd2l0aCBhbiBvcHRpb25hbCBhY2MuXG5cdFx0Ly8gSWYgdGhlIHJvb3QgaXMgdW5yZWNvZ25pemVkLCB0aGVuIFwidW5kZWZpbmVkXCIgaXMgcmV0dXJuZWQgYW5kIHRoZXJlIGlzIG5vIGNob3JkLlxuXHRcdC8vIElmIHRoZSBtb2RpZmllciBpcyB1bnJlY29nbml6ZWQsIGEgbWFqb3IgdHJpYWQgaXMgcmV0dXJuZWQuXG5cdFx0Ly8gSWYgdGhlIGJhc3Mgbm90ZXMgaXMgdW5yZWNvZ25pemVkLCBpdCBpcyBpZ25vcmVkLlxuXHRcdGlmIChuYW1lLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0aWYgKG5hbWUgPT09ICdicmVhaycpXG5cdFx0XHRyZXR1cm4geyBjaGljazogW119O1xuXHRcdHZhciByb290ID0gbmFtZS5zdWJzdHJpbmcoMCwxKTtcblx0XHRpZiAocm9vdCA9PT0gJygnKSB7XG5cdFx0XHRuYW1lID0gbmFtZS5zdWJzdHJpbmcoMSxuYW1lLmxlbmd0aC0yKTtcblx0XHRcdGlmIChuYW1lLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdHJvb3QgPSBuYW1lLnN1YnN0cmluZygwLDEpO1xuXHRcdH1cblx0XHR2YXIgYmFzcyA9IGJhc3Nlc1tyb290XTtcblx0XHRpZiAoIWJhc3MpXHQvLyBJZiB0aGUgYmFzcyBub3RlIGlzbid0IGxpc3RlZCwgdGhlbiB0aGlzIHdhcyBhbiB1bmtub3duIHJvb3QuIE9ubHkgQS1HIGFyZSBhY2NlcHRlZC5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0YmFzcyAgKz0gdHJhbnNwb3NlO1xuXHRcdHZhciBiYXNzMiA9IGJhc3MgLSA1O1x0Ly8gVGhlIGFsdGVybmF0aW5nIGJhc3MgaXMgYSA0dGggYmVsb3dcblx0XHR2YXIgY2hpY2s7XG5cdFx0aWYgKG5hbWUubGVuZ3RoID09PSAxKVxuXHRcdFx0Y2hpY2sgPSBjaG9yZE5vdGVzKGJhc3MsICcnKTtcblx0XHR2YXIgcmVtYWluaW5nID0gbmFtZS5zdWJzdHJpbmcoMSk7XG5cdFx0dmFyIGFjYyA9IHJlbWFpbmluZy5zdWJzdHJpbmcoMCwxKTtcblx0XHRpZiAoYWNjID09PSAnYicgfHwgYWNjID09PSAn4pmtJykge1xuXHRcdFx0YmFzcy0tO1xuXHRcdFx0YmFzczItLTtcblx0XHRcdHJlbWFpbmluZyA9IHJlbWFpbmluZy5zdWJzdHJpbmcoMSk7XG5cdFx0fSBlbHNlIGlmIChhY2MgPT09ICcjJyB8fCBhY2MgPT09ICfima8nKSB7XG5cdFx0XHRiYXNzKys7XG5cdFx0XHRiYXNzMisrO1xuXHRcdFx0cmVtYWluaW5nID0gcmVtYWluaW5nLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0dmFyIGFyciA9IHJlbWFpbmluZy5zcGxpdCgnLycpO1xuXHRcdGNoaWNrID0gY2hvcmROb3RlcyhiYXNzLCBhcnJbMF0pO1xuXHRcdGlmIChhcnIubGVuZ3RoID09PSAyKSB7XG5cdFx0XHR2YXIgZXhwbGljaXRCYXNzID0gYmFzc2VzW2FyclsxXS5zdWJzdHJpbmcoMCwxKV07XG5cdFx0XHRpZiAoZXhwbGljaXRCYXNzKSB7XG5cdFx0XHRcdHZhciBiYXNzQWNjID0gYXJyWzFdLnN1YnN0cmluZygxKTtcblx0XHRcdFx0dmFyIGJhc3NTaGlmdCA9IHsnIyc6IDEsICfima8nOiAxLCAnYic6IC0xLCAn4pmtJzogLTF9W2Jhc3NBY2NdIHx8IDA7XG5cdFx0XHRcdGJhc3MgPSBiYXNzZXNbYXJyWzFdLnN1YnN0cmluZygwLDEpXSArIGJhc3NTaGlmdCArIHRyYW5zcG9zZTtcblx0XHRcdFx0YmFzczIgPSBiYXNzO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4geyBib29tOiBiYXNzLCBib29tMjogYmFzczIsIGNoaWNrOiBjaGljayB9O1xuXHR9XG5cblx0dmFyIGNob3JkSW50ZXJ2YWxzID0ge1xuXHRcdC8vIGRpbWluaXNoZWQgKGFsbCBmbGF0IDUgY2hvcmRzKVxuXHRcdCdkaW0nOiBbIDAsIDMsIDYgXSxcblx0XHQnwrAnOiBbIDAsIDMsIDYgXSxcblx0XHQny5onOiBbIDAsIDMsIDYgXSxcblxuXHRcdCdkaW03JzogWyAwLCAzLCA2LCA5IF0sXG5cdFx0J8KwNyc6IFsgMCwgMywgNiwgOSBdLFxuXHRcdCfLmjcnOiBbIDAsIDMsIDYsIDkgXSxcblxuXHRcdCfDuDcnOiBbIDAsIDMsIDYsIDEwIF0sXG5cdFx0J203KGI1KSc6IFsgMCwgMywgNiwgMTAgXSxcblx0XHQnbTdiNSc6IFsgMCwgMywgNiwgMTAgXSxcblx0XHQnLTcoYjUpJzogWyAwLCAzLCA2LCAxMCBdLFxuXHRcdCctN2I1JzogWyAwLCAzLCA2LCAxMCBdLFxuXG5cdFx0JzdiNSc6IFsgMCwgNCwgNiwgMTAgXSxcblx0XHQnNyhiNSknOiBbIDAsIDQsIDYsIDEwIF0sXG5cdFx0Jzfima01JzogWyAwLCA0LCA2LCAxMCBdLFxuXG5cdFx0JzcoYjksYjUpJzogWyAwLCA0LCA2LCAxMCwgMTMgXSxcblx0XHQnN2I5LGI1JzogWyAwLCA0LCA2LCAxMCwgMTMgXSxcblx0XHQnNygjOSxiNSknOiBbIDAsIDQsIDYsIDEwLCAxNSBdLFxuXHRcdCc3IzliNSc6IFsgMCwgNCwgNiwgMTAsIDE1IF0sXG5cdFx0J21hajcoYjUpJzogWyAwLCAzLCA2LCAxMSBdLFxuXHRcdCdtYWo3YjUnOiBbIDAsIDMsIDYsIDExIF0sXG5cdFx0JzEzKGI1KSc6IFsgMCwgNCwgNiwgMTAsIDE0LCAxOCBdLFxuXHRcdCcxM2I1JzogWyAwLCA0LCA2LCAxMCwgMTQsIDE4IF0sXG5cblx0XHQvLyBtaW5vciAoYWxsIG5vcm1hbCA1LCBtaW5vciAzIGNob3Jkcylcblx0XHQnbSc6IFsgMCwgMywgNyBdLFxuXHRcdCctJzogWyAwLCAzLCA3IF0sXG5cdFx0J202JzogWyAwLCAzLCA3LCA5IF0sXG5cdFx0Jy02JzogWyAwLCAzLCA3LCA5IF0sXG5cdFx0J203JzogWyAwLCAzLCA3LCAxMCBdLFxuXHRcdCctNyc6IFsgMCwgMywgNywgMTAgXSxcblxuXHRcdCctKGI2KSc6IFsgMCwgMywgNywgOCBdLFxuXHRcdCctYjYnOiBbIDAsIDMsIDcsIDggXSxcblx0XHQnLTYvOSc6IFsgMCwgMywgNywgOSwgMTQgXSxcblx0XHQnLTcoYjkpJzogWyAwLCAzLCA3LCAxMCwgMTMgXSxcblx0XHQnLTdiOSc6IFsgMCwgMywgNywgMTAsIDEzIF0sXG5cdFx0Jy1tYWo3JzogWyAwLCAzLCA3LCAxMSBdLFxuXHRcdCctOSs3JzogWyAwLCAzLCA3LCAxMSwgMTMgXSxcblx0XHQnLTExJzogWyAgMCwgMywgNywgMTEsIDE0LCAxNiBdLFxuXG5cdFx0Ly8gbWFqb3IgKGFsbCBub3JtYWwgNSwgbWFqb3IgMyBjaG9yZHMpXG5cdFx0J00nOiBbIDAsIDQsIDcgXSxcblx0XHQnNic6IFsgMCwgNCwgNywgOSBdLFxuXHRcdCc2LzknOiBbIDAsIDQsIDcsIDksIDE0IF0sXG5cblx0XHQnNyc6IFsgMCwgNCwgNywgMTAgXSxcblx0XHQnOSc6IFsgMCwgNCwgNywgMTAsIDE0IF0sXG5cdFx0JzExJzogWyAwLCA0LCA3LCAxMCwgMTQsIDE2IF0sXG5cdFx0JzEzJzogWyAwLCA0LCA3LCAxMCwgMTQsIDE4IF0sXG5cdFx0JzdiOSc6IFsgMCwgNCwgNywgMTAsIDEzIF0sXG5cdFx0Jzfima05JzogWyAwLCA0LCA3LCAxMCwgMTMgXSxcblx0XHQnNyhiOSknOiBbIDAsIDQsIDcsIDEwLCAxMyBdLFxuXHRcdCc3KCM5KSc6IFsgMCwgNCwgNywgMTAsIDE1IF0sXG5cdFx0JzcjOSc6IFsgMCwgNCwgNywgMTAsIDE1IF0sXG5cdFx0JygxMyknOiBbIDAsIDQsIDcsIDEwLCAxNCwgMTggXSxcblx0XHQnNyg5LDEzKSc6IFsgMCwgNCwgNywgMTAsIDE0LCAxOCBdLFxuXHRcdCc3KCM5LGIxMyknOiBbIDAsIDQsIDcsIDEwLCAxNSwgMTcgXSxcblx0XHQnNygjMTEpJzogWyAwLCA0LCA3LCAxMCwgMTQsIDE3IF0sXG5cdFx0JzcjMTEnOiBbIDAsIDQsIDcsIDEwLCAxNCwgMTcgXSxcblx0XHQnNyhiMTMpJzogWyAwLCA0LCA3LCAxMCwgMTcgXSxcblx0XHQnN2IxMyc6IFsgMCwgNCwgNywgMTAsIDE3IF0sXG5cdFx0JzkoIzExKSc6IFsgMCwgNCwgNywgMTAsIDE0LCAxNyBdLFxuXHRcdCc5IzExJzogWyAwLCA0LCA3LCAxMCwgMTQsIDE3IF0sXG5cdFx0JzEzKCMxMSknOiBbIDAsIDQsIDcsIDEwLCAxNSwgMTggXSxcblx0XHQnMTMjMTEnOiBbIDAsIDQsIDcsIDEwLCAxNSwgMTggXSxcblxuXHRcdCdtYWo3JzogWyAwLCA0LCA3LCAxMSBdLFxuXHRcdCfiiIY3JzogWyAwLCA0LCA3LCAxMSBdLFxuXHRcdCfOlDcnOiBbIDAsIDQsIDcsIDExIF0sXG5cdFx0J21hajknOiBbIDAsIDQsIDcsIDExLCAxNCBdLFxuXHRcdCdtYWo3KDkpJzogWyAwLCA0LCA3LCAxMSwgMTQgXSxcblx0XHQnbWFqNygxMSknOiBbIDAsIDQsIDcsIDExLCAxNiBdLFxuXHRcdCdtYWo3KCMxMSknOiBbIDAsIDQsIDcsIDExLCAxNyBdLFxuXHRcdCdtYWo3KDEzKSc6IFsgMCwgNCwgNywgMTEsIDE4IF0sXG5cdFx0J21hajcoOSwxMyknOiBbIDAsIDQsIDcsIDExLCAxNCwgMTggXSxcblxuXHRcdCc3c3VzNCc6IFsgMCwgNSwgNywgMTAgXSxcblx0XHQnbTdzdXM0JzogWyAwLCA1LCA3LCAxMCBdLFxuXHRcdCdzdXM0JzogWyAwLCA1LCA3IF0sXG5cdFx0J3N1czInOiBbIDAsIDIsIDcgXSxcblx0XHQnN3N1czInOiBbIDAsIDIsIDcsIDEwIF0sXG5cdFx0JzlzdXM0JzogWyAwLCA1LCA3LCAxNCBdLFxuXHRcdCcxM3N1czQnOiBbIDAsIDUsIDcsIDE4IF0sXG5cblx0XHQvLyBhdWdtZW50ZWQgKGFsbCBzaGFycCA1IGNob3Jkcylcblx0XHQnYXVnNyc6IFsgMCwgNCwgOCwgMTAgXSxcblx0XHQnKzcnOiBbIDAsIDQsIDgsIDEwIF0sXG5cdFx0JysnOiBbIDAsIDQsIDggXSxcblx0XHQnNyM1JzogWyAwLCA0LCA4LCAxMCBdLFxuXHRcdCc34pmvNSc6IFsgMCwgNCwgOCwgMTAgXSxcblx0XHQnNys1JzogWyAwLCA0LCA4LCAxMCBdLFxuXHRcdCc5IzUnOiBbIDAsIDQsIDgsIDEwLCAxNCBdLFxuXHRcdCc54pmvNSc6IFsgMCwgNCwgOCwgMTAsIDE0IF0sXG5cdFx0JzkrNSc6IFsgMCwgNCwgOCwgMTAsIDE0IF0sXG5cdFx0Jy03KCM1KSc6IFsgMCwgMywgOCwgMTAgXSxcblx0XHQnLTcjNSc6IFsgMCwgMywgOCwgMTAgXSxcblx0XHQnNygjNSknOiBbIDAsIDQsIDgsIDEwIF0sXG5cdFx0JzcoYjksIzUpJzogWyAwLCA0LCA4LCAxMCwgMTMgXSxcblx0XHQnN2I5IzUnOiBbIDAsIDQsIDgsIDEwLCAxMyBdLFxuXHRcdCdtYWo3KCM1KSc6IFsgMCwgNCwgOCwgMTEgXSxcblx0XHQnbWFqNyM1JzogWyAwLCA0LCA4LCAxMSBdLFxuXHRcdCdtYWo3KCM1LCMxMSknOiBbIDAsIDQsIDgsIDExLCAxNCBdLFxuXHRcdCdtYWo3IzUjMTEnOiBbIDAsIDQsIDgsIDExLCAxNCBdLFxuXHRcdCc5KCM1KSc6IFsgMCwgNCwgOCwgMTAsIDE0IF0sXG5cdFx0JzEzKCM1KSc6IFsgMCwgNCwgOCwgMTAsIDE0LCAxOCBdLFxuXHRcdCcxMyM1JzogWyAwLCA0LCA4LCAxMCwgMTQsIDE4IF1cbn07XG5cdGZ1bmN0aW9uIGNob3JkTm90ZXMoYmFzcywgbW9kaWZpZXIpIHtcblx0XHR2YXIgaW50ZXJ2YWxzID0gY2hvcmRJbnRlcnZhbHNbbW9kaWZpZXJdO1xuXHRcdGlmICghaW50ZXJ2YWxzKVxuXHRcdFx0aW50ZXJ2YWxzID0gY2hvcmRJbnRlcnZhbHMuTTtcblx0XHRiYXNzICs9IDEyO1x0Ly8gdGhlIGNob3JkIGlzIGFuIG9jdGF2ZSBhYm92ZSB0aGUgYmFzcyBub3RlLlxuXHRcdHZhciBub3RlcyA9IFsgXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGludGVydmFscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bm90ZXMucHVzaChiYXNzICsgaW50ZXJ2YWxzW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5vdGVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3JpdGVCb29tKGJvb20sIGJlYXRMZW5ndGgpIHtcblx0XHQvLyB1bmRlZmluZWQgbWVhbnMgdGhlcmUgaXMgYSBzdG9wIHRpbWUuXG5cdFx0aWYgKGJvb20gIT09IHVuZGVmaW5lZClcblx0XHRcdGNob3JkVHJhY2sucHVzaCh7Y21kOiAnc3RhcnQnLCBwaXRjaDogYm9vbSwgdm9sdW1lOiA2NH0pO1xuXHRcdGNob3JkVHJhY2sucHVzaCh7IGNtZDogJ21vdmUnLCBkdXJhdGlvbjogKGJlYXRMZW5ndGgvMikqdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdFx0aWYgKGJvb20gIT09IHVuZGVmaW5lZClcblx0XHRcdGNob3JkVHJhY2sucHVzaCh7IGNtZDogJ3N0b3AnLCBwaXRjaDogYm9vbSB9KTtcblx0XHRjaG9yZFRyYWNrLnB1c2goeyBjbWQ6ICdtb3ZlJywgZHVyYXRpb246IChiZWF0TGVuZ3RoLzIpKnRlbXBvQ2hhbmdlRmFjdG9yIH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3JpdGVDaGljayhjaGljaywgYmVhdExlbmd0aCkge1xuXHRcdGZvciAodmFyIGMgPSAwOyBjIDwgY2hpY2subGVuZ3RoOyBjKyspXG5cdFx0XHRjaG9yZFRyYWNrLnB1c2goe2NtZDogJ3N0YXJ0JywgcGl0Y2g6IGNoaWNrW2NdLCB2b2x1bWU6IDQ4fSk7XG5cdFx0Y2hvcmRUcmFjay5wdXNoKHsgY21kOiAnbW92ZScsIGR1cmF0aW9uOiAoYmVhdExlbmd0aC8yKSp0ZW1wb0NoYW5nZUZhY3RvciB9KTtcblx0XHRmb3IgKGMgPSAwOyBjIDwgY2hpY2subGVuZ3RoOyBjKyspXG5cdFx0XHRjaG9yZFRyYWNrLnB1c2goeyBjbWQ6ICdzdG9wJywgcGl0Y2g6IGNoaWNrW2NdIH0pO1xuXHRcdGNob3JkVHJhY2sucHVzaCh7IGNtZDogJ21vdmUnLCBkdXJhdGlvbjogKGJlYXRMZW5ndGgvMikqdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdH1cblxuXHR2YXIgcmh5dGhtUGF0dGVybnMgPSB7IFwiMi8yXCI6IFsgJ2Jvb20nLCAnY2hpY2snIF0sXG5cdFx0XCIyLzRcIjogWyAnYm9vbScsICdjaGljaycgXSxcblx0XHRcIjMvNFwiOiBbICdib29tJywgJ2NoaWNrJywgJ2NoaWNrJyBdLFxuXHRcdFwiNC80XCI6IFsgJ2Jvb20nLCAnY2hpY2snLCAnYm9vbTInLCAnY2hpY2snIF0sXG5cdFx0XCI1LzRcIjogWyAnYm9vbScsICdjaGljaycsICdjaGljaycsICdib29tMicsICdjaGljaycgXSxcblx0XHRcIjYvOFwiOiBbICdib29tJywgJycsICdjaGljaycsICdib29tMicsICcnLCAnY2hpY2snIF0sXG5cdFx0XCI5LzhcIjogWyAnYm9vbScsICcnLCAnY2hpY2snLCAnYm9vbTInLCAnJywgJ2NoaWNrJywgJ2Jvb20yJywgJycsICdjaGljaycgXSxcblx0XHRcIjEyLzhcIjogWyAnYm9vbScsICcnLCAnY2hpY2snLCAnYm9vbTInLCAnJywgJ2NoaWNrJywgJ2Jvb20yJywgJycsICdjaGljaycsICdib29tMicsICcnLCAnY2hpY2snIF0sXG5cdH07XG5cblx0ZnVuY3Rpb24gcmVzb2x2ZUNob3JkcygpIHtcblx0XHR2YXIgbnVtID0gbWV0ZXIubnVtO1xuXHRcdHZhciBkZW4gPSBtZXRlci5kZW47XG5cdFx0dmFyIGJlYXRMZW5ndGggPSAxL2Rlbjtcblx0XHR2YXIgcGF0dGVybiA9IHJoeXRobVBhdHRlcm5zW251bSsnLycrZGVuXTtcblx0XHR2YXIgdGhpc01lYXN1cmVMZW5ndGggPSBwYXJzZUludChudW0sMTApL3BhcnNlSW50KGRlbiwxMCk7XG5cdFx0Ly8gU2VlIGlmIHRoaXMgaXMgYSBmdWxsIG1lYXN1cmU6IHVuZm9ydHVuYXRlbHksIHdpdGggdHJpcGxldHMsIHRoZXJlIGlzbid0IGFuIGV4YWN0IG1hdGNoLCB3aGF0IHdpdGggdGhlIGZsb2F0aW5nIHBvaW50LCBzbyB3ZSBqdXN0IHNlZSBpZiBpdCBpcyBcImNsb3NlXCIuXG5cdFx0dmFyIHBvcnRpb25PZkFNZWFzdXJlID0gTWF0aC5hYnModGhpc01lYXN1cmVMZW5ndGggLSBiYXJCZWF0KTtcblx0XHRpZiAoIXBhdHRlcm4gfHwgcG9ydGlvbk9mQU1lYXN1cmUgPiAwLjAwNzgxMjUpIHsgLy8gSWYgaXQgaXMgYW4gdW5zdXBwb3J0ZWQgbWV0ZXIsIG9yIHRoaXMgaXNuJ3QgYSBmdWxsIGJhciwganVzdCBjaGljayBvbiBlYWNoIGJlYXQuXG5cdFx0XHRwYXR0ZXJuID0gW107XG5cdFx0XHR2YXIgYmVhdHNQcmVzZW50ID0gYmFyQmVhdCAvIGJlYXRMZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBwID0gMDsgcCA8IGJlYXRzUHJlc2VudDsgcCsrKVxuXHRcdFx0XHRwYXR0ZXJuLnB1c2goXCJjaGlja1wiKTtcblx0XHR9XG5cblx0XHRpZiAoY3VycmVudENob3Jkcy5sZW5ndGggPT09IDApIHsgLy8gdGhlcmUgd2Fzbid0IGEgbmV3IGNob3JkIHRoaXMgbWVhc3VyZSwgc28gdXNlIHRoZSBsYXN0IGNob3JkIGRlY2xhcmVkLlxuXHRcdFx0Y3VycmVudENob3Jkcy5wdXNoKHsgYmVhdDogMCwgY2hvcmQ6IGxhc3RDaG9yZH0pO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudENob3Jkc1swXS5iZWF0ICE9PSAwICYmIGxhc3RDaG9yZCkgeyAvLyB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgY2hvcmQgZGVjbGFyZWQgaW4gdGhlIG1lYXN1cmUsIGJ1dCBub3Qgb24gaXRzIGZpcnN0IGJlYXQuXG5cdFx0XHRjdXJyZW50Q2hvcmRzLnVuc2hpZnQoeyBiZWF0OiAwLCBjaG9yZDogbGFzdENob3JkfSk7XG5cdFx0fVxuXHRcdGlmIChjdXJyZW50Q2hvcmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Zm9yICh2YXIgbSA9IDA7IG0gPCBwYXR0ZXJuLmxlbmd0aDsgbSsrKSB7XG5cdFx0XHRcdHN3aXRjaCAocGF0dGVyblttXSkge1xuXHRcdFx0XHRcdGNhc2UgJ2Jvb20nOlxuXHRcdFx0XHRcdFx0d3JpdGVCb29tKGN1cnJlbnRDaG9yZHNbMF0uY2hvcmQuYm9vbSwgYmVhdExlbmd0aCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdib29tMic6XG5cdFx0XHRcdFx0XHR3cml0ZUJvb20oY3VycmVudENob3Jkc1swXS5jaG9yZC5ib29tMiwgYmVhdExlbmd0aCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdjaGljayc6XG5cdFx0XHRcdFx0XHR3cml0ZUNoaWNrKGN1cnJlbnRDaG9yZHNbMF0uY2hvcmQuY2hpY2ssIGJlYXRMZW5ndGgpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnJzpcblx0XHRcdFx0XHRcdGNob3JkVHJhY2sucHVzaCh7IGNtZDogJ21vdmUnLCBkdXJhdGlvbjogYmVhdExlbmd0aCp0ZW1wb0NoYW5nZUZhY3RvciB9KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgYXJlIGhlcmUgaXQgaXMgYmVjYXVzZSBtb3JlIHRoYW4gb25lIGNob3JkIHdhcyBkZWNsYXJlZCBpbiB0aGUgbWVhc3VyZSwgc28gd2UgaGF2ZSB0byBzb3J0IG91dCB3aGF0IGNob3JkIGdvZXMgd2hlcmUuXG5cblx0XHQvLyBGaXJzdCwgbm9ybWFsaXplIHRoZSBjaG9yZHMgb24gYmVhdHMuXG5cdFx0dmFyIGJlYXRzID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50Q2hvcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgY2MgPSBjdXJyZW50Q2hvcmRzW2ldO1xuXHRcdFx0dmFyIGJlYXQgPSBNYXRoLmZsb29yKGNjLmJlYXQgLyBiZWF0TGVuZ3RoKTtcdC8vIG5vdyBhbGwgdGhlIGJlYXRzIGFyZSBpbnRlZ2VycywgdGhlcmUgbWF5IGJlXG5cdFx0XHRiZWF0c1snJytiZWF0XSA9IGNjO1xuXHRcdH1cblxuXHRcdC8vIC0gSWYgdGhlcmUgaXMgYSBjaG9yZCBvbiB0aGUgc2Vjb25kIGJlYXQsIHBsYXkgYSBjaG9yZCBmb3IgdGhlIGZpcnN0IGJlYXQgaW5zdGVhZCBvZiBhIGJhc3Mgbm90ZS5cblx0XHQvLyAtIExpa2V3aXNlLCBpZiB0aGVyZSBpcyBhIGNob3JkIG9uIHRoZSBmb3VydGggYmVhdCBvZiA0LzQsIHBsYXkgYSBjaG9yZCBvbiB0aGUgdGhpcmQgYmVhdCBpbnN0ZWFkIG9mIGEgYmFzcyBub3RlLlxuXHRcdGZvciAodmFyIG0yID0gMDsgbTIgPCBwYXR0ZXJuLmxlbmd0aDsgbTIrKykge1xuXHRcdFx0dmFyIHRoaXNDaG9yZDtcblx0XHRcdGlmIChiZWF0c1snJyttMl0pXG5cdFx0XHRcdHRoaXNDaG9yZCA9IGJlYXRzWycnK20yXTtcblx0XHRcdHN3aXRjaCAocGF0dGVyblttMl0pIHtcblx0XHRcdFx0Y2FzZSAnYm9vbSc6XG5cdFx0XHRcdFx0aWYgKGJlYXRzWycnKyhtMisxKV0pIC8vIElmIHRoZXJlIGlzIG5vdCBhIGNob3JkIGNoYW5nZSBvbiB0aGUgbmV4dCBiZWF0LCBwbGF5IGEgYmFzcyBub3RlLlxuXHRcdFx0XHRcdFx0d3JpdGVDaGljayh0aGlzQ2hvcmQuY2hvcmQuY2hpY2ssIGJlYXRMZW5ndGgpO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHdyaXRlQm9vbSh0aGlzQ2hvcmQuY2hvcmQuYm9vbSwgYmVhdExlbmd0aCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2Jvb20yJzpcblx0XHRcdFx0XHRpZiAoYmVhdHNbJycrKG0yKzEpXSlcblx0XHRcdFx0XHRcdHdyaXRlQ2hpY2sodGhpc0Nob3JkLmNob3JkLmNoaWNrLCBiZWF0TGVuZ3RoKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR3cml0ZUJvb20odGhpc0Nob3JkLmNob3JkLmJvb20yLCBiZWF0TGVuZ3RoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnY2hpY2snOlxuXHRcdFx0XHRcdHdyaXRlQ2hpY2sodGhpc0Nob3JkLmNob3JkLmNoaWNrLCBiZWF0TGVuZ3RoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnJzpcblx0XHRcdFx0XHRpZiAoYmVhdHNbJycrbTJdKVx0Ly8gSWYgdGhlcmUgaXMgYW4gZXhwbGljaXQgY2hvcmQgb24gdGhpcyBiZWF0LCBwbGF5IGl0LlxuXHRcdFx0XHRcdFx0d3JpdGVDaGljayh0aGlzQ2hvcmQuY2hvcmQuY2hpY2ssIGJlYXRMZW5ndGgpO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGNob3JkVHJhY2sucHVzaCh7Y21kOiAnbW92ZScsIGR1cmF0aW9uOiBiZWF0TGVuZ3RoKnRlbXBvQ2hhbmdlRmFjdG9yIH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZURydW1EZWZpbml0aW9uKHBhcmFtcykge1xuXHRcdC8vIEJlIHZlcnkgc3RyaWN0IHdpdGggdGhlIGRydW0gZGVmaW5pdGlvbi4gSWYgYW55dGhpbmcgaXMgbm90IHBlcmZlY3QsXG5cdFx0Ly8ganVzdCB0dXJuIHRoZSBkcnVtcyBvZmYuXG5cdFx0Ly8gUGVyaGFwcyBhbGwgb2YgdGhpcyBsb2dpYyBiZWxvbmdzIGluIHRoZSBwYXJzZXIgaW5zdGVhZC5cblx0XHRpZiAocGFyYW1zLnBhdHRlcm4ubGVuZ3RoID09PSAwIHx8IHBhcmFtcy5vbiA9PT0gZmFsc2UpXG5cdFx0XHRyZXR1cm4geyBvbjogZmFsc2UgfTtcblxuXHRcdHZhciBzdHIgPSBwYXJhbXMucGF0dGVyblswXTtcblx0XHR2YXIgZXZlbnRzID0gW107XG5cdFx0dmFyIGV2ZW50ID0gXCJcIjtcblx0XHR2YXIgdG90YWxQbGF5ID0gMDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHN0cltpXSA9PT0gJ2QnKVxuXHRcdFx0XHR0b3RhbFBsYXkrKztcblx0XHRcdGlmIChzdHJbaV0gPT09ICdkJyB8fCBzdHJbaV0gPT09ICd6Jykge1xuXHRcdFx0XHRpZiAoZXZlbnQubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdFx0ZXZlbnRzLnB1c2goZXZlbnQpO1xuXHRcdFx0XHRcdGV2ZW50ID0gc3RyW2ldO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRldmVudCA9IGV2ZW50ICsgc3RyW2ldO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGV2ZW50Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdC8vIHRoZXJlIHdhcyBhbiBlcnJvcjogdGhlIHN0cmluZyBzaG91bGQgaGF2ZSBzdGFydGVkIHdpdGggZCBvciB6XG5cdFx0XHRcdFx0cmV0dXJuIHtvbjogZmFsc2V9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGV2ZW50ID0gZXZlbnQgKyBzdHJbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGV2ZW50Lmxlbmd0aCAhPT0gMClcblx0XHRcdGV2ZW50cy5wdXNoKGV2ZW50KTtcblxuXHRcdC8vIE5vdyB0aGUgZXZlbnRzIGFycmF5IHNob3VsZCBoYXZlIG9uZSBpdGVtIHBlciBldmVudC5cblx0XHQvLyBUaGVyZSBzaG91bGQgYmUgdHdvIG1vcmUgcGFyYW1zIGZvciBlYWNoIGV2ZW50OiB0aGUgdm9sdW1lIGFuZCB0aGUgcGl0Y2guXG5cdFx0aWYgKHBhcmFtcy5wYXR0ZXJuLmxlbmd0aCAhPT0gdG90YWxQbGF5KjIgKyAxKVxuXHRcdFx0cmV0dXJuIHsgb246IGZhbHNlIH07XG5cblx0XHR2YXIgcmV0ID0geyBvbjogdHJ1ZSwgYmFyczogcGFyYW1zLmJhcnMsIHBhdHRlcm46IFtdfTtcblx0XHR2YXIgYmVhdExlbmd0aCA9IDEvbWV0ZXIuZGVuO1xuXHRcdHZhciBwbGF5Q291bnQgPSAwO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgZXZlbnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRldmVudCA9IGV2ZW50c1tqXTtcblx0XHRcdHZhciBsZW4gPSAxO1xuXHRcdFx0dmFyIGRpdiA9IGZhbHNlO1xuXHRcdFx0dmFyIG51bSA9IDA7XG5cdFx0XHRmb3IgKHZhciBrID0gMTsgayA8IGV2ZW50Lmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdHN3aXRjaChldmVudFtrXSkge1xuXHRcdFx0XHRcdGNhc2UgXCIvXCI6XG5cdFx0XHRcdFx0XHRpZiAobnVtICE9PSAwKVxuXHRcdFx0XHRcdFx0XHRsZW4gKj0gbnVtO1xuXHRcdFx0XHRcdFx0bnVtID0gMDtcblx0XHRcdFx0XHRcdGRpdiA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiMVwiOlxuXHRcdFx0XHRcdGNhc2UgXCIyXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIjNcIjpcblx0XHRcdFx0XHRjYXNlIFwiNFwiOlxuXHRcdFx0XHRcdGNhc2UgXCI1XCI6XG5cdFx0XHRcdFx0Y2FzZSBcIjZcIjpcblx0XHRcdFx0XHRjYXNlIFwiN1wiOlxuXHRcdFx0XHRcdGNhc2UgXCI4XCI6XG5cdFx0XHRcdFx0Y2FzZSBcIjlcIjpcblx0XHRcdFx0XHRcdG51bSA9IG51bSoxMCArZXZlbnRba107XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgb246IGZhbHNlIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChkaXYpIHtcblx0XHRcdFx0aWYgKG51bSA9PT0gMCkgbnVtID0gMjsgLy8gYSBzbGFzaCBieSBpdHNlbGYgaXMgaW50ZXJwcmV0ZWQgYXMgXCIvMlwiXG5cdFx0XHRcdGxlbiAvPSBudW07XG5cdFx0XHR9IGVsc2UgaWYgKG51bSlcblx0XHRcdFx0bGVuICo9IG51bTtcblx0XHRcdGlmIChldmVudFswXSA9PT0gJ2QnKSB7XG5cdFx0XHRcdHJldC5wYXR0ZXJuLnB1c2goeyBsZW46IGxlbiAqIGJlYXRMZW5ndGgsIHBpdGNoOiBwYXJhbXMucGF0dGVyblsxICsgcGxheUNvdW50XSwgdmVsb2NpdHk6IHBhcmFtcy5wYXR0ZXJuWzEgKyBwbGF5Q291bnQgKyB0b3RhbFBsYXldfSk7XG5cdFx0XHRcdHBsYXlDb3VudCsrO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHJldC5wYXR0ZXJuLnB1c2goeyBsZW46IGxlbiAqIGJlYXRMZW5ndGgsIHBpdGNoOiBudWxsfSk7XG5cdFx0fVxuXHRcdC8vIE5vdyBub3JtYWxpemUgdGhlIHBhdHRlcm4gdG8gY292ZXIgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIG1lYXN1cmVzLiBUaGUgbm90ZSBsZW5ndGhzIHBhc3NlZCBhcmUgcmVsYXRpdmUgdG8gZWFjaCBvdGhlciBhbmQgbmVlZCB0byBiZSBzY2FsZWQgdG8gZml0IGEgbWVhc3VyZS5cblx0XHR2YXIgdG90YWxUaW1lID0gMDtcblx0XHR2YXIgbWVhc3VyZXNQZXJCZWF0ID0gbWV0ZXIubnVtL21ldGVyLmRlbjtcblx0XHRmb3IgKHZhciBpaSA9IDA7IGlpIDwgcmV0LnBhdHRlcm4ubGVuZ3RoOyBpaSsrKVxuXHRcdFx0dG90YWxUaW1lICs9IHJldC5wYXR0ZXJuW2lpXS5sZW47XG5cdFx0dmFyIG51bUJhcnMgPSBwYXJhbXMuYmFycyA/IHBhcmFtcy5iYXJzIDogMTtcblx0XHR2YXIgZmFjdG9yID0gdG90YWxUaW1lIC8gIG51bUJhcnMgLyBtZWFzdXJlc1BlckJlYXQ7XG5cdFx0Zm9yIChpaSA9IDA7IGlpIDwgcmV0LnBhdHRlcm4ubGVuZ3RoOyBpaSsrKVxuXHRcdFx0cmV0LnBhdHRlcm5baWldLmxlbiA9IHJldC5wYXR0ZXJuW2lpXS5sZW4gLyBmYWN0b3I7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdGZ1bmN0aW9uIGRydW1CZWF0KHBpdGNoLCBzb3VuZExlbmd0aCwgdm9sdW1lKSB7XG5cdFx0ZHJ1bVRyYWNrLnB1c2goeyBjbWQ6ICdzdGFydCcsIHBpdGNoOiBwaXRjaCAtIDYwLCB2b2x1bWU6IHZvbHVtZX0pO1xuXHRcdGRydW1UcmFjay5wdXNoKHsgY21kOiAnbW92ZScsIGR1cmF0aW9uOiBzb3VuZExlbmd0aCB9KTtcblx0XHRkcnVtVHJhY2sucHVzaCh7IGNtZDogJ3N0b3AnLCBwaXRjaDogcGl0Y2ggLSA2MCB9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyaXRlRHJ1bShjaGFubmVsKSB7XG5cdFx0aWYgKGRydW1UcmFjay5sZW5ndGggPT09IDAgJiYgIWRydW1EZWZpbml0aW9uLm9uKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dmFyIG1lYXN1cmVMZW4gPSBtZXRlci5udW0vbWV0ZXIuZGVuO1xuXHRcdGlmIChkcnVtVHJhY2subGVuZ3RoID09PSAwKSB7XG5cdFx0XHRkcnVtVHJhY2sucHVzaCh7Y21kOiAncHJvZ3JhbScsIGNoYW5uZWw6IGNoYW5uZWwsIGluc3RydW1lbnQ6IGRydW1JbnN0cnVtZW50fSk7XG5cdFx0XHQvLyBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGZhciBpbiB0aW1lIHRoZSBiYXIgc3RhcnRlZDogaWYgdGhlcmUgYXJlIHBpY2t1cCBub3RlcyBiZWZvcmUgdGhlIGNob3JkcyBzdGFydCwgd2UgbmVlZCBwYXVzZXMuXG5cdFx0XHR2YXIgZGlzdGFuY2UgPSB0aW1lRnJvbVN0YXJ0KCk7XG5cdFx0XHRpZiAoZGlzdGFuY2UgPiAwICYmIGRpc3RhbmNlIDwgbWVhc3VyZUxlbiAtIDAuMDEpIHsgLy8gYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCwgYWRkaW5nIHRoZSBub3RlcyBtaWdodCBub3QgZXhhY3RseSBlcXVhbCB0aGUgbWVhc3VyZSBzaXplLlxuXHRcdFx0XHRkcnVtVHJhY2sucHVzaCh7Y21kOiAnbW92ZScsIGR1cmF0aW9uOiBkaXN0YW5jZSAqIHRlbXBvQ2hhbmdlRmFjdG9yfSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIWRydW1EZWZpbml0aW9uLm9uKSB7XG5cdFx0XHQvLyB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGhhcyBiZWVuIGEgZHJ1bSB0cmFjaywgYnV0IGl0IHdhcyBzcGVjaWZpY2FsbHkgdHVybmVkIG9mZi5cblx0XHRcdGRydW1UcmFjay5wdXNoKHsgY21kOiAnbW92ZScsIGR1cmF0aW9uOiBtZWFzdXJlTGVuICogdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZHJ1bURlZmluaXRpb24ucGF0dGVybi5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGxlbiA9IGRydW1EZWZpbml0aW9uLnBhdHRlcm5baV0ubGVuICogdGVtcG9DaGFuZ2VGYWN0b3I7XG5cdFx0XHRpZiAoZHJ1bURlZmluaXRpb24ucGF0dGVybltpXS5waXRjaClcblx0XHRcdFx0ZHJ1bUJlYXQoZHJ1bURlZmluaXRpb24ucGF0dGVybltpXS5waXRjaCwgbGVuLCBkcnVtRGVmaW5pdGlvbi5wYXR0ZXJuW2ldLnZlbG9jaXR5KTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZHJ1bVRyYWNrLnB1c2goeyBjbWQ6ICdtb3ZlJywgZHVyYXRpb246IGxlbiB9KTtcblx0XHR9XG5cdH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsInZhciBnZXROb3RlID0gcmVxdWlyZSgnLi9sb2FkLW5vdGUnKTtcbnZhciBzb3VuZHNDYWNoZSA9IHJlcXVpcmUoJy4vc291bmRzLWNhY2hlJyk7XG52YXIgY3JlYXRlTm90ZU1hcCA9IHJlcXVpcmUoJy4vY3JlYXRlLW5vdGUtbWFwJyk7XG52YXIgcmVnaXN0ZXJBdWRpb0NvbnRleHQgPSByZXF1aXJlKCcuL3JlZ2lzdGVyLWF1ZGlvLWNvbnRleHQnKTtcbnZhciBhY3RpdmVBdWRpb0NvbnRleHQgPSByZXF1aXJlKCcuL2FjdGl2ZS1hdWRpby1jb250ZXh0Jyk7XG52YXIgc3VwcG9ydHNBdWRpbyA9IHJlcXVpcmUoJy4vc3VwcG9ydHMtYXVkaW8nKTtcbnZhciBwaXRjaFRvTm90ZU5hbWUgPSByZXF1aXJlKCcuL3BpdGNoLXRvLW5vdGUtbmFtZScpO1xudmFyIGluc3RydW1lbnRJbmRleFRvTmFtZSA9IHJlcXVpcmUoJy4vaW5zdHJ1bWVudC1pbmRleC10by1uYW1lJyk7XG52YXIgZG93bmxvYWRCdWZmZXIgPSByZXF1aXJlKCcuL2Rvd25sb2FkLWJ1ZmZlcicpO1xudmFyIHNlcXVlbmNlID0gcmVxdWlyZSgnLi4vbWlkaS9hYmNfbWlkaV9zZXF1ZW5jZXInKTtcbnZhciBmbGF0dGVuID0gcmVxdWlyZSgnLi4vbWlkaS9hYmNfbWlkaV9mbGF0dGVuZXInKTtcblxuLy8gVE9ETy1QRVI6IHJlbW92ZSB0aGUgbWlkaSB0ZXN0cyBmcm9tIGhlcmU6IEkgZG9uJ3QgdGhpbmsgdGhlIG9iamVjdCBjYW4gYmUgY29uc3RydWN0ZWQgdW5sZXNzIGl0IHBhc3Nlcy5cbnZhciBub3RTdXBwb3J0ZWRNZXNzYWdlID0gXCJNSURJIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLlwiO1xuXG52YXIgZGVmYXVsdFNvdW5kRm9udFVybCA9IFwiaHR0cHM6Ly9wYXVscm9zZW4uZ2l0aHViLmlvL21pZGktanMtc291bmRmb250cy9GbHVpZFIzX0dNL1wiO1xuXG5cbmZ1bmN0aW9uIENyZWF0ZVN5bnRoKCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHNlbGYuYXVkaW9CdWZmZXJQb3NzaWJsZSA9IHVuZGVmaW5lZDtcblx0c2VsZi5kaXJlY3RTb3VyY2UgPSBbXTsgLy8gdHlwZTogQXVkaW9CdWZmZXJTb3VyY2VOb2RlXG5cdHNlbGYuc3RhcnRUaW1lU2VjID0gdW5kZWZpbmVkOyAvLyB0aGUgdGltZSB0aGF0IHRoZSBtaWRpIHN0YXJ0ZWQ6IHVzZWQgZm9yIHBhdXNlL3Jlc3VtZS5cblx0c2VsZi5wYXVzZWRUaW1lU2VjID0gdW5kZWZpbmVkOyAvLyB0aGUgdGltZSB0aGF0IHRoZSBtaWRpIHdhcyBwYXVzZWQ6IHVzZWQgZm9yIHJlc3VtZS5cblx0c2VsZi5hdWRpb0J1ZmZlcnMgPSBbXTsgLy8gY2FjaGUgb2YgdGhlIGJ1ZmZlcnMgc28gc3RhcnRpbmcgcGxheSBjYW4gYmUgZmFzdC5cblx0c2VsZi5kdXJhdGlvbiA9IHVuZGVmaW5lZDsgLy8gdGhlIGR1cmF0aW9uIG9mIHRoZSB0dW5lIGluIHNlY29uZHMuXG5cdHNlbGYuaXNSdW5uaW5nID0gZmFsc2U7IC8vIHdoZXRoZXIgdGhlcmUgaXMgY3VycmVudGx5IGEgc291bmQgYnVmZmVyIHJ1bm5pbmcuXG5cblx0Ly8gTG9hZCBhbmQgY2FjaGUgYWxsIG5lZWRlZCBzb3VuZHNcblx0c2VsZi5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRcdGlmICghb3B0aW9ucylcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHRyZWdpc3RlckF1ZGlvQ29udGV4dChvcHRpb25zLmF1ZGlvQ29udGV4dCk7IC8vIFRoaXMgd29ya3Mgbm8gbWF0dGVyIHdoYXQgLSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjIGl0IGlzIGEgbm9wOyBpZiB0aGUgY29udGV4dCBpcyBub3QgcGFzc2VkIGluLCB0aGVuIGl0IGNyZWF0ZXMgb25lLlxuXHRcdHZhciBzdGFydFRpbWUgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZTtcblx0XHRzZWxmLmRlYnVnQ2FsbGJhY2sgPSBvcHRpb25zLmRlYnVnQ2FsbGJhY2s7XG5cdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcImluaXQgY2FsbGVkXCIpO1xuXHRcdHNlbGYuYXVkaW9CdWZmZXJQb3NzaWJsZSA9IHNlbGYuX2RldmljZUNhcGFibGUoKTtcblx0XHRpZiAoIXNlbGYuYXVkaW9CdWZmZXJQb3NzaWJsZSlcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh7IHN0YXR1czogXCJOb3RTdXBwb3J0ZWRcIiwgbWVzc2FnZTogbm90U3VwcG9ydGVkTWVzc2FnZX0pO1xuXHRcdHNlbGYuc291bmRGb250VXJsID0gb3B0aW9ucy5zb3VuZEZvbnRVcmwgPyBvcHRpb25zLnNvdW5kRm9udFVybCA6IGRlZmF1bHRTb3VuZEZvbnRVcmw7XG5cdFx0c2VsZi5taWxsaXNlY29uZHNQZXJNZWFzdXJlID0gb3B0aW9ucy5taWxsaXNlY29uZHNQZXJNZWFzdXJlID8gb3B0aW9ucy5taWxsaXNlY29uZHNQZXJNZWFzdXJlIDogKG9wdGlvbnMudmlzdWFsT2JqID8gb3B0aW9ucy52aXN1YWxPYmoubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSgpIDogMTAwMCk7XG5cdFx0dmFyIHBhcmFtcyA9IG9wdGlvbnMub3B0aW9ucyA/IG9wdGlvbnMub3B0aW9ucyA6IHt9O1xuXHRcdHNlbGYubWV0ZXJTaXplID0gMTtcblx0XHRpZiAob3B0aW9ucy52aXN1YWxPYmopIHtcblx0XHRcdHZhciBzZXEgPSBzZXF1ZW5jZShvcHRpb25zLnZpc3VhbE9iaiwgcGFyYW1zKTtcblx0XHRcdHNlbGYuZmxhdHRlbmVkID0gZmxhdHRlbihzZXEsIHBhcmFtcyk7XG5cdFx0XHRzZWxmLm1ldGVyU2l6ZSA9IG9wdGlvbnMudmlzdWFsT2JqLmdldE1ldGVyRnJhY3Rpb24oKS5udW0gLyBvcHRpb25zLnZpc3VhbE9iai5nZXRNZXRlckZyYWN0aW9uKCkuZGVuO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5zZXF1ZW5jZSlcblx0XHRcdHNlbGYuZmxhdHRlbmVkID0gb3B0aW9ucy5zZXF1ZW5jZTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTXVzdCBwYXNzIGluIGVpdGhlciBhIHZpc3VhbE9iaiBvciBhIHNlcXVlbmNlXCIpKTtcblx0XHRzZWxmLnNlcXVlbmNlQ2FsbGJhY2sgPSBwYXJhbXMuc2VxdWVuY2VDYWxsYmFjaztcblx0XHRzZWxmLmNhbGxiYWNrQ29udGV4dCA9IHBhcmFtcy5jYWxsYmFja0NvbnRleHQ7XG5cdFx0c2VsZi5vbkVuZGVkID0gb3B0aW9ucy5vbkVuZGVkO1xuXG5cdFx0dmFyIGFsbE5vdGVzID0ge307XG5cdFx0dmFyIGN1cnJlbnRJbnN0cnVtZW50ID0gaW5zdHJ1bWVudEluZGV4VG9OYW1lWzBdO1xuXHRcdHNlbGYuZmxhdHRlbmVkLnRyYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKSB7XG5cdFx0XHR0cmFjay5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChldmVudC5jbWQgPT09IFwicHJvZ3JhbVwiICYmIGluc3RydW1lbnRJbmRleFRvTmFtZVtldmVudC5pbnN0cnVtZW50XSlcblx0XHRcdFx0XHRjdXJyZW50SW5zdHJ1bWVudCA9IGluc3RydW1lbnRJbmRleFRvTmFtZVtldmVudC5pbnN0cnVtZW50XTtcblx0XHRcdFx0aWYgKGV2ZW50LnBpdGNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR2YXIgcGl0Y2hOdW1iZXIgPSBldmVudC5waXRjaCArIDYwO1xuXHRcdFx0XHRcdHZhciBub3RlTmFtZSA9IHBpdGNoVG9Ob3RlTmFtZVtwaXRjaE51bWJlcl07XG5cdFx0XHRcdFx0aWYgKG5vdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWFsbE5vdGVzW2N1cnJlbnRJbnN0cnVtZW50XSlcblx0XHRcdFx0XHRcdFx0YWxsTm90ZXNbY3VycmVudEluc3RydW1lbnRdID0ge307XG5cdFx0XHRcdFx0XHRhbGxOb3Rlc1tjdXJyZW50SW5zdHJ1bWVudF1bcGl0Y2hUb05vdGVOYW1lW3BpdGNoTnVtYmVyXV0gPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJDYW4ndCBmaW5kIG5vdGU6IFwiLCBwaXRjaE51bWJlcik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGlmIChzZWxmLmRlYnVnQ2FsbGJhY2spXG5cdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soXCJub3RlIGdhdGhlcmluZyB0aW1lID0gXCIgKyBNYXRoLmZsb29yKChhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZSAtIHN0YXJ0VGltZSkqMTAwMCkrXCJtc1wiKTtcblx0XHRzdGFydFRpbWUgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZTtcblxuXHRcdHZhciBub3RlcyA9IFtdO1xuXHRcdE9iamVjdC5rZXlzKGFsbE5vdGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGluc3RydW1lbnQpIHtcblx0XHRcdE9iamVjdC5rZXlzKGFsbE5vdGVzW2luc3RydW1lbnRdKS5mb3JFYWNoKGZ1bmN0aW9uKG5vdGUpIHtcblx0XHRcdFx0bm90ZXMucHVzaCh7IGluc3RydW1lbnQ6IGluc3RydW1lbnQsIG5vdGU6IG5vdGUgfSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHQvLyBJZiB0aGVyZSBhcmUgbG90cyBvZiBub3RlcywgbG9hZCB0aGVtIGluIGJhdGNoZXNcblx0XHR2YXIgYmF0Y2hlcyA9IFtdO1xuXHRcdHZhciBDSFVOSyA9IDI1Njtcblx0XHRmb3IgKHZhciBpPTA7IGkgPCBub3Rlcy5sZW5ndGg7IGkgKz0gQ0hVTkspIHtcblx0XHRcdGJhdGNoZXMucHVzaChub3Rlcy5zbGljZShpLCBpICsgQ0hVTkspKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHR2YXIgcmVzdWx0cyA9IFtdO1xuXG5cdFx0XHR2YXIgaW5kZXggPSAwO1xuXHRcdFx0dmFyIG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKGluZGV4IDwgYmF0Y2hlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRzZWxmLl9sb2FkQmF0Y2goYmF0Y2hlc1tpbmRleF0sIHNlbGYuc291bmRGb250VXJsLCBzdGFydFRpbWUpLnRoZW4oZnVuY3Rpb24oZGF0YSkge1xuXHRcdFx0XHRcdFx0c3RhcnRUaW1lID0gYWN0aXZlQXVkaW9Db250ZXh0KCkuY3VycmVudFRpbWU7XG5cdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goZGF0YSk7XG5cdFx0XHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRcdFx0bmV4dCgpO1xuXHRcdFx0XHRcdH0sIHJlamVjdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHRzKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG5leHQoKTtcblx0XHR9KTtcblx0fTtcblxuXHRzZWxmLl9sb2FkQmF0Y2ggPSAoZnVuY3Rpb24oYmF0Y2gsIHNvdW5kRm9udFVybCwgc3RhcnRUaW1lKSB7XG5cdFx0dmFyIHByb21pc2VzID0gW107XG5cdFx0YmF0Y2guZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRwcm9taXNlcy5wdXNoKGdldE5vdGUoc291bmRGb250VXJsLCBpdGVtLmluc3RydW1lbnQsIGl0ZW0ubm90ZSwgYWN0aXZlQXVkaW9Db250ZXh0KCkpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdGlmIChzZWxmLmRlYnVnQ2FsbGJhY2spXG5cdFx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcIm1wMyBsb2FkIHRpbWUgPSBcIiArIE1hdGguZmxvb3IoKGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lKSoxMDAwKStcIm1zXCIpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHNlbGYucHJpbWUgPSBmdW5jdGlvbigpIHtcblx0XHRzZWxmLmlzUnVubmluZyA9IGZhbHNlO1xuXHRcdGlmICghc2VsZi5hdWRpb0J1ZmZlclBvc3NpYmxlKVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihub3RTdXBwb3J0ZWRNZXNzYWdlKSk7XG5cdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcInByaW1lIGNhbGxlZFwiKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0dmFyIHN0YXJ0VGltZSA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmN1cnJlbnRUaW1lO1xuXHRcdFx0dmFyIHRlbXBvTXVsdGlwbGllciA9IHNlbGYubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSAvIDEwMDAgLyBzZWxmLm1ldGVyU2l6ZTtcblx0XHRcdHNlbGYuZHVyYXRpb24gPSBzZWxmLmZsYXR0ZW5lZC50b3RhbER1cmF0aW9uICogdGVtcG9NdWx0aXBsaWVyO1xuXHRcdFx0dmFyIHRvdGFsU2FtcGxlcyA9IE1hdGguZmxvb3IoYWN0aXZlQXVkaW9Db250ZXh0KCkuc2FtcGxlUmF0ZSAqIHNlbGYuZHVyYXRpb24pO1xuXG5cdFx0XHQvLyBUaGVyZSBtaWdodCBiZSBhIHByZXZpb3VzIHJ1biB0aGF0IG5lZWRzIHRvIGJlIHR1cm5lZCBvZmYuXG5cdFx0XHRzZWxmLnN0b3AoKTtcblxuXHRcdFx0dmFyIG5vdGVNYXBUcmFja3MgPSBjcmVhdGVOb3RlTWFwKHNlbGYuZmxhdHRlbmVkKTtcblx0XHRcdGlmIChzZWxmLnNlcXVlbmNlQ2FsbGJhY2spXG5cdFx0XHRcdHNlbGYuc2VxdWVuY2VDYWxsYmFjayhub3RlTWFwVHJhY2tzLCBzZWxmLmNhbGxiYWNrQ29udGV4dCk7XG5cdFx0XHQvL2NvbnNvbGUubG9nKG5vdGVNYXBUcmFja3MpO1xuXG5cdFx0XHRzZWxmLmF1ZGlvQnVmZmVycyA9IFtdO1xuXHRcdFx0bm90ZU1hcFRyYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG5vdGVNYXApIHtcblx0XHRcdFx0dmFyIGF1ZGlvQnVmZmVyID0gYWN0aXZlQXVkaW9Db250ZXh0KCkuY3JlYXRlQnVmZmVyKDEsIHRvdGFsU2FtcGxlcywgYWN0aXZlQXVkaW9Db250ZXh0KCkuc2FtcGxlUmF0ZSk7XG5cdFx0XHRcdHZhciBjaGFuRGF0YSA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXG5cdFx0XHRcdG5vdGVNYXAuZm9yRWFjaChmdW5jdGlvbihub3RlKSB7XG5cdFx0XHRcdFx0c2VsZi5fcGxhY2VOb3RlKGNoYW5EYXRhLCBub3RlLCB0ZW1wb011bHRpcGxpZXIsIHNvdW5kc0NhY2hlKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2VsZi5hdWRpb0J1ZmZlcnMucHVzaChhdWRpb0J1ZmZlcik7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaykge1xuXHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soXCJzYW1wbGVSYXRlID0gXCIgKyBhY3RpdmVBdWRpb0NvbnRleHQoKS5zYW1wbGVSYXRlKTtcblx0XHRcdFx0c2VsZi5kZWJ1Z0NhbGxiYWNrKFwidG90YWxTYW1wbGVzID0gXCIgKyB0b3RhbFNhbXBsZXMpO1xuXHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soXCJjcmVhdGlvblRpbWUgPSBcIiArIE1hdGguZmxvb3IoKGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lKSoxMDAwKSArIFwibXNcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXNvbHZlKHtcblx0XHRcdFx0c3RhdHVzOiBcIm9rXCIsXG5cdFx0XHRcdHNlY29uZHM6IDBcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9O1xuXG5cdC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwLCBzbyBpdCBjYW4gcXVpY2tseSBtYWtlIHNvdW5kXG5cdHNlbGYuc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoc2VsZi5wYXVzZWRUaW1lU2VjKSB7XG5cdFx0XHRzZWxmLnJlc3VtZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghc2VsZi5hdWRpb0J1ZmZlclBvc3NpYmxlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKG5vdFN1cHBvcnRlZE1lc3NhZ2UpO1xuXHRcdGlmIChzZWxmLmRlYnVnQ2FsbGJhY2spXG5cdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soXCJzdGFydCBjYWxsZWRcIik7XG5cblx0XHRzZWxmLl9raWNrT2ZmU291bmQoMCk7XG5cdFx0c2VsZi5zdGFydFRpbWVTZWMgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZTtcblx0XHRzZWxmLnBhdXNlZFRpbWVTZWMgPSB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0c2VsZi5kZWJ1Z0NhbGxiYWNrKFwiTUlESSBTVEFSVEVEXCIsIHNlbGYuc3RhcnRUaW1lU2VjKTtcblx0fTtcblxuXHRzZWxmLnBhdXNlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCFzZWxmLmF1ZGlvQnVmZmVyUG9zc2libGUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Iobm90U3VwcG9ydGVkTWVzc2FnZSk7XG5cdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcInBhdXNlIGNhbGxlZFwiKTtcblxuXHRcdGlmICghc2VsZi5wYXVzZWRUaW1lU2VjKSB7IC8vIGlnbm9yZSBpZiBzZWxmIGlzIGFscmVhZHkgcGF1c2VkLlxuXHRcdFx0c2VsZi5zdG9wKCk7XG5cdFx0XHRzZWxmLnBhdXNlZFRpbWVTZWMgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi5yZXN1bWUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIXNlbGYuYXVkaW9CdWZmZXJQb3NzaWJsZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcihub3RTdXBwb3J0ZWRNZXNzYWdlKTtcblx0XHRpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0c2VsZi5kZWJ1Z0NhbGxiYWNrKFwicmVzdW1lIGNhbGxlZFwiKTtcblxuXHRcdHZhciBvZmZzZXQgPSBzZWxmLnBhdXNlZFRpbWVTZWMgLSBzZWxmLnN0YXJ0VGltZVNlYztcblx0XHRzZWxmLnN0YXJ0VGltZVNlYyA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmN1cnJlbnRUaW1lIC0gb2Zmc2V0OyAvLyBXZSBtb3ZlIHRoZSBzdGFydCB0aW1lIGluIGNhc2UgdGhlcmUgaXMgYW5vdGhlciBwYXVzZS9yZXN1bWUuXG5cdFx0c2VsZi5wYXVzZWRUaW1lU2VjID0gdW5kZWZpbmVkO1xuXHRcdHNlbGYuX2tpY2tPZmZTb3VuZChvZmZzZXQpO1xuXHR9O1xuXG5cdHNlbGYuc2VlayA9IGZ1bmN0aW9uKHBlcmNlbnQpIHtcblx0XHR2YXIgb2Zmc2V0ID0gc2VsZi5kdXJhdGlvbiAqIHBlcmNlbnQ7XG5cblx0XHQvLyBUT0RPLVBFUjogY2FuIHNlZWsgd2hlbiBwYXVzZWQgb3Igd2hlbiBwbGF5aW5nXG5cdFx0aWYgKCFzZWxmLmF1ZGlvQnVmZmVyUG9zc2libGUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Iobm90U3VwcG9ydGVkTWVzc2FnZSk7XG5cdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcInNlZWsgY2FsbGVkIHNlYz1cIiArIG9mZnNldCk7XG5cblx0XHRpZiAoc2VsZi5pc1J1bm5pbmcpIHtcblx0XHRcdHNlbGYuc3RvcCgpO1xuXHRcdFx0c2VsZi5fa2lja09mZlNvdW5kKG9mZnNldCk7XG5cdFx0fVxuXHRcdHZhciBwYXVzZURpc3RhbmNlID0gc2VsZi5wYXVzZWRUaW1lU2VjID8gc2VsZi5wYXVzZWRUaW1lU2VjIC0gc2VsZi5zdGFydFRpbWVTZWMgOiB1bmRlZmluZWQ7XG5cdFx0c2VsZi5zdGFydFRpbWVTZWMgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZSAtIG9mZnNldDtcblx0XHRpZiAoc2VsZi5wYXVzZWRUaW1lU2VjKVxuXHRcdFx0c2VsZi5wYXVzZWRUaW1lU2VjID0gc2VsZi5zdGFydFRpbWVTZWMgKyBwYXVzZURpc3RhbmNlO1xuXHR9O1xuXG5cdHNlbGYuc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdHNlbGYuaXNSdW5uaW5nID0gZmFsc2U7XG5cdFx0c2VsZi5wYXVzZWRUaW1lU2VjID0gdW5kZWZpbmVkO1xuXHRcdHNlbGYuZGlyZWN0U291cmNlLmZvckVhY2goZnVuY3Rpb24oc291cmNlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzb3VyY2Uuc3RvcCgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Ly8gV2UgZG9uJ3QgY2FyZSBpZiBzZWxmIHN1Y2NlZWRzOiBpdCBtaWdodCBmYWlsIGlmIHNvbWV0aGluZyBlbHNlIHR1cm5lZCBvZmYgdGhlIHNvdW5kIG9yIGl0IGVuZGVkIGZvciBzb21lIHJlYXNvbi5cblx0XHRcdFx0Y29uc29sZS5sb2coXCJkaXJlY3Qgc291cmNlIGRpZG4ndCBzdG9wOlwiLCBlcnJvcilcblx0XHRcdH1cblx0XHR9KTtcblx0XHRzZWxmLmRpcmVjdFNvdXJjZSA9IFtdO1xuXHR9O1xuXG5cdHNlbGYuZG93bmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG93bmxvYWRCdWZmZXIoc2VsZik7XG5cdH07XG5cblx0Ly8vLy8vLy8vLy8vLy8vIFByaXZhdGUgZnVuY3Rpb25zIC8vLy8vLy8vLy8vLy8vXG5cblx0c2VsZi5fZGV2aWNlQ2FwYWJsZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICghc3VwcG9ydHNBdWRpbygpKSB7XG5cdFx0XHRjb25zb2xlLndhcm4obm90U3VwcG9ydGVkTWVzc2FnZSk7XG5cdFx0XHRpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2sobm90U3VwcG9ydGVkTWVzc2FnZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdHNlbGYuX2tpY2tPZmZTb3VuZCA9IGZ1bmN0aW9uKHNlY29uZHMpIHtcblx0XHRzZWxmLmlzUnVubmluZyA9IHRydWU7XG5cdFx0c2VsZi5kaXJlY3RTb3VyY2UgPSBbXTtcblx0XHRzZWxmLmF1ZGlvQnVmZmVycy5mb3JFYWNoKGZ1bmN0aW9uKGF1ZGlvQnVmZmVyLCB0cmFja051bSkge1xuXHRcdFx0c2VsZi5kaXJlY3RTb3VyY2VbdHJhY2tOdW1dID0gYWN0aXZlQXVkaW9Db250ZXh0KCkuY3JlYXRlQnVmZmVyU291cmNlKCk7IC8vIGNyZWF0ZXMgYSBzb3VuZCBzb3VyY2Vcblx0XHRcdHNlbGYuZGlyZWN0U291cmNlW3RyYWNrTnVtXS5idWZmZXIgPSBhdWRpb0J1ZmZlcjsgLy8gdGVsbCB0aGUgc291cmNlIHdoaWNoIHNvdW5kIHRvIHBsYXlcblx0XHRcdHNlbGYuZGlyZWN0U291cmNlW3RyYWNrTnVtXS5jb25uZWN0KGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmRlc3RpbmF0aW9uKTsgLy8gY29ubmVjdCB0aGUgc291cmNlIHRvIHRoZSBjb250ZXh0J3MgZGVzdGluYXRpb24gKHRoZSBzcGVha2Vycylcblx0XHR9KTtcblx0XHRzZWxmLmRpcmVjdFNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uKHNvdXJjZSkge1xuXHRcdFx0c291cmNlLnN0YXJ0KDAsIHNlY29uZHMpO1xuXHRcdH0pO1xuXHRcdGlmIChzZWxmLm9uRW5kZWQpIHtcblx0XHRcdHNlbGYuZGlyZWN0U291cmNlWzBdLm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYub25FbmRlZChzZWxmLmNhbGxiYWNrQ29udGV4dCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblxuXHRzZWxmLl9wbGFjZU5vdGUgPSBmdW5jdGlvbihjaGFuRGF0YSwgbm90ZSwgdGVtcG9NdWx0aXBsaWVyLCBzb3VuZHNDYWNoZSkge1xuXHRcdHZhciBzdGFydCA9IE1hdGguZmxvb3Iobm90ZS5zdGFydCphY3RpdmVBdWRpb0NvbnRleHQoKS5zYW1wbGVSYXRlICogdGVtcG9NdWx0aXBsaWVyKTtcblx0XHR2YXIgbnVtQmVhdHMgPSBub3RlLmVuZCAtIG5vdGUuc3RhcnQ7XG5cdFx0dmFyIG5vdGVUaW1lU2VjID0gbnVtQmVhdHMgKiB0ZW1wb011bHRpcGxpZXI7XG5cdFx0dmFyIG5vdGVOYW1lID0gcGl0Y2hUb05vdGVOYW1lW25vdGUucGl0Y2grNjBdO1xuXHRcdGlmIChub3RlTmFtZSkgeyAvLyBKdXN0IGlnbm9yZSBwaXRjaGVzIHRoYXQgZG9uJ3QgZXhpc3QuXG5cdFx0XHR2YXIgcGl0Y2ggPSBzb3VuZHNDYWNoZVtub3RlLmluc3RydW1lbnRdW25vdGVOYW1lXS5nZXRDaGFubmVsRGF0YSgwKTtcblx0XHRcdHZhciBkdXJhdGlvbiA9IE1hdGgubWluKHBpdGNoLmxlbmd0aCwgTWF0aC5mbG9vcihub3RlVGltZVNlYyAqIGFjdGl2ZUF1ZGlvQ29udGV4dCgpLnNhbXBsZVJhdGUpKTtcblx0XHRcdC8vY29uc29sZS5sb2cocGl0Y2hUb05vdGVbbm90ZS5waXRjaCsnJ10sIHN0YXJ0LCBudW1CZWF0cywgbm90ZVRpbWVTZWMsIGR1cmF0aW9uKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZHVyYXRpb247IGkrKykge1xuXHRcdFx0XHR2YXIgdGhpc1NhbXBsZSA9IHBpdGNoW2ldICogbm90ZS52b2x1bWUgLyAxMjg7XG5cdFx0XHRcdGlmIChjaGFuRGF0YVtzdGFydCArIGldKVxuXHRcdFx0XHRcdGNoYW5EYXRhW3N0YXJ0ICsgaV0gPSAoY2hhbkRhdGFbc3RhcnQgKyBpXSArIHRoaXNTYW1wbGUpICowLjc1O1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0Y2hhbkRhdGFbc3RhcnQgKyBpXSA9IHRoaXNTYW1wbGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZVN5bnRoO1xuIiwidmFyIFN5bnRoU2VxdWVuY2UgPSBmdW5jdGlvbigpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRzZWxmLnRyYWNrcyA9IFtdO1xuXHRzZWxmLnRvdGFsRHVyYXRpb24gPSAwO1xuXG5cdHNlbGYuYWRkVHJhY2sgPSBmdW5jdGlvbigpIHtcblx0XHRzZWxmLnRyYWNrcy5wdXNoKFtdKTtcblx0XHRyZXR1cm4gc2VsZi50cmFja3MubGVuZ3RoIC0gMTtcblx0fTtcblxuXHRzZWxmLnNldEluc3RydW1lbnQgPSBmdW5jdGlvbih0cmFja051bWJlciwgaW5zdHJ1bWVudE51bWJlcikge1xuXHRcdHNlbGYudHJhY2tzW3RyYWNrTnVtYmVyXS5wdXNoKHtcblx0XHRcdGNoYW5uZWw6IDAsXG5cdFx0XHRjbWQ6IFwicHJvZ3JhbVwiLFxuXHRcdFx0aW5zdHJ1bWVudDogaW5zdHJ1bWVudE51bWJlclxuXHRcdH0pO1xuXHR9O1xuXG5cdHNlbGYuYXBwZW5kTm90ZSA9IGZ1bmN0aW9uKHRyYWNrTnVtYmVyLCBwaXRjaCwgZHVyYXRpb25Jbk1lYXN1cmVzLCB2b2x1bWUpIHtcblx0XHRzZWxmLnRyYWNrc1t0cmFja051bWJlcl0ucHVzaCh7XG5cdFx0XHRjbWQ6IFwic3RhcnRcIixcblx0XHRcdHBpdGNoOiBwaXRjaCAtIDYwLFxuXHRcdFx0dm9sdW1lOiB2b2x1bWVcblx0XHR9KTtcblx0XHRzZWxmLnRyYWNrc1t0cmFja051bWJlcl0ucHVzaCh7XG5cdFx0XHRjbWQ6IFwibW92ZVwiLFxuXHRcdFx0ZHVyYXRpb246IGR1cmF0aW9uSW5NZWFzdXJlc1xuXHRcdH0pO1xuXHRcdHNlbGYudHJhY2tzW3RyYWNrTnVtYmVyXS5wdXNoKHtcblx0XHRcdGNtZDogXCJzdG9wXCIsXG5cdFx0XHRwaXRjaDogcGl0Y2ggLSA2MFxuXHRcdH0pO1xuXHRcdHZhciBkdXJhdGlvbiA9IDA7XG5cdFx0c2VsZi50cmFja3NbdHJhY2tOdW1iZXJdLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdGlmIChldmVudC5kdXJhdGlvbilcblx0XHRcdFx0ZHVyYXRpb24gKz0gZXZlbnQuZHVyYXRpb247XG5cdFx0fSk7XG5cdFx0c2VsZi50b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoc2VsZi50b3RhbER1cmF0aW9uLCBkdXJhdGlvbik7XG5cdH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoU2VxdWVuY2U7XG4iLCJ2YXIgc3VwcG9ydHNBdWRpbyA9IHJlcXVpcmUoJy4vc3VwcG9ydHMtYXVkaW8nKTtcbnZhciByZWdpc3RlckF1ZGlvQ29udGV4dCA9IHJlcXVpcmUoJy4vcmVnaXN0ZXItYXVkaW8tY29udGV4dCcpO1xudmFyIGFjdGl2ZUF1ZGlvQ29udGV4dCA9IHJlcXVpcmUoJy4vYWN0aXZlLWF1ZGlvLWNvbnRleHQnKTtcbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19jb21tb24nKTtcbi8vIFRPRE8tUEVSOiBUaGUgcmVxdWlyZSBzdGF0ZW1lbnRzIGZvciBzdmcgZG9uJ3QgcGxheSB3ZWxsIGZvciBub2RlIGFwcHMgd2l0aG91dCBleHRyYSBwbHVnaW5zLiBUaGUgZm9sbG93aW5nIGxpbmVzIHdvdWxkIGJlIGNsZWFyZXIgdGhhbiBpbmxpbmluZyB0aGUgU1ZHXG4vLyB2YXIgbG9vcEltYWdlID0gcmVxdWlyZSgnLi9pbWFnZXMvbG9vcC5zdmcnKTtcbi8vIHZhciBwbGF5SW1hZ2UgPSByZXF1aXJlKCcuL2ltYWdlcy9wbGF5LnN2ZycpO1xuLy8gdmFyIHBhdXNlSW1hZ2UgPSByZXF1aXJlKCcuL2ltYWdlcy9wYXVzZS5zdmcnKTtcbi8vIHZhciBsb2FkaW5nSW1hZ2UgPSByZXF1aXJlKCcuL2ltYWdlcy9sb2FkaW5nLnN2ZycpO1xuLy8gdmFyIHJlc2V0SW1hZ2UgPSByZXF1aXJlKCcuL2ltYWdlcy9yZXNldC5zdmcnKTtcbnZhciBsb29wSW1hZ2UgPSAnPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNzAwIDcwMFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCI+XFxuJyArXG5cdCc8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCw3MDApIHNjYWxlKDAuMSwtMC4xKVwiID5cXG4nICtcblx0JzxwYXRoIGQ9XCJNMzExMSA2OTgxIGMtMjAgLTM3IC05MCAtNTUgLTM2NCAtOTYgLTEyMCAtMTggLTE5MCAtMzMgLTI0NCAtNTUgJyArXG5cdCctNDIgLTE3IC0xMjQgLTQyIC0xODIgLTU2IC03OCAtMTggLTExOSAtMzQgLTE1NyAtNjAgLTI4IC0xOSAtODYgLTQ2IC0xMjggJyArXG5cdCctNjAgLTQzIC0xMyAtMTA3IC00MiAtMTQ0IC02NCAtMzcgLTIzIC04NCAtNDYgLTEwNiAtNTIgLTIxIC03IC01NiAtMjkgLTc5ICcgK1xuXHQnLTUwIC0yMiAtMjIgLTYxIC01MCAtODYgLTYzIC0yNiAtMTMgLTY3IC00MCAtOTEgLTYwIC0yNCAtMjAgLTY1IC00NyAtOTAgLTYwICcgK1xuXHQnLTI1IC0xMyAtNTMgLTMxIC02MSAtNDEgLTggLTkgLTMyIC0zMCAtNTQgLTQ2IC03NSAtNTQgLTQ4NiAtNDYwIC01MTIgLTUwNyAnICtcblx0Jy0xNSAtMjUgLTQ4IC02OSAtNzUgLTk4IC0yNiAtMjggLTQ4IC01NyAtNDggLTYzIDAgLTYgLTE4IC0yOSAtMzkgLTUzIC0yMSAnICtcblx0Jy0yMyAtNTYgLTcxIC03NyAtMTA3IC0yMCAtMzYgLTUwIC04MCAtNjUgLTk3IC0xNiAtMTggLTMzIC01MiAtNDAgLTc1IC0xMiAnICtcblx0Jy00NyAtNDcgLTExNSAtODQgLTE2NiAtMTMgLTE4IC0zMCAtNTYgLTM4IC04MyAtOCAtMjcgLTM0IC04MCAtNTYgLTExOCAtMzMgJyArXG5cdCctNTMgLTQ2IC05MSAtNjIgLTE2NyAtMTIgLTYzIC0zNCAtMTI3IC01OSAtMTc5IC00MiAtODQgLTYwIC0xNjYgLTYwIC0yNzAgMCAnICtcblx0Jy05MCAyNiAtMTIyIDEyNSAtMTU0IDU0IC0xNyA5NiAtMTkgNDMwIC0yMCAzMDUgLTEgMzgxIDIgNDMwIDE0IDgyIDIyIDE0MCA1MSAnICtcblx0JzE1MyA3OCA2IDEyIDIyIDQ3IDM3IDc3IDE0IDMwIDM4IDc3IDU0IDEwMyAxNSAyNyAzNCA3MyA0MCAxMDMgNyAzMCAyOCA3OCA0OCAnICtcblx0JzEwNyAxOSAyOCA0NCA3NCA1NSAxMDEgMTAgMjggMzQgNjcgNTMgODcgMTggMjAgNDkgNjEgNjggOTAgMTkgMzAgNDQgNjMgNTcgJyArXG5cdCc3NCAxMyAxMSAzNiA0MCA1MiA2NSA1OSA5NCAyMzIgMjcwIDMwNiAzMTMgMjAgMTEgNTcgMzcgODIgNTggMjUgMjAgNzAgNTIgJyArXG5cdCcxMDAgNzIgMzAgMTkgNjYgNDcgNzkgNjEgMTMgMTQgNDkgMzUgODAgNDYgMzAgMTIgODAgMzcgMTExIDU2IDMxIDE5IDk1IDQ1ICcgK1xuXHQnMTQzIDU4IDQ4IDEyIDExMCAzNyAxMzkgNTUgNjMgNDAgMTI3IDU1IDMyMyA3NiA4MyA5IDIwOCAyOCAyNzkgNDEgMTU2IDI5ICcgK1xuXHQnMTY1IDI5IDMzMCA0IDQ1MyAtNzEgNTE0IC04NCA2MDYgLTEzMCAzMSAtMTYgODMgLTM2IDExNiAtNDUgMzIgLTkgODQgLTM0ICcgK1xuXHQnMTE1IC01NiAzMSAtMjEgODIgLTQ4IDExMyAtNjAgMzIgLTExIDcyIC0zMyA4OSAtNDggMTggLTE2IDU5IC00NSA5MiAtNjUgMzMgJyArXG5cdCctMjEgNzQgLTUxIDkwIC02NiAxNyAtMTUgNDkgLTQwIDczIC01NCA1MiAtMzIgNjUgLTYxIDUwIC0xMTMgLTggLTMxIC02MSAtOTAgJyArXG5cdCctMjc3IC0zMDggLTMwMCAtMzAzIC0zNjEgLTM4MiAtMzY5IC00ODEgLTIgLTI5IDAgLTY2IDYgLTgxIDEzIC00MCA4OCAtMTM4ICcgK1xuXHQnMTE1IC0xNTEgMTIgLTYgNTQgLTI2IDkyIC00NCBsNzAgLTMzIDk0NSAtMiBjNTIwIC0xIDk3NSAyIDEwMTIgNyA2NCA4IDE5MSAnICtcblx0JzUwIDIzMSA3NiAxMSA3IDMzIDM0IDUwIDYwIDIyIDM0IDQyIDUxIDY1IDU4IGwzMiA5IDAgMTEwMSAwIDExMDIgLTMyIDkgYy0yMSAnICtcblx0JzcgLTQ0IDI2IC02NCA1NSAtNjAgODQgLTc3IDk3IC0xNDAgMTEwIC00NCA5IC03NiAxMCAtMTI3IDIgLTU5IC05IC03NyAtMTcgJyArXG5cdCctMTM0IC02MiAtMzcgLTI4IC0xNzIgLTE1NSAtMzAxIC0yODEgLTEyOSAtMTI3IC0yNDkgLTIzNyAtMjY3IC0yNDUgLTI1IC0xMCAnICtcblx0Jy00MSAtMTEgLTcxIC0yIC01OCAxNSAtMTEyIDQ1IC0xMjQgNjkgLTYgMTEgLTM1IDM1IC02NCA1NCAtMjggMTggLTU4IDQxIC02NiAnICtcblx0JzUwIC04IDkgLTQxIDM1IC03NSA1OCAtMzMgMjIgLTc3IDU2IC05OSA3NSAtMjEgMTggLTY0IDQ2IC05NSA2MSAtMzEgMTQgLTczICcgK1xuXHQnMzkgLTkzIDU1IC0yMCAxNSAtNzAgNDAgLTExMCA1NSAtNDAgMTUgLTk3IDQ0IC0xMjcgNjQgLTI5IDIxIC03OCA0NCAtMTA3IDUzICcgK1xuXHQnLTMwIDggLTc3IDMxIC0xMDUgNTEgLTQyIDI4IC03MyAzOSAtMTczIDYwIC02OCAxNCAtMTU0IDM5IC0xOTYgNTggLTk1IDQzICcgK1xuXHQnLTEzMSA1MSAtMzQzIDc2IC0yMDkgMjQgLTI0MiAzMiAtMjc5IDcwIGwtMzAgMjkgLTMyOCAwIGMtMzEyIDAgLTMzMCAtMSAtMzM5ICcgK1xuXHQnLTE5elwiPjwvcGF0aD5cXG4nICtcblx0JzxwYXRoIGQ9XCJNMjU0IDI4NzUgYy04OSAtMTYgLTEwNyAtMjYgLTE0NSAtNzggLTMyIC00NCAtNjIgLTY2IC05MSAtNjcgLTE3IDAgJyArXG5cdCctMTggLTYxIC0xOCAtMTE0MCBsMCAtMTE0MCAyNCAwIGMxNiAwIDQxIC0xNyA3MiAtNTAgNDAgLTQyIDYxIC01NSAxMTcgLTcyICcgK1xuXHQnbDY5IC0yMSA4MiAyMyBjNDQgMTIgOTYgMzAgMTE0IDM5IDE4IDkgMTQ4IDEzMiAyOTAgMjcyIDE0MSAxNDEgMjY3IDI2MSAyNzkgJyArXG5cdCcyNjggNTEgMjYgODYgMTQgMTc2IC02MSAzMiAtMjYgNjIgLTQ4IDY2IC00OCA1IDAgMzYgLTI1IDcwIC01NSAzNCAtMzAgNzQgJyArXG5cdCctNjEgODkgLTY5IDE1IC04IDM3IC0yOCA1MCAtNDUgMTIgLTE3IDUwIC00NSA4NCAtNjIgMzQgLTE3IDc4IC00NCA5OCAtNjAgMTkgJyArXG5cdCctMTYgNjEgLTM3IDkzIC00OCAzMiAtMTEgODEgLTM3IDEwNyAtNTYgMjcgLTIwIDc2IC00NSAxMDkgLTU2IDMzIC0xMiA3NSAtMzEgJyArXG5cdCc5MyAtNDQgNjIgLTQ1IDkzIC01OCAxOTEgLTgyIDU0IC0xMiAxMzAgLTM3IDE2OCAtNTQgNjggLTI5IDE4MCAtNTggMjI2IC01OSAnICtcblx0JzYyIDAgMTgzIC02NCAxODMgLTk2IDAgLTEyIDg4IC0xNCA2MzkgLTE0IGw2MzkgMCAxMiAzMCBjMTggNDQgNzYgNjYgMjMzIDg5ICcgK1xuXHQnODkgMTQgMTYwIDMwIDIwMCA0NyAzNCAxNSAxMDYgNDIgMTU5IDYwIDU0IDE4IDExMiA0NCAxMzAgNTcgNDcgMzUgODUgNTIgMTQ2ICcgK1xuXHQnNjcgMjkgNyA3NiAyOCAxMDUgNDggMjkgMjAgNzcgNDggMTA3IDYzIDMwIDE1IDY2IDM5IDgwIDU0IDE0IDE1IDUwIDQwIDgxIDU2ICcgK1xuXHQnMzEgMTUgNzggNDYgMTA0IDY5IDI2IDIyIDYxIDQ2IDc5IDU0IDE3IDcgNDMgMjYgNTYgNDIgMTQgMTYgNDEgNDEgNjAgNTYgNjQgJyArXG5cdCc0OCAzODAgMzYyIDQwOCA0MDUgMTUgMjMgNDAgNTEgNTUgNjMgMTUgMTIgMzYgMzggNDYgNTggMTEgMjEgMzcgNTcgNTggODIgMjIgJyArXG5cdCcyNSA0OSA2MiA2MiA4MyAxMyAyMCAzOCA1NiA1NyA3OCAxOSAyMyA1MCA3NCA2OSAxMTMgMTkgMzkgNDYgODYgNTkgMTA0IDE0ICcgK1xuXHQnMTggMzQgNjIgNDYgOTggMTIgMzYgMzIgNzcgNDUgOTIgMzEgMzggNjAgOTcgODAgMTY3IDkgMzMgMjYgNzYgMzcgOTUgMjkgNTAgJyArXG5cdCc0NyAxMDMgNjggMjA2IDEwIDUyIDMyIDExNyA1MSAxNTUgMjkgNTYgMzMgNzQgMzQgMTQwIDAgOTQgLTEwIDEwOCAtMTAxIDEzOCAnICtcblx0Jy02MSAyMCAtODMgMjEgLTQ2MyAyMSAtMjI2IDAgLTQyMSAtNCAtNDUxIC0xMCAtNjMgLTEyIC04NiAtMzAgLTExMCAtODUgLTEwICcgK1xuXHQnLTIyIC0zMyAtNjMgLTUyIC05MiAtMjEgLTMxIC00MiAtODAgLTUzIC0xMjMgLTExIC00NCAtMzIgLTkzIC01NiAtMTI4IC0yMCAnICtcblx0Jy0zMiAtNDcgLTgzIC01OSAtMTE1IC0xMiAtMzIgLTM3IC03NyAtNTYgLTEwMCAtMTkgLTIzIC01MCAtNjUgLTY5IC05NCAtMTkgJyArXG5cdCctMjkgLTQ0IC01NyAtNTQgLTYzIC0xMSAtNSAtMjkgLTI3IC00MiAtNDcgLTUyIC04NSAtMjM0IC0yNzcgLTMwMCAtMzE1IC0yNSAnICtcblx0Jy0xNSAtNTMgLTM4IC02MiAtNTEgLTkgLTE0IC00MiAtMzkgLTc0IC01NyAtMzIgLTE4IC03NSAtNDggLTk1IC02NiAtMjEgLTE4ICcgK1xuXHQnLTU5IC00NCAtODUgLTU4IC0yNiAtMTMgLTcyIC00MCAtMTAwIC01OSAtMzUgLTI0IC03OCAtNDEgLTEyOCAtNTIgLTQ3IC0xMSAnICtcblx0Jy05OSAtMzEgLTEzOSAtNTYgLTY5IC00MiAtOTQgLTQ5IC0zOTEgLTExMCAtMjQ1IC01MSAtNDI1IC02NiAtNTk1IC01MCAtMTY4ICcgK1xuXHQnMTYgLTIzMCAyNyAtMzMwIDYxIC00NyAxNiAtMTIzIDM1IC0xNzAgNDQgLTk4IDE3IC0xMjMgMjUgLTE3MiA1OCAtMjAgMTQgLTcxICcgK1xuXHQnMzcgLTExNCA1MyAtNDQgMTUgLTk1IDQwIC0xMTUgNTYgLTIwIDE2IC03MCA0MiAtMTEwIDU5IC00MCAxNiAtODggNDUgLTEwOCAnICtcblx0JzYzIC0yMCAxOSAtNTUgNDYgLTc4IDYxIC0yNCAxNCAtNDkgMzUgLTU1IDQ3IC03IDExIC0zNCAzMyAtNjAgNDkgLTUwIDMxIC02NSAnICtcblx0JzYxIC01MyAxMDIgNCAxMyAxMzAgMTQ3IDI4MSAyOTggMjM2IDIzOCAyNzcgMjgzIDI5OSAzMzUgMTUgMzIgMzUgNzEgNDYgODYgJyArXG5cdCcxMiAxOCAxOSA0NCAxOSA3NiAwIDQyIC04IDYzIC01MyAxMzggLTkyIDE1MSAxMSAxMzkgLTEyMDcgMTQxIC03OTggMiAtMTAzMCAnICtcblx0JzAgLTEwODYgLTExelwiPjwvcGF0aD5cXG4nICtcblx0JzwvZz5cXG4nICtcblx0Jzwvc3ZnPlxcbic7XG52YXIgcGxheUltYWdlID0gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjUgMjVcIiBjbGFzcz1cImFiY2pzLXBsYXktc3ZnXCI+XFxuJyArXG5cdCcgICAgPGc+XFxuJyArXG5cdCcgICAgPHBvbHlnb24gcG9pbnRzPVwiNCAwIDIzIDEyLjUgNCAyNVwiLz5cXG4nICtcblx0JyAgICA8L2c+XFxuJyArXG5cdCc8L3N2Zz4nO1xudmFyIHBhdXNlSW1hZ2UgPSAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNSAyNVwiIGNsYXNzPVwiYWJjanMtcGF1c2Utc3ZnXCI+XFxuJyArXG5cdCcgIDxnPlxcbicgK1xuXHQnICAgIDxyZWN0IHdpZHRoPVwiOC4yM1wiIGhlaWdodD1cIjI1XCIvPlxcbicgK1xuXHQnICAgIDxyZWN0IHdpZHRoPVwiOC4yM1wiIGhlaWdodD1cIjI1XCIgeD1cIjE3XCIvPlxcbicgK1xuXHQnICA8L2c+XFxuJyArXG5cdCc8L3N2Zz4nO1xudmFyIGxvYWRpbmdJbWFnZSA9ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDEwMCAxMDBcIiBjbGFzcz1cImFiY2pzLWxvYWRpbmctc3ZnXCI+XFxuJyArXG5cdCcgICAgPGNpcmNsZSBjeD1cIjUwXCIgY3k9XCI1MFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMjBcIiByPVwiMzVcIiBzdHJva2UtZGFzaGFycmF5PVwiMTYwIDU1XCI+PC9jaXJjbGU+XFxuJyArXG5cdCc8L3N2Zz4nO1xudmFyIHJlc2V0SW1hZ2UgPSAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNSAyNVwiPlxcbicgK1xuXHQnICA8Zz5cXG4nICtcblx0JyAgICA8cG9seWdvbiBwb2ludHM9XCI1IDEyLjUgMjQgMCAyNCAyNVwiLz5cXG4nICtcblx0JyAgICA8cmVjdCB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIyNVwiIHg9XCIwXCIgeT1cIjBcIi8+XFxuJyArXG5cdCcgIDwvZz5cXG4nICtcblx0Jzwvc3ZnPic7XG5cbmZ1bmN0aW9uIENyZWF0ZVN5bnRoQ29udHJvbChwYXJlbnQsIG9wdGlvbnMpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHQvLyBwYXJlbnQgaXMgZWl0aGVyIGFuIGVsZW1lbnQgb3IgYSBzZWxlY3Rvci5cblx0aWYgKHR5cGVvZiBwYXJlbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YXIgc2VsZWN0b3IgPSBwYXJlbnQ7XG5cdFx0cGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cdFx0aWYgKCFwYXJlbnQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBlbGVtZW50IFxcXCJcIiArIHNlbGVjdG9yICsgXCJcXFwiIGluIHRoZSBET00uXCIpO1xuXHR9IGVsc2UgaWYgKCEocGFyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKVxuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBmaXJzdCBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbGlkIGVsZW1lbnQgb3Igc2VsZWN0b3IgaW4gdGhlIERPTS5cIik7XG5cblx0c2VsZi5wYXJlbnQgPSBwYXJlbnQ7XG5cdHNlbGYub3B0aW9ucyA9IHt9O1xuXHRpZiAob3B0aW9ucylcblx0XHRzZWxmLm9wdGlvbnMgPSBwYXJzZUNvbW1vbi5jbG9uZShvcHRpb25zKTtcblxuXHQvLyBUaGlzIGNhbiBiZSBjYWxsZWQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gQUMgYWxyZWFkeSByZWdpc3RlcmVkIGFuZCBub3Qgc3VzcGVuZGVkXG5cdC8vIEFDIGFscmVhZHkgcmVnaXN0ZXJlZCBhbmQgc3VzcGVuZGVkXG5cdC8vIEFDIG5vdCByZWdpc3RlcmVkIGFuZCBub3QgcGFzc2VkIGluXG5cdC8vIEFDIG5vdCByZWdpc3RlcmVkIGJ1dCBwYXNzZWQgaW4gKGJ1dCBzdXNwZW5kZWQpXG5cdC8vIEFDIG5vdCByZWdpc3RlcmVkIGJ1dCBwYXNzZWQgaW4gKG5vdCBzdXNwZW5kZWQpXG5cdC8vIElmIHRoZSBBQyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIHRoZW4ganVzdCB1c2UgaXQgLSBpZ25vcmUgd2hhdCBpcyBwYXNzZWQgaW5cblx0Ly8gQ3JlYXRlIHRoZSBBQyBpZiBuZWNlc3NhcnkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuXG5cdC8vIFdlIGRvbid0IGNhcmUgcmlnaHQgbm93IGlmIHRoZSBBQyBpcyBzdXNwZW5kZWQgLSB3aGVuZXZlciBhIGJ1dHRvbiBpcyBjbGlja2VkIHRoZW4gd2UgY2hlY2sgaXQuXG5cdGlmIChzZWxmLm9wdGlvbnMuYWMpXG5cdFx0cmVnaXN0ZXJBdWRpb0NvbnRleHQoc2VsZi5vcHRpb25zLmFjKTtcblx0YnVpbGREb20oc2VsZi5wYXJlbnQsIHNlbGYub3B0aW9ucyk7XG5cdGF0dGFjaExpc3RlbmVycyhzZWxmKTtcblxuXHRzZWxmLnNldFRlbXBvID0gZnVuY3Rpb24odGVtcG8pIHtcblx0XHR2YXIgZWwgPSBzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktY3VycmVudC10ZW1wb1wiKTtcblx0XHRpZiAoZWwpXG5cdFx0XHRlbC5pbm5lckhUTUwgPSB0ZW1wbztcblx0fTtcblx0c2VsZi5yZXNldEFsbCA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBwdXNoZWRCdXR0b25zID0gc2VsZi5wYXJlbnQucXVlcnlTZWxlY3RvckFsbChcIi5hYmNqcy1wdXNoZWRcIik7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwdXNoZWRCdXR0b25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYnV0dG9uID0gcHVzaGVkQnV0dG9uc1tpXTtcblx0XHRcdGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwiYWJjanMtcHVzaGVkXCIpO1xuXHRcdH1cblx0fTtcblx0c2VsZi5wdXNoUGxheSA9IGZ1bmN0aW9uKHB1c2gpIHtcblx0XHR2YXIgc3RhcnRCdXR0b24gPSBzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktc3RhcnRcIik7XG5cdFx0aWYgKCFzdGFydEJ1dHRvbilcblx0XHRcdHJldHVybjtcblx0XHRpZiAocHVzaClcblx0XHRcdHN0YXJ0QnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJhYmNqcy1wdXNoZWRcIik7XG5cdFx0ZWxzZVxuXHRcdFx0c3RhcnRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcImFiY2pzLXB1c2hlZFwiKTtcblx0fTtcblx0c2VsZi5wdXNoTG9vcCA9IGZ1bmN0aW9uKHB1c2gpIHtcblx0XHR2YXIgbG9vcEJ1dHRvbiA9IHNlbGYucGFyZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYWJjanMtbWlkaS1sb29wXCIpO1xuXHRcdGlmICghbG9vcEJ1dHRvbilcblx0XHRcdHJldHVybjtcblx0XHRpZiAocHVzaClcblx0XHRcdGxvb3BCdXR0b24uY2xhc3NMaXN0LmFkZChcImFiY2pzLXB1c2hlZFwiKTtcblx0XHRlbHNlXG5cdFx0XHRsb29wQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJhYmNqcy1wdXNoZWRcIik7XG5cdH07XG5cblx0c2VsZi5zZXRQcm9ncmVzcyA9IGZ1bmN0aW9uIChwZXJjZW50LCB0b3RhbFRpbWUpIHtcblx0XHR2YXIgcHJvZ3Jlc3NCYWNrZ3JvdW5kID0gc2VsZi5wYXJlbnQucXVlcnlTZWxlY3RvcihcIi5hYmNqcy1taWRpLXByb2dyZXNzLWJhY2tncm91bmRcIik7XG5cdFx0dmFyIHByb2dyZXNzVGh1bWIgPSBzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktcHJvZ3Jlc3MtaW5kaWNhdG9yXCIpO1xuXHRcdGlmICghcHJvZ3Jlc3NCYWNrZ3JvdW5kIHx8ICFwcm9ncmVzc1RodW1iKVxuXHRcdFx0cmV0dXJuO1xuXHRcdHZhciB3aWR0aCA9IHByb2dyZXNzQmFja2dyb3VuZC5jbGllbnRXaWR0aDtcblx0XHR2YXIgbGVmdCA9IHdpZHRoICogcGVyY2VudDtcblx0XHRwcm9ncmVzc1RodW1iLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuXG5cdFx0dmFyIGNsb2NrID0gc2VsZi5wYXJlbnQucXVlcnlTZWxlY3RvcihcIi5hYmNqcy1taWRpLWNsb2NrXCIpO1xuXHRcdGlmIChjbG9jaykge1xuXHRcdFx0dmFyIHRvdGFsU2Vjb25kcyA9ICh0b3RhbFRpbWUgKiBwZXJjZW50KSAvIDEwMDA7XG5cdFx0XHR2YXIgbWludXRlcyA9IE1hdGguZmxvb3IodG90YWxTZWNvbmRzIC8gNjApO1xuXHRcdFx0dmFyIHNlY29uZHMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAlIDYwKTtcblx0XHRcdHZhciBzZWNvbmRzRm9ybWF0dGVkID0gc2Vjb25kcyA8IDEwID8gXCIwXCIgKyBzZWNvbmRzIDogc2Vjb25kcztcblx0XHRcdGNsb2NrLmlubmVySFRNTCA9IG1pbnV0ZXMgKyBcIjpcIiArIHNlY29uZHNGb3JtYXR0ZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmIChzZWxmLm9wdGlvbnMuYWZ0ZXJSZXN1bWUpIHtcblx0XHR2YXIgaXNSZXN1bWVkID0gZmFsc2U7XG5cdFx0aWYgKHNlbGYub3B0aW9ucy5hYykge1xuXHRcdFx0aXNSZXN1bWVkID0gc2VsZi5vcHRpb25zLmFjLnN0YXRlICE9PSBcInN1c3BlbmRlZFwiO1xuXHRcdH0gZWxzZSBpZiAoYWN0aXZlQXVkaW9Db250ZXh0KCkpIHtcblx0XHRcdGlzUmVzdW1lZCA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpLnN0YXRlICE9PSBcInN1c3BlbmRlZFwiO1xuXHRcdH1cblx0XHRpZiAoaXNSZXN1bWVkKVxuXHRcdFx0c2VsZi5vcHRpb25zLmFmdGVyUmVzdW1lKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGREb20ocGFyZW50LCBvcHRpb25zKSB7XG5cdHZhciBoYXNMb29wID0gISFvcHRpb25zLmxvb3BIYW5kbGVyO1xuXHR2YXIgaGFzUmVzdGFydCA9ICEhb3B0aW9ucy5yZXN0YXJ0SGFuZGxlcjtcblx0dmFyIGhhc1BsYXkgPSAhIW9wdGlvbnMucGxheUhhbmRsZXIgfHwgISFvcHRpb25zLnBsYXlQcm9taXNlSGFuZGxlcjtcblx0dmFyIGhhc1Byb2dyZXNzID0gISFvcHRpb25zLnByb2dyZXNzSGFuZGxlcjtcblx0dmFyIGhhc1dhcnAgPSAhIW9wdGlvbnMud2FycEhhbmRsZXI7XG5cdHZhciBoYXNDbG9jayA9IG9wdGlvbnMuaGFzQ2xvY2sgIT09IGZhbHNlO1xuXG5cdHZhciBodG1sID0gJzxkaXYgY2xhc3M9XCJhYmNqcy1pbmxpbmUtYXVkaW9cIj5cXG4nO1xuXHRpZiAoaGFzTG9vcCkge1xuXHRcdHZhciByZXBlYXRUaXRsZSA9IG9wdGlvbnMucmVwZWF0VGl0bGUgPyBvcHRpb25zLnJlcGVhdFRpdGxlIDogXCJDbGljayB0byB0b2dnbGUgcGxheSBvbmNlL3JlcGVhdC5cIjtcblx0XHR2YXIgcmVwZWF0QXJpYSA9IG9wdGlvbnMucmVwZWF0QXJpYSA/IG9wdGlvbnMucmVwZWF0QXJpYSA6IHJlcGVhdFRpdGxlO1xuXHRcdGh0bWwgKz0gJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYWJjanMtbWlkaS1sb29wIGFiY2pzLWJ0blwiIHRpdGxlPVwiJyArIHJlcGVhdFRpdGxlICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgcmVwZWF0QXJpYSArICdcIj4nICsgbG9vcEltYWdlICsgJzwvYnV0dG9uPlxcbic7XG5cdH1cblx0aWYgKGhhc1Jlc3RhcnQpIHtcblx0XHR2YXIgcmVzdGFydFRpdGxlID0gb3B0aW9ucy5yZXN0YXJ0VGl0bGUgPyBvcHRpb25zLnJlc3RhcnRUaXRsZSA6IFwiQ2xpY2sgdG8gZ28gdG8gYmVnaW5uaW5nLlwiO1xuXHRcdHZhciByZXN0YXJ0QXJpYSA9IG9wdGlvbnMucmVzdGFydEFyaWEgPyBvcHRpb25zLnJlc3RhcnRBcmlhIDogcmVzdGFydFRpdGxlO1xuXHRcdGh0bWwgKz0gJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYWJjanMtbWlkaS1yZXNldCBhYmNqcy1idG5cIiB0aXRsZT1cIicgKyByZXN0YXJ0VGl0bGUgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyByZXN0YXJ0QXJpYSArICdcIj4nICsgcmVzZXRJbWFnZSArICc8L2J1dHRvbj5cXG4nO1xuXHR9XG5cdGlmIChoYXNQbGF5KSB7XG5cdFx0dmFyIHBsYXlUaXRsZSA9IG9wdGlvbnMucGxheVRpdGxlID8gb3B0aW9ucy5wbGF5VGl0bGUgOiBcIkNsaWNrIHRvIHBsYXkvcGF1c2UuXCI7XG5cdFx0dmFyIHBsYXlBcmlhID0gb3B0aW9ucy5wbGF5QXJpYSA/IG9wdGlvbnMucGxheUFyaWEgOiBwbGF5VGl0bGU7XG5cdFx0aHRtbCArPSAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhYmNqcy1taWRpLXN0YXJ0IGFiY2pzLWJ0blwiIHRpdGxlPVwiJyArIHBsYXlUaXRsZSArICdcIiBhcmlhLWxhYmVsPVwiJyArIHBsYXlBcmlhICsgJ1wiPicgKyBwbGF5SW1hZ2UgKyBwYXVzZUltYWdlICsgbG9hZGluZ0ltYWdlICsgJzwvYnV0dG9uPlxcbic7XG5cdH1cblx0aWYgKGhhc1Byb2dyZXNzKSB7XG5cdFx0dmFyIHJhbmRvbVRpdGxlID0gb3B0aW9ucy5yYW5kb21UaXRsZSA/IG9wdGlvbnMucmFuZG9tVGl0bGUgOiBcIkNsaWNrIHRvIGNoYW5nZSB0aGUgcGxheWJhY2sgcG9zaXRpb24uXCI7XG5cdFx0dmFyIHJhbmRvbUFyaWEgPSBvcHRpb25zLnJhbmRvbUFyaWEgPyBvcHRpb25zLnJhbmRvbUFyaWEgOiByYW5kb21UaXRsZTtcblx0XHRodG1sICs9ICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFiY2pzLW1pZGktcHJvZ3Jlc3MtYmFja2dyb3VuZFwiIHRpdGxlPVwiJyArIHJhbmRvbVRpdGxlICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgcmFuZG9tQXJpYSArICdcIj48c3BhbiBjbGFzcz1cImFiY2pzLW1pZGktcHJvZ3Jlc3MtaW5kaWNhdG9yXCI+PC9zcGFuPjwvYnV0dG9uPlxcbic7XG5cdH1cblx0aWYgKGhhc0Nsb2NrKSB7XG5cdFx0aHRtbCArPSAnPHNwYW4gY2xhc3M9XCJhYmNqcy1taWRpLWNsb2NrXCI+PC9zcGFuPlxcbic7XG5cdH1cblx0aWYgKGhhc1dhcnApIHtcblx0XHR2YXIgd2FycFRpdGxlID0gb3B0aW9ucy53YXJwVGl0bGUgPyBvcHRpb25zLndhcnBUaXRsZSA6IFwiQ2hhbmdlIHRoZSBwbGF5YmFjayBzcGVlZC5cIjtcblx0XHR2YXIgd2FycEFyaWEgPSBvcHRpb25zLndhcnBBcmlhID8gb3B0aW9ucy53YXJwQXJpYSA6IHdhcnBUaXRsZTtcblx0XHR2YXIgYnBtID0gb3B0aW9ucy5icG0gPyBvcHRpb25zLmJwbSA6IFwiQlBNXCI7XG5cdFx0aHRtbCArPSAnPHNwYW4gY2xhc3M9XCJhYmNqcy10ZW1wby13cmFwcGVyXCI+PGxhYmVsPjxpbnB1dCBjbGFzcz1cImFiY2pzLW1pZGktdGVtcG9cIiB0eXBlPVwibnVtYmVyXCIgbWluPVwiMVwiIG1heD1cIjMwMFwiIHZhbHVlPVwiMTAwXCIgdGl0bGU9XCInICsgd2FycFRpdGxlICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgd2FycEFyaWEgKyAnXCI+JTwvbGFiZWw+PHNwYW4+Jm5ic3A7KDxzcGFuIGNsYXNzPVwiYWJjanMtbWlkaS1jdXJyZW50LXRlbXBvXCI+PC9zcGFuPiAnICsgYnBtICsgJyk8L3NwYW4+PC9zcGFuPlxcbic7XG5cdH1cblx0aHRtbCArPSAnPC9kaXY+XFxuJztcblx0cGFyZW50LmlubmVySFRNTCA9IGh0bWw7XG59XG5cbmZ1bmN0aW9uIGFjUmVzdW1lck1pZGRsZVdhcmUobmV4dCwgZXYsIHBsYXlCdG4sIGFmdGVyUmVzdW1lLCBpc1Byb21pc2UpIHtcblx0dmFyIG5lZWRzSW5pdCA9IHRydWU7XG5cdGlmICghYWN0aXZlQXVkaW9Db250ZXh0KCkpIHtcblx0XHRyZWdpc3RlckF1ZGlvQ29udGV4dCgpO1xuXHR9IGVsc2Uge1xuXHRcdG5lZWRzSW5pdCA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpLnN0YXRlID09PSBcInN1c3BlbmRlZFwiO1xuXHR9XG5cdGlmICghc3VwcG9ydHNBdWRpbygpKSB7XG5cdFx0dGhyb3cgeyBzdGF0dXM6IFwiTm90U3VwcG9ydGVkXCIsIG1lc3NhZ2U6IFwiVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgYXVkaW8uXCJ9O1xuXHR9XG5cblx0aWYgKChuZWVkc0luaXQgfHwgaXNQcm9taXNlKSAmJiBwbGF5QnRuKVxuXHRcdHBsYXlCdG4uY2xhc3NMaXN0LmFkZChcImFiY2pzLWxvYWRpbmdcIik7XG5cblx0aWYgKG5lZWRzSW5pdCkge1xuXHRcdGFjdGl2ZUF1ZGlvQ29udGV4dCgpLnJlc3VtZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGFmdGVyUmVzdW1lKSB7XG5cdFx0XHRcdGFmdGVyUmVzdW1lKCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcblx0XHRcdFx0XHRkb05leHQobmV4dCwgZXYsIHBsYXlCdG4sIGlzUHJvbWlzZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9OZXh0KG5leHQsIGV2LCBwbGF5QnRuLCBpc1Byb21pc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGRvTmV4dChuZXh0LCBldiwgcGxheUJ0biwgaXNQcm9taXNlKTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb05leHQobmV4dCwgZXYsIHBsYXlCdG4sIGlzUHJvbWlzZSkge1xuXHRpZiAoaXNQcm9taXNlKSB7XG5cdFx0bmV4dChldikudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdGlmIChwbGF5QnRuKVxuXHRcdFx0XHRwbGF5QnRuLmNsYXNzTGlzdC5yZW1vdmUoXCJhYmNqcy1sb2FkaW5nXCIpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG5leHQoZXYpO1xuXHRcdGlmIChwbGF5QnRuKVxuXHRcdFx0cGxheUJ0bi5jbGFzc0xpc3QucmVtb3ZlKFwiYWJjanMtbG9hZGluZ1wiKTtcblx0fVxufVxuXG5mdW5jdGlvbiBhdHRhY2hMaXN0ZW5lcnMoc2VsZikge1xuXHR2YXIgaGFzTG9vcCA9ICEhc2VsZi5vcHRpb25zLmxvb3BIYW5kbGVyO1xuXHR2YXIgaGFzUmVzdGFydCA9ICEhc2VsZi5vcHRpb25zLnJlc3RhcnRIYW5kbGVyO1xuXHR2YXIgaGFzUGxheSA9ICEhc2VsZi5vcHRpb25zLnBsYXlIYW5kbGVyIHx8ICEhc2VsZi5vcHRpb25zLnBsYXlQcm9taXNlSGFuZGxlcjtcblx0dmFyIGhhc1Byb2dyZXNzID0gISFzZWxmLm9wdGlvbnMucHJvZ3Jlc3NIYW5kbGVyO1xuXHR2YXIgaGFzV2FycCA9ICEhc2VsZi5vcHRpb25zLndhcnBIYW5kbGVyO1xuXHR2YXIgcGxheUJ0biA9IHNlbGYucGFyZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYWJjanMtbWlkaS1zdGFydFwiKTtcblxuXHRpZiAoaGFzTG9vcClcblx0XHRzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktbG9vcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZXYpe2FjUmVzdW1lck1pZGRsZVdhcmUoc2VsZi5vcHRpb25zLmxvb3BIYW5kbGVyLCBldiwgcGxheUJ0biwgc2VsZi5vcHRpb25zLmFmdGVyUmVzdW1lKX0pO1xuXHRpZiAoaGFzUmVzdGFydClcblx0XHRzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktcmVzZXRcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGV2KXthY1Jlc3VtZXJNaWRkbGVXYXJlKHNlbGYub3B0aW9ucy5yZXN0YXJ0SGFuZGxlciwgZXYsIHBsYXlCdG4sIHNlbGYub3B0aW9ucy5hZnRlclJlc3VtZSl9KTtcblx0aWYgKGhhc1BsYXkpXG5cdFx0cGxheUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZXYpe1xuXHRcdFx0YWNSZXN1bWVyTWlkZGxlV2FyZShcblx0XHRcdFx0c2VsZi5vcHRpb25zLnBsYXlQcm9taXNlSGFuZGxlciB8fCBzZWxmLm9wdGlvbnMucGxheUhhbmRsZXIsXG5cdFx0XHRcdGV2LFxuXHRcdFx0XHRwbGF5QnRuLFxuXHRcdFx0XHRzZWxmLm9wdGlvbnMuYWZ0ZXJSZXN1bWUsXG5cdFx0XHRcdCEhc2VsZi5vcHRpb25zLnBsYXlQcm9taXNlSGFuZGxlcilcblx0XHR9KTtcblx0aWYgKGhhc1Byb2dyZXNzKVxuXHRcdHNlbGYucGFyZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYWJjanMtbWlkaS1wcm9ncmVzcy1iYWNrZ3JvdW5kXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihldil7YWNSZXN1bWVyTWlkZGxlV2FyZShzZWxmLm9wdGlvbnMucHJvZ3Jlc3NIYW5kbGVyLCBldiwgcGxheUJ0biwgc2VsZi5vcHRpb25zLmFmdGVyUmVzdW1lKX0pO1xuXHRpZiAoaGFzV2FycClcblx0XHRzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktdGVtcG9cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihldil7YWNSZXN1bWVyTWlkZGxlV2FyZShzZWxmLm9wdGlvbnMud2FycEhhbmRsZXIsIGV2LCBwbGF5QnRuLCBzZWxmLm9wdGlvbnMuYWZ0ZXJSZXN1bWUpfSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZVN5bnRoQ29udHJvbDtcbiIsInZhciBTeW50aFNlcXVlbmNlID0gcmVxdWlyZSgnLi9zeW50aC1zZXF1ZW5jZScpO1xudmFyIENyZWF0ZVN5bnRoID0gcmVxdWlyZSgnLi9jcmVhdGUtc3ludGgnKTtcblxuZnVuY3Rpb24gcGxheUV2ZW50KG1pZGlQaXRjaGVzLCBtaWRpR3JhY2VQaXRjaGVzLCBtaWxsaXNlY29uZHNQZXJNZWFzdXJlKSB7XG5cdHZhciBzZXF1ZW5jZSA9IG5ldyBTeW50aFNlcXVlbmNlKCk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtaWRpUGl0Y2hlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBub3RlID0gbWlkaVBpdGNoZXNbaV07XG5cdFx0dmFyIHRyYWNrTnVtID0gc2VxdWVuY2UuYWRkVHJhY2soKTtcblx0XHRzZXF1ZW5jZS5zZXRJbnN0cnVtZW50KHRyYWNrTnVtLCBub3RlLmluc3RydW1lbnQpO1xuXHRcdGlmIChpID09PSAwICYmIG1pZGlHcmFjZVBpdGNoZXMpIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgbWlkaUdyYWNlUGl0Y2hlcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHR2YXIgZ3JhY2UgPSBtaWRpR3JhY2VQaXRjaGVzW2pdO1xuXHRcdFx0XHRzZXF1ZW5jZS5hcHBlbmROb3RlKHRyYWNrTnVtLCBncmFjZS5waXRjaCwgMSAvIDY0LCBncmFjZS52b2x1bWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRzZXF1ZW5jZS5hcHBlbmROb3RlKHRyYWNrTnVtLCBub3RlLnBpdGNoLCBub3RlLmR1cmF0aW9uSW5NZWFzdXJlcywgbm90ZS52b2x1bWUpO1xuXHR9XG5cblx0dmFyIGJ1ZmZlciA9IG5ldyBDcmVhdGVTeW50aCgpO1xuXHRyZXR1cm4gYnVmZmVyLmluaXQoe1xuXHRcdHNlcXVlbmNlOiBzZXF1ZW5jZSxcblx0XHRtaWxsaXNlY29uZHNQZXJNZWFzdXJlOiBtaWxsaXNlY29uZHNQZXJNZWFzdXJlXG5cdH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBidWZmZXIucHJpbWUoKTtcblx0fSkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGJ1ZmZlci5zdGFydCgpO1xuXHR9KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gcGxheUV2ZW50O1xuIiwidmFyIENyZWF0ZVN5bnRoQ29udHJvbCA9IHJlcXVpcmUoJy4vY3JlYXRlLXN5bnRoLWNvbnRyb2wnKTtcbnZhciBDcmVhdGVTeW50aCA9IHJlcXVpcmUoJy4vY3JlYXRlLXN5bnRoJyk7XG52YXIgVGltaW5nQ2FsbGJhY2tzID0gcmVxdWlyZSgnLi4vYXBpL2FiY190aW1pbmdfY2FsbGJhY2tzJyk7XG5cbmZ1bmN0aW9uIFN5bnRoQ29udHJvbGxlcigpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRzZWxmLndhcnAgPSAxMDA7XG5cdHNlbGYuY3Vyc29yQ29udHJvbCA9IG51bGw7XG5cdHNlbGYudmlzdWFsT2JqID0gbnVsbDtcblx0c2VsZi50aW1lciA9IG51bGw7XG5cdHNlbGYubWlkaUJ1ZmZlciA9IG51bGw7XG5cdHNlbGYub3B0aW9ucyA9IG51bGw7XG5cdHNlbGYuY3VycmVudFRlbXBvID0gbnVsbDtcblx0c2VsZi5jb250cm9sID0gbnVsbDtcblx0c2VsZi5pc0xvb3BpbmcgPSBmYWxzZTtcblx0c2VsZi5pc1N0YXJ0ZWQgPSBmYWxzZTtcblx0c2VsZi5pc0xvYWRlZCA9IGZhbHNlO1xuXG5cdHNlbGYubG9hZCA9IGZ1bmN0aW9uIChzZWxlY3RvciwgY3Vyc29yQ29udHJvbCwgdmlzdWFsT3B0aW9ucykge1xuXHRcdGlmICghdmlzdWFsT3B0aW9ucylcblx0XHRcdHZpc3VhbE9wdGlvbnMgPSB7fTtcblx0XHRzZWxmLmNvbnRyb2wgPSBuZXcgQ3JlYXRlU3ludGhDb250cm9sKHNlbGVjdG9yLCB7XG5cdFx0XHRsb29wSGFuZGxlcjogdmlzdWFsT3B0aW9ucy5kaXNwbGF5TG9vcCA/IHNlbGYudG9nZ2xlTG9vcCA6IHVuZGVmaW5lZCxcblx0XHRcdHJlc3RhcnRIYW5kbGVyOiB2aXN1YWxPcHRpb25zLmRpc3BsYXlSZXN0YXJ0ID8gc2VsZi5yZXN0YXJ0IDogdW5kZWZpbmVkLFxuXHRcdFx0cGxheVByb21pc2VIYW5kbGVyOiB2aXN1YWxPcHRpb25zLmRpc3BsYXlQbGF5ID8gc2VsZi5wbGF5IDogdW5kZWZpbmVkLFxuXHRcdFx0cHJvZ3Jlc3NIYW5kbGVyOiB2aXN1YWxPcHRpb25zLmRpc3BsYXlQcm9ncmVzcyA/IHNlbGYucmFuZG9tQWNjZXNzIDogdW5kZWZpbmVkLFxuXHRcdFx0d2FycEhhbmRsZXI6IHZpc3VhbE9wdGlvbnMuZGlzcGxheVdhcnAgPyBzZWxmLm9uV2FycCA6IHVuZGVmaW5lZCxcblx0XHRcdGFmdGVyUmVzdW1lOiBzZWxmLmluaXRcblx0XHR9KTtcblx0XHRzZWxmLmN1cnNvckNvbnRyb2wgPSBjdXJzb3JDb250cm9sO1xuXHR9O1xuXG5cdHNlbGYuc2V0VHVuZSA9IGZ1bmN0aW9uKHZpc3VhbE9iaiwgdXNlckFjdGlvbiwgYXVkaW9QYXJhbXMpIHtcblx0XHRzZWxmLmlzTG9hZGVkID0gZmFsc2U7XG5cdFx0c2VsZi52aXN1YWxPYmogPSB2aXN1YWxPYmo7XG5cdFx0c2VsZi5vcHRpb25zID0gYXVkaW9QYXJhbXM7XG5cblx0XHRpZiAoc2VsZi5jb250cm9sKSB7XG5cdFx0XHRzZWxmLnBhdXNlKCk7XG5cdFx0XHRzZWxmLnNldFByb2dyZXNzKDAsIDEpO1xuXHRcdFx0c2VsZi5jb250cm9sLnJlc2V0QWxsKCk7XG5cdFx0XHRzZWxmLnJlc3RhcnQoKTtcblx0XHRcdHNlbGYuaXNTdGFydGVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdHNlbGYuaXNMb29waW5nID0gZmFsc2U7XG5cblx0XHRpZiAodXNlckFjdGlvbilcblx0XHRcdHJldHVybiBzZWxmLmdvKCk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtzdGF0dXM6IFwibm8tYXVkaW8tY29udGV4dFwifSk7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGYuZ28gPSBmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIG1pbGxpc2Vjb25kc1Blck1lYXN1cmUgPSBzZWxmLnZpc3VhbE9iai5taWxsaXNlY29uZHNQZXJNZWFzdXJlKCkgKiAxMDAgLyBzZWxmLndhcnA7XG5cdFx0c2VsZi5jdXJyZW50VGVtcG8gPSBNYXRoLnJvdW5kKHNlbGYudmlzdWFsT2JqLmdldEJlYXRzUGVyTWVhc3VyZSgpIC8gbWlsbGlzZWNvbmRzUGVyTWVhc3VyZSAqIDYwMDAwKTtcblx0XHRpZiAoc2VsZi5jb250cm9sKVxuXHRcdFx0c2VsZi5jb250cm9sLnNldFRlbXBvKHNlbGYuY3VycmVudFRlbXBvKTtcblx0XHRzZWxmLnBlcmNlbnQgPSAwO1xuXG5cdFx0aWYgKCFzZWxmLm1pZGlCdWZmZXIpXG5cdFx0XHRzZWxmLm1pZGlCdWZmZXIgPSBuZXcgQ3JlYXRlU3ludGgoKTtcblx0XHRyZXR1cm4gc2VsZi5taWRpQnVmZmVyLmluaXQoe1xuXHRcdFx0dmlzdWFsT2JqOiBzZWxmLnZpc3VhbE9iaixcblx0XHRcdG9wdGlvbnM6IHNlbGYub3B0aW9ucyxcblx0XHRcdG1pbGxpc2Vjb25kc1Blck1lYXN1cmU6IG1pbGxpc2Vjb25kc1Blck1lYXN1cmVcblx0XHR9KS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBzZWxmLm1pZGlCdWZmZXIucHJpbWUoKTtcblx0XHR9KS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBzdWJkaXZpc2lvbnMgPSAxNjtcblx0XHRcdGlmIChzZWxmLmN1cnNvckNvbnRyb2wgJiZcblx0XHRcdFx0c2VsZi5jdXJzb3JDb250cm9sLmJlYXRTdWJkaXZpc2lvbnMgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRwYXJzZUludChzZWxmLmN1cnNvckNvbnRyb2wuYmVhdFN1YmRpdmlzaW9ucywgMTApID49IDEgJiZcblx0XHRcdFx0cGFyc2VJbnQoc2VsZi5jdXJzb3JDb250cm9sLmJlYXRTdWJkaXZpc2lvbnMsIDEwKSA8PSA2NClcblx0XHRcdFx0c3ViZGl2aXNpb25zID0gcGFyc2VJbnQoc2VsZi5jdXJzb3JDb250cm9sLmJlYXRTdWJkaXZpc2lvbnMsIDEwKTtcblxuXHRcdFx0Ly8gTmVlZCB0byBjcmVhdGUgdGhlIFRpbWluZ0NhbGxiYWNrcyBhZnRlciBwcmltaW5nIHRoZSBtaWRpIHNvIHRoYXQgdGhlIG1pZGkgZGF0YSBpcyBhdmFpbGFibGUgZm9yIHRoZSBjYWxsYmFja3MuXG5cdFx0XHRzZWxmLnRpbWVyID0gbmV3IFRpbWluZ0NhbGxiYWNrcyhzZWxmLnZpc3VhbE9iaiwge1xuXHRcdFx0XHRiZWF0Q2FsbGJhY2s6IHNlbGYuYmVhdENhbGxiYWNrLFxuXHRcdFx0XHRldmVudENhbGxiYWNrOiBzZWxmLmV2ZW50Q2FsbGJhY2ssXG5cdFx0XHRcdGxpbmVFbmRDYWxsYmFjazogc2VsZi5saW5lRW5kQ2FsbGJhY2ssXG5cdFx0XHRcdHFwbTogc2VsZi5jdXJyZW50VGVtcG8sXG5cblx0XHRcdFx0ZXh0cmFNZWFzdXJlc0F0QmVnaW5uaW5nOiBzZWxmLmN1cnNvckNvbnRyb2wgPyBzZWxmLmN1cnNvckNvbnRyb2wuZXh0cmFNZWFzdXJlc0F0QmVnaW5uaW5nIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRsaW5lRW5kQW50aWNpcGF0aW9uOiBzZWxmLmN1cnNvckNvbnRyb2wgPyBzZWxmLmN1cnNvckNvbnRyb2wubGluZUVuZEFudGljaXBhdGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0YmVhdFN1YmRpdmlzaW9uczogc3ViZGl2aXNpb25zLFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoc2VsZi5jdXJzb3JDb250cm9sICYmIHNlbGYuY3Vyc29yQ29udHJvbC5vblJlYWR5ICYmIHR5cGVvZiBzZWxmLmN1cnNvckNvbnRyb2wub25SZWFkeSAgPT09ICdmdW5jdGlvbicpXG5cdFx0XHRcdHNlbGYuY3Vyc29yQ29udHJvbC5vblJlYWR5KHNlbGYpO1xuXHRcdFx0c2VsZi5pc0xvYWRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3RhdHVzOiBcImNyZWF0ZWRcIiB9KTtcblx0XHR9KTtcblx0fTtcblxuXHRzZWxmLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHNlbGYudGltZXIpIHtcblx0XHRcdHNlbGYudGltZXIucmVzZXQoKTtcblx0XHRcdHNlbGYudGltZXIuc3RvcCgpO1xuXHRcdFx0c2VsZi50aW1lciA9IG51bGw7XG5cdFx0fVxuXHRcdGlmIChzZWxmLm1pZGlCdWZmZXIpIHtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zdG9wKCk7XG5cdFx0XHRzZWxmLm1pZGlCdWZmZXIgPSBudWxsO1xuXHRcdH1cblx0XHRzZWxmLnNldFByb2dyZXNzKDAsIDEpO1xuXHRcdGlmIChzZWxmLmNvbnRyb2wpXG5cdFx0XHRzZWxmLmNvbnRyb2wucmVzZXRBbGwoKTtcblx0fTtcblxuXHRzZWxmLnBsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCFzZWxmLmlzTG9hZGVkKSB7XG5cdFx0XHRyZXR1cm4gc2VsZi5nbygpLnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBzZWxmLl9wbGF5KCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Vcblx0XHRcdHJldHVybiBzZWxmLl9wbGF5KCk7XG5cdH07XG5cblx0c2VsZi5fcGxheSA9IGZ1bmN0aW9uICgpIHtcblx0XHRzZWxmLmlzU3RhcnRlZCA9ICFzZWxmLmlzU3RhcnRlZDtcblx0XHRpZiAoc2VsZi5pc1N0YXJ0ZWQpIHtcblx0XHRcdGlmIChzZWxmLmN1cnNvckNvbnRyb2wgJiYgc2VsZi5jdXJzb3JDb250cm9sLm9uU3RhcnQgJiYgdHlwZW9mIHNlbGYuY3Vyc29yQ29udHJvbC5vblN0YXJ0ICA9PT0gJ2Z1bmN0aW9uJylcblx0XHRcdFx0c2VsZi5jdXJzb3JDb250cm9sLm9uU3RhcnQoKTtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zdGFydCgpO1xuXHRcdFx0c2VsZi50aW1lci5zdGFydCgpO1xuXHRcdFx0aWYgKHNlbGYuY29udHJvbClcblx0XHRcdFx0c2VsZi5jb250cm9sLnB1c2hQbGF5KHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLnBhdXNlKCk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdGF0dXM6IFwib2tcIiB9KTtcblx0fTtcblxuXHRzZWxmLnBhdXNlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHNlbGYudGltZXIpIHtcblx0XHRcdHNlbGYudGltZXIucGF1c2UoKTtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5wYXVzZSgpO1xuXHRcdFx0aWYgKHNlbGYuY29udHJvbClcblx0XHRcdFx0c2VsZi5jb250cm9sLnB1c2hQbGF5KGZhbHNlKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi50b2dnbGVMb29wID0gZnVuY3Rpb24gKCkge1xuXHRcdHNlbGYuaXNMb29waW5nID0gIXNlbGYuaXNMb29waW5nO1xuXHRcdGlmIChzZWxmLmNvbnRyb2wpXG5cdFx0XHRzZWxmLmNvbnRyb2wucHVzaExvb3Aoc2VsZi5pc0xvb3BpbmcpO1xuXHR9O1xuXG5cdHNlbGYucmVzdGFydCA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoc2VsZi50aW1lcikge1xuXHRcdFx0c2VsZi50aW1lci5zZXRQcm9ncmVzcygwKTtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zZWVrKDApO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmLnJhbmRvbUFjY2VzcyA9IGZ1bmN0aW9uIChldikge1xuXHRcdGlmICghc2VsZi5pc0xvYWRlZCkge1xuXHRcdFx0cmV0dXJuIHNlbGYuZ28oKS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gc2VsZi5fcmFuZG9tQWNjZXNzKGV2KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZVxuXHRcdFx0cmV0dXJuIHNlbGYuX3JhbmRvbUFjY2Vzcyhldik7XG5cdH07XG5cblx0c2VsZi5fcmFuZG9tQWNjZXNzID0gZnVuY3Rpb24gKGV2KSB7XG5cdFx0dmFyIGJhY2tncm91bmQgPSAoZXYudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYWJjanMtbWlkaS1wcm9ncmVzcy1pbmRpY2F0b3InKSkgPyBldi50YXJnZXQucGFyZW50Tm9kZSA6IGV2LnRhcmdldDtcblx0XHR2YXIgcGVyY2VudCA9IChldi54IC0gYmFja2dyb3VuZC5vZmZzZXRMZWZ0KSAvIGJhY2tncm91bmQub2Zmc2V0V2lkdGg7XG5cdFx0aWYgKHBlcmNlbnQgPCAwKVxuXHRcdFx0cGVyY2VudCA9IDA7XG5cdFx0aWYgKHBlcmNlbnQgPiAxMDApXG5cdFx0XHRwZXJjZW50ID0gMTAwO1xuXHRcdHNlbGYudGltZXIuc2V0UHJvZ3Jlc3MocGVyY2VudCk7XG5cdFx0c2VsZi5taWRpQnVmZmVyLnNlZWsocGVyY2VudCk7XG5cdH07XG5cblx0c2VsZi5vbldhcnAgPSBmdW5jdGlvbiAoZXYpIHtcblx0XHR2YXIgbmV3V2FycCA9IGV2LnRhcmdldC52YWx1ZTtcblx0XHRpZiAocGFyc2VJbnQobmV3V2FycCwgMTApID4gMCkge1xuXHRcdFx0c2VsZi53YXJwID0gcGFyc2VJbnQobmV3V2FycCwgMTApO1xuXHRcdFx0dmFyIHdhc1BsYXlpbmcgPSBzZWxmLmlzU3RhcnRlZDtcblx0XHRcdHZhciBzdGFydFBlcmNlbnQgPSBzZWxmLnBlcmNlbnQ7XG5cdFx0XHRzZWxmLmRlc3Ryb3koKTtcblx0XHRcdHNlbGYuaXNTdGFydGVkID0gZmFsc2U7XG5cdFx0XHRzZWxmLmdvKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYuc2V0UHJvZ3Jlc3Moc3RhcnRQZXJjZW50LCBzZWxmLm1pZGlCdWZmZXIuZHVyYXRpb24gKiAxMDAwKTtcblx0XHRcdFx0aWYgKHdhc1BsYXlpbmcpIHtcblx0XHRcdFx0XHRzZWxmLnBsYXkoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZWxmLnRpbWVyLnNldFByb2dyZXNzKHN0YXJ0UGVyY2VudCk7XG5cdFx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zZWVrKHN0YXJ0UGVyY2VudCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi5zZXRQcm9ncmVzcyA9IGZ1bmN0aW9uIChwZXJjZW50LCB0b3RhbFRpbWUpIHtcblx0XHRzZWxmLnBlcmNlbnQgPSBwZXJjZW50O1xuXHRcdGlmIChzZWxmLmNvbnRyb2wpXG5cdFx0XHRzZWxmLmNvbnRyb2wuc2V0UHJvZ3Jlc3MocGVyY2VudCwgdG90YWxUaW1lKTtcblx0fTtcblxuXHRzZWxmLmZpbmlzaGVkID0gZnVuY3Rpb24gKCkge1xuXHRcdHNlbGYudGltZXIucmVzZXQoKTtcblx0XHRpZiAoc2VsZi5pc0xvb3BpbmcpIHtcblx0XHRcdHNlbGYudGltZXIuc3RhcnQoKTtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zdGFydCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLnRpbWVyLnN0b3AoKTtcblx0XHRcdGlmIChzZWxmLmlzU3RhcnRlZCkge1xuXHRcdFx0XHRpZiAoc2VsZi5jb250cm9sKVxuXHRcdFx0XHRcdHNlbGYuY29udHJvbC5wdXNoUGxheShmYWxzZSk7XG5cdFx0XHRcdHNlbGYuaXNTdGFydGVkID0gZmFsc2U7XG5cdFx0XHRcdGlmIChzZWxmLmN1cnNvckNvbnRyb2wgJiYgc2VsZi5jdXJzb3JDb250cm9sLm9uRmluaXNoZWQgJiYgdHlwZW9mIHNlbGYuY3Vyc29yQ29udHJvbC5vbkZpbmlzaGVkICA9PT0gJ2Z1bmN0aW9uJylcblx0XHRcdFx0XHRzZWxmLmN1cnNvckNvbnRyb2wub25GaW5pc2hlZCgpO1xuXHRcdFx0XHRzZWxmLnNldFByb2dyZXNzKDAsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRzZWxmLmJlYXRDYWxsYmFjayA9IGZ1bmN0aW9uIChiZWF0TnVtYmVyLCB0b3RhbEJlYXRzLCB0b3RhbFRpbWUpIHtcblx0XHR2YXIgcGVyY2VudCA9IGJlYXROdW1iZXIgLyB0b3RhbEJlYXRzO1xuXHRcdHNlbGYuc2V0UHJvZ3Jlc3MocGVyY2VudCwgdG90YWxUaW1lKTtcblx0XHRpZiAoc2VsZi5jdXJzb3JDb250cm9sICYmIHNlbGYuY3Vyc29yQ29udHJvbC5vbkJlYXQgJiYgdHlwZW9mIHNlbGYuY3Vyc29yQ29udHJvbC5vbkJlYXQgID09PSAnZnVuY3Rpb24nKVxuXHRcdFx0c2VsZi5jdXJzb3JDb250cm9sLm9uQmVhdChiZWF0TnVtYmVyLCB0b3RhbEJlYXRzLCB0b3RhbFRpbWUpO1xuXHR9O1xuXG5cdHNlbGYuZXZlbnRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChldmVudCkge1xuXHRcdFx0aWYgKHNlbGYuY3Vyc29yQ29udHJvbCAmJiBzZWxmLmN1cnNvckNvbnRyb2wub25FdmVudCAmJiB0eXBlb2Ygc2VsZi5jdXJzb3JDb250cm9sLm9uRXZlbnQgID09PSAnZnVuY3Rpb24nKVxuXHRcdFx0XHRzZWxmLmN1cnNvckNvbnRyb2wub25FdmVudChldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuZmluaXNoZWQoKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi5saW5lRW5kQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdGlmIChzZWxmLmN1cnNvckNvbnRyb2wgJiYgc2VsZi5jdXJzb3JDb250cm9sLm9uTGluZUVuZCAmJiB0eXBlb2Ygc2VsZi5jdXJzb3JDb250cm9sLm9uTGluZUVuZCAgPT09ICdmdW5jdGlvbicpXG5cdFx0XHRzZWxmLmN1cnNvckNvbnRyb2wub25MaW5lRW5kKGRhdGEpO1xuXHR9O1xuXG5cdHNlbGYuZ2V0VXJsID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBzZWxmLm1pZGlCdWZmZXIuZG93bmxvYWQoKTtcblx0fTtcblxuXHRzZWxmLmRvd25sb2FkID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcblx0XHR2YXIgdXJsID0gc2VsZi5nZXRVcmwoKTtcblx0XHR2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKFwic3R5bGVcIixcImRpc3BsYXk6IG5vbmU7XCIpO1xuXHRcdGxpbmsuaHJlZiA9IHVybDtcblx0XHRsaW5rLmRvd25sb2FkID0gZmlsZU5hbWUgPyBmaWxlTmFtZSA6ICdvdXRwdXQud2F2Jztcblx0XHRsaW5rLmNsaWNrKCk7XG5cdFx0d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcblx0XHRkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoQ29udHJvbGxlcjtcbiIsIi8vICAgIGFiYzJhYmNfd3JpdGUuanM6IFByaW50cyBhbiBhYmMgZmlsZSBpbiB0ZXh0IGZvcm1hdCBwYXJzZWQgYnkgYWJjX3BhcnNlLmpzXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBUZXh0UHJpbnRlciA9IGZ1bmN0aW9uKGVsZW0sIHJlcG9zaXRpb24pIHtcbiAgICB0aGlzLmVsZW0gPSBlbGVtO1xuICAgIHRoaXMudGV4dCA9IFwiXCI7XG4gICAgdGhpcy5sID0gMS84O1xuICAgIHRoaXMucmVwb3NpdGlvbiA9IHJlcG9zaXRpb24gfHwgZmFsc2U7XG59XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludFN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgZWxlbSkge1xuICAgIGlmICh0aGlzLnJlcG9zaXRpb24gJiYgZWxlbSkgZWxlbS5zdGFydENoYXIgPSB0aGlzLnRleHQubGVuZ3RoO1xuICAgIHRoaXMudGV4dCArPSBzdHI7XG4gICAgaWYgKHRoaXMucmVwb3NpdGlvbiAmJiBlbGVtKSBlbGVtLmVuZENoYXIgPSB0aGlzLnRleHQubGVuZ3RoO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50TmV3TGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRleHQgKz0gXCJcXG5cIjtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludFNwYWNlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnRleHRbdGhpcy50ZXh0Lmxlbmd0aC0xXS5tYXRjaCgvXFxzLykpIHJldHVybjsgLy9UT0RPIG1hdGNoIHdoaXRlc3BhY2VcbiAgICB0aGlzLnRleHQgKz0gXCIgXCI7XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUucHJpbnRBQkMgPSBmdW5jdGlvbihhYmN0dW5lKSB7XG4gICAgdGhpcy50ZXh0ID0gXCJcIjtcbiAgICB0aGlzLmFiY3R1bmUgPSBhYmN0dW5lO1xuICAgIC8vVE9ETyBmb3JtYXR0aW5nXG4gICAgdGhpcy5wcmludEhlYWRlcigpO1xuICAgIHRoaXMucHJpbnRCb2R5KCk7XG4gICAgdGhpcy5lbGVtLnZhbHVlPXRoaXMudGV4dDtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludEhlYWRlciA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIG11Y2ggb2YgdGhpcyBpbmZvIGlzIGR1cGxpY2F0ZWQgaW4gbWV0YVRleHRIRWFkZXJzIGluIGFiY19wYXJzZV9oZWFkZXIuanNcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcInhcIixcIlhcIixcIjFcIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJ0aXRsZVwiLFwiVFwiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImNvbXBvc2VyXCIsXCJDXCIpO1xuICAgIHRoaXMucHJpbnRIZWFkZXJMaW5lKFwiaGlzdG9yeVwiLFwiSFwiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImF1dGhvclwiLFwiQVwiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImJvb2tcIixcIkJcIik7ICBcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImRpc2NvZ3JhcGh5XCIsXCJEXCIpOyAgXG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJ1cmxcIixcIkZcIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJncm91cFwiLFwiR1wiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImluc3RydWN0aW9uXCIsXCJJXCIpO1xuICAgIHRoaXMucHJpbnRIZWFkZXJMaW5lKFwibm90ZXNcIixcIk5cIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJvcmlnaW5cIixcIk9cIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJyaHl0aG1cIixcIlJcIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJzb3VyY2VcIixcIlNcIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJ1bmFsaWduZWR3b3Jkc1wiLFwiV1wiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcInRyYW5zY3JpcHRpb25cIixcIlpcIik7XG4gICAgLy9UT0RPIHBhcnQgb3JkZXJcbiAgICAvL1RPRE8gUSB0ZW1wb1xuICAgIC8vVE9ETyB0ZXh0QmxvY2tcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcIk5VTExcIixcIkxcIixcIjEvOFwiKTsgLy9UT0RPIExcblxuICAgIHRoaXMucHJpbnRIZWFkZXJMaW5lKFwiTlVMTFwiLFwiTVwiLHRoaXMuZ2V0TWV0ZXJTdHJpbmcodGhpcy5hYmN0dW5lLmxpbmVzWzBdLnN0YWZmWzBdLm1ldGVyKSk7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJOVUxMXCIsXCJLXCIsdGhpcy5nZXRLZXlTdHJpbmcodGhpcy5hYmN0dW5lLmxpbmVzWzBdLnN0YWZmWzBdLmtleSkpOy8vVE9ETyBLXG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUuZ2V0S2V5U3RyaW5nID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGtleS5yb290K2tleS5hY2Mra2V5Lm1vZGU7XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUuZ2V0TWV0ZXJTdHJpbmcgPSBmdW5jdGlvbihtZXRlcikge1xuICAgIHN3aXRjaCAobWV0ZXIudHlwZSkge1xuICAgIGNhc2UgXCJjdXRfdGltZVwiOiByZXR1cm4gXCJDfFwiO1xuICAgIGNhc2UgXCJjb21tb25fdGltZVwiOiByZXR1cm4gXCJDXCI7XG4gICAgY2FzZSBcInNwZWNpZmllZFwiOlxuICAgICAgaWYgKG1ldGVyLnZhbHVlWzBdLmRlbilcblx0XHRyZXR1cm4gbWV0ZXIudmFsdWVbMF0ubnVtK1wiL1wiK21ldGVyLnZhbHVlWzBdLmRlbjtcbiAgICAgIGVsc2Vcblx0ICAgIHJldHVybiBtZXRlci52YWx1ZVswXS5udW07XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50SGVhZGVyTGluZSA9IGZ1bmN0aW9uKGZpZWxkbmFtZSwgYWJjZmllbGQsIGRlZmF1dCkge1xuICAgIHZhciB2YWwgPSB0aGlzLmFiY3R1bmUubWV0YVRleHRbZmllbGRuYW1lXSB8fCBkZWZhdXQ7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG5cdHZhciB2YWxhcnJheSA9IHZhbC5zcGxpdChcIlxcblwiKTtcblx0Zm9yICh2YXIgaT0wOyBpPHZhbGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICB0aGlzLnByaW50U3RyaW5nKGFiY2ZpZWxkK1wiOiBcIit2YWxhcnJheVtpXSk7XG5cdCAgICB0aGlzLnByaW50TmV3TGluZSgpO1xuXHR9IFxuICAgIH1cbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5nZXRFbGVtID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuYWJjbGluZS5sZW5ndGggPD0gdGhpcy5wb3MpXG5cdHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmFiY2xpbmVbdGhpcy5wb3NdO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLmdldE5leHRFbGVtID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuYWJjbGluZS5sZW5ndGggPD0gdGhpcy5wb3MrMSlcblx0cmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuYWJjbGluZVt0aGlzLnBvcysxXTtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludEJvZHkgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IodmFyIGxpbmU9MDsgbGluZTx0aGlzLmFiY3R1bmUubGluZXMubGVuZ3RoOyBsaW5lKyspIHtcblx0dmFyIGFiY2xpbmUgPSB0aGlzLmFiY3R1bmUubGluZXNbbGluZV07XG5cdGlmIChhYmNsaW5lLnN0YWZmKSB7XG5cdCAgICB0aGlzLnByaW50QUJDTGluZShhYmNsaW5lLnN0YWZmKTtcblx0fSBlbHNlIGlmIChhYmNsaW5lLnN1YnRpdGxlICYmIGxpbmUhPT0wKSB7XG5cdCAgICAvL1RPRE9cblx0fSBlbHNlIGlmIChhYmNsaW5lLnRleHQpIHtcblx0ICAgIC8vVE9ET1xuXHR9XG4gICAgfVxufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50QUJDTGluZSA9IGZ1bmN0aW9uKHN0YWZmcykge1xuICAgIGZvciAodGhpcy5zID0gMDsgdGhpcy5zIDwgc3RhZmZzLmxlbmd0aDsgdGhpcy5zKyspIHtcblx0dGhpcy5wcmludEFCQ1N0YWZmKHN0YWZmc1t0aGlzLnNdKTtcbiAgICB9XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUucHJpbnRBQkNTdGFmZiA9IGZ1bmN0aW9uKGFiY3N0YWZmKSB7XG4gICAgXG4gICAgLy8gVE9ETyBpZiAoYWJjc3RhZmYuYnJhY2tldCkgaGVhZGVyICs9IFwiYnJhY2tldCBcIithYmNzdGFmZi5icmFja2V0K1wiIFwiO1xuICAgIC8vIFRPRE8gaWYgKGFiY3N0YWZmLmJyYWNlKSBoZWFkZXIgKz0gXCJicmFjZSBcIithYmNzdGFmZi5icmFjZStcIiBcIjtcbiAgICBcbiAgICBcbiAgICBmb3IgKHRoaXMudiA9IDA7IHRoaXMudiA8IGFiY3N0YWZmLnZvaWNlcy5sZW5ndGg7IHRoaXMudisrKSB7XG5cdC8vIFRPRE8gc3R1ZmYgYWJvdXQgdm9pY2VzXG5cdFxuXHQvLyBUT0RPIHRoaXMgaXMgd2hlcmUga2V5IHNpZyBpcyB0aGlzLnZvaWNlLmFkZENoaWxkKHRoaXMucHJpbnRDbGVmKGFiY3N0YWZmLmNsZWYpKTtcblx0Ly8gdGhpcy52b2ljZS5hZGRDaGlsZCh0aGlzLnByaW50S2V5U2lnbmF0dXJlKGFiY3N0YWZmLmtleSkpO1xuXHQvLyBpZiAoYWJjc3RhZmYubWV0ZXIpIHRoaXMudm9pY2UuYWRkQ2hpbGQodGhpcy5wcmludFRpbWVTaWduYXR1cmUoYWJjc3RhZmYubWV0ZXIpKTtcblx0dGhpcy5wcmludEFCQ1ZvaWNlKGFiY3N0YWZmLnZvaWNlc1t0aGlzLnZdKTtcbiAgICB9XG4gICAgXG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUucHJpbnRBQkNWb2ljZSA9IGZ1bmN0aW9uKGFiY2xpbmUpIHtcbiAgICB0aGlzLmFiY2xpbmUgPSBhYmNsaW5lO1xuICAgIGZvciAodGhpcy5wb3M9MDsgdGhpcy5wb3M8dGhpcy5hYmNsaW5lLmxlbmd0aDsgdGhpcy5wb3MrKykge1xuXHR0aGlzLnByaW50QUJDRWxlbWVudCgpO1xuICAgIH1cbiAgICB0aGlzLnByaW50TmV3TGluZSgpO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50QUJDRWxlbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbGVtID0gdGhpcy5nZXRFbGVtKCk7XG4gICAgc3dpdGNoIChlbGVtLmVsX3R5cGUpIHtcbiAgICBjYXNlIFwibm90ZVwiOlxuXHR0aGlzLnByaW50QmVhbSgpO1xuXHRicmVhaztcbiAgICBjYXNlIFwiYmFyXCI6XG5cdHRoaXMucHJpbnRCYXJMaW5lKGVsZW0pO1xuXHRicmVhaztcbiAgICBjYXNlIFwibWV0ZXJcIjpcblx0Ly9UT0RPIHRoaXMucHJpbnRUaW1lU2lnbmF0dXJlKGVsZW0pO1xuXHRicmVhaztcbiAgICBjYXNlIFwiY2xlZlwiOlxuXHQvL1RPRE8gdGhpcy5wcmludENsZWYoZWxlbSk7XG5cdGJyZWFrO1xuICAgIGNhc2UgXCJrZXlcIjpcblx0Ly9UT0RPIHRoaXMucHJpbnRLZXlTaWduYXR1cmUoZWxlbSk7XG4gICAgY2FzZSBcInN0ZW1cIjpcblx0Ly9UT0RPIGRvIG5vdGhpbmc/XG5cdGJyZWFrO1xuICAgIGNhc2UgXCJwYXJ0XCI6XG5cdC8vVE9ETyBwcmludCBwYXJ0XG5cdGJyZWFrO1xuICAgIGRlZmF1bHQ6XG5cdC8vVE9ETyBzaG93IHdlJ3JlIG1pc3Npbmcgc29tZXRoaW5nXG4gICAgfVxufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50QmVhbSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHJpbnRTcGFjZSgpO1xuICAgIGlmICh0aGlzLmdldEVsZW0oKS5zdGFydEJlYW0gJiYgIXRoaXMuZ2V0RWxlbSgpLmVuZEJlYW0pIHtcblx0d2hpbGUgKHRoaXMuZ2V0RWxlbSgpKSB7XG5cdCAgICB0aGlzLnByaW50Tm90ZSh0aGlzLmdldEVsZW0oKSk7XG5cdCAgICBpZiAodGhpcy5nZXRFbGVtKCkuZW5kQmVhbSkge1xuXHRcdGJyZWFrO1xuXHQgICAgfVxuXHQgICAgdGhpcy5wb3MrKztcblx0fVxuICAgIH0gZWxzZSB7XG5cdHRoaXMucHJpbnROb3RlKHRoaXMuZ2V0RWxlbSgpKTtcbiAgICB9XG4gICAgdGhpcy5wcmludFNwYWNlKCk7XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUucHJpbnROb3RlID0gZnVuY3Rpb24oZWxlbSkge1xuICAgIHZhciBzdHIgPSBcIlwiO1xuXHR2YXIgaTtcbiAgICBpZiAoZWxlbS5jaG9yZCAhPT0gdW5kZWZpbmVkKSB7XG5cdGZvciAoaT0wOyBpPGVsZW0uY2hvcmQubGVuZ3RoOyBpKyspIHtcblx0ICAgIHN0cis9ICdcIicrZWxlbS5jaG9yZFtpXS5uYW1lKydcIic7XG5cdH1cbiAgICB9XG4gICAgXG4gICAgLy9UT0RPIHVuaWZ5IG1hcCBiZXR3ZWVuIG5hbWVzIGFuZCBzeW1ib2xzICh0byBiZSB1c2VkIHdpdGggYWJjcGFyc2U/KVxuICAgIHZhciBkZWNvcmF0aW9ucyA9IHtcblx0XCJzdGFjY2F0b1wiIDogXCIuXCIsXG5cdFwidXBib3dcIiA6IFwidVwiLFxuXHRcImRvd25ib3dcIiA6IFwidlwiLFxuXHRcInJvbGxcIiA6IFwiflwiLFxuXHRcImZlcm1hdGFcIiA6IFwiSFwiLFxuXHRcInNsaWRlXCIgOiBcIkpcIixcblx0XCJhY2NlbnRcIiA6IFwiTFwiLFxuXHRcIm1vcmRlbnRcIiA6IFwiTVwiLFxuXHRcInByYWxsdHJpbGxlclwiIDogXCJQXCIsXG5cdFwidHJpbGxcIiA6IFwiVFwiLFxuXHRcImxvd2VyXCIgOiBcIi5cIlxuICAgIH07XG5cbiAgICBpZiAoZWxlbS5kZWNvcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0Zm9yIChpPTA7IGk8ZWxlbS5kZWNvcmF0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdCAgICB2YXIgZGVjID0gZWxlbS5kZWNvcmF0aW9uW2ldO1xuXHQgICAgaWYgKGRlY29yYXRpb25zW2RlY10pIHtcblx0XHRzdHIrPWRlY29yYXRpb25zW2RlY107XG5cdCAgICB9IGVsc2Uge1xuXHRcdHN0cis9XCIhXCI7IC8vVE9ETyBoYXJkY29kZWRcblx0XHRzdHIrPWRlYztcblx0XHRzdHIrPVwiIVwiOyAvL1RPRE8gaGFyZGNvZGVkXG5cdCAgICB9XG5cdH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbS5ncmFjZW5vdGVzICE9PSB1bmRlZmluZWQpIHtcblx0c3RyKz1cIntcIjtcblx0Zm9yIChpPTA7IGk8ZWxlbS5ncmFjZW5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICBzdHIrPXRoaXMuZ2V0Tm90ZVN0cmluZyhlbGVtLmdyYWNlbm90ZXNbaV0pO1xuXHR9XG5cdHN0cis9XCJ9XCI7XG4gICAgfVxuXG4gICAgdmFyIGlnbm9yZXNsdXIgPSBmYWxzZTtcbiAgICBpZiAoZWxlbS5waXRjaGVzLmxlbmd0aCA9PT0gMSAmJiBlbGVtLnBpdGNoZXNbMF0uc3RhcnRTbHVyKSB7XG5cdGlnbm9yZXNsdXIgPSB0cnVlO1xuXHRzdHIrPXRoaXMubXVsdGlwbHlTdHJpbmcoXCIoXCIsZWxlbS5waXRjaGVzWzBdLnN0YXJ0U2x1ci5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlmIChlbGVtLnN0YXJ0U2x1cikge1xuXHRzdHIrPXRoaXMubXVsdGlwbHlTdHJpbmcoXCIoXCIsZWxlbS5zdGFydFNsdXIubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAoKGVsZW0ucGl0Y2hlcy5sZW5ndGggPT09IDEgJiYgZWxlbS5waXRjaGVzWzBdLmVuZFNsdXIpIHx8IGVsZW0uZW5kU2x1cikge1xuXHRpZ25vcmVzbHVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbS5zdGFydFRyaXBsZXQpIHtcblx0c3RyKz1cIigzXCI7XG4gICAgfVxuXG4gICAgaWYgKGVsZW0ucGl0Y2hlcykge1xuXHRpZiAoZWxlbS5waXRjaGVzLmxlbmd0aCA+IDEpIHN0cis9XCJbXCI7XG5cdGZvciAoaT0wOyBpPGVsZW0ucGl0Y2hlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgZWxlbS5waXRjaGVzW2ldLmR1cmF0aW9uID0gZWxlbS5kdXJhdGlvbjtcblx0ICAgIHN0cis9dGhpcy5nZXROb3RlU3RyaW5nKGVsZW0ucGl0Y2hlc1tpXSwgaWdub3Jlc2x1cik7XG5cdH1cblx0aWYgKGVsZW0ucGl0Y2hlcy5sZW5ndGggPiAxKSBzdHIrPVwiXVwiO1xuICAgIH0gXG5cbiAgICBpZiAoZWxlbS5waXRjaGVzLmxlbmd0aCA9PT0gMSAmJiBlbGVtLnBpdGNoZXNbMF0uZW5kU2x1cikge1xuXHRzdHIrPXRoaXMubXVsdGlwbHlTdHJpbmcoXCIpXCIsZWxlbS5waXRjaGVzWzBdLmVuZFNsdXIubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbS5lbmRTbHVyKSB7XG5cdHN0cis9dGhpcy5tdWx0aXBseVN0cmluZyhcIilcIixlbGVtLmVuZFNsdXIubGVuZ3RoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByaW50U3RyaW5nKHN0cixlbGVtKTtcblxufTtcblxuLy8gYWNjaWRlbnRhbHMsIHRpZXMgYW5kIHNvbWV0aW1lcyBzbHVycywgc29tZXRpbWVzIGR1cmF0aW9uXG5UZXh0UHJpbnRlci5wcm90b3R5cGUuZ2V0Tm90ZVN0cmluZyA9IGZ1bmN0aW9uKHBpdGNoZWxlbSwgaWdub3Jlc2x1cikge1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIGlmICghaWdub3Jlc2x1ciAmJiBwaXRjaGVsZW0uc3RhcnRTbHVyKSB7XG5cdHN0cis9XCIoXCI7XG4gICAgfVxuXG4gICAgdmFyIHN5bWIgPSBcIlwiO1xuICAgIHN3aXRjaCAocGl0Y2hlbGVtLmFjY2lkZW50YWwpIHtcbiAgICBjYXNlIFwicXVhcnRlcnNoYXJwXCI6XG5cdHN5bWIgPSBcIl4vXCI7XG5cdGJyZWFrO1xuICAgIGNhc2UgXCJkYmxzaGFycFwiOlxuXHRzeW1iID0gXCJeXlwiO1xuXHRicmVhaztcbiAgICBjYXNlIFwic2hhcnBcIjpcblx0c3ltYiA9IFwiXlwiO1xuXHRicmVhaztcbiAgICBjYXNlIFwicXVhcnRlcmZsYXRcIjpcblx0c3ltYiA9IFwiXy9cIjtcblx0YnJlYWs7XG4gICAgY2FzZSBcImZsYXRcIjpcblx0c3ltYiA9IFwiX1wiO1xuXHRicmVhaztcbiAgICBjYXNlIFwiZGJsZmxhdFwiOlxuXHRzeW1iID0gXCJfX1wiO1xuXHRicmVhaztcbiAgICBjYXNlIFwibmF0dXJhbFwiOlxuXHRzeW1iID0gXCI9XCI7XG4gICAgfVxuICAgIHN0cis9c3ltYjtcblxuICAgIHZhciBwaXRjaGVzID0gW1wiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiQVwiLFwiQlwiXTtcbiAgICB2YXIgcGl0Y2hzdHIgPSBwaXRjaGVzW3RoaXMuZXh0cmFjdE5vdGUocGl0Y2hlbGVtLnBpdGNoKV07XG4gICAgdmFyIG9jdGF2ZSA9IHRoaXMuZXh0cmFjdE9jdGF2ZShwaXRjaGVsZW0ucGl0Y2gpO1xuICAgIGlmIChvY3RhdmU+MCkge1xuXHRwaXRjaHN0ciA9IHBpdGNoc3RyLnRvTG93ZXJDYXNlKCk7XG5cdG9jdGF2ZS0tO1xuXHR3aGlsZSAob2N0YXZlPjApIHtcblx0ICAgIHBpdGNoc3RyKz1cIidcIjtcblx0ICAgIG9jdGF2ZS0tO1xuXHR9XG4gICAgfSBlbHNlIHtcblx0d2hpbGUgKG9jdGF2ZTwwKSB7XG5cdCAgICBwaXRjaHN0cis9XCIsXCI7XG5cdCAgICBvY3RhdmUrKztcblx0fVxuICAgIH1cbiAgICBcbiAgICBzdHIrPXBpdGNoc3RyO1xuICAgIFxuICAgIGlmIChwaXRjaGVsZW0uZHVyYXRpb24pIHtcblx0c3RyKz10aGlzLmdldER1cmF0aW9uU3RyaW5nKHBpdGNoZWxlbS5kdXJhdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCFpZ25vcmVzbHVyICYmIHBpdGNoZWxlbS5lbmRTbHVyKSB7XG5cdHN0cis9XCIpXCI7XG4gICAgfVxuXG4gICAgaWYgKHBpdGNoZWxlbS5zdGFydFRpZSkge1xuXHRzdHIrPVwiLVwiO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUuZ2V0RHVyYXRpb25TdHJpbmcgPSBmdW5jdGlvbihkdXJhdGlvbikge1xuICAgIC8vVE9ETyBkZXRlY3QgY3Jvb2tlZCByaHl0aG1cbiAgICBpZiAoZHVyYXRpb24vdGhpcy5sID4gMSkge1xuXHRyZXR1cm4gZHVyYXRpb24vdGhpcy5sO1xuICAgIH0gXG4gICAgdmFyIHJldCA9IFwiXCI7XG4gICAgaWYgKHRoaXMubC9kdXJhdGlvbj4xKSB7XG5cdHJldCs9XCIvXCI7XG5cdGlmICh0aGlzLmwvZHVyYXRpb24+Mikge1xuXHQgICAgcmV0Kz10aGlzLmwvZHVyYXRpb247XG5cdH0gICBcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5leHRyYWN0Tm90ZSA9IGZ1bmN0aW9uKHBpdGNoKSB7XG4gICAgdmFyIHBpdGNoMiA9IHBpdGNoJTc7XG4gICAgaWYgKHBpdGNoMjwwKSBwaXRjaDIrPTc7XG4gICAgcmV0dXJuIHBpdGNoMjtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5leHRyYWN0T2N0YXZlID0gZnVuY3Rpb24ocGl0Y2gpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihwaXRjaC83KTtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludEJhckxpbmUgPSBmdW5jdGlvbihlbGVtKSB7XG4gICAgdmFyIGJhcnN0ciA9IFwiXCI7XG4gICAgc3dpdGNoIChlbGVtLnR5cGUpIHtcbiAgICBjYXNlIFwiYmFyX3RoaW5cIjogYmFyc3RyKz1cInxcIjsgYnJlYWs7XG4gICAgY2FzZSBcImJhcl90aGluX3RoaWNrXCI6IGJhcnN0cis9XCJ8XVwiOyBicmVhaztcbiAgICBjYXNlIFwiYmFyX3RoaW5fdGhpblwiOiBiYXJzdHIrPVwifHxcIjsgYnJlYWs7XG4gICAgY2FzZSBcImJhcl90aGlja190aGluXCI6IGJhcnN0cis9XCJbfFwiOyBicmVhaztcbiAgICBjYXNlIFwiYmFyX2RibF9yZXBlYXRcIjogYmFyc3RyKz1cIjp8fDpcIjsgYnJlYWs7XG4gICAgY2FzZSBcImJhcl9sZWZ0X3JlcGVhdFwiOiBiYXJzdHIrPVwifDpcIjsgYnJlYWs7XG4gICAgY2FzZSBcImJhcl9yaWdodF9yZXBlYXRcIjogYmFyc3RyKz1cIjp8XCI7IGJyZWFrO1xuICAgIGNhc2UgXCJiYXJfaW52aXNpYmxlXCI6IGJhcnN0cis9XCJcIjsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMucHJpbnRTdHJpbmcoYmFyc3RyLGVsZW0pO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLm11bHRpcGx5U3RyaW5nID0gZnVuY3Rpb24gKHMsIG4pIHtcbiAgICB2YXIgcmV0ID0gXCJcIjtcbiAgICBmb3IgKDtuPjA7bi0tKSByZXQrPXM7XG4gICAgcmV0dXJuIHJldDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dFByaW50ZXI7XG4iLCIvLyBhYmNfZWRpdG9yLmpzXG4vLyB3aW5kb3cuQUJDSlMuRWRpdG9yIGlzIHRoZSBpbnRlcmZhY2UgY2xhc3MgZm9yIHRoZSBhcmVhIHRoYXQgY29udGFpbnMgdGhlIEFCQyB0ZXh0LiBJdCBpcyByZXNwb25zaWJsZSBmb3Jcbi8vIGhvbGRpbmcgdGhlIHRleHQgb2YgdGhlIHR1bmUgYW5kIGNhbGxpbmcgdGhlIHBhcnNlciBhbmQgdGhlIHJlbmRlcmluZyBlbmdpbmVzLlxuLy9cbi8vIEVkaXRBcmVhIGlzIGFuIGV4YW1wbGUgb2YgdXNpbmcgYSB0ZXh0YXJlYSBhcyB0aGUgY29udHJvbCB0aGF0IGlzIHNob3duIHRvIHRoZSB1c2VyLiBBcyBsb25nIGFzXG4vLyB0aGUgc2FtZSBpbnRlcmZhY2UgaXMgdXNlZCwgd2luZG93LkFCQ0pTLkVkaXRvciBjYW4gdXNlIGEgZGlmZmVyZW50IHR5cGUgb2Ygb2JqZWN0LlxuLy9cbi8vIEVkaXRBcmVhOlxuLy8gLSBjb25zdHJ1Y3Rvcih0ZXh0YXJlYWlkKVxuLy9cdFx0VGhpcyBjb250YWlucyB0aGUgaWQgb2YgYSB0ZXh0YXJlYSBjb250cm9sIHRoYXQgd2lsbCBiZSB1c2VkLlxuLy8gLSBhZGRTZWxlY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcilcbi8vXHRcdEEgY2FsbGJhY2sgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgZW50cnkgcG9pbnQgZmlyZVNlbGVjdGlvbkNoYW5nZWQoKVxuLy8gLSBhZGRDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcilcbi8vXHRcdEEgY2FsbGJhY2sgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgZW50cnkgcG9pbnQgZmlyZUNoYW5nZWQoKVxuLy8gLSBnZXRTZWxlY3Rpb24oKVxuLy9cdFx0cmV0dXJucyB0aGUgb2JqZWN0IHsgc3RhcnQ6ICwgZW5kOiB9IHdpdGggdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluIGNoYXJhY3RlcnNcbi8vIC0gc2V0U2VsZWN0aW9uKHN0YXJ0LCBlbmQpXG4vL1x0XHRzdGFydCBhbmQgZW5kIGFyZSB0aGUgY2hhcmFjdGVyIHBvc2l0aW9ucyB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC5cbi8vIC0gZ2V0U3RyaW5nKClcbi8vXHRcdHJldHVybnMgdGhlIEFCQyB0ZXh0IHRoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZC5cbi8vIC0gc2V0U3RyaW5nKHN0cilcbi8vXHRcdHNldHMgdGhlIEFCQyB0ZXh0IHRoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZCwgYW5kIHJlc2V0cyB0aGUgaW5pdGlhbFRleHQgdmFyaWFibGVcbi8vIC0gZ2V0RWxlbSgpXG4vL1x0XHRyZXR1cm5zIHRoZSB0ZXh0YXJlYSBlbGVtZW50XG4vLyAtIHN0cmluZyBpbml0aWFsVGV4dFxuLy9cdFx0Q29udGFpbnMgdGhlIHN0YXJ0aW5nIHRleHQuIFRoaXMgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhlIGN1cnJlbnQgdGV4dCB0byBzZWUgaWYgYW55dGhpbmcgY2hhbmdlZC5cbi8vXG5cbi8qZ2xvYmFsIGRvY3VtZW50LCB3aW5kb3csIGNsZWFyVGltZW91dCwgc2V0VGltZW91dCAqL1xuXG52YXIgVHVuZUJvb2sgPSByZXF1aXJlKCcuLi9hcGkvYWJjX3R1bmVib29rJykuVHVuZUJvb2s7XG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfY29tbW9uJyk7XG52YXIgUGFyc2UgPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfcGFyc2UnKTtcbnZhciBUZXh0UHJpbnRlciA9IHJlcXVpcmUoJy4uL3RyYW5zZm9ybS9hYmMyYWJjX3dyaXRlJyk7XG52YXIgRW5ncmF2ZXJDb250cm9sbGVyID0gcmVxdWlyZSgnLi4vd3JpdGUvYWJjX2VuZ3JhdmVyX2NvbnRyb2xsZXInKTtcbnZhciBTeW50aENvbnRyb2xsZXIgPSByZXF1aXJlKCcuLi9zeW50aC9zeW50aC1jb250cm9sbGVyJyk7XG52YXIgc3VwcG9ydHNBdWRpbyA9IHJlcXVpcmUoJy4uL3N5bnRoL3N1cHBvcnRzLWF1ZGlvJyk7XG5cbi8vIFBvbHlmaWxsIGZvciBDdXN0b21FdmVudCBmb3Igb2xkIElFIHZlcnNpb25zXG5pZiAoIHR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQgIT09IFwiZnVuY3Rpb25cIiApIHtcblx0dmFyIEN1c3RvbUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQsIHBhcmFtcykge1xuXHRcdHBhcmFtcyA9IHBhcmFtcyB8fCB7YnViYmxlczogZmFsc2UsIGNhbmNlbGFibGU6IGZhbHNlLCBkZXRhaWw6IHVuZGVmaW5lZH07XG5cdFx0dmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuXHRcdGV2dC5pbml0Q3VzdG9tRXZlbnQoZXZlbnQsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSwgcGFyYW1zLmRldGFpbCk7XG5cdFx0cmV0dXJuIGV2dDtcblx0fTtcblx0Q3VzdG9tRXZlbnQucHJvdG90eXBlID0gd2luZG93LkV2ZW50LnByb3RvdHlwZTtcblx0d2luZG93LkN1c3RvbUV2ZW50ID0gQ3VzdG9tRXZlbnQ7XG59XG5cbnZhciBFZGl0QXJlYSA9IGZ1bmN0aW9uKHRleHRhcmVhaWQpIHtcbiAgdGhpcy50ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRleHRhcmVhaWQpO1xuICB0aGlzLmluaXRpYWxUZXh0ID0gdGhpcy50ZXh0YXJlYS52YWx1ZTtcbiAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG59XG5cbkVkaXRBcmVhLnByb3RvdHlwZS5hZGRTZWxlY3Rpb25MaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gIHRoaXMudGV4dGFyZWEub25tb3VzZW1vdmUgPSBmdW5jdGlvbihldikge1xuXHQgIGlmICh0aGlzLmlzRHJhZ2dpbmcpXG5cdCAgICBsaXN0ZW5lci5maXJlU2VsZWN0aW9uQ2hhbmdlZCgpO1xuICB9O1xufTtcblxuRWRpdEFyZWEucHJvdG90eXBlLmFkZENoYW5nZUxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgdGhpcy5jaGFuZ2VsaXN0ZW5lciA9IGxpc3RlbmVyO1xuICB0aGlzLnRleHRhcmVhLm9ua2V5dXAgPSBmdW5jdGlvbigpIHtcbiAgICBsaXN0ZW5lci5maXJlQ2hhbmdlZCgpO1xuICB9O1xuICB0aGlzLnRleHRhcmVhLm9ubW91c2Vkb3duID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgbGlzdGVuZXIuZmlyZVNlbGVjdGlvbkNoYW5nZWQoKTtcbiAgfTtcbiAgdGhpcy50ZXh0YXJlYS5vbm1vdXNldXAgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgbGlzdGVuZXIuZmlyZUNoYW5nZWQoKTtcbiAgfTtcbiAgdGhpcy50ZXh0YXJlYS5vbmNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgIGxpc3RlbmVyLmZpcmVDaGFuZ2VkKCk7XG4gIH07XG59O1xuXG4vL1RPRE8gd29uJ3Qgd29yayB1bmRlciBJRT9cbkVkaXRBcmVhLnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtzdGFydDogdGhpcy50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCwgZW5kOiB0aGlzLnRleHRhcmVhLnNlbGVjdGlvbkVuZH07XG59O1xuXG5FZGl0QXJlYS5wcm90b3R5cGUuc2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuXHRpZih0aGlzLnRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKVxuXHQgICB0aGlzLnRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xuXHRlbHNlIGlmKHRoaXMudGV4dGFyZWEuY3JlYXRlVGV4dFJhbmdlKSB7XG5cdFx0Ly8gRm9yIElFOFxuXHQgICB2YXIgZSA9IHRoaXMudGV4dGFyZWEuY3JlYXRlVGV4dFJhbmdlKCk7XG5cdCAgIGUuY29sbGFwc2UodHJ1ZSk7XG5cdCAgIGUubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kKTtcblx0ICAgZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KTtcblx0ICAgZS5zZWxlY3QoKTtcblx0fVxuICB0aGlzLnRleHRhcmVhLmZvY3VzKCk7XG59O1xuXG5FZGl0QXJlYS5wcm90b3R5cGUuZ2V0U3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRleHRhcmVhLnZhbHVlO1xufTtcblxuRWRpdEFyZWEucHJvdG90eXBlLnNldFN0cmluZyA9IGZ1bmN0aW9uKHN0cikge1xuICB0aGlzLnRleHRhcmVhLnZhbHVlID0gc3RyO1xuICB0aGlzLmluaXRpYWxUZXh0ID0gdGhpcy5nZXRTdHJpbmcoKTtcbiAgaWYgKHRoaXMuY2hhbmdlbGlzdGVuZXIpIHtcbiAgICB0aGlzLmNoYW5nZWxpc3RlbmVyLmZpcmVDaGFuZ2VkKCk7XG4gIH1cbn07XG5cbkVkaXRBcmVhLnByb3RvdHlwZS5nZXRFbGVtID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRleHRhcmVhO1xufTtcblxuLy9cbi8vIHdpbmRvdy5BQkNKUy5FZGl0b3I6XG4vL1xuLy8gY29uc3RydWN0b3IoZWRpdGFyZWEsIHBhcmFtcylcbi8vXHRcdGlmIGVkaXRhcmVhIGlzIGEgc3RyaW5nLCB0aGVuIGl0IGlzIGFuIEhUTUwgaWQgb2YgYSB0ZXh0YXJlYSBjb250cm9sLlxuLy9cdFx0T3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYW4gaW5zdGFudGlhdGlvbiBvZiBhbiBvYmplY3QgdGhhdCBleHByZXNzZXMgdGhlIEVkaXRBcmVhIGludGVyZmFjZS5cbi8vXG4vL1x0XHRwYXJhbXMgaXMgYSBoYXNoIG9mOlxuLy9cdFx0Y2FudmFzX2lkOiBvciBwYXBlcl9pZDogSFRNTCBpZCB0byBkcmF3IGluLiBJZiBub3QgcHJlc2VudCwgdGhlbiB0aGUgZHJhd2luZyBoYXBwZW5zIGp1c3QgYmVsb3cgdGhlIGVkaXRvci5cbi8vXHRcdGdlbmVyYXRlX21pZGk6IGlmIHByZXNlbnQsIHRoZW4gbWlkaSBpcyBnZW5lcmF0ZWQuXG4vL1x0XHRtaWRpX2lkOiBpZiBwcmVzZW50LCB0aGUgSFRNTCBpZCB0byBwbGFjZSB0aGUgbWlkaSBjb250cm9sLiBPdGhlcndpc2UgaXQgaXMgcGxhY2VkIGluIHRoZSBzYW1lIGRpdiBhcyB0aGUgcGFwZXIuXG4vL1x0XHRtaWRpX2Rvd25sb2FkX2lkOiBpZiBwcmVzZW50LCB0aGUgSFRNTCBpZCB0byBwbGFjZSB0aGUgbWlkaSBkb3dubG9hZCBsaW5rLiBPdGhlcndpc2UgaXQgaXMgcGxhY2VkIGluIHRoZSBzYW1lIGRpdiBhcyB0aGUgcGFwZXIuXG4vL1x0XHRnZW5lcmF0ZV93YXJuaW5nczogaWYgcHJlc2VudCwgdGhlbiBwYXJzZXIgd2FybmluZ3MgYXJlIGRpc3BsYXllZCBvbiB0aGUgcGFnZS5cbi8vXHRcdHdhcm5pbmdzX2lkOiBpZiBwcmVzZW50LCB0aGUgSFRNTCBpZCB0byBwbGFjZSB0aGUgd2FybmluZ3MuIE90aGVyd2lzZSB0aGV5IGFyZSBwbGFjZWQgaW4gdGhlIHNhbWUgZGl2IGFzIHRoZSBwYXBlci5cbi8vXHRcdG9uY2hhbmdlOiBpZiBwcmVzZW50LCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuZXZlciB0aGVyZSBoYXMgYmVlbiBhIGNoYW5nZS5cbi8vXHRcdGd1aTogaWYgcHJlc2VudCwgdGhlIHBhcGVyIGNhbiBzZW5kIGNoYW5nZXMgYmFjayB0byB0aGUgZWRpdG9yIChwcmVzdW1hYmx5IGJlY2F1c2UgdGhlIHVzZXIgY2hhbmdlZCBzb21ldGhpbmcgZGlyZWN0bHkuKVxuLy9cdFx0cGFyc2VyX29wdGlvbnM6IG9wdGlvbnMgdG8gc2VuZCB0byB0aGUgcGFyc2VyIGVuZ2luZS5cbi8vXHRcdG1pZGlfb3B0aW9uczogb3B0aW9ucyB0byBzZW5kIHRvIHRoZSBtaWRpIGVuZ2luZS5cbi8vXHRcdHJlbmRlcl9vcHRpb25zOiBvcHRpb25zIHRvIHNlbmQgdG8gdGhlIHJlbmRlciBlbmdpbmUuXG4vL1x0XHRpbmRpY2F0ZV9jaGFuZ2VkOiB0aGUgZGlydHkgZmxhZyBpcyBzZXQgaWYgdGhpcyBpcyB0cnVlLlxuLy9cbi8vIC0gc2V0UmVhZE9ubHkoYm9vbClcbi8vXHRcdGFkZHMgb3IgcmVtb3ZlcyB0aGUgY2xhc3MgYWJjX3RleHRhcmVhX3JlYWRvbmx5LCBhbmQgYWRkcyBvciByZW1vdmVzIHRoZSBhdHRyaWJ1dGUgcmVhZG9ubHk9eWVzXG4vLyAtIHNldERpcnR5U3R5bGUoYm9vbClcbi8vXHRcdGFkZHMgb3IgcmVtb3ZlcyB0aGUgY2xhc3MgYWJjX3RleHRhcmVhX2RpcnR5XG4vLyAtIHJlbmRlclR1bmUoYWJjLCBwYXJzZXJwYXJhbXMsIGRpdilcbi8vXHRcdEltbWVkaWF0ZWx5IHJlbmRlcnMgdGhlIHR1bmUuIChVc2VmdWwgZm9yIGNyZWF0aW5nIHRoZSBTVkcgb3V0cHV0IGJlaGluZCB0aGUgc2NlbmVzLCBpZiBkaXYgaXMgaGlkZGVuKVxuLy9cdFx0c3RyaW5nIGFiYzogdGhlIEFCQyB0ZXh0XG4vL1x0XHRwYXJzZXJwYXJhbXM6IHBhcmFtcyB0byBzZW5kIHRvIHRoZSBwYXJzZXJcbi8vXHRcdGRpdjogdGhlIEhUTUwgaWQgdG8gcmVuZGVyIHRvLlxuLy8gLSBtb2RlbENoYW5nZWQoKVxuLy9cdFx0Q2FsbGVkIHdoZW4gdGhlIG1vZGVsIGhhcyBiZWVuIGNoYW5nZWQgdG8gdHJpZ2dlciByZS1yZW5kZXJpbmdcbi8vIC0gcGFyc2VBQkMoKVxuLy9cdFx0Q2FsbGVkIGludGVybmFsbHkgYnkgZmlyZUNoYW5nZWQoKVxuLy9cdFx0cmV0dXJucyB0cnVlIGlmIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIHNpbmNlIGxhc3QgY2FsbC5cbi8vIC0gdXBkYXRlU2VsZWN0aW9uKClcbi8vXHRcdENhbGxlZCB3aGVuIHRoZSB1c2VyIGhhcyBjaGFuZ2VkIHRoZSBzZWxlY3Rpb24uIFRoaXMgY2FsbHMgdGhlIGVuZ3JhdmVyX2NvbnRyb2xsZXIgdG8gc2hvdyB0aGUgc2VsZWN0aW9uLlxuLy8gLSBmaXJlU2VsZWN0aW9uQ2hhbmdlZCgpXG4vL1x0XHRDYWxsZWQgYnkgdGhlIHRleHRhcmVhIG9iamVjdCB3aGVuIHRoZSB1c2VyIGhhcyBjaGFuZ2VkIHRoZSBzZWxlY3Rpb24uXG4vLyAtIHBhcmFtQ2hhbmdlZChlbmdyYXZlcnBhcmFtcylcbi8vXHRcdENhbGxlZCB0byBzaWduYWwgdGhhdCB0aGUgZW5ncmF2ZXIgcGFyYW1zIGhhdmUgY2hhbmdlZCwgc28gcmUtcmVuZGVyaW5nIHNob3VsZCBvY2N1ci5cbi8vIC0gZmlyZUNoYW5nZWQoKVxuLy9cdFx0Q2FsbGVkIGJ5IHRoZSB0ZXh0YXJlYSBvYmplY3Qgd2hlbiB0aGUgdXNlciBoYXMgY2hhbmdlZCBzb21ldGhpbmcuXG4vLyAtIHNldE5vdERpcnR5KClcbi8vXHRcdENhbGxlZCBieSB0aGUgY2xpZW50IGFwcCB0byByZXNldCB0aGUgZGlydHkgZmxhZ1xuLy8gLSBpc0RpcnR5KClcbi8vXHRcdFJldHVybnMgdHJ1ZSBvciBmYWxzZSwgd2hldGhlciB0aGUgdGV4dGFyZWEgY29udGFpbnMgdGhlIHNhbWUgdGV4dCB0aGF0IGl0IHN0YXJ0ZWQgd2l0aC5cbi8vIC0gaGlnaGxpZ2h0KGFiY2VsZW0pXG4vL1x0XHRDYWxsZWQgYnkgdGhlIGVuZ3JhdmVyX2NvbnRyb2xsZXIgdG8gaGlnaGxpZ2h0IGFuIGFyZWEuXG4vLyAtIHBhdXNlKGJvb2wpXG4vL1x0XHRTdG9wcyB0aGUgYXV0b21hdGljIHJlbmRlcmluZyB3aGVuIHRoZSB1c2VyIGlzIHR5cGluZy5cbi8vXG5cbnZhciBFZGl0b3IgPSBmdW5jdGlvbihlZGl0YXJlYSwgcGFyYW1zKSB7XG5cdC8vIENvcHkgYWxsIHRoZSBvcHRpb25zIHRoYXQgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaFxuXHR0aGlzLmFiY2pzUGFyYW1zID0ge307XG5cdHZhciBrZXk7XG5cdGlmIChwYXJhbXMuYWJjanNQYXJhbXMpIHtcblx0XHRmb3IgKGtleSBpbiBwYXJhbXMuYWJjanNQYXJhbXMpIHtcblx0XHRcdGlmIChwYXJhbXMuYWJjanNQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHR0aGlzLmFiY2pzUGFyYW1zW2tleV0gPSBwYXJhbXMuYWJjanNQYXJhbXNba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKHBhcmFtcy5taWRpX29wdGlvbnMpIHtcblx0XHRmb3IgKGtleSBpbiBwYXJhbXMubWlkaV9vcHRpb25zKSB7XG5cdFx0XHRpZiAocGFyYW1zLm1pZGlfb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdHRoaXMuYWJjanNQYXJhbXNba2V5XSA9IHBhcmFtcy5taWRpX29wdGlvbnNba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKHBhcmFtcy5wYXJzZXJfb3B0aW9ucykge1xuXHRcdGZvciAoa2V5IGluIHBhcmFtcy5wYXJzZXJfb3B0aW9ucykge1xuXHRcdFx0aWYgKHBhcmFtcy5wYXJzZXJfb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdHRoaXMuYWJjanNQYXJhbXNba2V5XSA9IHBhcmFtcy5wYXJzZXJfb3B0aW9uc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAocGFyYW1zLnJlbmRlcl9vcHRpb25zKSB7XG5cdFx0Zm9yIChrZXkgaW4gcGFyYW1zLnJlbmRlcl9vcHRpb25zKSB7XG5cdFx0XHRpZiAocGFyYW1zLnJlbmRlcl9vcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0dGhpcy5hYmNqc1BhcmFtc1trZXldID0gcGFyYW1zLnJlbmRlcl9vcHRpb25zW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKHBhcmFtcy5pbmRpY2F0ZV9jaGFuZ2VkKVxuXHRcdHRoaXMuaW5kaWNhdGVfY2hhbmdlZCA9IHRydWU7XG4gIGlmICh0eXBlb2YgZWRpdGFyZWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICB0aGlzLmVkaXRhcmVhID0gbmV3IEVkaXRBcmVhKGVkaXRhcmVhKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVkaXRhcmVhID0gZWRpdGFyZWE7XG4gIH1cbiAgdGhpcy5lZGl0YXJlYS5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTtcbiAgdGhpcy5lZGl0YXJlYS5hZGRDaGFuZ2VMaXN0ZW5lcih0aGlzKTtcblxuICBpZiAocGFyYW1zLmNhbnZhc19pZCkge1xuICAgIHRoaXMuZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGFyYW1zLmNhbnZhc19pZCk7XG4gIH0gZWxzZSBpZiAocGFyYW1zLnBhcGVyX2lkKSB7XG4gICAgdGhpcy5kaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwYXJhbXMucGFwZXJfaWQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKTtcbiAgICB0aGlzLmVkaXRhcmVhLmdldEVsZW0oKS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmRpdiwgdGhpcy5lZGl0YXJlYS5nZXRFbGVtKCkpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFjaykge1xuICBcdHRoaXMuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2sgPSBwYXJhbXMuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2s7XG4gIH1cblxuICBpZiAocGFyYW1zLnN5bnRoKSB7XG4gIFx0aWYgKHN1cHBvcnRzQXVkaW8oKSkge1xuXHQgICAgdGhpcy5zeW50aCA9IHtcblx0XHQgICAgZWw6IHBhcmFtcy5zeW50aC5lbCxcblx0XHQgICAgY3Vyc29yQ29udHJvbDogcGFyYW1zLnN5bnRoLmN1cnNvckNvbnRyb2wsXG5cdFx0ICAgIG9wdGlvbnM6IHBhcmFtcy5zeW50aC5vcHRpb25zXG5cdCAgICB9XG4gICAgfVxuICB9XG5cdC8vIElmIHRoZSB1c2VyIHdhbnRzIG1pZGksIHRoZW4gc3RvcmUgdGhlIGVsZW1lbnRzIHRoYXQgaXQgd2lsbCBiZSB3cml0dGVuIHRvLiBUaGUgZWxlbWVudCBjb3VsZCBlaXRoZXIgYmUgcGFzc2VkIGluIGFzIGFuIGlkLFxuXHQvLyBhbiBlbGVtZW50LCBvciBub3RoaW5nLiBJZiBub3RoaW5nIGlzIHBhc3NlZCBpbiwgdGhlbiBqdXN0IHB1dCB0aGUgbWlkaSBvbiB0b3Agb2YgdGhlIGdlbmVyYXRlZCBtdXNpYy5cblx0aWYgKHBhcmFtcy5nZW5lcmF0ZV9taWRpKSB7XG5cdCAgXHR0aGlzLmdlbmVyYXRlX21pZGkgPSBwYXJhbXMuZ2VuZXJhdGVfbWlkaTtcblx0XHRpZiAodGhpcy5hYmNqc1BhcmFtcy5nZW5lcmF0ZURvd25sb2FkKSB7XG5cdFx0XHRpZiAodHlwZW9mIHBhcmFtcy5taWRpX2Rvd25sb2FkX2lkID09PSAnc3RyaW5nJylcblx0XHRcdFx0dGhpcy5kb3dubG9hZE1pZGkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwYXJhbXMubWlkaV9kb3dubG9hZF9pZCk7XG5cdFx0XHRlbHNlIGlmIChwYXJhbXMubWlkaV9kb3dubG9hZF9pZCkgLy8gYXNzdW1lLCBpZiB0aGUgdmFyIGlzIG5vdCBhIHN0cmluZyBpdCBpcyBhbiBlbGVtZW50LiBJZiBub3QsIGl0IHdpbGwgY3Jhc2ggc29vbiBlbm91Z2guXG5cdFx0XHRcdHRoaXMuZG93bmxvYWRNaWRpID0gcGFyYW1zLm1pZGlfZG93bmxvYWRfaWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmFiY2pzUGFyYW1zLmdlbmVyYXRlSW5saW5lICE9PSBmYWxzZSkgeyAvLyBUaGUgZGVmYXVsdCBmb3IgdGhpcyBpcyB0cnVlLCBzbyB1bmRlZmluZWQgaXMgYWxzbyB0cnVlLlxuXHRcdFx0aWYgKHR5cGVvZiBwYXJhbXMubWlkaV9pZCA9PT0gJ3N0cmluZycpXG5cdFx0XHRcdHRoaXMuaW5saW5lTWlkaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBhcmFtcy5taWRpX2lkKTtcblx0XHRcdGVsc2UgaWYgKHBhcmFtcy5taWRpX2lkKSAvLyBhc3N1bWUsIGlmIHRoZSB2YXIgaXMgbm90IGEgc3RyaW5nIGl0IGlzIGFuIGVsZW1lbnQuIElmIG5vdCwgaXQgd2lsbCBjcmFzaCBzb29uIGVub3VnaC5cblx0XHRcdFx0dGhpcy5pbmxpbmVNaWRpID0gcGFyYW1zLm1pZGlfaWQ7XG5cdFx0fVxuXHR9XG5cbiAgaWYgKHBhcmFtcy5nZW5lcmF0ZV93YXJuaW5ncyB8fCBwYXJhbXMud2FybmluZ3NfaWQpIHtcbiAgICBpZiAocGFyYW1zLndhcm5pbmdzX2lkKSB7XG4gICAgICB0aGlzLndhcm5pbmdzZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGFyYW1zLndhcm5pbmdzX2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53YXJuaW5nc2RpdiA9IHRoaXMuZGl2O1xuICAgIH1cbiAgfVxuXG4gIHRoaXMub25jaGFuZ2VDYWxsYmFjayA9IHBhcmFtcy5vbmNoYW5nZTtcblxuICBpZiAocGFyYW1zLmd1aSkge1xuICAgIHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdGFyZWEpO1xuICAgIHRoaXMuYWJjanNQYXJhbXMuZWRpdGFibGUgPSB0cnVlO1xuICB9XG4gIHRoaXMub2xkdCA9IFwiXCI7XG4gIHRoaXMuYlJlZW50cnkgPSBmYWxzZTtcbiAgdGhpcy5wYXJzZUFCQygpO1xuICB0aGlzLm1vZGVsQ2hhbmdlZCgpO1xuXG4gIHRoaXMuYWRkQ2xhc3NOYW1lID0gZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgdmFyIGhhc0NsYXNzTmFtZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnRDbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZTtcbiAgICAgIHJldHVybiAoZWxlbWVudENsYXNzTmFtZS5sZW5ndGggPiAwICYmIChlbGVtZW50Q2xhc3NOYW1lID09PSBjbGFzc05hbWUgfHxcbiAgICAgICAgbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xhc3NOYW1lICsgXCIoXFxcXHN8JClcIikudGVzdChlbGVtZW50Q2xhc3NOYW1lKSkpO1xuICAgIH07XG5cbiAgICBpZiAoIWhhc0NsYXNzTmFtZShlbGVtZW50LCBjbGFzc05hbWUpKVxuICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gKGVsZW1lbnQuY2xhc3NOYW1lID8gJyAnIDogJycpICsgY2xhc3NOYW1lO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9O1xuXG4gIHRoaXMucmVtb3ZlQ2xhc3NOYW1lID0gZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSBwYXJzZUNvbW1vbi5zdHJpcChlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgbmV3IFJlZ0V4cChcIihefFxcXFxzKylcIiArIGNsYXNzTmFtZSArIFwiKFxcXFxzK3wkKVwiKSwgJyAnKSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH07XG5cbiAgdGhpcy5zZXRSZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG5cdCAgdmFyIHJlYWRvbmx5Q2xhc3MgPSAnYWJjX3RleHRhcmVhX3JlYWRvbmx5Jztcblx0ICB2YXIgZWwgPSB0aGlzLmVkaXRhcmVhLmdldEVsZW0oKTtcbiAgICBpZiAocmVhZE9ubHkpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAneWVzJyk7XG5cdCAgdGhpcy5hZGRDbGFzc05hbWUoZWwsIHJlYWRvbmx5Q2xhc3MpO1xuXHR9IGVsc2Uge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuXHQgIHRoaXMucmVtb3ZlQ2xhc3NOYW1lKGVsLCByZWFkb25seUNsYXNzKTtcbiAgICB9XG4gIH07XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLnJlbmRlclR1bmUgPSBmdW5jdGlvbihhYmMsIHBhcmFtcywgZGl2KSB7XG4gIHZhciB0dW5lYm9vayA9IG5ldyBUdW5lQm9vayhhYmMpO1xuICB2YXIgYWJjUGFyc2VyID0gUGFyc2UoKTtcbiAgYWJjUGFyc2VyLnBhcnNlKHR1bmVib29rLnR1bmVzWzBdLmFiYywgcGFyYW1zLCB0dW5lYm9vay50dW5lc1swXS5zdGFydFBvcyAtIHR1bmVib29rLmhlYWRlci5sZW5ndGgpOyAvL1RPRE8gaGFuZGxlIG11bHRpcGxlIHR1bmVzXG4gIHZhciB0dW5lID0gYWJjUGFyc2VyLmdldFR1bmUoKTtcbiAgdmFyIGVuZ3JhdmVyX2NvbnRyb2xsZXIgPSBuZXcgRW5ncmF2ZXJDb250cm9sbGVyKGRpdiwgdGhpcy5hYmNqc1BhcmFtcyk7XG4gIGVuZ3JhdmVyX2NvbnRyb2xsZXIuZW5ncmF2ZUFCQyh0dW5lKTtcbn07XG5cbkVkaXRvci5wcm90b3R5cGUucmVkcmF3TWlkaSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5nZW5lcmF0ZV9taWRpICYmICF0aGlzLm1pZGlQYXVzZSkge1xuXHRcdHZhciBldmVudCA9IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoXCJnZW5lcmF0ZU1pZGlcIiwge1xuXHRcdFx0ZGV0YWlsOiB7XG5cdFx0XHRcdHR1bmVzOiB0aGlzLnR1bmVzLFxuXHRcdFx0XHRhYmNqc1BhcmFtczogdGhpcy5hYmNqc1BhcmFtcyxcblx0XHRcdFx0ZG93bmxvYWRNaWRpRWw6IHRoaXMuZG93bmxvYWRNaWRpLFxuXHRcdFx0XHRpbmxpbmVNaWRpRWw6IHRoaXMuaW5saW5lTWlkaSxcblx0XHRcdFx0ZW5ncmF2aW5nRWw6IHRoaXMuZGl2XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0d2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHR9XG5cdGlmICh0aGlzLnN5bnRoKSB7XG5cdFx0aWYgKCF0aGlzLnN5bnRoLnN5bnRoQ29udHJvbCkge1xuXHRcdFx0dGhpcy5zeW50aC5zeW50aENvbnRyb2wgPSBuZXcgU3ludGhDb250cm9sbGVyKCk7XG5cdFx0XHR0aGlzLnN5bnRoLnN5bnRoQ29udHJvbC5sb2FkKHRoaXMuc3ludGguZWwsIHRoaXMuc3ludGguY3Vyc29yQ29udHJvbCwgdGhpcy5zeW50aC5vcHRpb25zKTtcblx0XHR9XG5cdFx0dGhpcy5zeW50aC5zeW50aENvbnRyb2wuc2V0VHVuZSh0aGlzLnR1bmVzWzBdLCBmYWxzZSk7XG5cdH1cbn07XG5cbkVkaXRvci5wcm90b3R5cGUubW9kZWxDaGFuZ2VkID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLnR1bmVzID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5kb3dubG9hZE1pZGkgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLmRvd25sb2FkTWlkaS5pbm5lckhUTUwgPSBcIlwiO1xuICAgIGlmICh0aGlzLmlubGluZU1pZGkgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLmlubGluZU1pZGkuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB0aGlzLmRpdi5pbm5lckhUTUwgPSBcIlwiO1xuXHRyZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5iUmVlbnRyeSlcbiAgICByZXR1cm47IC8vIFRPRE8gaXMgdGhpcyBsaWtlbHk/IG1heWJlLCBpZiB3ZSByZXdyaXRlIGFiYyBpbW1lZGlhdGVseSB3LyBhYmMyYWJjXG4gIHRoaXMuYlJlZW50cnkgPSB0cnVlO1xuICB0aGlzLnRpbWVySWQgPSBudWxsO1xuICB0aGlzLmRpdi5pbm5lckhUTUwgPSBcIlwiO1xuICB0aGlzLmVuZ3JhdmVyX2NvbnRyb2xsZXIgPSBuZXcgRW5ncmF2ZXJDb250cm9sbGVyKHRoaXMuZGl2LCB0aGlzLmFiY2pzUGFyYW1zKTtcbiAgdGhpcy5lbmdyYXZlcl9jb250cm9sbGVyLmVuZ3JhdmVBQkModGhpcy50dW5lcyk7XG5cdHRoaXMudHVuZXNbMF0uZW5ncmF2ZXIgPSB0aGlzLmVuZ3JhdmVyX2NvbnRyb2xsZXI7XHQvLyBUT0RPLVBFUjogV2UgYWN0dWFsbHkgd2FudCBhbiBvdXRwdXQgb2JqZWN0IGZvciBlYWNoIHR1bmUsIG5vdCB0aGUgZW50aXJlIGNvbnRyb2xsZXIuIFdoZW4gcmVmYWN0b3JpbmcsIGRvbid0IHNhdmUgZGF0YSBpbiB0aGUgY29udHJvbGxlci5cblx0dGhpcy5yZWRyYXdNaWRpKCk7XG5cbiAgaWYgKHRoaXMud2FybmluZ3NkaXYpIHtcbiAgICB0aGlzLndhcm5pbmdzZGl2LmlubmVySFRNTCA9ICh0aGlzLndhcm5pbmdzKSA/IHRoaXMud2FybmluZ3Muam9pbihcIjxiciAvPlwiKSA6IFwiTm8gZXJyb3JzXCI7XG4gIH1cbiAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgdmFyIHRleHRwcmludGVyID0gbmV3IFRleHRQcmludGVyKHRoaXMudGFyZ2V0LCB0cnVlKTtcbiAgICB0ZXh0cHJpbnRlci5wcmludEFCQyh0aGlzLnR1bmVzWzBdKTsgLy9UT0RPIGhhbmRsZSBtdWx0aXBsZSB0dW5lc1xuICB9XG4gIHRoaXMuZW5ncmF2ZXJfY29udHJvbGxlci5hZGRTZWxlY3RMaXN0ZW5lcih0aGlzLmhpZ2hsaWdodC5iaW5kKHRoaXMpKTtcbiAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKTtcbiAgdGhpcy5iUmVlbnRyeSA9IGZhbHNlO1xufTtcblxuLy8gQ2FsbCB0aGlzIHRvIHJlcGFyc2UgaW4gcmVzcG9uc2UgdG8gdGhlIHByaW50aW5nIHBhcmFtZXRlcnMgY2hhbmdpbmdcbkVkaXRvci5wcm90b3R5cGUucGFyYW1DaGFuZ2VkID0gZnVuY3Rpb24oZW5ncmF2ZXJQYXJhbXMpIHtcblx0aWYgKGVuZ3JhdmVyUGFyYW1zKSB7XG5cdFx0Zm9yICh2YXIga2V5IGluIGVuZ3JhdmVyUGFyYW1zKSB7XG5cdFx0XHRpZiAoZW5ncmF2ZXJQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHR0aGlzLmFiY2pzUGFyYW1zW2tleV0gPSBlbmdyYXZlclBhcmFtc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aGlzLm9sZHQgPSBcIlwiO1xuXHR0aGlzLmZpcmVDaGFuZ2VkKCk7XG59O1xuXG4vLyByZXR1cm4gdHJ1ZSBpZiB0aGUgbW9kZWwgaGFzIGNoYW5nZWRcbkVkaXRvci5wcm90b3R5cGUucGFyc2VBQkMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSB0aGlzLmVkaXRhcmVhLmdldFN0cmluZygpO1xuICBpZiAodD09PXRoaXMub2xkdCkge1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGhpcy5vbGR0ID0gdDtcbiAgaWYgKHQgPT09IFwiXCIpIHtcblx0dGhpcy50dW5lcyA9IHVuZGVmaW5lZDtcblx0dGhpcy53YXJuaW5ncyA9IFwiXCI7XG5cdHJldHVybiB0cnVlO1xuICB9XG4gIHZhciB0dW5lYm9vayA9IG5ldyBUdW5lQm9vayh0KTtcblxuICB0aGlzLnR1bmVzID0gW107XG4gIHRoaXMuc3RhcnRQb3MgPSBbXTtcbiAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICBmb3IgKHZhciBpPTA7IGk8dHVuZWJvb2sudHVuZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYWJjUGFyc2VyID0gbmV3IFBhcnNlKCk7XG4gICAgYWJjUGFyc2VyLnBhcnNlKHR1bmVib29rLnR1bmVzW2ldLmFiYywgdGhpcy5hYmNqc1BhcmFtcywgdHVuZWJvb2sudHVuZXNbaV0uc3RhcnRQb3MgLSB0dW5lYm9vay5oZWFkZXIubGVuZ3RoKTtcbiAgICB0aGlzLnR1bmVzW2ldID0gYWJjUGFyc2VyLmdldFR1bmUoKTtcblx0ICB0aGlzLnN0YXJ0UG9zW2ldID0gdHVuZWJvb2sudHVuZXNbaV0uc3RhcnRQb3M7XG4gICAgdmFyIHdhcm5pbmdzID0gYWJjUGFyc2VyLmdldFdhcm5pbmdzKCkgfHwgW107XG4gICAgZm9yICh2YXIgaj0wOyBqPHdhcm5pbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICB0aGlzLndhcm5pbmdzLnB1c2god2FybmluZ3Nbal0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkVkaXRvci5wcm90b3R5cGUudXBkYXRlU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzZWxlY3Rpb24gPSB0aGlzLmVkaXRhcmVhLmdldFNlbGVjdGlvbigpO1xuICB0cnkge1xuICAgIHRoaXMuZW5ncmF2ZXJfY29udHJvbGxlci5yYW5nZUhpZ2hsaWdodChzZWxlY3Rpb24uc3RhcnQsIHNlbGVjdGlvbi5lbmQpO1xuICB9IGNhdGNoIChlKSB7fSAvLyBtYXliZSBwcmludGVyIGlzbid0IGRlZmluZWQgeWV0P1xuXHRpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFjaylcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrKHNlbGVjdGlvbi5zdGFydCwgc2VsZWN0aW9uLmVuZCk7XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLmZpcmVTZWxlY3Rpb25DaGFuZ2VkID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLnNldERpcnR5U3R5bGUgPSBmdW5jdGlvbihpc0RpcnR5KSB7XG5cdGlmICh0aGlzLmluZGljYXRlX2NoYW5nZWQgPT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm47XG4gIHZhciBhZGRDbGFzc05hbWUgPSBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICB2YXIgaGFzQ2xhc3NOYW1lID0gZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudENsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lO1xuICAgICAgcmV0dXJuIChlbGVtZW50Q2xhc3NOYW1lLmxlbmd0aCA+IDAgJiYgKGVsZW1lbnRDbGFzc05hbWUgPT09IGNsYXNzTmFtZSB8fFxuICAgICAgICBuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBjbGFzc05hbWUgKyBcIihcXFxcc3wkKVwiKS50ZXN0KGVsZW1lbnRDbGFzc05hbWUpKSk7XG4gICAgfTtcblxuICAgIGlmICghaGFzQ2xhc3NOYW1lKGVsZW1lbnQsIGNsYXNzTmFtZSkpXG4gICAgICBlbGVtZW50LmNsYXNzTmFtZSArPSAoZWxlbWVudC5jbGFzc05hbWUgPyAnICcgOiAnJykgKyBjbGFzc05hbWU7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH07XG5cbiAgdmFyIHJlbW92ZUNsYXNzTmFtZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gcGFyc2VDb21tb24uc3RyaXAoZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShcbiAgICAgIG5ldyBSZWdFeHAoXCIoXnxcXFxccyspXCIgKyBjbGFzc05hbWUgKyBcIihcXFxccyt8JClcIiksICcgJykpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9O1xuXG5cdHZhciByZWFkb25seUNsYXNzID0gJ2FiY190ZXh0YXJlYV9kaXJ0eSc7XG5cdHZhciBlbCA9IHRoaXMuZWRpdGFyZWEuZ2V0RWxlbSgpO1xuXHRpZiAoaXNEaXJ0eSkge1xuXHRcdGFkZENsYXNzTmFtZShlbCwgcmVhZG9ubHlDbGFzcyk7XG5cdH0gZWxzZSB7XG5cdFx0cmVtb3ZlQ2xhc3NOYW1lKGVsLCByZWFkb25seUNsYXNzKTtcbiAgICB9XG59O1xuXG4vLyBjYWxsIHdoZW4gYWJjIHRleHQgaXMgY2hhbmdlZCBhbmQgbmVlZHMgcmUtcGFyc2luZ1xuRWRpdG9yLnByb3RvdHlwZS5maXJlQ2hhbmdlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5iSXNQYXVzZWQpXG4gICAgcmV0dXJuO1xuICBpZiAodGhpcy5wYXJzZUFCQygpKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLnRpbWVySWQpXHQvLyBJZiB0aGUgdXNlciBpcyBzdGlsbCB0eXBpbmcsIGNhbmNlbCB0aGUgdXBkYXRlXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcklkKTtcbiAgICB0aGlzLnRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYubW9kZWxDaGFuZ2VkKCk7XG4gICAgfSwgMzAwKTtcdC8vIElzIHRoaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbiByZXNwb25zaXZlbmVzcyBhbmQgbm90IHJlZHJhd2luZyB0b28gbXVjaD9cblx0ICB2YXIgaXNEaXJ0eSA9IHRoaXMuaXNEaXJ0eSgpO1xuXHQgIGlmICh0aGlzLndhc0RpcnR5ICE9PSBpc0RpcnR5KSB7XG5cdFx0ICB0aGlzLndhc0RpcnR5ID0gaXNEaXJ0eTtcblx0XHQgIHRoaXMuc2V0RGlydHlTdHlsZShpc0RpcnR5KTtcblx0ICB9XG5cdCAgaWYgKHRoaXMub25jaGFuZ2VDYWxsYmFjaylcblx0XHQgIHRoaXMub25jaGFuZ2VDYWxsYmFjayh0aGlzKTtcblx0ICB9XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLnNldE5vdERpcnR5ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuZWRpdGFyZWEuaW5pdGlhbFRleHQgPSB0aGlzLmVkaXRhcmVhLmdldFN0cmluZygpO1xuXHR0aGlzLndhc0RpcnR5ID0gZmFsc2U7XG5cdHRoaXMuc2V0RGlydHlTdHlsZShmYWxzZSk7XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLmlzRGlydHkgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuaW5kaWNhdGVfY2hhbmdlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRoaXMuZWRpdGFyZWEuaW5pdGlhbFRleHQgIT09IHRoaXMuZWRpdGFyZWEuZ2V0U3RyaW5nKCk7XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLmhpZ2hsaWdodCA9IGZ1bmN0aW9uKGFiY2VsZW0sIHR1bmVOdW1iZXIsIGNsYXNzZXMpIHtcblx0Ly8gVE9ETy1QRVI6IFRoZSBtYXJrZXIgYXBwZWFycyB0byBnZXQgb2ZmIGJ5IG9uZSBmb3IgZWFjaCB0dW5lIHBhcnNlZC4gSSdtIG5vdCBzdXJlIHdoeSwgYnV0IGFkZGluZyB0aGUgdHVuZU51bWJlciBpbiBjb3JyZWN0cyBpdCBmb3IgdGhlIHRpbWUgYmVpbmcuXG4vL1x0dmFyIG9mZnNldCA9ICh0dW5lTnVtYmVyICE9PSB1bmRlZmluZWQpID8gdGhpcy5zdGFydFBvc1t0dW5lTnVtYmVyXSArIHR1bmVOdW1iZXIgOiAwO1xuXG4gIHRoaXMuZWRpdGFyZWEuc2V0U2VsZWN0aW9uKGFiY2VsZW0uc3RhcnRDaGFyLCBhYmNlbGVtLmVuZENoYXIpO1xuXHRpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFjaylcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrKGFiY2VsZW0uc3RhcnRDaGFyLCBhYmNlbGVtLmVuZENoYXIpO1xufTtcblxuRWRpdG9yLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKHNob3VsZFBhdXNlKSB7XG5cdHRoaXMuYklzUGF1c2VkID0gc2hvdWxkUGF1c2U7XG5cdGlmICghc2hvdWxkUGF1c2UpXG5cdFx0dGhpcy5maXJlQ2hhbmdlZCgpO1xufTtcblxuRWRpdG9yLnByb3RvdHlwZS5taWxsaXNlY29uZHNQZXJNZWFzdXJlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN5bnRoLnN5bnRoQ29udHJvbC52aXN1YWxPYmoubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSgpO1xufTtcblxuRWRpdG9yLnByb3RvdHlwZS5wYXVzZU1pZGkgPSBmdW5jdGlvbihzaG91bGRQYXVzZSkge1xuXHR0aGlzLm1pZGlQYXVzZSA9IHNob3VsZFBhdXNlO1xuXHRpZiAoIXNob3VsZFBhdXNlKVxuXHRcdHRoaXMucmVkcmF3TWlkaSgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFZGl0b3I7XG4iLCJ2YXIgdmVyc2lvbiA9IHJlcXVpcmUoJy4vdmVyc2lvbicpO1xudmFyIGFuaW1hdGlvbiA9IHJlcXVpcmUoJy4vc3JjL2FwaS9hYmNfYW5pbWF0aW9uJyk7XG52YXIgdHVuZUJvb2sgPSByZXF1aXJlKCcuL3NyYy9hcGkvYWJjX3R1bmVib29rJyk7XG5cbnZhciBhYmNqcyA9IHt9O1xuXG5hYmNqcy5zaWduYXR1cmUgPSBcImFiY2pzLWJhc2ljIHZcIiArIHZlcnNpb247XG5cbk9iamVjdC5rZXlzKGFuaW1hdGlvbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdGFiY2pzW2tleV0gPSBhbmltYXRpb25ba2V5XTtcbn0pO1xuXG5PYmplY3Qua2V5cyh0dW5lQm9vaykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdGFiY2pzW2tleV0gPSB0dW5lQm9va1trZXldO1xufSk7XG5cbmFiY2pzLnJlbmRlckFiYyA9IHJlcXVpcmUoJy4vc3JjL2FwaS9hYmNfdHVuZWJvb2tfc3ZnJyk7XG5hYmNqcy5UaW1pbmdDYWxsYmFja3MgPSByZXF1aXJlKCcuL3NyYy9hcGkvYWJjX3RpbWluZ19jYWxsYmFja3MnKTtcblxudmFyIGdseXBocyA9IHJlcXVpcmUoJy4vc3JjL3dyaXRlL2FiY19nbHlwaHMnKTtcbmFiY2pzLnNldEdseXBoID0gZ2x5cGhzLnNldFN5bWJvbDtcblxudmFyIENyZWF0ZVN5bnRoID0gcmVxdWlyZSgnLi9zcmMvc3ludGgvY3JlYXRlLXN5bnRoJyk7XG52YXIgaW5zdHJ1bWVudEluZGV4VG9OYW1lID0gcmVxdWlyZSgnLi9zcmMvc3ludGgvaW5zdHJ1bWVudC1pbmRleC10by1uYW1lJyk7XG52YXIgcGl0Y2hUb05vdGVOYW1lID0gcmVxdWlyZSgnLi9zcmMvc3ludGgvcGl0Y2gtdG8tbm90ZS1uYW1lJyk7XG52YXIgU3ludGhTZXF1ZW5jZSA9IHJlcXVpcmUoJy4vc3JjL3N5bnRoL3N5bnRoLXNlcXVlbmNlJyk7XG52YXIgQ3JlYXRlU3ludGhDb250cm9sID0gcmVxdWlyZSgnLi9zcmMvc3ludGgvY3JlYXRlLXN5bnRoLWNvbnRyb2wnKTtcbnZhciByZWdpc3RlckF1ZGlvQ29udGV4dCA9IHJlcXVpcmUoJy4vc3JjL3N5bnRoL3JlZ2lzdGVyLWF1ZGlvLWNvbnRleHQnKTtcbnZhciBhY3RpdmVBdWRpb0NvbnRleHQgPSByZXF1aXJlKCcuL3NyYy9zeW50aC9hY3RpdmUtYXVkaW8tY29udGV4dCcpO1xudmFyIHN1cHBvcnRzQXVkaW8gPSByZXF1aXJlKCcuL3NyYy9zeW50aC9zdXBwb3J0cy1hdWRpbycpO1xudmFyIHBsYXlFdmVudCA9IHJlcXVpcmUoJy4vc3JjL3N5bnRoL3BsYXktZXZlbnQnKTtcbnZhciBTeW50aENvbnRyb2xsZXIgPSByZXF1aXJlKCcuL3NyYy9zeW50aC9zeW50aC1jb250cm9sbGVyJyk7XG5cbmFiY2pzLnN5bnRoID0ge1xuXHRDcmVhdGVTeW50aDogQ3JlYXRlU3ludGgsXG5cdGluc3RydW1lbnRJbmRleFRvTmFtZTogaW5zdHJ1bWVudEluZGV4VG9OYW1lLFxuXHRwaXRjaFRvTm90ZU5hbWU6IHBpdGNoVG9Ob3RlTmFtZSxcblx0U3ludGhDb250cm9sbGVyOiBTeW50aENvbnRyb2xsZXIsXG5cdFN5bnRoU2VxdWVuY2U6IFN5bnRoU2VxdWVuY2UsXG5cdENyZWF0ZVN5bnRoQ29udHJvbDogQ3JlYXRlU3ludGhDb250cm9sLFxuXHRyZWdpc3RlckF1ZGlvQ29udGV4dDogcmVnaXN0ZXJBdWRpb0NvbnRleHQsXG5cdGFjdGl2ZUF1ZGlvQ29udGV4dDogYWN0aXZlQXVkaW9Db250ZXh0LFxuXHRzdXBwb3J0c0F1ZGlvOiBzdXBwb3J0c0F1ZGlvLFxuXHRwbGF5RXZlbnQ6IHBsYXlFdmVudFxufTtcblxudmFyIGVkaXRvciA9IHJlcXVpcmUoJy4vc3JjL2VkaXQvYWJjX2VkaXRvcicpO1xuYWJjanNbJ0VkaXRvciddID0gZWRpdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFiY2pzO1xuIiwiaW1wb3J0IHsgQXBwLCBNYXJrZG93blBvc3RQcm9jZXNzb3IsIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLCBNYXJrZG93blJlbmRlcmVyLCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IHNpZ25hdHVyZSwgcmVuZGVyQWJjIH0gZnJvbSAnYWJjanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXVzaWNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xyXG5cdHN0YXRpYyBwb3N0cHJvY2Vzc29yOiBNYXJrZG93blBvc3RQcm9jZXNzb3IgPSAoZWw6IEhUTUxFbGVtZW50LCBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQpID0+IHtcclxuXHRcdC8vIEFzc3VtcHRpb246IE9uZSBzZWN0aW9uIGFsd2F5cyBjb250YWlucyBvbmx5IHRoZSBjb2RlIGJsb2NrXHJcblxyXG5cdFx0Y29uc3QgYmxvY2tUb1JlcGxhY2UgPSBlbC5xdWVyeVNlbGVjdG9yKCdwcmUnKVxyXG5cdFx0aWYgKCFibG9ja1RvUmVwbGFjZSkgcmV0dXJuXHJcblxyXG5cdFx0Y29uc3QgbXVzaWNCbG9jayA9IGJsb2NrVG9SZXBsYWNlLnF1ZXJ5U2VsZWN0b3IoJ2NvZGUubGFuZ3VhZ2UtbXVzaWMtYWJjJylcclxuXHRcdGlmICghbXVzaWNCbG9jaykgcmV0dXJuXHJcblxyXG5cdFx0Y29uc3Qgc291cmNlID0gbXVzaWNCbG9jay50ZXh0Q29udGVudFxyXG5cdFx0Y29uc3QgZGVzdGluYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG5cdFx0cmVuZGVyQWJjKGRlc3RpbmF0aW9uLCBzb3VyY2UsIHtcclxuXHRcdFx0YWRkX2NsYXNzZXM6IHRydWUsXHJcblx0XHRcdHJlc3BvbnNpdmU6ICdyZXNpemUnXHJcblx0XHR9KVxyXG5cclxuXHRcdGVsLnJlcGxhY2VDaGlsZChkZXN0aW5hdGlvbiwgYmxvY2tUb1JlcGxhY2UpXHJcblx0fVxyXG5cclxuXHRvbmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZGluZyBhYmNqcyBwbHVnaW4nKTtcclxuXHRcdE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyUG9zdFByb2Nlc3NvcihNdXNpY1BsdWdpbi5wb3N0cHJvY2Vzc29yKVxyXG5cdH1cclxuXHJcblx0b251bmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygndW5sb2FkaW5nIGFiY2pzIHBsdWdpbicpO1xyXG5cdFx0TWFya2Rvd25QcmV2aWV3UmVuZGVyZXIudW5yZWdpc3RlclBvc3RQcm9jZXNzb3IoTXVzaWNQbHVnaW4ucG9zdHByb2Nlc3NvcilcclxuXHR9XHJcbn1cclxuIl0sIm5hbWVzIjpbIlRpbWluZ0NhbGxiYWNrcyIsInBhcnNlQ29tbW9uIiwidHJhbnNwb3NlIiwicGFyc2VEaXJlY3RpdmUiLCJwYXJzZUtleVZvaWNlIiwic3BhY2luZyIsIlR1bmUiLCJUb2tlbml6ZXIiLCJQYXJzZUhlYWRlciIsIndyYXAiLCJQYXJzZSIsIlJlbGF0aXZlRWxlbWVudCIsIkFic29sdXRlRWxlbWVudCIsImdseXBocyIsInNwcmludGYiLCJUaWVFbGVtIiwiRHluYW1pY0RlY29yYXRpb24iLCJDcmVzY2VuZG9FbGVtIiwiRGVjb3JhdGlvbiIsIlN0YWZmR3JvdXBFbGVtZW50IiwiVm9pY2VFbGVtZW50IiwiY3JlYXRlQ2xlZiIsImNyZWF0ZUtleVNpZ25hdHVyZSIsImNyZWF0ZVRpbWVTaWduYXR1cmUiLCJCcmFjZUVsZW0iLCJFbmRpbmdFbGVtIiwiVGVtcG9FbGVtZW50IiwiQmVhbUVsZW0iLCJUcmlwbGV0RWxlbSIsIlN2ZyIsInJlcXVpcmUkJDAiLCJSZW5kZXJlciIsIkFic3RyYWN0RW5ncmF2ZXIiLCJFbmdyYXZlckNvbnRyb2xsZXIiLCJ0dW5lYm9vayIsInNvdW5kc0NhY2hlIiwiaW5zdHJ1bWVudEluZGV4VG9OYW1lIiwiYWN0aXZlQXVkaW9Db250ZXh0IiwicmVnaXN0ZXJBdWRpb0NvbnRleHQiLCJzZXF1ZW5jZSIsImZsYXR0ZW4iLCJwaXRjaFRvTm90ZU5hbWUiLCJnZXROb3RlIiwiY3JlYXRlTm90ZU1hcCIsImRvd25sb2FkQnVmZmVyIiwic3VwcG9ydHNBdWRpbyIsIlN5bnRoU2VxdWVuY2UiLCJDcmVhdGVTeW50aCIsIkNyZWF0ZVN5bnRoQ29udHJvbCIsIlN5bnRoQ29udHJvbGxlciIsIlRleHRQcmludGVyIiwidmVyc2lvbiIsImFuaW1hdGlvbiIsInR1bmVCb29rIiwicmVxdWlyZSQkMSIsInBsYXlFdmVudCIsImVkaXRvciIsIk1hcmtkb3duUHJldmlld1JlbmRlcmVyIiwicmVuZGVyQWJjIiwiUGx1Z2luIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUks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SSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNuSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUM5SCxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNoSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxN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SSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQ3JDO0FBQ0EsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ25GLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDL0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3pFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQy9ELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvQyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUN0SCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQy9DLElBQUksSUFBSSxDQUFD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QUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEYsU0FBUyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RixTQUFTLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdkUsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2RSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEY7QUFDQSxLQUFLLE9BQU8sQ0FBQyxPQUFP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QUFHLEVBQUUsQ0FBQztBQUNuQjtBQUNBLElBQUksUUFBUSxHQUFHO0FBQ2YsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNQLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDUixDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNQLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDUixDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNQLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDUCxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNSLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDUCxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNSLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDUCxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ1QsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUNULENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDUixDQUFDLENBQUM7QUFDRixJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0UsSUFBSSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFO0FBQzNGLENBQUMsSUFBSSxDQUFDLGNB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QUUsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFO0FBQ2hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsTUFBTTtBQUNULEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSCxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2QyxFQUFFLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUMxQixJQUFJLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELElBQUksUUFBUSxJQUFJLGVB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QztBQUM1QyxFQUFFLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLEVBQUUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QyxFQUFFLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUMsRUFBRSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQyxFQUFFLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUMsRUFBRSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQyxFQUFFLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUM7QUFDQSxFQUFFLElBQUksSUFBSSxHQUFHO0FBQ2IsR0FBRyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDeEYsR0FBRyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDekYsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0YsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0YsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0YsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0YsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0Y7QUFDQSxHQUFHLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQzdFLEdBQUcsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDOUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUNoRixHQUFHLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ2hGLEdBQUcsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDaEYsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUMvRSxHQUFHLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ2hGO0FBQ0EsR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ2pFLEdBQUcsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUNuRSxHQUFHLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDckUsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ3JFLEdBQUcsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUNyRSxHQUFHLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDcEUsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ3JFO0FBQ0EsR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDdEQsR0FBRyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDeEQsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDekQsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDMUQsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDMUQsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDekQsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDMUQ7QUFDQSxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQzNDLEdBQUcsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDN0MsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUM5QyxHQUFHLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQzlDLEdBQUcsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDL0MsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUM5QyxHQUFHLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQy9DO0FBQ0EsR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ2hDLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUNqQyxHQUFHLE1BQU0sRUFBRSxFQUFFLFNBQVMs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UUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxHQUFHLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNyRCxHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxHQUFHLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNyRDtBQUNBLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUM3RCxHQUFHLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDOUQsR0FBRyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ2hFLEdBQUcsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNoRSxHQUFHLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDL0QsR0FBRyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ2hFLEdBQUcsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUMvRDtBQUNBLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDdkUsR0FBRyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN4RSxHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQzFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDMUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUMxRSxHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQzFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDekU7QUFDQSxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNqRixHQUFHLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNsRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDL0IsR0FBRyxJQUFJLEVBQUUsRUFBRTtBQUNYLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDekMsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUU7QUFDckIsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDbkQsR0FBRyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDekYsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLE9BQU9DLGFBQVMsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN6RixFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxTQUFTLEdBQUc7QUFDakIsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNoRCxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDcEQsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNwRCxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDakQsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNqRCxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDbEQsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2xELEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNuRCxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzVDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5QyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEQsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xELEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRCxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEQsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRCxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5QyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDOUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzlDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUMvQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDL0MsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQy9DLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUMvQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzdDLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5QyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDOUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzlDLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5QyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2pELEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNqRCxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDakQsRUFBRSxRQUFRLEVBQUUs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QUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDM0MsTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLE1BQU07QUFDN0MsTUFBTTtBQUNOLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RSxPQUFPLE1BQU07QUFDYixNQUFNO0FBQ04sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzNELE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3BDLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLE1BQU07QUFDTixLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUNySyxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RELE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLE1BQU07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QUFFLFFBQVEsVUFBVTtBQUNwQixHQUFHLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsR0FBRyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RCxHQUFHLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsR0FBRyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRCxHQUFHLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekQsR0FBRyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEdB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QUFJLEtBQUssR0FBRyxDQUFDO0FBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNiLElBQUksS0FBSyxHQUFHLENBQUM7QUFDYixJQUFJLEtBQUssR0FBRyxDQUFDO0FBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNiLElBQUksS0FBSyxHQUFHLENBQUM7QUFDYixJQUFJLEtBQUssR0FBRyxDQUFDO0FBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNiLElBQUksS0FBSyxHQUFHLENBQUM7QUFDYixJQUFJLEtBQUssR0FBRyxDQUFDO0FBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNiLElBQUksS0FBSyxHQUFHLENBQUM7QUFDYixJQUFJLEtBQUssR0FBRztBQUNaLEtBQUssSUFBSSxJQUFJLEtBQUssU0FBUztBQUMzQixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEIsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlELEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FBQ3JDLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELEtBQUssTUFBTTtBQUNYLElBQUk7QUFDSixLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSwyQkFBMkIsR0FBRyxHQUFHLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsRyxJQUFJO0FBQ0osR0FBRztBQUNILEVB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Q0EsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUosSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDMUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQixJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQixJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0QixJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BELElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM5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RyxDQUFDLENBQUM7QUFDZCxHQUFHLE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRztBQUNwRixJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ1QsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFELEdBQUc7QUFDSCxFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxPQUFPLEdBQUc7QUFDZixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQy9HLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUN6RixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQzlFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUN6RixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNwRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQy9HLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUN6RixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNwRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDekYsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDcEcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQ3ZELEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDOUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQ3RCLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUN0QixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDdEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUM1QyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNwRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNqQztBQUNBO0FBQ0EsRUFBRSxDQUFDO0FBQ0gsQ0FBQyxJQUFJLFFBQVEsR0FBRztBQUNoQixFQUFFLEdBQUcsRUFBRSxHQUFHO0FBQ1YsRUFBRSxHQUFHLEVBQUUsR0FBRztBQUNWLEVBQUUsR0FBRyxFQUFFLEdBQUc7QUFDVixFQUFFLENBQUM7QUFDSCxDQUFDLElBQUksUUFBUSxHQUFHO0FBQ2hCLEVBQUUsS0FBSyxFQUFFLEdBQUc7QUFDWixFQUFFLEtBQUssRUFBRSxHQUFHO0FBQ1osRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNaLEVBQUUsS0FBSyxFQUFFLEdBQUc7QUFDWixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNoSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNoSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNwSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNuSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNsSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNqSixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUc7QUFDdEksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN2SSxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxHQUFHLEVBQUU7QUFDdEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNuQyxFQUFFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFQSxVQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUNwQyxHQUFHLElBQUksR0FBRyxLQUFLLElBQUk7QUFDbkIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ1osUUFBUTtBQUNSLElBQUksSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTO0FBQ3ZCLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVCxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxLQUFLLElBQUksQ0FBQyxLQUFLLFNBQVM7QUFDeEIsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsVUFBVTtBQUNWLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLEtBQUssU0FBUztBQUN6QixPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQztBQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTTtBQUNOLEtBQUs7QUFDTCxJQUFJO0FBQ0osR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsRUFBRSxDQUFDO0FBQ0gsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUN4QyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QixHQUFHLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDN0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNO0FBQ3hDLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU07QUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTTtBQUMxQyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNO0FBQzFDLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU07QUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTTtBQUMxQyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNO0FBQzFDLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU07QUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTTtBQUMxQyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNO0FBQzFDLElBQUk7QUFDSixLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FB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R0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25FLEdBQUc7QUFDSCxFQUFFLENBQUM7QUFDSCxDQUFDLENBQUM7QUFDRjtBQUNBLGlCQUFjLEdBQUcsU0FBUzs7QUNsdkIxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDckMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7QUFDM0MsRUFBRSxPQUFPO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsQ0FBQyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDdkIsQ0FBQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDdEIsQ0FBQyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDeEIsQ0FBQyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDeEIsQ0FBQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDcEIsQ0FBQyxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDckIsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdDLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNsQixHQUFHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxJQUFJLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUN2QyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMzQixLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0IsS0FBSztBQUNMLElBQUksSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLElBQUksSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM5QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLEtBQUssSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzNDLE1BQU0sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNO0FBQ04sS0FBSyxJQUFJLGlCQUFpQixHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksaUJBQWlCLENBQUM7QUFDdkUsS0FBSyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxNQUFNLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBUSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDcEQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNsRCxRQUFRLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUQsUUFBUSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRTtBQUMvQixTQUFTLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN4QyxVQUFVLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRTtBQUMvQixXQUFXLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDbEYsWUFBWSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRCxZQUFZLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLFlBQVk7QUFDWixXQUFXLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQ3ZDLFdBQVcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEUsV0FBVztBQUNYLFVBQVU7QUFDVixTQUFTO0FBQ1QsUUFBUTtBQUNSLE9BQU8sSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQVEsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxPQUFPO0FBQ1AsTUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDM0QsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0QsT0FBTyxLQUFLLElBQUksU0FBUyxJQUFJLFVBQVUsRUFBRTtBQUN6QyxRQUFRLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNsRCxTQUFTLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUM7QUFDbkYsU0FBUztBQUNULFFBQVE7QUFDUixPQUFPO0FBQ1AsTUFBTSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO0FBQ3RDO0FBQ0EsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM3QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7QUFDckMsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QixPQUFPLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzVDLFFBQVEsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQyxRQUFRLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVCLFFBQVEsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDaEQsUUFBUSxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDakMsUUFBUTtBQUNSLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLEdBQUcsTUFBTTtBQUNULEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QixHQUFHLGlCQUFpQixFQUFFLENBQUM7QUFDdkIsR0FBRztBQUNILEVBQUU7QUFDRixDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBQ3ZCLENBQUM7QUFDRDtBQUNBLFNBQVMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRTtBQUNwRCxDQUFDLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNyQixDQUFDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNqQixDQUFDLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBO0FBQ0EsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxFQUFFLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixFQUFFLElBQUksY0FBYyxHQUFHLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDN0MsRUFBRSxJQUFJLGNBQWMsR0FBRyxjQUFjO0FBQ3JDLEdBQUcsYUFBYSxHQUFHLGNBQWMsQ0FBQztBQUNsQyxPQUFPO0FBQ1A7QUFDQSxHQUFHLElBQUksV0FBVyxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUM7QUFDcEQsR0FBRyxJQUFJLFdBQVcsR0FBRyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3JELEdBQUcsSUFBSSxXQUFXLEdBQUcsV0FBVyxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUU7QUFDdkQsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRCxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxNQUFNO0FBQ1YsSUFBSSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUM3QixLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUM1QyxLQUFLLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUk7QUFDSixHQUFHO0FBQ0gsRUFBRTtBQUNGLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDeEMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQTBKRDtBQUNBLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUNwQixDQUFDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNqQixDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsQ0FBQyxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFDRDtBQUNBLFNBQVMsTUFBTSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbkssQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6RCxFQUFFLElBQUksWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxFQUFFLFdBQVcsSUFBSSxZQUFZLENBQUM7QUFDOUIsRUFBRSxlQUFlLElBQUksWUFBWSxDQUFDO0FBQ2xDLEVBQUUsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDbkUsRUFBRSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BGLEVBQUUsSUFBSSxlQUFlLEVBQUU7QUFDdkIsR0FBRyxJQUFJLFlBQVksR0FBRyxZQUFZLEVBQUU7QUFDcEM7QUFDQSxJQUFJLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QyxJQUFJLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDbkQsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3BCLEtBQUssV0FBVyxFQUFFLFdBQVc7QUFDN0IsS0FBSyxlQUFlLEVBQUUsWUFBWTtBQUNsQyxLQUFLLFVBQVUsRUFBRSxTQUFTO0FBQzFCLEtBQUssWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsS0FBSyxlQUFlLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDO0FBQzdELEtBQUssUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLEtBQUssVUFBVSxFQUFFLFNBQVM7QUFDMUIsS0FBSyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsSUFBSSxNQUFNLElBQUksWUFBWSxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDekU7QUFDQSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0E7QUFDQSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDcEIsS0FBSyxXQUFXLEVBQUUsV0FBVztBQUM3QixLQUFLLGVBQWUsRUFBRSxlQUFlO0FBQ3JDLEtBQUssVUFBVSxFQUFFLFNBQVM7QUFDMUIsS0FBSyxZQUFZLEVBQUUsWUFBWTtBQUMvQixLQUFLLGVBQWUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUM7QUFDN0QsS0FBSyxRQUFRLEVBQUUsUUFBUTtBQUN2QixLQUFLLFVBQVUsRUFBRSxTQUFTO0FBQzFCLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLElBQUk7QUFDSixHQUFHO0FBQ0gsRUFBRSxJQUFJLFlBQVksR0FBRyxZQUFZLEVBQUU7QUFDbkMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQixHQUFHLFFBQVEsRUFBRSxDQUFDO0FBQ2QsR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDN0QsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDaEUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsQ0FBQztBQUNuRCxHQUFHLGVBQWUsR0FBRyxZQUFZLENBQUM7QUFDbEMsR0FBRyxNQUFNO0FBQ1QsR0FBRyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQy9CLEdBQUc7QUFDSCxFQUFFO0FBQ0YsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFDRDtBQUNBLFNBQVMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFO0FBQzdFO0FBQ0EsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdEO0FBQ0E7QUFDQSxDQUFDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQztBQUN0RDtBQUNBO0FBQ0EsQ0FBQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDdEIsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNyQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDakIsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNoQixFQUFFLGVBQWUsRUFBRSxDQUFDO0FBQ3BCLEVBQUUsVUFBVSxFQUFFLEVBQUU7QUFDaEIsRUFBRSxZQUFZLEVBQUUsTUFBTTtBQUN0QixFQUFFLGVBQWUsRUFBRSxDQUFDO0FBQ3BCLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDYixFQUFFLFVBQVUsRUFBRSxFQUFFO0FBQ2hCLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDLE9BQU8sS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDbkMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWE7QUFDN0IsR0FBRyxXQUFXO0FBQ2QsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVztBQUNoQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlO0FBQ3BDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVU7QUFDL0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWTtBQUNqQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlO0FBQ3BDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVE7QUFDN0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVTtBQUMvQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVO0FBQy9CLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDZixFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ1YsRUFBRTtBQUNGLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLEVBQUUsUUFBUSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDMUIsRUFBRSxRQUFRLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2RCxHQUFHLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLEdBQUc7QUFDSCxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQUM1RSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUM3TCxFQUFFO0FBQ0YsQ0FBQyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDeEIsQ0FBQyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxFQUFFLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsRUFBRSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxFQUFFO0FBQ3ZDLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7QUFDbkMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLEdBQUc7QUFDSCxFQUFFO0FBQ0YsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ2pJLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvRixDQUFDLElBQUksZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUM3SCxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ3ZHLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFVBQVU7QUFDN0MsRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSCxDQUFDLElBQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsR0FBRyxD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VyxFQUFFO0FBQ3RDLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbkMsUUFBUSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBUSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDckIsUUFBUTtBQUNSO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7QUFDNUMsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsT0FBTyxNQUFNO0FBQ2IsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsT0FBTztBQUNQ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QUFFO0FBQ25GLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUNyRixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO0FBQzNEO0FBQ0E7QUFDQSxFQUFFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN6QixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZCxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUMxQyxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN2QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDL0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxNQUFNO0FBQ1osTUFBTSxLQUFL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LE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRixNQUFNO0FBQ04sS0FBS0EsVUFBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekYsS0FBS0EsVUFBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekY7QUFDQSxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsS0FBSyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxPQUFPLEVBQUUsQ0FBQztBQUNmLEtBQUs7QUFDTCxJQUFJLENBQUM7QUFDTDtBQUNBLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDL0IsS0FBSyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7QUFDeEIsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckQsT0FBTyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO0FB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QUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFO0FBQ3RDO0FBQ0EsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMvRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUdBLFVBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ILElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEdBQUdBLFVBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pILElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztBQUMvQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHQSxVQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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QyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUztBQUNoTSxHQUFHLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlFLE9BQU8sT0FBTyxJQUFJLENBQUM7QUFDbkIsRUFBRSxDQUFDO0FBQ0g7QUFDQSxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ3JELEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDM0IsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUMzQixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5QyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7QUFDNUIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUss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VUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsR0FBRyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQ3RDLEdBQUcsSUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEdBQUdJLFdBQU8sQ0FBQyxJQUFJLENBQUM7QUFDckQsR0FBRyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDakMsR0FBRyxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBR0EsV0FBTyxDQUFDLElBQUksQ0FBQztBQUMxRCxHQUFHLElBQUksTUFBTSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDN0I7QUFDQSxHQUFHLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDN0IsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxJQUFJLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFJLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2QixJQUFJLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDdEMsSUFBSSxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUN2RCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FB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QUFDRCxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO0FBQzVCLEVBQUU7QUFDRixHQUFHLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEIsSUFBSSxJQUFJLENBQUMsMERBQTBELEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9FO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQzFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakYsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDdkIsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNqRixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QixJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ2pGLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakY7QUFDQSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FB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QUFDakQsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQztBQUNBLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RCxFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxRQUFRLEdBQUc7QUFDaEIsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUM7QUFDSCxDQUFDLElBQUksaUNBQWlDLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQzVEO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMzRSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDL0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDbkYsS0FBSyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssU0FBUztBQUNsQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsVUFBVTtBQUNWLE1BQU0sR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0MsTUFBTSxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsTUFBTSxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUN2RixTQUFTLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FB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RyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO0FBQzlELEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLEdBQUcsS0FBSyxHQUFHO0FBQ1gsR0FBRyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO0FBQzlELEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLEdBQUc7QUFDSCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsRUFBRSxDQUFDO0FBQ0g7QUFDQTtBQUNBLENBQUMsSUFBSSxVQUFVLEdBQUcsU0FBUyxFQUFFLEVBQUU7QUFDL0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSTtBQUNyRCxHQUFHLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFF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QUFDbEQsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDN0UsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDMUUsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDbkYsUUFBUSxJQUFJLEVBQUUsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7QUFDL0UsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDaEYsUUFBUSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUUsUUFBUSxNQUFNO0FBQ2QsUUFBUSxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUIsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNsRSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNwRSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzFFLFFBQVEsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RFLFFBQVE7QUFDUjtBQUNBLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0QsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNwRSxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzFFLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDMUUsT0FBTyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7QUFDM0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUN0QyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNyQyxTQUFTLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFD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LElBQUk7QUFDSixHQUFHRixVQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksUUFBUSxDQUFDLFdBQVcsSUFBSSxhQUFhLENBQUMsWUFBWSxLQUFLLEtBQUs7QUFDcEUsS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUMxQixJQUFJLElBQUksUUFBUSxDQUFDLGVBQWUsSUFBSSxhQUFhLENBQUMsUUFBUTtBQUMxRCxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBQzFCLElBQUksSUFBSSxhQUFhLENBQUMsYUFBYSxFQUFFO0FBQ3JDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNqQyxNQUFNLGFBQWEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQzFDLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCLE1BQU07QUFDTixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0YsS0FBSyxNQUFNLElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRTtBQUMxQyxLQUFLLElBQUlBLFVBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QyxNQUFNLGFBQWEsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3hDLE1BQU07QUFDTixVQUFVO0FBQ1YsTUFBTSxJQUFJQSxVQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDNUMsT0FBTyxhQUFhLENBQUMsU0FBUyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsT0FBTyxhQUFhLENBQUMs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QUksR0FBRyxJQUFJLENBQUM7QUFDbEIsRUFBRSxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsRUFBRSxJQUFJLEdBQUdSLFVBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRUEsVUFBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUU7QUFDekMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDMUIsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUNBLFVBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDakY7QUFDQTtBQUNBO0FBQ0EsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hDLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENB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SUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7QUFDeEIsSUFBSSxTQUFTO0FBQ2I7QUFDQSxHQUFHLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUM5QyxHQUFHLElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzFDLEdBQUcsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEUsR0FBRyxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLEdBQUcsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxHQUFHLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CLEdBQUcsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0UsR0FBRyxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdEMsR0FBRyxJQUFJLENBQUMsR0FB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QUFDQSxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUM7QUFDRjtBQUNBLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxDQUFDLENBQUM7QUFDRjtBQUNBLHFCQUFjLEdBQUcsU0FBUzs7QUN6QzFCO0FBQ0E7QUFDQTtBQUNBLENBQUMsSUFBSSxNQUFNO0FBQ1gsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcjFCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzltQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOWtELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDOTBELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcmtELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN4akQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN2K0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNoL0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzk3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0Z0QsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDclQsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyVCxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN4dkMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2gxQixFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMXpDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDNXdELEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzFwRSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM3dkYsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM3bUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcitDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsaEMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDeGtDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0aUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDdmlFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMzeUQsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3hQLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RyRCxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN2NEIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2x4QixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFlLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4WCxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNwZ0MsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMTJCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDOTFCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDL3ZCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy9OLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xSLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy9qQixFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0Z0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDbDdCLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNzQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ25lLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3p1QyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1aUYsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMTVFLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcm5FLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3ZjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy8yQixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNzZCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3pPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzEyQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeHNCLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcnRDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMxc0QsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDaDBFLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNsdUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hYLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMzWCxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMXdDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0b0QsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNubkUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1OEcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3Q3QyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3I5RyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN0a0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMXdDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3gyRCxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDL0UsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2hGLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM3RSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDOS9DLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMzN0QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ25xRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2psQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOXJDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNubEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN2OUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDN2dCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDMVIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDcmhCLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsbUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzV3QixFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1VSxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN6VSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2VSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2ckI7QUFDQTtBQUNBLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hRO0FBQ0EsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEc7QUFDQSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xiO0FBQ0EsSUFBSSxTQUFTLEdBQUcsVUFBVSxTQUFTLEVBQUU7QUFDckMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDZCxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckQsRUFBRSxHQUFH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RSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDMUUsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QixFQUFFLFFBQVEsSUFBSSxDQUFDLElBQUk7QUFDbkIsR0FBRyxLQUFLLFFBQVEsRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsTUFBTTtBQUMxQyxHQUFHLEtBQUssT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNO0FBQ3ZDLEdBQUcsS0FBSyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU07QUFDdEMsR0FBRyxLQUFLLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTTtBQUN0QyxHQUFHLEtBQUssVUFBVSxFQUFFLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RCxHQUFHLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxHQUFHLEtBQUssUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxHQUFHLEtBQUssUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxHQUFHLEtBQUssVUFBVSxFQUFFLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3pELEdBQUcsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDckQsR0FBRyxLQUFLLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMs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QyxHQUFHLEVBQUU7QUFDM0IsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEIsS0FBSyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRTtBQUN6RCxNQUFNLFFBQVEsSUFBSUEsVUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RSxLQUFLLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRTtBQUNyRCxNQUFNLFFBQVEsSUFBSUEsVUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RSxLQUFLLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJRixvQkFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUVFLFVBQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FB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LElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3pDLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQzVDLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNO0FBQzFELE9BQU87QUFDUCxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2QyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25DLEtBQUs7QUFDTCxTQUFTLE9BQU8sUUFBUSxFQUFFO0FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMs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R0FBRyxVQUFVLEtBQUssRUFBRTtBQUNsRCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUNGO0FBQ0EsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsWUFBWTtBQUNuRCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7QUFDMUIsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN2RCxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEcsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDWCxFQUFFO0FBQ0YsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxZQUFZLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxZQUFZO0FBQ2pELENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLENBQUMsQ0FBQztBQUNGO0FBQ0EsWUFBWSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZO0FBQ3RELENBQUMsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkcsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBLFlBQVksQ0FBQyxTQUFTLENBQUMsZUFB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QUFHLElBQUlBLG9CQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdEQsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDM0IsSUFBSSxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUU7QUFDakMsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUNFLFVBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQ0EsVUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQy9HLEtBQUs7QUFDTCxHQUFHLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsVUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9GLElBQUksUUFBUSxHQUFHLElBQUlGLG9CQUFlLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRUUsVUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9GLElBQUksUUFBUSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDM0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUNkLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7QUFDbEQ7QUFDQSxLQUFLLElBQUksZ0JBQWdCLEVBQUU7QUFDM0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFN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LENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFDRjtBQUNBLEdBQUcsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xEO0FBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMvRCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDNUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDekMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUI7QUFDQSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEQsRUFBRSxJQUFJLENBQUMsR0FBRztBQUNWLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsWUFB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QUFFLENBQUM7QUFDcEIsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU87QUFDOUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFDMUIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxJQUFJ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QUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BIO0FBQ0EsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRztBQUNBLENB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QUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoTDtBQUNBLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNyQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQzFELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNILEVBQUU7QUFDRixDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFDRjtBQUNBLFFBQVEsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUMxRCxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ1YsQ0FBQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFB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QUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDNUQsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUM1RCxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzVELFlBQVksUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDaEUsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUM1RCxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0FBQ2xFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN4QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsWUFBWSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ2xCLFFBQVEsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELFlBQVksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFB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RUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDVixDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsS0FBSztBQUNYLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDVixDQUFDLEdBQUcsRUFBRSxLQUFLO0FBQ1gsQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUNWLENBQUMsR0FBRyxFQUFFLEtBQUs7QUFDWCxDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUNWLENBQUMsR0FBRyxFQUFFLEtBQUs7QUFDWCxDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsS0FBSztBQUNYLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDVixDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsS0FBSztBQUNYLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDVixDQUFDLEdBQUcsRUFBRSxLQUFLO0FBQ1gsQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUNWLENBQUMsR0FBRyxFQUFFLEtBQUs7QUFDWCxDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUNWLENBQUMsR0FBRyxFQUFFLEtBQUs7QUFDWCxDQUFDLENBQUM7QUFDRjtBQUNBLHFCQUFjLEdBQUcsZUFBZTs7QUN4R2hDLElBQUksY0FBYyxHQUFHLFNBQVMsTUFBTSxFQUFFO0FBQ3RDLENBQUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLFlBQVksRUFBRTtBQUNwQyxDQUFDLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDckMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFELENBQUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNuQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUNaLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QjtBQUNBLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2YsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0E7QUFDQSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7QUFDeEMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRDtBQUNBLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFO0FBQ3JCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbkUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ1osR0FBRztBQUNILEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDWCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDaEQ7QUFDQSxDQUFDLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDWCxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDWCxFQUFFO0FBQ0YsQ0FBQztBQUNEO0FBQ0Esb0JBQWMsR0FBRyxjQUFjOztBQzdEL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFFBQVEsQ0FBQztBQUNiO0FBQ0EsQ0FBQyxXQUFXO0FBRVo7QUFDQSxD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QUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQ7QUFDQSxHQUFHLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDbkIsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCLElBQUksSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsS0FBSyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDaEMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FLE9BQU87QUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDcEQsT0FBTyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0s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QUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxJQUFJLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckUsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUNqRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsSUFBSTtBQUNKLEdBQUc7QUFDSCxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3BELEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxjQUFjLEdBQUc7QUFDdEI7QUFDQSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BCLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEIsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQjtBQUNBLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3hCLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RCLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDdkIsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDM0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDekIsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDM0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDekI7QUFDQSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN4QixFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUMxQixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN4QjtBQUNBLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDL0IsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2pDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM5QixFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUM3QixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUMzQixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25DLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakM7QUFDQTtBQUNBLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEIsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN2QixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN2QjtBQUNBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZCLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUM1QixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDL0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzdCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM3QixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2pDO0FBQ0E7QUFDQSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUMzQjtBQUNBLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3RCLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMxQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQy9CLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDL0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzVCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM1QixFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDOUIsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzlCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM1QixFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2pDLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDcEMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN0QyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25DLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQy9CLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM3QixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25DLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xDO0FBQ0EsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDekIsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDdkIsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDdkIsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzdCLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNoQyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xDLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3ZDO0FBQ0EsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDMUIsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDM0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyQixFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzNCO0FBQ0E7QUFDQSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN6QixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN2QixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM1QixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDNUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzVCLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzNCLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3pCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDOUIsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDN0IsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDM0IsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3JDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFB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QUMsV0FBVyxHQUFHLFdBQVc7QUFDL0M7QUFDQSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxJQUFJLElBQUksQ0FBQyxlQUFl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